From 6216f58238c79c65451a4b9605168ebe8ff2dd1a Mon Sep 17 00:00:00 2001 From: Ed Hinchliffe Date: Mon, 15 Jan 2018 18:20:30 +0000 Subject: [PATCH 1/5] Two small code changes with (hopefully) a major perf impact. - Added requestAnimationFrame wrapper to the updateGeometry module - Added will-change transform to the css wrapper class to promote to layer. --- css/perfect-scrollbar.css | 1 + src/update-geometry.js | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/css/perfect-scrollbar.css b/css/perfect-scrollbar.css index 859062c12..1815f7948 100644 --- a/css/perfect-scrollbar.css +++ b/css/perfect-scrollbar.css @@ -7,6 +7,7 @@ -ms-overflow-style: none; touch-action: auto; -ms-touch-action: auto; + will-change: transform; } /* diff --git a/src/update-geometry.js b/src/update-geometry.js index 791068eb5..0036e930a 100644 --- a/src/update-geometry.js +++ b/src/update-geometry.js @@ -3,7 +3,16 @@ import * as DOM from './lib/dom'; import cls from './lib/class-names'; import { toInt } from './lib/util'; +let requestAnimationFrame = window.requestAnimationFrame || (cb => cb()); + +let lastI = null; export default function(i) { + lastI = i; + requestAnimationFrame(updateGeometry); +} + +function updateGeometry() { + let i = lastI; const element = i.element; i.containerWidth = element.clientWidth; From 5dc45429ab550f8caa600832ff6cc39f37128e7a Mon Sep 17 00:00:00 2001 From: Ed Hinchliffe Date: Thu, 18 Jan 2018 17:58:00 +0000 Subject: [PATCH 2/5] Fixed issue breaking --- src/index.js | 2 +- src/update-geometry.js | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index c9d7f114b..cb0677889 100644 --- a/src/index.js +++ b/src/index.js @@ -182,7 +182,7 @@ export default class PerfectScrollbar { CSS.set(this.scrollbarXRail, { display: 'none' }); CSS.set(this.scrollbarYRail, { display: 'none' }); - updateGeometry(this); + updateGeometry(this, true); processScrollDiff(this, 'top', 0, false, true); processScrollDiff(this, 'left', 0, false, true); diff --git a/src/update-geometry.js b/src/update-geometry.js index 0036e930a..3e2fbd82b 100644 --- a/src/update-geometry.js +++ b/src/update-geometry.js @@ -6,8 +6,13 @@ import { toInt } from './lib/util'; let requestAnimationFrame = window.requestAnimationFrame || (cb => cb()); let lastI = null; -export default function(i) { +export default function(i, force) { lastI = i; + // Manual calls to `update` require this to execute immediately. + if (force) { + updateGeometry(); + return; + } requestAnimationFrame(updateGeometry); } From c22f7fdfe407c621ef5212edcef155596afc3bab Mon Sep 17 00:00:00 2001 From: Ed Hinchliffe Date: Thu, 1 Feb 2018 13:09:24 +0000 Subject: [PATCH 3/5] Updated to better support multiple instances - Fixes bug where only the last instance to request a geometry update would actually have its geometry update. - Only trigger one geometry instance per update per frame --- src/index.js | 15 +++++++++++++-- src/update-geometry.js | 14 +------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/index.js b/src/index.js index cb0677889..cb34429ec 100644 --- a/src/index.js +++ b/src/index.js @@ -155,9 +155,20 @@ export default class PerfectScrollbar { this.lastScrollTop = element.scrollTop; // for onScroll only this.lastScrollLeft = element.scrollLeft; // for onScroll only this.event.bind(this.element, 'scroll', e => this.onScroll(e)); + this.updateOwnGeometry(); + } + + updateOwnGeometry () { + if (this.currentAFReqId) this.currentAFReqId = null; updateGeometry(this); } + updateOwnGeometryOnAnimFrame() { + if (this.currentAFReqId) cancelAnimationFrame(this.currentAFReqId); + this.currentAFReqId = + requestAnimationFrame(this.updateOwnGeometry.bind(this)); + } + update() { if (!this.isAlive) { return; @@ -182,7 +193,7 @@ export default class PerfectScrollbar { CSS.set(this.scrollbarXRail, { display: 'none' }); CSS.set(this.scrollbarYRail, { display: 'none' }); - updateGeometry(this, true); + this.updateOwnGeometry(); processScrollDiff(this, 'top', 0, false, true); processScrollDiff(this, 'left', 0, false, true); @@ -196,7 +207,7 @@ export default class PerfectScrollbar { return; } - updateGeometry(this); + this.updateOwnGeometryOnAnimFrame() processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop); processScrollDiff( this, diff --git a/src/update-geometry.js b/src/update-geometry.js index 3e2fbd82b..0080508f4 100644 --- a/src/update-geometry.js +++ b/src/update-geometry.js @@ -5,19 +5,7 @@ import { toInt } from './lib/util'; let requestAnimationFrame = window.requestAnimationFrame || (cb => cb()); -let lastI = null; -export default function(i, force) { - lastI = i; - // Manual calls to `update` require this to execute immediately. - if (force) { - updateGeometry(); - return; - } - requestAnimationFrame(updateGeometry); -} - -function updateGeometry() { - let i = lastI; +export default function (i) { const element = i.element; i.containerWidth = element.clientWidth; From 2eba5045225a7e81375ab5d2dc48bc9d7a69b5bf Mon Sep 17 00:00:00 2001 From: Ed Hinchliffe Date: Thu, 1 Feb 2018 13:14:56 +0000 Subject: [PATCH 4/5] Fixed formatting to pass tests --- src/index.js | 9 +++++---- src/update-geometry.js | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index cb34429ec..40bde2994 100644 --- a/src/index.js +++ b/src/index.js @@ -158,15 +158,16 @@ export default class PerfectScrollbar { this.updateOwnGeometry(); } - updateOwnGeometry () { + updateOwnGeometry() { if (this.currentAFReqId) this.currentAFReqId = null; updateGeometry(this); } updateOwnGeometryOnAnimFrame() { if (this.currentAFReqId) cancelAnimationFrame(this.currentAFReqId); - this.currentAFReqId = - requestAnimationFrame(this.updateOwnGeometry.bind(this)); + this.currentAFReqId = requestAnimationFrame( + this.updateOwnGeometry.bind(this) + ); } update() { @@ -207,7 +208,7 @@ export default class PerfectScrollbar { return; } - this.updateOwnGeometryOnAnimFrame() + this.updateOwnGeometryOnAnimFrame(); processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop); processScrollDiff( this, diff --git a/src/update-geometry.js b/src/update-geometry.js index 0080508f4..e1682f171 100644 --- a/src/update-geometry.js +++ b/src/update-geometry.js @@ -5,7 +5,7 @@ import { toInt } from './lib/util'; let requestAnimationFrame = window.requestAnimationFrame || (cb => cb()); -export default function (i) { +export default function(i) { const element = i.element; i.containerWidth = element.clientWidth; From e68ebc02c2b579f919499777ce9b360ff77829ad Mon Sep 17 00:00:00 2001 From: Ed Hinchliffe Date: Thu, 23 Jul 2020 11:31:57 +0100 Subject: [PATCH 5/5] Merge upstream & build --- dist/perfect-scrollbar.common.js | 21 +++++++++++++++++---- dist/perfect-scrollbar.common.js.map | 2 +- dist/perfect-scrollbar.esm.js | 21 +++++++++++++++++---- dist/perfect-scrollbar.esm.js.map | 2 +- dist/perfect-scrollbar.js | 21 +++++++++++++++++---- dist/perfect-scrollbar.js.map | 2 +- dist/perfect-scrollbar.min.js | 6 +++--- dist/perfect-scrollbar.min.js.map | 2 +- package-lock.json | 2 +- 9 files changed, 59 insertions(+), 20 deletions(-) diff --git a/dist/perfect-scrollbar.common.js b/dist/perfect-scrollbar.common.js index 81fbb44a8..1fee69801 100644 --- a/dist/perfect-scrollbar.common.js +++ b/dist/perfect-scrollbar.common.js @@ -325,8 +325,9 @@ function updateGeometry(i) { var roundedScrollTop = Math.floor(element.scrollTop); var rect = element.getBoundingClientRect(); - i.containerWidth = Math.ceil(rect.width); - i.containerHeight = Math.ceil(rect.height); + i.containerWidth = Math.round(rect.width); + i.containerHeight = Math.round(rect.height); + i.contentWidth = element.scrollWidth; i.contentHeight = element.scrollHeight; @@ -1257,9 +1258,21 @@ var PerfectScrollbar = function PerfectScrollbar(element, userSettings) { this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only this.lastScrollLeft = element.scrollLeft; // for onScroll only this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); }); + this.updateOwnGeometry(); +}; + +PerfectScrollbar.prototype.updateOwnGeometry = function updateOwnGeometry () { + if (this.currentAFReqId) { this.currentAFReqId = null; } updateGeometry(this); }; +PerfectScrollbar.prototype.updateOwnGeometryOnAnimFrame = function updateOwnGeometryOnAnimFrame () { + if (this.currentAFReqId) { cancelAnimationFrame(this.currentAFReqId); } + this.currentAFReqId = requestAnimationFrame( + this.updateOwnGeometry.bind(this) + ); +}; + PerfectScrollbar.prototype.update = function update () { if (!this.isAlive) { return; @@ -1284,7 +1297,7 @@ PerfectScrollbar.prototype.update = function update () { set(this.scrollbarXRail, { display: 'none' }); set(this.scrollbarYRail, { display: 'none' }); - updateGeometry(this); + this.updateOwnGeometry(); processScrollDiff(this, 'top', 0, false, true); processScrollDiff(this, 'left', 0, false, true); @@ -1298,7 +1311,7 @@ PerfectScrollbar.prototype.onScroll = function onScroll (e) { return; } - updateGeometry(this); + this.updateOwnGeometryOnAnimFrame(); processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop); processScrollDiff( this, diff --git a/dist/perfect-scrollbar.common.js.map b/dist/perfect-scrollbar.common.js.map index 622084336..863c7017d 100644 --- a/dist/perfect-scrollbar.common.js.map +++ b/dist/perfect-scrollbar.common.js.map @@ -1 +1 @@ -{"version":3,"file":"perfect-scrollbar.common.js","sources":["../src/lib/css.js","../src/lib/dom.js","../src/lib/class-names.js","../src/lib/event-manager.js","../src/process-scroll-diff.js","../src/lib/util.js","../src/update-geometry.js","../src/handlers/click-rail.js","../src/handlers/drag-thumb.js","../src/handlers/keyboard.js","../src/handlers/mouse-wheel.js","../src/handlers/touch.js","../src/index.js"],"sourcesContent":["export function get(element) {\n return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n for (const key in obj) {\n let val = obj[key];\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n element.style[key] = val;\n }\n return element;\n}\n","export function div(className) {\n const div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nconst elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nexport function queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, child =>\n matches(child, selector)\n );\n}\n","const cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: x => `ps__thumb-${x}`,\n rail: x => `ps__rail-${x}`,\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: x => `ps--active-${x}`,\n scrolling: x => `ps--scrolling-${x}`,\n },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n const classList = i.element.classList;\n const className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nexport function removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n i.settings.scrollingThreshold\n );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n","class EventElement {\n constructor(element) {\n this.element = element;\n this.handlers = {};\n }\n\n bind(eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n }\n\n unbind(eventName, target) {\n this.handlers[eventName] = this.handlers[eventName].filter(handler => {\n if (target && handler !== target) {\n return true;\n }\n this.element.removeEventListener(eventName, handler, false);\n return false;\n });\n }\n\n unbindAll() {\n for (const name in this.handlers) {\n this.unbind(name);\n }\n }\n\n get isEmpty() {\n return Object.keys(this.handlers).every(\n key => this.handlers[key].length === 0\n );\n }\n}\n\nexport default class EventManager {\n constructor() {\n this.eventElements = [];\n }\n\n eventElement(element) {\n let ee = this.eventElements.filter(ee => ee.element === element)[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n }\n\n bind(element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n }\n\n unbind(element, eventName, handler) {\n const ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n }\n\n unbindAll() {\n this.eventElements.forEach(e => e.unbindAll());\n this.eventElements = [];\n }\n\n once(element, eventName, handler) {\n const ee = this.eventElement(element);\n const onceHandler = evt => {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n }\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nexport default function(\n i,\n axis,\n diff,\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n let fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down',\n ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right',\n ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n i,\n diff,\n [contentHeight, containerHeight, scrollTop, y, up, down],\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n const element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n }\n}\n","import * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n return (\n DOM.matches(el, 'input,[contenteditable]') ||\n DOM.matches(el, 'select,[contenteditable]') ||\n DOM.matches(el, 'textarea,[contenteditable]') ||\n DOM.matches(el, 'button,[contenteditable]')\n );\n}\n\nexport function outerWidth(element) {\n const styles = CSS.get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nexport const env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\nexport default function(i) {\n const element = i.element;\n const roundedScrollTop = Math.floor(element.scrollTop);\n const rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('x')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('y')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n const xRailOffset = { width: i.railXWidth };\n const roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n CSS.set(i.scrollbarXRail, xRailOffset);\n\n const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n CSS.set(i.scrollbarYRail, yRailOffset);\n\n CSS.set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n CSS.set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n","import updateGeometry from '../update-geometry';\n\nexport default function(i) {\n const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarYRail, 'mousedown', e => {\n const positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarXRail, 'mousedown', e => {\n const positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n","import * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, {\n addScrollingClass,\n removeScrollingClass,\n} from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail',\n ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail',\n ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n [\n containerHeight,\n contentHeight,\n pageY,\n railYHeight,\n scrollbarY,\n scrollbarYHeight,\n scrollTop,\n y,\n scrollbarYRail,\n ]\n) {\n const element = i.element;\n\n let startingScrollTop = null;\n let startingMousePageY = null;\n let scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', e => {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', e => {\n bindMoves(e, true);\n });\n}\n","import * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n const elementHovered = () => DOM.matches(element, ':hover');\n const scrollbarFocused = () =>\n DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n function shouldPreventDefault(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n const scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', e => {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n let activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n let deltaX = 0;\n let deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n","import * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n let shouldPrevent = false;\n\n function shouldPreventDefault(deltaX, deltaY) {\n const roundedScrollTop = Math.floor(element.scrollTop);\n const isTop = element.scrollTop === 0;\n const isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n const isLeft = element.scrollLeft === 0;\n const isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n let hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n let deltaX = e.deltaX;\n let deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n let shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n","import updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n const element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n const scrollLeft = element.scrollLeft;\n const magnitudeX = Math.abs(deltaX);\n const magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n let startOffset = {};\n let startTime = 0;\n let speed = {};\n let easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n const touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n const touch = getTouch(e);\n\n const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n const differenceX = currentOffset.pageX - startOffset.pageX;\n const differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n const currentTime = new Date().getTime();\n\n const timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n});\n\nconst handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard,\n wheel,\n touch,\n};\n\nexport default class PerfectScrollbar {\n constructor(element, userSettings = {}) {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (const key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n const focus = () => element.classList.add(cls.state.focus);\n const blur = () => element.classList.remove(cls.state.focus);\n\n this.isRtl = CSS.get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (() => {\n const originalScrollLeft = element.scrollLeft;\n let result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = DOM.div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n const railXStyle = CSS.get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n CSS.set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = DOM.div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n const railYStyle = CSS.get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n CSS.set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(handlerName => handlers[handlerName](this));\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', e => this.onScroll(e));\n this.updateOwnGeometry();\n }\n\n updateOwnGeometry() {\n if (this.currentAFReqId) this.currentAFReqId = null;\n updateGeometry(this);\n }\n\n updateOwnGeometryOnAnimFrame() {\n if (this.currentAFReqId) cancelAnimationFrame(this.currentAFReqId);\n this.currentAFReqId = requestAnimationFrame(\n this.updateOwnGeometry.bind(this)\n );\n }\n\n update() {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n toInt(CSS.get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(CSS.get(this.scrollbarYRail).marginTop) +\n toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n CSS.set(this.scrollbarXRail, { display: 'none' });\n CSS.set(this.scrollbarYRail, { display: 'none' });\n\n this.updateOwnGeometry();\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n CSS.set(this.scrollbarXRail, { display: '' });\n CSS.set(this.scrollbarYRail, { display: '' });\n }\n\n onScroll(e) {\n if (!this.isAlive) {\n return;\n }\n\n this.updateOwnGeometryOnAnimFrame();\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n }\n\n destroy() {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n DOM.remove(this.scrollbarX);\n DOM.remove(this.scrollbarY);\n DOM.remove(this.scrollbarXRail);\n DOM.remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n }\n\n removePsClasses() {\n this.element.className = this.element.className\n .split(' ')\n .filter(name => !name.match(/^ps([-_].+|)$/))\n .join(' ');\n }\n}\n"],"names":["const","let","this","processScrollDiff","DOM.matches","CSS.get","DOM.queryChildren","DOM.remove","CSS.set","DOM.div"],"mappings":"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"} \ No newline at end of file diff --git a/dist/perfect-scrollbar.esm.js b/dist/perfect-scrollbar.esm.js index 3a4c392d1..903ec01d5 100644 --- a/dist/perfect-scrollbar.esm.js +++ b/dist/perfect-scrollbar.esm.js @@ -323,8 +323,9 @@ function updateGeometry(i) { var roundedScrollTop = Math.floor(element.scrollTop); var rect = element.getBoundingClientRect(); - i.containerWidth = Math.ceil(rect.width); - i.containerHeight = Math.ceil(rect.height); + i.containerWidth = Math.round(rect.width); + i.containerHeight = Math.round(rect.height); + i.contentWidth = element.scrollWidth; i.contentHeight = element.scrollHeight; @@ -1255,9 +1256,21 @@ var PerfectScrollbar = function PerfectScrollbar(element, userSettings) { this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only this.lastScrollLeft = element.scrollLeft; // for onScroll only this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); }); + this.updateOwnGeometry(); +}; + +PerfectScrollbar.prototype.updateOwnGeometry = function updateOwnGeometry () { + if (this.currentAFReqId) { this.currentAFReqId = null; } updateGeometry(this); }; +PerfectScrollbar.prototype.updateOwnGeometryOnAnimFrame = function updateOwnGeometryOnAnimFrame () { + if (this.currentAFReqId) { cancelAnimationFrame(this.currentAFReqId); } + this.currentAFReqId = requestAnimationFrame( + this.updateOwnGeometry.bind(this) + ); +}; + PerfectScrollbar.prototype.update = function update () { if (!this.isAlive) { return; @@ -1282,7 +1295,7 @@ PerfectScrollbar.prototype.update = function update () { set(this.scrollbarXRail, { display: 'none' }); set(this.scrollbarYRail, { display: 'none' }); - updateGeometry(this); + this.updateOwnGeometry(); processScrollDiff(this, 'top', 0, false, true); processScrollDiff(this, 'left', 0, false, true); @@ -1296,7 +1309,7 @@ PerfectScrollbar.prototype.onScroll = function onScroll (e) { return; } - updateGeometry(this); + this.updateOwnGeometryOnAnimFrame(); processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop); processScrollDiff( this, diff --git a/dist/perfect-scrollbar.esm.js.map b/dist/perfect-scrollbar.esm.js.map index eef8df4b4..4885ebdf8 100644 --- a/dist/perfect-scrollbar.esm.js.map +++ b/dist/perfect-scrollbar.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"perfect-scrollbar.esm.js","sources":["../src/lib/css.js","../src/lib/dom.js","../src/lib/class-names.js","../src/lib/event-manager.js","../src/process-scroll-diff.js","../src/lib/util.js","../src/update-geometry.js","../src/handlers/click-rail.js","../src/handlers/drag-thumb.js","../src/handlers/keyboard.js","../src/handlers/mouse-wheel.js","../src/handlers/touch.js","../src/index.js"],"sourcesContent":["export function get(element) {\n return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n for (const key in obj) {\n let val = obj[key];\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n element.style[key] = val;\n }\n return element;\n}\n","export function div(className) {\n const div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nconst elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nexport function queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, child =>\n matches(child, selector)\n );\n}\n","const cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: x => `ps__thumb-${x}`,\n rail: x => `ps__rail-${x}`,\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: x => `ps--active-${x}`,\n scrolling: x => `ps--scrolling-${x}`,\n },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n const classList = i.element.classList;\n const className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nexport function removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n i.settings.scrollingThreshold\n );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n","class EventElement {\n constructor(element) {\n this.element = element;\n this.handlers = {};\n }\n\n bind(eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n }\n\n unbind(eventName, target) {\n this.handlers[eventName] = this.handlers[eventName].filter(handler => {\n if (target && handler !== target) {\n return true;\n }\n this.element.removeEventListener(eventName, handler, false);\n return false;\n });\n }\n\n unbindAll() {\n for (const name in this.handlers) {\n this.unbind(name);\n }\n }\n\n get isEmpty() {\n return Object.keys(this.handlers).every(\n key => this.handlers[key].length === 0\n );\n }\n}\n\nexport default class EventManager {\n constructor() {\n this.eventElements = [];\n }\n\n eventElement(element) {\n let ee = this.eventElements.filter(ee => ee.element === element)[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n }\n\n bind(element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n }\n\n unbind(element, eventName, handler) {\n const ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n }\n\n unbindAll() {\n this.eventElements.forEach(e => e.unbindAll());\n this.eventElements = [];\n }\n\n once(element, eventName, handler) {\n const ee = this.eventElement(element);\n const onceHandler = evt => {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n }\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nexport default function(\n i,\n axis,\n diff,\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n let fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down',\n ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right',\n ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n i,\n diff,\n [contentHeight, containerHeight, scrollTop, y, up, down],\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n const element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n }\n}\n","import * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n return (\n DOM.matches(el, 'input,[contenteditable]') ||\n DOM.matches(el, 'select,[contenteditable]') ||\n DOM.matches(el, 'textarea,[contenteditable]') ||\n DOM.matches(el, 'button,[contenteditable]')\n );\n}\n\nexport function outerWidth(element) {\n const styles = CSS.get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nexport const env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\nexport default function(i) {\n const element = i.element;\n const roundedScrollTop = Math.floor(element.scrollTop);\n const rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('x')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('y')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n const xRailOffset = { width: i.railXWidth };\n const roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n CSS.set(i.scrollbarXRail, xRailOffset);\n\n const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n CSS.set(i.scrollbarYRail, yRailOffset);\n\n CSS.set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n CSS.set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n","import updateGeometry from '../update-geometry';\n\nexport default function(i) {\n const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarYRail, 'mousedown', e => {\n const positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarXRail, 'mousedown', e => {\n const positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n","import * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, {\n addScrollingClass,\n removeScrollingClass,\n} from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail',\n ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail',\n ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n [\n containerHeight,\n contentHeight,\n pageY,\n railYHeight,\n scrollbarY,\n scrollbarYHeight,\n scrollTop,\n y,\n scrollbarYRail,\n ]\n) {\n const element = i.element;\n\n let startingScrollTop = null;\n let startingMousePageY = null;\n let scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', e => {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', e => {\n bindMoves(e, true);\n });\n}\n","import * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n const elementHovered = () => DOM.matches(element, ':hover');\n const scrollbarFocused = () =>\n DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n function shouldPreventDefault(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n const scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', e => {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n let activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n let deltaX = 0;\n let deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n","import * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n let shouldPrevent = false;\n\n function shouldPreventDefault(deltaX, deltaY) {\n const roundedScrollTop = Math.floor(element.scrollTop);\n const isTop = element.scrollTop === 0;\n const isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n const isLeft = element.scrollLeft === 0;\n const isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n let hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n let deltaX = e.deltaX;\n let deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n let shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n","import updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n const element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n const scrollLeft = element.scrollLeft;\n const magnitudeX = Math.abs(deltaX);\n const magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n let startOffset = {};\n let startTime = 0;\n let speed = {};\n let easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n const touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n const touch = getTouch(e);\n\n const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n const differenceX = currentOffset.pageX - startOffset.pageX;\n const differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n const currentTime = new Date().getTime();\n\n const timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n});\n\nconst handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard,\n wheel,\n touch,\n};\n\nexport default class PerfectScrollbar {\n constructor(element, userSettings = {}) {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (const key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n const focus = () => element.classList.add(cls.state.focus);\n const blur = () => element.classList.remove(cls.state.focus);\n\n this.isRtl = CSS.get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (() => {\n const originalScrollLeft = element.scrollLeft;\n let result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = DOM.div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n const railXStyle = CSS.get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n CSS.set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = DOM.div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n const railYStyle = CSS.get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n CSS.set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(handlerName => handlers[handlerName](this));\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', e => this.onScroll(e));\n this.updateOwnGeometry();\n }\n\n updateOwnGeometry() {\n if (this.currentAFReqId) this.currentAFReqId = null;\n updateGeometry(this);\n }\n\n updateOwnGeometryOnAnimFrame() {\n if (this.currentAFReqId) cancelAnimationFrame(this.currentAFReqId);\n this.currentAFReqId = requestAnimationFrame(\n this.updateOwnGeometry.bind(this)\n );\n }\n\n update() {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n toInt(CSS.get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(CSS.get(this.scrollbarYRail).marginTop) +\n toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n CSS.set(this.scrollbarXRail, { display: 'none' });\n CSS.set(this.scrollbarYRail, { display: 'none' });\n\n this.updateOwnGeometry();\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n CSS.set(this.scrollbarXRail, { display: '' });\n CSS.set(this.scrollbarYRail, { display: '' });\n }\n\n onScroll(e) {\n if (!this.isAlive) {\n return;\n }\n\n this.updateOwnGeometryOnAnimFrame();\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n }\n\n destroy() {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n DOM.remove(this.scrollbarX);\n DOM.remove(this.scrollbarY);\n DOM.remove(this.scrollbarXRail);\n DOM.remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n }\n\n removePsClasses() {\n this.element.className = this.element.className\n .split(' ')\n .filter(name => !name.match(/^ps([-_].+|)$/))\n .join(' ');\n }\n}\n"],"names":["const","let","this","processScrollDiff","DOM.matches","CSS.get","DOM.queryChildren","DOM.remove","CSS.set","DOM.div"],"mappings":"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"} \ No newline at end of file diff --git a/dist/perfect-scrollbar.js b/dist/perfect-scrollbar.js index 1e6b87aa4..c264b90fb 100644 --- a/dist/perfect-scrollbar.js +++ b/dist/perfect-scrollbar.js @@ -329,8 +329,9 @@ var roundedScrollTop = Math.floor(element.scrollTop); var rect = element.getBoundingClientRect(); - i.containerWidth = Math.ceil(rect.width); - i.containerHeight = Math.ceil(rect.height); + i.containerWidth = Math.round(rect.width); + i.containerHeight = Math.round(rect.height); + i.contentWidth = element.scrollWidth; i.contentHeight = element.scrollHeight; @@ -1261,9 +1262,21 @@ this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only this.lastScrollLeft = element.scrollLeft; // for onScroll only this.event.bind(this.element, 'scroll', function (e) { return this$1.onScroll(e); }); + this.updateOwnGeometry(); + }; + + PerfectScrollbar.prototype.updateOwnGeometry = function updateOwnGeometry () { + if (this.currentAFReqId) { this.currentAFReqId = null; } updateGeometry(this); }; + PerfectScrollbar.prototype.updateOwnGeometryOnAnimFrame = function updateOwnGeometryOnAnimFrame () { + if (this.currentAFReqId) { cancelAnimationFrame(this.currentAFReqId); } + this.currentAFReqId = requestAnimationFrame( + this.updateOwnGeometry.bind(this) + ); + }; + PerfectScrollbar.prototype.update = function update () { if (!this.isAlive) { return; @@ -1288,7 +1301,7 @@ set(this.scrollbarXRail, { display: 'none' }); set(this.scrollbarYRail, { display: 'none' }); - updateGeometry(this); + this.updateOwnGeometry(); processScrollDiff(this, 'top', 0, false, true); processScrollDiff(this, 'left', 0, false, true); @@ -1302,7 +1315,7 @@ return; } - updateGeometry(this); + this.updateOwnGeometryOnAnimFrame(); processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop); processScrollDiff( this, diff --git a/dist/perfect-scrollbar.js.map b/dist/perfect-scrollbar.js.map index d8e6c1798..6c37e8c61 100644 --- a/dist/perfect-scrollbar.js.map +++ b/dist/perfect-scrollbar.js.map @@ -1 +1 @@ -{"version":3,"file":"perfect-scrollbar.js","sources":["../src/lib/css.js","../src/lib/dom.js","../src/lib/class-names.js","../src/lib/event-manager.js","../src/process-scroll-diff.js","../src/lib/util.js","../src/update-geometry.js","../src/handlers/click-rail.js","../src/handlers/drag-thumb.js","../src/handlers/keyboard.js","../src/handlers/mouse-wheel.js","../src/handlers/touch.js","../src/index.js"],"sourcesContent":["export function get(element) {\n return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n for (const key in obj) {\n let val = obj[key];\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n element.style[key] = val;\n }\n return element;\n}\n","export function div(className) {\n const div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nconst elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nexport function queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, child =>\n matches(child, selector)\n );\n}\n","const cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: x => `ps__thumb-${x}`,\n rail: x => `ps__rail-${x}`,\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: x => `ps--active-${x}`,\n scrolling: x => `ps--scrolling-${x}`,\n },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n const classList = i.element.classList;\n const className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nexport function removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n i.settings.scrollingThreshold\n );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n","class EventElement {\n constructor(element) {\n this.element = element;\n this.handlers = {};\n }\n\n bind(eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n }\n\n unbind(eventName, target) {\n this.handlers[eventName] = this.handlers[eventName].filter(handler => {\n if (target && handler !== target) {\n return true;\n }\n this.element.removeEventListener(eventName, handler, false);\n return false;\n });\n }\n\n unbindAll() {\n for (const name in this.handlers) {\n this.unbind(name);\n }\n }\n\n get isEmpty() {\n return Object.keys(this.handlers).every(\n key => this.handlers[key].length === 0\n );\n }\n}\n\nexport default class EventManager {\n constructor() {\n this.eventElements = [];\n }\n\n eventElement(element) {\n let ee = this.eventElements.filter(ee => ee.element === element)[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n }\n\n bind(element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n }\n\n unbind(element, eventName, handler) {\n const ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n }\n\n unbindAll() {\n this.eventElements.forEach(e => e.unbindAll());\n this.eventElements = [];\n }\n\n once(element, eventName, handler) {\n const ee = this.eventElement(element);\n const onceHandler = evt => {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n }\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nexport default function(\n i,\n axis,\n diff,\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n let fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down',\n ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right',\n ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n i,\n diff,\n [contentHeight, containerHeight, scrollTop, y, up, down],\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n const element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n }\n}\n","import * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n return (\n DOM.matches(el, 'input,[contenteditable]') ||\n DOM.matches(el, 'select,[contenteditable]') ||\n DOM.matches(el, 'textarea,[contenteditable]') ||\n DOM.matches(el, 'button,[contenteditable]')\n );\n}\n\nexport function outerWidth(element) {\n const styles = CSS.get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nexport const env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\nexport default function(i) {\n const element = i.element;\n const roundedScrollTop = Math.floor(element.scrollTop);\n const rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('x')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('y')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n const xRailOffset = { width: i.railXWidth };\n const roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n CSS.set(i.scrollbarXRail, xRailOffset);\n\n const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n CSS.set(i.scrollbarYRail, yRailOffset);\n\n CSS.set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n CSS.set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n","import updateGeometry from '../update-geometry';\n\nexport default function(i) {\n const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarYRail, 'mousedown', e => {\n const positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarXRail, 'mousedown', e => {\n const positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n","import * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, {\n addScrollingClass,\n removeScrollingClass,\n} from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail',\n ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail',\n ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n [\n containerHeight,\n contentHeight,\n pageY,\n railYHeight,\n scrollbarY,\n scrollbarYHeight,\n scrollTop,\n y,\n scrollbarYRail,\n ]\n) {\n const element = i.element;\n\n let startingScrollTop = null;\n let startingMousePageY = null;\n let scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', e => {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', e => {\n bindMoves(e, true);\n });\n}\n","import * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n const elementHovered = () => DOM.matches(element, ':hover');\n const scrollbarFocused = () =>\n DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n function shouldPreventDefault(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n const scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', e => {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n let activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n let deltaX = 0;\n let deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n","import * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n let shouldPrevent = false;\n\n function shouldPreventDefault(deltaX, deltaY) {\n const roundedScrollTop = Math.floor(element.scrollTop);\n const isTop = element.scrollTop === 0;\n const isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n const isLeft = element.scrollLeft === 0;\n const isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n let hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n let deltaX = e.deltaX;\n let deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n let shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n","import updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n const element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n const scrollLeft = element.scrollLeft;\n const magnitudeX = Math.abs(deltaX);\n const magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n let startOffset = {};\n let startTime = 0;\n let speed = {};\n let easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n const touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n const touch = getTouch(e);\n\n const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n const differenceX = currentOffset.pageX - startOffset.pageX;\n const differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n const currentTime = new Date().getTime();\n\n const timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n});\n\nconst handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard,\n wheel,\n touch,\n};\n\nexport default class PerfectScrollbar {\n constructor(element, userSettings = {}) {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (const key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n const focus = () => element.classList.add(cls.state.focus);\n const blur = () => element.classList.remove(cls.state.focus);\n\n this.isRtl = CSS.get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (() => {\n const originalScrollLeft = element.scrollLeft;\n let result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = DOM.div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n const railXStyle = CSS.get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n CSS.set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = DOM.div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n const railYStyle = CSS.get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n CSS.set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(handlerName => handlers[handlerName](this));\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', e => this.onScroll(e));\n this.updateOwnGeometry();\n }\n\n updateOwnGeometry() {\n if (this.currentAFReqId) this.currentAFReqId = null;\n updateGeometry(this);\n }\n\n updateOwnGeometryOnAnimFrame() {\n if (this.currentAFReqId) cancelAnimationFrame(this.currentAFReqId);\n this.currentAFReqId = requestAnimationFrame(\n this.updateOwnGeometry.bind(this)\n );\n }\n\n update() {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n toInt(CSS.get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(CSS.get(this.scrollbarYRail).marginTop) +\n toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n CSS.set(this.scrollbarXRail, { display: 'none' });\n CSS.set(this.scrollbarYRail, { display: 'none' });\n\n this.updateOwnGeometry();\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n CSS.set(this.scrollbarXRail, { display: '' });\n CSS.set(this.scrollbarYRail, { display: '' });\n }\n\n onScroll(e) {\n if (!this.isAlive) {\n return;\n }\n\n this.updateOwnGeometryOnAnimFrame();\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n }\n\n destroy() {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n DOM.remove(this.scrollbarX);\n DOM.remove(this.scrollbarY);\n DOM.remove(this.scrollbarXRail);\n DOM.remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n }\n\n removePsClasses() {\n this.element.className = this.element.className\n .split(' ')\n .filter(name => !name.match(/^ps([-_].+|)$/))\n .join(' ');\n }\n}\n"],"names":["const","let","this","processScrollDiff","DOM.matches","CSS.get","DOM.queryChildren","DOM.remove","CSS.set","DOM.div"],"mappings":"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"} \ No newline at end of file diff --git a/dist/perfect-scrollbar.min.js b/dist/perfect-scrollbar.min.js index dcffdb71f..11010ed1c 100644 --- a/dist/perfect-scrollbar.min.js +++ b/dist/perfect-scrollbar.min.js @@ -3,7 +3,7 @@ * Copyright 2020 Hyunje Jun, MDBootstrap and Contributors * Licensed under MIT */(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(a=a||self,a.PerfectScrollbar=b())})(this,function(){'use strict';var u=Math.abs,v=Math.floor;function a(a){return getComputedStyle(a)}function b(a,b){for(var c in b){var d=b[c];"number"==typeof d&&(d+="px"),a.style[c]=d}return a}function c(a){var b=document.createElement("div");return b.className=a,b}function d(a,b){if(!w)throw new Error("No element matching method supported");return w.call(a,b)}function e(a){a.remove?a.remove():a.parentNode&&a.parentNode.removeChild(a)}function f(a,b){return Array.prototype.filter.call(a.children,function(a){return d(a,b)})}function g(a,b){var c=a.element.classList,d=z.state.scrolling(b);c.contains(d)?clearTimeout(A[b]):c.add(d)}function h(a,b){A[b]=setTimeout(function(){return a.isAlive&&a.element.classList.remove(z.state.scrolling(b))},a.settings.scrollingThreshold)}function j(a,b){g(a,b),h(a,b)}function k(a){if("function"==typeof window.CustomEvent)return new CustomEvent(a);var b=document.createEvent("CustomEvent");return b.initCustomEvent(a,!1,!1,void 0),b}function l(a,b,c,d,e){void 0===d&&(d=!0),void 0===e&&(e=!1);var f;if("top"===b)f=["contentHeight","containerHeight","scrollTop","y","up","down"];else if("left"===b)f=["contentWidth","containerWidth","scrollLeft","x","left","right"];else throw new Error("A proper axis should be provided");m(a,c,f,d,e)}function m(a,b,c,d,e){var f=c[0],g=c[1],h=c[2],i=c[3],l=c[4],m=c[5];void 0===d&&(d=!0),void 0===e&&(e=!1);var n=a.element;// reset reach -a.reach[i]=null,1>n[h]&&(a.reach[i]="start"),n[h]>a[f]-a[g]-1&&(a.reach[i]="end"),b&&(n.dispatchEvent(k("ps-scroll-"+i)),0>b?n.dispatchEvent(k("ps-scroll-"+l)):0=a.railXWidth-a.scrollbarXWidth&&(a.scrollbarXLeft=a.railXWidth-a.scrollbarXWidth),a.scrollbarYTop>=a.railYHeight-a.scrollbarYHeight&&(a.scrollbarYTop=a.railYHeight-a.scrollbarYHeight),s(c,a),a.scrollbarXActive?c.classList.add(z.state.active("x")):(c.classList.remove(z.state.active("x")),a.scrollbarXWidth=0,a.scrollbarXLeft=0,c.scrollLeft=!0===a.isRtl?a.contentWidth:0),a.scrollbarYActive?c.classList.add(z.state.active("y")):(c.classList.remove(z.state.active("y")),a.scrollbarYHeight=0,a.scrollbarYTop=0,c.scrollTop=0)}function r(a,b){var c=Math.min,d=Math.max;return a.settings.minScrollbarLength&&(b=d(b,a.settings.minScrollbarLength)),a.settings.maxScrollbarLength&&(b=c(b,a.settings.maxScrollbarLength)),b}function s(a,c){var d={width:c.railXWidth},e=v(a.scrollTop);d.left=c.isRtl?c.negativeScrollAdjustment+a.scrollLeft+c.containerWidth-c.contentWidth:a.scrollLeft,c.isScrollbarXUsingBottom?d.bottom=c.scrollbarXBottom-e:d.top=c.scrollbarXTop+e,b(c.scrollbarXRail,d);var f={top:e,height:c.railYHeight};c.isScrollbarYUsingRight?c.isRtl?f.right=c.contentWidth-(c.negativeScrollAdjustment+a.scrollLeft)-c.scrollbarYRight-c.scrollbarYOuterWidth-9:f.right=c.scrollbarYRight-a.scrollLeft:c.isRtl?f.left=c.negativeScrollAdjustment+a.scrollLeft+2*c.containerWidth-c.contentWidth-c.scrollbarYLeft-c.scrollbarYOuterWidth:f.left=c.scrollbarYLeft+a.scrollLeft,b(c.scrollbarYRail,f),b(c.scrollbarX,{left:c.scrollbarXLeft,width:c.scrollbarXWidth-c.railBorderXWidth}),b(c.scrollbarY,{top:c.scrollbarYTop,height:c.scrollbarYHeight-c.railBorderYWidth})}function t(a,b){function c(b){b.touches&&b.touches[0]&&(b[k]=b.touches[0].pageY),s[o]=t+v*(b[k]-u),g(a,p),q(a),b.stopPropagation(),b.preventDefault()}function d(){h(a,p),a[r].classList.remove(z.state.clicking),a.event.unbind(a.ownerDocument,"mousemove",c)}function f(b,e){t=s[o],e&&b.touches&&(b[k]=b.touches[0].pageY),u=b[k],v=(a[j]-a[i])/(a[l]-a[n]),e?a.event.bind(a.ownerDocument,"touchmove",c):(a.event.bind(a.ownerDocument,"mousemove",c),a.event.once(a.ownerDocument,"mouseup",d),b.preventDefault()),a[r].classList.add(z.state.clicking),b.stopPropagation()}var i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],r=b[8],s=a.element,t=null,u=null,v=null;a.event.bind(a[m],"mousedown",function(a){f(a)}),a.event.bind(a[m],"touchstart",function(a){f(a,!0)})}var w="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),z={main:"ps",rtl:"ps__rtl",element:{thumb:function(a){return"ps__thumb-"+a},rail:function(a){return"ps__rail-"+a},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(a){return"ps--active-"+a},scrolling:function(a){return"ps--scrolling-"+a}}},A={x:null,y:null},B=function(a){this.element=a,this.handlers={}},C={isEmpty:{configurable:!0}};B.prototype.bind=function(a,b){"undefined"==typeof this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this.element.addEventListener(a,b,!1)},B.prototype.unbind=function(a,b){var c=this;this.handlers[a]=this.handlers[a].filter(function(d){return!!(b&&d!==b)||(c.element.removeEventListener(a,d,!1),!1)})},B.prototype.unbindAll=function(){for(var a in this.handlers)this.unbind(a)},C.isEmpty.get=function(){var a=this;return Object.keys(this.handlers).every(function(b){return 0===a.handlers[b].length})},Object.defineProperties(B.prototype,C);var D=function(){this.eventElements=[]};D.prototype.eventElement=function(a){var b=this.eventElements.filter(function(b){return b.element===a})[0];return b||(b=new B(a),this.eventElements.push(b)),b},D.prototype.bind=function(a,b,c){this.eventElement(a).bind(b,c)},D.prototype.unbind=function(a,b,c){var d=this.eventElement(a);d.unbind(b,c),d.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(d),1)},D.prototype.unbindAll=function(){this.eventElements.forEach(function(a){return a.unbindAll()}),this.eventElements=[]},D.prototype.once=function(a,b,c){var d=this.eventElement(a),e=function(a){d.unbind(b,e),c(a)};d.bind(b,e)};var E={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&0a.scrollbarYTop?1:-1;a.element.scrollTop+=d*a.containerHeight,q(a),b.stopPropagation()}),a.event.bind(a.scrollbarX,"mousedown",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarXRail,"mousedown",function(b){var c=b.pageX-window.pageXOffset-a.scrollbarXRail.getBoundingClientRect().left,d=c>a.scrollbarXLeft?1:-1;a.element.scrollLeft+=d*a.containerWidth,q(a),b.stopPropagation()})},"drag-thumb":function(a){t(a,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),t(a,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(a){function b(b,d){var e=v(c.scrollTop);if(0===b){if(!a.scrollbarYActive)return!1;if(0===e&&0=a.contentHeight-a.containerHeight&&0>d)return!a.settings.wheelPropagation}var f=c.scrollLeft;if(0===d){if(!a.scrollbarXActive)return!1;if(0===f&&0>b||f>=a.contentWidth-a.containerWidth&&0n[h]&&(a.reach[i]="start"),n[h]>a[f]-a[g]-1&&(a.reach[i]="end"),b&&(n.dispatchEvent(k("ps-scroll-"+i)),0>b?n.dispatchEvent(k("ps-scroll-"+l)):0=a.railXWidth-a.scrollbarXWidth&&(a.scrollbarXLeft=a.railXWidth-a.scrollbarXWidth),a.scrollbarYTop>=a.railYHeight-a.scrollbarYHeight&&(a.scrollbarYTop=a.railYHeight-a.scrollbarYHeight),s(c,a),a.scrollbarXActive?c.classList.add(z.state.active("x")):(c.classList.remove(z.state.active("x")),a.scrollbarXWidth=0,a.scrollbarXLeft=0,c.scrollLeft=!0===a.isRtl?a.contentWidth:0),a.scrollbarYActive?c.classList.add(z.state.active("y")):(c.classList.remove(z.state.active("y")),a.scrollbarYHeight=0,a.scrollbarYTop=0,c.scrollTop=0)}function r(a,b){var c=Math.min,d=Math.max;return a.settings.minScrollbarLength&&(b=d(b,a.settings.minScrollbarLength)),a.settings.maxScrollbarLength&&(b=c(b,a.settings.maxScrollbarLength)),b}function s(a,c){var d={width:c.railXWidth},e=v(a.scrollTop);d.left=c.isRtl?c.negativeScrollAdjustment+a.scrollLeft+c.containerWidth-c.contentWidth:a.scrollLeft,c.isScrollbarXUsingBottom?d.bottom=c.scrollbarXBottom-e:d.top=c.scrollbarXTop+e,b(c.scrollbarXRail,d);var f={top:e,height:c.railYHeight};c.isScrollbarYUsingRight?c.isRtl?f.right=c.contentWidth-(c.negativeScrollAdjustment+a.scrollLeft)-c.scrollbarYRight-c.scrollbarYOuterWidth-9:f.right=c.scrollbarYRight-a.scrollLeft:c.isRtl?f.left=c.negativeScrollAdjustment+a.scrollLeft+2*c.containerWidth-c.contentWidth-c.scrollbarYLeft-c.scrollbarYOuterWidth:f.left=c.scrollbarYLeft+a.scrollLeft,b(c.scrollbarYRail,f),b(c.scrollbarX,{left:c.scrollbarXLeft,width:c.scrollbarXWidth-c.railBorderXWidth}),b(c.scrollbarY,{top:c.scrollbarYTop,height:c.scrollbarYHeight-c.railBorderYWidth})}function t(a,b){function c(b){b.touches&&b.touches[0]&&(b[k]=b.touches[0].pageY),s[o]=t+v*(b[k]-u),g(a,p),q(a),b.stopPropagation(),b.preventDefault()}function d(){h(a,p),a[r].classList.remove(z.state.clicking),a.event.unbind(a.ownerDocument,"mousemove",c)}function f(b,e){t=s[o],e&&b.touches&&(b[k]=b.touches[0].pageY),u=b[k],v=(a[j]-a[i])/(a[l]-a[n]),e?a.event.bind(a.ownerDocument,"touchmove",c):(a.event.bind(a.ownerDocument,"mousemove",c),a.event.once(a.ownerDocument,"mouseup",d),b.preventDefault()),a[r].classList.add(z.state.clicking),b.stopPropagation()}var i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],r=b[8],s=a.element,t=null,u=null,v=null;a.event.bind(a[m],"mousedown",function(a){f(a)}),a.event.bind(a[m],"touchstart",function(a){f(a,!0)})}var w="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),z={main:"ps",rtl:"ps__rtl",element:{thumb:function(a){return"ps__thumb-"+a},rail:function(a){return"ps__rail-"+a},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(a){return"ps--active-"+a},scrolling:function(a){return"ps--scrolling-"+a}}},A={x:null,y:null},B=function(a){this.element=a,this.handlers={}},C={isEmpty:{configurable:!0}};B.prototype.bind=function(a,b){"undefined"==typeof this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this.element.addEventListener(a,b,!1)},B.prototype.unbind=function(a,b){var c=this;this.handlers[a]=this.handlers[a].filter(function(d){return!!(b&&d!==b)||(c.element.removeEventListener(a,d,!1),!1)})},B.prototype.unbindAll=function(){for(var a in this.handlers)this.unbind(a)},C.isEmpty.get=function(){var a=this;return Object.keys(this.handlers).every(function(b){return 0===a.handlers[b].length})},Object.defineProperties(B.prototype,C);var D=function(){this.eventElements=[]};D.prototype.eventElement=function(a){var b=this.eventElements.filter(function(b){return b.element===a})[0];return b||(b=new B(a),this.eventElements.push(b)),b},D.prototype.bind=function(a,b,c){this.eventElement(a).bind(b,c)},D.prototype.unbind=function(a,b,c){var d=this.eventElement(a);d.unbind(b,c),d.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(d),1)},D.prototype.unbindAll=function(){this.eventElements.forEach(function(a){return a.unbindAll()}),this.eventElements=[]},D.prototype.once=function(a,b,c){var d=this.eventElement(a),e=function(a){d.unbind(b,e),c(a)};d.bind(b,e)};var E={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&0a.scrollbarYTop?1:-1;a.element.scrollTop+=d*a.containerHeight,q(a),b.stopPropagation()}),a.event.bind(a.scrollbarX,"mousedown",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarXRail,"mousedown",function(b){var c=b.pageX-window.pageXOffset-a.scrollbarXRail.getBoundingClientRect().left,d=c>a.scrollbarXLeft?1:-1;a.element.scrollLeft+=d*a.containerWidth,q(a),b.stopPropagation()})},"drag-thumb":function(a){t(a,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),t(a,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(a){function b(b,d){var e=v(c.scrollTop);if(0===b){if(!a.scrollbarYActive)return!1;if(0===e&&0=a.contentHeight-a.containerHeight&&0>d)return!a.settings.wheelPropagation}var f=c.scrollLeft;if(0===d){if(!a.scrollbarXActive)return!1;if(0===f&&0>b||f>=a.contentWidth-a.containerWidth&&0u(a)?f||g:i||j,!d||!b.settings.wheelPropagation}function d(a){var b=a.deltaX,c=-1*a.deltaY;return("undefined"==typeof b||"undefined"==typeof c)&&(b=-1*a.wheelDeltaX/6,c=a.wheelDeltaY/6),a.deltaMode&&1===a.deltaMode&&(b*=10,c*=10),b!==b&&c!==c/* NaN checks */&&(b=0,c=a.wheelDelta),a.shiftKey?[-c,-b]:[b,c]}function f(b,c,d){// FIXME: this is a workaround for issue in FF and IE #571\n if (!env.isWebKit && element.querySelector('select:focus')) {\n return true;\n }\n\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function mousewheelHandler(e) {\n const [deltaX, deltaY] = getDeltaFromEvent(e);\n\n if (shouldBeConsumedByChild(e.target, deltaX, deltaY)) {\n return;\n }\n\n let shouldPrevent = false;\n if (!i.settings.useBothWheelAxes) {\n // deltaX will only be used for horizontal scrolling and deltaY will\n // only be used for vertical scrolling - this is the default\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else if (i.scrollbarYActive && !i.scrollbarXActive) {\n // only vertical scrollbar is active and useBothWheelAxes option is\n // active, so let's scroll vertical bar using both mouse wheel axes\n if (deltaY) {\n element.scrollTop -= deltaY * i.settings.wheelSpeed;\n } else {\n element.scrollTop += deltaX * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n } else if (i.scrollbarXActive && !i.scrollbarYActive) {\n // useBothWheelAxes and only horizontal bar is active, so use both\n // wheel axes for horizontal bar\n if (deltaX) {\n element.scrollLeft += deltaX * i.settings.wheelSpeed;\n } else {\n element.scrollLeft -= deltaY * i.settings.wheelSpeed;\n }\n shouldPrevent = true;\n }\n\n updateGeometry(i);\n\n shouldPrevent = shouldPrevent || shouldPreventDefault(deltaX, deltaY);\n if (shouldPrevent && !e.ctrlKey) {\n e.stopPropagation();\n e.preventDefault();\n }\n }\n\n if (typeof window.onwheel !== 'undefined') {\n i.event.bind(element, 'wheel', mousewheelHandler);\n } else if (typeof window.onmousewheel !== 'undefined') {\n i.event.bind(element, 'mousewheel', mousewheelHandler);\n }\n}\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport { toInt } from './lib/util';\n\nexport default function(i) {\n const element = i.element;\n const roundedScrollTop = Math.floor(element.scrollTop);\n const rect = element.getBoundingClientRect();\n\n i.containerWidth = Math.ceil(rect.width);\n i.containerHeight = Math.ceil(rect.height);\n i.contentWidth = element.scrollWidth;\n i.contentHeight = element.scrollHeight;\n\n if (!element.contains(i.scrollbarXRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('x')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarXRail);\n }\n if (!element.contains(i.scrollbarYRail)) {\n // clean up and append\n DOM.queryChildren(element, cls.element.rail('y')).forEach(el =>\n DOM.remove(el)\n );\n element.appendChild(i.scrollbarYRail);\n }\n\n if (\n !i.settings.suppressScrollX &&\n i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth\n ) {\n i.scrollbarXActive = true;\n i.railXWidth = i.containerWidth - i.railXMarginWidth;\n i.railXRatio = i.containerWidth / i.railXWidth;\n i.scrollbarXWidth = getThumbSize(\n i,\n toInt((i.railXWidth * i.containerWidth) / i.contentWidth)\n );\n i.scrollbarXLeft = toInt(\n ((i.negativeScrollAdjustment + element.scrollLeft) *\n (i.railXWidth - i.scrollbarXWidth)) /\n (i.contentWidth - i.containerWidth)\n );\n } else {\n i.scrollbarXActive = false;\n }\n\n if (\n !i.settings.suppressScrollY &&\n i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight\n ) {\n i.scrollbarYActive = true;\n i.railYHeight = i.containerHeight - i.railYMarginHeight;\n i.railYRatio = i.containerHeight / i.railYHeight;\n i.scrollbarYHeight = getThumbSize(\n i,\n toInt((i.railYHeight * i.containerHeight) / i.contentHeight)\n );\n i.scrollbarYTop = toInt(\n (roundedScrollTop * (i.railYHeight - i.scrollbarYHeight)) /\n (i.contentHeight - i.containerHeight)\n );\n } else {\n i.scrollbarYActive = false;\n }\n\n if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {\n i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;\n }\n if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {\n i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;\n }\n\n updateCss(element, i);\n\n if (i.scrollbarXActive) {\n element.classList.add(cls.state.active('x'));\n } else {\n element.classList.remove(cls.state.active('x'));\n i.scrollbarXWidth = 0;\n i.scrollbarXLeft = 0;\n element.scrollLeft = i.isRtl === true ? i.contentWidth : 0;\n }\n if (i.scrollbarYActive) {\n element.classList.add(cls.state.active('y'));\n } else {\n element.classList.remove(cls.state.active('y'));\n i.scrollbarYHeight = 0;\n i.scrollbarYTop = 0;\n element.scrollTop = 0;\n }\n}\n\nfunction getThumbSize(i, thumbSize) {\n if (i.settings.minScrollbarLength) {\n thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);\n }\n if (i.settings.maxScrollbarLength) {\n thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);\n }\n return thumbSize;\n}\n\nfunction updateCss(element, i) {\n const xRailOffset = { width: i.railXWidth };\n const roundedScrollTop = Math.floor(element.scrollTop);\n\n if (i.isRtl) {\n xRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth -\n i.contentWidth;\n } else {\n xRailOffset.left = element.scrollLeft;\n }\n if (i.isScrollbarXUsingBottom) {\n xRailOffset.bottom = i.scrollbarXBottom - roundedScrollTop;\n } else {\n xRailOffset.top = i.scrollbarXTop + roundedScrollTop;\n }\n CSS.set(i.scrollbarXRail, xRailOffset);\n\n const yRailOffset = { top: roundedScrollTop, height: i.railYHeight };\n if (i.isScrollbarYUsingRight) {\n if (i.isRtl) {\n yRailOffset.right =\n i.contentWidth -\n (i.negativeScrollAdjustment + element.scrollLeft) -\n i.scrollbarYRight -\n i.scrollbarYOuterWidth -\n 9;\n } else {\n yRailOffset.right = i.scrollbarYRight - element.scrollLeft;\n }\n } else {\n if (i.isRtl) {\n yRailOffset.left =\n i.negativeScrollAdjustment +\n element.scrollLeft +\n i.containerWidth * 2 -\n i.contentWidth -\n i.scrollbarYLeft -\n i.scrollbarYOuterWidth;\n } else {\n yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;\n }\n }\n CSS.set(i.scrollbarYRail, yRailOffset);\n\n CSS.set(i.scrollbarX, {\n left: i.scrollbarXLeft,\n width: i.scrollbarXWidth - i.railBorderXWidth,\n });\n CSS.set(i.scrollbarY, {\n top: i.scrollbarYTop,\n height: i.scrollbarYHeight - i.railBorderYWidth,\n });\n}\n","export function get(element) {\n return getComputedStyle(element);\n}\n\nexport function set(element, obj) {\n for (const key in obj) {\n let val = obj[key];\n if (typeof val === 'number') {\n val = `${val}px`;\n }\n element.style[key] = val;\n }\n return element;\n}\n","export function div(className) {\n const div = document.createElement('div');\n div.className = className;\n return div;\n}\n\nconst elMatches =\n typeof Element !== 'undefined' &&\n (Element.prototype.matches ||\n Element.prototype.webkitMatchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector);\n\nexport function matches(element, query) {\n if (!elMatches) {\n throw new Error('No element matching method supported');\n }\n\n return elMatches.call(element, query);\n}\n\nexport function remove(element) {\n if (element.remove) {\n element.remove();\n } else {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n }\n}\n\nexport function queryChildren(element, selector) {\n return Array.prototype.filter.call(element.children, child =>\n matches(child, selector)\n );\n}\n","const cls = {\n main: 'ps',\n rtl: 'ps__rtl',\n element: {\n thumb: x => `ps__thumb-${x}`,\n rail: x => `ps__rail-${x}`,\n consuming: 'ps__child--consume',\n },\n state: {\n focus: 'ps--focus',\n clicking: 'ps--clicking',\n active: x => `ps--active-${x}`,\n scrolling: x => `ps--scrolling-${x}`,\n },\n};\n\nexport default cls;\n\n/*\n * Helper methods\n */\nconst scrollingClassTimeout = { x: null, y: null };\n\nexport function addScrollingClass(i, x) {\n const classList = i.element.classList;\n const className = cls.state.scrolling(x);\n\n if (classList.contains(className)) {\n clearTimeout(scrollingClassTimeout[x]);\n } else {\n classList.add(className);\n }\n}\n\nexport function removeScrollingClass(i, x) {\n scrollingClassTimeout[x] = setTimeout(\n () => i.isAlive && i.element.classList.remove(cls.state.scrolling(x)),\n i.settings.scrollingThreshold\n );\n}\n\nexport function setScrollingClassInstantly(i, x) {\n addScrollingClass(i, x);\n removeScrollingClass(i, x);\n}\n","import { setScrollingClassInstantly } from './lib/class-names';\n\nfunction createEvent(name) {\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(name);\n } else {\n const evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(name, false, false, undefined);\n return evt;\n }\n}\n\nexport default function(\n i,\n axis,\n diff,\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n let fields;\n if (axis === 'top') {\n fields = [\n 'contentHeight',\n 'containerHeight',\n 'scrollTop',\n 'y',\n 'up',\n 'down',\n ];\n } else if (axis === 'left') {\n fields = [\n 'contentWidth',\n 'containerWidth',\n 'scrollLeft',\n 'x',\n 'left',\n 'right',\n ];\n } else {\n throw new Error('A proper axis should be provided');\n }\n\n processScrollDiff(i, diff, fields, useScrollingClass, forceFireReachEvent);\n}\n\nfunction processScrollDiff(\n i,\n diff,\n [contentHeight, containerHeight, scrollTop, y, up, down],\n useScrollingClass = true,\n forceFireReachEvent = false\n) {\n const element = i.element;\n\n // reset reach\n i.reach[y] = null;\n\n // 1 for subpixel rounding\n if (element[scrollTop] < 1) {\n i.reach[y] = 'start';\n }\n\n // 1 for subpixel rounding\n if (element[scrollTop] > i[contentHeight] - i[containerHeight] - 1) {\n i.reach[y] = 'end';\n }\n\n if (diff) {\n element.dispatchEvent(createEvent(`ps-scroll-${y}`));\n\n if (diff < 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${up}`));\n } else if (diff > 0) {\n element.dispatchEvent(createEvent(`ps-scroll-${down}`));\n }\n\n if (useScrollingClass) {\n setScrollingClassInstantly(i, y);\n }\n }\n\n if (i.reach[y] && (diff || forceFireReachEvent)) {\n element.dispatchEvent(createEvent(`ps-${y}-reach-${i.reach[y]}`));\n }\n}\n","import * as CSS from './css';\nimport * as DOM from './dom';\n\nexport function toInt(x) {\n return parseInt(x, 10) || 0;\n}\n\nexport function isEditable(el) {\n return (\n DOM.matches(el, 'input,[contenteditable]') ||\n DOM.matches(el, 'select,[contenteditable]') ||\n DOM.matches(el, 'textarea,[contenteditable]') ||\n DOM.matches(el, 'button,[contenteditable]')\n );\n}\n\nexport function outerWidth(element) {\n const styles = CSS.get(element);\n return (\n toInt(styles.width) +\n toInt(styles.paddingLeft) +\n toInt(styles.paddingRight) +\n toInt(styles.borderLeftWidth) +\n toInt(styles.borderRightWidth)\n );\n}\n\nexport const env = {\n isWebKit:\n typeof document !== 'undefined' &&\n 'WebkitAppearance' in document.documentElement.style,\n supportsTouch:\n typeof window !== 'undefined' &&\n ('ontouchstart' in window ||\n ('maxTouchPoints' in window.navigator &&\n window.navigator.maxTouchPoints > 0) ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)),\n supportsIePointer:\n typeof navigator !== 'undefined' && navigator.msMaxTouchPoints,\n isChrome:\n typeof navigator !== 'undefined' &&\n /Chrome/i.test(navigator && navigator.userAgent),\n};\n","import * as CSS from '../lib/css';\nimport * as DOM from '../lib/dom';\nimport cls, {\n addScrollingClass,\n removeScrollingClass,\n} from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { toInt } from '../lib/util';\n\nexport default function(i) {\n bindMouseScrollHandler(i, [\n 'containerWidth',\n 'contentWidth',\n 'pageX',\n 'railXWidth',\n 'scrollbarX',\n 'scrollbarXWidth',\n 'scrollLeft',\n 'x',\n 'scrollbarXRail',\n ]);\n bindMouseScrollHandler(i, [\n 'containerHeight',\n 'contentHeight',\n 'pageY',\n 'railYHeight',\n 'scrollbarY',\n 'scrollbarYHeight',\n 'scrollTop',\n 'y',\n 'scrollbarYRail',\n ]);\n}\n\nfunction bindMouseScrollHandler(\n i,\n [\n containerHeight,\n contentHeight,\n pageY,\n railYHeight,\n scrollbarY,\n scrollbarYHeight,\n scrollTop,\n y,\n scrollbarYRail,\n ]\n) {\n const element = i.element;\n\n let startingScrollTop = null;\n let startingMousePageY = null;\n let scrollBy = null;\n\n function mouseMoveHandler(e) {\n if (e.touches && e.touches[0]) {\n e[pageY] = e.touches[0].pageY;\n }\n element[scrollTop] =\n startingScrollTop + scrollBy * (e[pageY] - startingMousePageY);\n addScrollingClass(i, y);\n updateGeometry(i);\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n function mouseUpHandler() {\n removeScrollingClass(i, y);\n i[scrollbarYRail].classList.remove(cls.state.clicking);\n i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n }\n\n function bindMoves(e, touchMode) {\n startingScrollTop = element[scrollTop];\n if (touchMode && e.touches) {\n e[pageY] = e.touches[0].pageY;\n }\n startingMousePageY = e[pageY];\n scrollBy =\n (i[contentHeight] - i[containerHeight]) /\n (i[railYHeight] - i[scrollbarYHeight]);\n if (!touchMode) {\n i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);\n i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);\n e.preventDefault();\n } else {\n i.event.bind(i.ownerDocument, 'touchmove', mouseMoveHandler);\n }\n\n i[scrollbarYRail].classList.add(cls.state.clicking);\n\n e.stopPropagation();\n }\n\n i.event.bind(i[scrollbarY], 'mousedown', e => {\n bindMoves(e);\n });\n i.event.bind(i[scrollbarY], 'touchstart', e => {\n bindMoves(e, true);\n });\n}\n","class EventElement {\n constructor(element) {\n this.element = element;\n this.handlers = {};\n }\n\n bind(eventName, handler) {\n if (typeof this.handlers[eventName] === 'undefined') {\n this.handlers[eventName] = [];\n }\n this.handlers[eventName].push(handler);\n this.element.addEventListener(eventName, handler, false);\n }\n\n unbind(eventName, target) {\n this.handlers[eventName] = this.handlers[eventName].filter(handler => {\n if (target && handler !== target) {\n return true;\n }\n this.element.removeEventListener(eventName, handler, false);\n return false;\n });\n }\n\n unbindAll() {\n for (const name in this.handlers) {\n this.unbind(name);\n }\n }\n\n get isEmpty() {\n return Object.keys(this.handlers).every(\n key => this.handlers[key].length === 0\n );\n }\n}\n\nexport default class EventManager {\n constructor() {\n this.eventElements = [];\n }\n\n eventElement(element) {\n let ee = this.eventElements.filter(ee => ee.element === element)[0];\n if (!ee) {\n ee = new EventElement(element);\n this.eventElements.push(ee);\n }\n return ee;\n }\n\n bind(element, eventName, handler) {\n this.eventElement(element).bind(eventName, handler);\n }\n\n unbind(element, eventName, handler) {\n const ee = this.eventElement(element);\n ee.unbind(eventName, handler);\n\n if (ee.isEmpty) {\n // remove\n this.eventElements.splice(this.eventElements.indexOf(ee), 1);\n }\n }\n\n unbindAll() {\n this.eventElements.forEach(e => e.unbindAll());\n this.eventElements = [];\n }\n\n once(element, eventName, handler) {\n const ee = this.eventElement(element);\n const onceHandler = evt => {\n ee.unbind(eventName, onceHandler);\n handler(evt);\n };\n ee.bind(eventName, onceHandler);\n }\n}\n","import * as CSS from './lib/css';\nimport * as DOM from './lib/dom';\nimport cls from './lib/class-names';\nimport EventManager from './lib/event-manager';\nimport processScrollDiff from './process-scroll-diff';\nimport updateGeometry from './update-geometry';\nimport { toInt, outerWidth } from './lib/util';\n\nimport clickRail from './handlers/click-rail';\nimport dragThumb from './handlers/drag-thumb';\nimport keyboard from './handlers/keyboard';\nimport wheel from './handlers/mouse-wheel';\nimport touch from './handlers/touch';\n\nconst defaultSettings = () => ({\n handlers: ['click-rail', 'drag-thumb', 'keyboard', 'wheel', 'touch'],\n maxScrollbarLength: null,\n minScrollbarLength: null,\n scrollingThreshold: 1000,\n scrollXMarginOffset: 0,\n scrollYMarginOffset: 0,\n suppressScrollX: false,\n suppressScrollY: false,\n swipeEasing: true,\n useBothWheelAxes: false,\n wheelPropagation: true,\n wheelSpeed: 1,\n});\n\nconst handlers = {\n 'click-rail': clickRail,\n 'drag-thumb': dragThumb,\n keyboard,\n wheel,\n touch,\n};\n\nexport default class PerfectScrollbar {\n constructor(element, userSettings = {}) {\n if (typeof element === 'string') {\n element = document.querySelector(element);\n }\n\n if (!element || !element.nodeName) {\n throw new Error('no element is specified to initialize PerfectScrollbar');\n }\n\n this.element = element;\n\n element.classList.add(cls.main);\n\n this.settings = defaultSettings();\n for (const key in userSettings) {\n this.settings[key] = userSettings[key];\n }\n\n this.containerWidth = null;\n this.containerHeight = null;\n this.contentWidth = null;\n this.contentHeight = null;\n\n const focus = () => element.classList.add(cls.state.focus);\n const blur = () => element.classList.remove(cls.state.focus);\n\n this.isRtl = CSS.get(element).direction === 'rtl';\n if (this.isRtl === true) {\n element.classList.add(cls.rtl);\n }\n this.isNegativeScroll = (() => {\n const originalScrollLeft = element.scrollLeft;\n let result = null;\n element.scrollLeft = -1;\n result = element.scrollLeft < 0;\n element.scrollLeft = originalScrollLeft;\n return result;\n })();\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? element.scrollWidth - element.clientWidth\n : 0;\n this.event = new EventManager();\n this.ownerDocument = element.ownerDocument || document;\n\n this.scrollbarXRail = DOM.div(cls.element.rail('x'));\n element.appendChild(this.scrollbarXRail);\n this.scrollbarX = DOM.div(cls.element.thumb('x'));\n this.scrollbarXRail.appendChild(this.scrollbarX);\n this.scrollbarX.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarX, 'focus', focus);\n this.event.bind(this.scrollbarX, 'blur', blur);\n this.scrollbarXActive = null;\n this.scrollbarXWidth = null;\n this.scrollbarXLeft = null;\n const railXStyle = CSS.get(this.scrollbarXRail);\n this.scrollbarXBottom = parseInt(railXStyle.bottom, 10);\n if (isNaN(this.scrollbarXBottom)) {\n this.isScrollbarXUsingBottom = false;\n this.scrollbarXTop = toInt(railXStyle.top);\n } else {\n this.isScrollbarXUsingBottom = true;\n }\n this.railBorderXWidth =\n toInt(railXStyle.borderLeftWidth) + toInt(railXStyle.borderRightWidth);\n // Set rail to display:block to calculate margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(railXStyle.marginLeft) + toInt(railXStyle.marginRight);\n CSS.set(this.scrollbarXRail, { display: '' });\n this.railXWidth = null;\n this.railXRatio = null;\n\n this.scrollbarYRail = DOM.div(cls.element.rail('y'));\n element.appendChild(this.scrollbarYRail);\n this.scrollbarY = DOM.div(cls.element.thumb('y'));\n this.scrollbarYRail.appendChild(this.scrollbarY);\n this.scrollbarY.setAttribute('tabindex', 0);\n this.event.bind(this.scrollbarY, 'focus', focus);\n this.event.bind(this.scrollbarY, 'blur', blur);\n this.scrollbarYActive = null;\n this.scrollbarYHeight = null;\n this.scrollbarYTop = null;\n const railYStyle = CSS.get(this.scrollbarYRail);\n this.scrollbarYRight = parseInt(railYStyle.right, 10);\n if (isNaN(this.scrollbarYRight)) {\n this.isScrollbarYUsingRight = false;\n this.scrollbarYLeft = toInt(railYStyle.left);\n } else {\n this.isScrollbarYUsingRight = true;\n }\n this.scrollbarYOuterWidth = this.isRtl ? outerWidth(this.scrollbarY) : null;\n this.railBorderYWidth =\n toInt(railYStyle.borderTopWidth) + toInt(railYStyle.borderBottomWidth);\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railYMarginHeight =\n toInt(railYStyle.marginTop) + toInt(railYStyle.marginBottom);\n CSS.set(this.scrollbarYRail, { display: '' });\n this.railYHeight = null;\n this.railYRatio = null;\n\n this.reach = {\n x:\n element.scrollLeft <= 0\n ? 'start'\n : element.scrollLeft >= this.contentWidth - this.containerWidth\n ? 'end'\n : null,\n y:\n element.scrollTop <= 0\n ? 'start'\n : element.scrollTop >= this.contentHeight - this.containerHeight\n ? 'end'\n : null,\n };\n\n this.isAlive = true;\n\n this.settings.handlers.forEach(handlerName => handlers[handlerName](this));\n\n this.lastScrollTop = Math.floor(element.scrollTop); // for onScroll only\n this.lastScrollLeft = element.scrollLeft; // for onScroll only\n this.event.bind(this.element, 'scroll', e => this.onScroll(e));\n updateGeometry(this);\n }\n\n update() {\n if (!this.isAlive) {\n return;\n }\n\n // Recalcuate negative scrollLeft adjustment\n this.negativeScrollAdjustment = this.isNegativeScroll\n ? this.element.scrollWidth - this.element.clientWidth\n : 0;\n\n // Recalculate rail margins\n CSS.set(this.scrollbarXRail, { display: 'block' });\n CSS.set(this.scrollbarYRail, { display: 'block' });\n this.railXMarginWidth =\n toInt(CSS.get(this.scrollbarXRail).marginLeft) +\n toInt(CSS.get(this.scrollbarXRail).marginRight);\n this.railYMarginHeight =\n toInt(CSS.get(this.scrollbarYRail).marginTop) +\n toInt(CSS.get(this.scrollbarYRail).marginBottom);\n\n // Hide scrollbars not to affect scrollWidth and scrollHeight\n CSS.set(this.scrollbarXRail, { display: 'none' });\n CSS.set(this.scrollbarYRail, { display: 'none' });\n\n updateGeometry(this);\n\n processScrollDiff(this, 'top', 0, false, true);\n processScrollDiff(this, 'left', 0, false, true);\n\n CSS.set(this.scrollbarXRail, { display: '' });\n CSS.set(this.scrollbarYRail, { display: '' });\n }\n\n onScroll(e) {\n if (!this.isAlive) {\n return;\n }\n\n updateGeometry(this);\n processScrollDiff(this, 'top', this.element.scrollTop - this.lastScrollTop);\n processScrollDiff(\n this,\n 'left',\n this.element.scrollLeft - this.lastScrollLeft\n );\n\n this.lastScrollTop = Math.floor(this.element.scrollTop);\n this.lastScrollLeft = this.element.scrollLeft;\n }\n\n destroy() {\n if (!this.isAlive) {\n return;\n }\n\n this.event.unbindAll();\n DOM.remove(this.scrollbarX);\n DOM.remove(this.scrollbarY);\n DOM.remove(this.scrollbarXRail);\n DOM.remove(this.scrollbarYRail);\n this.removePsClasses();\n\n // unset elements\n this.element = null;\n this.scrollbarX = null;\n this.scrollbarY = null;\n this.scrollbarXRail = null;\n this.scrollbarYRail = null;\n\n this.isAlive = false;\n }\n\n removePsClasses() {\n this.element.className = this.element.className\n .split(' ')\n .filter(name => !name.match(/^ps([-_].+|)$/))\n .join(' ');\n }\n}\n","import updateGeometry from '../update-geometry';\n\nexport default function(i) {\n const element = i.element;\n\n i.event.bind(i.scrollbarY, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarYRail, 'mousedown', e => {\n const positionTop =\n e.pageY -\n window.pageYOffset -\n i.scrollbarYRail.getBoundingClientRect().top;\n const direction = positionTop > i.scrollbarYTop ? 1 : -1;\n\n i.element.scrollTop += direction * i.containerHeight;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n\n i.event.bind(i.scrollbarX, 'mousedown', e => e.stopPropagation());\n i.event.bind(i.scrollbarXRail, 'mousedown', e => {\n const positionLeft =\n e.pageX -\n window.pageXOffset -\n i.scrollbarXRail.getBoundingClientRect().left;\n const direction = positionLeft > i.scrollbarXLeft ? 1 : -1;\n\n i.element.scrollLeft += direction * i.containerWidth;\n updateGeometry(i);\n\n e.stopPropagation();\n });\n}\n","import * as DOM from '../lib/dom';\nimport updateGeometry from '../update-geometry';\nimport { isEditable } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n const elementHovered = () => DOM.matches(element, ':hover');\n const scrollbarFocused = () =>\n DOM.matches(i.scrollbarX, ':focus') || DOM.matches(i.scrollbarY, ':focus');\n\n function shouldPreventDefault(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n if (deltaX === 0) {\n if (!i.scrollbarYActive) {\n return false;\n }\n if (\n (scrollTop === 0 && deltaY > 0) ||\n (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n\n const scrollLeft = element.scrollLeft;\n if (deltaY === 0) {\n if (!i.scrollbarXActive) {\n return false;\n }\n if (\n (scrollLeft === 0 && deltaX < 0) ||\n (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)\n ) {\n return !i.settings.wheelPropagation;\n }\n }\n return true;\n }\n\n i.event.bind(i.ownerDocument, 'keydown', e => {\n if (\n (e.isDefaultPrevented && e.isDefaultPrevented()) ||\n e.defaultPrevented\n ) {\n return;\n }\n\n if (!elementHovered() && !scrollbarFocused()) {\n return;\n }\n\n let activeElement = document.activeElement\n ? document.activeElement\n : i.ownerDocument.activeElement;\n if (activeElement) {\n if (activeElement.tagName === 'IFRAME') {\n activeElement = activeElement.contentDocument.activeElement;\n } else {\n // go deeper if element is a webcomponent\n while (activeElement.shadowRoot) {\n activeElement = activeElement.shadowRoot.activeElement;\n }\n }\n if (isEditable(activeElement)) {\n return;\n }\n }\n\n let deltaX = 0;\n let deltaY = 0;\n\n switch (e.which) {\n case 37: // left\n if (e.metaKey) {\n deltaX = -i.contentWidth;\n } else if (e.altKey) {\n deltaX = -i.containerWidth;\n } else {\n deltaX = -30;\n }\n break;\n case 38: // up\n if (e.metaKey) {\n deltaY = i.contentHeight;\n } else if (e.altKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = 30;\n }\n break;\n case 39: // right\n if (e.metaKey) {\n deltaX = i.contentWidth;\n } else if (e.altKey) {\n deltaX = i.containerWidth;\n } else {\n deltaX = 30;\n }\n break;\n case 40: // down\n if (e.metaKey) {\n deltaY = -i.contentHeight;\n } else if (e.altKey) {\n deltaY = -i.containerHeight;\n } else {\n deltaY = -30;\n }\n break;\n case 32: // space bar\n if (e.shiftKey) {\n deltaY = i.containerHeight;\n } else {\n deltaY = -i.containerHeight;\n }\n break;\n case 33: // page up\n deltaY = i.containerHeight;\n break;\n case 34: // page down\n deltaY = -i.containerHeight;\n break;\n case 36: // home\n deltaY = i.contentHeight;\n break;\n case 35: // end\n deltaY = -i.contentHeight;\n break;\n default:\n return;\n }\n\n if (i.settings.suppressScrollX && deltaX !== 0) {\n return;\n }\n if (i.settings.suppressScrollY && deltaY !== 0) {\n return;\n }\n\n element.scrollTop -= deltaY;\n element.scrollLeft += deltaX;\n updateGeometry(i);\n\n if (shouldPreventDefault(deltaX, deltaY)) {\n e.preventDefault();\n }\n });\n}\n","import updateGeometry from '../update-geometry';\nimport cls from '../lib/class-names';\nimport * as CSS from '../lib/css';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n if (!env.supportsTouch && !env.supportsIePointer) {\n return;\n }\n\n const element = i.element;\n\n function shouldPrevent(deltaX, deltaY) {\n const scrollTop = Math.floor(element.scrollTop);\n const scrollLeft = element.scrollLeft;\n const magnitudeX = Math.abs(deltaX);\n const magnitudeY = Math.abs(deltaY);\n\n if (magnitudeY > magnitudeX) {\n // user is perhaps trying to swipe up/down the page\n\n if (\n (deltaY < 0 && scrollTop === i.contentHeight - i.containerHeight) ||\n (deltaY > 0 && scrollTop === 0)\n ) {\n // set prevent for mobile Chrome refresh\n return window.scrollY === 0 && deltaY > 0 && env.isChrome;\n }\n } else if (magnitudeX > magnitudeY) {\n // user is perhaps trying to swipe left/right across the page\n\n if (\n (deltaX < 0 && scrollLeft === i.contentWidth - i.containerWidth) ||\n (deltaX > 0 && scrollLeft === 0)\n ) {\n return true;\n }\n }\n\n return true;\n }\n\n function applyTouchMove(differenceX, differenceY) {\n element.scrollTop -= differenceY;\n element.scrollLeft -= differenceX;\n\n updateGeometry(i);\n }\n\n let startOffset = {};\n let startTime = 0;\n let speed = {};\n let easingLoop = null;\n\n function getTouch(e) {\n if (e.targetTouches) {\n return e.targetTouches[0];\n } else {\n // Maybe IE pointer\n return e;\n }\n }\n\n function shouldHandle(e) {\n if (e.pointerType && e.pointerType === 'pen' && e.buttons === 0) {\n return false;\n }\n if (e.targetTouches && e.targetTouches.length === 1) {\n return true;\n }\n if (\n e.pointerType &&\n e.pointerType !== 'mouse' &&\n e.pointerType !== e.MSPOINTER_TYPE_MOUSE\n ) {\n return true;\n }\n return false;\n }\n\n function touchStart(e) {\n if (!shouldHandle(e)) {\n return;\n }\n\n const touch = getTouch(e);\n\n startOffset.pageX = touch.pageX;\n startOffset.pageY = touch.pageY;\n\n startTime = new Date().getTime();\n\n if (easingLoop !== null) {\n clearInterval(easingLoop);\n }\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n if (!element.contains(target)) {\n return false;\n }\n\n let cursor = target;\n\n while (cursor && cursor !== element) {\n if (cursor.classList.contains(cls.element.consuming)) {\n return true;\n }\n\n const style = CSS.get(cursor);\n\n // if deltaY && vertical scrollable\n if (deltaY && style.overflowY.match(/(scroll|auto)/)) {\n const maxScrollTop = cursor.scrollHeight - cursor.clientHeight;\n if (maxScrollTop > 0) {\n if (\n (cursor.scrollTop > 0 && deltaY < 0) ||\n (cursor.scrollTop < maxScrollTop && deltaY > 0)\n ) {\n return true;\n }\n }\n }\n // if deltaX && horizontal scrollable\n if (deltaX && style.overflowX.match(/(scroll|auto)/)) {\n const maxScrollLeft = cursor.scrollWidth - cursor.clientWidth;\n if (maxScrollLeft > 0) {\n if (\n (cursor.scrollLeft > 0 && deltaX < 0) ||\n (cursor.scrollLeft < maxScrollLeft && deltaX > 0)\n ) {\n return true;\n }\n }\n }\n\n cursor = cursor.parentNode;\n }\n\n return false;\n }\n\n function touchMove(e) {\n if (shouldHandle(e)) {\n const touch = getTouch(e);\n\n const currentOffset = { pageX: touch.pageX, pageY: touch.pageY };\n\n const differenceX = currentOffset.pageX - startOffset.pageX;\n const differenceY = currentOffset.pageY - startOffset.pageY;\n\n if (shouldBeConsumedByChild(e.target, differenceX, differenceY)) {\n return;\n }\n\n applyTouchMove(differenceX, differenceY);\n startOffset = currentOffset;\n\n const currentTime = new Date().getTime();\n\n const timeGap = currentTime - startTime;\n if (timeGap > 0) {\n speed.x = differenceX / timeGap;\n speed.y = differenceY / timeGap;\n startTime = currentTime;\n }\n\n if (shouldPrevent(differenceX, differenceY)) {\n e.preventDefault();\n }\n }\n }\n function touchEnd() {\n if (i.settings.swipeEasing) {\n clearInterval(easingLoop);\n easingLoop = setInterval(function() {\n if (i.isInitialized) {\n clearInterval(easingLoop);\n return;\n }\n\n if (!speed.x && !speed.y) {\n clearInterval(easingLoop);\n return;\n }\n\n if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {\n clearInterval(easingLoop);\n return;\n }\n\n applyTouchMove(speed.x * 30, speed.y * 30);\n\n speed.x *= 0.8;\n speed.y *= 0.8;\n }, 10);\n }\n }\n\n if (env.supportsTouch) {\n i.event.bind(element, 'touchstart', touchStart);\n i.event.bind(element, 'touchmove', touchMove);\n i.event.bind(element, 'touchend', touchEnd);\n } else if (env.supportsIePointer) {\n if (window.PointerEvent) {\n i.event.bind(element, 'pointerdown', touchStart);\n i.event.bind(element, 'pointermove', touchMove);\n i.event.bind(element, 'pointerup', touchEnd);\n } else if (window.MSPointerEvent) {\n i.event.bind(element, 'MSPointerDown', touchStart);\n i.event.bind(element, 'MSPointerMove', touchMove);\n i.event.bind(element, 'MSPointerUp', touchEnd);\n }\n }\n}\n"],"names":["Math","abs","floor","get","element","getComputedStyle","set","obj","const","key","let","val","style","div","className","document","createElement","matches","query","elMatches","Error","call","remove","parentNode","removeChild","queryChildren","selector","Array","prototype","filter","children","child","addScrollingClass","i","x","classList","cls","state","scrolling","contains","clearTimeout","scrollingClassTimeout","add","removeScrollingClass","setTimeout","isAlive","settings","scrollingThreshold","setScrollingClassInstantly","createEvent","name","window","CustomEvent","evt","initCustomEvent","axis","diff","useScrollingClass","forceFireReachEvent","fields","processScrollDiff","ref","reach","y","scrollTop","contentHeight","containerHeight","dispatchEvent","up","down","toInt","parseInt","isEditable","el","DOM.matches","outerWidth","styles","CSS.get","width","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","ceil","roundedScrollTop","rect","getBoundingClientRect","containerWidth","height","contentWidth","scrollWidth","scrollHeight","scrollbarXRail","DOM.queryChildren","rail","forEach","DOM.remove","appendChild","scrollbarYRail","suppressScrollX","scrollXMarginOffset","scrollbarXActive","railXWidth","railXMarginWidth","railXRatio","scrollbarXWidth","getThumbSize","scrollbarXLeft","negativeScrollAdjustment","scrollLeft","suppressScrollY","scrollYMarginOffset","scrollbarYActive","railYHeight","railYMarginHeight","railYRatio","scrollbarYHeight","scrollbarYTop","updateCss","active","isRtl","thumbSize","min","max","minScrollbarLength","maxScrollbarLength","xRailOffset","left","isScrollbarXUsingBottom","bottom","scrollbarXBottom","top","scrollbarXTop","CSS.set","yRailOffset","isScrollbarYUsingRight","right","scrollbarYRight","scrollbarYOuterWidth","scrollbarYLeft","scrollbarX","railBorderXWidth","scrollbarY","railBorderYWidth","bindMouseScrollHandler","mouseMoveHandler","e","touches","pageY","startingScrollTop","scrollBy","startingMousePageY","updateGeometry","stopPropagation","preventDefault","mouseUpHandler","clicking","event","unbind","ownerDocument","bindMoves","touchMode","bind","once","Element","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","main","rtl","thumb","consuming","focus","EventElement","handlers","eventName","handler","push","addEventListener","target","this","removeEventListener","unbindAll","prototypeAccessors","isEmpty","Object","keys","every","length","EventManager","eventElements","eventElement","ee","splice","indexOf","onceHandler","env","isWebKit","documentElement","supportsTouch","navigator","maxTouchPoints","DocumentTouch","supportsIePointer","msMaxTouchPoints","isChrome","test","userAgent","defaultSettings","swipeEasing","useBothWheelAxes","wheelPropagation","wheelSpeed","positionTop","pageYOffset","direction","positionLeft","pageX","pageXOffset","shouldPreventDefault","deltaX","deltaY","elementHovered","scrollbarFocused","isDefaultPrevented","defaultPrevented","activeElement","tagName","contentDocument","shadowRoot","which","metaKey","altKey","shiftKey","hitsBound","isTop","isBottom","offsetHeight","isLeft","isRight","offsetWidth","getDeltaFromEvent","wheelDeltaX","wheelDeltaY","deltaMode","wheelDelta","shouldBeConsumedByChild","querySelector","cursor","overflowY","match","maxScrollTop","clientHeight","overflowX","maxScrollLeft","clientWidth","mousewheelHandler","shouldPrevent","ctrlKey","onwheel","onmousewheel","magnitudeX","magnitudeY","scrollY","applyTouchMove","differenceX","differenceY","getTouch","targetTouches","shouldHandle","pointerType","buttons","MSPOINTER_TYPE_MOUSE","touchStart","touch","startOffset","startTime","Date","getTime","easingLoop","clearInterval","touchMove","currentOffset","currentTime","timeGap","speed","touchEnd","setInterval","isInitialized","PointerEvent","MSPointerEvent","PerfectScrollbar","userSettings","nodeName","blur","isNegativeScroll","originalScrollLeft","result","DOM.div","setAttribute","railXStyle","isNaN","display","marginLeft","marginRight","railYStyle","borderTopWidth","borderBottomWidth","marginTop","marginBottom","handlerName","lastScrollTop","lastScrollLeft","onScroll","update","destroy","removePsClasses","split","join"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"perfect-scrollbar.min.js","sources":["../src/handlers/mouse-wheel.js","../src/update-geometry.js","../src/lib/css.js","../src/lib/dom.js","../src/lib/class-names.js","../src/process-scroll-diff.js","../src/lib/util.js","../src/handlers/drag-thumb.js","../src/lib/event-manager.js","../src/index.js","../src/handlers/click-rail.js","../src/handlers/keyboard.js","../src/handlers/touch.js"],"sourcesContent":["import * as CSS from '../lib/css';\nimport cls from '../lib/class-names';\nimport updateGeometry from '../update-geometry';\nimport { env } from '../lib/util';\n\nexport default function(i) {\n const element = i.element;\n\n let shouldPrevent = false;\n\n function shouldPreventDefault(deltaX, deltaY) {\n const roundedScrollTop = Math.floor(element.scrollTop);\n const isTop = element.scrollTop === 0;\n const isBottom =\n roundedScrollTop + element.offsetHeight === element.scrollHeight;\n const isLeft = element.scrollLeft === 0;\n const isRight =\n element.scrollLeft + element.offsetWidth === element.scrollWidth;\n\n let hitsBound;\n\n // pick axis with primary direction\n if (Math.abs(deltaY) > Math.abs(deltaX)) {\n hitsBound = isTop || isBottom;\n } else {\n hitsBound = isLeft || isRight;\n }\n\n return hitsBound ? !i.settings.wheelPropagation : true;\n }\n\n function getDeltaFromEvent(e) {\n let deltaX = e.deltaX;\n let deltaY = -1 * e.deltaY;\n\n if (typeof deltaX === 'undefined' || typeof deltaY === 'undefined') {\n // OS X Safari\n deltaX = (-1 * e.wheelDeltaX) / 6;\n deltaY = e.wheelDeltaY / 6;\n }\n\n if (e.deltaMode && e.deltaMode === 1) {\n // Firefox in deltaMode 1: Line scrolling\n deltaX *= 10;\n deltaY *= 10;\n }\n\n if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {\n // IE in some mouse drivers\n deltaX = 0;\n deltaY = e.wheelDelta;\n }\n\n if (e.shiftKey) {\n // reverse axis with shift key\n return [-deltaY, -deltaX];\n }\n return [deltaX, deltaY];\n }\n\n function shouldBeConsumedByChild(target, deltaX, deltaY) {\n // FIXME: this is a workaround for