virtual-react-json-diff 1.0.3 → 1.0.4

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 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/memoize-one/dist/memoize-one.esm.js","../../node_modules/react-window/dist/index.esm.js","../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../node_modules/json-diff-kit/dist/differ.js","../../node_modules/json-diff-kit/dist/viewer.js","../../../src/components/DiffViewer/components/DiffMinimap.tsx","../../../src/components/DiffViewer/utils/diffSearchUtils.ts","../../../src/components/DiffViewer/utils/preprocessDiff.ts","../../../src/components/SearchIcon.tsx","../../node_modules/style-inject/dist/style-inject.es.js","../../../src/components/DiffViewer/components/VirtualizedDiffViewer.tsx"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","// Keep only the fields that are valid in JSON\nconst cleanFields = (obj)=>{\n if (typeof obj === 'undefined' || obj === null || typeof obj === 'bigint' || Number.isNaN(obj) || obj === Infinity || obj === -Infinity) {\n return undefined;\n }\n if ([\n 'string',\n 'number',\n 'boolean'\n ].includes(typeof obj)) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(cleanFields).filter((t)=>typeof t !== 'undefined');\n }\n const result = {};\n for (const [key, value] of Object.entries(obj)){\n const cleaned = cleanFields(value);\n if (typeof cleaned !== 'undefined') {\n result[key] = cleaned;\n }\n }\n return result;\n};\n\n/**\n * If we use `a.push(...b)`, it will result in `Maximum call stack size exceeded` error.\n * The reason is unclear, it may be a bug of V8, so we should implement a push method by ourselves.\n */ const concat = (a, b, prependEach = false)=>{\n if (!Array.isArray(a) || !Array.isArray(b)) {\n throw new Error('Both arguments should be arrays.');\n }\n const lenA = a.length;\n const lenB = b.length;\n const len = lenA + lenB;\n const result = new Array(len);\n if (prependEach) {\n for(let i = 0; i < lenB; i++){\n result[i] = b[lenB - i - 1];\n }\n for(let i = 0; i < lenA; i++){\n result[i + lenB] = a[i];\n }\n return result;\n }\n for(let i = 0; i < lenA; i++){\n result[i] = a[i];\n }\n for(let i = 0; i < lenB; i++){\n result[i + lenA] = b[i];\n }\n return result;\n};\n\nconst detectCircular = (value, map = new Map())=>{\n // primitive types should not be checked\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // value has appeared\n if (map.has(value)) {\n return true;\n }\n map.set(value, true);\n // value is an array\n if (Array.isArray(value)) {\n for(let i = 0; i < value.length; i++){\n if (detectCircular(value[i], map)) {\n return true;\n }\n }\n return false;\n }\n // value is an object\n for(const key in value){\n if (detectCircular(value[key], map)) {\n return true;\n }\n }\n return false;\n};\n\n// https://gist.github.com/RexSkz/c4f78a6e143e9008f9c717623b7a2bc1\nconst stringify = (obj, replacer, space, depth = Infinity, undefinedBehavior)=>{\n if (!obj || typeof obj !== 'object') {\n let result = undefined;\n if (!Number.isNaN(obj) && obj !== Infinity && obj !== -Infinity && typeof obj !== 'bigint') {\n result = JSON.stringify(obj, replacer, space);\n }\n if (result === undefined) {\n switch(undefinedBehavior){\n case UndefinedBehavior.throw:\n throw new Error(`Value is not valid in JSON, got ${String(obj)}`);\n case UndefinedBehavior.stringify:\n return stringifyInvalidValue(obj);\n default:\n throw new Error(`Should not reach here, please report this bug.`);\n }\n }\n return result;\n }\n const t = depth < 1 ? '\"...\"' : Array.isArray(obj) ? `[${obj.map((v)=>stringify(v, replacer, space, depth - 1, undefinedBehavior)).join(',')}]` : `{${Object.keys(obj).map((k)=>`\"${k}\": ${stringify(obj[k], replacer, space, depth - 1, undefinedBehavior)}`).join(', ')}}`;\n return JSON.stringify(JSON.parse(t), replacer, space);\n};\nconst stringifyInvalidValue = (value)=>{\n if (value === undefined) {\n return 'undefined';\n }\n if (value === Infinity) {\n return 'Infinity';\n }\n if (value === -Infinity) {\n return '-Infinity';\n }\n if (Number.isNaN(value)) {\n return 'NaN';\n }\n if (typeof value === 'bigint') {\n return `${value}n`;\n }\n return String(value);\n};\n\nconst formatValue = (value, depth = Infinity, pretty = false, undefinedBehavior = UndefinedBehavior.stringify)=>{\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value) || typeof value === 'object') {\n return stringify(value, undefined, pretty ? 1 : undefined, depth, undefinedBehavior);\n }\n return stringify(value, undefined, undefined, undefined, undefinedBehavior);\n};\n\nconst getOrderByType = (value)=>{\n if (typeof value === 'boolean') {\n return 0;\n }\n if (typeof value === 'number') {\n return 1;\n }\n if (typeof value === 'string') {\n return 2;\n }\n if (value === null) {\n return 3;\n }\n if (Array.isArray(value)) {\n return 4;\n }\n if (typeof value === 'object') {\n return 5;\n }\n if (typeof value === 'symbol') {\n return 6;\n }\n if (typeof value === 'function') {\n return 7;\n }\n if (typeof value === 'bigint') {\n return 8;\n }\n return -1;\n};\n/**\n * The compare function to correct the order for \"array\" or \"object\":\n * - The order for 2 values with different types are: boolean, number, string, null, array, object.\n * - The order for 2 values with the same type is according to the type:\n * - For boolean, number, string: use the `<` sign.\n * - For array and object: preserve the original order (or do we have a better idea?)\n */ const cmp = (a, b, options)=>{\n const orderByMapA = options.keyOrdersMap?.get(a);\n const orderByMapB = options.keyOrdersMap?.get(b);\n if (orderByMapA !== undefined && orderByMapB !== undefined) {\n return orderByMapA - orderByMapB;\n }\n const orderByTypeA = getOrderByType(a);\n const orderByTypeB = getOrderByType(b);\n if (orderByTypeA !== orderByTypeB) {\n return orderByTypeA - orderByTypeB;\n }\n if (a === null && b === null || Array.isArray(a) && Array.isArray(b) || orderByTypeA === 5 && orderByTypeB === 5) {\n return 0;\n }\n switch(typeof a){\n case 'number':\n if (Number.isNaN(a) && Number.isNaN(b) || a === Infinity && b === Infinity || a === -Infinity && b === -Infinity) {\n return 0;\n }\n return a - b;\n case 'string':\n if (options.ignoreCase) {\n a = a.toLowerCase();\n b = b.toLowerCase();\n }\n return a < b ? -1 : a > b ? 1 : 0;\n case 'boolean':\n return +a - +b;\n case 'symbol':\n case 'function':\n return String(a).localeCompare(String(b));\n }\n if (typeof a === 'bigint' && typeof b === 'bigint') {\n const result = BigInt(a) - BigInt(b);\n return result < 0 ? -1 : result > 0 ? 1 : 0;\n }\n return String(a).localeCompare(String(b));\n};\n\nconst getType = (value)=>{\n if (Array.isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n};\n\nconst prettyAppendLines = (linesLeft, linesRight, keyLeft, keyRight, valueLeft, valueRight, level, options)=>{\n const valueCmpOptions = {\n ignoreCase: options.ignoreCase\n };\n const _resultLeft = formatValue(valueLeft, options.maxDepth, true, options.undefinedBehavior).split('\\n');\n const _resultRight = formatValue(valueRight, options.maxDepth, true, options.undefinedBehavior).split('\\n');\n if (cmp(valueLeft, valueRight, valueCmpOptions) !== 0) {\n if (options.showModifications) {\n const maxLines = Math.max(_resultLeft.length, _resultRight.length);\n for(let i = _resultLeft.length; i < maxLines; i++){\n _resultLeft.push('');\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n _resultRight.push('');\n }\n linesLeft.push({\n level,\n type: 'modify',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'modify',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = _resultLeft.length; i < maxLines; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n linesRight.push({\n level,\n type: 'modify',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'modify',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else {\n linesLeft.push({\n level,\n type: 'remove',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = 0; i < _resultRight.length; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n for(let i = 0; i < _resultLeft.length; i++){\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n linesRight.push({\n level,\n type: 'add',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n } else {\n const maxLines = Math.max(_resultLeft.length, _resultRight.length);\n for(let i = _resultLeft.length; i < maxLines; i++){\n _resultLeft.push('');\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n _resultRight.push('');\n }\n linesLeft.push({\n level,\n type: 'equal',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'equal',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n linesRight.push({\n level,\n type: 'equal',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'equal',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n};\n\nconst sortKeys = (arr, options)=>{\n return arr.sort((a, b)=>cmp(a, b, {\n ignoreCase: options.ignoreCaseForKey\n }));\n};\n\nconst diffObject = (lhs, rhs, level = 1, options, arrayDiffFunc)=>{\n if (level > (options.maxDepth || Infinity)) {\n return [\n [\n {\n level,\n type: 'equal',\n text: '...'\n }\n ],\n [\n {\n level,\n type: 'equal',\n text: '...'\n }\n ]\n ];\n }\n let linesLeft = [];\n let linesRight = [];\n if (lhs === null && rhs === null || lhs === undefined && rhs === undefined) {\n return [\n linesLeft,\n linesRight\n ];\n } else if (lhs === null || lhs === undefined) {\n const addedLines = stringify(rhs, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n return [\n linesLeft,\n linesRight\n ];\n } else if (rhs === null || rhs === undefined) {\n const addedLines = stringify(lhs, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n return [\n linesLeft,\n linesRight\n ];\n }\n const keysLeft = Object.keys(lhs);\n const keysRight = Object.keys(rhs);\n const keyOrdersMap = new Map();\n if (!options.preserveKeyOrder) {\n sortKeys(keysLeft, options);\n sortKeys(keysRight, options);\n } else if (options.preserveKeyOrder === 'before') {\n for(let i = 0; i < keysLeft.length; i++){\n keyOrdersMap.set(keysLeft[i], i);\n }\n for(let i = 0; i < keysRight.length; i++){\n if (!keyOrdersMap.has(keysRight[i])) {\n keyOrdersMap.set(keysRight[i], keysLeft.length + i);\n }\n }\n keysRight.sort((a, b)=>keyOrdersMap.get(a) - keyOrdersMap.get(b));\n } else if (options.preserveKeyOrder === 'after') {\n for(let i = 0; i < keysRight.length; i++){\n keyOrdersMap.set(keysRight[i], i);\n }\n for(let i = 0; i < keysLeft.length; i++){\n if (!keyOrdersMap.has(keysLeft[i])) {\n keyOrdersMap.set(keysLeft[i], keysRight.length + i);\n }\n }\n keysLeft.sort((a, b)=>keyOrdersMap.get(a) - keyOrdersMap.get(b));\n }\n const keysCmpOptions = {\n ignoreCase: options.ignoreCaseForKey,\n keyOrdersMap\n };\n while(keysLeft.length || keysRight.length){\n const keyLeft = keysLeft[0];\n const keyRight = keysRight[0];\n const keyCmpResult = cmp(keyLeft, keyRight, keysCmpOptions);\n if (keyCmpResult === 0) {\n if (getType(lhs[keyLeft]) !== getType(rhs[keyRight])) {\n prettyAppendLines(linesLeft, linesRight, keyLeft, keyRight, lhs[keyLeft], rhs[keyRight], level, options);\n } else if (Array.isArray(lhs[keyLeft])) {\n const arrLeft = [\n ...lhs[keyLeft]\n ];\n const arrRight = [\n ...rhs[keyRight]\n ];\n const [resLeft, resRight] = arrayDiffFunc(arrLeft, arrRight, keyLeft, keyRight, level, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else if (lhs[keyLeft] === null) {\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": null`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": null`\n });\n } else if (typeof lhs[keyLeft] === 'object') {\n const result = diffObject(lhs[keyLeft], rhs[keyRight], level + 1, options, arrayDiffFunc);\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": {`\n });\n linesLeft = concat(linesLeft, result[0]);\n linesLeft.push({\n level,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": {`\n });\n linesRight = concat(linesRight, result[1]);\n linesRight.push({\n level,\n type: 'equal',\n text: '}'\n });\n } else {\n prettyAppendLines(linesLeft, linesRight, keyLeft, keyRight, lhs[keyLeft], rhs[keyRight], level, options);\n }\n } else if (keysLeft.length && keysRight.length) {\n if (keyCmpResult < 0) {\n const addedLines = stringify(lhs[keyLeft], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: i ? text : `\"${keyLeft}\": ${text}`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else {\n const addedLines = stringify(rhs[keyRight], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: i ? text : `\"${keyRight}\": ${text}`\n });\n }\n }\n } else if (keysLeft.length) {\n const addedLines = stringify(lhs[keyLeft], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: i ? text : `\"${keyLeft}\": ${text}`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else if (keysRight.length) {\n const addedLines = stringify(rhs[keyRight], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: i ? text : `\"${keyRight}\": ${text}`\n });\n }\n }\n if (!keyLeft) {\n keysRight.shift();\n } else if (!keyRight) {\n keysLeft.shift();\n } else if (keyCmpResult === 0) {\n keysLeft.shift();\n keysRight.shift();\n } else if (keyCmpResult < 0) {\n keysLeft.shift();\n } else {\n keysRight.shift();\n }\n }\n if (linesLeft.length !== linesRight.length) {\n throw new Error('Diff error: length not match for left & right, please report a bug with your data.');\n }\n return [\n linesLeft,\n linesRight\n ];\n};\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */ function listCacheClear$1() {\n this.__data__ = [];\n this.size = 0;\n}\nvar _listCacheClear = listCacheClear$1;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */ function eq$2(value, other) {\n return value === other || value !== value && other !== other;\n}\nvar eq_1 = eq$2;\n\nvar eq$1 = eq_1;\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */ function assocIndexOf$4(array, key) {\n var length = array.length;\n while(length--){\n if (eq$1(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\nvar _assocIndexOf = assocIndexOf$4;\n\nvar assocIndexOf$3 = _assocIndexOf;\n/** Used for built-in method references. */ var arrayProto = Array.prototype;\n/** Built-in value references. */ var splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function listCacheDelete$1(key) {\n var data = this.__data__, index = assocIndexOf$3(data, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\nvar _listCacheDelete = listCacheDelete$1;\n\nvar assocIndexOf$2 = _assocIndexOf;\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function listCacheGet$1(key) {\n var data = this.__data__, index = assocIndexOf$2(data, key);\n return index < 0 ? undefined : data[index][1];\n}\nvar _listCacheGet = listCacheGet$1;\n\nvar assocIndexOf$1 = _assocIndexOf;\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function listCacheHas$1(key) {\n return assocIndexOf$1(this.__data__, key) > -1;\n}\nvar _listCacheHas = listCacheHas$1;\n\nvar assocIndexOf = _assocIndexOf;\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */ function listCacheSet$1(key, value) {\n var data = this.__data__, index = assocIndexOf(data, key);\n if (index < 0) {\n ++this.size;\n data.push([\n key,\n value\n ]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\nvar _listCacheSet = listCacheSet$1;\n\nvar listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function ListCache$4(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `ListCache`.\nListCache$4.prototype.clear = listCacheClear;\nListCache$4.prototype['delete'] = listCacheDelete;\nListCache$4.prototype.get = listCacheGet;\nListCache$4.prototype.has = listCacheHas;\nListCache$4.prototype.set = listCacheSet;\nvar _ListCache = ListCache$4;\n\nvar ListCache$3 = _ListCache;\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */ function stackClear$1() {\n this.__data__ = new ListCache$3;\n this.size = 0;\n}\nvar _stackClear = stackClear$1;\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function stackDelete$1(key) {\n var data = this.__data__, result = data['delete'](key);\n this.size = data.size;\n return result;\n}\nvar _stackDelete = stackDelete$1;\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function stackGet$1(key) {\n return this.__data__.get(key);\n}\nvar _stackGet = stackGet$1;\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function stackHas$1(key) {\n return this.__data__.has(key);\n}\nvar _stackHas = stackHas$1;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\nvar _freeGlobal = freeGlobal$1;\n\nvar freeGlobal = _freeGlobal;\n/** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */ var root$8 = freeGlobal || freeSelf || Function('return this')();\nvar _root = root$8;\n\nvar root$7 = _root;\n/** Built-in value references. */ var Symbol$3 = root$7.Symbol;\nvar _Symbol = Symbol$3;\n\nvar Symbol$2 = _Symbol;\n/** Used for built-in method references. */ var objectProto$b = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$8 = objectProto$b.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */ var nativeObjectToString$1 = objectProto$b.toString;\n/** Built-in value references. */ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */ function getRawTag$1(value) {\n var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n try {\n value[symToStringTag$1] = undefined;\n var unmasked = true;\n } catch (e) {}\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n}\nvar _getRawTag = getRawTag$1;\n\n/** Used for built-in method references. */ var objectProto$a = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */ var nativeObjectToString = objectProto$a.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */ function objectToString$1(value) {\n return nativeObjectToString.call(value);\n}\nvar _objectToString = objectToString$1;\n\nvar Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;\n/** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]';\n/** Built-in value references. */ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */ function baseGetTag$4(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nvar _baseGetTag = baseGetTag$4;\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */ function isObject$2(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\nvar isObject_1 = isObject$2;\n\nvar baseGetTag$3 = _baseGetTag, isObject$1 = isObject_1;\n/** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */ function isFunction$2(value) {\n if (!isObject$1(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag$3(value);\n return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar isFunction_1 = isFunction$2;\n\nvar root$6 = _root;\n/** Used to detect overreaching core-js shims. */ var coreJsData$1 = root$6['__core-js_shared__'];\nvar _coreJsData = coreJsData$1;\n\nvar coreJsData = _coreJsData;\n/** Used to detect methods masquerading as native. */ var maskSrcKey = function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */ function isMasked$1(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\nvar _isMasked = isMasked$1;\n\n/** Used for built-in method references. */ var funcProto$1 = Function.prototype;\n/** Used to resolve the decompiled source of functions. */ var funcToString$1 = funcProto$1.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */ function toSource$2(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n}\nvar _toSource = toSource$2;\n\nvar isFunction$1 = isFunction_1, isMasked = _isMasked, isObject = isObject_1, toSource$1 = _toSource;\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */ var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */ var funcProto = Function.prototype, objectProto$9 = Object.prototype;\n/** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString;\n/** Used to check objects for own properties. */ var hasOwnProperty$7 = objectProto$9.hasOwnProperty;\n/** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty$7).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */ function baseIsNative$1(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction$1(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource$1(value));\n}\nvar _baseIsNative = baseIsNative$1;\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */ function getValue$1(object, key) {\n return object == null ? undefined : object[key];\n}\nvar _getValue = getValue$1;\n\nvar baseIsNative = _baseIsNative, getValue = _getValue;\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */ function getNative$6(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\nvar _getNative = getNative$6;\n\nvar getNative$5 = _getNative, root$5 = _root;\n/* Built-in method references that are verified to be native. */ var Map$4 = getNative$5(root$5, 'Map');\nvar _Map = Map$4;\n\nvar getNative$4 = _getNative;\n/* Built-in method references that are verified to be native. */ var nativeCreate$4 = getNative$4(Object, 'create');\nvar _nativeCreate = nativeCreate$4;\n\nvar nativeCreate$3 = _nativeCreate;\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */ function hashClear$1() {\n this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};\n this.size = 0;\n}\nvar _hashClear = hashClear$1;\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function hashDelete$1(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\nvar _hashDelete = hashDelete$1;\n\nvar nativeCreate$2 = _nativeCreate;\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$2 = '__lodash_hash_undefined__';\n/** Used for built-in method references. */ var objectProto$8 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$6 = objectProto$8.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function hashGet$1(key) {\n var data = this.__data__;\n if (nativeCreate$2) {\n var result = data[key];\n return result === HASH_UNDEFINED$2 ? undefined : result;\n }\n return hasOwnProperty$6.call(data, key) ? data[key] : undefined;\n}\nvar _hashGet = hashGet$1;\n\nvar nativeCreate$1 = _nativeCreate;\n/** Used for built-in method references. */ var objectProto$7 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$5 = objectProto$7.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function hashHas$1(key) {\n var data = this.__data__;\n return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$5.call(data, key);\n}\nvar _hashHas = hashHas$1;\n\nvar nativeCreate = _nativeCreate;\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */ function hashSet$1(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED$1 : value;\n return this;\n}\nvar _hashSet = hashSet$1;\n\nvar hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function Hash$1(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `Hash`.\nHash$1.prototype.clear = hashClear;\nHash$1.prototype['delete'] = hashDelete;\nHash$1.prototype.get = hashGet;\nHash$1.prototype.has = hashHas;\nHash$1.prototype.set = hashSet;\nvar _Hash = Hash$1;\n\nvar Hash = _Hash, ListCache$2 = _ListCache, Map$3 = _Map;\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */ function mapCacheClear$1() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map$3 || ListCache$2),\n 'string': new Hash\n };\n}\nvar _mapCacheClear = mapCacheClear$1;\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */ function isKeyable$1(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\nvar _isKeyable = isKeyable$1;\n\nvar isKeyable = _isKeyable;\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */ function getMapData$4(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\nvar _getMapData = getMapData$4;\n\nvar getMapData$3 = _getMapData;\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function mapCacheDelete$1(key) {\n var result = getMapData$3(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\nvar _mapCacheDelete = mapCacheDelete$1;\n\nvar getMapData$2 = _getMapData;\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function mapCacheGet$1(key) {\n return getMapData$2(this, key).get(key);\n}\nvar _mapCacheGet = mapCacheGet$1;\n\nvar getMapData$1 = _getMapData;\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function mapCacheHas$1(key) {\n return getMapData$1(this, key).has(key);\n}\nvar _mapCacheHas = mapCacheHas$1;\n\nvar getMapData = _getMapData;\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */ function mapCacheSet$1(key, value) {\n var data = getMapData(this, key), size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\nvar _mapCacheSet = mapCacheSet$1;\n\nvar mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function MapCache$2(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `MapCache`.\nMapCache$2.prototype.clear = mapCacheClear;\nMapCache$2.prototype['delete'] = mapCacheDelete;\nMapCache$2.prototype.get = mapCacheGet;\nMapCache$2.prototype.has = mapCacheHas;\nMapCache$2.prototype.set = mapCacheSet;\nvar _MapCache = MapCache$2;\n\nvar ListCache$1 = _ListCache, Map$2 = _Map, MapCache$1 = _MapCache;\n/** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */ function stackSet$1(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache$1) {\n var pairs = data.__data__;\n if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([\n key,\n value\n ]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache$1(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\nvar _stackSet = stackSet$1;\n\nvar ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function Stack$1(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n// Add methods to `Stack`.\nStack$1.prototype.clear = stackClear;\nStack$1.prototype['delete'] = stackDelete;\nStack$1.prototype.get = stackGet;\nStack$1.prototype.has = stackHas;\nStack$1.prototype.set = stackSet;\nvar _Stack = Stack$1;\n\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */ function setCacheAdd$1(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\nvar _setCacheAdd = setCacheAdd$1;\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */ function setCacheHas$1(value) {\n return this.__data__.has(value);\n}\nvar _setCacheHas = setCacheHas$1;\n\nvar MapCache = _MapCache, setCacheAdd = _setCacheAdd, setCacheHas = _setCacheHas;\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */ function SetCache$1(values) {\n var index = -1, length = values == null ? 0 : values.length;\n this.__data__ = new MapCache;\n while(++index < length){\n this.add(values[index]);\n }\n}\n// Add methods to `SetCache`.\nSetCache$1.prototype.add = SetCache$1.prototype.push = setCacheAdd;\nSetCache$1.prototype.has = setCacheHas;\nvar _SetCache = SetCache$1;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */ function arraySome$1(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length;\n while(++index < length){\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\nvar _arraySome = arraySome$1;\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function cacheHas$1(cache, key) {\n return cache.has(key);\n}\nvar _cacheHas = cacheHas$1;\n\nvar SetCache = _SetCache, arraySome = _arraySome, cacheHas = _cacheHas;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$3 = 1, COMPARE_UNORDERED_FLAG$1 = 2;\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */ function equalArrays$2(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, arrLength = array.length, othLength = other.length;\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$1 ? new SetCache : undefined;\n stack.set(array, other);\n stack.set(other, array);\n // Ignore non-index properties.\n while(++index < arrLength){\n var arrValue = array[index], othValue = other[index];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\nvar _equalArrays = equalArrays$2;\n\nvar root$4 = _root;\n/** Built-in value references. */ var Uint8Array$1 = root$4.Uint8Array;\nvar _Uint8Array = Uint8Array$1;\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */ function mapToArray$1(map) {\n var index = -1, result = Array(map.size);\n map.forEach(function(value, key) {\n result[++index] = [\n key,\n value\n ];\n });\n return result;\n}\nvar _mapToArray = mapToArray$1;\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */ function setToArray$1(set) {\n var index = -1, result = Array(set.size);\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\nvar _setToArray = setToArray$1;\n\nvar Symbol = _Symbol, Uint8Array = _Uint8Array, eq = eq_1, equalArrays$1 = _equalArrays, mapToArray = _mapToArray, setToArray = _setToArray;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$2 = 1, COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */ var boolTag$1 = '[object Boolean]', dateTag$1 = '[object Date]', errorTag$1 = '[object Error]', mapTag$2 = '[object Map]', numberTag$1 = '[object Number]', regexpTag$1 = '[object RegExp]', setTag$2 = '[object Set]', stringTag$1 = '[object String]', symbolTag = '[object Symbol]';\nvar arrayBufferTag$1 = '[object ArrayBuffer]', dataViewTag$2 = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function equalByTag$1(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch(tag){\n case dataViewTag$2:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n case arrayBufferTag$1:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n case boolTag$1:\n case dateTag$1:\n case numberTag$1:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n case errorTag$1:\n return object.name == other.name && object.message == other.message;\n case regexpTag$1:\n case stringTag$1:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n case mapTag$2:\n var convert = mapToArray;\n case setTag$2:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2;\n convert || (convert = setToArray);\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays$1(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\nvar _equalByTag = equalByTag$1;\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */ function arrayPush$1(array, values) {\n var index = -1, length = values.length, offset = array.length;\n while(++index < length){\n array[offset + index] = values[index];\n }\n return array;\n}\nvar _arrayPush = arrayPush$1;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */ var isArray$3 = Array.isArray;\nvar isArray_1 = isArray$3;\n\nvar arrayPush = _arrayPush, isArray$2 = isArray_1;\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */ function baseGetAllKeys$1(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray$2(object) ? result : arrayPush(result, symbolsFunc(object));\n}\nvar _baseGetAllKeys = baseGetAllKeys$1;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */ function arrayFilter$1(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n while(++index < length){\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\nvar _arrayFilter = arrayFilter$1;\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */ function stubArray$1() {\n return [];\n}\nvar stubArray_1 = stubArray$1;\n\nvar arrayFilter = _arrayFilter, stubArray = stubArray_1;\n/** Used for built-in method references. */ var objectProto$6 = Object.prototype;\n/** Built-in value references. */ var propertyIsEnumerable$1 = objectProto$6.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */ var getSymbols$1 = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable$1.call(object, symbol);\n });\n};\nvar _getSymbols = getSymbols$1;\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */ function baseTimes$1(n, iteratee) {\n var index = -1, result = Array(n);\n while(++index < n){\n result[index] = iteratee(index);\n }\n return result;\n}\nvar _baseTimes = baseTimes$1;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */ function isObjectLike$4(value) {\n return value != null && typeof value == 'object';\n}\nvar isObjectLike_1 = isObjectLike$4;\n\nvar baseGetTag$2 = _baseGetTag, isObjectLike$3 = isObjectLike_1;\n/** `Object#toString` result references. */ var argsTag$2 = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */ function baseIsArguments$1(value) {\n return isObjectLike$3(value) && baseGetTag$2(value) == argsTag$2;\n}\nvar _baseIsArguments = baseIsArguments$1;\n\nvar baseIsArguments = _baseIsArguments, isObjectLike$2 = isObjectLike_1;\n/** Used for built-in method references. */ var objectProto$5 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$4 = objectProto$5.hasOwnProperty;\n/** Built-in value references. */ var propertyIsEnumerable = objectProto$5.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */ var isArguments$1 = baseIsArguments(function() {\n return arguments;\n}()) ? baseIsArguments : function(value) {\n return isObjectLike$2(value) && hasOwnProperty$4.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\nvar isArguments_1 = isArguments$1;\n\nvar isBuffer$2 = {exports: {}};\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */ function stubFalse() {\n return false;\n}\nvar stubFalse_1 = stubFalse;\n\n(function(module, exports) {\n var root = _root, stubFalse = stubFalse_1;\n /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined;\n /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */ var isBuffer = nativeIsBuffer || stubFalse;\n module.exports = isBuffer;\n})(isBuffer$2, isBuffer$2.exports);\n\n/** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991;\n/** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */ function isIndex$1(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER$1 : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\nvar _isIndex = isIndex$1;\n\n/** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */ function isLength$2(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nvar isLength_1 = isLength$2;\n\nvar baseGetTag$1 = _baseGetTag, isLength$1 = isLength_1, isObjectLike$1 = isObjectLike_1;\n/** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]', arrayTag$1 = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag$1 = '[object Map]', numberTag = '[object Number]', objectTag$2 = '[object Object]', regexpTag = '[object RegExp]', setTag$1 = '[object Set]', stringTag = '[object String]', weakMapTag$1 = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]', dataViewTag$1 = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = typedArrayTags[objectTag$2] = typedArrayTags[regexpTag] = typedArrayTags[setTag$1] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag$1] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */ function baseIsTypedArray$1(value) {\n return isObjectLike$1(value) && isLength$1(value.length) && !!typedArrayTags[baseGetTag$1(value)];\n}\nvar _baseIsTypedArray = baseIsTypedArray$1;\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */ function baseUnary$1(func) {\n return function(value) {\n return func(value);\n };\n}\nvar _baseUnary = baseUnary$1;\n\nvar _nodeUtil = {exports: {}};\n\n(function(module, exports) {\n var freeGlobal = _freeGlobal;\n /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process;\n /** Used to access faster Node.js helpers. */ var nodeUtil = function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n if (types) {\n return types;\n }\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }();\n module.exports = nodeUtil;\n})(_nodeUtil, _nodeUtil.exports);\n\nvar baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtil.exports;\n/* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */ var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nvar isTypedArray_1 = isTypedArray$2;\n\nvar baseTimes = _baseTimes, isArguments = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBuffer$2.exports, isIndex = _isIndex, isTypedArray$1 = isTypedArray_1;\n/** Used for built-in method references. */ var objectProto$4 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$4.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */ function arrayLikeKeys$1(value, inherited) {\n var isArr = isArray$1(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n for(var key in value){\n if ((inherited || hasOwnProperty$3.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n (key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\nvar _arrayLikeKeys = arrayLikeKeys$1;\n\n/** Used for built-in method references. */ var objectProto$3 = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */ function isPrototype$1(value) {\n var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$3;\n return value === proto;\n}\nvar _isPrototype = isPrototype$1;\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */ function overArg$1(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\nvar _overArg = overArg$1;\n\nvar overArg = _overArg;\n/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys$1 = overArg(Object.keys, Object);\nvar _nativeKeys = nativeKeys$1;\n\nvar isPrototype = _isPrototype, nativeKeys = _nativeKeys;\n/** Used for built-in method references. */ var objectProto$2 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$2.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */ function baseKeys$1(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for(var key in Object(object)){\n if (hasOwnProperty$2.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\nvar _baseKeys = baseKeys$1;\n\nvar isFunction = isFunction_1, isLength = isLength_1;\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */ function isArrayLike$1(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\nvar isArrayLike_1 = isArrayLike$1;\n\nvar arrayLikeKeys = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike = isArrayLike_1;\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */ function keys$1(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\nvar keys_1 = keys$1;\n\nvar baseGetAllKeys = _baseGetAllKeys, getSymbols = _getSymbols, keys = keys_1;\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */ function getAllKeys$1(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\nvar _getAllKeys = getAllKeys$1;\n\nvar getAllKeys = _getAllKeys;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$1 = 1;\n/** Used for built-in method references. */ var objectProto$1 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$1.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function equalObjects$1(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while(index--){\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n while(++index < objLength){\n key = objProps[index];\n var objValue = object[key], othValue = other[key];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor, othCtor = other.constructor;\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\nvar _equalObjects = equalObjects$1;\n\nvar getNative$3 = _getNative, root$3 = _root;\n/* Built-in method references that are verified to be native. */ var DataView$1 = getNative$3(root$3, 'DataView');\nvar _DataView = DataView$1;\n\nvar getNative$2 = _getNative, root$2 = _root;\n/* Built-in method references that are verified to be native. */ var Promise$2 = getNative$2(root$2, 'Promise');\nvar _Promise = Promise$2;\n\nvar getNative$1 = _getNative, root$1 = _root;\n/* Built-in method references that are verified to be native. */ var Set$2 = getNative$1(root$1, 'Set');\nvar _Set = Set$2;\n\nvar getNative = _getNative, root = _root;\n/* Built-in method references that are verified to be native. */ var WeakMap$1 = getNative(root, 'WeakMap');\nvar _WeakMap = WeakMap$1;\n\nvar DataView = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap = _WeakMap, baseGetTag = _baseGetTag, toSource = _toSource;\n/** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag$1 = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */ var getTag$1 = baseGetTag;\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif (DataView && getTag$1(new DataView(new ArrayBuffer(1))) != dataViewTag || Map$1 && getTag$1(new Map$1) != mapTag || Promise$1 && getTag$1(Promise$1.resolve()) != promiseTag || Set$1 && getTag$1(new Set$1) != setTag || WeakMap && getTag$1(new WeakMap) != weakMapTag) {\n getTag$1 = function(value) {\n var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : '';\n if (ctorString) {\n switch(ctorString){\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n}\nvar _getTag = getTag$1;\n\nvar Stack = _Stack, equalArrays = _equalArrays, equalByTag = _equalByTag, equalObjects = _equalObjects, getTag = _getTag, isArray = isArray_1, isBuffer = isBuffer$2.exports, isTypedArray = isTypedArray_1;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]';\n/** Used for built-in method references. */ var objectProto = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function baseIsEqualDeep$1(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\nvar _baseIsEqualDeep = baseIsEqualDeep$1;\n\nvar baseIsEqualDeep = _baseIsEqualDeep, isObjectLike = isObjectLike_1;\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */ function baseIsEqual$1(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual$1, stack);\n}\nvar _baseIsEqual = baseIsEqual$1;\n\nvar baseIsEqual = _baseIsEqual;\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */ function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\nvar isEqualWith_1 = isEqualWith;\n\nconst isEqual = (a, b, options)=>{\n if (options.ignoreCase) {\n return typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase();\n }\n if (typeof a === 'symbol' && typeof b === 'symbol') {\n return a.toString() === b.toString();\n }\n if (options.recursiveEqual) {\n return isEqualWith_1(a, b, (a, b)=>options.ignoreCase ? typeof a === 'string' && typeof b === 'string' ? a.toLowerCase() === b.toLowerCase() : undefined : undefined);\n }\n return a === b;\n};\n\nconst shallowSimilarity = (left, right)=>{\n if (left === right) {\n return 1;\n }\n if (left === null || right === null) {\n return 0;\n }\n if (typeof left !== 'object' || typeof right !== 'object') {\n return 0;\n }\n let intersection = 0;\n for(const key in left){\n if (Object.prototype.hasOwnProperty.call(left, key) && Object.prototype.hasOwnProperty.call(right, key) && left[key] === right[key]) {\n intersection++;\n }\n }\n return Math.max(intersection / Object.keys(left).length, intersection / Object.keys(right).length);\n};\n\n// Shared utility for array diff\nconst addArrayOpeningBrackets = (linesLeft, linesRight, keyLeft, keyRight, level)=>{\n if (keyLeft && keyRight) {\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": [`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": [`\n });\n } else {\n linesLeft.push({\n level,\n type: 'equal',\n text: '['\n });\n linesRight.push({\n level,\n type: 'equal',\n text: '['\n });\n }\n};\nconst addArrayClosingBrackets = (linesLeft, linesRight, level)=>{\n linesLeft.push({\n level,\n type: 'equal',\n text: ']'\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ']'\n });\n};\nconst addMaxDepthPlaceholder = (linesLeft, linesRight, level)=>{\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '...'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '...'\n });\n};\n\nconst lcs = (arrLeft, arrRight, keyLeft, keyRight, level, options)=>{\n const f = Array(arrLeft.length + 1).fill(0).map(()=>Array(arrRight.length + 1).fill(0));\n const backtrack = Array(arrLeft.length + 1).fill(0).map(()=>Array(arrRight.length + 1).fill(0));\n for(let i = 1; i <= arrLeft.length; i++){\n backtrack[i][0] = 'up';\n }\n for(let j = 1; j <= arrRight.length; j++){\n backtrack[0][j] = 'left';\n }\n for(let i = 1; i <= arrLeft.length; i++){\n for(let j = 1; j <= arrRight.length; j++){\n const typeI = getType(arrLeft[i - 1]);\n const typeJ = getType(arrRight[j - 1]);\n if (typeI === typeJ && (typeI === 'array' || typeI === 'object')) {\n if (options.recursiveEqual) {\n if (isEqual(arrLeft[i - 1], arrRight[j - 1], options) || shallowSimilarity(arrLeft[i - 1], arrRight[j - 1]) > 0.5) {\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n } else if (f[i - 1][j] >= f[i][j - 1]) {\n f[i][j] = f[i - 1][j];\n backtrack[i][j] = 'up';\n } else {\n f[i][j] = f[i][j - 1];\n backtrack[i][j] = 'left';\n }\n } else {\n // this is a diff-specific logic, when 2 values are both arrays or both objects, the\n // algorithm should assume they are equal in order to diff recursively later\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n }\n } else if (isEqual(arrLeft[i - 1], arrRight[j - 1], options)) {\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n } else if (f[i - 1][j] >= f[i][j - 1]) {\n f[i][j] = f[i - 1][j];\n backtrack[i][j] = 'up';\n } else {\n f[i][j] = f[i][j - 1];\n backtrack[i][j] = 'left';\n }\n }\n }\n let i = arrLeft.length;\n let j = arrRight.length;\n let tLeft = [];\n let tRight = [];\n // this is a backtracking process, all new lines should be unshifted to the result, not\n // pushed to the result\n while(i > 0 || j > 0){\n if (backtrack[i][j] === 'diag') {\n const type = getType(arrLeft[i - 1]);\n if (options.recursiveEqual && (type === 'array' || type === 'object') && isEqual(arrLeft[i - 1], arrRight[j - 1], options)) {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n } else if (type === 'array') {\n const [l, r] = diffArrayLCS(arrLeft[i - 1], arrRight[j - 1], keyLeft, keyRight, level + 1, options);\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n } else if (type === 'object') {\n const [l, r] = diffObject(arrLeft[i - 1], arrRight[j - 1], level + 2, options, diffArrayLCS);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n } else {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n }\n i--;\n j--;\n } else if (backtrack[i][j] === 'up') {\n if (options.showModifications && i > 1 && backtrack[i - 1][j] === 'left') {\n const typeLeft = getType(arrLeft[i - 1]);\n const typeRight = getType(arrRight[j - 1]);\n if (typeLeft === typeRight) {\n if (typeLeft === 'array') {\n const [l, r] = diffArrayLCS(arrLeft[i - 1], arrRight[j - 1], keyLeft, keyRight, level + 1, options);\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n } else if (typeLeft === 'object') {\n const [l, r] = diffObject(arrLeft[i - 1], arrRight[j - 1], level + 2, options, diffArrayLCS);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n } else {\n tLeft.unshift({\n level: level + 1,\n type: 'modify',\n text: formatValue(arrLeft[i - 1], undefined, undefined, options.undefinedBehavior)\n });\n tRight.unshift({\n level: level + 1,\n type: 'modify',\n text: formatValue(arrRight[j - 1], undefined, undefined, options.undefinedBehavior)\n });\n }\n } else {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n }\n i--;\n j--;\n } else {\n const removedLines = stringify(arrLeft[i - 1], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = removedLines.length - 1; i >= 0; i--){\n tLeft.unshift({\n level: level + 1 + (removedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n i--;\n }\n } else {\n const addedLines = stringify(arrRight[j - 1], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = addedLines.length - 1; i >= 0; i--){\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n tRight.unshift({\n level: level + 1 + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n j--;\n }\n }\n return [\n tLeft,\n tRight\n ];\n};\nconst diffArrayLCS = (arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = [])=>{\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n const [tLeftReverse, tRightReverse] = lcs(arrLeft, arrRight, keyLeft, keyRight, level, options);\n linesLeft = concat(linesLeft, tLeftReverse);\n linesRight = concat(linesRight, tRightReverse);\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n};\n\n// Recursively checks if all objects (including in nested arrays) have the compare key\nfunction allObjectsHaveCompareKey(arr, compareKey) {\n for (const item of arr){\n const type = getType(item);\n if (type === 'object') {\n if (!(compareKey in item)) return false;\n // Check nested arrays in object values\n for (const value of Object.values(item)){\n if (Array.isArray(value) && !allObjectsHaveCompareKey(value, compareKey)) {\n return false;\n }\n }\n } else if (Array.isArray(item)) {\n if (!allObjectsHaveCompareKey(item, compareKey)) return false;\n }\n }\n return true;\n}\n// Recursively diff arrays, using compareKey if all elements have it, otherwise fallback to diffArrayNormal\nfunction diffArrayRecursive(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = []) {\n if (!options.compareKey) {\n // Fallback to normal diff if no compare key is specified\n return diffArrayNormal(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft, linesRight);\n }\n // If arrays are not of objects, or not all objects have the compare key (including nested), fallback to unordered LCS diff\n const isObjectArray = (arr)=>arr.every((item)=>getType(item) === 'object');\n if (!isObjectArray(arrLeft) || !isObjectArray(arrRight) || !allObjectsHaveCompareKey(arrLeft, options.compareKey) || !allObjectsHaveCompareKey(arrRight, options.compareKey)) {\n // Use unordered LCS for arrays of primitives, mixed types, or missing compare key\n return diffArrayNormal(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft, linesRight);\n }\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n const leftProcessed = new Set();\n const rightProcessed = new Set();\n // First pass: find matching objects by compareKey\n for(let i = 0; i < arrLeft.length; i++){\n const leftItem = arrLeft[i];\n if (leftProcessed.has(i)) continue;\n // Skip if left item is not an object or doesn't have the compare key\n if (getType(leftItem) !== 'object' || !(options.compareKey in leftItem)) {\n continue;\n }\n const leftKeyValue = leftItem[options.compareKey];\n // Find matching item in right array\n let matchIndex = -1;\n for(let j = 0; j < arrRight.length; j++){\n if (rightProcessed.has(j)) continue;\n const rightItem = arrRight[j];\n if (getType(rightItem) !== 'object' || !(options.compareKey in rightItem)) {\n continue;\n }\n const rightKeyValue = rightItem[options.compareKey];\n // Compare key values\n if (isEqual(leftKeyValue, rightKeyValue, options)) {\n matchIndex = j;\n break;\n }\n }\n if (matchIndex !== -1) {\n // Found a match, compare the objects\n const rightItem = arrRight[matchIndex];\n const leftType = getType(leftItem);\n const rightType = getType(rightItem);\n if (leftType !== rightType) {\n prettyAppendLines(linesLeft, linesRight, '', '', leftItem, rightItem, level + 1, options);\n } else if (leftType === 'object') {\n // Always recurse into diffObject for aligned objects, regardless of recursiveEqual/isEqual\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n // For each key, if value is array, apply recursive diff logic\n const keys = Array.from(new Set([\n ...Object.keys(leftItem),\n ...Object.keys(rightItem)\n ]));\n for (const key of keys){\n const lVal = leftItem[key];\n const rVal = rightItem[key];\n if (Array.isArray(lVal) && Array.isArray(rVal)) {\n // Recursively diff arrays\n const [arrL, arrR] = diffArrayRecursive(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n } else if (Array.isArray(lVal) || Array.isArray(rVal)) {\n // If only one side is array, treat as modification\n prettyAppendLines(linesLeft, linesRight, key, key, lVal, rVal, level + 2, options);\n } else {\n // Use diffObject for non-array values\n const [leftLines, rightLines] = diffObject({\n [key]: lVal\n }, {\n [key]: rVal\n }, level + 2, options, diffArrayRecursive);\n linesLeft = concat(linesLeft, leftLines);\n linesRight = concat(linesRight, rightLines);\n }\n }\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n } else if (leftType === 'array') {\n // For nested arrays, recursively apply the same logic\n const [resLeft, resRight] = diffArrayRecursive(leftItem, rightItem, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else if (isEqual(leftItem, rightItem, options)) {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n if (options.showModifications) {\n linesLeft.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n linesLeft.push({\n level: level + 1,\n type: 'remove',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'add',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n }\n }\n leftProcessed.add(i);\n rightProcessed.add(matchIndex);\n }\n }\n // Second pass: handle remaining items (unmatched)\n for(let i = 0; i < arrLeft.length; i++){\n if (leftProcessed.has(i)) continue;\n const leftItem = arrLeft[i];\n const removedLines = stringify(leftItem, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let j = 0; j < removedLines.length; j++){\n linesLeft.push({\n level: level + 1 + (removedLines[j].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[j].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n }\n for(let i = 0; i < arrRight.length; i++){\n if (rightProcessed.has(i)) continue;\n const rightItem = arrRight[i];\n const addedLines = stringify(rightItem, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let j = 0; j < addedLines.length; j++){\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1 + (addedLines[j].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[j].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n}\nconst diffArrayCompareKey = diffArrayRecursive;\n\n/**\n * Diffs two objects, using compare-key logic for nested arrays if possible.\n *\n * @param leftObj The left object\n * @param rightObj The right object\n * @param level The current diff level\n * @param options The diff options\n * @param fallbackArrayDiff The fallback array diff function (e.g., diffArrayNormal or diffArrayLCS)\n * @param compareKeyArrayDiff The compare-key array diff function\n * @param allObjectsHaveCompareKey The function to check if all objects in an array have the compare key\n * @returns [DiffResult[], DiffResult[]]\n */ function diffObjectWithArraySupport(leftObj, rightObj, level, options, fallbackArrayDiff, compareKeyArrayDiff, allObjectsHaveCompareKey) {\n let linesLeft = [];\n let linesRight = [];\n const keys = Array.from(new Set([\n ...Object.keys(leftObj || {}),\n ...Object.keys(rightObj || {})\n ]));\n for (const key of keys){\n const lVal = leftObj ? leftObj[key] : undefined;\n const rVal = rightObj ? rightObj[key] : undefined;\n if (Array.isArray(lVal) && Array.isArray(rVal) && options.compareKey) {\n if (allObjectsHaveCompareKey(lVal, options.compareKey) && allObjectsHaveCompareKey(rVal, options.compareKey)) {\n // Use compare-key diff for this property\n const [arrL, arrR] = compareKeyArrayDiff(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n continue;\n }\n }\n if (Array.isArray(lVal) && Array.isArray(rVal)) {\n // Fallback to normal diff for arrays\n const [arrL, arrR] = fallbackArrayDiff(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n } else if (Array.isArray(lVal) || Array.isArray(rVal)) {\n // If only one side is array, treat as modification\n prettyAppendLines(linesLeft, linesRight, key, key, lVal, rVal, level + 2, options);\n } else {\n // Use diffObject for non-array values\n const [leftLines, rightLines] = diffObject({\n [key]: lVal\n }, {\n [key]: rVal\n }, level + 2, options, fallbackArrayDiff);\n linesLeft = concat(linesLeft, leftLines);\n linesRight = concat(linesRight, rightLines);\n }\n }\n return [\n linesLeft,\n linesRight\n ];\n}\n\nconst diffArrayNormal = (arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = [])=>{\n arrLeft = [\n ...arrLeft\n ];\n arrRight = [\n ...arrRight\n ];\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n while(arrLeft.length || arrRight.length){\n const itemLeft = arrLeft[0];\n const itemRight = arrRight[0];\n const leftType = getType(itemLeft);\n const rightType = getType(itemRight);\n if (arrLeft.length && arrRight.length) {\n if (leftType !== rightType) {\n prettyAppendLines(linesLeft, linesRight, '', '', itemLeft, itemRight, level + 1, options);\n } else if (options.recursiveEqual && [\n 'object',\n 'array'\n ].includes(leftType) && isEqual(itemLeft, itemRight, options)) {\n prettyAppendLines(linesLeft, linesRight, '', '', itemLeft, itemRight, level + 1, options);\n } else if (leftType === 'object') {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n let objLeft, objRight;\n if (options.arrayDiffMethod === 'compare-key') {\n [objLeft, objRight] = diffObjectWithArraySupport(itemLeft, itemRight, level, options, diffArrayNormal, diffArrayCompareKey, allObjectsHaveCompareKey);\n } else {\n [objLeft, objRight] = diffObject(itemLeft, itemRight, level + 2, options, diffArrayNormal);\n }\n linesLeft = concat(linesLeft, objLeft);\n linesRight = concat(linesRight, objRight);\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n } else if (leftType === 'array') {\n // For nested arrays, check for compare-key logic\n if (options.compareKey && allObjectsHaveCompareKey(itemLeft, options.compareKey) && allObjectsHaveCompareKey(itemRight, options.compareKey)) {\n const [resLeft, resRight] = diffArrayCompareKey(itemLeft, itemRight, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else {\n const [resLeft, resRight] = diffArrayNormal(itemLeft, itemRight, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n }\n } else if (cmp(itemLeft, itemRight, {\n ignoreCase: options.ignoreCase\n }) === 0) {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n if (options.showModifications) {\n linesLeft.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n linesLeft.push({\n level: level + 1,\n type: 'remove',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'add',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n }\n }\n arrLeft.shift();\n arrRight.shift();\n } else if (arrLeft.length) {\n const removedLines = formatValue(itemLeft, undefined, true, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < removedLines.length; i++){\n linesLeft.push({\n level: level + 1 + (removedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n arrLeft.shift();\n } else if (arrRight.length) {\n const addedLines = formatValue(itemRight, undefined, true, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1 + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n arrRight.shift();\n }\n }\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n};\n\nconst sortInnerArrays = (source, options)=>{\n if (!source || typeof source !== 'object') {\n return source;\n }\n if (Array.isArray(source)) {\n const result = [\n ...source\n ];\n result.sort((a, b)=>cmp(a, b, {\n ignoreCase: options?.ignoreCase\n }));\n return result.map((item)=>sortInnerArrays(item, options));\n }\n const result = {\n ...source\n };\n for(const key in result){\n result[key] = sortInnerArrays(result[key], options);\n }\n return result;\n};\n\nvar UndefinedBehavior = /*#__PURE__*/ function(UndefinedBehavior) {\n UndefinedBehavior[\"stringify\"] = \"stringify\";\n UndefinedBehavior[\"ignore\"] = \"ignore\";\n UndefinedBehavior[\"throw\"] = \"throw\";\n return UndefinedBehavior;\n}({});\nconst EQUAL_EMPTY_LINE = {\n level: 0,\n type: 'equal',\n text: ''\n};\nconst EQUAL_LEFT_BRACKET_LINE = {\n level: 0,\n type: 'equal',\n text: '{'\n};\nconst EQUAL_RIGHT_BRACKET_LINE = {\n level: 0,\n type: 'equal',\n text: '}'\n};\nlet Differ = class Differ {\n detectCircular(source) {\n if (this.options.detectCircular) {\n if (detectCircular(source)) {\n throw new Error(`Circular reference detected in object (with keys ${Object.keys(source).map((t)=>`\"${t}\"`).join(', ')})`);\n }\n }\n }\n sortResultLines(left, right) {\n for(let k = 0; k < left.length; k++){\n let changed = false;\n for(let i = 1; i < left.length; i++){\n if (left[i].type === 'remove' && left[i - 1].type === 'equal' && right[i].type === 'equal' && right[i - 1].type === 'add') {\n const t1 = left[i - 1];\n left[i - 1] = left[i];\n left[i] = t1;\n const t2 = right[i - 1];\n right[i - 1] = right[i];\n right[i] = t2;\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n }\n }\n calculateLineNumbers(result) {\n let lineNumber = 0;\n for (const item of result){\n if (!item.text) {\n continue;\n }\n item.lineNumber = ++lineNumber;\n }\n }\n calculateCommas(result) {\n const nextLine = Array(result.length).fill(0);\n for(let i = result.length - 1; i > 0; i--){\n if (result[i].text) {\n nextLine[i - 1] = i;\n } else {\n nextLine[i - 1] = nextLine[i];\n }\n }\n for(let i = 0; i < result.length; i++){\n if (!result[i].text.endsWith('{') && !result[i].text.endsWith('[') && result[i].text && nextLine[i] && result[i].level <= result[nextLine[i]].level) {\n result[i].comma = true;\n }\n }\n }\n diff(sourceLeft, sourceRight) {\n this.detectCircular(sourceLeft);\n this.detectCircular(sourceRight);\n if (this.options.arrayDiffMethod === 'unorder-normal' || this.options.arrayDiffMethod === 'unorder-lcs') {\n sourceLeft = sortInnerArrays(sourceLeft, this.options);\n sourceRight = sortInnerArrays(sourceRight, this.options);\n }\n if (this.options.undefinedBehavior === \"ignore\") {\n sourceLeft = cleanFields(sourceLeft) ?? null;\n sourceRight = cleanFields(sourceRight) ?? null;\n }\n let resultLeft = [];\n let resultRight = [];\n const typeLeft = getType(sourceLeft);\n const typeRight = getType(sourceRight);\n if (typeLeft !== typeRight) {\n const strLeft = stringify(sourceLeft, undefined, 1, this.options.maxDepth, this.options.undefinedBehavior);\n resultLeft = strLeft.split('\\n').map((line)=>({\n level: line.match(/^\\s+/)?.[0]?.length || 0,\n type: 'remove',\n text: line.replace(/^\\s+/, '').replace(/,$/g, ''),\n comma: line.endsWith(',')\n }));\n const strRight = stringify(sourceRight, undefined, 1, this.options.maxDepth, this.options.undefinedBehavior);\n resultRight = strRight.split('\\n').map((line)=>({\n level: line.match(/^\\s+/)?.[0]?.length || 0,\n type: 'add',\n text: line.replace(/^\\s+/, '').replace(/,$/g, ''),\n comma: line.endsWith(',')\n }));\n const lLength = resultLeft.length;\n const rLength = resultRight.length;\n resultLeft = concat(resultLeft, Array(rLength).fill(0).map(()=>({\n ...EQUAL_EMPTY_LINE\n })));\n resultRight = concat(resultRight, Array(lLength).fill(0).map(()=>({\n ...EQUAL_EMPTY_LINE\n })), true);\n } else if (typeLeft === 'object') {\n [resultLeft, resultRight] = diffObject(sourceLeft, sourceRight, 1, this.options, this.arrayDiffFunc);\n resultLeft.unshift({\n ...EQUAL_LEFT_BRACKET_LINE\n });\n resultLeft.push({\n ...EQUAL_RIGHT_BRACKET_LINE\n });\n resultRight.unshift({\n ...EQUAL_LEFT_BRACKET_LINE\n });\n resultRight.push({\n ...EQUAL_RIGHT_BRACKET_LINE\n });\n } else if (typeLeft === 'array') {\n [resultLeft, resultRight] = this.arrayDiffFunc(sourceLeft, sourceRight, '', '', 0, this.options);\n } else if (sourceLeft !== sourceRight) {\n if (this.options.ignoreCase) {\n if (typeof sourceLeft === 'string' && typeof sourceRight === 'string' && sourceLeft.toLowerCase() === sourceRight.toLowerCase()) {\n resultLeft = [\n {\n level: 0,\n type: 'equal',\n text: sourceLeft\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'equal',\n text: sourceRight\n }\n ];\n }\n } else if (this.options.showModifications) {\n resultLeft = [\n {\n level: 0,\n type: 'modify',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'modify',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n } else {\n resultLeft = [\n {\n level: 0,\n type: 'remove',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n },\n {\n ...EQUAL_EMPTY_LINE\n }\n ];\n resultRight = [\n {\n ...EQUAL_EMPTY_LINE\n },\n {\n level: 0,\n type: 'add',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n }\n } else {\n resultLeft = [\n {\n level: 0,\n type: 'equal',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'equal',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n }\n this.sortResultLines(resultLeft, resultRight);\n this.calculateLineNumbers(resultLeft);\n this.calculateLineNumbers(resultRight);\n this.calculateCommas(resultLeft);\n this.calculateCommas(resultRight);\n return [\n resultLeft,\n resultRight\n ];\n }\n constructor({ detectCircular = true, maxDepth = Infinity, showModifications = true, arrayDiffMethod = 'normal', ignoreCase = false, ignoreCaseForKey = false, recursiveEqual = false, preserveKeyOrder, compareKey, undefinedBehavior = \"stringify\" } = {}){\n this.options = {\n detectCircular,\n maxDepth,\n showModifications,\n arrayDiffMethod,\n ignoreCase,\n ignoreCaseForKey,\n recursiveEqual,\n preserveKeyOrder,\n compareKey,\n undefinedBehavior\n };\n if (arrayDiffMethod === 'compare-key') {\n this.arrayDiffFunc = diffArrayCompareKey;\n } else if (arrayDiffMethod === 'lcs' || arrayDiffMethod === 'unorder-lcs') {\n this.arrayDiffFunc = diffArrayLCS;\n } else {\n this.arrayDiffFunc = diffArrayNormal;\n }\n }\n};\n\nexport { UndefinedBehavior, Differ as default };\n","import * as React from 'react';\n\nconst isExpandLine = (segment)=>{\n return 'hasLinesBefore' in segment || 'hasLinesAfter' in segment;\n};\nconst getSegmentHeight = (segment, itemHeight, expandLineHeight)=>{\n return isExpandLine(segment) ? expandLineHeight : itemHeight * (segment.end - segment.start + 1);\n};\n/**\n * Merge two segments array into one, divide the segment if necessary.\n */ const mergeSegments = (tokens, diffs)=>{\n const result = [];\n let token;\n let diff;\n if (tokens.length && diffs.length) {\n tokens = [\n ...tokens\n ];\n diffs = [\n ...diffs\n ];\n token = {\n ...tokens.shift()\n };\n diff = {\n ...diffs.shift()\n };\n while(1){\n if (token.start === diff.start) {\n const end = Math.min(token.end, diff.end);\n result.push({\n ...token,\n ...diff,\n end\n });\n token.start = diff.start = end;\n } else if (token.start < diff.start) {\n const end = Math.min(token.end, diff.start);\n result.push({\n ...diff,\n ...token,\n end\n });\n token.start = end;\n } else {\n const end = Math.min(token.start, diff.end);\n result.push({\n ...token,\n ...diff,\n end\n });\n diff.start = end;\n }\n if (!tokens.length || !diffs.length) break;\n if (token.start === token.end) token = {\n ...tokens.shift()\n };\n if (diff.start === diff.end) diff = {\n ...diffs.shift()\n };\n }\n }\n if (!tokens.length) result.push(...diffs.map((d)=>({\n ...d,\n token: token.token || 'plain'\n })));\n if (!diffs.length) result.push(...tokens);\n return result;\n};\n\nconst calculatePlaceholderHeight = (segments, accTop, startSegment, startLine, endSegment, endLine, itemHeight, expandLineHeight, totalHeight)=>{\n if (!accTop.length) {\n return [\n 0,\n 0\n ];\n }\n let topHeight = 0;\n let bottomHeight = 0;\n const startSegmentItem = segments[startSegment];\n if (isExpandLine(startSegmentItem)) {\n topHeight = accTop[startSegment];\n } else {\n topHeight = accTop[startSegment] + (startLine - startSegmentItem.start) * itemHeight;\n }\n const endSegmentItem = segments[endSegment];\n if (isExpandLine(endSegmentItem)) {\n bottomHeight = totalHeight - accTop[endSegment] - expandLineHeight;\n } else {\n bottomHeight = totalHeight - accTop[endSegment] - (endLine - endSegmentItem.start) * itemHeight;\n }\n return [\n topHeight,\n bottomHeight\n ];\n};\n\nconst findVisibleLines = (segments, accTop, viewportTop, viewportBottom, itemHeight, expandLineHeight)=>{\n if (!accTop.length) {\n return [\n 0,\n 0,\n 0,\n 0\n ];\n }\n let startSegment = 0;\n let endSegment = 0;\n let startLine = 0;\n let endLine = 0;\n let l = 0;\n let r = segments.length - 1;\n // start segment\n while(1){\n const m = Math.floor((l + r) / 2);\n const top = accTop[m];\n const bottom = top + getSegmentHeight(segments[m], itemHeight, expandLineHeight);\n if (bottom <= viewportTop) {\n l = m + 1;\n } else {\n r = m;\n }\n if (l === r) {\n startSegment = l;\n break;\n }\n }\n // start line\n const startSegmentItem = segments[startSegment];\n if (isExpandLine(startSegmentItem)) {\n startLine = startSegmentItem.start;\n } else {\n startLine = startSegmentItem.start + Math.floor((viewportTop - accTop[startSegment]) / itemHeight);\n }\n // end segment\n l = 0;\n r = segments.length - 1;\n while(1){\n const m = Math.floor((l + r + 1) / 2);\n const top = accTop[m];\n if (top >= viewportBottom) {\n r = m - 1;\n } else {\n l = m;\n }\n if (l === r) {\n endSegment = l;\n break;\n }\n }\n // end line\n const endSegmentItem = segments[endSegment];\n if (isExpandLine(endSegmentItem)) {\n endLine = endSegmentItem.end;\n } else {\n endLine = endSegmentItem.start + Math.ceil((viewportBottom - accTop[endSegment]) / itemHeight);\n }\n return [\n startSegment,\n startLine,\n endSegment,\n endLine\n ];\n};\n\nvar bin = {};\n\nObject.defineProperty(bin, \"__esModule\", {\n value: true\n});\nbin.applyPatch = bin.calcPatch = lcs_1 = bin.lcs = bin.diff = bin.diff_core = void 0;\nfunction diff_internal(state, c) {\n const { b, eq, stack_base } = state;\n let { i, N, j, M, Z, stack_top } = state;\n for(;;){\n switch(c){\n case 0:\n {\n Z_block: while(N > 0 && M > 0){\n b.fill(0, 0, 2 * Z);\n const W = N - M;\n const L = N + M;\n const parity = L & 1;\n const offsetx = i + N - 1;\n const offsety = j + M - 1;\n const hmax = (L + parity) / 2;\n let z;\n h_loop: for(let h = 0; h <= hmax; h++){\n const kmin = 2 * Math.max(0, h - M) - h;\n const kmax = h - 2 * Math.max(0, h - N);\n for(let k = kmin; k <= kmax; k += 2){\n const gkm = b[k - 1 - Z * Math.floor((k - 1) / Z)];\n const gkp = b[k + 1 - Z * Math.floor((k + 1) / Z)];\n const u = k === -h || k !== h && gkm < gkp ? gkp : gkm + 1;\n const v = u - k;\n let x = u;\n let y = v;\n while(x < N && y < M && eq(i + x, j + y))x++, y++;\n b[k - Z * Math.floor(k / Z)] = x;\n if (parity === 1 && (z = W - k) >= 1 - h && z < h && x + b[Z + z - Z * Math.floor(z / Z)] >= N) {\n if (h > 1 || x !== u) {\n stack_base[stack_top++] = i + x;\n stack_base[stack_top++] = N - x;\n stack_base[stack_top++] = j + y;\n stack_base[stack_top++] = M - y;\n N = u;\n M = v;\n Z = 2 * (Math.min(N, M) + 1);\n continue Z_block;\n } else break h_loop;\n }\n }\n for(let k = kmin; k <= kmax; k += 2){\n const pkm = b[Z + k - 1 - Z * Math.floor((k - 1) / Z)];\n const pkp = b[Z + k + 1 - Z * Math.floor((k + 1) / Z)];\n const u = k === -h || k !== h && pkm < pkp ? pkp : pkm + 1;\n const v = u - k;\n let x = u;\n let y = v;\n while(x < N && y < M && eq(offsetx - x, offsety - y))x++, y++;\n b[Z + k - Z * Math.floor(k / Z)] = x;\n if (parity === 0 && (z = W - k) >= -h && z <= h && x + b[z - Z * Math.floor(z / Z)] >= N) {\n if (h > 0 || x !== u) {\n stack_base[stack_top++] = i + N - u;\n stack_base[stack_top++] = u;\n stack_base[stack_top++] = j + M - v;\n stack_base[stack_top++] = v;\n N = N - x;\n M = M - y;\n Z = 2 * (Math.min(N, M) + 1);\n continue Z_block;\n } else break h_loop;\n }\n }\n }\n if (N === M) continue;\n if (M > N) {\n i += N;\n j += N;\n M -= N;\n N = 0;\n } else {\n i += M;\n j += M;\n N -= M;\n M = 0;\n }\n break;\n }\n if (N + M !== 0) {\n if (state.pxe === i || state.pye === j) {\n state.pxe = i + N;\n state.pye = j + M;\n } else {\n const sx = state.pxs;\n state.oxs = state.pxs;\n state.oxe = state.pxe;\n state.oys = state.pys;\n state.oye = state.pye;\n state.pxs = i;\n state.pxe = i + N;\n state.pys = j;\n state.pye = j + M;\n if (sx >= 0) {\n state.i = i;\n state.N = N;\n state.j = j;\n state.M = M;\n state.Z = Z;\n state.stack_top = stack_top;\n return 1;\n }\n }\n }\n }\n case 1:\n {\n if (stack_top === 0) return 2;\n M = stack_base[--stack_top];\n j = stack_base[--stack_top];\n N = stack_base[--stack_top];\n i = stack_base[--stack_top];\n Z = 2 * (Math.min(N, M) + 1);\n c = 0;\n }\n }\n }\n}\nlet DiffGen = class DiffGen {\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const { state, result } = this;\n if (this.c > 1) {\n result.done = true;\n result.value = undefined;\n return result;\n }\n const c = diff_internal(state, this.c);\n this.c = c;\n if (c === 1) {\n result.value = [\n state.oxs,\n state.oxe,\n state.oys,\n state.oye\n ];\n return result;\n }\n if (state.pxs >= 0) {\n result.value = [\n state.pxs,\n state.pxe,\n state.pys,\n state.pye\n ];\n return result;\n }\n result.done = true;\n result.value = undefined;\n return result;\n }\n constructor(state){\n this.state = state;\n this.c = 0;\n this.result = {\n value: null,\n done: false\n };\n }\n};\nfunction diff_core(i, N, j, M, eq) {\n const Z = (Math.min(N, M) + 1) * 2;\n const L = N + M;\n const b = new (L < 256 ? Uint8Array : L < 65536 ? Uint16Array : Uint32Array)(2 * Z);\n return new DiffGen({\n i,\n N,\n j,\n M,\n Z,\n b,\n eq,\n pxs: -1,\n pxe: -1,\n pys: -1,\n pye: -1,\n oxs: -1,\n oxe: -1,\n oys: -1,\n oye: -1,\n stack_top: 0,\n stack_base: []\n });\n}\nbin.diff_core = diff_core;\nfunction diff(xs, ys) {\n let [i, N, M] = [\n 0,\n xs.length,\n ys.length\n ];\n while(i < N && i < M && xs[i] === ys[i])i++;\n if (i === N && i === M) return [][Symbol.iterator]();\n while(xs[--N] === ys[--M] && N > i && M > i);\n const eq = (x, y)=>xs[x] === ys[y];\n return diff_core(i, N + 1 - i, i, M + 1 - i, eq);\n}\nbin.diff = diff;\nlet LCSGen = class LCSGen {\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const rec = this.diff.next();\n if (rec.done) {\n const { i, j, N } = this;\n if (i < N) {\n rec.done = false;\n rec.value = [\n i,\n j,\n N - i\n ];\n this.i = N;\n }\n return rec;\n }\n const v = rec.value;\n const sx = v[0];\n const ex = v[1];\n const ey = v[3];\n const { i, j } = this;\n if (i !== sx) {\n v.length--;\n v[0] = i;\n v[1] = j;\n v[2] = sx - i;\n }\n this.i = ex;\n this.j = ey;\n return rec;\n }\n constructor(diff, N){\n this.diff = diff;\n this.N = N;\n this.i = 0;\n this.j = 0;\n }\n};\nfunction lcs(xs, ys) {\n return new LCSGen(diff(xs, ys), xs.length);\n}\nvar lcs_1 = bin.lcs = lcs;\nfunction* calcPatch(xs, ys) {\n const slice = ArrayBuffer.isView(xs) ? Uint8Array.prototype.subarray : xs.slice;\n for (const v of diff(xs, ys)){\n v[2] = slice.call(ys, v[2], v[3]);\n yield v;\n }\n}\nbin.calcPatch = calcPatch;\nfunction* applyPatch(xs, patch) {\n let i = 0;\n const slice = ArrayBuffer.isView(xs) ? Uint8Array.prototype.subarray : xs.slice;\n for (const [dels, dele, ins] of patch){\n if (i < dels) yield slice.call(xs, i, dels);\n if (ins.length > 0) yield ins;\n i = dele;\n }\n if (i < xs.length) yield slice.call(xs, i);\n}\nbin.applyPatch = applyPatch;\n\nconst getOriginalIndices = (arr, separatorLength)=>{\n const result = [];\n let index = 0;\n for (const item of arr){\n result.push(index);\n index += item.length + separatorLength;\n }\n result.push(index - separatorLength);\n return result;\n};\nconst filterEmptyParts = (arr)=>{\n return arr.filter((item)=>item.end > item.start);\n};\nconst getInlineDiff = (l, r, options)=>{\n let resultL = [];\n let resultR = [];\n let lastL = 0;\n let lastR = 0;\n if (options.mode === 'word') {\n const wordSeparator = options.wordSeparator || ' ';\n const lArr = l.split(wordSeparator);\n const rArr = r.split(wordSeparator);\n /**\n * The iter array contains the information about replacement, which is an array of\n * tuple `[startL, startR, length]`.\n *\n * e.g. `[1, 2, 3]` means replace `lArr[1...1+3]` to `rArr[2...2+3]` (include the end).\n */ const iter = [\n ...lcs_1(lArr, rArr)\n ];\n const separatorLength = wordSeparator.length;\n const indicesL = getOriginalIndices(lArr, separatorLength);\n const indicesR = getOriginalIndices(rArr, separatorLength);\n for (const [sl, sr, length] of iter){\n if (sl > lastL) {\n resultL.push({\n type: 'remove',\n start: indicesL[lastL],\n end: indicesL[sl]\n });\n }\n if (sr > lastR) {\n resultR.push({\n type: 'add',\n start: indicesR[lastR],\n end: indicesR[sr]\n });\n }\n lastL = sl + length;\n lastR = sr + length;\n resultL.push({\n start: indicesL[sl],\n end: indicesL[lastL]\n });\n resultR.push({\n start: indicesR[sr],\n end: indicesR[lastR]\n });\n }\n if (l.length > lastL) {\n resultL.push({\n type: 'remove',\n start: indicesL[lastL],\n end: l.length\n });\n }\n if (r.length > lastR) {\n resultR.push({\n type: 'add',\n start: indicesR[lastR],\n end: r.length\n });\n }\n resultL = filterEmptyParts(resultL);\n resultR = filterEmptyParts(resultR);\n return [\n resultL,\n resultR\n ];\n }\n const iter = lcs_1(l, r);\n for (const [sl, sr, length] of iter){\n if (sl > lastL) {\n resultL.push({\n type: 'remove',\n start: lastL,\n end: sl\n });\n }\n if (sr > lastR) {\n resultR.push({\n type: 'add',\n start: lastR,\n end: sr\n });\n }\n lastL = sl + length;\n lastR = sr + length;\n resultL.push({\n start: sl,\n end: lastL\n });\n resultR.push({\n start: sr,\n end: lastR\n });\n }\n if (l.length > lastL) {\n resultL.push({\n type: 'remove',\n start: lastL,\n end: l.length\n });\n }\n if (r.length > lastR) {\n resultR.push({\n type: 'add',\n start: lastR,\n end: r.length\n });\n }\n resultL = filterEmptyParts(resultL);\n resultR = filterEmptyParts(resultR);\n return [\n resultL,\n resultR\n ];\n};\n\nconst syntaxHighlightLine = (enabled, text, offset)=>{\n if (!enabled) {\n return [\n {\n token: 'plain',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'undefined' || text === 'Infinity' || text === '-Infinity' || text === 'NaN' || /^\\d+n$/i.test(text) || text.startsWith('Symbol(') || text.startsWith('function') || text.startsWith('(')) {\n return [\n {\n token: 'invalid',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (!Number.isNaN(Number(text))) {\n return [\n {\n token: 'number',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'true' || text === 'false') {\n return [\n {\n token: 'boolean',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'null') {\n return [\n {\n token: 'null',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text.startsWith('\"')) {\n if (text.endsWith(': [') || text.endsWith(': {')) {\n return [\n {\n token: 'key',\n start: offset,\n end: text.length - 3 + offset\n },\n {\n token: 'punctuation',\n start: text.length - 3,\n end: text.length - 2 + offset\n },\n {\n token: 'plain',\n start: text.length - 2,\n end: text.length - 1 + offset\n },\n {\n token: 'punctuation',\n start: text.length - 1,\n end: text.length + offset\n }\n ];\n }\n let pairedQuoteIndex = 1;\n while(pairedQuoteIndex < text.length){\n if (text[pairedQuoteIndex] === '\"') break;\n if (text[pairedQuoteIndex] === '\\\\') ++pairedQuoteIndex;\n ++pairedQuoteIndex;\n }\n if (pairedQuoteIndex === text.length - 1) {\n return [\n {\n token: 'string',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n return [\n {\n token: 'key',\n start: offset,\n end: pairedQuoteIndex + 1 + offset\n },\n {\n token: 'punctuation',\n start: pairedQuoteIndex + 1,\n end: pairedQuoteIndex + 2 + offset\n },\n {\n token: 'plain',\n start: pairedQuoteIndex + 2,\n end: pairedQuoteIndex + 3 + offset\n },\n ...syntaxHighlightLine(enabled, text.substring(pairedQuoteIndex + 3), offset + pairedQuoteIndex + 3)\n ];\n }\n if (text === '{' || text === '}' || text === '[' || text === ']') {\n return [\n {\n token: 'punctuation',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n // should this be expected?\n return [\n {\n token: 'plain',\n start: offset,\n end: text.length + offset\n }\n ];\n};\n\nconst defaultOptions = {\n threshold: 8,\n margin: 3\n};\nconst getSegments = (l, r, options, jsonsAreEqual)=>{\n if (!options || jsonsAreEqual) {\n return [\n {\n start: 0,\n end: l.length,\n isEqual: false\n }\n ];\n }\n const segments = [];\n for(let i = 0; i < l.length; i++){\n if (l[i].type === 'equal' && r[i].type === 'equal') {\n if (segments.length && segments[segments.length - 1].isEqual) {\n segments[segments.length - 1].end++;\n } else {\n segments.push({\n start: i,\n end: i + 1,\n isEqual: true\n });\n }\n } else {\n if (segments.length && !segments[segments.length - 1].isEqual) {\n segments[segments.length - 1].end++;\n } else {\n segments.push({\n start: i,\n end: i + 1,\n isEqual: false\n });\n }\n }\n }\n const _options = options === true ? defaultOptions : {\n ...defaultOptions,\n ...options\n };\n const { threshold, margin } = _options;\n if (threshold < margin * 2 + 1) {\n // eslint-disable-next-line no-console, max-len\n console.warn(`Threshold (${threshold}) is no more than 2 margins + 1 \"expand\" line (${margin} * 2 + 1), it's not necessary to hide unchanged areas which have less than ${margin * 2 + 1} lines.`);\n }\n const result = [];\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n if (!segment.isEqual || segment.end - segment.start < threshold || segment.end - segment.start <= margin * 2 + 1) {\n result.push(segment);\n continue;\n }\n if (!i) {\n result.push({\n hasLinesBefore: true,\n hasLinesAfter: false,\n start: 0,\n end: segment.end - margin,\n isEqual: true\n });\n result.push({\n start: segment.end - margin,\n end: segment.end,\n isEqual: true\n });\n } else if (i === segments.length - 1) {\n result.push({\n start: segment.start,\n end: segment.start + margin,\n isEqual: true\n });\n result.push({\n hasLinesBefore: false,\n hasLinesAfter: true,\n start: segment.start + margin,\n end: l.length,\n isEqual: true\n });\n } else {\n result.push({\n start: segment.start,\n end: segment.start + margin,\n isEqual: true\n });\n result.push({\n hasLinesBefore: true,\n hasLinesAfter: true,\n start: segment.start + margin,\n end: segment.end - margin,\n isEqual: true\n });\n result.push({\n start: segment.end - margin,\n end: segment.end,\n isEqual: true\n });\n }\n }\n return result;\n};\n\nconst DEFAULT_INDENT = 2;\nconst DEFAULT_EXPAND_MORE_LINES_LIMIT = 20;\nconst DEFAULT_TEXTS = {\n noChangeDetected: 'No change detected',\n showLinesBefore: '⭡ Show %d lines before',\n showLinesAfter: '⭣ Show %d lines after',\n showAll: '⭥ Show all unchanged lines'\n};\nconst Viewer = (props)=>{\n const [linesLeft, linesRight] = props.diff;\n const jsonsAreEqual = React.useMemo(()=>{\n return linesLeft.length === linesRight.length && linesLeft.every((item)=>item.type === 'equal') && linesRight.every((item)=>item.type === 'equal');\n }, [\n linesLeft,\n linesRight\n ]);\n const mergedTexts = {\n ...DEFAULT_TEXTS,\n ...props.texts\n };\n const lineNumberWidth = props.lineNumbers ? `calc(${String(linesLeft.length).length}ch + 16px)` : 0;\n const indent = props.indent ?? DEFAULT_INDENT;\n const indentChar = indent === 'tab' ? '\\t' : ' ';\n const indentSize = indent === 'tab' ? 1 : indent;\n const inlineDiffOptions = {\n mode: props.inlineDiffOptions?.mode || 'char',\n wordSeparator: props.inlineDiffOptions?.wordSeparator || ''\n };\n const hideUnchangedLines = props.hideUnchangedLines ?? false;\n const { scrollContainer: _scrollContainer = 'body', itemHeight = 18, expandLineHeight = 26 } = !props.virtual || props.virtual === true ? {} : props.virtual;\n const scrollContainer = _scrollContainer === 'body' ? document.body : document.querySelector(_scrollContainer);\n // Use these refs to keep the diff data and segments sync,\n // or it may cause runtime error because of their mismatch.\n // Do not use the states to render, use the refs to render and use `updateViewer` to update.\n const linesLeftRef = React.useRef(linesLeft);\n const linesRightRef = React.useRef(linesRight);\n const segmentsRef = React.useRef(getSegments(linesLeft, linesRight, hideUnchangedLines, jsonsAreEqual));\n const accTopRef = React.useRef([]);\n const totalHeightRef = React.useRef(0);\n const tbodyRef = React.useRef(null);\n const [, forceUpdate] = React.useState({});\n const updateViewer = ()=>{\n accTopRef.current = [];\n if (props.virtual) {\n let acc = 0;\n for (const segment of segmentsRef.current){\n if (isExpandLine(segment)) {\n accTopRef.current.push(acc);\n acc += expandLineHeight;\n } else {\n accTopRef.current.push(acc);\n acc += itemHeight * (segment.end - segment.start);\n }\n }\n totalHeightRef.current = segmentsRef.current.reduce((acc, segment)=>{\n if (!isExpandLine(segment)) {\n return acc + (segment.end - segment.start) * itemHeight;\n }\n return acc + expandLineHeight;\n }, 0);\n }\n forceUpdate({});\n };\n React.useEffect(()=>{\n linesLeftRef.current = linesLeft;\n linesRightRef.current = linesRight;\n segmentsRef.current = getSegments(linesLeft, linesRight, hideUnchangedLines, jsonsAreEqual);\n updateViewer();\n }, [\n hideUnchangedLines,\n linesLeft,\n linesRight\n ]);\n React.useEffect(()=>{\n if (!props.virtual || !scrollContainer) {\n return;\n }\n const onScroll = ()=>forceUpdate({});\n scrollContainer.addEventListener('scroll', onScroll);\n return ()=>{\n scrollContainer.removeEventListener('scroll', onScroll);\n };\n }, [\n props.virtual,\n scrollContainer\n ]);\n const onExpandBefore = (segmentIndex)=>(lines)=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n end: Math.max(newSegment.end - lines, newSegment.start)\n };\n if (segmentIndex + 1 < segmentsRef.current.length - 1) {\n newSegments[segmentIndex + 1] = {\n ...newSegments[segmentIndex + 1],\n start: Math.max(newSegment.end - lines, newSegment.start)\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const onExpandAfter = (segmentIndex)=>(lines)=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n start: Math.min(newSegment.start + lines, newSegment.end)\n };\n if (segmentIndex > 1) {\n newSegments[segmentIndex - 1] = {\n ...newSegments[segmentIndex - 1],\n end: Math.min(newSegment.start + lines, newSegment.end)\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const onExpandAll = (segmentIndex)=>()=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n start: newSegment.start,\n end: newSegment.start\n };\n if (segmentIndex + 1 < segmentsRef.current.length - 1) {\n newSegments[segmentIndex + 1] = {\n ...newSegments[segmentIndex + 1],\n start: newSegment.start\n };\n } else {\n newSegments[segmentIndex - 1] = {\n ...newSegments[segmentIndex - 1],\n end: newSegment.end\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const renderInlineResult = (text, info = [], comma = false, syntaxHighlightEnabled = false)=>/*#__PURE__*/ React.createElement(React.Fragment, null, info.map((item, index)=>{\n const frag = text.slice(item.start, item.end);\n if (!item.type && !item.token) {\n return frag;\n }\n const className = [\n item.type ? `inline-diff-${item.type}` : '',\n item.token ? `token ${item.token}` : ''\n ].filter(Boolean).join(' ');\n return /*#__PURE__*/ React.createElement(\"span\", {\n key: `${index}-${item.type}-${frag}`,\n className: className\n }, frag);\n }), comma && (syntaxHighlightEnabled ? /*#__PURE__*/ React.createElement(\"span\", {\n className: \"token punctuation\"\n }, \",\") : ','));\n const renderLine = (index, syntaxHighlightEnabled)=>{\n const l = linesLeftRef.current[index];\n const r = linesRightRef.current[index];\n const [lDiff, rDiff] = props.highlightInlineDiff && l.type === 'modify' && r.type === 'modify' ? getInlineDiff(l.text, r.text, inlineDiffOptions) : [\n [],\n []\n ];\n const lTokens = syntaxHighlightLine(syntaxHighlightEnabled, l.text, 0);\n const rTokens = syntaxHighlightLine(syntaxHighlightEnabled, r.text, 0);\n const lResult = mergeSegments(lTokens, lDiff);\n const rResult = mergeSegments(rTokens, rDiff);\n const bgLeft = l.type !== 'equal' ? props.bgColour?.[l.type] ?? '' : '';\n const bgRight = r.type !== 'equal' ? props.bgColour?.[r.type] ?? '' : '';\n return(// eslint-disable-next-line react/no-array-index-key\n /*#__PURE__*/ React.createElement(\"tr\", {\n key: index\n }, props.lineNumbers && /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${l.type} line-number`,\n style: {\n backgroundColor: bgLeft\n }\n }, l.lineNumber), /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${l.type}`,\n style: {\n backgroundColor: bgLeft\n }\n }, /*#__PURE__*/ React.createElement(\"pre\", null, l.text && indentChar.repeat(l.level * indentSize), renderInlineResult(l.text, lResult, l.comma, syntaxHighlightEnabled))), props.lineNumbers && /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${r.type} line-number`,\n style: {\n backgroundColor: bgRight\n }\n }, r.lineNumber), /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${r.type}`,\n style: {\n backgroundColor: bgRight\n }\n }, /*#__PURE__*/ React.createElement(\"pre\", null, r.text && indentChar.repeat(r.level * indentSize), renderInlineResult(r.text, rResult, r.comma, syntaxHighlightEnabled)))));\n };\n const renderExpandLine = (hasLinesBefore, hasLinesAfter, expandMoreLinesLimit, index)=>{\n return /*#__PURE__*/ React.createElement(React.Fragment, null, hasLinesBefore && /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandBefore(index)(expandMoreLinesLimit)\n }, mergedTexts.showLinesBefore.replaceAll('%d', String(expandMoreLinesLimit))), /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandAll(index)()\n }, mergedTexts.showAll), hasLinesAfter && /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandAfter(index)(expandMoreLinesLimit)\n }, mergedTexts.showLinesAfter.replaceAll('%d', String(expandMoreLinesLimit))));\n };\n const renderSegment = (segment, index, renderStart, renderEnd, syntaxHighlightEnabled)=>{\n let { start, end } = segment;\n start = Math.max(start, renderStart);\n end = Math.min(end, renderEnd);\n if (start === end) {\n return null;\n }\n if (!isExpandLine(segment)) {\n return Array(end - start).fill(0).map((_, index)=>renderLine(start + index, syntaxHighlightEnabled));\n }\n const { hasLinesBefore, hasLinesAfter } = segment;\n const expandMoreLinesLimit = typeof hideUnchangedLines === 'boolean' ? DEFAULT_EXPAND_MORE_LINES_LIMIT : hideUnchangedLines.expandMoreLinesLimit || DEFAULT_EXPAND_MORE_LINES_LIMIT;\n return [\n /*#__PURE__*/ React.createElement(\"tr\", {\n key: `expand-line-${index}`,\n className: \"expand-line\"\n }, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n className: `${hasLinesBefore ? 'has-lines-before' : ''} ${hasLinesAfter ? 'has-lines-after' : ''}`\n }, typeof hideUnchangedLines !== 'boolean' && hideUnchangedLines.expandLineRenderer ? hideUnchangedLines.expandLineRenderer({\n hasLinesBefore,\n hasLinesAfter,\n onExpandBefore: onExpandBefore(index),\n onExpandAfter: onExpandAfter(index),\n onExpandAll: onExpandAll(index)\n }) : renderExpandLine(hasLinesBefore, hasLinesAfter, expandMoreLinesLimit, index)))\n ];\n };\n const renderTbody = (syntaxHighlightEnabled)=>{\n if (jsonsAreEqual && hideUnchangedLines) {\n return /*#__PURE__*/ React.createElement(\"tr\", {\n key: \"message-line\",\n className: \"message-line\"\n }, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4\n }, mergedTexts.noChangeDetected));\n }\n if (!props.virtual) {\n return segmentsRef.current.map((item, index)=>renderSegment(item, index, 0, linesLeftRef.current.length, syntaxHighlightEnabled));\n }\n const containerHeight = scrollContainer?.clientHeight ?? 0;\n const scrollTop = scrollContainer?.scrollTop ?? 0;\n const scrollBottom = scrollTop + containerHeight;\n let t = tbodyRef.current;\n let firstElementTop = t?.offsetTop ?? 0;\n while(t?.offsetParent && t?.offsetParent !== scrollContainer){\n t = t.offsetParent;\n firstElementTop += t.offsetTop;\n }\n if (firstElementTop > scrollBottom || firstElementTop + totalHeightRef.current < scrollTop) {\n return /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: `${totalHeightRef.current}px`\n }\n }));\n }\n const viewportTop = scrollTop - firstElementTop;\n const viewportBottom = scrollBottom - firstElementTop;\n const [startSegment, startLine, endSegment, endLine] = findVisibleLines(segmentsRef.current, accTopRef.current, viewportTop, viewportBottom, itemHeight, expandLineHeight);\n const [topHeight, bottomHeight] = calculatePlaceholderHeight(segmentsRef.current, accTopRef.current, startSegment, startLine, endSegment, endLine, itemHeight, expandLineHeight, totalHeightRef.current);\n const visibleSegments = segmentsRef.current.slice(startSegment, endSegment + 1);\n return visibleSegments.length ? /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: topHeight,\n padding: 0\n }\n })), visibleSegments.map((segment, index)=>renderSegment(segment, index, startLine, endLine, syntaxHighlightEnabled)), /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: bottomHeight,\n padding: 0\n }\n }))) : /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: `${totalHeightRef.current}px`\n }\n }));\n };\n const renderMeasureLine = ()=>/*#__PURE__*/ React.createElement(\"colgroup\", {\n className: \"measure-line\"\n }, props.lineNumbers && /*#__PURE__*/ React.createElement(\"col\", {\n style: {\n width: lineNumberWidth\n }\n }), /*#__PURE__*/ React.createElement(\"col\", null), props.lineNumbers && /*#__PURE__*/ React.createElement(\"col\", {\n style: {\n width: lineNumberWidth\n }\n }), /*#__PURE__*/ React.createElement(\"col\", null));\n const classes = [\n 'json-diff-viewer',\n props.virtual && 'json-diff-viewer-virtual',\n props.syntaxHighlight && `json-diff-viewer-theme-${props.syntaxHighlight.theme || 'monokai'}`,\n props.className\n ].filter(Boolean).join(' ');\n const syntaxHighlightEnabled = !!props.syntaxHighlight;\n return /*#__PURE__*/ React.createElement(\"table\", {\n className: classes,\n style: props.style\n }, renderMeasureLine(), /*#__PURE__*/ React.createElement(\"tbody\", {\n ref: tbodyRef\n }, renderTbody(syntaxHighlightEnabled)));\n};\nViewer.displayName = 'Viewer';\n\nexport { Viewer as default };\n",null,null,null,null,"function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["_extends","Object","assign","bind","n","e","arguments","length","t","r","hasOwnProperty","call","apply","_assertThisInitialized","ReferenceError","_setPrototypeOf","setPrototypeOf","__proto__","safeIsNaN","Number","isNaN","value","areInputsEqual","newInputs","lastInputs","i","first","second","memoizeOne","resultFn","isEqual","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","this","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","size","getScrollbarSize","recalculate","div","document","createElement","style","width","height","overflow","body","appendChild","offsetWidth","clientWidth","removeChild","cachedRTLResult","getRTLOffsetType","outerDiv","outerStyle","direction","innerDiv","innerStyle","scrollLeft","process","env","NODE_ENV","defaultItemKey$1","index","data","devWarningsDirection","devWarningsTagName$1","createListComponent","_ref","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_PureComponent","o","List","props","_this","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","state","instance","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","onItemsRendered","_callOnScroll","onScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","_getItemStyleCache","_offset","isHorizontal","isRtl","offsetHorizontal","position","left","undefined","right","top","_","__","___","_onScrollHorizontal","event","_event$currentTarget","currentTarget","scrollWidth","setState","prevState","Math","max","min","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","clientHeight","scrollHeight","scrollTop","_outerRefSetter","ref","outerRef","current","callback","delay","start","_resetIsScrolling","requestAnimationFrame","tick","prototype","create","constructor","getDerivedStateFromProps","nextProps","validateSharedProps$1","_proto","scrollTo","scrollToItem","align","_this$props2","itemCount","scrollbarSize","componentDidMount","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","componentWillUnmount","render","_this$props5","children","className","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","startIndex","stopIndex","items","_index","push","key","estimatedTotalSize","WebkitOverflowScrolling","willChange","pointerEvents","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","PureComponent","defaultProps","window","WeakSet","_ref2","_ref3","has","add","console","warn","Error","getItemMetadata$1","instanceProps","itemMetadataMap","lastMeasuredIndex","offset","itemMetadata","findNearestItemBinarySearch$1","high","low","middle","floor","currentOffset","findNearestItemExponentialSearch$1","interval","estimatedItemSize","totalSizeOfMeasuredItems","VariableSizeList","maxOffset","minOffset","round","findNearestItem$1","resetAfterIndex","shouldForceUpdate","forceUpdate","_ref5","cleanFields","obj","Infinity","includes","Array","isArray","map","filter","result","entries","cleaned","concat","a","b","prependEach","lenA","lenB","detectCircular","Map","set","stringify","replacer","space","depth","undefinedBehavior","JSON","UndefinedBehavior","throw","String","stringifyInvalidValue","v","join","keys","k","parse","formatValue","pretty","getOrderByType","cmp","options","orderByMapA","keyOrdersMap","get","orderByMapB","orderByTypeA","orderByTypeB","ignoreCase","toLowerCase","localeCompare","BigInt","getType","prettyAppendLines","linesLeft","linesRight","keyLeft","keyRight","valueLeft","valueRight","level","valueCmpOptions","_resultLeft","maxDepth","split","_resultRight","showModifications","maxLines","type","text","match","replace","sortKeys","arr","sort","ignoreCaseForKey","diffObject","lhs","rhs","arrayDiffFunc","addedLines","keysLeft","keysRight","preserveKeyOrder","keysCmpOptions","keyCmpResult","arrLeft","arrRight","resLeft","resRight","shift","_listCacheClear","__data__","eq_1","other","eq$1","_assocIndexOf","array","assocIndexOf$3","splice","assocIndexOf$2","assocIndexOf$1","assocIndexOf","listCacheClear","listCacheDelete","pop","listCacheGet","listCacheHas","listCacheSet","ListCache$4","clear","entry","_ListCache","ListCache$3","_stackClear","_stackDelete","_stackGet","_stackHas","commonjsGlobal","globalThis","global","self","_freeGlobal","freeGlobal","freeSelf","_root","Function","_Symbol","Symbol","Symbol$2","objectProto$b","hasOwnProperty$8","nativeObjectToString$1","toString","symToStringTag$1","toStringTag","_getRawTag","isOwn","tag","unmasked","nativeObjectToString","getRawTag","objectToString","symToStringTag","_baseGetTag","isObject_1","baseGetTag$3","isObject$1","uid","isFunction_1","coreJsData","maskSrcKey","exec","IE_PROTO","_isMasked","func","funcToString$1","_toSource","isFunction$1","isMasked","isObject","toSource$1","reIsHostCtor","funcProto","objectProto$9","funcToString","hasOwnProperty$7","reIsNative","RegExp","baseIsNative","test","getValue","object","_getNative","_Map","_nativeCreate","nativeCreate$3","_hashClear","_hashDelete","nativeCreate$2","hasOwnProperty$6","_hashGet","nativeCreate$1","hasOwnProperty$5","nativeCreate","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash$1","Hash","ListCache$2","Map$3","isKeyable","_getMapData","getMapData$3","getMapData$2","getMapData$1","getMapData","_mapCacheSet","mapCacheClear","hash","string","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache$2","_MapCache","ListCache$1","Map$2","MapCache$1","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","LARGE_ARRAY_SIZE","Stack$1","_Stack","MapCache","setCacheAdd","setCacheHas","SetCache$1","values","SetCache","arraySome","predicate","cacheHas","cache","_equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","Uint8Array","eq","equalArrays$1","mapToArray","forEach","setToArray","symbolProto","symbolValueOf","valueOf","_equalByTag","byteLength","byteOffset","buffer","name","message","convert","stacked","_arrayPush","isArray_1","arrayPush","isArray$2","_baseGetAllKeys","keysFunc","symbolsFunc","arrayFilter","resIndex","stubArray","propertyIsEnumerable$1","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","_getSymbols","symbol","_baseTimes","iteratee","isObjectLike_1","baseGetTag$2","isObjectLike$3","baseIsArguments","isObjectLike$2","objectProto$5","hasOwnProperty$4","isArguments_1","isBuffer$2","exports","stubFalse_1","module","root","stubFalse","freeExports","nodeType","freeModule","Buffer","isBuffer","reIsUint","_isIndex","isLength_1","baseGetTag$1","isLength$1","isObjectLike$1","typedArrayTags","_baseIsTypedArray","_baseUnary","_nodeUtil","freeProcess","nodeUtil","types","require","binding","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","isTypedArray_1","baseTimes","isArguments","isArray$1","isBuffer$1","isIndex","isTypedArray$1","hasOwnProperty$3","_arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","objectProto$3","_isPrototype","Ctor","nativeKeys$1","transform","arg","overArg","isPrototype","nativeKeys","hasOwnProperty$2","isFunction","isLength","arrayLikeKeys","baseKeys","isArrayLike","baseGetAllKeys","getSymbols","getAllKeys","hasOwnProperty$1","_equalObjects","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","DataView","Map$1","Promise$1","Set$1","WeakMap","baseGetTag","toSource","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag$1","ArrayBuffer","resolve","ctorString","Stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isObjectLike","_baseIsEqual","baseIsEqual$1","baseIsEqual","isEqualWith_1","recursiveEqual","shallowSimilarity","intersection","addArrayOpeningBrackets","addArrayClosingBrackets","addMaxDepthPlaceholder","diffArrayLCS","tLeftReverse","tRightReverse","f","fill","backtrack","j","typeI","tLeft","tRight","reversedLeft","reversedRight","reverse","l","unshift","typeLeft","removedLines","lcs","allObjectsHaveCompareKey","compareKey","item","diffArrayCompareKey","diffArrayRecursive","diffArrayNormal","isObjectArray","every","leftProcessed","Set","rightProcessed","leftItem","leftKeyValue","matchIndex","rightItem","rightKeyValue","leftType","from","lVal","rVal","arrL","arrR","leftLines","rightLines","diffObjectWithArraySupport","leftObj","rightObj","fallbackArrayDiff","compareKeyArrayDiff","itemLeft","itemRight","rightType","objLeft","objRight","arrayDiffMethod","sortInnerArrays","source","EQUAL_EMPTY_LINE","EQUAL_LEFT_BRACKET_LINE","EQUAL_RIGHT_BRACKET_LINE","Differ","sortResultLines","changed","t1","t2","calculateLineNumbers","lineNumber","calculateCommas","nextLine","endsWith","comma","diff","sourceLeft","sourceRight","resultLeft","resultRight","line","lLength","rLength","isExpandLine","segment","getSegmentHeight","itemHeight","expandLineHeight","end","mergeSegments","tokens","diffs","token","d","bin","defineProperty","applyPatch","calcPatch","lcs_1","diff_core","DiffGen","iterator","next","c","done","stack_base","N","M","Z","stack_top","Z_block","W","L","parity","offsetx","offsety","hmax","z","h_loop","h","kmin","kmax","gkm","gkp","u","x","y","pkm","pkp","pxe","pye","sx","pxs","oxs","oxe","oys","pys","oye","diff_internal","Uint16Array","Uint32Array","xs","ys","LCSGen","rec","ex","ey","slice","isView","subarray","patch","dels","dele","ins","getOriginalIndices","separatorLength","filterEmptyParts","syntaxHighlightLine","enabled","startsWith","pairedQuoteIndex","substring","defaultOptions","threshold","margin","getSegments","jsonsAreEqual","segments","_options","hasLinesBefore","hasLinesAfter","DEFAULT_TEXTS","noChangeDetected","showLinesBefore","showLinesAfter","showAll","Viewer","React","useMemo","mergedTexts","texts","lineNumberWidth","lineNumbers","indent","indentChar","indentSize","inlineDiffOptions","mode","wordSeparator","hideUnchangedLines","scrollContainer","_scrollContainer","virtual","querySelector","linesLeftRef","useRef","linesRightRef","segmentsRef","accTopRef","totalHeightRef","tbodyRef","useState","updateViewer","acc","reduce","useEffect","addEventListener","removeEventListener","onExpandBefore","segmentIndex","lines","newSegments","newSegment","onExpandAfter","onExpandAll","renderInlineResult","info","syntaxHighlightEnabled","Fragment","frag","Boolean","renderLine","lDiff","rDiff","highlightInlineDiff","resultL","resultR","lastL","lastR","lArr","rArr","iter","indicesL","indicesR","sl","sr","getInlineDiff","lTokens","rTokens","lResult","rResult","bgLeft","bgColour","bgRight","backgroundColor","repeat","renderExpandLine","expandMoreLinesLimit","onClick","replaceAll","renderSegment","renderStart","renderEnd","colSpan","expandLineRenderer","classes","syntaxHighlight","theme","containerHeight","scrollBottom","firstElementTop","offsetTop","offsetParent","viewportTop","viewportBottom","startSegment","startLine","endSegment","endLine","accTop","m","startSegmentItem","endSegmentItem","ceil","findVisibleLines","topHeight","bottomHeight","totalHeight","calculatePlaceholderHeight","visibleSegments","padding","renderTbody","displayName","ROW_HEIGHT","EQUAL_LINE_COLOR","MINIMAP_HOVER_SCROLL_COLOR","DiffMinimap","leftDiff","rightDiff","miniMapWidth","currentScrollTop","searchResults","currentMatchIndex","canvasRef","containerRef","isDragging","totalLines","viewportHeight","totalShownLines","drawLine","useCallback","ctx","fillStyle","fillRect","drawScrollBox","color","scale","lineHeight","drawDifferencesInMinimap","drawMinimap","canvas","getContext","clearRect","handleMouseDown","rect","getBoundingClientRect","relativeY","clientY","isFinite","handleMouseMove","scrollSquareTop","isHovering","bottom","forcedScrollTop","handleMouseUp","_jsx","cursor","onMouseDown","onMouseMove","onMouseLeave","highlightMatches","term","querySelectorAll","element","classList","remove","termToUse","regex","textContent","isNonEmptyEqualLine","buildViewFromSegments","contextSize","isExpanded","originalIndex","currentSegment","shouldAddTopContext","SearchIcon","viewBox","xmlns","stroke","strokeWidth","strokeLinecap","strokeLinejoin","css","insertAt","head","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","DIFF_VIEWER_CLASS","isCollapsed","ViewerRow","onExpand","searchTerm","originalLeftLine","originalRightLine","leftLine","rightLine","VirtualizedDiffViewer","oldValue","newValue","leftTitle","rightTitle","hideSearch","onSearchMatch","differOptions","listRef","searchTimeoutRef","setScrollTop","setSegments","searchState","setSearchState","results","currentIndex","differ","diffData","rawLeftDiff","rawRightDiff","leftView","setLeftView","rightView","setRightView","generatedSegments","firstContextEnd","generateSegments","leftBuilt","rightBuilt","handleSearch","prev","clearTimeout","setTimeout","searchRegex","performSearch","navigateToMatch","newIndex","observer","MutationObserver","config","childList","subtree","viewer","observe","listContainer","handleScroll","disconnect","handleExpand","updated","seg","expandedSegment","originalStart","originalEnd","handleHideAll","hasExpandedSegments","some","listData","_jsxs","role","placeholder","onChange","target","display","gap"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,12]}
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/json-diff-kit/dist/differ.js","../../node_modules/json-diff-kit/dist/viewer.js","../../node_modules/@babel/runtime/helpers/esm/extends.js","../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../../node_modules/memoize-one/dist/memoize-one.esm.js","../../node_modules/react-window/dist/index.esm.js","../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../../../src/components/SearchIcon.tsx","../../../src/components/DiffViewer/utils/diffSearchUtils.ts","../../../src/components/DiffViewer/utils/preprocessDiff.ts","../../../src/components/DiffViewer/components/DiffMinimap.tsx","../../node_modules/style-inject/dist/style-inject.es.js","../../../src/components/DiffViewer/components/VirtualizedDiffViewer.tsx"],"sourcesContent":["// Keep only the fields that are valid in JSON\nconst cleanFields = (obj)=>{\n if (typeof obj === 'undefined' || obj === null || typeof obj === 'bigint' || Number.isNaN(obj) || obj === Infinity || obj === -Infinity) {\n return undefined;\n }\n if ([\n 'string',\n 'number',\n 'boolean'\n ].includes(typeof obj)) {\n return obj;\n }\n if (Array.isArray(obj)) {\n return obj.map(cleanFields).filter((t)=>typeof t !== 'undefined');\n }\n const result = {};\n for (const [key, value] of Object.entries(obj)){\n const cleaned = cleanFields(value);\n if (typeof cleaned !== 'undefined') {\n result[key] = cleaned;\n }\n }\n return result;\n};\n\n/**\n * If we use `a.push(...b)`, it will result in `Maximum call stack size exceeded` error.\n * The reason is unclear, it may be a bug of V8, so we should implement a push method by ourselves.\n */ const concat = (a, b, prependEach = false)=>{\n if (!Array.isArray(a) || !Array.isArray(b)) {\n throw new Error('Both arguments should be arrays.');\n }\n const lenA = a.length;\n const lenB = b.length;\n const len = lenA + lenB;\n const result = new Array(len);\n if (prependEach) {\n for(let i = 0; i < lenB; i++){\n result[i] = b[lenB - i - 1];\n }\n for(let i = 0; i < lenA; i++){\n result[i + lenB] = a[i];\n }\n return result;\n }\n for(let i = 0; i < lenA; i++){\n result[i] = a[i];\n }\n for(let i = 0; i < lenB; i++){\n result[i + lenA] = b[i];\n }\n return result;\n};\n\nconst detectCircular = (value, map = new Map())=>{\n // primitive types should not be checked\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // value has appeared\n if (map.has(value)) {\n return true;\n }\n map.set(value, true);\n // value is an array\n if (Array.isArray(value)) {\n for(let i = 0; i < value.length; i++){\n if (detectCircular(value[i], map)) {\n return true;\n }\n }\n return false;\n }\n // value is an object\n for(const key in value){\n if (detectCircular(value[key], map)) {\n return true;\n }\n }\n return false;\n};\n\n// https://gist.github.com/RexSkz/c4f78a6e143e9008f9c717623b7a2bc1\nconst stringify = (obj, replacer, space, depth = Infinity, undefinedBehavior)=>{\n if (!obj || typeof obj !== 'object') {\n let result = undefined;\n if (!Number.isNaN(obj) && obj !== Infinity && obj !== -Infinity && typeof obj !== 'bigint') {\n result = JSON.stringify(obj, replacer, space);\n }\n if (result === undefined) {\n switch(undefinedBehavior){\n case UndefinedBehavior.throw:\n throw new Error(`Value is not valid in JSON, got ${String(obj)}`);\n case UndefinedBehavior.stringify:\n return stringifyInvalidValue(obj);\n default:\n throw new Error(`Should not reach here, please report this bug.`);\n }\n }\n return result;\n }\n const t = depth < 1 ? '\"...\"' : Array.isArray(obj) ? `[${obj.map((v)=>stringify(v, replacer, space, depth - 1, undefinedBehavior)).join(',')}]` : `{${Object.keys(obj).map((k)=>`\"${k}\": ${stringify(obj[k], replacer, space, depth - 1, undefinedBehavior)}`).join(', ')}}`;\n return JSON.stringify(JSON.parse(t), replacer, space);\n};\nconst stringifyInvalidValue = (value)=>{\n if (value === undefined) {\n return 'undefined';\n }\n if (value === Infinity) {\n return 'Infinity';\n }\n if (value === -Infinity) {\n return '-Infinity';\n }\n if (Number.isNaN(value)) {\n return 'NaN';\n }\n if (typeof value === 'bigint') {\n return `${value}n`;\n }\n return String(value);\n};\n\nconst formatValue = (value, depth = Infinity, pretty = false, undefinedBehavior = UndefinedBehavior.stringify)=>{\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value) || typeof value === 'object') {\n return stringify(value, undefined, pretty ? 1 : undefined, depth, undefinedBehavior);\n }\n return stringify(value, undefined, undefined, undefined, undefinedBehavior);\n};\n\nconst getOrderByType = (value)=>{\n if (typeof value === 'boolean') {\n return 0;\n }\n if (typeof value === 'number') {\n return 1;\n }\n if (typeof value === 'string') {\n return 2;\n }\n if (value === null) {\n return 3;\n }\n if (Array.isArray(value)) {\n return 4;\n }\n if (typeof value === 'object') {\n return 5;\n }\n if (typeof value === 'symbol') {\n return 6;\n }\n if (typeof value === 'function') {\n return 7;\n }\n if (typeof value === 'bigint') {\n return 8;\n }\n return -1;\n};\n/**\n * The compare function to correct the order for \"array\" or \"object\":\n * - The order for 2 values with different types are: boolean, number, string, null, array, object.\n * - The order for 2 values with the same type is according to the type:\n * - For boolean, number, string: use the `<` sign.\n * - For array and object: preserve the original order (or do we have a better idea?)\n */ const cmp = (a, b, options)=>{\n const orderByMapA = options.keyOrdersMap?.get(a);\n const orderByMapB = options.keyOrdersMap?.get(b);\n if (orderByMapA !== undefined && orderByMapB !== undefined) {\n return orderByMapA - orderByMapB;\n }\n const orderByTypeA = getOrderByType(a);\n const orderByTypeB = getOrderByType(b);\n if (orderByTypeA !== orderByTypeB) {\n return orderByTypeA - orderByTypeB;\n }\n if (a === null && b === null || Array.isArray(a) && Array.isArray(b) || orderByTypeA === 5 && orderByTypeB === 5) {\n return 0;\n }\n switch(typeof a){\n case 'number':\n if (Number.isNaN(a) && Number.isNaN(b) || a === Infinity && b === Infinity || a === -Infinity && b === -Infinity) {\n return 0;\n }\n return a - b;\n case 'string':\n if (options.ignoreCase) {\n a = a.toLowerCase();\n b = b.toLowerCase();\n }\n return a < b ? -1 : a > b ? 1 : 0;\n case 'boolean':\n return +a - +b;\n case 'symbol':\n case 'function':\n return String(a).localeCompare(String(b));\n }\n if (typeof a === 'bigint' && typeof b === 'bigint') {\n const result = BigInt(a) - BigInt(b);\n return result < 0 ? -1 : result > 0 ? 1 : 0;\n }\n return String(a).localeCompare(String(b));\n};\n\nconst getType = (value)=>{\n if (Array.isArray(value)) {\n return 'array';\n }\n if (value === null) {\n return 'null';\n }\n return typeof value;\n};\n\nconst prettyAppendLines = (linesLeft, linesRight, keyLeft, keyRight, valueLeft, valueRight, level, options)=>{\n const valueCmpOptions = {\n ignoreCase: options.ignoreCase\n };\n const _resultLeft = formatValue(valueLeft, options.maxDepth, true, options.undefinedBehavior).split('\\n');\n const _resultRight = formatValue(valueRight, options.maxDepth, true, options.undefinedBehavior).split('\\n');\n if (cmp(valueLeft, valueRight, valueCmpOptions) !== 0) {\n if (options.showModifications) {\n const maxLines = Math.max(_resultLeft.length, _resultRight.length);\n for(let i = _resultLeft.length; i < maxLines; i++){\n _resultLeft.push('');\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n _resultRight.push('');\n }\n linesLeft.push({\n level,\n type: 'modify',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'modify',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = _resultLeft.length; i < maxLines; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n linesRight.push({\n level,\n type: 'modify',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'modify',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else {\n linesLeft.push({\n level,\n type: 'remove',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n for(let i = 0; i < _resultRight.length; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n for(let i = 0; i < _resultLeft.length; i++){\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n linesRight.push({\n level,\n type: 'add',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n } else {\n const maxLines = Math.max(_resultLeft.length, _resultRight.length);\n for(let i = _resultLeft.length; i < maxLines; i++){\n _resultLeft.push('');\n }\n for(let i = _resultRight.length; i < maxLines; i++){\n _resultRight.push('');\n }\n linesLeft.push({\n level,\n type: 'equal',\n text: keyLeft ? `\"${keyLeft}\": ${_resultLeft[0]}` : _resultLeft[0]\n });\n for(let i = 1; i < _resultLeft.length; i++){\n linesLeft.push({\n level: level + (_resultLeft[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'equal',\n text: _resultLeft[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n linesRight.push({\n level,\n type: 'equal',\n text: keyRight ? `\"${keyRight}\": ${_resultRight[0]}` : _resultRight[0]\n });\n for(let i = 1; i < _resultRight.length; i++){\n linesRight.push({\n level: level + (_resultRight[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'equal',\n text: _resultRight[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n};\n\nconst sortKeys = (arr, options)=>{\n return arr.sort((a, b)=>cmp(a, b, {\n ignoreCase: options.ignoreCaseForKey\n }));\n};\n\nconst diffObject = (lhs, rhs, level = 1, options, arrayDiffFunc)=>{\n if (level > (options.maxDepth || Infinity)) {\n return [\n [\n {\n level,\n type: 'equal',\n text: '...'\n }\n ],\n [\n {\n level,\n type: 'equal',\n text: '...'\n }\n ]\n ];\n }\n let linesLeft = [];\n let linesRight = [];\n if (lhs === null && rhs === null || lhs === undefined && rhs === undefined) {\n return [\n linesLeft,\n linesRight\n ];\n } else if (lhs === null || lhs === undefined) {\n const addedLines = stringify(rhs, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n return [\n linesLeft,\n linesRight\n ];\n } else if (rhs === null || rhs === undefined) {\n const addedLines = stringify(lhs, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n return [\n linesLeft,\n linesRight\n ];\n }\n const keysLeft = Object.keys(lhs);\n const keysRight = Object.keys(rhs);\n const keyOrdersMap = new Map();\n if (!options.preserveKeyOrder) {\n sortKeys(keysLeft, options);\n sortKeys(keysRight, options);\n } else if (options.preserveKeyOrder === 'before') {\n for(let i = 0; i < keysLeft.length; i++){\n keyOrdersMap.set(keysLeft[i], i);\n }\n for(let i = 0; i < keysRight.length; i++){\n if (!keyOrdersMap.has(keysRight[i])) {\n keyOrdersMap.set(keysRight[i], keysLeft.length + i);\n }\n }\n keysRight.sort((a, b)=>keyOrdersMap.get(a) - keyOrdersMap.get(b));\n } else if (options.preserveKeyOrder === 'after') {\n for(let i = 0; i < keysRight.length; i++){\n keyOrdersMap.set(keysRight[i], i);\n }\n for(let i = 0; i < keysLeft.length; i++){\n if (!keyOrdersMap.has(keysLeft[i])) {\n keyOrdersMap.set(keysLeft[i], keysRight.length + i);\n }\n }\n keysLeft.sort((a, b)=>keyOrdersMap.get(a) - keyOrdersMap.get(b));\n }\n const keysCmpOptions = {\n ignoreCase: options.ignoreCaseForKey,\n keyOrdersMap\n };\n while(keysLeft.length || keysRight.length){\n const keyLeft = keysLeft[0];\n const keyRight = keysRight[0];\n const keyCmpResult = cmp(keyLeft, keyRight, keysCmpOptions);\n if (keyCmpResult === 0) {\n if (getType(lhs[keyLeft]) !== getType(rhs[keyRight])) {\n prettyAppendLines(linesLeft, linesRight, keyLeft, keyRight, lhs[keyLeft], rhs[keyRight], level, options);\n } else if (Array.isArray(lhs[keyLeft])) {\n const arrLeft = [\n ...lhs[keyLeft]\n ];\n const arrRight = [\n ...rhs[keyRight]\n ];\n const [resLeft, resRight] = arrayDiffFunc(arrLeft, arrRight, keyLeft, keyRight, level, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else if (lhs[keyLeft] === null) {\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": null`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": null`\n });\n } else if (typeof lhs[keyLeft] === 'object') {\n const result = diffObject(lhs[keyLeft], rhs[keyRight], level + 1, options, arrayDiffFunc);\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": {`\n });\n linesLeft = concat(linesLeft, result[0]);\n linesLeft.push({\n level,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": {`\n });\n linesRight = concat(linesRight, result[1]);\n linesRight.push({\n level,\n type: 'equal',\n text: '}'\n });\n } else {\n prettyAppendLines(linesLeft, linesRight, keyLeft, keyRight, lhs[keyLeft], rhs[keyRight], level, options);\n }\n } else if (keysLeft.length && keysRight.length) {\n if (keyCmpResult < 0) {\n const addedLines = stringify(lhs[keyLeft], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: i ? text : `\"${keyLeft}\": ${text}`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else {\n const addedLines = stringify(rhs[keyRight], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: i ? text : `\"${keyRight}\": ${text}`\n });\n }\n }\n } else if (keysLeft.length) {\n const addedLines = stringify(lhs[keyLeft], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: i ? text : `\"${keyLeft}\": ${text}`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ''\n });\n }\n } else if (keysRight.length) {\n const addedLines = stringify(rhs[keyRight], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n const text = addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '');\n linesLeft.push({\n level,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: i ? text : `\"${keyRight}\": ${text}`\n });\n }\n }\n if (!keyLeft) {\n keysRight.shift();\n } else if (!keyRight) {\n keysLeft.shift();\n } else if (keyCmpResult === 0) {\n keysLeft.shift();\n keysRight.shift();\n } else if (keyCmpResult < 0) {\n keysLeft.shift();\n } else {\n keysRight.shift();\n }\n }\n if (linesLeft.length !== linesRight.length) {\n throw new Error('Diff error: length not match for left & right, please report a bug with your data.');\n }\n return [\n linesLeft,\n linesRight\n ];\n};\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */ function listCacheClear$1() {\n this.__data__ = [];\n this.size = 0;\n}\nvar _listCacheClear = listCacheClear$1;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */ function eq$2(value, other) {\n return value === other || value !== value && other !== other;\n}\nvar eq_1 = eq$2;\n\nvar eq$1 = eq_1;\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */ function assocIndexOf$4(array, key) {\n var length = array.length;\n while(length--){\n if (eq$1(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\nvar _assocIndexOf = assocIndexOf$4;\n\nvar assocIndexOf$3 = _assocIndexOf;\n/** Used for built-in method references. */ var arrayProto = Array.prototype;\n/** Built-in value references. */ var splice = arrayProto.splice;\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function listCacheDelete$1(key) {\n var data = this.__data__, index = assocIndexOf$3(data, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\nvar _listCacheDelete = listCacheDelete$1;\n\nvar assocIndexOf$2 = _assocIndexOf;\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function listCacheGet$1(key) {\n var data = this.__data__, index = assocIndexOf$2(data, key);\n return index < 0 ? undefined : data[index][1];\n}\nvar _listCacheGet = listCacheGet$1;\n\nvar assocIndexOf$1 = _assocIndexOf;\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function listCacheHas$1(key) {\n return assocIndexOf$1(this.__data__, key) > -1;\n}\nvar _listCacheHas = listCacheHas$1;\n\nvar assocIndexOf = _assocIndexOf;\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */ function listCacheSet$1(key, value) {\n var data = this.__data__, index = assocIndexOf(data, key);\n if (index < 0) {\n ++this.size;\n data.push([\n key,\n value\n ]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\nvar _listCacheSet = listCacheSet$1;\n\nvar listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function ListCache$4(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `ListCache`.\nListCache$4.prototype.clear = listCacheClear;\nListCache$4.prototype['delete'] = listCacheDelete;\nListCache$4.prototype.get = listCacheGet;\nListCache$4.prototype.has = listCacheHas;\nListCache$4.prototype.set = listCacheSet;\nvar _ListCache = ListCache$4;\n\nvar ListCache$3 = _ListCache;\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */ function stackClear$1() {\n this.__data__ = new ListCache$3;\n this.size = 0;\n}\nvar _stackClear = stackClear$1;\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function stackDelete$1(key) {\n var data = this.__data__, result = data['delete'](key);\n this.size = data.size;\n return result;\n}\nvar _stackDelete = stackDelete$1;\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function stackGet$1(key) {\n return this.__data__.get(key);\n}\nvar _stackGet = stackGet$1;\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function stackHas$1(key) {\n return this.__data__.has(key);\n}\nvar _stackHas = stackHas$1;\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;\nvar _freeGlobal = freeGlobal$1;\n\nvar freeGlobal = _freeGlobal;\n/** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */ var root$8 = freeGlobal || freeSelf || Function('return this')();\nvar _root = root$8;\n\nvar root$7 = _root;\n/** Built-in value references. */ var Symbol$3 = root$7.Symbol;\nvar _Symbol = Symbol$3;\n\nvar Symbol$2 = _Symbol;\n/** Used for built-in method references. */ var objectProto$b = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$8 = objectProto$b.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */ var nativeObjectToString$1 = objectProto$b.toString;\n/** Built-in value references. */ var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */ function getRawTag$1(value) {\n var isOwn = hasOwnProperty$8.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n try {\n value[symToStringTag$1] = undefined;\n var unmasked = true;\n } catch (e) {}\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n}\nvar _getRawTag = getRawTag$1;\n\n/** Used for built-in method references. */ var objectProto$a = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */ var nativeObjectToString = objectProto$a.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */ function objectToString$1(value) {\n return nativeObjectToString.call(value);\n}\nvar _objectToString = objectToString$1;\n\nvar Symbol$1 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString;\n/** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]';\n/** Built-in value references. */ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */ function baseGetTag$4(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n}\nvar _baseGetTag = baseGetTag$4;\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */ function isObject$2(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\nvar isObject_1 = isObject$2;\n\nvar baseGetTag$3 = _baseGetTag, isObject$1 = isObject_1;\n/** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]';\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */ function isFunction$2(value) {\n if (!isObject$1(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag$3(value);\n return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\nvar isFunction_1 = isFunction$2;\n\nvar root$6 = _root;\n/** Used to detect overreaching core-js shims. */ var coreJsData$1 = root$6['__core-js_shared__'];\nvar _coreJsData = coreJsData$1;\n\nvar coreJsData = _coreJsData;\n/** Used to detect methods masquerading as native. */ var maskSrcKey = function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? 'Symbol(src)_1.' + uid : '';\n}();\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */ function isMasked$1(func) {\n return !!maskSrcKey && maskSrcKey in func;\n}\nvar _isMasked = isMasked$1;\n\n/** Used for built-in method references. */ var funcProto$1 = Function.prototype;\n/** Used to resolve the decompiled source of functions. */ var funcToString$1 = funcProto$1.toString;\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */ function toSource$2(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func);\n } catch (e) {}\n try {\n return func + '';\n } catch (e) {}\n }\n return '';\n}\nvar _toSource = toSource$2;\n\nvar isFunction$1 = isFunction_1, isMasked = _isMasked, isObject = isObject_1, toSource$1 = _toSource;\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */ var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n/** Used to detect host constructors (Safari). */ var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n/** Used for built-in method references. */ var funcProto = Function.prototype, objectProto$9 = Object.prototype;\n/** Used to resolve the decompiled source of functions. */ var funcToString = funcProto.toString;\n/** Used to check objects for own properties. */ var hasOwnProperty$7 = objectProto$9.hasOwnProperty;\n/** Used to detect if a method is native. */ var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty$7).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */ function baseIsNative$1(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction$1(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource$1(value));\n}\nvar _baseIsNative = baseIsNative$1;\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */ function getValue$1(object, key) {\n return object == null ? undefined : object[key];\n}\nvar _getValue = getValue$1;\n\nvar baseIsNative = _baseIsNative, getValue = _getValue;\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */ function getNative$6(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\nvar _getNative = getNative$6;\n\nvar getNative$5 = _getNative, root$5 = _root;\n/* Built-in method references that are verified to be native. */ var Map$4 = getNative$5(root$5, 'Map');\nvar _Map = Map$4;\n\nvar getNative$4 = _getNative;\n/* Built-in method references that are verified to be native. */ var nativeCreate$4 = getNative$4(Object, 'create');\nvar _nativeCreate = nativeCreate$4;\n\nvar nativeCreate$3 = _nativeCreate;\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */ function hashClear$1() {\n this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};\n this.size = 0;\n}\nvar _hashClear = hashClear$1;\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function hashDelete$1(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\nvar _hashDelete = hashDelete$1;\n\nvar nativeCreate$2 = _nativeCreate;\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$2 = '__lodash_hash_undefined__';\n/** Used for built-in method references. */ var objectProto$8 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$6 = objectProto$8.hasOwnProperty;\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function hashGet$1(key) {\n var data = this.__data__;\n if (nativeCreate$2) {\n var result = data[key];\n return result === HASH_UNDEFINED$2 ? undefined : result;\n }\n return hasOwnProperty$6.call(data, key) ? data[key] : undefined;\n}\nvar _hashGet = hashGet$1;\n\nvar nativeCreate$1 = _nativeCreate;\n/** Used for built-in method references. */ var objectProto$7 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$5 = objectProto$7.hasOwnProperty;\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function hashHas$1(key) {\n var data = this.__data__;\n return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$5.call(data, key);\n}\nvar _hashHas = hashHas$1;\n\nvar nativeCreate = _nativeCreate;\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */ function hashSet$1(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED$1 : value;\n return this;\n}\nvar _hashSet = hashSet$1;\n\nvar hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function Hash$1(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `Hash`.\nHash$1.prototype.clear = hashClear;\nHash$1.prototype['delete'] = hashDelete;\nHash$1.prototype.get = hashGet;\nHash$1.prototype.has = hashHas;\nHash$1.prototype.set = hashSet;\nvar _Hash = Hash$1;\n\nvar Hash = _Hash, ListCache$2 = _ListCache, Map$3 = _Map;\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */ function mapCacheClear$1() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map$3 || ListCache$2),\n 'string': new Hash\n };\n}\nvar _mapCacheClear = mapCacheClear$1;\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */ function isKeyable$1(value) {\n var type = typeof value;\n return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n}\nvar _isKeyable = isKeyable$1;\n\nvar isKeyable = _isKeyable;\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */ function getMapData$4(map, key) {\n var data = map.__data__;\n return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n}\nvar _getMapData = getMapData$4;\n\nvar getMapData$3 = _getMapData;\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */ function mapCacheDelete$1(key) {\n var result = getMapData$3(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\nvar _mapCacheDelete = mapCacheDelete$1;\n\nvar getMapData$2 = _getMapData;\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */ function mapCacheGet$1(key) {\n return getMapData$2(this, key).get(key);\n}\nvar _mapCacheGet = mapCacheGet$1;\n\nvar getMapData$1 = _getMapData;\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function mapCacheHas$1(key) {\n return getMapData$1(this, key).has(key);\n}\nvar _mapCacheHas = mapCacheHas$1;\n\nvar getMapData = _getMapData;\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */ function mapCacheSet$1(key, value) {\n var data = getMapData(this, key), size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\nvar _mapCacheSet = mapCacheSet$1;\n\nvar mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function MapCache$2(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while(++index < length){\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n// Add methods to `MapCache`.\nMapCache$2.prototype.clear = mapCacheClear;\nMapCache$2.prototype['delete'] = mapCacheDelete;\nMapCache$2.prototype.get = mapCacheGet;\nMapCache$2.prototype.has = mapCacheHas;\nMapCache$2.prototype.set = mapCacheSet;\nvar _MapCache = MapCache$2;\n\nvar ListCache$1 = _ListCache, Map$2 = _Map, MapCache$1 = _MapCache;\n/** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200;\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */ function stackSet$1(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache$1) {\n var pairs = data.__data__;\n if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE - 1) {\n pairs.push([\n key,\n value\n ]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache$1(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\nvar _stackSet = stackSet$1;\n\nvar ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */ function Stack$1(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n// Add methods to `Stack`.\nStack$1.prototype.clear = stackClear;\nStack$1.prototype['delete'] = stackDelete;\nStack$1.prototype.get = stackGet;\nStack$1.prototype.has = stackHas;\nStack$1.prototype.set = stackSet;\nvar _Stack = Stack$1;\n\n/** Used to stand-in for `undefined` hash values. */ var HASH_UNDEFINED = '__lodash_hash_undefined__';\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */ function setCacheAdd$1(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\nvar _setCacheAdd = setCacheAdd$1;\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */ function setCacheHas$1(value) {\n return this.__data__.has(value);\n}\nvar _setCacheHas = setCacheHas$1;\n\nvar MapCache = _MapCache, setCacheAdd = _setCacheAdd, setCacheHas = _setCacheHas;\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */ function SetCache$1(values) {\n var index = -1, length = values == null ? 0 : values.length;\n this.__data__ = new MapCache;\n while(++index < length){\n this.add(values[index]);\n }\n}\n// Add methods to `SetCache`.\nSetCache$1.prototype.add = SetCache$1.prototype.push = setCacheAdd;\nSetCache$1.prototype.has = setCacheHas;\nvar _SetCache = SetCache$1;\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */ function arraySome$1(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length;\n while(++index < length){\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\nvar _arraySome = arraySome$1;\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */ function cacheHas$1(cache, key) {\n return cache.has(key);\n}\nvar _cacheHas = cacheHas$1;\n\nvar SetCache = _SetCache, arraySome = _arraySome, cacheHas = _cacheHas;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$3 = 1, COMPARE_UNORDERED_FLAG$1 = 2;\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */ function equalArrays$2(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, arrLength = array.length, othLength = other.length;\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$1 ? new SetCache : undefined;\n stack.set(array, other);\n stack.set(other, array);\n // Ignore non-index properties.\n while(++index < arrLength){\n var arrValue = array[index], othValue = other[index];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\nvar _equalArrays = equalArrays$2;\n\nvar root$4 = _root;\n/** Built-in value references. */ var Uint8Array$1 = root$4.Uint8Array;\nvar _Uint8Array = Uint8Array$1;\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */ function mapToArray$1(map) {\n var index = -1, result = Array(map.size);\n map.forEach(function(value, key) {\n result[++index] = [\n key,\n value\n ];\n });\n return result;\n}\nvar _mapToArray = mapToArray$1;\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */ function setToArray$1(set) {\n var index = -1, result = Array(set.size);\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\nvar _setToArray = setToArray$1;\n\nvar Symbol = _Symbol, Uint8Array = _Uint8Array, eq = eq_1, equalArrays$1 = _equalArrays, mapToArray = _mapToArray, setToArray = _setToArray;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$2 = 1, COMPARE_UNORDERED_FLAG = 2;\n/** `Object#toString` result references. */ var boolTag$1 = '[object Boolean]', dateTag$1 = '[object Date]', errorTag$1 = '[object Error]', mapTag$2 = '[object Map]', numberTag$1 = '[object Number]', regexpTag$1 = '[object RegExp]', setTag$2 = '[object Set]', stringTag$1 = '[object String]', symbolTag = '[object Symbol]';\nvar arrayBufferTag$1 = '[object ArrayBuffer]', dataViewTag$2 = '[object DataView]';\n/** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function equalByTag$1(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch(tag){\n case dataViewTag$2:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n case arrayBufferTag$1:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n case boolTag$1:\n case dateTag$1:\n case numberTag$1:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n case errorTag$1:\n return object.name == other.name && object.message == other.message;\n case regexpTag$1:\n case stringTag$1:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == other + '';\n case mapTag$2:\n var convert = mapToArray;\n case setTag$2:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2;\n convert || (convert = setToArray);\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays$1(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\nvar _equalByTag = equalByTag$1;\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */ function arrayPush$1(array, values) {\n var index = -1, length = values.length, offset = array.length;\n while(++index < length){\n array[offset + index] = values[index];\n }\n return array;\n}\nvar _arrayPush = arrayPush$1;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */ var isArray$3 = Array.isArray;\nvar isArray_1 = isArray$3;\n\nvar arrayPush = _arrayPush, isArray$2 = isArray_1;\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */ function baseGetAllKeys$1(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray$2(object) ? result : arrayPush(result, symbolsFunc(object));\n}\nvar _baseGetAllKeys = baseGetAllKeys$1;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */ function arrayFilter$1(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n while(++index < length){\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\nvar _arrayFilter = arrayFilter$1;\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */ function stubArray$1() {\n return [];\n}\nvar stubArray_1 = stubArray$1;\n\nvar arrayFilter = _arrayFilter, stubArray = stubArray_1;\n/** Used for built-in method references. */ var objectProto$6 = Object.prototype;\n/** Built-in value references. */ var propertyIsEnumerable$1 = objectProto$6.propertyIsEnumerable;\n/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeGetSymbols = Object.getOwnPropertySymbols;\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */ var getSymbols$1 = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable$1.call(object, symbol);\n });\n};\nvar _getSymbols = getSymbols$1;\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */ function baseTimes$1(n, iteratee) {\n var index = -1, result = Array(n);\n while(++index < n){\n result[index] = iteratee(index);\n }\n return result;\n}\nvar _baseTimes = baseTimes$1;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */ function isObjectLike$4(value) {\n return value != null && typeof value == 'object';\n}\nvar isObjectLike_1 = isObjectLike$4;\n\nvar baseGetTag$2 = _baseGetTag, isObjectLike$3 = isObjectLike_1;\n/** `Object#toString` result references. */ var argsTag$2 = '[object Arguments]';\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */ function baseIsArguments$1(value) {\n return isObjectLike$3(value) && baseGetTag$2(value) == argsTag$2;\n}\nvar _baseIsArguments = baseIsArguments$1;\n\nvar baseIsArguments = _baseIsArguments, isObjectLike$2 = isObjectLike_1;\n/** Used for built-in method references. */ var objectProto$5 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$4 = objectProto$5.hasOwnProperty;\n/** Built-in value references. */ var propertyIsEnumerable = objectProto$5.propertyIsEnumerable;\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */ var isArguments$1 = baseIsArguments(function() {\n return arguments;\n}()) ? baseIsArguments : function(value) {\n return isObjectLike$2(value) && hasOwnProperty$4.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n};\nvar isArguments_1 = isArguments$1;\n\nvar isBuffer$2 = {exports: {}};\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */ function stubFalse() {\n return false;\n}\nvar stubFalse_1 = stubFalse;\n\n(function(module, exports) {\n var root = _root, stubFalse = stubFalse_1;\n /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined;\n /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */ var isBuffer = nativeIsBuffer || stubFalse;\n module.exports = isBuffer;\n})(isBuffer$2, isBuffer$2.exports);\n\n/** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991;\n/** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\\d*)$/;\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */ function isIndex$1(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER$1 : length;\n return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n}\nvar _isIndex = isIndex$1;\n\n/** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */ function isLength$2(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\nvar isLength_1 = isLength$2;\n\nvar baseGetTag$1 = _baseGetTag, isLength$1 = isLength_1, isObjectLike$1 = isObjectLike_1;\n/** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]', arrayTag$1 = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag$1 = '[object Map]', numberTag = '[object Number]', objectTag$2 = '[object Object]', regexpTag = '[object RegExp]', setTag$1 = '[object Set]', stringTag = '[object String]', weakMapTag$1 = '[object WeakMap]';\nvar arrayBufferTag = '[object ArrayBuffer]', dataViewTag$1 = '[object DataView]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]';\n/** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag$1] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag$1] = typedArrayTags[numberTag] = typedArrayTags[objectTag$2] = typedArrayTags[regexpTag] = typedArrayTags[setTag$1] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag$1] = false;\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */ function baseIsTypedArray$1(value) {\n return isObjectLike$1(value) && isLength$1(value.length) && !!typedArrayTags[baseGetTag$1(value)];\n}\nvar _baseIsTypedArray = baseIsTypedArray$1;\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */ function baseUnary$1(func) {\n return function(value) {\n return func(value);\n };\n}\nvar _baseUnary = baseUnary$1;\n\nvar _nodeUtil = {exports: {}};\n\n(function(module, exports) {\n var freeGlobal = _freeGlobal;\n /** Detect free variable `exports`. */ var freeExports = exports && !exports.nodeType && exports;\n /** Detect free variable `module`. */ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;\n /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports;\n /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports && freeGlobal.process;\n /** Used to access faster Node.js helpers. */ var nodeUtil = function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n if (types) {\n return types;\n }\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }();\n module.exports = nodeUtil;\n})(_nodeUtil, _nodeUtil.exports);\n\nvar baseIsTypedArray = _baseIsTypedArray, baseUnary = _baseUnary, nodeUtil = _nodeUtil.exports;\n/* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */ var isTypedArray$2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\nvar isTypedArray_1 = isTypedArray$2;\n\nvar baseTimes = _baseTimes, isArguments = isArguments_1, isArray$1 = isArray_1, isBuffer$1 = isBuffer$2.exports, isIndex = _isIndex, isTypedArray$1 = isTypedArray_1;\n/** Used for built-in method references. */ var objectProto$4 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$4.hasOwnProperty;\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */ function arrayLikeKeys$1(value, inherited) {\n var isArr = isArray$1(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n for(var key in value){\n if ((inherited || hasOwnProperty$3.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n (key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\nvar _arrayLikeKeys = arrayLikeKeys$1;\n\n/** Used for built-in method references. */ var objectProto$3 = Object.prototype;\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */ function isPrototype$1(value) {\n var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$3;\n return value === proto;\n}\nvar _isPrototype = isPrototype$1;\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */ function overArg$1(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\nvar _overArg = overArg$1;\n\nvar overArg = _overArg;\n/* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys$1 = overArg(Object.keys, Object);\nvar _nativeKeys = nativeKeys$1;\n\nvar isPrototype = _isPrototype, nativeKeys = _nativeKeys;\n/** Used for built-in method references. */ var objectProto$2 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$2.hasOwnProperty;\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */ function baseKeys$1(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for(var key in Object(object)){\n if (hasOwnProperty$2.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\nvar _baseKeys = baseKeys$1;\n\nvar isFunction = isFunction_1, isLength = isLength_1;\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */ function isArrayLike$1(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\nvar isArrayLike_1 = isArrayLike$1;\n\nvar arrayLikeKeys = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike = isArrayLike_1;\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */ function keys$1(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\nvar keys_1 = keys$1;\n\nvar baseGetAllKeys = _baseGetAllKeys, getSymbols = _getSymbols, keys = keys_1;\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */ function getAllKeys$1(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\nvar _getAllKeys = getAllKeys$1;\n\nvar getAllKeys = _getAllKeys;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG$1 = 1;\n/** Used for built-in method references. */ var objectProto$1 = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$1.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function equalObjects$1(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while(index--){\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n while(++index < objLength){\n key = objProps[index];\n var objValue = object[key], othValue = other[key];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor, othCtor = other.constructor;\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\nvar _equalObjects = equalObjects$1;\n\nvar getNative$3 = _getNative, root$3 = _root;\n/* Built-in method references that are verified to be native. */ var DataView$1 = getNative$3(root$3, 'DataView');\nvar _DataView = DataView$1;\n\nvar getNative$2 = _getNative, root$2 = _root;\n/* Built-in method references that are verified to be native. */ var Promise$2 = getNative$2(root$2, 'Promise');\nvar _Promise = Promise$2;\n\nvar getNative$1 = _getNative, root$1 = _root;\n/* Built-in method references that are verified to be native. */ var Set$2 = getNative$1(root$1, 'Set');\nvar _Set = Set$2;\n\nvar getNative = _getNative, root = _root;\n/* Built-in method references that are verified to be native. */ var WeakMap$1 = getNative(root, 'WeakMap');\nvar _WeakMap = WeakMap$1;\n\nvar DataView = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap = _WeakMap, baseGetTag = _baseGetTag, toSource = _toSource;\n/** `Object#toString` result references. */ var mapTag = '[object Map]', objectTag$1 = '[object Object]', promiseTag = '[object Promise]', setTag = '[object Set]', weakMapTag = '[object WeakMap]';\nvar dataViewTag = '[object DataView]';\n/** Used to detect maps, sets, and weakmaps. */ var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap);\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */ var getTag$1 = baseGetTag;\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif (DataView && getTag$1(new DataView(new ArrayBuffer(1))) != dataViewTag || Map$1 && getTag$1(new Map$1) != mapTag || Promise$1 && getTag$1(Promise$1.resolve()) != promiseTag || Set$1 && getTag$1(new Set$1) != setTag || WeakMap && getTag$1(new WeakMap) != weakMapTag) {\n getTag$1 = function(value) {\n var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : undefined, ctorString = Ctor ? toSource(Ctor) : '';\n if (ctorString) {\n switch(ctorString){\n case dataViewCtorString:\n return dataViewTag;\n case mapCtorString:\n return mapTag;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag;\n case weakMapCtorString:\n return weakMapTag;\n }\n }\n return result;\n };\n}\nvar _getTag = getTag$1;\n\nvar Stack = _Stack, equalArrays = _equalArrays, equalByTag = _equalByTag, equalObjects = _equalObjects, getTag = _getTag, isArray = isArray_1, isBuffer = isBuffer$2.exports, isTypedArray = isTypedArray_1;\n/** Used to compose bitmasks for value comparisons. */ var COMPARE_PARTIAL_FLAG = 1;\n/** `Object#toString` result references. */ var argsTag = '[object Arguments]', arrayTag = '[object Array]', objectTag = '[object Object]';\n/** Used for built-in method references. */ var objectProto = Object.prototype;\n/** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */ function baseIsEqualDeep$1(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\nvar _baseIsEqualDeep = baseIsEqualDeep$1;\n\nvar baseIsEqualDeep = _baseIsEqualDeep, isObjectLike = isObjectLike_1;\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */ function baseIsEqual$1(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual$1, stack);\n}\nvar _baseIsEqual = baseIsEqual$1;\n\nvar baseIsEqual = _baseIsEqual;\n/**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */ function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n}\nvar isEqualWith_1 = isEqualWith;\n\nconst isEqual = (a, b, options)=>{\n if (options.ignoreCase) {\n return typeof a === 'string' && typeof b === 'string' && a.toLowerCase() === b.toLowerCase();\n }\n if (typeof a === 'symbol' && typeof b === 'symbol') {\n return a.toString() === b.toString();\n }\n if (options.recursiveEqual) {\n return isEqualWith_1(a, b, (a, b)=>options.ignoreCase ? typeof a === 'string' && typeof b === 'string' ? a.toLowerCase() === b.toLowerCase() : undefined : undefined);\n }\n return a === b;\n};\n\nconst shallowSimilarity = (left, right)=>{\n if (left === right) {\n return 1;\n }\n if (left === null || right === null) {\n return 0;\n }\n if (typeof left !== 'object' || typeof right !== 'object') {\n return 0;\n }\n let intersection = 0;\n for(const key in left){\n if (Object.prototype.hasOwnProperty.call(left, key) && Object.prototype.hasOwnProperty.call(right, key) && left[key] === right[key]) {\n intersection++;\n }\n }\n return Math.max(intersection / Object.keys(left).length, intersection / Object.keys(right).length);\n};\n\n// Shared utility for array diff\nconst addArrayOpeningBrackets = (linesLeft, linesRight, keyLeft, keyRight, level)=>{\n if (keyLeft && keyRight) {\n linesLeft.push({\n level,\n type: 'equal',\n text: `\"${keyLeft}\": [`\n });\n linesRight.push({\n level,\n type: 'equal',\n text: `\"${keyRight}\": [`\n });\n } else {\n linesLeft.push({\n level,\n type: 'equal',\n text: '['\n });\n linesRight.push({\n level,\n type: 'equal',\n text: '['\n });\n }\n};\nconst addArrayClosingBrackets = (linesLeft, linesRight, level)=>{\n linesLeft.push({\n level,\n type: 'equal',\n text: ']'\n });\n linesRight.push({\n level,\n type: 'equal',\n text: ']'\n });\n};\nconst addMaxDepthPlaceholder = (linesLeft, linesRight, level)=>{\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '...'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '...'\n });\n};\n\nconst lcs = (arrLeft, arrRight, keyLeft, keyRight, level, options)=>{\n const f = Array(arrLeft.length + 1).fill(0).map(()=>Array(arrRight.length + 1).fill(0));\n const backtrack = Array(arrLeft.length + 1).fill(0).map(()=>Array(arrRight.length + 1).fill(0));\n for(let i = 1; i <= arrLeft.length; i++){\n backtrack[i][0] = 'up';\n }\n for(let j = 1; j <= arrRight.length; j++){\n backtrack[0][j] = 'left';\n }\n for(let i = 1; i <= arrLeft.length; i++){\n for(let j = 1; j <= arrRight.length; j++){\n const typeI = getType(arrLeft[i - 1]);\n const typeJ = getType(arrRight[j - 1]);\n if (typeI === typeJ && (typeI === 'array' || typeI === 'object')) {\n if (options.recursiveEqual) {\n if (isEqual(arrLeft[i - 1], arrRight[j - 1], options) || shallowSimilarity(arrLeft[i - 1], arrRight[j - 1]) > 0.5) {\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n } else if (f[i - 1][j] >= f[i][j - 1]) {\n f[i][j] = f[i - 1][j];\n backtrack[i][j] = 'up';\n } else {\n f[i][j] = f[i][j - 1];\n backtrack[i][j] = 'left';\n }\n } else {\n // this is a diff-specific logic, when 2 values are both arrays or both objects, the\n // algorithm should assume they are equal in order to diff recursively later\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n }\n } else if (isEqual(arrLeft[i - 1], arrRight[j - 1], options)) {\n f[i][j] = f[i - 1][j - 1] + 1;\n backtrack[i][j] = 'diag';\n } else if (f[i - 1][j] >= f[i][j - 1]) {\n f[i][j] = f[i - 1][j];\n backtrack[i][j] = 'up';\n } else {\n f[i][j] = f[i][j - 1];\n backtrack[i][j] = 'left';\n }\n }\n }\n let i = arrLeft.length;\n let j = arrRight.length;\n let tLeft = [];\n let tRight = [];\n // this is a backtracking process, all new lines should be unshifted to the result, not\n // pushed to the result\n while(i > 0 || j > 0){\n if (backtrack[i][j] === 'diag') {\n const type = getType(arrLeft[i - 1]);\n if (options.recursiveEqual && (type === 'array' || type === 'object') && isEqual(arrLeft[i - 1], arrRight[j - 1], options)) {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n } else if (type === 'array') {\n const [l, r] = diffArrayLCS(arrLeft[i - 1], arrRight[j - 1], keyLeft, keyRight, level + 1, options);\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n } else if (type === 'object') {\n const [l, r] = diffObject(arrLeft[i - 1], arrRight[j - 1], level + 2, options, diffArrayLCS);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n } else {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n }\n i--;\n j--;\n } else if (backtrack[i][j] === 'up') {\n if (options.showModifications && i > 1 && backtrack[i - 1][j] === 'left') {\n const typeLeft = getType(arrLeft[i - 1]);\n const typeRight = getType(arrRight[j - 1]);\n if (typeLeft === typeRight) {\n if (typeLeft === 'array') {\n const [l, r] = diffArrayLCS(arrLeft[i - 1], arrRight[j - 1], keyLeft, keyRight, level + 1, options);\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n } else if (typeLeft === 'object') {\n const [l, r] = diffObject(arrLeft[i - 1], arrRight[j - 1], level + 2, options, diffArrayLCS);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n tLeft = concat(tLeft, l.reverse(), true);\n tRight = concat(tRight, r.reverse(), true);\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n } else {\n tLeft.unshift({\n level: level + 1,\n type: 'modify',\n text: formatValue(arrLeft[i - 1], undefined, undefined, options.undefinedBehavior)\n });\n tRight.unshift({\n level: level + 1,\n type: 'modify',\n text: formatValue(arrRight[j - 1], undefined, undefined, options.undefinedBehavior)\n });\n }\n } else {\n const reversedLeft = [];\n const reversedRight = [];\n prettyAppendLines(reversedLeft, reversedRight, '', '', arrLeft[i - 1], arrRight[j - 1], level + 1, options);\n tLeft = concat(tLeft, reversedLeft.reverse(), true);\n tRight = concat(tRight, reversedRight.reverse(), true);\n }\n i--;\n j--;\n } else {\n const removedLines = stringify(arrLeft[i - 1], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = removedLines.length - 1; i >= 0; i--){\n tLeft.unshift({\n level: level + 1 + (removedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n tRight.unshift({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n i--;\n }\n } else {\n const addedLines = stringify(arrRight[j - 1], undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let i = addedLines.length - 1; i >= 0; i--){\n tLeft.unshift({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n tRight.unshift({\n level: level + 1 + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n j--;\n }\n }\n return [\n tLeft,\n tRight\n ];\n};\nconst diffArrayLCS = (arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = [])=>{\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n const [tLeftReverse, tRightReverse] = lcs(arrLeft, arrRight, keyLeft, keyRight, level, options);\n linesLeft = concat(linesLeft, tLeftReverse);\n linesRight = concat(linesRight, tRightReverse);\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n};\n\n// Recursively checks if all objects (including in nested arrays) have the compare key\nfunction allObjectsHaveCompareKey(arr, compareKey) {\n for (const item of arr){\n const type = getType(item);\n if (type === 'object') {\n if (!(compareKey in item)) return false;\n // Check nested arrays in object values\n for (const value of Object.values(item)){\n if (Array.isArray(value) && !allObjectsHaveCompareKey(value, compareKey)) {\n return false;\n }\n }\n } else if (Array.isArray(item)) {\n if (!allObjectsHaveCompareKey(item, compareKey)) return false;\n }\n }\n return true;\n}\n// Recursively diff arrays, using compareKey if all elements have it, otherwise fallback to diffArrayNormal\nfunction diffArrayRecursive(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = []) {\n if (!options.compareKey) {\n // Fallback to normal diff if no compare key is specified\n return diffArrayNormal(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft, linesRight);\n }\n // If arrays are not of objects, or not all objects have the compare key (including nested), fallback to unordered LCS diff\n const isObjectArray = (arr)=>arr.every((item)=>getType(item) === 'object');\n if (!isObjectArray(arrLeft) || !isObjectArray(arrRight) || !allObjectsHaveCompareKey(arrLeft, options.compareKey) || !allObjectsHaveCompareKey(arrRight, options.compareKey)) {\n // Use unordered LCS for arrays of primitives, mixed types, or missing compare key\n return diffArrayNormal(arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft, linesRight);\n }\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n const leftProcessed = new Set();\n const rightProcessed = new Set();\n // First pass: find matching objects by compareKey\n for(let i = 0; i < arrLeft.length; i++){\n const leftItem = arrLeft[i];\n if (leftProcessed.has(i)) continue;\n // Skip if left item is not an object or doesn't have the compare key\n if (getType(leftItem) !== 'object' || !(options.compareKey in leftItem)) {\n continue;\n }\n const leftKeyValue = leftItem[options.compareKey];\n // Find matching item in right array\n let matchIndex = -1;\n for(let j = 0; j < arrRight.length; j++){\n if (rightProcessed.has(j)) continue;\n const rightItem = arrRight[j];\n if (getType(rightItem) !== 'object' || !(options.compareKey in rightItem)) {\n continue;\n }\n const rightKeyValue = rightItem[options.compareKey];\n // Compare key values\n if (isEqual(leftKeyValue, rightKeyValue, options)) {\n matchIndex = j;\n break;\n }\n }\n if (matchIndex !== -1) {\n // Found a match, compare the objects\n const rightItem = arrRight[matchIndex];\n const leftType = getType(leftItem);\n const rightType = getType(rightItem);\n if (leftType !== rightType) {\n prettyAppendLines(linesLeft, linesRight, '', '', leftItem, rightItem, level + 1, options);\n } else if (leftType === 'object') {\n // Always recurse into diffObject for aligned objects, regardless of recursiveEqual/isEqual\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n // For each key, if value is array, apply recursive diff logic\n const keys = Array.from(new Set([\n ...Object.keys(leftItem),\n ...Object.keys(rightItem)\n ]));\n for (const key of keys){\n const lVal = leftItem[key];\n const rVal = rightItem[key];\n if (Array.isArray(lVal) && Array.isArray(rVal)) {\n // Recursively diff arrays\n const [arrL, arrR] = diffArrayRecursive(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n } else if (Array.isArray(lVal) || Array.isArray(rVal)) {\n // If only one side is array, treat as modification\n prettyAppendLines(linesLeft, linesRight, key, key, lVal, rVal, level + 2, options);\n } else {\n // Use diffObject for non-array values\n const [leftLines, rightLines] = diffObject({\n [key]: lVal\n }, {\n [key]: rVal\n }, level + 2, options, diffArrayRecursive);\n linesLeft = concat(linesLeft, leftLines);\n linesRight = concat(linesRight, rightLines);\n }\n }\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n } else if (leftType === 'array') {\n // For nested arrays, recursively apply the same logic\n const [resLeft, resRight] = diffArrayRecursive(leftItem, rightItem, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else if (isEqual(leftItem, rightItem, options)) {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n if (options.showModifications) {\n linesLeft.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n linesLeft.push({\n level: level + 1,\n type: 'remove',\n text: formatValue(leftItem, undefined, undefined, options.undefinedBehavior)\n });\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'add',\n text: formatValue(rightItem, undefined, undefined, options.undefinedBehavior)\n });\n }\n }\n leftProcessed.add(i);\n rightProcessed.add(matchIndex);\n }\n }\n // Second pass: handle remaining items (unmatched)\n for(let i = 0; i < arrLeft.length; i++){\n if (leftProcessed.has(i)) continue;\n const leftItem = arrLeft[i];\n const removedLines = stringify(leftItem, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let j = 0; j < removedLines.length; j++){\n linesLeft.push({\n level: level + 1 + (removedLines[j].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[j].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n }\n for(let i = 0; i < arrRight.length; i++){\n if (rightProcessed.has(i)) continue;\n const rightItem = arrRight[i];\n const addedLines = stringify(rightItem, undefined, 1, undefined, options.undefinedBehavior).split('\\n');\n for(let j = 0; j < addedLines.length; j++){\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1 + (addedLines[j].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[j].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n }\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n}\nconst diffArrayCompareKey = diffArrayRecursive;\n\n/**\n * Diffs two objects, using compare-key logic for nested arrays if possible.\n *\n * @param leftObj The left object\n * @param rightObj The right object\n * @param level The current diff level\n * @param options The diff options\n * @param fallbackArrayDiff The fallback array diff function (e.g., diffArrayNormal or diffArrayLCS)\n * @param compareKeyArrayDiff The compare-key array diff function\n * @param allObjectsHaveCompareKey The function to check if all objects in an array have the compare key\n * @returns [DiffResult[], DiffResult[]]\n */ function diffObjectWithArraySupport(leftObj, rightObj, level, options, fallbackArrayDiff, compareKeyArrayDiff, allObjectsHaveCompareKey) {\n let linesLeft = [];\n let linesRight = [];\n const keys = Array.from(new Set([\n ...Object.keys(leftObj || {}),\n ...Object.keys(rightObj || {})\n ]));\n for (const key of keys){\n const lVal = leftObj ? leftObj[key] : undefined;\n const rVal = rightObj ? rightObj[key] : undefined;\n if (Array.isArray(lVal) && Array.isArray(rVal) && options.compareKey) {\n if (allObjectsHaveCompareKey(lVal, options.compareKey) && allObjectsHaveCompareKey(rVal, options.compareKey)) {\n // Use compare-key diff for this property\n const [arrL, arrR] = compareKeyArrayDiff(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n continue;\n }\n }\n if (Array.isArray(lVal) && Array.isArray(rVal)) {\n // Fallback to normal diff for arrays\n const [arrL, arrR] = fallbackArrayDiff(lVal, rVal, '', '', level + 2, options, [], []);\n linesLeft = concat(linesLeft, arrL);\n linesRight = concat(linesRight, arrR);\n } else if (Array.isArray(lVal) || Array.isArray(rVal)) {\n // If only one side is array, treat as modification\n prettyAppendLines(linesLeft, linesRight, key, key, lVal, rVal, level + 2, options);\n } else {\n // Use diffObject for non-array values\n const [leftLines, rightLines] = diffObject({\n [key]: lVal\n }, {\n [key]: rVal\n }, level + 2, options, fallbackArrayDiff);\n linesLeft = concat(linesLeft, leftLines);\n linesRight = concat(linesRight, rightLines);\n }\n }\n return [\n linesLeft,\n linesRight\n ];\n}\n\nconst diffArrayNormal = (arrLeft, arrRight, keyLeft, keyRight, level, options, linesLeft = [], linesRight = [])=>{\n arrLeft = [\n ...arrLeft\n ];\n arrRight = [\n ...arrRight\n ];\n addArrayOpeningBrackets(linesLeft, linesRight, keyLeft, keyRight, level);\n if (level >= (options.maxDepth || Infinity)) {\n addMaxDepthPlaceholder(linesLeft, linesRight, level);\n } else {\n while(arrLeft.length || arrRight.length){\n const itemLeft = arrLeft[0];\n const itemRight = arrRight[0];\n const leftType = getType(itemLeft);\n const rightType = getType(itemRight);\n if (arrLeft.length && arrRight.length) {\n if (leftType !== rightType) {\n prettyAppendLines(linesLeft, linesRight, '', '', itemLeft, itemRight, level + 1, options);\n } else if (options.recursiveEqual && [\n 'object',\n 'array'\n ].includes(leftType) && isEqual(itemLeft, itemRight, options)) {\n prettyAppendLines(linesLeft, linesRight, '', '', itemLeft, itemRight, level + 1, options);\n } else if (leftType === 'object') {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '{'\n });\n let objLeft, objRight;\n if (options.arrayDiffMethod === 'compare-key') {\n [objLeft, objRight] = diffObjectWithArraySupport(itemLeft, itemRight, level, options, diffArrayNormal, diffArrayCompareKey, allObjectsHaveCompareKey);\n } else {\n [objLeft, objRight] = diffObject(itemLeft, itemRight, level + 2, options, diffArrayNormal);\n }\n linesLeft = concat(linesLeft, objLeft);\n linesRight = concat(linesRight, objRight);\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: '}'\n });\n } else if (leftType === 'array') {\n // For nested arrays, check for compare-key logic\n if (options.compareKey && allObjectsHaveCompareKey(itemLeft, options.compareKey) && allObjectsHaveCompareKey(itemRight, options.compareKey)) {\n const [resLeft, resRight] = diffArrayCompareKey(itemLeft, itemRight, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n } else {\n const [resLeft, resRight] = diffArrayNormal(itemLeft, itemRight, '', '', level + 1, options, [], []);\n linesLeft = concat(linesLeft, resLeft);\n linesRight = concat(linesRight, resRight);\n }\n } else if (cmp(itemLeft, itemRight, {\n ignoreCase: options.ignoreCase\n }) === 0) {\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n if (options.showModifications) {\n linesLeft.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesRight.push({\n level: level + 1,\n type: 'modify',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n } else {\n linesLeft.push({\n level: level + 1,\n type: 'remove',\n text: formatValue(itemLeft, undefined, undefined, options.undefinedBehavior)\n });\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1,\n type: 'add',\n text: formatValue(itemRight, undefined, undefined, options.undefinedBehavior)\n });\n }\n }\n arrLeft.shift();\n arrRight.shift();\n } else if (arrLeft.length) {\n const removedLines = formatValue(itemLeft, undefined, true, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < removedLines.length; i++){\n linesLeft.push({\n level: level + 1 + (removedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'remove',\n text: removedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n linesRight.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n }\n arrLeft.shift();\n } else if (arrRight.length) {\n const addedLines = formatValue(itemRight, undefined, true, options.undefinedBehavior).split('\\n');\n for(let i = 0; i < addedLines.length; i++){\n linesLeft.push({\n level: level + 1,\n type: 'equal',\n text: ''\n });\n linesRight.push({\n level: level + 1 + (addedLines[i].match(/^\\s+/)?.[0]?.length || 0),\n type: 'add',\n text: addedLines[i].replace(/^\\s+/, '').replace(/,$/g, '')\n });\n }\n arrRight.shift();\n }\n }\n }\n addArrayClosingBrackets(linesLeft, linesRight, level);\n return [\n linesLeft,\n linesRight\n ];\n};\n\nconst sortInnerArrays = (source, options)=>{\n if (!source || typeof source !== 'object') {\n return source;\n }\n if (Array.isArray(source)) {\n const result = [\n ...source\n ];\n result.sort((a, b)=>cmp(a, b, {\n ignoreCase: options?.ignoreCase\n }));\n return result.map((item)=>sortInnerArrays(item, options));\n }\n const result = {\n ...source\n };\n for(const key in result){\n result[key] = sortInnerArrays(result[key], options);\n }\n return result;\n};\n\nvar UndefinedBehavior = /*#__PURE__*/ function(UndefinedBehavior) {\n UndefinedBehavior[\"stringify\"] = \"stringify\";\n UndefinedBehavior[\"ignore\"] = \"ignore\";\n UndefinedBehavior[\"throw\"] = \"throw\";\n return UndefinedBehavior;\n}({});\nconst EQUAL_EMPTY_LINE = {\n level: 0,\n type: 'equal',\n text: ''\n};\nconst EQUAL_LEFT_BRACKET_LINE = {\n level: 0,\n type: 'equal',\n text: '{'\n};\nconst EQUAL_RIGHT_BRACKET_LINE = {\n level: 0,\n type: 'equal',\n text: '}'\n};\nlet Differ = class Differ {\n detectCircular(source) {\n if (this.options.detectCircular) {\n if (detectCircular(source)) {\n throw new Error(`Circular reference detected in object (with keys ${Object.keys(source).map((t)=>`\"${t}\"`).join(', ')})`);\n }\n }\n }\n sortResultLines(left, right) {\n for(let k = 0; k < left.length; k++){\n let changed = false;\n for(let i = 1; i < left.length; i++){\n if (left[i].type === 'remove' && left[i - 1].type === 'equal' && right[i].type === 'equal' && right[i - 1].type === 'add') {\n const t1 = left[i - 1];\n left[i - 1] = left[i];\n left[i] = t1;\n const t2 = right[i - 1];\n right[i - 1] = right[i];\n right[i] = t2;\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n }\n }\n calculateLineNumbers(result) {\n let lineNumber = 0;\n for (const item of result){\n if (!item.text) {\n continue;\n }\n item.lineNumber = ++lineNumber;\n }\n }\n calculateCommas(result) {\n const nextLine = Array(result.length).fill(0);\n for(let i = result.length - 1; i > 0; i--){\n if (result[i].text) {\n nextLine[i - 1] = i;\n } else {\n nextLine[i - 1] = nextLine[i];\n }\n }\n for(let i = 0; i < result.length; i++){\n if (!result[i].text.endsWith('{') && !result[i].text.endsWith('[') && result[i].text && nextLine[i] && result[i].level <= result[nextLine[i]].level) {\n result[i].comma = true;\n }\n }\n }\n diff(sourceLeft, sourceRight) {\n this.detectCircular(sourceLeft);\n this.detectCircular(sourceRight);\n if (this.options.arrayDiffMethod === 'unorder-normal' || this.options.arrayDiffMethod === 'unorder-lcs') {\n sourceLeft = sortInnerArrays(sourceLeft, this.options);\n sourceRight = sortInnerArrays(sourceRight, this.options);\n }\n if (this.options.undefinedBehavior === \"ignore\") {\n sourceLeft = cleanFields(sourceLeft) ?? null;\n sourceRight = cleanFields(sourceRight) ?? null;\n }\n let resultLeft = [];\n let resultRight = [];\n const typeLeft = getType(sourceLeft);\n const typeRight = getType(sourceRight);\n if (typeLeft !== typeRight) {\n const strLeft = stringify(sourceLeft, undefined, 1, this.options.maxDepth, this.options.undefinedBehavior);\n resultLeft = strLeft.split('\\n').map((line)=>({\n level: line.match(/^\\s+/)?.[0]?.length || 0,\n type: 'remove',\n text: line.replace(/^\\s+/, '').replace(/,$/g, ''),\n comma: line.endsWith(',')\n }));\n const strRight = stringify(sourceRight, undefined, 1, this.options.maxDepth, this.options.undefinedBehavior);\n resultRight = strRight.split('\\n').map((line)=>({\n level: line.match(/^\\s+/)?.[0]?.length || 0,\n type: 'add',\n text: line.replace(/^\\s+/, '').replace(/,$/g, ''),\n comma: line.endsWith(',')\n }));\n const lLength = resultLeft.length;\n const rLength = resultRight.length;\n resultLeft = concat(resultLeft, Array(rLength).fill(0).map(()=>({\n ...EQUAL_EMPTY_LINE\n })));\n resultRight = concat(resultRight, Array(lLength).fill(0).map(()=>({\n ...EQUAL_EMPTY_LINE\n })), true);\n } else if (typeLeft === 'object') {\n [resultLeft, resultRight] = diffObject(sourceLeft, sourceRight, 1, this.options, this.arrayDiffFunc);\n resultLeft.unshift({\n ...EQUAL_LEFT_BRACKET_LINE\n });\n resultLeft.push({\n ...EQUAL_RIGHT_BRACKET_LINE\n });\n resultRight.unshift({\n ...EQUAL_LEFT_BRACKET_LINE\n });\n resultRight.push({\n ...EQUAL_RIGHT_BRACKET_LINE\n });\n } else if (typeLeft === 'array') {\n [resultLeft, resultRight] = this.arrayDiffFunc(sourceLeft, sourceRight, '', '', 0, this.options);\n } else if (sourceLeft !== sourceRight) {\n if (this.options.ignoreCase) {\n if (typeof sourceLeft === 'string' && typeof sourceRight === 'string' && sourceLeft.toLowerCase() === sourceRight.toLowerCase()) {\n resultLeft = [\n {\n level: 0,\n type: 'equal',\n text: sourceLeft\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'equal',\n text: sourceRight\n }\n ];\n }\n } else if (this.options.showModifications) {\n resultLeft = [\n {\n level: 0,\n type: 'modify',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'modify',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n } else {\n resultLeft = [\n {\n level: 0,\n type: 'remove',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n },\n {\n ...EQUAL_EMPTY_LINE\n }\n ];\n resultRight = [\n {\n ...EQUAL_EMPTY_LINE\n },\n {\n level: 0,\n type: 'add',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n }\n } else {\n resultLeft = [\n {\n level: 0,\n type: 'equal',\n text: stringify(sourceLeft, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n resultRight = [\n {\n level: 0,\n type: 'equal',\n text: stringify(sourceRight, undefined, undefined, this.options.maxDepth, this.options.undefinedBehavior)\n }\n ];\n }\n this.sortResultLines(resultLeft, resultRight);\n this.calculateLineNumbers(resultLeft);\n this.calculateLineNumbers(resultRight);\n this.calculateCommas(resultLeft);\n this.calculateCommas(resultRight);\n return [\n resultLeft,\n resultRight\n ];\n }\n constructor({ detectCircular = true, maxDepth = Infinity, showModifications = true, arrayDiffMethod = 'normal', ignoreCase = false, ignoreCaseForKey = false, recursiveEqual = false, preserveKeyOrder, compareKey, undefinedBehavior = \"stringify\" } = {}){\n this.options = {\n detectCircular,\n maxDepth,\n showModifications,\n arrayDiffMethod,\n ignoreCase,\n ignoreCaseForKey,\n recursiveEqual,\n preserveKeyOrder,\n compareKey,\n undefinedBehavior\n };\n if (arrayDiffMethod === 'compare-key') {\n this.arrayDiffFunc = diffArrayCompareKey;\n } else if (arrayDiffMethod === 'lcs' || arrayDiffMethod === 'unorder-lcs') {\n this.arrayDiffFunc = diffArrayLCS;\n } else {\n this.arrayDiffFunc = diffArrayNormal;\n }\n }\n};\n\nexport { UndefinedBehavior, Differ as default };\n","import * as React from 'react';\n\nconst isExpandLine = (segment)=>{\n return 'hasLinesBefore' in segment || 'hasLinesAfter' in segment;\n};\nconst getSegmentHeight = (segment, itemHeight, expandLineHeight)=>{\n return isExpandLine(segment) ? expandLineHeight : itemHeight * (segment.end - segment.start + 1);\n};\n/**\n * Merge two segments array into one, divide the segment if necessary.\n */ const mergeSegments = (tokens, diffs)=>{\n const result = [];\n let token;\n let diff;\n if (tokens.length && diffs.length) {\n tokens = [\n ...tokens\n ];\n diffs = [\n ...diffs\n ];\n token = {\n ...tokens.shift()\n };\n diff = {\n ...diffs.shift()\n };\n while(1){\n if (token.start === diff.start) {\n const end = Math.min(token.end, diff.end);\n result.push({\n ...token,\n ...diff,\n end\n });\n token.start = diff.start = end;\n } else if (token.start < diff.start) {\n const end = Math.min(token.end, diff.start);\n result.push({\n ...diff,\n ...token,\n end\n });\n token.start = end;\n } else {\n const end = Math.min(token.start, diff.end);\n result.push({\n ...token,\n ...diff,\n end\n });\n diff.start = end;\n }\n if (!tokens.length || !diffs.length) break;\n if (token.start === token.end) token = {\n ...tokens.shift()\n };\n if (diff.start === diff.end) diff = {\n ...diffs.shift()\n };\n }\n }\n if (!tokens.length) result.push(...diffs.map((d)=>({\n ...d,\n token: token.token || 'plain'\n })));\n if (!diffs.length) result.push(...tokens);\n return result;\n};\n\nconst calculatePlaceholderHeight = (segments, accTop, startSegment, startLine, endSegment, endLine, itemHeight, expandLineHeight, totalHeight)=>{\n if (!accTop.length) {\n return [\n 0,\n 0\n ];\n }\n let topHeight = 0;\n let bottomHeight = 0;\n const startSegmentItem = segments[startSegment];\n if (isExpandLine(startSegmentItem)) {\n topHeight = accTop[startSegment];\n } else {\n topHeight = accTop[startSegment] + (startLine - startSegmentItem.start) * itemHeight;\n }\n const endSegmentItem = segments[endSegment];\n if (isExpandLine(endSegmentItem)) {\n bottomHeight = totalHeight - accTop[endSegment] - expandLineHeight;\n } else {\n bottomHeight = totalHeight - accTop[endSegment] - (endLine - endSegmentItem.start) * itemHeight;\n }\n return [\n topHeight,\n bottomHeight\n ];\n};\n\nconst findVisibleLines = (segments, accTop, viewportTop, viewportBottom, itemHeight, expandLineHeight)=>{\n if (!accTop.length) {\n return [\n 0,\n 0,\n 0,\n 0\n ];\n }\n let startSegment = 0;\n let endSegment = 0;\n let startLine = 0;\n let endLine = 0;\n let l = 0;\n let r = segments.length - 1;\n // start segment\n while(1){\n const m = Math.floor((l + r) / 2);\n const top = accTop[m];\n const bottom = top + getSegmentHeight(segments[m], itemHeight, expandLineHeight);\n if (bottom <= viewportTop) {\n l = m + 1;\n } else {\n r = m;\n }\n if (l === r) {\n startSegment = l;\n break;\n }\n }\n // start line\n const startSegmentItem = segments[startSegment];\n if (isExpandLine(startSegmentItem)) {\n startLine = startSegmentItem.start;\n } else {\n startLine = startSegmentItem.start + Math.floor((viewportTop - accTop[startSegment]) / itemHeight);\n }\n // end segment\n l = 0;\n r = segments.length - 1;\n while(1){\n const m = Math.floor((l + r + 1) / 2);\n const top = accTop[m];\n if (top >= viewportBottom) {\n r = m - 1;\n } else {\n l = m;\n }\n if (l === r) {\n endSegment = l;\n break;\n }\n }\n // end line\n const endSegmentItem = segments[endSegment];\n if (isExpandLine(endSegmentItem)) {\n endLine = endSegmentItem.end;\n } else {\n endLine = endSegmentItem.start + Math.ceil((viewportBottom - accTop[endSegment]) / itemHeight);\n }\n return [\n startSegment,\n startLine,\n endSegment,\n endLine\n ];\n};\n\nvar bin = {};\n\nObject.defineProperty(bin, \"__esModule\", {\n value: true\n});\nbin.applyPatch = bin.calcPatch = lcs_1 = bin.lcs = bin.diff = bin.diff_core = void 0;\nfunction diff_internal(state, c) {\n const { b, eq, stack_base } = state;\n let { i, N, j, M, Z, stack_top } = state;\n for(;;){\n switch(c){\n case 0:\n {\n Z_block: while(N > 0 && M > 0){\n b.fill(0, 0, 2 * Z);\n const W = N - M;\n const L = N + M;\n const parity = L & 1;\n const offsetx = i + N - 1;\n const offsety = j + M - 1;\n const hmax = (L + parity) / 2;\n let z;\n h_loop: for(let h = 0; h <= hmax; h++){\n const kmin = 2 * Math.max(0, h - M) - h;\n const kmax = h - 2 * Math.max(0, h - N);\n for(let k = kmin; k <= kmax; k += 2){\n const gkm = b[k - 1 - Z * Math.floor((k - 1) / Z)];\n const gkp = b[k + 1 - Z * Math.floor((k + 1) / Z)];\n const u = k === -h || k !== h && gkm < gkp ? gkp : gkm + 1;\n const v = u - k;\n let x = u;\n let y = v;\n while(x < N && y < M && eq(i + x, j + y))x++, y++;\n b[k - Z * Math.floor(k / Z)] = x;\n if (parity === 1 && (z = W - k) >= 1 - h && z < h && x + b[Z + z - Z * Math.floor(z / Z)] >= N) {\n if (h > 1 || x !== u) {\n stack_base[stack_top++] = i + x;\n stack_base[stack_top++] = N - x;\n stack_base[stack_top++] = j + y;\n stack_base[stack_top++] = M - y;\n N = u;\n M = v;\n Z = 2 * (Math.min(N, M) + 1);\n continue Z_block;\n } else break h_loop;\n }\n }\n for(let k = kmin; k <= kmax; k += 2){\n const pkm = b[Z + k - 1 - Z * Math.floor((k - 1) / Z)];\n const pkp = b[Z + k + 1 - Z * Math.floor((k + 1) / Z)];\n const u = k === -h || k !== h && pkm < pkp ? pkp : pkm + 1;\n const v = u - k;\n let x = u;\n let y = v;\n while(x < N && y < M && eq(offsetx - x, offsety - y))x++, y++;\n b[Z + k - Z * Math.floor(k / Z)] = x;\n if (parity === 0 && (z = W - k) >= -h && z <= h && x + b[z - Z * Math.floor(z / Z)] >= N) {\n if (h > 0 || x !== u) {\n stack_base[stack_top++] = i + N - u;\n stack_base[stack_top++] = u;\n stack_base[stack_top++] = j + M - v;\n stack_base[stack_top++] = v;\n N = N - x;\n M = M - y;\n Z = 2 * (Math.min(N, M) + 1);\n continue Z_block;\n } else break h_loop;\n }\n }\n }\n if (N === M) continue;\n if (M > N) {\n i += N;\n j += N;\n M -= N;\n N = 0;\n } else {\n i += M;\n j += M;\n N -= M;\n M = 0;\n }\n break;\n }\n if (N + M !== 0) {\n if (state.pxe === i || state.pye === j) {\n state.pxe = i + N;\n state.pye = j + M;\n } else {\n const sx = state.pxs;\n state.oxs = state.pxs;\n state.oxe = state.pxe;\n state.oys = state.pys;\n state.oye = state.pye;\n state.pxs = i;\n state.pxe = i + N;\n state.pys = j;\n state.pye = j + M;\n if (sx >= 0) {\n state.i = i;\n state.N = N;\n state.j = j;\n state.M = M;\n state.Z = Z;\n state.stack_top = stack_top;\n return 1;\n }\n }\n }\n }\n case 1:\n {\n if (stack_top === 0) return 2;\n M = stack_base[--stack_top];\n j = stack_base[--stack_top];\n N = stack_base[--stack_top];\n i = stack_base[--stack_top];\n Z = 2 * (Math.min(N, M) + 1);\n c = 0;\n }\n }\n }\n}\nlet DiffGen = class DiffGen {\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const { state, result } = this;\n if (this.c > 1) {\n result.done = true;\n result.value = undefined;\n return result;\n }\n const c = diff_internal(state, this.c);\n this.c = c;\n if (c === 1) {\n result.value = [\n state.oxs,\n state.oxe,\n state.oys,\n state.oye\n ];\n return result;\n }\n if (state.pxs >= 0) {\n result.value = [\n state.pxs,\n state.pxe,\n state.pys,\n state.pye\n ];\n return result;\n }\n result.done = true;\n result.value = undefined;\n return result;\n }\n constructor(state){\n this.state = state;\n this.c = 0;\n this.result = {\n value: null,\n done: false\n };\n }\n};\nfunction diff_core(i, N, j, M, eq) {\n const Z = (Math.min(N, M) + 1) * 2;\n const L = N + M;\n const b = new (L < 256 ? Uint8Array : L < 65536 ? Uint16Array : Uint32Array)(2 * Z);\n return new DiffGen({\n i,\n N,\n j,\n M,\n Z,\n b,\n eq,\n pxs: -1,\n pxe: -1,\n pys: -1,\n pye: -1,\n oxs: -1,\n oxe: -1,\n oys: -1,\n oye: -1,\n stack_top: 0,\n stack_base: []\n });\n}\nbin.diff_core = diff_core;\nfunction diff(xs, ys) {\n let [i, N, M] = [\n 0,\n xs.length,\n ys.length\n ];\n while(i < N && i < M && xs[i] === ys[i])i++;\n if (i === N && i === M) return [][Symbol.iterator]();\n while(xs[--N] === ys[--M] && N > i && M > i);\n const eq = (x, y)=>xs[x] === ys[y];\n return diff_core(i, N + 1 - i, i, M + 1 - i, eq);\n}\nbin.diff = diff;\nlet LCSGen = class LCSGen {\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const rec = this.diff.next();\n if (rec.done) {\n const { i, j, N } = this;\n if (i < N) {\n rec.done = false;\n rec.value = [\n i,\n j,\n N - i\n ];\n this.i = N;\n }\n return rec;\n }\n const v = rec.value;\n const sx = v[0];\n const ex = v[1];\n const ey = v[3];\n const { i, j } = this;\n if (i !== sx) {\n v.length--;\n v[0] = i;\n v[1] = j;\n v[2] = sx - i;\n }\n this.i = ex;\n this.j = ey;\n return rec;\n }\n constructor(diff, N){\n this.diff = diff;\n this.N = N;\n this.i = 0;\n this.j = 0;\n }\n};\nfunction lcs(xs, ys) {\n return new LCSGen(diff(xs, ys), xs.length);\n}\nvar lcs_1 = bin.lcs = lcs;\nfunction* calcPatch(xs, ys) {\n const slice = ArrayBuffer.isView(xs) ? Uint8Array.prototype.subarray : xs.slice;\n for (const v of diff(xs, ys)){\n v[2] = slice.call(ys, v[2], v[3]);\n yield v;\n }\n}\nbin.calcPatch = calcPatch;\nfunction* applyPatch(xs, patch) {\n let i = 0;\n const slice = ArrayBuffer.isView(xs) ? Uint8Array.prototype.subarray : xs.slice;\n for (const [dels, dele, ins] of patch){\n if (i < dels) yield slice.call(xs, i, dels);\n if (ins.length > 0) yield ins;\n i = dele;\n }\n if (i < xs.length) yield slice.call(xs, i);\n}\nbin.applyPatch = applyPatch;\n\nconst getOriginalIndices = (arr, separatorLength)=>{\n const result = [];\n let index = 0;\n for (const item of arr){\n result.push(index);\n index += item.length + separatorLength;\n }\n result.push(index - separatorLength);\n return result;\n};\nconst filterEmptyParts = (arr)=>{\n return arr.filter((item)=>item.end > item.start);\n};\nconst getInlineDiff = (l, r, options)=>{\n let resultL = [];\n let resultR = [];\n let lastL = 0;\n let lastR = 0;\n if (options.mode === 'word') {\n const wordSeparator = options.wordSeparator || ' ';\n const lArr = l.split(wordSeparator);\n const rArr = r.split(wordSeparator);\n /**\n * The iter array contains the information about replacement, which is an array of\n * tuple `[startL, startR, length]`.\n *\n * e.g. `[1, 2, 3]` means replace `lArr[1...1+3]` to `rArr[2...2+3]` (include the end).\n */ const iter = [\n ...lcs_1(lArr, rArr)\n ];\n const separatorLength = wordSeparator.length;\n const indicesL = getOriginalIndices(lArr, separatorLength);\n const indicesR = getOriginalIndices(rArr, separatorLength);\n for (const [sl, sr, length] of iter){\n if (sl > lastL) {\n resultL.push({\n type: 'remove',\n start: indicesL[lastL],\n end: indicesL[sl]\n });\n }\n if (sr > lastR) {\n resultR.push({\n type: 'add',\n start: indicesR[lastR],\n end: indicesR[sr]\n });\n }\n lastL = sl + length;\n lastR = sr + length;\n resultL.push({\n start: indicesL[sl],\n end: indicesL[lastL]\n });\n resultR.push({\n start: indicesR[sr],\n end: indicesR[lastR]\n });\n }\n if (l.length > lastL) {\n resultL.push({\n type: 'remove',\n start: indicesL[lastL],\n end: l.length\n });\n }\n if (r.length > lastR) {\n resultR.push({\n type: 'add',\n start: indicesR[lastR],\n end: r.length\n });\n }\n resultL = filterEmptyParts(resultL);\n resultR = filterEmptyParts(resultR);\n return [\n resultL,\n resultR\n ];\n }\n const iter = lcs_1(l, r);\n for (const [sl, sr, length] of iter){\n if (sl > lastL) {\n resultL.push({\n type: 'remove',\n start: lastL,\n end: sl\n });\n }\n if (sr > lastR) {\n resultR.push({\n type: 'add',\n start: lastR,\n end: sr\n });\n }\n lastL = sl + length;\n lastR = sr + length;\n resultL.push({\n start: sl,\n end: lastL\n });\n resultR.push({\n start: sr,\n end: lastR\n });\n }\n if (l.length > lastL) {\n resultL.push({\n type: 'remove',\n start: lastL,\n end: l.length\n });\n }\n if (r.length > lastR) {\n resultR.push({\n type: 'add',\n start: lastR,\n end: r.length\n });\n }\n resultL = filterEmptyParts(resultL);\n resultR = filterEmptyParts(resultR);\n return [\n resultL,\n resultR\n ];\n};\n\nconst syntaxHighlightLine = (enabled, text, offset)=>{\n if (!enabled) {\n return [\n {\n token: 'plain',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'undefined' || text === 'Infinity' || text === '-Infinity' || text === 'NaN' || /^\\d+n$/i.test(text) || text.startsWith('Symbol(') || text.startsWith('function') || text.startsWith('(')) {\n return [\n {\n token: 'invalid',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (!Number.isNaN(Number(text))) {\n return [\n {\n token: 'number',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'true' || text === 'false') {\n return [\n {\n token: 'boolean',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text === 'null') {\n return [\n {\n token: 'null',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n if (text.startsWith('\"')) {\n if (text.endsWith(': [') || text.endsWith(': {')) {\n return [\n {\n token: 'key',\n start: offset,\n end: text.length - 3 + offset\n },\n {\n token: 'punctuation',\n start: text.length - 3,\n end: text.length - 2 + offset\n },\n {\n token: 'plain',\n start: text.length - 2,\n end: text.length - 1 + offset\n },\n {\n token: 'punctuation',\n start: text.length - 1,\n end: text.length + offset\n }\n ];\n }\n let pairedQuoteIndex = 1;\n while(pairedQuoteIndex < text.length){\n if (text[pairedQuoteIndex] === '\"') break;\n if (text[pairedQuoteIndex] === '\\\\') ++pairedQuoteIndex;\n ++pairedQuoteIndex;\n }\n if (pairedQuoteIndex === text.length - 1) {\n return [\n {\n token: 'string',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n return [\n {\n token: 'key',\n start: offset,\n end: pairedQuoteIndex + 1 + offset\n },\n {\n token: 'punctuation',\n start: pairedQuoteIndex + 1,\n end: pairedQuoteIndex + 2 + offset\n },\n {\n token: 'plain',\n start: pairedQuoteIndex + 2,\n end: pairedQuoteIndex + 3 + offset\n },\n ...syntaxHighlightLine(enabled, text.substring(pairedQuoteIndex + 3), offset + pairedQuoteIndex + 3)\n ];\n }\n if (text === '{' || text === '}' || text === '[' || text === ']') {\n return [\n {\n token: 'punctuation',\n start: offset,\n end: text.length + offset\n }\n ];\n }\n // should this be expected?\n return [\n {\n token: 'plain',\n start: offset,\n end: text.length + offset\n }\n ];\n};\n\nconst defaultOptions = {\n threshold: 8,\n margin: 3\n};\nconst getSegments = (l, r, options, jsonsAreEqual)=>{\n if (!options || jsonsAreEqual) {\n return [\n {\n start: 0,\n end: l.length,\n isEqual: false\n }\n ];\n }\n const segments = [];\n for(let i = 0; i < l.length; i++){\n if (l[i].type === 'equal' && r[i].type === 'equal') {\n if (segments.length && segments[segments.length - 1].isEqual) {\n segments[segments.length - 1].end++;\n } else {\n segments.push({\n start: i,\n end: i + 1,\n isEqual: true\n });\n }\n } else {\n if (segments.length && !segments[segments.length - 1].isEqual) {\n segments[segments.length - 1].end++;\n } else {\n segments.push({\n start: i,\n end: i + 1,\n isEqual: false\n });\n }\n }\n }\n const _options = options === true ? defaultOptions : {\n ...defaultOptions,\n ...options\n };\n const { threshold, margin } = _options;\n if (threshold < margin * 2 + 1) {\n // eslint-disable-next-line no-console, max-len\n console.warn(`Threshold (${threshold}) is no more than 2 margins + 1 \"expand\" line (${margin} * 2 + 1), it's not necessary to hide unchanged areas which have less than ${margin * 2 + 1} lines.`);\n }\n const result = [];\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n if (!segment.isEqual || segment.end - segment.start < threshold || segment.end - segment.start <= margin * 2 + 1) {\n result.push(segment);\n continue;\n }\n if (!i) {\n result.push({\n hasLinesBefore: true,\n hasLinesAfter: false,\n start: 0,\n end: segment.end - margin,\n isEqual: true\n });\n result.push({\n start: segment.end - margin,\n end: segment.end,\n isEqual: true\n });\n } else if (i === segments.length - 1) {\n result.push({\n start: segment.start,\n end: segment.start + margin,\n isEqual: true\n });\n result.push({\n hasLinesBefore: false,\n hasLinesAfter: true,\n start: segment.start + margin,\n end: l.length,\n isEqual: true\n });\n } else {\n result.push({\n start: segment.start,\n end: segment.start + margin,\n isEqual: true\n });\n result.push({\n hasLinesBefore: true,\n hasLinesAfter: true,\n start: segment.start + margin,\n end: segment.end - margin,\n isEqual: true\n });\n result.push({\n start: segment.end - margin,\n end: segment.end,\n isEqual: true\n });\n }\n }\n return result;\n};\n\nconst DEFAULT_INDENT = 2;\nconst DEFAULT_EXPAND_MORE_LINES_LIMIT = 20;\nconst DEFAULT_TEXTS = {\n noChangeDetected: 'No change detected',\n showLinesBefore: '⭡ Show %d lines before',\n showLinesAfter: '⭣ Show %d lines after',\n showAll: '⭥ Show all unchanged lines'\n};\nconst Viewer = (props)=>{\n const [linesLeft, linesRight] = props.diff;\n const jsonsAreEqual = React.useMemo(()=>{\n return linesLeft.length === linesRight.length && linesLeft.every((item)=>item.type === 'equal') && linesRight.every((item)=>item.type === 'equal');\n }, [\n linesLeft,\n linesRight\n ]);\n const mergedTexts = {\n ...DEFAULT_TEXTS,\n ...props.texts\n };\n const lineNumberWidth = props.lineNumbers ? `calc(${String(linesLeft.length).length}ch + 16px)` : 0;\n const indent = props.indent ?? DEFAULT_INDENT;\n const indentChar = indent === 'tab' ? '\\t' : ' ';\n const indentSize = indent === 'tab' ? 1 : indent;\n const inlineDiffOptions = {\n mode: props.inlineDiffOptions?.mode || 'char',\n wordSeparator: props.inlineDiffOptions?.wordSeparator || ''\n };\n const hideUnchangedLines = props.hideUnchangedLines ?? false;\n const { scrollContainer: _scrollContainer = 'body', itemHeight = 18, expandLineHeight = 26 } = !props.virtual || props.virtual === true ? {} : props.virtual;\n const scrollContainer = _scrollContainer === 'body' ? document.body : document.querySelector(_scrollContainer);\n // Use these refs to keep the diff data and segments sync,\n // or it may cause runtime error because of their mismatch.\n // Do not use the states to render, use the refs to render and use `updateViewer` to update.\n const linesLeftRef = React.useRef(linesLeft);\n const linesRightRef = React.useRef(linesRight);\n const segmentsRef = React.useRef(getSegments(linesLeft, linesRight, hideUnchangedLines, jsonsAreEqual));\n const accTopRef = React.useRef([]);\n const totalHeightRef = React.useRef(0);\n const tbodyRef = React.useRef(null);\n const [, forceUpdate] = React.useState({});\n const updateViewer = ()=>{\n accTopRef.current = [];\n if (props.virtual) {\n let acc = 0;\n for (const segment of segmentsRef.current){\n if (isExpandLine(segment)) {\n accTopRef.current.push(acc);\n acc += expandLineHeight;\n } else {\n accTopRef.current.push(acc);\n acc += itemHeight * (segment.end - segment.start);\n }\n }\n totalHeightRef.current = segmentsRef.current.reduce((acc, segment)=>{\n if (!isExpandLine(segment)) {\n return acc + (segment.end - segment.start) * itemHeight;\n }\n return acc + expandLineHeight;\n }, 0);\n }\n forceUpdate({});\n };\n React.useEffect(()=>{\n linesLeftRef.current = linesLeft;\n linesRightRef.current = linesRight;\n segmentsRef.current = getSegments(linesLeft, linesRight, hideUnchangedLines, jsonsAreEqual);\n updateViewer();\n }, [\n hideUnchangedLines,\n linesLeft,\n linesRight\n ]);\n React.useEffect(()=>{\n if (!props.virtual || !scrollContainer) {\n return;\n }\n const onScroll = ()=>forceUpdate({});\n scrollContainer.addEventListener('scroll', onScroll);\n return ()=>{\n scrollContainer.removeEventListener('scroll', onScroll);\n };\n }, [\n props.virtual,\n scrollContainer\n ]);\n const onExpandBefore = (segmentIndex)=>(lines)=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n end: Math.max(newSegment.end - lines, newSegment.start)\n };\n if (segmentIndex + 1 < segmentsRef.current.length - 1) {\n newSegments[segmentIndex + 1] = {\n ...newSegments[segmentIndex + 1],\n start: Math.max(newSegment.end - lines, newSegment.start)\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const onExpandAfter = (segmentIndex)=>(lines)=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n start: Math.min(newSegment.start + lines, newSegment.end)\n };\n if (segmentIndex > 1) {\n newSegments[segmentIndex - 1] = {\n ...newSegments[segmentIndex - 1],\n end: Math.min(newSegment.start + lines, newSegment.end)\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const onExpandAll = (segmentIndex)=>()=>{\n const newSegments = [\n ...segmentsRef.current\n ];\n const newSegment = newSegments[segmentIndex];\n newSegments[segmentIndex] = {\n ...newSegment,\n start: newSegment.start,\n end: newSegment.start\n };\n if (segmentIndex + 1 < segmentsRef.current.length - 1) {\n newSegments[segmentIndex + 1] = {\n ...newSegments[segmentIndex + 1],\n start: newSegment.start\n };\n } else {\n newSegments[segmentIndex - 1] = {\n ...newSegments[segmentIndex - 1],\n end: newSegment.end\n };\n }\n segmentsRef.current = newSegments;\n updateViewer();\n };\n const renderInlineResult = (text, info = [], comma = false, syntaxHighlightEnabled = false)=>/*#__PURE__*/ React.createElement(React.Fragment, null, info.map((item, index)=>{\n const frag = text.slice(item.start, item.end);\n if (!item.type && !item.token) {\n return frag;\n }\n const className = [\n item.type ? `inline-diff-${item.type}` : '',\n item.token ? `token ${item.token}` : ''\n ].filter(Boolean).join(' ');\n return /*#__PURE__*/ React.createElement(\"span\", {\n key: `${index}-${item.type}-${frag}`,\n className: className\n }, frag);\n }), comma && (syntaxHighlightEnabled ? /*#__PURE__*/ React.createElement(\"span\", {\n className: \"token punctuation\"\n }, \",\") : ','));\n const renderLine = (index, syntaxHighlightEnabled)=>{\n const l = linesLeftRef.current[index];\n const r = linesRightRef.current[index];\n const [lDiff, rDiff] = props.highlightInlineDiff && l.type === 'modify' && r.type === 'modify' ? getInlineDiff(l.text, r.text, inlineDiffOptions) : [\n [],\n []\n ];\n const lTokens = syntaxHighlightLine(syntaxHighlightEnabled, l.text, 0);\n const rTokens = syntaxHighlightLine(syntaxHighlightEnabled, r.text, 0);\n const lResult = mergeSegments(lTokens, lDiff);\n const rResult = mergeSegments(rTokens, rDiff);\n const bgLeft = l.type !== 'equal' ? props.bgColour?.[l.type] ?? '' : '';\n const bgRight = r.type !== 'equal' ? props.bgColour?.[r.type] ?? '' : '';\n return(// eslint-disable-next-line react/no-array-index-key\n /*#__PURE__*/ React.createElement(\"tr\", {\n key: index\n }, props.lineNumbers && /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${l.type} line-number`,\n style: {\n backgroundColor: bgLeft\n }\n }, l.lineNumber), /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${l.type}`,\n style: {\n backgroundColor: bgLeft\n }\n }, /*#__PURE__*/ React.createElement(\"pre\", null, l.text && indentChar.repeat(l.level * indentSize), renderInlineResult(l.text, lResult, l.comma, syntaxHighlightEnabled))), props.lineNumbers && /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${r.type} line-number`,\n style: {\n backgroundColor: bgRight\n }\n }, r.lineNumber), /*#__PURE__*/ React.createElement(\"td\", {\n className: `line-${r.type}`,\n style: {\n backgroundColor: bgRight\n }\n }, /*#__PURE__*/ React.createElement(\"pre\", null, r.text && indentChar.repeat(r.level * indentSize), renderInlineResult(r.text, rResult, r.comma, syntaxHighlightEnabled)))));\n };\n const renderExpandLine = (hasLinesBefore, hasLinesAfter, expandMoreLinesLimit, index)=>{\n return /*#__PURE__*/ React.createElement(React.Fragment, null, hasLinesBefore && /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandBefore(index)(expandMoreLinesLimit)\n }, mergedTexts.showLinesBefore.replaceAll('%d', String(expandMoreLinesLimit))), /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandAll(index)()\n }, mergedTexts.showAll), hasLinesAfter && /*#__PURE__*/ React.createElement(\"button\", {\n onClick: ()=>onExpandAfter(index)(expandMoreLinesLimit)\n }, mergedTexts.showLinesAfter.replaceAll('%d', String(expandMoreLinesLimit))));\n };\n const renderSegment = (segment, index, renderStart, renderEnd, syntaxHighlightEnabled)=>{\n let { start, end } = segment;\n start = Math.max(start, renderStart);\n end = Math.min(end, renderEnd);\n if (start === end) {\n return null;\n }\n if (!isExpandLine(segment)) {\n return Array(end - start).fill(0).map((_, index)=>renderLine(start + index, syntaxHighlightEnabled));\n }\n const { hasLinesBefore, hasLinesAfter } = segment;\n const expandMoreLinesLimit = typeof hideUnchangedLines === 'boolean' ? DEFAULT_EXPAND_MORE_LINES_LIMIT : hideUnchangedLines.expandMoreLinesLimit || DEFAULT_EXPAND_MORE_LINES_LIMIT;\n return [\n /*#__PURE__*/ React.createElement(\"tr\", {\n key: `expand-line-${index}`,\n className: \"expand-line\"\n }, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n className: `${hasLinesBefore ? 'has-lines-before' : ''} ${hasLinesAfter ? 'has-lines-after' : ''}`\n }, typeof hideUnchangedLines !== 'boolean' && hideUnchangedLines.expandLineRenderer ? hideUnchangedLines.expandLineRenderer({\n hasLinesBefore,\n hasLinesAfter,\n onExpandBefore: onExpandBefore(index),\n onExpandAfter: onExpandAfter(index),\n onExpandAll: onExpandAll(index)\n }) : renderExpandLine(hasLinesBefore, hasLinesAfter, expandMoreLinesLimit, index)))\n ];\n };\n const renderTbody = (syntaxHighlightEnabled)=>{\n if (jsonsAreEqual && hideUnchangedLines) {\n return /*#__PURE__*/ React.createElement(\"tr\", {\n key: \"message-line\",\n className: \"message-line\"\n }, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4\n }, mergedTexts.noChangeDetected));\n }\n if (!props.virtual) {\n return segmentsRef.current.map((item, index)=>renderSegment(item, index, 0, linesLeftRef.current.length, syntaxHighlightEnabled));\n }\n const containerHeight = scrollContainer?.clientHeight ?? 0;\n const scrollTop = scrollContainer?.scrollTop ?? 0;\n const scrollBottom = scrollTop + containerHeight;\n let t = tbodyRef.current;\n let firstElementTop = t?.offsetTop ?? 0;\n while(t?.offsetParent && t?.offsetParent !== scrollContainer){\n t = t.offsetParent;\n firstElementTop += t.offsetTop;\n }\n if (firstElementTop > scrollBottom || firstElementTop + totalHeightRef.current < scrollTop) {\n return /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: `${totalHeightRef.current}px`\n }\n }));\n }\n const viewportTop = scrollTop - firstElementTop;\n const viewportBottom = scrollBottom - firstElementTop;\n const [startSegment, startLine, endSegment, endLine] = findVisibleLines(segmentsRef.current, accTopRef.current, viewportTop, viewportBottom, itemHeight, expandLineHeight);\n const [topHeight, bottomHeight] = calculatePlaceholderHeight(segmentsRef.current, accTopRef.current, startSegment, startLine, endSegment, endLine, itemHeight, expandLineHeight, totalHeightRef.current);\n const visibleSegments = segmentsRef.current.slice(startSegment, endSegment + 1);\n return visibleSegments.length ? /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: topHeight,\n padding: 0\n }\n })), visibleSegments.map((segment, index)=>renderSegment(segment, index, startLine, endLine, syntaxHighlightEnabled)), /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: bottomHeight,\n padding: 0\n }\n }))) : /*#__PURE__*/ React.createElement(\"tr\", null, /*#__PURE__*/ React.createElement(\"td\", {\n colSpan: 4,\n style: {\n height: `${totalHeightRef.current}px`\n }\n }));\n };\n const renderMeasureLine = ()=>/*#__PURE__*/ React.createElement(\"colgroup\", {\n className: \"measure-line\"\n }, props.lineNumbers && /*#__PURE__*/ React.createElement(\"col\", {\n style: {\n width: lineNumberWidth\n }\n }), /*#__PURE__*/ React.createElement(\"col\", null), props.lineNumbers && /*#__PURE__*/ React.createElement(\"col\", {\n style: {\n width: lineNumberWidth\n }\n }), /*#__PURE__*/ React.createElement(\"col\", null));\n const classes = [\n 'json-diff-viewer',\n props.virtual && 'json-diff-viewer-virtual',\n props.syntaxHighlight && `json-diff-viewer-theme-${props.syntaxHighlight.theme || 'monokai'}`,\n props.className\n ].filter(Boolean).join(' ');\n const syntaxHighlightEnabled = !!props.syntaxHighlight;\n return /*#__PURE__*/ React.createElement(\"table\", {\n className: classes,\n style: props.style\n }, renderMeasureLine(), /*#__PURE__*/ React.createElement(\"tbody\", {\n ref: tbodyRef\n }, renderTbody(syntaxHighlightEnabled)));\n};\nViewer.displayName = 'Viewer';\n\nexport { Viewer as default };\n","function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _assertThisInitialized(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n}\nexport { _assertThisInitialized as default };","function _setPrototypeOf(t, e) {\n return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n return t.__proto__ = e, t;\n }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var lastThis;\n var lastArgs = [];\n var lastResult;\n var calledOnce = false;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n return lastResult;\n }\n lastResult = resultFn.apply(this, newArgs);\n calledOnce = true;\n lastThis = this;\n lastArgs = newArgs;\n return lastResult;\n }\n return memoized;\n}\n\nexport default memoizeOne;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport memoizeOne from 'memoize-one';\nimport { createElement, PureComponent } from 'react';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\n\n// Animation frame based implementation of setTimeout.\n// Inspired by Joe Lambert, https://gist.github.com/joelambert/1002116#file-requesttimeout-js\nvar hasNativePerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';\nvar now = hasNativePerformanceNow ? function () {\n return performance.now();\n} : function () {\n return Date.now();\n};\nfunction cancelTimeout(timeoutID) {\n cancelAnimationFrame(timeoutID.id);\n}\nfunction requestTimeout(callback, delay) {\n var start = now();\n\n function tick() {\n if (now() - start >= delay) {\n callback.call(null);\n } else {\n timeoutID.id = requestAnimationFrame(tick);\n }\n }\n\n var timeoutID = {\n id: requestAnimationFrame(tick)\n };\n return timeoutID;\n}\n\nvar size = -1; // This utility copied from \"dom-helpers\" package.\n\nfunction getScrollbarSize(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (size === -1 || recalculate) {\n var div = document.createElement('div');\n var style = div.style;\n style.width = '50px';\n style.height = '50px';\n style.overflow = 'scroll';\n document.body.appendChild(div);\n size = div.offsetWidth - div.clientWidth;\n document.body.removeChild(div);\n }\n\n return size;\n}\nvar cachedRTLResult = null; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n// Chrome does not seem to adhere; its scrollLeft values are positive (measured relative to the left).\n// Safari's elastic bounce makes detecting this even more complicated wrt potential false positives.\n// The safest way to check this is to intentionally set a negative offset,\n// and then verify that the subsequent \"scroll\" event matches the negative offset.\n// If it does not match, then we can assume a non-standard RTL scroll implementation.\n\nfunction getRTLOffsetType(recalculate) {\n if (recalculate === void 0) {\n recalculate = false;\n }\n\n if (cachedRTLResult === null || recalculate) {\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '100px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n cachedRTLResult = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n cachedRTLResult = 'negative';\n } else {\n cachedRTLResult = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLResult;\n }\n\n return cachedRTLResult;\n}\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL = 150;\n\nvar defaultItemKey = function defaultItemKey(_ref) {\n var columnIndex = _ref.columnIndex,\n data = _ref.data,\n rowIndex = _ref.rowIndex;\n return rowIndex + \":\" + columnIndex;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsOverscanCount = null;\nvar devWarningsOverscanRowsColumnsCount = null;\nvar devWarningsTagName = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsOverscanCount = /*#__PURE__*/new WeakSet();\n devWarningsOverscanRowsColumnsCount = /*#__PURE__*/new WeakSet();\n devWarningsTagName = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createGridComponent(_ref2) {\n var _class;\n\n var getColumnOffset = _ref2.getColumnOffset,\n getColumnStartIndexForOffset = _ref2.getColumnStartIndexForOffset,\n getColumnStopIndexForStartIndex = _ref2.getColumnStopIndexForStartIndex,\n getColumnWidth = _ref2.getColumnWidth,\n getEstimatedTotalHeight = _ref2.getEstimatedTotalHeight,\n getEstimatedTotalWidth = _ref2.getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment = _ref2.getOffsetForColumnAndAlignment,\n getOffsetForRowAndAlignment = _ref2.getOffsetForRowAndAlignment,\n getRowHeight = _ref2.getRowHeight,\n getRowOffset = _ref2.getRowOffset,\n getRowStartIndexForOffset = _ref2.getRowStartIndexForOffset,\n getRowStopIndexForStartIndex = _ref2.getRowStopIndexForStartIndex,\n initInstanceProps = _ref2.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref2.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref2.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(Grid, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function Grid(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._resetIsScrollingTimeoutId = null;\n _this._outerRef = void 0;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n horizontalScrollDirection: 'forward',\n scrollLeft: typeof _this.props.initialScrollLeft === 'number' ? _this.props.initialScrollLeft : 0,\n scrollTop: typeof _this.props.initialScrollTop === 'number' ? _this.props.initialScrollTop : 0,\n scrollUpdateWasRequested: false,\n verticalScrollDirection: 'forward'\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanColumnStartIndex, overscanColumnStopIndex, overscanRowStartIndex, overscanRowStopIndex, visibleColumnStartIndex, visibleColumnStopIndex, visibleRowStartIndex, visibleRowStopIndex) {\n return _this.props.onItemsRendered({\n overscanColumnStartIndex: overscanColumnStartIndex,\n overscanColumnStopIndex: overscanColumnStopIndex,\n overscanRowStartIndex: overscanRowStartIndex,\n overscanRowStopIndex: overscanRowStopIndex,\n visibleColumnStartIndex: visibleColumnStartIndex,\n visibleColumnStopIndex: visibleColumnStopIndex,\n visibleRowStartIndex: visibleRowStartIndex,\n visibleRowStopIndex: visibleRowStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollLeft, scrollTop, horizontalScrollDirection, verticalScrollDirection, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n horizontalScrollDirection: horizontalScrollDirection,\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n verticalScrollDirection: verticalScrollDirection,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (rowIndex, columnIndex) {\n var _this$props = _this.props,\n columnWidth = _this$props.columnWidth,\n direction = _this$props.direction,\n rowHeight = _this$props.rowHeight;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && columnWidth, shouldResetStyleCacheOnItemSizeChange && direction, shouldResetStyleCacheOnItemSizeChange && rowHeight);\n\n var key = rowIndex + \":\" + columnIndex;\n var style;\n\n if (itemStyleCache.hasOwnProperty(key)) {\n style = itemStyleCache[key];\n } else {\n var _offset = getColumnOffset(_this.props, columnIndex, _this._instanceProps);\n\n var isRtl = direction === 'rtl';\n itemStyleCache[key] = style = {\n position: 'absolute',\n left: isRtl ? undefined : _offset,\n right: isRtl ? _offset : undefined,\n top: getRowOffset(_this.props, rowIndex, _this._instanceProps),\n height: getRowHeight(_this.props, rowIndex, _this._instanceProps),\n width: getColumnWidth(_this.props, columnIndex, _this._instanceProps)\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScroll = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientHeight = _event$currentTarget.clientHeight,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollTop = _event$currentTarget.scrollTop,\n scrollHeight = _event$currentTarget.scrollHeight,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction; // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n\n var calculatedScrollLeft = scrollLeft;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n calculatedScrollLeft = -scrollLeft;\n break;\n\n case 'positive-descending':\n calculatedScrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n calculatedScrollLeft = Math.max(0, Math.min(calculatedScrollLeft, scrollWidth - clientWidth));\n var calculatedScrollTop = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: calculatedScrollLeft,\n scrollTop: calculatedScrollTop,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward',\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1);\n });\n };\n\n return _this;\n }\n\n Grid.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = Grid.prototype;\n\n _proto.scrollTo = function scrollTo(_ref3) {\n var scrollLeft = _ref3.scrollLeft,\n scrollTop = _ref3.scrollTop;\n\n if (scrollLeft !== undefined) {\n scrollLeft = Math.max(0, scrollLeft);\n }\n\n if (scrollTop !== undefined) {\n scrollTop = Math.max(0, scrollTop);\n }\n\n this.setState(function (prevState) {\n if (scrollLeft === undefined) {\n scrollLeft = prevState.scrollLeft;\n }\n\n if (scrollTop === undefined) {\n scrollTop = prevState.scrollTop;\n }\n\n if (prevState.scrollLeft === scrollLeft && prevState.scrollTop === scrollTop) {\n return null;\n }\n\n return {\n horizontalScrollDirection: prevState.scrollLeft < scrollLeft ? 'forward' : 'backward',\n scrollLeft: scrollLeft,\n scrollTop: scrollTop,\n scrollUpdateWasRequested: true,\n verticalScrollDirection: prevState.scrollTop < scrollTop ? 'forward' : 'backward'\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(_ref4) {\n var _ref4$align = _ref4.align,\n align = _ref4$align === void 0 ? 'auto' : _ref4$align,\n columnIndex = _ref4.columnIndex,\n rowIndex = _ref4.rowIndex;\n var _this$props2 = this.props,\n columnCount = _this$props2.columnCount,\n height = _this$props2.height,\n rowCount = _this$props2.rowCount,\n width = _this$props2.width;\n var _this$state = this.state,\n scrollLeft = _this$state.scrollLeft,\n scrollTop = _this$state.scrollTop;\n var scrollbarSize = getScrollbarSize();\n\n if (columnIndex !== undefined) {\n columnIndex = Math.max(0, Math.min(columnIndex, columnCount - 1));\n }\n\n if (rowIndex !== undefined) {\n rowIndex = Math.max(0, Math.min(rowIndex, rowCount - 1));\n }\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps); // The scrollbar size should be considered when scrolling an item into view,\n // to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n\n var horizontalScrollbarSize = estimatedTotalWidth > width ? scrollbarSize : 0;\n var verticalScrollbarSize = estimatedTotalHeight > height ? scrollbarSize : 0;\n this.scrollTo({\n scrollLeft: columnIndex !== undefined ? getOffsetForColumnAndAlignment(this.props, columnIndex, align, scrollLeft, this._instanceProps, verticalScrollbarSize) : scrollLeft,\n scrollTop: rowIndex !== undefined ? getOffsetForRowAndAlignment(this.props, rowIndex, align, scrollTop, this._instanceProps, horizontalScrollbarSize) : scrollTop\n });\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n initialScrollLeft = _this$props3.initialScrollLeft,\n initialScrollTop = _this$props3.initialScrollTop;\n\n if (this._outerRef != null) {\n var outerRef = this._outerRef;\n\n if (typeof initialScrollLeft === 'number') {\n outerRef.scrollLeft = initialScrollLeft;\n }\n\n if (typeof initialScrollTop === 'number') {\n outerRef.scrollTop = initialScrollTop;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var direction = this.props.direction;\n var _this$state2 = this.state,\n scrollLeft = _this$state2.scrollLeft,\n scrollTop = _this$state2.scrollTop,\n scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n var outerRef = this._outerRef;\n\n if (direction === 'rtl') {\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollLeft;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollLeft;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } else {\n outerRef.scrollLeft = Math.max(0, scrollLeft);\n }\n\n outerRef.scrollTop = Math.max(0, scrollTop);\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props4 = this.props,\n children = _this$props4.children,\n className = _this$props4.className,\n columnCount = _this$props4.columnCount,\n direction = _this$props4.direction,\n height = _this$props4.height,\n innerRef = _this$props4.innerRef,\n innerElementType = _this$props4.innerElementType,\n innerTagName = _this$props4.innerTagName,\n itemData = _this$props4.itemData,\n _this$props4$itemKey = _this$props4.itemKey,\n itemKey = _this$props4$itemKey === void 0 ? defaultItemKey : _this$props4$itemKey,\n outerElementType = _this$props4.outerElementType,\n outerTagName = _this$props4.outerTagName,\n rowCount = _this$props4.rowCount,\n style = _this$props4.style,\n useIsScrolling = _this$props4.useIsScrolling,\n width = _this$props4.width;\n var isScrolling = this.state.isScrolling;\n\n var _this$_getHorizontalR = this._getHorizontalRangeToRender(),\n columnStartIndex = _this$_getHorizontalR[0],\n columnStopIndex = _this$_getHorizontalR[1];\n\n var _this$_getVerticalRan = this._getVerticalRangeToRender(),\n rowStartIndex = _this$_getVerticalRan[0],\n rowStopIndex = _this$_getVerticalRan[1];\n\n var items = [];\n\n if (columnCount > 0 && rowCount) {\n for (var _rowIndex = rowStartIndex; _rowIndex <= rowStopIndex; _rowIndex++) {\n for (var _columnIndex = columnStartIndex; _columnIndex <= columnStopIndex; _columnIndex++) {\n items.push(createElement(children, {\n columnIndex: _columnIndex,\n data: itemData,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n key: itemKey({\n columnIndex: _columnIndex,\n data: itemData,\n rowIndex: _rowIndex\n }),\n rowIndex: _rowIndex,\n style: this._getItemStyle(_rowIndex, _columnIndex)\n }));\n }\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalHeight = getEstimatedTotalHeight(this.props, this._instanceProps);\n var estimatedTotalWidth = getEstimatedTotalWidth(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: this._onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: estimatedTotalHeight,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: estimatedTotalWidth\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n var _this$props5 = this.props,\n columnCount = _this$props5.columnCount,\n onItemsRendered = _this$props5.onItemsRendered,\n onScroll = _this$props5.onScroll,\n rowCount = _this$props5.rowCount;\n\n if (typeof onItemsRendered === 'function') {\n if (columnCount > 0 && rowCount > 0) {\n var _this$_getHorizontalR2 = this._getHorizontalRangeToRender(),\n _overscanColumnStartIndex = _this$_getHorizontalR2[0],\n _overscanColumnStopIndex = _this$_getHorizontalR2[1],\n _visibleColumnStartIndex = _this$_getHorizontalR2[2],\n _visibleColumnStopIndex = _this$_getHorizontalR2[3];\n\n var _this$_getVerticalRan2 = this._getVerticalRangeToRender(),\n _overscanRowStartIndex = _this$_getVerticalRan2[0],\n _overscanRowStopIndex = _this$_getVerticalRan2[1],\n _visibleRowStartIndex = _this$_getVerticalRan2[2],\n _visibleRowStopIndex = _this$_getVerticalRan2[3];\n\n this._callOnItemsRendered(_overscanColumnStartIndex, _overscanColumnStopIndex, _overscanRowStartIndex, _overscanRowStopIndex, _visibleColumnStartIndex, _visibleColumnStopIndex, _visibleRowStartIndex, _visibleRowStopIndex);\n }\n }\n\n if (typeof onScroll === 'function') {\n var _this$state3 = this.state,\n _horizontalScrollDirection = _this$state3.horizontalScrollDirection,\n _scrollLeft = _this$state3.scrollLeft,\n _scrollTop = _this$state3.scrollTop,\n _scrollUpdateWasRequested = _this$state3.scrollUpdateWasRequested,\n _verticalScrollDirection = _this$state3.verticalScrollDirection;\n\n this._callOnScroll(_scrollLeft, _scrollTop, _horizontalScrollDirection, _verticalScrollDirection, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getHorizontalRangeToRender = function _getHorizontalRangeToRender() {\n var _this$props6 = this.props,\n columnCount = _this$props6.columnCount,\n overscanColumnCount = _this$props6.overscanColumnCount,\n overscanColumnsCount = _this$props6.overscanColumnsCount,\n overscanCount = _this$props6.overscanCount,\n rowCount = _this$props6.rowCount;\n var _this$state4 = this.state,\n horizontalScrollDirection = _this$state4.horizontalScrollDirection,\n isScrolling = _this$state4.isScrolling,\n scrollLeft = _this$state4.scrollLeft;\n var overscanCountResolved = overscanColumnCount || overscanColumnsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getColumnStartIndexForOffset(this.props, scrollLeft, this._instanceProps);\n var stopIndex = getColumnStopIndexForStartIndex(this.props, startIndex, scrollLeft, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || horizontalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || horizontalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(columnCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n _proto._getVerticalRangeToRender = function _getVerticalRangeToRender() {\n var _this$props7 = this.props,\n columnCount = _this$props7.columnCount,\n overscanCount = _this$props7.overscanCount,\n overscanRowCount = _this$props7.overscanRowCount,\n overscanRowsCount = _this$props7.overscanRowsCount,\n rowCount = _this$props7.rowCount;\n var _this$state5 = this.state,\n isScrolling = _this$state5.isScrolling,\n verticalScrollDirection = _this$state5.verticalScrollDirection,\n scrollTop = _this$state5.scrollTop;\n var overscanCountResolved = overscanRowCount || overscanRowsCount || overscanCount || 1;\n\n if (columnCount === 0 || rowCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getRowStartIndexForOffset(this.props, scrollTop, this._instanceProps);\n var stopIndex = getRowStopIndexForStartIndex(this.props, startIndex, scrollTop, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || verticalScrollDirection === 'backward' ? Math.max(1, overscanCountResolved) : 1;\n var overscanForward = !isScrolling || verticalScrollDirection === 'forward' ? Math.max(1, overscanCountResolved) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(rowCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return Grid;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n useIsScrolling: false\n }, _class;\n}\n\nvar validateSharedProps = function validateSharedProps(_ref5, _ref6) {\n var children = _ref5.children,\n direction = _ref5.direction,\n height = _ref5.height,\n innerTagName = _ref5.innerTagName,\n outerTagName = _ref5.outerTagName,\n overscanColumnsCount = _ref5.overscanColumnsCount,\n overscanCount = _ref5.overscanCount,\n overscanRowsCount = _ref5.overscanRowsCount,\n width = _ref5.width;\n var instance = _ref6.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof overscanCount === 'number') {\n if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) {\n devWarningsOverscanCount.add(instance);\n console.warn('The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (typeof overscanColumnsCount === 'number' || typeof overscanRowsCount === 'number') {\n if (devWarningsOverscanRowsColumnsCount && !devWarningsOverscanRowsColumnsCount.has(instance)) {\n devWarningsOverscanRowsColumnsCount.add(instance);\n console.warn('The overscanColumnsCount and overscanRowsCount props have been deprecated. ' + 'Please use the overscanColumnCount and overscanRowCount props instead.');\n }\n }\n\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName && !devWarningsTagName.has(instance)) {\n devWarningsTagName.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n switch (direction) {\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n if (typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Grids must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n }\n\n if (typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Grids must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\nvar getEstimatedTotalHeight = function getEstimatedTotalHeight(_ref, _ref2) {\n var rowCount = _ref.rowCount;\n var rowMetadataMap = _ref2.rowMetadataMap,\n estimatedRowHeight = _ref2.estimatedRowHeight,\n lastMeasuredRowIndex = _ref2.lastMeasuredRowIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredRowIndex >= rowCount) {\n lastMeasuredRowIndex = rowCount - 1;\n }\n\n if (lastMeasuredRowIndex >= 0) {\n var itemMetadata = rowMetadataMap[lastMeasuredRowIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = rowCount - lastMeasuredRowIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedRowHeight;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getEstimatedTotalWidth = function getEstimatedTotalWidth(_ref3, _ref4) {\n var columnCount = _ref3.columnCount;\n var columnMetadataMap = _ref4.columnMetadataMap,\n estimatedColumnWidth = _ref4.estimatedColumnWidth,\n lastMeasuredColumnIndex = _ref4.lastMeasuredColumnIndex;\n var totalSizeOfMeasuredRows = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredColumnIndex >= columnCount) {\n lastMeasuredColumnIndex = columnCount - 1;\n }\n\n if (lastMeasuredColumnIndex >= 0) {\n var itemMetadata = columnMetadataMap[lastMeasuredColumnIndex];\n totalSizeOfMeasuredRows = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = columnCount - lastMeasuredColumnIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedColumnWidth;\n return totalSizeOfMeasuredRows + totalSizeOfUnmeasuredItems;\n};\n\nvar getItemMetadata = function getItemMetadata(itemType, props, index, instanceProps) {\n var itemMetadataMap, itemSize, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n itemSize = props.columnWidth;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n itemSize = props.rowHeight;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n if (itemType === 'column') {\n instanceProps.lastMeasuredColumnIndex = index;\n } else {\n instanceProps.lastMeasuredRowIndex = index;\n }\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem = function findNearestItem(itemType, props, instanceProps, offset) {\n var itemMetadataMap, lastMeasuredIndex;\n\n if (itemType === 'column') {\n itemMetadataMap = instanceProps.columnMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredColumnIndex;\n } else {\n itemMetadataMap = instanceProps.rowMetadataMap;\n lastMeasuredIndex = instanceProps.lastMeasuredRowIndex;\n }\n\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch(itemType, props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch(itemType, props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch = function findNearestItemBinarySearch(itemType, props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata(itemType, props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch = function findNearestItemExponentialSearch(itemType, props, instanceProps, index, offset) {\n var itemCount = itemType === 'column' ? props.columnCount : props.rowCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata(itemType, props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch(itemType, props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getOffsetForIndexAndAlignment = function getOffsetForIndexAndAlignment(itemType, props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var size = itemType === 'column' ? props.width : props.height;\n var itemMetadata = getItemMetadata(itemType, props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = itemType === 'column' ? getEstimatedTotalWidth(props, instanceProps) : getEstimatedTotalHeight(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + scrollbarSize + itemMetadata.size);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n};\n\nvar VariableSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(props, index, instanceProps) {\n return getItemMetadata('column', props, index, instanceProps).offset;\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(props, scrollLeft, instanceProps) {\n return findNearestItem('column', props, instanceProps, scrollLeft);\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, instanceProps) {\n var columnCount = props.columnCount,\n width = props.width;\n var itemMetadata = getItemMetadata('column', props, startIndex, instanceProps);\n var maxOffset = scrollLeft + width;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < columnCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('column', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n getColumnWidth: function getColumnWidth(props, index, instanceProps) {\n return instanceProps.columnMetadataMap[index].size;\n },\n getEstimatedTotalHeight: getEstimatedTotalHeight,\n getEstimatedTotalWidth: getEstimatedTotalWidth,\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('column', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n return getOffsetForIndexAndAlignment('row', props, index, align, scrollOffset, instanceProps, scrollbarSize);\n },\n getRowOffset: function getRowOffset(props, index, instanceProps) {\n return getItemMetadata('row', props, index, instanceProps).offset;\n },\n getRowHeight: function getRowHeight(props, index, instanceProps) {\n return instanceProps.rowMetadataMap[index].size;\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(props, scrollTop, instanceProps) {\n return findNearestItem('row', props, instanceProps, scrollTop);\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(props, startIndex, scrollTop, instanceProps) {\n var rowCount = props.rowCount,\n height = props.height;\n var itemMetadata = getItemMetadata('row', props, startIndex, instanceProps);\n var maxOffset = scrollTop + height;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < rowCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata('row', props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref5 = props,\n estimatedColumnWidth = _ref5.estimatedColumnWidth,\n estimatedRowHeight = _ref5.estimatedRowHeight;\n var instanceProps = {\n columnMetadataMap: {},\n estimatedColumnWidth: estimatedColumnWidth || DEFAULT_ESTIMATED_ITEM_SIZE,\n estimatedRowHeight: estimatedRowHeight || DEFAULT_ESTIMATED_ITEM_SIZE,\n lastMeasuredColumnIndex: -1,\n lastMeasuredRowIndex: -1,\n rowMetadataMap: {}\n };\n\n instance.resetAfterColumnIndex = function (columnIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n columnIndex: columnIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterRowIndex = function (rowIndex, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instance.resetAfterIndices({\n rowIndex: rowIndex,\n shouldForceUpdate: shouldForceUpdate\n });\n };\n\n instance.resetAfterIndices = function (_ref6) {\n var columnIndex = _ref6.columnIndex,\n rowIndex = _ref6.rowIndex,\n _ref6$shouldForceUpda = _ref6.shouldForceUpdate,\n shouldForceUpdate = _ref6$shouldForceUpda === void 0 ? true : _ref6$shouldForceUpda;\n\n if (typeof columnIndex === 'number') {\n instanceProps.lastMeasuredColumnIndex = Math.min(instanceProps.lastMeasuredColumnIndex, columnIndex - 1);\n }\n\n if (typeof rowIndex === 'number') {\n instanceProps.lastMeasuredRowIndex = Math.min(instanceProps.lastMeasuredRowIndex, rowIndex - 1);\n } // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref7) {\n var columnWidth = _ref7.columnWidth,\n rowHeight = _ref7.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'function') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n } else if (typeof rowHeight !== 'function') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar IS_SCROLLING_DEBOUNCE_INTERVAL$1 = 150;\n\nvar defaultItemKey$1 = function defaultItemKey(index, data) {\n return index;\n}; // In DEV mode, this Set helps us only log a warning once per component instance.\n// This avoids spamming the console every time a render happens.\n\n\nvar devWarningsDirection = null;\nvar devWarningsTagName$1 = null;\n\nif (process.env.NODE_ENV !== 'production') {\n if (typeof window !== 'undefined' && typeof window.WeakSet !== 'undefined') {\n devWarningsDirection = /*#__PURE__*/new WeakSet();\n devWarningsTagName$1 = /*#__PURE__*/new WeakSet();\n }\n}\n\nfunction createListComponent(_ref) {\n var _class;\n\n var getItemOffset = _ref.getItemOffset,\n getEstimatedTotalSize = _ref.getEstimatedTotalSize,\n getItemSize = _ref.getItemSize,\n getOffsetForIndexAndAlignment = _ref.getOffsetForIndexAndAlignment,\n getStartIndexForOffset = _ref.getStartIndexForOffset,\n getStopIndexForStartIndex = _ref.getStopIndexForStartIndex,\n initInstanceProps = _ref.initInstanceProps,\n shouldResetStyleCacheOnItemSizeChange = _ref.shouldResetStyleCacheOnItemSizeChange,\n validateProps = _ref.validateProps;\n return _class = /*#__PURE__*/function (_PureComponent) {\n _inheritsLoose(List, _PureComponent);\n\n // Always use explicit constructor for React components.\n // It produces less code after transpilation. (#26)\n // eslint-disable-next-line no-useless-constructor\n function List(props) {\n var _this;\n\n _this = _PureComponent.call(this, props) || this;\n _this._instanceProps = initInstanceProps(_this.props, _assertThisInitialized(_this));\n _this._outerRef = void 0;\n _this._resetIsScrollingTimeoutId = null;\n _this.state = {\n instance: _assertThisInitialized(_this),\n isScrolling: false,\n scrollDirection: 'forward',\n scrollOffset: typeof _this.props.initialScrollOffset === 'number' ? _this.props.initialScrollOffset : 0,\n scrollUpdateWasRequested: false\n };\n _this._callOnItemsRendered = void 0;\n _this._callOnItemsRendered = memoizeOne(function (overscanStartIndex, overscanStopIndex, visibleStartIndex, visibleStopIndex) {\n return _this.props.onItemsRendered({\n overscanStartIndex: overscanStartIndex,\n overscanStopIndex: overscanStopIndex,\n visibleStartIndex: visibleStartIndex,\n visibleStopIndex: visibleStopIndex\n });\n });\n _this._callOnScroll = void 0;\n _this._callOnScroll = memoizeOne(function (scrollDirection, scrollOffset, scrollUpdateWasRequested) {\n return _this.props.onScroll({\n scrollDirection: scrollDirection,\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: scrollUpdateWasRequested\n });\n });\n _this._getItemStyle = void 0;\n\n _this._getItemStyle = function (index) {\n var _this$props = _this.props,\n direction = _this$props.direction,\n itemSize = _this$props.itemSize,\n layout = _this$props.layout;\n\n var itemStyleCache = _this._getItemStyleCache(shouldResetStyleCacheOnItemSizeChange && itemSize, shouldResetStyleCacheOnItemSizeChange && layout, shouldResetStyleCacheOnItemSizeChange && direction);\n\n var style;\n\n if (itemStyleCache.hasOwnProperty(index)) {\n style = itemStyleCache[index];\n } else {\n var _offset = getItemOffset(_this.props, index, _this._instanceProps);\n\n var size = getItemSize(_this.props, index, _this._instanceProps); // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var isRtl = direction === 'rtl';\n var offsetHorizontal = isHorizontal ? _offset : 0;\n itemStyleCache[index] = style = {\n position: 'absolute',\n left: isRtl ? undefined : offsetHorizontal,\n right: isRtl ? offsetHorizontal : undefined,\n top: !isHorizontal ? _offset : 0,\n height: !isHorizontal ? size : '100%',\n width: isHorizontal ? size : '100%'\n };\n }\n\n return style;\n };\n\n _this._getItemStyleCache = void 0;\n _this._getItemStyleCache = memoizeOne(function (_, __, ___) {\n return {};\n });\n\n _this._onScrollHorizontal = function (event) {\n var _event$currentTarget = event.currentTarget,\n clientWidth = _event$currentTarget.clientWidth,\n scrollLeft = _event$currentTarget.scrollLeft,\n scrollWidth = _event$currentTarget.scrollWidth;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollLeft) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n }\n\n var direction = _this.props.direction;\n var scrollOffset = scrollLeft;\n\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // It's also easier for this component if we convert offsets to the same format as they would be in for ltr.\n // So the simplest solution is to determine which browser behavior we're dealing with, and convert based on it.\n switch (getRTLOffsetType()) {\n case 'negative':\n scrollOffset = -scrollLeft;\n break;\n\n case 'positive-descending':\n scrollOffset = scrollWidth - clientWidth - scrollLeft;\n break;\n }\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._onScrollVertical = function (event) {\n var _event$currentTarget2 = event.currentTarget,\n clientHeight = _event$currentTarget2.clientHeight,\n scrollHeight = _event$currentTarget2.scrollHeight,\n scrollTop = _event$currentTarget2.scrollTop;\n\n _this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollTop) {\n // Scroll position may have been updated by cDM/cDU,\n // In which case we don't need to trigger another render,\n // And we don't want to update state.isScrolling.\n return null;\n } // Prevent Safari's elastic scrolling from causing visual shaking when scrolling past bounds.\n\n\n var scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight));\n return {\n isScrolling: true,\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: false\n };\n }, _this._resetIsScrollingDebounced);\n };\n\n _this._outerRefSetter = function (ref) {\n var outerRef = _this.props.outerRef;\n _this._outerRef = ref;\n\n if (typeof outerRef === 'function') {\n outerRef(ref);\n } else if (outerRef != null && typeof outerRef === 'object' && outerRef.hasOwnProperty('current')) {\n outerRef.current = ref;\n }\n };\n\n _this._resetIsScrollingDebounced = function () {\n if (_this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(_this._resetIsScrollingTimeoutId);\n }\n\n _this._resetIsScrollingTimeoutId = requestTimeout(_this._resetIsScrolling, IS_SCROLLING_DEBOUNCE_INTERVAL$1);\n };\n\n _this._resetIsScrolling = function () {\n _this._resetIsScrollingTimeoutId = null;\n\n _this.setState({\n isScrolling: false\n }, function () {\n // Clear style cache after state update has been committed.\n // This way we don't break pure sCU for items that don't use isScrolling param.\n _this._getItemStyleCache(-1, null);\n });\n };\n\n return _this;\n }\n\n List.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {\n validateSharedProps$1(nextProps, prevState);\n validateProps(nextProps);\n return null;\n };\n\n var _proto = List.prototype;\n\n _proto.scrollTo = function scrollTo(scrollOffset) {\n scrollOffset = Math.max(0, scrollOffset);\n this.setState(function (prevState) {\n if (prevState.scrollOffset === scrollOffset) {\n return null;\n }\n\n return {\n scrollDirection: prevState.scrollOffset < scrollOffset ? 'forward' : 'backward',\n scrollOffset: scrollOffset,\n scrollUpdateWasRequested: true\n };\n }, this._resetIsScrollingDebounced);\n };\n\n _proto.scrollToItem = function scrollToItem(index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n\n var _this$props2 = this.props,\n itemCount = _this$props2.itemCount,\n layout = _this$props2.layout;\n var scrollOffset = this.state.scrollOffset;\n index = Math.max(0, Math.min(index, itemCount - 1)); // The scrollbar size should be considered when scrolling an item into view, to ensure it's fully visible.\n // But we only need to account for its size when it's actually visible.\n // This is an edge case for lists; normally they only scroll in the dominant direction.\n\n var scrollbarSize = 0;\n\n if (this._outerRef) {\n var outerRef = this._outerRef;\n\n if (layout === 'vertical') {\n scrollbarSize = outerRef.scrollWidth > outerRef.clientWidth ? getScrollbarSize() : 0;\n } else {\n scrollbarSize = outerRef.scrollHeight > outerRef.clientHeight ? getScrollbarSize() : 0;\n }\n }\n\n this.scrollTo(getOffsetForIndexAndAlignment(this.props, index, align, scrollOffset, this._instanceProps, scrollbarSize));\n };\n\n _proto.componentDidMount = function componentDidMount() {\n var _this$props3 = this.props,\n direction = _this$props3.direction,\n initialScrollOffset = _this$props3.initialScrollOffset,\n layout = _this$props3.layout;\n\n if (typeof initialScrollOffset === 'number' && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n outerRef.scrollLeft = initialScrollOffset;\n } else {\n outerRef.scrollTop = initialScrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n var _this$props4 = this.props,\n direction = _this$props4.direction,\n layout = _this$props4.layout;\n var _this$state = this.state,\n scrollOffset = _this$state.scrollOffset,\n scrollUpdateWasRequested = _this$state.scrollUpdateWasRequested;\n\n if (scrollUpdateWasRequested && this._outerRef != null) {\n var outerRef = this._outerRef; // TODO Deprecate direction \"horizontal\"\n\n if (direction === 'horizontal' || layout === 'horizontal') {\n if (direction === 'rtl') {\n // TRICKY According to the spec, scrollLeft should be negative for RTL aligned elements.\n // This is not the case for all browsers though (e.g. Chrome reports values as positive, measured relative to the left).\n // So we need to determine which browser behavior we're dealing with, and mimic it.\n switch (getRTLOffsetType()) {\n case 'negative':\n outerRef.scrollLeft = -scrollOffset;\n break;\n\n case 'positive-ascending':\n outerRef.scrollLeft = scrollOffset;\n break;\n\n default:\n var clientWidth = outerRef.clientWidth,\n scrollWidth = outerRef.scrollWidth;\n outerRef.scrollLeft = scrollWidth - clientWidth - scrollOffset;\n break;\n }\n } else {\n outerRef.scrollLeft = scrollOffset;\n }\n } else {\n outerRef.scrollTop = scrollOffset;\n }\n }\n\n this._callPropsCallbacks();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n if (this._resetIsScrollingTimeoutId !== null) {\n cancelTimeout(this._resetIsScrollingTimeoutId);\n }\n };\n\n _proto.render = function render() {\n var _this$props5 = this.props,\n children = _this$props5.children,\n className = _this$props5.className,\n direction = _this$props5.direction,\n height = _this$props5.height,\n innerRef = _this$props5.innerRef,\n innerElementType = _this$props5.innerElementType,\n innerTagName = _this$props5.innerTagName,\n itemCount = _this$props5.itemCount,\n itemData = _this$props5.itemData,\n _this$props5$itemKey = _this$props5.itemKey,\n itemKey = _this$props5$itemKey === void 0 ? defaultItemKey$1 : _this$props5$itemKey,\n layout = _this$props5.layout,\n outerElementType = _this$props5.outerElementType,\n outerTagName = _this$props5.outerTagName,\n style = _this$props5.style,\n useIsScrolling = _this$props5.useIsScrolling,\n width = _this$props5.width;\n var isScrolling = this.state.isScrolling; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var onScroll = isHorizontal ? this._onScrollHorizontal : this._onScrollVertical;\n\n var _this$_getRangeToRend = this._getRangeToRender(),\n startIndex = _this$_getRangeToRend[0],\n stopIndex = _this$_getRangeToRend[1];\n\n var items = [];\n\n if (itemCount > 0) {\n for (var _index = startIndex; _index <= stopIndex; _index++) {\n items.push(createElement(children, {\n data: itemData,\n key: itemKey(_index, itemData),\n index: _index,\n isScrolling: useIsScrolling ? isScrolling : undefined,\n style: this._getItemStyle(_index)\n }));\n }\n } // Read this value AFTER items have been created,\n // So their actual sizes (if variable) are taken into consideration.\n\n\n var estimatedTotalSize = getEstimatedTotalSize(this.props, this._instanceProps);\n return createElement(outerElementType || outerTagName || 'div', {\n className: className,\n onScroll: onScroll,\n ref: this._outerRefSetter,\n style: _extends({\n position: 'relative',\n height: height,\n width: width,\n overflow: 'auto',\n WebkitOverflowScrolling: 'touch',\n willChange: 'transform',\n direction: direction\n }, style)\n }, createElement(innerElementType || innerTagName || 'div', {\n children: items,\n ref: innerRef,\n style: {\n height: isHorizontal ? '100%' : estimatedTotalSize,\n pointerEvents: isScrolling ? 'none' : undefined,\n width: isHorizontal ? estimatedTotalSize : '100%'\n }\n }));\n };\n\n _proto._callPropsCallbacks = function _callPropsCallbacks() {\n if (typeof this.props.onItemsRendered === 'function') {\n var itemCount = this.props.itemCount;\n\n if (itemCount > 0) {\n var _this$_getRangeToRend2 = this._getRangeToRender(),\n _overscanStartIndex = _this$_getRangeToRend2[0],\n _overscanStopIndex = _this$_getRangeToRend2[1],\n _visibleStartIndex = _this$_getRangeToRend2[2],\n _visibleStopIndex = _this$_getRangeToRend2[3];\n\n this._callOnItemsRendered(_overscanStartIndex, _overscanStopIndex, _visibleStartIndex, _visibleStopIndex);\n }\n }\n\n if (typeof this.props.onScroll === 'function') {\n var _this$state2 = this.state,\n _scrollDirection = _this$state2.scrollDirection,\n _scrollOffset = _this$state2.scrollOffset,\n _scrollUpdateWasRequested = _this$state2.scrollUpdateWasRequested;\n\n this._callOnScroll(_scrollDirection, _scrollOffset, _scrollUpdateWasRequested);\n }\n } // Lazily create and cache item styles while scrolling,\n // So that pure component sCU will prevent re-renders.\n // We maintain this cache, and pass a style prop rather than index,\n // So that List can clear cached styles and force item re-render if necessary.\n ;\n\n _proto._getRangeToRender = function _getRangeToRender() {\n var _this$props6 = this.props,\n itemCount = _this$props6.itemCount,\n overscanCount = _this$props6.overscanCount;\n var _this$state3 = this.state,\n isScrolling = _this$state3.isScrolling,\n scrollDirection = _this$state3.scrollDirection,\n scrollOffset = _this$state3.scrollOffset;\n\n if (itemCount === 0) {\n return [0, 0, 0, 0];\n }\n\n var startIndex = getStartIndexForOffset(this.props, scrollOffset, this._instanceProps);\n var stopIndex = getStopIndexForStartIndex(this.props, startIndex, scrollOffset, this._instanceProps); // Overscan by one item in each direction so that tab/focus works.\n // If there isn't at least one extra item, tab loops back around.\n\n var overscanBackward = !isScrolling || scrollDirection === 'backward' ? Math.max(1, overscanCount) : 1;\n var overscanForward = !isScrolling || scrollDirection === 'forward' ? Math.max(1, overscanCount) : 1;\n return [Math.max(0, startIndex - overscanBackward), Math.max(0, Math.min(itemCount - 1, stopIndex + overscanForward)), startIndex, stopIndex];\n };\n\n return List;\n }(PureComponent), _class.defaultProps = {\n direction: 'ltr',\n itemData: undefined,\n layout: 'vertical',\n overscanCount: 2,\n useIsScrolling: false\n }, _class;\n} // NOTE: I considered further wrapping individual items with a pure ListItem component.\n// This would avoid ever calling the render function for the same index more than once,\n// But it would also add the overhead of a lot of components/fibers.\n// I assume people already do this (render function returning a class component),\n// So my doing it would just unnecessarily double the wrappers.\n\nvar validateSharedProps$1 = function validateSharedProps(_ref2, _ref3) {\n var children = _ref2.children,\n direction = _ref2.direction,\n height = _ref2.height,\n layout = _ref2.layout,\n innerTagName = _ref2.innerTagName,\n outerTagName = _ref2.outerTagName,\n width = _ref2.width;\n var instance = _ref3.instance;\n\n if (process.env.NODE_ENV !== 'production') {\n if (innerTagName != null || outerTagName != null) {\n if (devWarningsTagName$1 && !devWarningsTagName$1.has(instance)) {\n devWarningsTagName$1.add(instance);\n console.warn('The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.');\n }\n } // TODO Deprecate direction \"horizontal\"\n\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n\n switch (direction) {\n case 'horizontal':\n case 'vertical':\n if (devWarningsDirection && !devWarningsDirection.has(instance)) {\n devWarningsDirection.add(instance);\n console.warn('The direction prop should be either \"ltr\" (default) or \"rtl\". ' + 'Please use the layout prop to specify \"vertical\" (default) or \"horizontal\" orientation.');\n }\n\n break;\n\n case 'ltr':\n case 'rtl':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"direction\" prop has been specified. ' + 'Value should be either \"ltr\" or \"rtl\". ' + (\"\\\"\" + direction + \"\\\" was specified.\"));\n }\n\n switch (layout) {\n case 'horizontal':\n case 'vertical':\n // Valid values\n break;\n\n default:\n throw Error('An invalid \"layout\" prop has been specified. ' + 'Value should be either \"horizontal\" or \"vertical\". ' + (\"\\\"\" + layout + \"\\\" was specified.\"));\n }\n\n if (children == null) {\n throw Error('An invalid \"children\" prop has been specified. ' + 'Value should be a React component. ' + (\"\\\"\" + (children === null ? 'null' : typeof children) + \"\\\" was specified.\"));\n }\n\n if (isHorizontal && typeof width !== 'number') {\n throw Error('An invalid \"width\" prop has been specified. ' + 'Horizontal lists must specify a number for width. ' + (\"\\\"\" + (width === null ? 'null' : typeof width) + \"\\\" was specified.\"));\n } else if (!isHorizontal && typeof height !== 'number') {\n throw Error('An invalid \"height\" prop has been specified. ' + 'Vertical lists must specify a number for height. ' + (\"\\\"\" + (height === null ? 'null' : typeof height) + \"\\\" was specified.\"));\n }\n }\n};\n\nvar DEFAULT_ESTIMATED_ITEM_SIZE$1 = 50;\n\nvar getItemMetadata$1 = function getItemMetadata(props, index, instanceProps) {\n var _ref = props,\n itemSize = _ref.itemSize;\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n\n if (index > lastMeasuredIndex) {\n var offset = 0;\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n offset = itemMetadata.offset + itemMetadata.size;\n }\n\n for (var i = lastMeasuredIndex + 1; i <= index; i++) {\n var size = itemSize(i);\n itemMetadataMap[i] = {\n offset: offset,\n size: size\n };\n offset += size;\n }\n\n instanceProps.lastMeasuredIndex = index;\n }\n\n return itemMetadataMap[index];\n};\n\nvar findNearestItem$1 = function findNearestItem(props, instanceProps, offset) {\n var itemMetadataMap = instanceProps.itemMetadataMap,\n lastMeasuredIndex = instanceProps.lastMeasuredIndex;\n var lastMeasuredItemOffset = lastMeasuredIndex > 0 ? itemMetadataMap[lastMeasuredIndex].offset : 0;\n\n if (lastMeasuredItemOffset >= offset) {\n // If we've already measured items within this range just use a binary search as it's faster.\n return findNearestItemBinarySearch$1(props, instanceProps, lastMeasuredIndex, 0, offset);\n } else {\n // If we haven't yet measured this high, fallback to an exponential search with an inner binary search.\n // The exponential search avoids pre-computing sizes for the full set of items as a binary search would.\n // The overall complexity for this approach is O(log n).\n return findNearestItemExponentialSearch$1(props, instanceProps, Math.max(0, lastMeasuredIndex), offset);\n }\n};\n\nvar findNearestItemBinarySearch$1 = function findNearestItemBinarySearch(props, instanceProps, high, low, offset) {\n while (low <= high) {\n var middle = low + Math.floor((high - low) / 2);\n var currentOffset = getItemMetadata$1(props, middle, instanceProps).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\n\nvar findNearestItemExponentialSearch$1 = function findNearestItemExponentialSearch(props, instanceProps, index, offset) {\n var itemCount = props.itemCount;\n var interval = 1;\n\n while (index < itemCount && getItemMetadata$1(props, index, instanceProps).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return findNearestItemBinarySearch$1(props, instanceProps, Math.min(index, itemCount - 1), Math.floor(index / 2), offset);\n};\n\nvar getEstimatedTotalSize = function getEstimatedTotalSize(_ref2, _ref3) {\n var itemCount = _ref2.itemCount;\n var itemMetadataMap = _ref3.itemMetadataMap,\n estimatedItemSize = _ref3.estimatedItemSize,\n lastMeasuredIndex = _ref3.lastMeasuredIndex;\n var totalSizeOfMeasuredItems = 0; // Edge case check for when the number of items decreases while a scroll is in progress.\n // https://github.com/bvaughn/react-window/pull/138\n\n if (lastMeasuredIndex >= itemCount) {\n lastMeasuredIndex = itemCount - 1;\n }\n\n if (lastMeasuredIndex >= 0) {\n var itemMetadata = itemMetadataMap[lastMeasuredIndex];\n totalSizeOfMeasuredItems = itemMetadata.offset + itemMetadata.size;\n }\n\n var numUnmeasuredItems = itemCount - lastMeasuredIndex - 1;\n var totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize;\n return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems;\n};\n\nvar VariableSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(props, index, instanceProps) {\n return getItemMetadata$1(props, index, instanceProps).offset;\n },\n getItemSize: function getItemSize(props, index, instanceProps) {\n return instanceProps.itemMetadataMap[index].size;\n },\n getEstimatedTotalSize: getEstimatedTotalSize,\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(props, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = props.direction,\n height = props.height,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, index, instanceProps); // Get estimated total size after ItemMetadata is computed,\n // To ensure it reflects actual measurements instead of just estimates.\n\n var estimatedTotalSize = getEstimatedTotalSize(props, instanceProps);\n var maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, itemMetadata.offset));\n var minOffset = Math.max(0, itemMetadata.offset - size + itemMetadata.size + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n return Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(props, offset, instanceProps) {\n return findNearestItem$1(props, instanceProps, offset);\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(props, startIndex, scrollOffset, instanceProps) {\n var direction = props.direction,\n height = props.height,\n itemCount = props.itemCount,\n layout = props.layout,\n width = props.width; // TODO Deprecate direction \"horizontal\"\n\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var itemMetadata = getItemMetadata$1(props, startIndex, instanceProps);\n var maxOffset = scrollOffset + size;\n var offset = itemMetadata.offset + itemMetadata.size;\n var stopIndex = startIndex;\n\n while (stopIndex < itemCount - 1 && offset < maxOffset) {\n stopIndex++;\n offset += getItemMetadata$1(props, stopIndex, instanceProps).size;\n }\n\n return stopIndex;\n },\n initInstanceProps: function initInstanceProps(props, instance) {\n var _ref4 = props,\n estimatedItemSize = _ref4.estimatedItemSize;\n var instanceProps = {\n itemMetadataMap: {},\n estimatedItemSize: estimatedItemSize || DEFAULT_ESTIMATED_ITEM_SIZE$1,\n lastMeasuredIndex: -1\n };\n\n instance.resetAfterIndex = function (index, shouldForceUpdate) {\n if (shouldForceUpdate === void 0) {\n shouldForceUpdate = true;\n }\n\n instanceProps.lastMeasuredIndex = Math.min(instanceProps.lastMeasuredIndex, index - 1); // We could potentially optimize further by only evicting styles after this index,\n // But since styles are only cached while scrolling is in progress-\n // It seems an unnecessary optimization.\n // It's unlikely that resetAfterIndex() will be called while a user is scrolling.\n\n instance._getItemStyleCache(-1);\n\n if (shouldForceUpdate) {\n instance.forceUpdate();\n }\n };\n\n return instanceProps;\n },\n shouldResetStyleCacheOnItemSizeChange: false,\n validateProps: function validateProps(_ref5) {\n var itemSize = _ref5.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'function') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a function. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeGrid = /*#__PURE__*/createGridComponent({\n getColumnOffset: function getColumnOffset(_ref, index) {\n var columnWidth = _ref.columnWidth;\n return index * columnWidth;\n },\n getColumnWidth: function getColumnWidth(_ref2, index) {\n var columnWidth = _ref2.columnWidth;\n return columnWidth;\n },\n getRowOffset: function getRowOffset(_ref3, index) {\n var rowHeight = _ref3.rowHeight;\n return index * rowHeight;\n },\n getRowHeight: function getRowHeight(_ref4, index) {\n var rowHeight = _ref4.rowHeight;\n return rowHeight;\n },\n getEstimatedTotalHeight: function getEstimatedTotalHeight(_ref5) {\n var rowCount = _ref5.rowCount,\n rowHeight = _ref5.rowHeight;\n return rowHeight * rowCount;\n },\n getEstimatedTotalWidth: function getEstimatedTotalWidth(_ref6) {\n var columnCount = _ref6.columnCount,\n columnWidth = _ref6.columnWidth;\n return columnWidth * columnCount;\n },\n getOffsetForColumnAndAlignment: function getOffsetForColumnAndAlignment(_ref7, columnIndex, align, scrollLeft, instanceProps, scrollbarSize) {\n var columnCount = _ref7.columnCount,\n columnWidth = _ref7.columnWidth,\n width = _ref7.width;\n var lastColumnOffset = Math.max(0, columnCount * columnWidth - width);\n var maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth);\n var minOffset = Math.max(0, columnIndex * columnWidth - width + scrollbarSize + columnWidth);\n\n if (align === 'smart') {\n if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(width / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) {\n return lastColumnOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollLeft >= minOffset && scrollLeft <= maxOffset) {\n return scrollLeft;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollLeft < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getOffsetForRowAndAlignment: function getOffsetForRowAndAlignment(_ref8, rowIndex, align, scrollTop, instanceProps, scrollbarSize) {\n var rowHeight = _ref8.rowHeight,\n height = _ref8.height,\n rowCount = _ref8.rowCount;\n var lastRowOffset = Math.max(0, rowCount * rowHeight - height);\n var maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight);\n var minOffset = Math.max(0, rowIndex * rowHeight - height + scrollbarSize + rowHeight);\n\n if (align === 'smart') {\n if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(height / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) {\n return lastRowOffset; // near the end\n } else {\n return middleOffset;\n }\n\n case 'auto':\n default:\n if (scrollTop >= minOffset && scrollTop <= maxOffset) {\n return scrollTop;\n } else if (minOffset > maxOffset) {\n // Because we only take into account the scrollbar size when calculating minOffset\n // this value can be larger than maxOffset when at the end of the list\n return minOffset;\n } else if (scrollTop < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getColumnStartIndexForOffset: function getColumnStartIndexForOffset(_ref9, scrollLeft) {\n var columnWidth = _ref9.columnWidth,\n columnCount = _ref9.columnCount;\n return Math.max(0, Math.min(columnCount - 1, Math.floor(scrollLeft / columnWidth)));\n },\n getColumnStopIndexForStartIndex: function getColumnStopIndexForStartIndex(_ref10, startIndex, scrollLeft) {\n var columnWidth = _ref10.columnWidth,\n columnCount = _ref10.columnCount,\n width = _ref10.width;\n var left = startIndex * columnWidth;\n var numVisibleColumns = Math.ceil((width + scrollLeft - left) / columnWidth);\n return Math.max(0, Math.min(columnCount - 1, startIndex + numVisibleColumns - 1 // -1 is because stop index is inclusive\n ));\n },\n getRowStartIndexForOffset: function getRowStartIndexForOffset(_ref11, scrollTop) {\n var rowHeight = _ref11.rowHeight,\n rowCount = _ref11.rowCount;\n return Math.max(0, Math.min(rowCount - 1, Math.floor(scrollTop / rowHeight)));\n },\n getRowStopIndexForStartIndex: function getRowStopIndexForStartIndex(_ref12, startIndex, scrollTop) {\n var rowHeight = _ref12.rowHeight,\n rowCount = _ref12.rowCount,\n height = _ref12.height;\n var top = startIndex * rowHeight;\n var numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight);\n return Math.max(0, Math.min(rowCount - 1, startIndex + numVisibleRows - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref13) {\n var columnWidth = _ref13.columnWidth,\n rowHeight = _ref13.rowHeight;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof columnWidth !== 'number') {\n throw Error('An invalid \"columnWidth\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (columnWidth === null ? 'null' : typeof columnWidth) + \"\\\" was specified.\"));\n }\n\n if (typeof rowHeight !== 'number') {\n throw Error('An invalid \"rowHeight\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (rowHeight === null ? 'null' : typeof rowHeight) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\nvar FixedSizeList = /*#__PURE__*/createListComponent({\n getItemOffset: function getItemOffset(_ref, index) {\n var itemSize = _ref.itemSize;\n return index * itemSize;\n },\n getItemSize: function getItemSize(_ref2, index) {\n var itemSize = _ref2.itemSize;\n return itemSize;\n },\n getEstimatedTotalSize: function getEstimatedTotalSize(_ref3) {\n var itemCount = _ref3.itemCount,\n itemSize = _ref3.itemSize;\n return itemSize * itemCount;\n },\n getOffsetForIndexAndAlignment: function getOffsetForIndexAndAlignment(_ref4, index, align, scrollOffset, instanceProps, scrollbarSize) {\n var direction = _ref4.direction,\n height = _ref4.height,\n itemCount = _ref4.itemCount,\n itemSize = _ref4.itemSize,\n layout = _ref4.layout,\n width = _ref4.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var size = isHorizontal ? width : height;\n var lastItemOffset = Math.max(0, itemCount * itemSize - size);\n var maxOffset = Math.min(lastItemOffset, index * itemSize);\n var minOffset = Math.max(0, index * itemSize - size + itemSize + scrollbarSize);\n\n if (align === 'smart') {\n if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) {\n align = 'auto';\n } else {\n align = 'center';\n }\n }\n\n switch (align) {\n case 'start':\n return maxOffset;\n\n case 'end':\n return minOffset;\n\n case 'center':\n {\n // \"Centered\" offset is usually the average of the min and max.\n // But near the edges of the list, this doesn't hold true.\n var middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2);\n\n if (middleOffset < Math.ceil(size / 2)) {\n return 0; // near the beginning\n } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) {\n return lastItemOffset; // near the end\n } else {\n return middleOffset;\n }\n }\n\n case 'auto':\n default:\n if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {\n return scrollOffset;\n } else if (scrollOffset < minOffset) {\n return minOffset;\n } else {\n return maxOffset;\n }\n\n }\n },\n getStartIndexForOffset: function getStartIndexForOffset(_ref5, offset) {\n var itemCount = _ref5.itemCount,\n itemSize = _ref5.itemSize;\n return Math.max(0, Math.min(itemCount - 1, Math.floor(offset / itemSize)));\n },\n getStopIndexForStartIndex: function getStopIndexForStartIndex(_ref6, startIndex, scrollOffset) {\n var direction = _ref6.direction,\n height = _ref6.height,\n itemCount = _ref6.itemCount,\n itemSize = _ref6.itemSize,\n layout = _ref6.layout,\n width = _ref6.width;\n // TODO Deprecate direction \"horizontal\"\n var isHorizontal = direction === 'horizontal' || layout === 'horizontal';\n var offset = startIndex * itemSize;\n var size = isHorizontal ? width : height;\n var numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize);\n return Math.max(0, Math.min(itemCount - 1, startIndex + numVisibleItems - 1 // -1 is because stop index is inclusive\n ));\n },\n initInstanceProps: function initInstanceProps(props) {// Noop\n },\n shouldResetStyleCacheOnItemSizeChange: true,\n validateProps: function validateProps(_ref7) {\n var itemSize = _ref7.itemSize;\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof itemSize !== 'number') {\n throw Error('An invalid \"itemSize\" prop has been specified. ' + 'Value should be a number. ' + (\"\\\"\" + (itemSize === null ? 'null' : typeof itemSize) + \"\\\" was specified.\"));\n }\n }\n }\n});\n\n// Pulled from react-compat\n// https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349\nfunction shallowDiffers(prev, next) {\n for (var attribute in prev) {\n if (!(attribute in next)) {\n return true;\n }\n }\n\n for (var _attribute in next) {\n if (prev[_attribute] !== next[_attribute]) {\n return true;\n }\n }\n\n return false;\n}\n\nvar _excluded = [\"style\"],\n _excluded2 = [\"style\"];\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-api.html#reactmemo\n\nfunction areEqual(prevProps, nextProps) {\n var prevStyle = prevProps.style,\n prevRest = _objectWithoutPropertiesLoose(prevProps, _excluded);\n\n var nextStyle = nextProps.style,\n nextRest = _objectWithoutPropertiesLoose(nextProps, _excluded2);\n\n return !shallowDiffers(prevStyle, nextStyle) && !shallowDiffers(prevRest, nextRest);\n}\n\n// It knows to compare individual style props and ignore the wrapper object.\n// See https://reactjs.org/docs/react-component.html#shouldcomponentupdate\n\nfunction shouldComponentUpdate(nextProps, nextState) {\n return !areEqual(this.props, nextProps) || shallowDiffers(this.state, nextState);\n}\n\nexport { FixedSizeGrid, FixedSizeList, VariableSizeGrid, VariableSizeList, areEqual, shouldComponentUpdate };\n//# sourceMappingURL=index.esm.js.map\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };",null,null,null,null,"function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null],"names":["cleanFields","obj","Number","isNaN","Infinity","includes","Array","isArray","map","filter","t","result","key","value","Object","entries","cleaned","concat","a","b","prependEach","Error","lenA","length","lenB","i","detectCircular","Map","has","set","stringify","replacer","space","depth","undefinedBehavior","JSON","undefined","UndefinedBehavior","throw","String","stringifyInvalidValue","v","join","keys","k","parse","formatValue","pretty","getOrderByType","cmp","options","orderByMapA","keyOrdersMap","get","orderByMapB","orderByTypeA","orderByTypeB","ignoreCase","toLowerCase","localeCompare","BigInt","getType","prettyAppendLines","linesLeft","linesRight","keyLeft","keyRight","valueLeft","valueRight","level","valueCmpOptions","_resultLeft","maxDepth","split","_resultRight","showModifications","maxLines","Math","max","push","type","text","match","replace","sortKeys","arr","sort","ignoreCaseForKey","diffObject","lhs","rhs","arrayDiffFunc","addedLines","keysLeft","keysRight","preserveKeyOrder","keysCmpOptions","keyCmpResult","arrLeft","arrRight","resLeft","resRight","shift","_listCacheClear","this","__data__","size","eq_1","other","eq$1","_assocIndexOf","array","assocIndexOf$3","splice","prototype","assocIndexOf$2","assocIndexOf$1","assocIndexOf","listCacheClear","listCacheDelete","data","index","pop","call","listCacheGet","listCacheHas","listCacheSet","ListCache$4","clear","entry","_ListCache","ListCache$3","_stackClear","_stackDelete","_stackGet","_stackHas","commonjsGlobal","globalThis","window","global","self","_freeGlobal","freeGlobal","freeSelf","_root","Function","_Symbol","Symbol","Symbol$2","objectProto$b","hasOwnProperty$8","hasOwnProperty","nativeObjectToString$1","toString","symToStringTag$1","toStringTag","_getRawTag","isOwn","tag","unmasked","e","nativeObjectToString","getRawTag","objectToString","symToStringTag","_baseGetTag","isObject_1","baseGetTag$3","isObject$1","uid","isFunction_1","coreJsData","maskSrcKey","exec","IE_PROTO","_isMasked","func","funcToString$1","_toSource","isFunction$1","isMasked","isObject","toSource$1","reIsHostCtor","funcProto","objectProto$9","funcToString","hasOwnProperty$7","reIsNative","RegExp","baseIsNative","test","getValue","object","_getNative","_Map","_nativeCreate","nativeCreate$3","_hashClear","_hashDelete","nativeCreate$2","hasOwnProperty$6","_hashGet","nativeCreate$1","hasOwnProperty$5","nativeCreate","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash$1","Hash","ListCache$2","Map$3","isKeyable","_getMapData","getMapData$3","getMapData$2","getMapData$1","getMapData","_mapCacheSet","mapCacheClear","hash","string","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache$2","_MapCache","ListCache$1","Map$2","MapCache$1","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","LARGE_ARRAY_SIZE","Stack$1","_Stack","MapCache","setCacheAdd","setCacheHas","SetCache$1","values","add","SetCache","arraySome","predicate","cacheHas","cache","_equalArrays","bitmask","customizer","equalFunc","stack","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","Uint8Array","eq","equalArrays$1","mapToArray","forEach","setToArray","symbolProto","symbolValueOf","valueOf","_equalByTag","byteLength","byteOffset","buffer","name","message","convert","stacked","_arrayPush","offset","isArray_1","arrayPush","isArray$2","_baseGetAllKeys","keysFunc","symbolsFunc","arrayFilter","resIndex","stubArray","propertyIsEnumerable$1","propertyIsEnumerable","nativeGetSymbols","getOwnPropertySymbols","_getSymbols","symbol","_baseTimes","n","iteratee","isObjectLike_1","baseGetTag$2","isObjectLike$3","baseIsArguments","isObjectLike$2","objectProto$5","hasOwnProperty$4","isArguments_1","arguments","isBuffer$2","exports","stubFalse_1","module","root","stubFalse","freeExports","nodeType","freeModule","Buffer","isBuffer","reIsUint","_isIndex","isLength_1","baseGetTag$1","isLength$1","isObjectLike$1","typedArrayTags","_baseIsTypedArray","_baseUnary","_nodeUtil","freeProcess","process","nodeUtil","types","require","binding","baseIsTypedArray","baseUnary","nodeIsTypedArray","isTypedArray","isTypedArray_1","baseTimes","isArguments","isArray$1","isBuffer$1","isIndex","isTypedArray$1","hasOwnProperty$3","_arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","objectProto$3","_isPrototype","Ctor","constructor","nativeKeys$1","transform","arg","overArg","isPrototype","nativeKeys","hasOwnProperty$2","isFunction","isLength","arrayLikeKeys","baseKeys","isArrayLike","baseGetAllKeys","getSymbols","getAllKeys","hasOwnProperty$1","_equalObjects","objProps","objLength","objStacked","skipCtor","objValue","objCtor","othCtor","DataView","Map$1","Promise$1","Set$1","WeakMap","baseGetTag","toSource","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","getTag$1","ArrayBuffer","resolve","ctorString","Stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isObjectLike","_baseIsEqual","baseIsEqual$1","baseIsEqual","isEqualWith_1","isEqual","recursiveEqual","shallowSimilarity","left","right","intersection","addArrayOpeningBrackets","addArrayClosingBrackets","addMaxDepthPlaceholder","diffArrayLCS","tLeftReverse","tRightReverse","f","fill","backtrack","j","typeI","tLeft","tRight","reversedLeft","reversedRight","reverse","l","r","unshift","typeLeft","removedLines","lcs","allObjectsHaveCompareKey","compareKey","item","diffArrayCompareKey","diffArrayRecursive","diffArrayNormal","isObjectArray","every","leftProcessed","Set","rightProcessed","leftItem","leftKeyValue","matchIndex","rightItem","rightKeyValue","leftType","from","lVal","rVal","arrL","arrR","leftLines","rightLines","diffObjectWithArraySupport","leftObj","rightObj","fallbackArrayDiff","compareKeyArrayDiff","itemLeft","itemRight","rightType","objLeft","objRight","arrayDiffMethod","sortInnerArrays","source","EQUAL_EMPTY_LINE","EQUAL_LEFT_BRACKET_LINE","EQUAL_RIGHT_BRACKET_LINE","Differ","sortResultLines","changed","t1","t2","calculateLineNumbers","lineNumber","calculateCommas","nextLine","endsWith","comma","diff","sourceLeft","sourceRight","resultLeft","resultRight","line","lLength","rLength","isExpandLine","segment","getSegmentHeight","itemHeight","expandLineHeight","end","start","mergeSegments","tokens","diffs","token","min","d","bin","defineProperty","applyPatch","calcPatch","lcs_1","diff_core","DiffGen","iterator","next","state","c","done","stack_base","N","M","Z","stack_top","Z_block","W","L","parity","offsetx","offsety","hmax","z","h_loop","h","kmin","kmax","gkm","floor","gkp","u","x","y","pkm","pkp","pxe","pye","sx","pxs","oxs","oxe","oys","pys","oye","diff_internal","Uint16Array","Uint32Array","xs","ys","LCSGen","rec","ex","ey","slice","isView","subarray","patch","dels","dele","ins","getOriginalIndices","separatorLength","filterEmptyParts","syntaxHighlightLine","enabled","startsWith","pairedQuoteIndex","substring","defaultOptions","threshold","margin","getSegments","jsonsAreEqual","segments","_options","console","warn","hasLinesBefore","hasLinesAfter","DEFAULT_TEXTS","noChangeDetected","showLinesBefore","showLinesAfter","showAll","Viewer","props","React","useMemo","mergedTexts","texts","lineNumberWidth","lineNumbers","indent","indentChar","indentSize","inlineDiffOptions","mode","wordSeparator","hideUnchangedLines","scrollContainer","_scrollContainer","virtual","document","body","querySelector","linesLeftRef","useRef","linesRightRef","segmentsRef","accTopRef","totalHeightRef","tbodyRef","forceUpdate","useState","updateViewer","current","acc","reduce","useEffect","onScroll","addEventListener","removeEventListener","onExpandBefore","segmentIndex","lines","newSegments","newSegment","onExpandAfter","onExpandAll","renderInlineResult","info","syntaxHighlightEnabled","createElement","Fragment","frag","className","Boolean","renderLine","lDiff","rDiff","highlightInlineDiff","resultL","resultR","lastL","lastR","lArr","rArr","iter","indicesL","indicesR","sl","sr","getInlineDiff","lTokens","rTokens","lResult","rResult","bgLeft","bgColour","bgRight","style","backgroundColor","repeat","renderExpandLine","expandMoreLinesLimit","onClick","replaceAll","renderSegment","renderStart","renderEnd","_","colSpan","expandLineRenderer","classes","syntaxHighlight","theme","width","ref","containerHeight","clientHeight","scrollTop","scrollBottom","firstElementTop","offsetTop","offsetParent","height","viewportTop","viewportBottom","startSegment","startLine","endSegment","endLine","accTop","m","startSegmentItem","endSegmentItem","ceil","findVisibleLines","topHeight","bottomHeight","totalHeight","calculatePlaceholderHeight","visibleSegments","padding","renderTbody","_extends","assign","bind","apply","_assertThisInitialized","ReferenceError","_setPrototypeOf","setPrototypeOf","__proto__","displayName","safeIsNaN","areInputsEqual","newInputs","lastInputs","first","second","memoizeOne","resultFn","lastThis","lastResult","lastArgs","calledOnce","newArgs","_i","now","performance","Date","cancelTimeout","timeoutID","cancelAnimationFrame","id","getScrollbarSize","recalculate","div","overflow","appendChild","offsetWidth","clientWidth","removeChild","cachedRTLResult","getRTLOffsetType","outerDiv","outerStyle","direction","innerDiv","innerStyle","scrollLeft","env","NODE_ENV","defaultItemKey$1","devWarningsDirection","devWarningsTagName$1","createListComponent","_ref","_class","getItemOffset","getEstimatedTotalSize","getItemSize","getOffsetForIndexAndAlignment","getStartIndexForOffset","getStopIndexForStartIndex","initInstanceProps","shouldResetStyleCacheOnItemSizeChange","validateProps","_PureComponent","o","List","_this","_instanceProps","_outerRef","_resetIsScrollingTimeoutId","instance","isScrolling","scrollDirection","scrollOffset","initialScrollOffset","scrollUpdateWasRequested","_callOnItemsRendered","overscanStartIndex","overscanStopIndex","visibleStartIndex","visibleStopIndex","onItemsRendered","_callOnScroll","_getItemStyle","_this$props","itemSize","layout","itemStyleCache","_getItemStyleCache","_offset","isHorizontal","isRtl","offsetHorizontal","position","top","__","___","_onScrollHorizontal","event","_event$currentTarget","currentTarget","scrollWidth","setState","prevState","_resetIsScrollingDebounced","_onScrollVertical","_event$currentTarget2","scrollHeight","_outerRefSetter","outerRef","callback","delay","_resetIsScrolling","requestAnimationFrame","tick","create","getDerivedStateFromProps","nextProps","validateSharedProps$1","_proto","scrollTo","scrollToItem","align","_this$props2","itemCount","scrollbarSize","componentDidMount","_this$props3","_callPropsCallbacks","componentDidUpdate","_this$props4","_this$state","componentWillUnmount","render","_this$props5","children","innerRef","innerElementType","innerTagName","itemData","_this$props5$itemKey","itemKey","outerElementType","outerTagName","useIsScrolling","_this$_getRangeToRend","_getRangeToRender","startIndex","stopIndex","items","_index","estimatedTotalSize","WebkitOverflowScrolling","willChange","pointerEvents","_this$_getRangeToRend2","_overscanStartIndex","_overscanStopIndex","_visibleStartIndex","_visibleStopIndex","_this$state2","_scrollDirection","_scrollOffset","_scrollUpdateWasRequested","_this$props6","overscanCount","_this$state3","overscanBackward","overscanForward","PureComponent","defaultProps","WeakSet","_ref2","_ref3","getItemMetadata$1","instanceProps","itemMetadataMap","lastMeasuredIndex","itemMetadata","findNearestItemBinarySearch$1","high","low","middle","currentOffset","findNearestItemExponentialSearch$1","interval","estimatedItemSize","totalSizeOfMeasuredItems","VariableSizeList","maxOffset","minOffset","round","findNearestItem$1","resetAfterIndex","shouldForceUpdate","_ref5","SearchIcon","_jsx","viewBox","xmlns","stroke","strokeWidth","strokeLinecap","strokeLinejoin","highlightMatches","term","querySelectorAll","element","classList","remove","termToUse","regex","textContent","isNonEmptyEqualLine","buildViewFromSegments","contextSize","TypeError","isExpanded","originalIndex","currentSegment","shouldAddTopContext","ROW_HEIGHT","EQUAL_LINE_COLOR","MINIMAP_HOVER_SCROLL_COLOR","DiffMinimap","leftDiff","rightDiff","miniMapWidth","currentScrollTop","searchResults","currentMatchIndex","canvasRef","containerRef","isDragging","totalLines","viewportHeight","totalShownLines","drawLine","useCallback","ctx","fillStyle","fillRect","drawScrollBox","color","scale","lineHeight","drawDifferencesInMinimap","drawMinimap","canvas","getContext","clearRect","handleMouseDown","rect","getBoundingClientRect","relativeY","clientY","isFinite","handleMouseMove","scrollSquareTop","isHovering","bottom","forcedScrollTop","handleMouseUp","cursor","onMouseDown","onMouseMove","onMouseLeave","css","insertAt","head","getElementsByTagName","firstChild","insertBefore","styleSheet","cssText","createTextNode","DIFF_VIEWER_CLASS","isCollapsed","ViewerRow","onExpand","searchTerm","originalLeftLine","originalRightLine","leftLine","rightLine","VirtualizedDiffViewer","oldValue","newValue","leftTitle","rightTitle","hideSearch","onSearchMatch","differOptions","listRef","searchTimeoutRef","setScrollTop","setSegments","searchState","setSearchState","results","currentIndex","differ","diffData","rawLeftDiff","rawRightDiff","leftView","setLeftView","rightView","setRightView","generatedSegments","firstContextEnd","generateSegments","leftBuilt","rightBuilt","handleSearch","prev","clearTimeout","setTimeout","searchRegex","performSearch","navigateToMatch","newIndex","observer","MutationObserver","config","childList","subtree","viewer","observe","listContainer","handleScroll","disconnect","handleExpand","updated","seg","expandedSegment","originalStart","originalEnd","handleHideAll","hasExpandedSegments","some","listData","_jsxs","role","placeholder","onChange","target","display","gap"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,12]}