{"version":3,"sources":["scrollbar.js"],"names":["Manipulator","SelectorEngine","isElement","SELECTOR_FIXED_CONTENT","SELECTOR_STICKY_CONTENT","PROPERTY_PADDING","PROPERTY_MARGIN","ScrollBarHelper","_createClass","_classCallCheck","this","_element","document","body","key","value","documentWidth","documentElement","clientWidth","Math","abs","window","innerWidth","width","getWidth","_disableOverFlow","_setElementAttributes","calculatedValue","_resetElementAttributes","_saveInitialAttribute","style","overflow","selector","styleProperty","callback","_this","scrollbarWidth","_applyManipulationCallback","element","getComputedStyle","getPropertyValue","setProperty","concat","Number","parseFloat","actualValue","setDataAttribute","getDataAttribute","removeProperty","removeDataAttribute","callBack","_step","_iterator","_createForOfIteratorHelper","find","s","n","done","err","e","f"],"mappings":"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","file":"scrollbar.js","sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport Manipulator from '../dom/manipulator.js'\nimport SelectorEngine from '../dom/selector-engine.js'\nimport { isElement } from './index.js'\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\nconst PROPERTY_PADDING = 'padding-right'\nconst PROPERTY_MARGIN = 'margin-right'\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth\n return Math.abs(window.innerWidth - documentWidth)\n }\n\n hide() {\n const width = this.getWidth()\n this._disableOverFlow()\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width)\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width)\n }\n\n reset() {\n this._resetElementAttributes(this._element, 'overflow')\n this._resetElementAttributes(this._element, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING)\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN)\n }\n\n isOverflowing() {\n return this.getWidth() > 0\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow')\n this._element.style.overflow = 'hidden'\n }\n\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth()\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return\n }\n\n this._saveInitialAttribute(element, styleProperty)\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty)\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty)\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue)\n }\n }\n\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty)\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty)\n return\n }\n\n Manipulator.removeDataAttribute(element, styleProperty)\n element.style.setProperty(styleProperty, value)\n }\n\n this._applyManipulationCallback(selector, manipulationCallBack)\n }\n\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector)\n return\n }\n\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel)\n }\n }\n}\n\nexport default ScrollBarHelper\n"]}