{"version":3,"file":"component-comboBox.chunk.js","mappings":"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","sources":["webpack:///./assets/src/scripts/base/baseComponent.ts","webpack:///./assets/src/scripts/base/commonInterface.ts","webpack:///./assets/src/scripts/components/comboBox.ts","webpack:///./assets/src/scripts/utils/focusableElementUtils.ts"],"sourcesContent":["import deepFreeze from '../utils/freeze';\nimport CommonInterface from './commonInterface';\nimport Bean from 'bean';\nexport default class BaseComponent extends CommonInterface {\n    /**\n     *\n     * constructor\n     *\n     * @param {Element} element\n     */\n    constructor(element) {\n        super();\n        this.observer = new IntersectionObserver(entries => {\n            if (entries[0].isIntersecting) {\n                const items = [...entries[0].target.querySelectorAll('[data-animated=\"false\"]')];\n                items.forEach((item, i) => {\n                    setTimeout(() => {\n                        item.setAttribute('data-animated', 'true');\n                    }, 300 * i);\n                });\n                this.observer.unobserve(entries[0].target);\n            }\n        }, {\n            threshold: 0.5\n        });\n        this._componentElement = element;\n        this._componentElement.setAttribute('data-component-init', 'true');\n        this.observer.observe(this._componentElement);\n    }\n    /**\n     * @returns {HTMLElement}\n     */\n    get $el() {\n        return this._componentElement;\n    }\n    get $options() {\n        const compOptions = {};\n        const options = Object.assign({}, 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            }\n            else {\n                optionValue = BaseComponent.convertType(options[entry]);\n            }\n            compOptions[cleanEntry] = optionValue;\n        });\n        return deepFreeze(compOptions);\n    }\n    get COMPONENT_NAME() {\n        return this.__proto__.constructor.name;\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        return optionReturn;\n    }\n    static cleanOptionKey(key) {\n        const str = key.replace('option', '');\n        return `${str.charAt(0).toLocaleLowerCase()}${str.slice(1)}`;\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)\n            return;\n        if (!elements) {\n            Bean.on(element, events, (e) => {\n                if (e)\n                    e.stopPropagation();\n                cb(e);\n            });\n        }\n        else {\n            Bean.on(element, events, elements, (e) => {\n                if (e)\n                    e.stopPropagation();\n                cb(e);\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     * $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     * $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     * @param {HTMLElement} [container]\n     */\n    loading(container, message = '') {\n        this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.show, {\n            container: container || this.$el,\n            message\n        });\n    }\n    /**\n     *\n     * @param {HTMLElement} [container]\n     * @param {String} [message]\n     * @param {String} [icon]\n     * @param {Boolean} [error=false]\n     */\n    endLoading(container, message, icon, error = false, time) {\n        this.EMIT(this.CUSTOM_MESSAGES.LOADER_EVENTS.hide, {\n            container: container || this.$el,\n            message,\n            icon,\n            error,\n            time\n        });\n    }\n}\n","import config from 'gia/config';\nimport EventBus from '../libs/eventBus';\nimport CustomMessages from '../constants/customMessages';\nimport { getFirstFocusable, getAllFocusableElements } from '../utils/focusableElementUtils';\nexport default class CommonInterface {\n    constructor() {\n        config.set('log', true);\n        this._grabMessages();\n    }\n    get CUSTOM_MESSAGES() {\n        return CustomMessages;\n    }\n    get Messages() {\n        return {};\n    }\n    _checkMessages() {\n        for (const message in this.Messages) {\n            if (window.eventQueue.get(message)) {\n                const ref = this.Messages[message].bind(this);\n                window.eventQueue.get(message).map((payload) => {\n                    ref(payload);\n                });\n                window.eventQueue.delete(message);\n            }\n        }\n    }\n    _grabMessages() {\n        this._messages = {};\n        for (const message in this.Messages) {\n            if (this.Messages[message]) {\n                const __ref__ = this.Messages[message].bind(this);\n                this._messages[message] = __ref__;\n                this.GRAB(message, __ref__);\n            }\n        }\n    }\n    _ungrabMessages() {\n        for (const message in this._messages) {\n            this.UNGRAB(message, this._messages[message]);\n        }\n    }\n    objectIsEmpty(object) {\n        for (var key in object) {\n            if (object.hasOwnProperty(key))\n                return false;\n        }\n        return true;\n    }\n    /**\n     *\n     * EMIT\n     *\n     * @param {string} message\n     * @param {Object} payload\n     */\n    EMIT(message, payload) {\n        return EventBus.emit(message, payload);\n    }\n    /**\n     *\n     * GRAB\n     *\n     * @param {string} message\n     * @param {Function} callBack\n     */\n    GRAB(message, callBack) {\n        if (!callBack)\n            return;\n        EventBus.on(message, callBack);\n    }\n    /**\n     *\n     * UNGRAB\n     *\n     * @param {string} message\n     * @param {Function} callBack\n     */\n    UNGRAB(message, callBack) {\n        if (!callBack)\n            return;\n        EventBus.off(message, callBack);\n    }\n    getFirstFocusable(parent) {\n        return getFirstFocusable(parent);\n    }\n    getFocusableElements(parent) {\n        return getAllFocusableElements(parent);\n    }\n    _destroy() {\n        this._ungrabMessages();\n    }\n}\n","/**\n * a11y ComboBox\n* w3c reference: https://w3c.github.io/aria-practices/examples/combobox/combobox-select-only.html\n*\n* adapted by finoz to work as component in OM projects\n* default setup: html listbox with options\n* change event + default callback w/ emit 'combobox:change' by default\n* custom data: return array in extended method returnSetupData()\n* custom change callback: return function in extended method changeCallback()\n*\n* TODO : trasformare in library\n*\n*/\nimport customEventBus from '../libs/eventBus';\nimport BaseComponent from '../base/baseComponent';\nimport viewportUtils from '../utils/viewportUtils';\nexport default class ComboBox extends BaseComponent {\n    constructor(element) {\n        super(element);\n        // element refs\n        this.comboEl = this.$el.querySelector('[role=combobox]');\n        this.listboxEl = this.$el.querySelector('[role=listbox]');\n        // data\n        this.idBase = this.comboEl.id || 'combo';\n        // state\n        this.activeIndex = 0;\n        this.open = false;\n        this.realChange = true;\n        this.searchString = '';\n        this.searchTimeout = null;\n        this.value = '';\n        // init\n        if (this.comboEl && this.listboxEl) {\n            this.init();\n        }\n    }\n    get ACTIONS() {\n        return {\n            Close: 0,\n            CloseSelect: 1,\n            First: 2,\n            Last: 3,\n            Next: 4,\n            Open: 5,\n            PageDown: 6,\n            PageUp: 7,\n            Previous: 8,\n            Select: 9,\n            Type: 10,\n        };\n    }\n    init() {\n        // set + get options\n        this.setOptions();\n        if (this.options && this.options.length < 1) {\n            return false;\n        }\n        // select first option by default\n        this.activeIndex = this.options.findIndex((option) => option.getAttribute('aria-selected') === 'true') || 0;\n        if (this.activeIndex !== -1) {\n            this.comboEl.innerHTML = this.options[this.activeIndex].innerHTML;\n        }\n        // add event listeners\n        this.comboEl.addEventListener('blur', this.onComboBlur.bind(this));\n        this.comboEl.addEventListener('click', this.onComboClick.bind(this));\n        this.comboEl.addEventListener('keydown', this.onComboKeyDown.bind(this));\n        // listen options\n        this.options.map((option, index) => {\n            option.addEventListener('click', (event) => {\n                event.stopPropagation();\n                this.onOptionClick(index);\n            });\n            option.addEventListener('mousedown', this.onOptionMouseDown.bind(this));\n        });\n    }\n    setSelectedValue(selectedItem) {\n        this.pastValue = this.value;\n        this.value = selectedItem.getAttribute('value') || selectedItem.getAttribute('data-value') || selectedItem.innerText;\n    }\n    changeCallback() {\n        customEventBus.emit('combobox:change', {\n            id: this.idBase,\n            combo: this.comboEl,\n            listbox: this.listboxEl,\n            value: this.value,\n        });\n    }\n    returnSetupData() {\n        return [];\n    }\n    setOptions() {\n        const setupData = this.returnSetupData();\n        if (this.listboxEl.querySelectorAll('[role=\"option\"]').length < 1) {\n            if (setupData.length > 0) {\n                setupData.map((option, index) => {\n                    const optionEl = this.createOption(option, index);\n                    this.listboxEl.appendChild(optionEl);\n                });\n            }\n            else {\n                console.warn('ComboBox: no options found');\n            }\n        }\n        // get options from the html listbox\n        this.options = Array.from(this.listboxEl.querySelectorAll('[role=\"option\"]')).map((option) => option);\n    }\n    createOption(optionText, index) {\n        const optionEl = document.createElement('li');\n        optionEl.setAttribute('role', 'option');\n        optionEl.id = `${this.idBase}-${index}`;\n        optionEl.className =\n            index === 0 ? 'option--current' : '';\n        optionEl.setAttribute('aria-selected', `${index === 0}`);\n        optionEl.innerText = optionText;\n        return optionEl;\n    }\n    selectOption(index) {\n        if (index === -1) {\n            return;\n        }\n        // update state\n        this.activeIndex = index;\n        // update displayed value\n        const selected = this.options[index];\n        this.comboEl.innerHTML = selected.innerHTML;\n        // update aria-selected\n        const options = this.$el.querySelectorAll('[role=option]');\n        [...options].forEach((optionEl) => {\n            optionEl.setAttribute('aria-selected', 'false');\n        });\n        options[index].setAttribute('aria-selected', 'true');\n        this.setSelectedValue(selected);\n        if (this.value !== this.pastValue) {\n            this.$fire('change');\n            this.changeCallback();\n        }\n    }\n    /**\n     * same as w3c example from here\n     * */\n    getSearchString(char) {\n        // reset typing timeout and start new timeout\n        // this allows us to make multiple-letter matches, like a native select\n        if (typeof this.searchTimeout === 'number') {\n            window.clearTimeout(this.searchTimeout);\n        }\n        this.searchTimeout = window.setTimeout(() => {\n            this.searchString = '';\n        }, 500);\n        // add most recent letter to saved search string\n        this.searchString += char;\n        return this.searchString;\n    }\n    onComboClick() {\n        this.updateMenuState(!this.open, false);\n    }\n    onComboKeyDown(event) {\n        const { key } = event;\n        const max = this.options.length - 1;\n        const action = this.getActionFromKey(event, this.open);\n        switch (action) {\n            case this.ACTIONS.Last:\n            case this.ACTIONS.First:\n                this.updateMenuState(true);\n            // intentional fallthrough\n            case this.ACTIONS.Next:\n            case this.ACTIONS.Previous:\n            case this.ACTIONS.PageUp:\n            case this.ACTIONS.PageDown:\n                event.preventDefault();\n                return this.onOptionChange(this.getUpdatedIndex(this.activeIndex, max, action));\n            case this.ACTIONS.CloseSelect:\n                event.preventDefault();\n                this.selectOption(this.activeIndex);\n            // intentional fallthrough\n            case this.ACTIONS.Close:\n                event.preventDefault();\n                return this.updateMenuState(false);\n            case this.ACTIONS.Type:\n                return this.onComboType(key);\n            case this.ACTIONS.Open:\n                event.preventDefault();\n                return this.updateMenuState(true);\n        }\n    }\n    onComboType(letter) {\n        // open the listbox if it is closed\n        this.updateMenuState(true);\n        // find the index of the first matching option\n        const searchString = this.getSearchString(letter);\n        const searchIndex = this.getIndexByLetter(this.options, searchString, this.activeIndex + 1);\n        // if a match was found, go to it\n        if (searchIndex >= 0) {\n            this.onOptionChange(searchIndex);\n        }\n        // if no matches, clear the timeout and search string\n        else {\n            window.clearTimeout(this.searchTimeout);\n            this.searchString = '';\n        }\n    }\n    onOptionClick(index) {\n        this.onOptionChange(index);\n        this.selectOption(index);\n        this.updateMenuState(false);\n    }\n    onOptionChange(index) {\n        // update state\n        this.activeIndex = index;\n        // update aria-activedescendant\n        //this.comboEl.setAttribute('aria-activedescendant', `${this.idBase}-${index}`);\n        // update active option styles\n        const options = this.$el.querySelectorAll('[role=option]');\n        [...options].forEach((optionEl) => {\n            optionEl.classList.remove('option--current');\n        });\n        options[index].classList.add('option--current');\n        // ensure the new option is in view\n        if (this.isScrollable(this.listboxEl)) {\n            this.maintainScrollVisibility(options[index], this.listboxEl);\n        }\n        // ensure the new option is visible on screen\n        // ensure the new option is in view\n        if (!this.isElementInView(options[index])) {\n            options[index].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n        }\n    }\n    onComboBlur() {\n        // do not do blur action if ignoreBlur flag has been set\n        if (this.ignoreBlur) {\n            this.ignoreBlur = false;\n            return;\n        }\n        // select current option and close\n        if (this.open) {\n            //this.selectOption(this.activeIndex);\n            this.updateMenuState(false, false);\n        }\n    }\n    onOptionMouseDown() {\n        // Clicking an option will cause a blur event,\n        // but we don't want to perform the default keyboard blur action\n        this.ignoreBlur = true;\n    }\n    updateMenuState(open, callFocus = true) {\n        if (this.open === open) {\n            return;\n        }\n        // combo--mobile-modal--overlay\n        if (!this.open && viewportUtils.isMobile() && this.comboEl.parentElement.classList.contains('combo--mobile-modal')) {\n            document.querySelector('html').classList.add('combo--mobile-modal-is-open');\n            const overlay = document.createElement('div');\n            overlay.classList.add('combo--mobile-modal--overlay');\n            this.comboEl.appendChild(overlay);\n            const onSwipeOut = () => {\n                overlay.removeEventListener('touchmove', onSwipeOut);\n                this.onComboBlur();\n            };\n            overlay.addEventListener('touchmove', onSwipeOut);\n        }\n        else if (this.open && this.comboEl.parentElement.classList.contains('combo--mobile-modal')) {\n            document.querySelector('html').classList.remove('combo--mobile-modal-is-open');\n            if (this.comboEl.querySelector('.combo--mobile-modal--overlay'))\n                this.comboEl.querySelector('.combo--mobile-modal--overlay').remove();\n        }\n        // update state\n        this.open = open;\n        // update aria-expanded and styles\n        this.comboEl.setAttribute('aria-expanded', `${open}`);\n        open ? this.$el.classList.add('open') : this.$el.classList.remove('open');\n        // update activedescendant\n        const activeID = open ? `${this.idBase}-${this.activeIndex}` : '';\n        //this.comboEl.setAttribute('aria-activedescendant', activeID);\n        if (activeID === '' && !this.isElementInView(this.comboEl)) {\n            this.comboEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n        }\n        // move focus back to the combobox, if needed\n        callFocus && this.comboEl.focus();\n    }\n    /*\n    * Helper functions\n    */\n    filterOptions(options = [], filter, exclude = []) {\n        // filter an array of options against an input string\n        // returns an array of options that begin with the filter string, case-independent\n        return options.filter((option) => {\n            const matches = option.toLowerCase().indexOf(filter.toLowerCase()) === 0;\n            return matches && exclude.indexOf(option) < 0;\n        });\n    }\n    getActionFromKey(event, menuOpen) {\n        // map a key press to an action\n        const { key, altKey, ctrlKey, metaKey } = event;\n        const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n        // handle opening when closed\n        if (!menuOpen && openKeys.includes(key)) {\n            return this.ACTIONS.Open;\n        }\n        // home and end move the selected option when open or closed\n        if (key === 'Home') {\n            return this.ACTIONS.First;\n        }\n        if (key === 'End') {\n            return this.ACTIONS.Last;\n        }\n        // handle typing characters when open or closed\n        if (key === 'Backspace' ||\n            key === 'Clear' ||\n            (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)) {\n            return this.ACTIONS.Type;\n        }\n        // handle keys when open\n        if (menuOpen) {\n            if (key === 'ArrowUp' && altKey) {\n                return this.ACTIONS.CloseSelect;\n            }\n            else if (key === 'ArrowDown' && !altKey) {\n                return this.ACTIONS.Next;\n            }\n            else if (key === 'ArrowUp') {\n                return this.ACTIONS.Previous;\n            }\n            else if (key === 'PageUp') {\n                return this.ACTIONS.PageUp;\n            }\n            else if (key === 'PageDown') {\n                return this.ACTIONS.PageDown;\n            }\n            else if (key === 'Escape') {\n                return this.ACTIONS.Close;\n            }\n            else if (key === 'Enter' || key === ' ') {\n                return this.ACTIONS.CloseSelect;\n            }\n        }\n    }\n    getIndexByLetter(options, filter, startIndex = 0) {\n        // return the index of an option from an array of options, based on a search string\n        // if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n        const orderedOptions = [\n            ...options.slice(startIndex),\n            ...options.slice(0, startIndex),\n        ];\n        const firstMatch = this.filterOptions(orderedOptions, filter)[0];\n        const allSameLetter = (array) => array.every((letter) => letter === array[0]);\n        // first check if there is an exact match for the typed string\n        if (firstMatch) {\n            return options.indexOf(firstMatch);\n        }\n        // if the same letter is being repeated, cycle through first-letter matches\n        else if (allSameLetter(filter.split(''))) {\n            const matches = this.filterOptions(orderedOptions, filter[0]);\n            return options.indexOf(matches[0]);\n        }\n        // if no matches, return -1\n        else {\n            return -1;\n        }\n    }\n    getUpdatedIndex(currentIndex, maxIndex, action) {\n        // get an updated option index after performing an action\n        const pageSize = 10; // used for pageup/pagedown\n        switch (action) {\n            case this.ACTIONS.First:\n                return 0;\n            case this.ACTIONS.Last:\n                return maxIndex;\n            case this.ACTIONS.Previous:\n                return Math.max(0, currentIndex - 1);\n            case this.ACTIONS.Next:\n                return Math.min(maxIndex, currentIndex + 1);\n            case this.ACTIONS.PageUp:\n                return Math.max(0, currentIndex - pageSize);\n            case this.ACTIONS.PageDown:\n                return Math.min(maxIndex, currentIndex + pageSize);\n            default:\n                return currentIndex;\n        }\n    }\n    isElementInView(element) {\n        // check if element is visible in browser view port\n        let bounding = element.getBoundingClientRect();\n        return (bounding.top >= 0 &&\n            bounding.left >= 0 &&\n            bounding.bottom <=\n                (window.innerHeight || document.documentElement.clientHeight) &&\n            bounding.right <=\n                (window.innerWidth || document.documentElement.clientWidth));\n    }\n    isScrollable(element) {\n        // check if an element is currently scrollable\n        return element && element.clientHeight < element.scrollHeight;\n    }\n    maintainScrollVisibility(activeElement, scrollParent) {\n        // ensure a given child element is within the parent's visible scroll area\n        // if the child is not visible, scroll the parent\n        const { offsetHeight, offsetTop } = activeElement;\n        const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\n        const isAbove = offsetTop < scrollTop;\n        const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n        if (isAbove) {\n            scrollParent.scrollTo(0, offsetTop);\n        }\n        else if (isBelow) {\n            scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n        }\n    }\n}\n","const focusableSelectors = 'button, [href]:not([aria-hidden=\"true\"]), input, select, textarea, [tabindex]:not([tabindex=\"-1\"]), [role=\"button\"]';\nexport const getFirstFocusable = (parent) => parent.querySelector(focusableSelectors);\nexport const getAllFocusableElements = (parent) => parent.querySelectorAll(focusableSelectors);\n"],"names":["BaseComponent","constructor","config","this","_grabMessages","CUSTOM_MESSAGES","Messages","_checkMessages","message","window","eventQueue","get","ref","bind","map","payload","delete","_messages","__ref__","GRAB","_ungrabMessages","UNGRAB","objectIsEmpty","object","key","hasOwnProperty","EMIT","callBack","getFirstFocusable","parent","getFocusableElements","_destroy","element","super","observer","IntersectionObserver","entries","isIntersecting","target","querySelectorAll","forEach","item","i","setTimeout","setAttribute","unobserve","threshold","_componentElement","observe","$el","$options","compOptions","options","Object","assign","dataset","keys","filter","entry","includes","cleanEntry","cleanOptionKey","optionValue","JSON","parse","replace","convertType","COMPONENT_NAME","__proto__","name","static","option","optionReturn","str","charAt","toLocaleLowerCase","slice","$on","events","cb","elements","e","stopPropagation","$one","$off","$fire","loading","container","LOADER_EVENTS","show","endLoading","icon","error","time","hide","ComboBox","comboEl","querySelector","listboxEl","idBase","id","activeIndex","open","realChange","searchString","searchTimeout","value","init","ACTIONS","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","setOptions","length","findIndex","getAttribute","innerHTML","addEventListener","onComboBlur","onComboClick","onComboKeyDown","index","event","onOptionClick","onOptionMouseDown","setSelectedValue","selectedItem","pastValue","innerText","changeCallback","combo","listbox","returnSetupData","setupData","optionEl","createOption","appendChild","console","warn","Array","from","optionText","document","createElement","className","selectOption","selected","getSearchString","char","clearTimeout","updateMenuState","max","action","getActionFromKey","preventDefault","onOptionChange","getUpdatedIndex","onComboType","letter","searchIndex","getIndexByLetter","classList","remove","add","isScrollable","maintainScrollVisibility","isElementInView","scrollIntoView","behavior","block","ignoreBlur","callFocus","parentElement","contains","overlay","onSwipeOut","removeEventListener","focus","filterOptions","exclude","toLowerCase","indexOf","menuOpen","altKey","ctrlKey","metaKey","startIndex","orderedOptions","firstMatch","array","split","every","matches","currentIndex","maxIndex","Math","min","bounding","getBoundingClientRect","top","left","bottom","innerHeight","documentElement","clientHeight","right","innerWidth","clientWidth","scrollHeight","activeElement","scrollParent","offsetHeight","offsetTop","parentOffsetHeight","scrollTop","isBelow","scrollTo","focusableSelectors","getAllFocusableElements"],"sourceRoot":""}