{"version":3,"sources":["webpack:///./src/client/default/js/components/dropdownComponent.js","webpack:///./src/client/default/js/base/baseComponent.js"],"names":["DropdownComponent","element","timeout","trap","handleEscapeTrigger","bindEvents","this","CUSTOM_MESSAGES","DROPDOWN_EVENTS","show","close","panel","trigger","closeDropdownTrigger","$el","closest","parentElement","classList","contains","CLASSES","open","animate","active","$container","querySelector","SELECTORS","HTMLElement","container","content","parentClasses","panelClasses","parent","$panel","add","setTimeout","innerHTML","$trigger","setModalTrap","EMIT","opening","e","console","error","target","focusTrap","clickOutsideDeactivates","activate","remove","deactivate","anyFocus","match","$on","preventDefault","clearTimeout","closeTimeout","openTimeout","inputInside","querySelectorAll","forEach","el","checkIfFocus","document","addEventListener","key","closeDropdown","length","click","$options","handle","bindHover","bindClick","form","activeElement","localName","BaseComponent","_componentElement","setAttribute","_checkMessages","compOptions","options","dataset","Object","keys","filter","entry","includes","optionValue","cleanEntry","cleanOptionKey","JSON","parse","replace","convertType","deepFreeze","getAttribute","events","cb","elements","Bean","on","stopPropagation","one","off","fire","message","_loading","LOADER_EVENTS","body","icon","hide","option","optionReturn","str","charAt","toLocaleLowerCase","slice","BaseGiaComponent"],"mappings":"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","file":"js/component-dropdownComponent-js.chunks.js","sourcesContent":["import { match } from '../utilities/resolutionHandler';\nimport BaseComponent from '../base/baseComponent';\nimport * as focusTrap from 'focus-trap';\n\nexport default class DropdownComponent extends BaseComponent {\n get Messages() {\n return {\n [this.CUSTOM_MESSAGES.DROPDOWN_EVENTS.show]: this.close\n };\n }\n\n get SELECTORS() {\n return {\n panel: '.js-dropdown-panel',\n trigger: '.js-dropdown-trigger',\n closeDropdownTrigger: '.js-close-dropdown'\n };\n }\n\n get PARENT() {\n return this.$el.closest('.js-dropdown-container');\n }\n\n get IS_OPEN() {\n return this.$el.parentElement.classList.contains(this.CLASSES.open);\n }\n\n constructor(element) {\n super(element);\n\n this.timeout = null;\n this.trap = null;\n this.handleEscapeTrigger();\n\n this.bindEvents();\n }\n\n get CLASSES() {\n return {\n open: 'open',\n animate: 'animate',\n active: 'active'\n };\n }\n\n /**\n * @return {HTMLElement | undefined}\n */\n get $panel() {\n if (this.panel) return this.panel;\n const panel = this.$container.querySelector(this.SELECTORS.panel);\n if (panel instanceof HTMLElement) {\n this.panel = panel;\n return panel;\n }\n return undefined;\n }\n\n /**\n * @return {HTMLElement | undefined}\n */\n get $container() {\n if (this.container) return this.container;\n const container = this.$el.parentElement;\n if (container instanceof HTMLElement) {\n this.container = container;\n return container;\n }\n return undefined;\n }\n\n /**\n * @return {HTMLElement | undefined}\n */\n get $trigger() {\n if (this.trigger) return this.trigger;\n const trigger = this.$el;\n if (trigger instanceof HTMLElement) {\n this.trigger = trigger;\n return trigger;\n }\n return undefined;\n }\n\n /**\n *\n * @param {String} [content] - Panel content\n * @param {Array} [parentClasses = []] - Parent element classes\n * @param {Array} [panelClasses = []] - Panel classes\n */\n open(content, parentClasses = [], panelClasses = []) {\n try {\n const parent = this.$container;\n const panel = this.$panel;\n\n parent.classList.add(this.CLASSES.open);\n\n this.timeout = setTimeout(() => {\n if (content) {\n panel.innerHTML = content;\n }\n\n if (parentClasses) {\n this.parentClasses = parentClasses;\n parent.classList.add(...parentClasses);\n }\n\n if (panelClasses) {\n this.panelClasses = panelClasses;\n panel.classList.add(...panelClasses);\n }\n\n this.$trigger.classList.add(this.CLASSES.active);\n parent.classList.add(this.CLASSES.animate);\n this.setModalTrap(panel);\n this.EMIT(this.CUSTOM_MESSAGES.DROPDOWN_EVENTS.opening, this.$el);\n }, 100);\n } catch (e) {\n console.error(e);\n }\n }\n\n setModalTrap(target) {\n setTimeout(() => {\n // let targetElement = target.parentElement.querySelector(this.SELECTORS.dropdown);\n // target.setAttribute('aria-labelledby', target.getAttribute('data-id'));\n // target.setAttribute('aria-modal', true);\n this.trap = focusTrap.createFocusTrap(target, { clickOutsideDeactivates: true });\n this.trap.activate();\n }, 200);\n }\n\n close() {\n try {\n const parent = this.$container;\n const panel = this.$panel;\n parent.classList.remove(this.CLASSES.animate);\n\n if (this.parentClasses) parent.classList.remove(...this.parentClasses);\n if (this.panelClasses) panel.classList.remove(...this.panelClasses);\n\n this.timeout = setTimeout(() => {\n parent.classList.remove(this.CLASSES.open);\n this.$trigger.classList.remove(this.CLASSES.active);\n if (this.trap) this.trap.deactivate();\n }, 100);\n } catch (e) {\n console.error(e);\n }\n }\n\n bindHover() {\n var anyFocus = false;\n if (match(null, 'md')) {\n this.$on(\n 'mouseenter.dropdown',\n (e) => {\n e.preventDefault();\n clearTimeout(this.timeout);\n clearTimeout(this.closeTimeout);\n clearTimeout(this.openTimeout);\n this.openTimeout = setTimeout(() => {\n this.open();\n }, 100);\n },\n this.$container\n );\n\n this.$on(\n 'mouseleave.dropdown',\n (e) => {\n const parent = this.$container;\n const inputInside = parent.querySelectorAll(this.SELECTORS.inputInside);\n [...inputInside].forEach((el) => {\n if (this.checkIfFocus(el)) {\n anyFocus = true;\n }\n });\n\n if (!anyFocus) {\n e.preventDefault();\n clearTimeout(this.timeout);\n clearTimeout(this.openTimeout);\n this.closeTimeout = setTimeout(() => {\n this.close();\n }, 100);\n } else {\n anyFocus = false;\n }\n },\n this.$container\n );\n }\n }\n\n handleEscapeTrigger() {\n document.addEventListener('keydown', ({ key }) => {\n if (key === 'Escape') {\n this.close();\n }\n });\n }\n\n bindClick() {\n this.$on(\n 'click.dropdown',\n (e) => {\n if (e) {\n e.preventDefault();\n }\n\n clearTimeout(this.timeout);\n const isOpen = this.$el.parentElement.classList.contains(this.CLASSES.open);\n if (isOpen) {\n this.close();\n } else {\n this.open();\n }\n },\n this.$trigger\n );\n\n let closeDropdown = [...this.$container.querySelectorAll(this.SELECTORS.closeDropdownTrigger)];\n\n if (closeDropdown.length > 0) {\n closeDropdown.forEach((trigger) => {\n trigger.addEventListener('click', (e) => {\n if (e) {\n e.preventDefault();\n }\n if (this.$trigger) {\n this.$trigger.click();\n }\n });\n });\n }\n }\n\n bindEvents() {\n if (this.$options.handle === 'hover') {\n this.bindHover();\n }\n if (this.$options.handle === 'click') {\n this.bindClick();\n }\n if (this.$options.handle === 'all' || !this.$options.handle) {\n this.bindClick();\n this.bindHover();\n }\n }\n\n checkIfFocus(el) {\n return el.form === (document.activeElement.form || null) && document.activeElement.localName === 'input';\n }\n}\n","/* eslint-disable new-cap */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable no-underscore-dangle */\n\nimport Bean from 'bean';\nimport deepFreeze from '../utilities/freeze';\nimport BaseGiaComponent from './baseGiaComponent';\n\nexport default class BaseComponent extends BaseGiaComponent {\n /**\n * @returns {HTMLElement}\n */\n get $el() {\n return /** @type {HTMLElement} */ (this._componentElement);\n }\n\n get $options() {\n const compOptions = {};\n const options = { ...this.$el.dataset };\n const optionsEntires = Object.keys(options).filter((entry) => entry.includes('option'));\n optionsEntires.forEach((entry) => {\n const cleanEntry = BaseComponent.cleanOptionKey(entry);\n let optionValue;\n if (options[entry].includes('{') && options[entry].includes('}')) {\n optionValue = JSON.parse(options[entry].replace(/'/g, '\"'));\n } else {\n optionValue = BaseComponent.convertType(options[entry]);\n }\n compOptions[cleanEntry] = optionValue;\n });\n return deepFreeze(compOptions);\n }\n\n get COMPONENT_NAME() {\n return this.$el.getAttribute('data-component');\n }\n\n /**\n *\n * constructor\n *\n * @param {Element} element\n */\n constructor(element) {\n super(element);\n this._componentElement = element;\n this._componentElement.setAttribute('data-component-init', 'true');\n this._checkMessages();\n }\n\n static convertType(option) {\n let optionReturn;\n switch (option) {\n case 'false':\n optionReturn = false;\n break;\n case 'true':\n optionReturn = true;\n break;\n case 'null':\n optionReturn = null;\n break;\n default:\n optionReturn = option;\n break;\n }\n\n return optionReturn;\n }\n\n static cleanOptionKey(key) {\n const str = key.replace('option', '');\n return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\n }\n\n /**\n *\n * $on\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n * @param {Array|String|Element} [elements = null]\n */\n $on(events, cb, element = this.$el, elements = null) {\n if (!element || !events || !cb) return;\n if (!elements) {\n Bean.on(element, events, (e) => {\n if (e) e.stopPropagation();\n cb(e);\n });\n } else {\n Bean.on(element, events, elements, (e) => {\n if (e) e.stopPropagation();\n cb(e);\n });\n }\n }\n\n /**\n *\n * $one\n *\n * @param {String} events\n * @param {Function} cb\n * @param {Element} [element = this.$el]\n */\n $one(events, cb, element = this.$el) {\n Bean.one(element, events, cb);\n }\n\n /**\n *\n * $off\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $off(events, element = this.$el) {\n Bean.off(element, events);\n }\n\n /**\n *\n * $fire\n *\n * @param {String} events\n * @param {Element} [element = this.$el]\n */\n $fire(events, element = this.$el) {\n Bean.fire(element, events);\n }\n\n /**\n *\n * Activate loader\n *\n * @param {HTMLElement} [container]\n * @param {String} [message]\n */\n loading(container, message) {\n this._loading = true;\n this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.show, {\n container: container || document.body,\n message: message ?? null\n });\n }\n\n /**\n *\n * Deactivate loader\n *\n * @param {HTMLElement} [container]\n * @param {String} [message]\n * @param {Boolean} [error=false]\n * @param {String} [icon]\n */\n endLoading(container, message, error = false, icon) {\n this._loading = false;\n setTimeout(() => {\n if (!this._loading) {\n this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.hide, {\n container: container || document.body,\n message,\n error,\n icon\n });\n }\n }, 400);\n }\n}\n"],"sourceRoot":""}