{"version":3,"file":"javascripts/chunks/be84f7c976236165fa4b.floating-layer.js","mappings":"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","sources":["webpack:///./components/floating-layer/javascripts/floating-layer.js","webpack:///./javascripts/dom/select.js","webpack:///./javascripts/helpers/baseModule.js","webpack:///./javascripts/helpers/inViewport.js"],"sourcesContent":["import BaseModule from '../../../javascripts/helpers/baseModule';\nimport inViewport from '../../../javascripts/helpers/inViewport';\n\nexport default class FloatingLayer extends BaseModule {\n constructor(element) {\n super(element, element.getAttribute('data-js-module'));\n this.getElements([\n {\n id: 'toggle',\n selector: 'toggle'\n },\n {\n id: 'layer',\n selector: 'layer'\n }\n ]);\n\n this.bindEvents();\n }\n\n static isCollapsed(element) {\n return element.getAttribute('aria-expanded') !== 'true';\n }\n\n static unfold(element, layer) {\n layer.setAttribute('aria-hidden', 'false');\n element.setAttribute('aria-expanded', 'true');\n element.setAttribute('disabled', '');\n element.style.visibility = 'hidden';\n }\n\n static collapse(element, layer) {\n layer.setAttribute('aria-hidden', 'true');\n element.setAttribute('aria-expanded', 'false');\n element.removeAttribute('disabled');\n element.style.visibility = 'visible';\n }\n\n toogleLayer() {\n const isCollapsed = this.constructor.isCollapsed(this.elements.toggle);\n if (isCollapsed) {\n this.constructor.unfold(this.elements.toggle, this.elements.layer);\n } else {\n this.constructor.collapse(this.elements.toggle, this.elements.layer);\n }\n }\n\n bindEvents() {\n document.addEventListener('click', (event) => {\n if (\n !event.target.closest('[data-js-element=\"floating-layer__layer\"]') &&\n event.target !== this.elements.toggle\n ) {\n this.constructor.collapse(this.elements.toggle, this.elements.layer);\n }\n });\n\n this.elements.toggle.addEventListener('click', this.toogleLayer.bind(this));\n\n inViewport(this.elements.layer, 0.8, (entries) => {\n if (!entries[0].isIntersecting && entries[0].boundingClientRect.top < 0)\n this.constructor.collapse(this.elements.toggle, this.elements.layer);\n });\n }\n}\n","/**\n * This methods selects Elements from a specific context by a selector\n * @param {string} selector Selector of the element to find\n * @param {Element|HTMLDocument} [element] Context of the selectable\n * @returns {Array} Am array with selected Elements\n */\nexport default (selector, element = window.document) =>\n [].slice.call(element.querySelectorAll(selector));\n","import select from '../dom/select';\n\nclass BaseModule {\n constructor(element, id) {\n this.id = id;\n this.elements = {\n self: element\n };\n\n this.setInitialized();\n }\n\n setInitialized() {\n if (this.elements.self) {\n this.elements.self.setAttribute('data-js-module-initialized', true);\n }\n }\n\n setUnInitialized() {\n if (this.elements.self) {\n this.elements.self.removeAttribute('data-js-module-initialized');\n }\n }\n\n /**\n * Selects DOMElements of a module with a specific data attribute (`data-js-element=\"${module}__${selector}\"`)\n * Receives an object where the id param is the key in the elements cache\n * The selector param of the config is the selector part in the query-selector described above\n * @param {Object} config Configuration object in a key value format\n * @returns {void}\n */\n getElements(config) {\n const elementsConfig = config.map((elementConfig) => ({\n ...elementConfig,\n selector: `${this.id}__${elementConfig.selector}`\n }));\n\n const domElements = select('[data-js-element]', this.elements.self);\n\n for (let i = 0; i < domElements.length; i += 1) {\n const domElement = domElements[i];\n const elementConfigCandidates = elementsConfig.filter(\n (singleConfig) =>\n domElement.getAttribute('data-js-element') === singleConfig.selector\n );\n\n const [elementConfig] = elementConfigCandidates;\n\n if (elementConfig) {\n if (typeof this.elements[elementConfig.id] === 'undefined') {\n this.elements[elementConfig.id] = domElement;\n } else {\n if (typeof this.elements[elementConfig.id].push === 'undefined') {\n this.elements[elementConfig.id] = [this.elements[elementConfig.id]];\n }\n this.elements[elementConfig.id].push(domElement);\n }\n }\n }\n\n /*\n * Append a attribute \"asList\" to each element/s in this.elements\n * which is always an array no matter if element/s is an array\n * or a single HTMLElement\n */\n\n const asList = (obj) => (typeof obj.push === 'undefined' ? [obj] : obj);\n Object.values(this.elements).forEach((obj) => {\n obj.asList = asList(obj); // eslint-disable-line no-param-reassign\n });\n }\n}\n\nexport default BaseModule;\n","/**\n * Makes use of the observer API to check when an element\n * enters the viewport and applys a class\n * @param {element} element Element to check\n * @param {number} threshold Determines how much of the element has to be visibile\n * @param {func} callback Callback function\n * @returns {void}\n */\nexport default (element, threshold, callback) => {\n let observer = null;\n\n const intersectionObserverOptions = {\n threshold\n };\n\n observer = new IntersectionObserver(callback, intersectionObserverOptions);\n observer.observe(element);\n};\n"],"names":["FloatingLayer","element","getAttribute","getElements","id","selector","bindEvents","layer","setAttribute","style","visibility","removeAttribute","this","constructor","isCollapsed","elements","toggle","unfold","collapse","document","addEventListener","event","target","closest","toogleLayer","bind","inViewport","entries","isIntersecting","boundingClientRect","top","BaseModule","window","slice","call","querySelectorAll","self","setInitialized","config","elementsConfig","map","elementConfig","domElements","select","i","domElement","filter","singleConfig","push","length","Object","values","forEach","obj","asList","threshold","callback","IntersectionObserver","observe"],"sourceRoot":""}