{"version":3,"file":"3249bb2ba43e715361bd11fb.js?3.8.2.d0a3b62f4.1729269695286","mappings":"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","sources":["webpack://mono-repo/./src/js/lib/nx-lazyloader.js"],"sourcesContent":["/**\n * @class\n */\n\n// Track when we are the focus and trigger an event on the el\n// Track when we are not the focus and trigger an event on the el\n// Content\n\nimport 'javascript-detect-element-resize';\nconst Model = Backbone.Model;\nconst Collection = Backbone.Collection;\n\nconst BOUND_TRIGGERS = ['x1','x2','y1','y2','width','height'];\n\nclass LazyLoader {\n\t/**\n\t * Can (should) we render\n\t * @type {boolean}\n\t */\n\tget canRender() {\n\t\tconst state = this.state;\n\t\treturn !(\n\t\t\tthis.destroyed ||\n\t\t\t!state.get('ready') ||\n\t\t\t!state.get('active') ||\n\t\t\t!state.get('enabled') ||\n\t\t\t!this.validBounds\n\t\t);\n\t}\n\t/**\n\t * Can (should) we check scroll\n\t * @type {boolean}\n\t */\n\tget canScroll() {\n\t\treturn !(\n\t\t\t!this.state.get('ready') ||\n\t\t\t!this.contentBounds.get('overflow') ||\n\t\t\t!this.validBounds\n\t\t);\n\t}\n\t/**\n\t * Horizontal\n\t * @type {boolean}\n\t */\n\tget horizontal() {\n\t\treturn this.direction === 'horizontal';\n\t}\n\t/**\n\t * Vertical\n\t * @type {boolean}\n\t */\n\tget vertical() {\n\t\treturn !this.horizontal;\n\t}\n\t/**\n\t * Valid bounds\n\t * @type {boolean}\n\t */\n\tget validBounds() {\n\t\treturn this.state.get('validDimensions');\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {HTMLElement} el Element\n\t * @param {object} opts Options\n\t */\n\tconstructor( el, opts ) {\n\t\tthis.uuid = _.uniqueId( 'lazy-' + _.now() );\n\t\t\n\t\t// Throttled/debounced methods\n\t\tthis.scroll = _.throttle( this.scroll, 8.333, true );\n\t\tthis.checkItems = _.throttle( this.checkItems, 16.666, true );\n\t\tthis.loadItems = _.throttle( this.loadItems, 16.666, true );\n\t\tthis.debouncedCheckItems = _.debounce( this.checkItems, 8.333 );\n\t\t// Just the way its gotsta be\n\t\tthis.throttledResize = _.throttle( this.resize, 16.666 );\n\t\tthis.throttledResizeContent = _.throttle( this.resizeContent, 16.666 );\n\t\tthis.padsChanged = _.debounce( this.padsChanged, 16.666 );\n\t\t\n\t\tthis.direction = opts.direction === 'vertical' && 'vertical' || 'horizontal';\n\t\tthis.forwardOnly = opts.forwardOnly === true;\n\t\t\n\t\tthis.el = el;\n\t\tconst childrenEl = this.childrenEl = opts.childrenEl || this.el;\n\t\tchildrenEl.classList.add('nx-lazyloader', 'lazyloader-' + ( this.horizontal ? 'horizontal' : 'vertical') );\n\t\tif ( this.forwardOnly ) {\n\t\t\tchildrenEl.classList.add('lazyloader-forward-only');\n\t\t}\n\t\tconst scrollContainer = this.sizingEl = this.scrollContainer = opts.scrollContainer || this.el;\n\t\t\n\t\tthis.target = opts.target;\n\t\t\n\t\tif ( opts.padItemTemplate ) {\n\t\t\tthis.padItemTemplate = opts.padItemTemplate;\n\t\t}\n\t\t\n\t\tthis.oldScrollSize = null;\n\t\tthis.hasActiveItem = true;\n\t\tthis.lastScroll = this.scrollCorrection = 0;\n\t\t\n\t\tconst beginningPads = this.beginningPads = new Collection([]);\n\t\tconst endPads = this.endPads = new Collection([]);\n\t\t\n\t\tthis.contentBounds = new Model( {\n\t\t\tx1: 0,\n\t\t\tx2: 0,\n\t\t\ty1: 0,\n\t\t\ty2: 0,\n\t\t\theight: 0,\n\t\t\twidth: 0,\n\t\t\toverflow: false,\n\t\t\tvalid: false\n\t\t} );\n\t\t\n\t\tthis.stageBounds = new Model( {\n\t\t\tx1: 0,\n\t\t\tx2: 0,\n\t\t\ty1: 0,\n\t\t\ty2: 0,\n\t\t\theight: 0,\n\t\t\twidth: 0,\n\t\t\tvalid: false\n\t\t} );\n\t\t\n\t\tconst state = this.state = new Model( {\n\t\t\tenabled: false, // Rename itemsLeftToLoad\n\t\t\tactive: false,\n\t\t\tready: false,\n\t\t\tchanges: false,\n\t\t\tuserScrolled: false,\n\t\t\tvalidDimensions: false\n\t\t} );\n\t\t\n\t\t// Wait for a legit size\n\t\tconst checkSize = () => {\n\t\t\tif ( this.destroyed ) return;\n\t\t\t\n\t\t\tif (\n\t\t\t\t!scrollContainer.scrollWidth ||\n\t\t\t\t!scrollContainer.scrollHeight\n\t\t\t) return _.delay( checkSize, 16.666 );\n\t\t\t\n\t\t\tstate.set('ready', true);\n\t\t\t\n\t\t\t// Bind\n\t\t\tthis.bindEvents();\n\t\t\t\n\t\t\tstate.set('active', true );\n\t\t\t\n\t\t\tthis\n\t\t\t\t.resize( true )\n\t\t\t\t.resizeContent( true )\n\t\t\t\t.checkItems();\n\t\t\t\n\t\t\tstate.set('changes', true);\n\t\t};\n\t\t_.delay( checkSize, 16.666 );\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\trender() {\n\t\tif ( this.rendering ) return this;\n\t\t\n\t\tthis.rendering = true;\n\t\t\n\t\tconst\n\t\t\tchildrenEl = this.childrenEl,\n\t\t\tcontentBounds = this.contentBounds,\n\t\t\tscrollContainer = this.scrollContainer,\n\t\t\tstate = this.state,\n\t\t\ttarget = this.target;\n\t\t\n\t\tconst draw = () => {\n\t\t\tif ( !state.get('changes') || !this.canRender ) {\n\t\t\t\tstate.set('changes', this.rendering = false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tconst scrollCorrection = this.scrollCorrection;\n\t\t\tif ( !state.get('userScrolled') ) {\n\t\t\t\tif ( target.reachedEnd ) {\n\t\t\t\t\tthis.scrollTo( this.horizontal ?\n\t\t\t\t\t\tscrollContainer.scrollWidth :\n\t\t\t\t\t\tscrollContainer.scrollHeight\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if ( target.reachedBeginning ) {\n\t\t\t\t\t// this.scrollTo( 0 );\n\t\t\t\t}\n\t\t\t\t// Keep active item in view until user interacts\n\t\t\t\tif ( this.hasActiveItem && contentBounds.get('overflow') ) {\n\t\t\t\t\tconst activeItem = childrenEl.getElementsByClassName('active');\n\t\t\t\t\tif ( activeItem[0] ) {\n\t\t\t\t\t\tthis.bringItemToView( activeItem[0] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif ( scrollCorrection ) {\n\t\t\t\t\tconst scrollContainer = this.scrollContainer;\n\t\t\t\t\tthis.horizontal ?\n\t\t\t\t\t\tthis.scrollTo( scrollContainer.scrollLeft + scrollCorrection ) :\n\t\t\t\t\t\tthis.scrollTo( scrollContainer.scrollTop + scrollCorrection );\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tstate.set('changes', false);\n\t\t\tthis.scrollCorrection = 0;\n\t\t\tthis.rendering = false;\n\t\t};\n\t\t\n\t\twindow.requestAnimationFrame( draw );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tbindEvents() {\n\t\tconst\n\t\t\tel = this.el,\n\t\t\tbeginningPads = this.beginningPads,\n\t\t\tendPads = this.endPads,\n\t\t\tcontentBounds = this.contentBounds,\n\t\t\tstageBounds = this.stageBounds,\n\t\t\tstate = this.state;\n\t\t\n\t\t// In the case where we have nested lazyloaders within the same element\n\t\t// we can catch the bubbled events and set our state to active/inactive\n\t\t// If another lazyloader within is active, we are not\n\t\tel.addEventListener('nx-lazyload-active', this.onlazyloadactive = ( e ) => {\n\t\t\tif ( el !== e.target ) {\n\t\t\t\tthis.state.set('active', false, { fromCustomEvent: true } );\n\t\t\t}\n\t\t}, true );\n\t\t// If another lazyloader within is inactive, check to see if we should be the next active instance.\n\t\t// If so, prevent further bubbling of the event\n\t\tel.addEventListener('nx-lazyload-inactive', this.onlazyloadinactive = ( e ) => {\n\t\t\tif ( el !== e.target ) {\n\t\t\t\tif ( state.get('enabled') ) {\n\t\t\t\t\tstate.set('active', true, { fromCustomEvent: true } );\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\t\n\t\treturn this\n\t\t\t// Beginning pads\n\t\t\t.listenTo( beginningPads, 'add', this.padsChanged )\n\t\t\t.listenTo( beginningPads, 'change:el', ( pad, el ) => {\n\t\t\t\tthis.padsChanged( pad, beginningPads );\n\t\t\t} )\n\t\t\t.listenTo( beginningPads, 'remove', this.padRemoved )\n\t\t\t// End pads\n\t\t\t.listenTo( endPads, 'add', this.padsChanged )\n\t\t\t.listenTo( endPads, 'change:el', ( pad, el ) => {\n\t\t\t\tthis.padsChanged( pad, endPads );\n\t\t\t} )\n\t\t\t.listenTo( endPads, 'remove', this.padRemoved )\n\t\t\t// Content\n\t\t\t.listenTo( contentBounds, 'change', ( bounds ) => {\n\t\t\t\tif (\n\t\t\t\t\t!_.intersection(\n\t\t\t\t\t\t_.keys( bounds.changed ),\n\t\t\t\t\t\tBOUND_TRIGGERS\n\t\t\t\t\t).length\n\t\t\t\t) return;\n\t\t\t\t\n\t\t\t\tconst\n\t\t\t\t\twidth = bounds.get('width'),\n\t\t\t\t\theight = bounds.get('height'),\n\t\t\t\t\tvalid = width != 0 && height != 0;\n\t\t\t\t\n\t\t\t\tbounds.set('valid', valid );\n\t\t\t\tstate.set('validDimensions', valid && stageBounds.get('valid') );\n\t\t\t\tif ( !valid ) return;\n\t\t\t\t\n\t\t\t\tconst horizontal = this.horizontal;\n\t\t\t\t\n\t\t\t\tbounds.set('overflow', horizontal ?\n\t\t\t\t\tbounds.get('x2') > stageBounds.get('x2') || bounds.get('width') > stageBounds.get('width') :\n\t\t\t\t\tbounds.get('y2') > stageBounds.get('y2') || bounds.get('height') > stageBounds.get('height')\n\t\t\t\t);\n\t\t\t\t\n\t\t\t\tthis.checkScrollArea();\n\t\t\t\t\n\t\t\t\t// Set correct scroll position\n\t\t\t\tconst scrollContainer = this.scrollContainer;\n\t\t\t\tif ( this.oldScrollSize != null ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!this.forwardOnly &&\n\t\t\t\t\t\t!this.target.lazyLoadedForward\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.scrollCorrection = horizontal ?\n\t\t\t\t\t\t\tscrollContainer.scrollWidth - this.oldScrollSize :\n\t\t\t\t\t\t\tscrollContainer.scrollHeight - this.oldScrollSize;\n\t\t\t\t\t}\n\t\t\t\t\telse if (\n\t\t\t\t\t\tthis.target.lazyLoadedForward &&\n\t\t\t\t\t\tbounds.get('y2') + 10 < stageBounds.get('y1')\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.scrollCorrection = horizontal ?\n\t\t\t\t\t\t\tthis.oldScrollSize - scrollContainer.scrollWidth :\n\t\t\t\t\t\t\tthis.oldScrollSize - scrollContainer.scrollHeight;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\n\t\t\t\tthis.oldScrollSize = horizontal ?\n\t\t\t\t\tscrollContainer.scrollWidth :\n\t\t\t\t\tscrollContainer.scrollHeight;\n\t\t\t\t\n\t\t\t\tstate.set('changes', true);\n\t\t\t} )\n\t\t\t.listenTo( contentBounds, 'change:valid', ( bounds, valid, opts ) => {\n\t\t\t\tif (\n\t\t\t\t\t!state.get('enabled') ||\n\t\t\t\t\t!state.get('active') ||\n\t\t\t\t\t!this.validBounds\n\t\t\t\t) {\n\t\t\t\t\tthis.disconnectObserver();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.connectObserver();\n\t\t\t\tstate.set('changes', true);\n\t\t\t} )\n\t\t\t// Stage\n\t\t\t.listenTo( stageBounds, 'change', ( bounds ) => {\n\t\t\t\tif (\n\t\t\t\t\t!_.intersection(\n\t\t\t\t\t\t_.keys( bounds.changed ),\n\t\t\t\t\t\tBOUND_TRIGGERS\n\t\t\t\t\t).length\n\t\t\t\t) return;\n\t\t\t\t\n\t\t\t\tconst\n\t\t\t\t\twidth = bounds.get('width'),\n\t\t\t\t\theight = bounds.get('height'),\n\t\t\t\t\tvalid = width != 0 && height != 0;\n\t\t\t\t\n\t\t\t\tbounds.set('valid', valid );\n\t\t\t\tstate.set('validDimensions', valid && contentBounds.get('valid') );\n\t\t\t\tif ( !valid ) return;\n\t\t\t\t\n\t\t\t\tthis.debouncedCheckItems();\n\t\t\t\t\n\t\t\t\tconst horizontal = this.horizontal;\n\t\t\t\t\n\t\t\t\tthis.checkScrollArea();\n\t\t\t\t\n\t\t\t\tthis.oldScrollSize = horizontal ?\n\t\t\t\t\tthis.scrollContainer.scrollWidth :\n\t\t\t\t\tthis.scrollContainer.scrollHeight;\n\t\t\t\t\n\t\t\t\tstate.set('changes', true);\n\t\t\t} )\n\t\t\t.listenTo( stageBounds, 'change:valid', ( bounds, valid, opts ) => {\n\t\t\t\tif (\n\t\t\t\t\t!state.get('enabled') ||\n\t\t\t\t\t!state.get('active') ||\n\t\t\t\t\t!this.validBounds\n\t\t\t\t) {\n\t\t\t\t\tthis.disconnectObserver();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis.connectObserver();\n\t\t\t\tthis.state.set('changes', true);\n\t\t\t} )\n\t\t\t// State\n\t\t\t.listenTo( state, 'change:validDimensions', ( state, valid, opts ) => {\n\t\t\t\tvalid && state.set('changes', true);\n\t\t\t} )\n\t\t\t.listenTo( state, 'change:changes', _.debounce( ( state, changes, opts ) => {\n\t\t\t\tchanges && this.render();\n\t\t\t}, 16 ) )\n\t\t\t.listenTo( state, 'change:active', ( state, active, opts ) => {\n\t\t\t\tif ( active ) {\n\t\t\t\t\t// console.log( this.uuid, \"activated\", this.el );\n\t\t\t\t\tthis.oldScrollSize = null;\n\t\t\t\t\tthis.scrollCorrection = 0;\n\t\t\t\t\t\n\t\t\t\t\tthis\n\t\t\t\t\t\t.bindScrollEvents()\n\t\t\t\t\t\t.resizeContent()\n\t\t\t\t\t\t.bindResizeEvents();\n\t\t\t\t\t\n\t\t\t\t\tif ( state.get('enabled') && this.validBounds ) {\n\t\t\t\t\t\tthis.connectObserver();\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tstate.set('changes', true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// console.log( this.uuid, \"deactivated\", this.el );\n\t\t\t\t\tthis\n\t\t\t\t\t\t.disconnectObserver()\n\t\t\t\t\t\t.unbindScrollEvents();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( opts.fromCustomEvent ) return;\n\t\t\t\t\n\t\t\t\tconst eventStr = active ? 'nx-lazyload-active' : 'nx-lazyload-inactive';\n\t\t\t\tconst cevent = new CustomEvent( eventStr, {\n\t\t\t\t\tbubbles : true,\n\t\t\t\t\tdetail : { instance: () => this }\n\t\t\t\t} );\n\t\t\t\tthis.el.dispatchEvent( cevent );\n\t\t\t} )\n\t\t\t.listenTo( state, 'change:enabled', ( state, enabled, opts ) => {\n\t\t\t\tif (\n\t\t\t\t\t!enabled ||\n\t\t\t\t\t!state.get('active') ||\n\t\t\t\t\t!this.validBounds\n\t\t\t\t) {\n\t\t\t\t\tstate.set('active', false );\n\t\t\t\t\tthis\n\t\t\t\t\t\t.disconnectObserver()\n\t\t\t\t\t\t.unbindScrollEvents();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis\n\t\t\t\t\t.bindScrollEvents()\n\t\t\t\t\t.bindResizeEvents()\n\t\t\t\t\t.connectObserver()\n\t\t\t\t\t.checkItems();\n\t\t\t\t\n\t\t\t\tstate.set('changes', true);\n\t\t\t} );\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tbindResizeEvents() {\n\t\tif ( this.boundResizeEvents ) return this;\n\t\tthis.boundResizeEvents = true;\n\t\t\n\t\twindow.addResizeListener(\n\t\t\tthis.scrollContainer,\n\t\t\tthis.onresize = () => {\n\t\t\t\tthis.resize();\n\t\t\t}\n\t\t);\n\t\twindow.addResizeListener(\n\t\t\tthis.childrenEl,\n\t\t\tthis.onccontentresize = () => {\n\t\t\t\tthis.resizeContent();\n\t\t\t}\n\t\t);\n\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tbindScrollEvents() {\n\t\tif ( this.boundScrollEvents ) return this;\n\t\tthis.boundScrollEvents = true;\n\t\t\n\t\t// console.log( this.uuid, \"bound scroll and sizing events to\", this.el );\n\t\t\n\t\tthis.scrollContainer.addEventListener('scroll', this.onscroll = this.scroll.bind( this ), {\n\t\t\tpassive: true\n\t\t} );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {HTMLElement} item Item\n\t */\n\tbringItemToView( item ) {\n\t\tconst scrollContainer = this.scrollContainer;\n\t\tlet itemPosition = 0, scrollPos = 0;\n\n\t\tif ( this.horizontal ) {\n\t\t\tscrollPos = scrollContainer.scrollLeft;\n\t\t\titemPosition = item.getBoundingClientRect().left - scrollContainer.getBoundingClientRect().left;\n\t\t}\n\t\telse {\n\t\t\tscrollPos = scrollContainer.scrollTop;\n\t\t\titemPosition = item.getBoundingClientRect().top - scrollContainer.getBoundingClientRect().top;\n\t\t}\n\t\t\n\t\tthis.scrollTo(\n\t\t\tscrollPos + itemPosition\n\t\t);\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tconnectObserver() {\n\t\t// Already connected\n\t\tif ( this.observer ) return this;\n\t\t\n\t\t// console.log( this.uuid, \"connected observer\", this.childrenEl );\n\t\t\n\t\tthis.observer = new MutationObserver( ( mutationRecords ) => {\n\t\t\tfor( let i = 0, c = mutationRecords.length, mutationRecord, addedNodes, addCount; i < c; i++ ) {\n\t\t\t\tmutationRecord = mutationRecords[ i ];\n\t\t\t\taddedNodes = mutationRecord.addedNodes;\n\t\t\t\taddCount = addedNodes.length;\n\t\t\t\tif ( addCount ) {\n\t\t\t\t\tfor ( let n = 0, el; n < addCount; n++ ) {\n\t\t\t\t\t\tel = addedNodes[ n ];\n\t\t\t\t\t\t// Do not count pad items or resize triggers\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!el.classList.contains('resize-trigger') &&\n\t\t\t\t\t\t\t!el.classList.contains('lazyloader-pad-item')\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthis.itemAdded( el );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t\tthis.observer.observe( this.childrenEl, { childList: true } );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @return {boolean} Enabled\n\t */\n\tcheckEnabled() {\n\t\tconst\n\t\t\tstate = this.state,\n\t\t\ttarget = this.target,\n\t\t\tenabled = !target.reachedEnd || !target.reachedBeginning,\n\t\t\ttoSet = {\n\t\t\t\tenabled: enabled\n\t\t\t};\n\t\t\n\t\tif ( state.get('active') && !enabled ) {\n\t\t\ttoSet.active = false\n\t\t}\n\t\tstate.set( toSet );\n\t\treturn enabled;\n\t}\n\t\n\t/**\n\t * @method\n\t * @return {boolean} Loaded items\n\t */\n\tcheckItems() {\n\t\tconst state = this.state;\n\t\t\n\t\t// console.log(this.uuid, \"check items\");\n\t\t\n\t\t// Plugin is not ready OR\n\t\t// we do not have any valid bounds to test\n\t\tif (\n\t\t\t!state.get('ready') ||\n\t\t\t!this.validBounds\n\t\t) return true;\n\t\t\n\t\tthis.checkEnabled();\n\t\t\n\t\t// Target is syncing OR\n\t\t// we are disabled\n\t\tif (\n\t\t\tthis.target.syncing ||\n\t\t\t!state.get('enabled')\n\t\t) return this;\n\t\t\n\t\treturn this.horizontal ?\n\t\t\tthis._checkItems_horizontal() :\n\t\t\tthis._checkItems_vertical();\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @return {boolean} Loaded items\n\t */\n\t_checkItems_horizontal() {\n\t\tconst lastItem = this.getLastChild();\n\t\tif ( !lastItem ) return;\n\t\t\n\t\tconst target = this.target;\n\t\tconst lastRect = this.getRelativeRect( lastItem );\n\t\t// Last item is showing from right and we have not reached the end\n\t\tif (\n\t\t\tlastRect.x1 < this.stageBounds.get('x2') &&\n\t\t\t!target.reachedEnd\n\t\t) {\n\t\t\tthis.loadItems( true );\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif ( this.forwardOnly ) return;\n\t\t\n\t\t// First item is showing from left and we have not reached the beginning yet\n\t\tconst firstItem = this.getFirstChild();\n\t\tif ( !firstItem ) return;\n\t\t\n\t\tconst firstRect = this.getRelativeRect( firstItem );\n\t\tif (\n\t\t\tfirstRect.x1 > this.stageBounds.get('x1') &&\n\t\t\t!target.reachedBeginning\n\t\t) {\n\t\t\tthis.loadItems( false );\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @return {boolean} Loaded items\n\t */\n\t_checkItems_vertical() {\n\t\tconst lastItem = this.getLastChild();\n\t\tif ( !lastItem ) return;\n\t\t\n\t\tconst target = this.target;\n\t\tconst lastRect = this.getRelativeRect( lastItem );\n\t\t// Last item is showing from bottom and we have not reached the end\n\t\tif (\n\t\t\tlastRect.y1 < this.stageBounds.get('y2') &&\n\t\t\t!target.reachedEnd\n\t\t) {\n\t\t\tthis.loadItems( true );\n\t\t\treturn true;\n\t\t}\n\t\t\n\t\tif ( this.forwardOnly ) return;\n\t\t\n\t\t// First item is showing from top and we have not reached the beginning yet\n\t\tconst firstItem = this.getFirstChild();\n\t\tif ( !firstItem ) return;\n\t\t\n\t\tconst firstRect = this.getRelativeRect( firstItem );\n\t\tif (\n\t\t\tfirstRect.y2 > this.stageBounds.get('y1') &&\n\t\t\t!target.reachedBeginning\n\t\t) {\n\t\t\tthis.loadItems( false );\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tcheckPadding() {\n\t\tconst target = this.target;\n\t\t\n\t\t// Check beginning pads\n\t\tif ( target.reachedBeginning ) {\n\t\t\tthis.unpadBeginning();\n\t\t}\n\t\telse if ( !this.beginningPads.length ) {\n\t\t\tif ( this.forwardOnly || !this.contentBounds.get('overflow') ) {\n\t\t\t\tthis.padBeginning( 1 );\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Check end pads\n\t\tif ( target.reachedEnd ) {\n\t\t\tthis.unpadEnd();\n\t\t}\n\t\telse if ( !this.endPads.length ) {\n\t\t\tif ( this.forwardOnly || !this.contentBounds.get('overflow') ) {\n\t\t\t\tthis.padEnd( 1 );\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tcheckScrollArea() {\n\t\tconst scrollContainer = this.scrollContainer;\n\t\t\n\t\tconst sw = this.scrollWidth = scrollContainer.scrollWidth;\n\t\tconst sh = this.scrollHeight = scrollContainer.scrollHeight;\n\t\tthis.scrollAreaX = sw - scrollContainer.clientWidth;\n\t\tthis.scrollAreaY = sh - scrollContainer.clientHeight;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tdestroy() {\n\t\tthis.destroyed = true;\n\t\tthis.state.set( {\n\t\t\tactive: false,\n\t\t\tenabled: false\n\t\t} );\n\t\tthis.childrenEl.classList.remove(\n\t\t\t'nx-lazyloader',\n\t\t\t'lazyloader-horizontal',\n\t\t\t'lazyloader-vertical',\n\t\t\t'lazyloader-forward-only'\n\t\t);\n\t\t\n\t\treturn this\n\t\t\t.unpadBeginning()\n\t\t\t.unpadEnd()\n\t\t\t.unbindEvents();\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tdisconnectObserver() {\n\t\t// Already disconnected\n\t\tif ( !this.observer ) return this;\n\t\t\n\t\t// console.log( this.uuid, \"disconnected observer\", this.childrenEl );\n\t\t\n\t\tthis.observer.disconnect();\n\t\tthis.observer = null;\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @return {HTMLElement} Last child\n\t */\n\tgetFirstChild() {\n\t\t// Look in pads first\n\t\tconst firstPad = this.beginningPads.findWhere( { index: 0 } );\n\t\tif ( firstPad ) {\n\t\t\treturn firstPad.get('el');\n\t\t}\n\t\t\n\t\tconst children = this.childrenEl.children;\n\t\tfor ( let i = 0, c = children.length, node; i < c; i++ ) {\n\t\t\tif ( !( node = children[ i ] ).classList.contains('resize-triggers') ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * @method\n\t * @return {HTMLElement} Last child\n\t */\n\tgetLastChild() {\n\t\t// Look in pads first\n\t\tconst lastPad = this.endPads.findWhere( { index: 0 } );\n\t\tif ( lastPad ) {\n\t\t\treturn lastPad.get('el');\n\t\t}\n\t\t\n\t\tconst children = this.childrenEl.children;\n\t\tlet i = children.length,\n\t\t\tnode;\n\t\t\n\t\twhile( i-- ) {\n\t\t\tif ( !( node = children[ i ] ).classList.contains('resize-triggers') ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {HTMLElement} item Item\n\t * @param {boolean} accountForMargins Account for margins\n\t * @return {object} Relative rect\n\t */\n\tgetRelativeRect( item, accountForMargins ) {\n\t\tconst itemRect = item.getBoundingClientRect();\n\t\t\n\t\tlet marginBottom = 0,\n\t\t\tmarginLeft = 0,\n\t\t\tmarginRight = 0,\n\t\t\tmarginTop = 0,\n\t\t\tcomputedStyles;\n\t\t\n\t\tif ( accountForMargins ) {\n\t\t\tcomputedStyles = window.getComputedStyle( item );\n\t\t\tmarginBottom = parseInt( computedStyles.marginBottom, 10 );\n\t\t\tmarginLeft = parseInt( computedStyles.marginLeft, 10 );\n\t\t\tmarginRight = parseInt( computedStyles.marginRight, 10 );\n\t\t\tmarginTop = parseInt( computedStyles.marginTop, 10 );\n\t\t}\n\t\t\n\t\tconst\n\t\t\tleft = itemRect.left - marginLeft,\n\t\t\ttop = itemRect.top - marginTop,\n\t\t\twidth = itemRect.width + marginLeft + marginRight,\n\t\t\theight = itemRect.height + marginBottom + marginTop;\n\t\t\n\t\treturn {\n\t\t\tleft : left,\n\t\t\ttop : top,\n\t\t\twidth : width,\n\t\t\theight : height,\n\t\t\tx1 : left,\n\t\t\tx2 : left + width,\n\t\t\ty1 : top,\n\t\t\ty2 : top + height\n\t\t};\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {HTMLElement} itemEl Item element\n\t */\n\titemAdded( itemEl ) {\n\t\tconst target = this.target;\n\t\t\n\t\tif ( this.forwardOnly || target.lazyLoadedForward ) {\n\t\t\ttarget.reachedEnd ?\n\t\t\t\tthis.unpadEnd() :\n\t\t\t\tthis.endPads.length > 1 && this.unpadEnd( 1 );\n\t\t}\n\t\telse {\n\t\t\ttarget.reachedBeginning ?\n\t\t\t\tthis.unpadBeginning() :\n\t\t\t\tthis.beginningPads.length > 1 && this.unpadBeginning( 1 );\n\t\t}\n\t\tthis.state.set('changes', true);\n\t\t\n\t\tthis.throttledResize();\n\t\tthis.checkPadding();\n\t\tthis.debouncedCheckItems();\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} count Item count\n\t * @param {boolean} forward Forward\n\t */\n\tloadItems( forward ) {\n\t\t// console.log( this.uuid, \"loadItems\" );\n\t\t\n\t\tconst\n\t\t\tstate = this.state,\n\t\t\ttarget = this.target;\n\t\t\n\t\tif (\n\t\t\t!state.get('ready') ||\n\t\t\ttarget.syncing\n\t\t) return this;\n\t\t\n\t\tconst items = target.lazyLoadItems( forward );\n\t\tif ( items === false || items === 0 ) {\n\t\t\tthis.checkPadding();\n\t\t}\n\t\telse {\n\t\t\tif ( forward ) {\n\t\t\t\tconst padItems = items - this.endPads.length;\n\t\t\t\tif ( padItems && !this.target.reachedEnd ) {\n\t\t\t\t\tstate.set('active', true);\n\t\t\t\t\tif ( padItems < 0 ) {\n\t\t\t\t\t\tthis.unpadEnd( Math.min(\n\t\t\t\t\t\t\tMath.abs( padItems ),\n\t\t\t\t\t\t\tthis.endPads.length - 1\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.padEnd( padItems );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( target.reachedEnd ) {\n\t\t\t\t\tthis.checkPadding();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconst padItems = items - this.beginningPads.length;\n\t\t\t\tif ( padItems && !this.target.reachedBeginning ) {\n\t\t\t\t\tstate.set('active', true);\n\t\t\t\t\tif ( padItems < 0 ) {\n\t\t\t\t\t\tthis.unpadBeginning( Math.min(\n\t\t\t\t\t\t\tMath.abs( padItems ),\n\t\t\t\t\t\t\tthis.beginningPads.length - 1\n\t\t\t\t\t\t) );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.padBeginning( padItems );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( target.reachedBeginning ) {\n\t\t\t\t\tthis.checkPadding();\n\t\t\t\t\tstate.set('active', false);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.checkEnabled();\n\t\t\n\t\tstate.set( {\n\t\t\tchanges: true\n\t\t} );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} count Count\n\t */\n\tpadBeginning( count ) {\n\t\tif ( this.forwardOnly ) return this;\n\t\t\n\t\tcount = count || 1;\n\t\t\n\t\tif ( count < 0 ) return;\n\t\t\n\t\tthis.beginningPads.add( _.times( count, () => {\n\t\t\treturn {\n\t\t\t\tid : _.uniqueId('pad-item-'),\n\t\t\t\tside : 'beginning'\n\t\t\t};\n\t\t} ) );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @param {number} count Count\n\t */\n\t_padBeginning() {\n\t\tconst firstChild = this.getFirstChild();\n\t\tif ( !firstChild ) return this;\n\t\t\n\t\tconst\n\t\t\tpads = this.beginningPads,\n\t\t\tchildrenEl = this.childrenEl,\n\t\t\tnode = this.padItemTemplate.call( this, firstChild, true);\n\t\t\n\t\tnode.classList.add('lazyloader-pad-item-' + this.uuid, 'lazyloader-pad-item', 'lazyloader-beginning');\n\t\t\n\t\tlet cloned;\n\t\tpads.forEach( ( pad ) => {\n\t\t\tif ( !pad.get('el') ) {\n\t\t\t\tcloned = node.cloneNode( true );\n\t\t\t\tchildrenEl.insertBefore( cloned, firstChild );\n\t\t\t\tpad.set('el', cloned );\n\t\t\t}\n\t\t} );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} count Count\n\t */\n\tpadEnd( count ) {\n\t\tcount = count || 1;\n\t\t\n\t\tif ( count < 0 ) return;\n\t\t\n\t\tthis.endPads.add( _.times( count, () => {\n\t\t\treturn {\n\t\t\t\tid : _.uniqueId('pad-item-'),\n\t\t\t\tside : 'end'\n\t\t\t};\n\t\t} ) );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @param {number} count Count\n\t */\n\t_padEnd() {\n\t\tconst lastChild = this.getLastChild();\n\t\tif ( !lastChild ) return this;\n\t\t\n\t\tconst\n\t\t\tpads = this.endPads,\n\t\t\tchildrenEl = this.childrenEl,\n\t\t\tnode = this.padItemTemplate.call( this, lastChild, false);\n\t\t\n\t\tnode.classList.add('lazyloader-pad-item-' + this.uuid, 'lazyloader-pad-item', 'lazyloader-end');\n\t\t\n\t\tlet cloned;\n\t\tpads.forEach( ( pad ) => {\n\t\t\tif ( !pad.get('el') ) {\n\t\t\t\tcloned = node.cloneNode( true );\n\t\t\t\tchildrenEl.appendChild( cloned );\n\t\t\t\tpad.set('el', cloned );\n\t\t\t}\n\t\t} );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {HTMLElement} child Nearest child node\n\t * @param {boolean} beginning Beginning\n\t * @return {HTMLElement} Node\n\t */\n\tpadItemTemplate( child, beginning ) {\n\t\treturn document.createElement( child.tagName );\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tpadRemoved( pad, pads ) {\n\t\tconst el = pad.get('el');\n\t\tel && el.remove();\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tpadsChanged( pad, pads ) {\n\t\tconst childrenEl = this.childrenEl;\n\t\tif ( pad.get('side') !== 'end' ) {\n\t\t\t_.each( childrenEl.querySelector('.lazyloader-beginning'), ( el, idx ) => {\n\t\t\t\tconst pad = beginningPads.findWhere( { el: el } );\n\t\t\t\tpad && pad.set('index', idx );\n\t\t\t} );\n\t\t}\n\t\telse {\n\t\t\tlet padEls = childrenEl.querySelector('.lazyloader-end'),\n\t\t\t\ti = padEls ? padEls.length : 0,\n\t\t\t\tidx = 0;\n\t\t\t\n\t\t\twhile ( i-- ) {\n\t\t\t\tconst pad = endPads.findWhere( { el: padEls[ i ] } );\n\t\t\t\tpad && pad.set('index', idx );\n\t\t\t\tidx++;\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis\n\t\t\t._padBeginning()\n\t\t\t._padEnd();\n\t\t\n\t\tthis.state.set('changes', true);\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {boolean} force Check size regardless of `state`\n\t */\n\tresize( force ) {\n\t\tif (\n\t\t\tforce !== true &&\n\t\t\t!this.state.get('active') &&\n\t\t\t!this.state.get('ready')\n\t\t) return this;\n\t\t\n\t\tconst\n\t\t\tsizingEl = this.sizingEl,\n\t\t\trect = sizingEl.getBoundingClientRect(),\n\t\t\tleft = rect.left,\n\t\t\ttop = rect.top,\n\t\t\twidth = Math.ceil( sizingEl.clientWidth < 2 ? 0 : rect.width ),\n\t\t\theight = Math.ceil( sizingEl.clientHeight < 2 ? 0 : rect.height );\n\t\t\n\t\tthis.stageBounds.set( {\n\t\t\tx1 : left,\n\t\t\tx2 : left + width,\n\t\t\ty1 : top,\n\t\t\ty2 : top + height,\n\t\t\theight : height,\n\t\t\twidth : width\n\t\t} );\n\t\t\n\t\tthis.throttledResizeContent();\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {boolean} force Check size regardless of `state`\n\t */\n\tresizeContent( force ) {\n\t\tif (\n\t\t\tforce !== true &&\n\t\t\t!this.state.get('active') &&\n\t\t\t!this.state.get('ready')\n\t\t) return this;\n\t\t\n\t\tconst\n\t\t\tchildrenEl = this.childrenEl,\n\t\t\trect = childrenEl.getBoundingClientRect(),\n\t\t\tleft = rect.left,\n\t\t\ttop = rect.top,\n\t\t\twidth = Math.ceil( childrenEl.clientWidth < 2 ? 0 : rect.width ),\n\t\t\theight = Math.ceil( childrenEl.clientHeight < 2 ? 0 : rect.height );\n\t\t\t\n\t\tthis.contentBounds.set( {\n\t\t\tx1 : left,\n\t\t\tx2 : left + width,\n\t\t\ty1 : top,\n\t\t\ty2 : top + height,\n\t\t\twidth : width,\n\t\t\theight : height\n\t\t} );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {event} e `scroll` event\n\t */\n\tscroll( e ) {\n\t\t\n\t\tconst state = this.state;\n\t\tif (\n\t\t\t!state.get('ready') ||\n\t\t\t!this.contentBounds.get('overflow') ||\n\t\t\t!this.validBounds\n\t\t) return;\n\t\t\n\t\tconst\n\t\t\tel = this.scrollContainer,\n\t\t\tstageBounds = this.stageBounds;\n\t\t\n\t\tconst scrollPos = this.horizontal ?\n\t\t\tel.scrollLeft :\n\t\t\tel.scrollTop;\n\t\t\n\t\t// Scrolling forward or backwards\n\t\tconst scrollingForward = scrollPos > this.lastScroll;\n\t\t\n\t\t// Store\n\t\tthis.lastScroll = scrollPos;\n\t\t\n\t\tconst wasManualScroll = state.get('manualScroll');\n\t\twasManualScroll ?\n\t\t\tstate.set( {\n\t\t\t\tchanges : true,\n\t\t\t\tmanualScroll : false\n\t\t\t} ) :\n\t\t\tstate.set('userScrolled', true);\n\t\t\n\t\tif (\n\t\t\tthis.target.syncing ||\n\t\t\t( !scrollingForward && this.forwardOnly )\n\t\t) return;\n\t\t\n\t\tconst load = scrollingForward ?\n\t\t\tthis._scroll_forward() :\n\t\t\tthis._scroll_backward();\n\t\t\n\t\tload && this.loadItems( scrollingForward );\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @return {boolean} Load items\n\t */\n\t_scroll_forward() {\n\t\tconst lastItem = this.getLastChild();\n\t\tif ( !lastItem ) return;\n\t\t\n\t\tconst lastRect = this.getRelativeRect( lastItem );\n\t\tlet max, pos;\n\t\tif ( this.horizontal ) {\n\t\t\tmax = this.stageBounds.get('x2');\n\t\t\tpos = lastRect.x1;\n\t\t}\n\t\telse {\n\t\t\tmax = this.stageBounds.get('y2');\n\t\t\tpos = lastRect.y1;\n\t\t}\n\t\treturn pos <= max;\n\t}\n\t\n\t/**\n\t * @method\n\t * @private\n\t * @return {boolean} Load items\n\t */\n\t_scroll_backward() {\n\t\tconst firstItem = this.getFirstChild();\n\t\tif ( !firstItem ) return;\n\t\t\n\t\tconst firstRect = this.getRelativeRect( firstItem );\n\t\tlet min, pos;\n\t\tif ( this.horizontal ) {\n\t\t\tmin = this.stageBounds.get('x1');\n\t\t\tpos = firstRect.x2;\n\t\t}\n\t\telse {\n\t\t\tmin = this.stageBounds.get('y1');\n\t\t\tpos = firstRect.y2;\n\t\t}\n\t\treturn pos > min;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} pos Position\n\t */\n\tscrollTo( pos ) {\n\t\tconst scrollContainer = this.scrollContainer;\n\t\tif ( this.horizontal ) {\n\t\t\tpos = Math.min( this.scrollAreaX, pos );\n\t\t\tif ( !isNaN( pos ) && scrollContainer.scrollLeft !== pos ) {\n\t\t\t\tthis.state.set('manualScroll', true);\n\t\t\t\tscrollContainer.scrollTo( pos, 0 );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tpos = Math.min( this.scrollAreaY, pos );\n\t\t\tif ( !isNaN( pos ) && scrollContainer.scrollTop !== pos ) {\n\t\t\t\tthis.state.set('manualScroll', true);\n\t\t\t\tscrollContainer.scrollTo( 0, pos );\n\t\t\t}\n\t\t}\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tunbindEvents() {\n\t\tthis\n\t\t\t.stopListening()\n\t\t\t.disconnectObserver()\n\t\t\t.unbindResizeEvents()\n\t\t\t.unbindScrollEvents();\n\t\t\n\t\tthis.el.removeEventListener('nx-lazyload-active', this.onlazyloadactive, true );\n\t\tthis.el.removeEventListener('nx-lazyload-inactive', this.onlazyloadinactive );\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tunbindResizeEvents() {\n\t\tif ( !this.boundResizeEvents ) return this;\n\t\tthis.boundResizeEvents = false;\n\t\t\n\t\twindow.removeResizeListener( this.childrenEl, this.onccontentresize );\n\t\twindow.removeResizeListener( this.scrollContainer, this.onresize );\n\t\tthis.onccontentresize = null;\n\t\tthis.onresize = null;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t */\n\tunbindScrollEvents() {\n\t\tif ( !this.boundScrollEvents ) return this;\n\t\tthis.boundScrollEvents = false;\n\n\t\t// console.log( this.uuid, \"unbound scroll and sizing events from\", this.el );\n\n\t\tthis.scrollContainer.removeEventListener('scroll', this.onscroll, {\n\t\t\tpassive: true\n\t\t} );\n\t\tthis.onscroll = null;\n\t\t\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} count Count\n\t */\n\tunpadBeginning( count ) {\n\t\tconst pads = this.beginningPads;\n\t\tif ( !pads.length ) return this;\n\t\t\n\t\tif ( !count ) {\n\t\t\tpads.set([]);\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tpads.remove( pads.last( count ) );\n\t\treturn this;\n\t}\n\t\n\t/**\n\t * @method\n\t * @param {number} count Count\n\t */\n\tunpadEnd( count ) {\n\t\tconst pads = this.endPads;\n\t\tif ( !pads.length ) return this;\n\t\t\n\t\tif ( !count ) {\n\t\t\tpads.set([]);\n\t\t\treturn this;\n\t\t}\n\t\t\n\t\tpads.remove( pads.last( count ) );\n\t\treturn this;\n\t}\n}\n\n_.extend( LazyLoader.prototype, Backbone.Events );\n\nexport default LazyLoader;"],"names":["Model","Backbone","Collection","BOUND_TRIGGERS","LazyLoader","canRender","state","this","destroyed","get","validBounds","canScroll","contentBounds","horizontal","direction","vertical","constructor","el","opts","uuid","_","uniqueId","now","scroll","throttle","checkItems","loadItems","debouncedCheckItems","debounce","throttledResize","resize","throttledResizeContent","resizeContent","padsChanged","forwardOnly","childrenEl","classList","add","scrollContainer","sizingEl","target","padItemTemplate","oldScrollSize","hasActiveItem","lastScroll","scrollCorrection","beginningPads","endPads","x1","x2","y1","y2","height","width","overflow","valid","stageBounds","enabled","active","ready","changes","userScrolled","validDimensions","checkSize","scrollWidth","scrollHeight","delay","set","bindEvents","render","rendering","window","requestAnimationFrame","draw","scrollTo","scrollLeft","scrollTop","reachedEnd","reachedBeginning","activeItem","getElementsByClassName","bringItemToView","addEventListener","onlazyloadactive","e","fromCustomEvent","onlazyloadinactive","stopImmediatePropagation","listenTo","pad","padRemoved","bounds","intersection","keys","changed","length","checkScrollArea","lazyLoadedForward","connectObserver","disconnectObserver","bindScrollEvents","bindResizeEvents","unbindScrollEvents","cevent","CustomEvent","bubbles","detail","instance","dispatchEvent","boundResizeEvents","addResizeListener","onresize","onccontentresize","boundScrollEvents","onscroll","bind","passive","item","itemPosition","scrollPos","getBoundingClientRect","left","top","observer","MutationObserver","mutationRecords","mutationRecord","addedNodes","addCount","i","c","n","contains","itemAdded","observe","childList","checkEnabled","toSet","syncing","_checkItems_horizontal","_checkItems_vertical","lastItem","getLastChild","getRelativeRect","firstItem","getFirstChild","checkPadding","unpadBeginning","padBeginning","unpadEnd","padEnd","sw","sh","scrollAreaX","clientWidth","scrollAreaY","clientHeight","destroy","remove","unbindEvents","disconnect","firstPad","findWhere","index","children","node","lastPad","accountForMargins","itemRect","computedStyles","marginBottom","marginLeft","marginRight","marginTop","getComputedStyle","parseInt","itemEl","forward","items","lazyLoadItems","padItems","Math","min","abs","count","times","id","side","_padBeginning","firstChild","pads","call","cloned","forEach","cloneNode","insertBefore","_padEnd","lastChild","appendChild","child","beginning","document","createElement","tagName","each","querySelector","idx","padEls","force","rect","ceil","scrollingForward","manualScroll","_scroll_forward","_scroll_backward","lastRect","max","pos","firstRect","isNaN","stopListening","unbindResizeEvents","removeEventListener","removeResizeListener","last","extend","prototype","Events"],"sourceRoot":""}