{"version":3,"file":"icon-picker.min.js","mappings":"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","sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/js/utlis/utils.js","webpack:///./src/js/template.js","webpack:///./src/js/utlis/collections.js","webpack:///./src/js/IconPicker.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"IconPicker\"] = factory();\n\telse\n\t\troot[\"IconPicker\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","function eventListener(method, elements, events, fn) {\n    if (!Array.isArray(elements)) {\n        elements = [elements];\n    }\n\n    if (!Array.isArray(events)) {\n        events = [events];\n    }\n\n    for (const el of elements) {\n        for (const ev of events) {\n            el[method](ev, fn);\n        }\n    }\n\n    return [].slice.call(arguments, 1);\n}\n\n/**\n * Add event to element.\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const addEvent = eventListener.bind(null, 'addEventListener');\n\n/**\n * Remove event from element.\n * @param elements DOM-Elements\n * @param events Event names\n * @param fn Callback\n * @param options Optional options\n * @return Array passed arguments\n */\nexport const removeEvent = eventListener.bind(null, 'removeEventListener');\n\n/**\n * Resolves a HTMLElement by query.\n * @param val\n * @returns {null|Document|Element}\n */\nexport function resolveElement(val) {\n    if (val instanceof HTMLElement) {\n        return val;\n    } else if (typeof val === 'string') {\n        return document.querySelector(val)\n    }\n\n    return null;\n}\n\n/**\n * Convert a template string into HTML DOM nodes\n * @param  {String} str The template string\n * @return {Node}       The template HTML\n */\nexport function stringToHTML(str) {\n    if (window.DOMParser) {\n        const parser = new DOMParser();\n        const doc = parser.parseFromString(str, 'text/html');\n        return doc.body.firstElementChild;\n    }\n\n    const dom = document.createElement('div');\n    dom.innerHTML = str;\n    return dom.firstElementChild;\n}\n\n/**\n * Check if item is an object\n * @param {Object} item\n * @returns {boolean}\n */\nexport function isObject(item) {\n    return (item && typeof item === 'object' && !Array.isArray(item));\n}\n\n/**\n *\n * @param target\n * @param source\n * @returns {Object}\n */\nexport function mergeDeep(target, source) {\n    let output = Object.assign({}, target);\n\n    if (isObject(target) && isObject(source)) {\n        Object.keys(source).forEach(key => {\n            if (isObject(source[key])) {\n                if (!(key in target))\n                    Object.assign(output, {[key]: source[key]});\n                else\n                    output[key] = mergeDeep(target[key], source[key]);\n            } else {\n                Object.assign(output, {[key]: source[key]});\n            }\n        });\n    }\n    return output;\n}\n\n/**\n *\n * @param callback\n * @param delay\n * @returns {(function(): void)|*}\n */\nexport function debounce(callback, delay){\n    var timer;\n    return function(){\n        var args = arguments;\n        var context = this;\n        clearTimeout(timer);\n        timer = setTimeout(function(){\n            callback.apply(context, args);\n        }, delay)\n    }\n}\n\n/**\n *\n * @param object\n * @param value\n * @returns {string}\n */\nexport function getKeyByValue(object, value) {\n    return Object.keys(object).find(key => object[key] === value);\n}\n","import {stringToHTML} from \"./utlis/utils\";\n\nexport default options => {\n    const {theme, i18n, closeOnSelect} = options;\n\n    const modalElement = getHTMLElements(`\n        <div class=\"icon-picker-modal\" tabindex=\"-1\" data-theme=\"${theme}\" data-element=\"modal\" aria-modal=\"true\" aria-labelledby=\"Icon picker modal\" role=\"dialog\">\n            <div class=\"icon-picker-modal__dialog\">\n                <div class=\"icon-picker-modal__header\" data-element=\"header\">\n                    ${typeof i18n['text:title'] === 'string' && i18n['text:title'] !== '' ? `<h2>${i18n['text:title']}</h2>` : ''}\n                    \n                    <button class=\"icon-picker-modal--close\" aria-label=\"Close\" data-interaction=\"close\">\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke-width=\"1.5\">\n                          <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6.758 17.243 12.001 12m5.243-5.243L12 12m0 0L6.758 6.757M12.001 12l5.243 5.243\"/>\n                        </svg>\n                    </button>\n                </div>\n                \n                <input placeholder=\"${i18n['input:placeholder']}\" class=\"icon-picker-modal__search\" aria-label=\"${i18n['input:placeholder']}\" data-interaction=\"search\">\n                \n                <div class=\"icon-picker-modal__content\" data-element=\"content\"></div>\n            \n                ${!closeOnSelect ? `\n                    <div class=\"icon-picker-modal__footer\" data-element=\"footer\">\n                        <button type=\"button\" class=\"picker-save\" data-interaction=\"save\">${i18n['btn:save']}</button>\n                    </div>` : ''\n    }\n            </div>\n        </div>\n    `);\n\n    if (theme.includes('bootstrap')) {\n        modalElement.save?.classList.add('btn', 'btn-primary');\n        modalElement.search.classList.add('form-control');\n    }\n\n    return modalElement;\n}\n\n\nfunction getHTMLElements(str) {\n    const removeAttribute = (el, name) => {\n        const value = el.getAttribute(name);\n        el.removeAttribute(name);\n        return value;\n    };\n\n    const resolve = (element, base = {}) => {\n        const elementKey = removeAttribute(element, 'data-element');\n        elementKey && (base[elementKey] = element);\n\n        for (const child of Array.from(element.children)) {\n            const childInteractionKey = removeAttribute(child, 'data-interaction');\n\n            if (childInteractionKey) {\n                childInteractionKey && (base[childInteractionKey] = child);\n            }\n\n            resolve(child, base);\n        }\n\n        return base;\n    };\n\n    return resolve(stringToHTML(str));\n}\n","const iconifyPath = 'https://raw.githubusercontent.com/iconify/icon-sets/master/json';\n\nexport const collections = {\n    'Material Design Icons': {\n        key: 'mdi',\n        prefix: 'mdi mdi-',\n        url: `${iconifyPath}/mdi.json`\n    },\n    'FontAwesome Brands 6': {\n        key: 'fa6-brands',\n        prefix: 'fab fa-',\n        url: `${iconifyPath}/fa6-brands.json`\n    },\n    'FontAwesome Solid 6': {\n        key: 'fa6-solid',\n        prefix: 'fas fa-',\n        url: `${iconifyPath}/fa6-solid.json`\n\n    },\n    'FontAwesome Regular 6': {\n        key: 'fa6-regular',\n        prefix: 'far fa-',\n        url: `${iconifyPath}/fa6-regular.json`\n    },\n    'FontAwesome Brands 7': {\n        key: 'fa7-brands',\n        prefix: 'fab fa-',\n        url: `${iconifyPath}/fa7-brands.json`\n    },\n    'FontAwesome Solid 7': {\n        key: 'fa7-solid',\n        prefix: 'fas fa-',\n        url: `${iconifyPath}/fa7-solid.json`\n\n    },\n    'FontAwesome Regular 7': {\n        key: 'fa7-regular',\n        prefix: 'far fa-',\n        url: `${iconifyPath}/fa7-regular.json`\n    },\n    'Iconoir': {\n        key: 'iconoir',\n        prefix: 'iconoir-',\n        url: `${iconifyPath}/iconoir.json`\n    }\n}\n\n/**\n *\n * @param {array} collectionsOptions\n */\nexport function resolveCollection(collectionsOptions) {\n    let collectionResolved = Object.create({});\n\n    if (Array.isArray(collectionsOptions)) {\n        collectionsOptions.forEach((collection) => {\n            if (hasCollection(collection)) {\n                collectionResolved[collections[collection].key] = collections[collection]\n            } else if (collection.key) {\n                collectionResolved[collection.key] = collection\n            }\n        })\n    }\n\n    return collectionResolved;\n}\n\n/**\n *\n * @param {string} collection\n * @returns {boolean}\n */\nfunction hasCollection(collection) {\n    return collections.hasOwnProperty(collection)\n}\n","import * as _ from \"./utlis/utils\";\nimport template from \"./template\";\nimport { resolveCollection } from \"./utlis/collections\";\n\nexport default class IconPicker {\n    static DEFAULT_OPTIONS = {\n        theme: 'default',\n        closeOnSelect: true,\n        defaultValue: null,\n        iconSource: [],\n        i18n: {\n            'input:placeholder': 'Search icon…',\n\n            'text:title': 'Select icon',\n            'text:empty': 'No results found…',\n            'text:loading' : 'Loading…',\n\n            'btn:save': 'Save'\n        }\n    }\n\n    _eventListener = {\n        select: [],\n        save: [],\n        show: [],\n        clear: [],\n        hide: [],\n        loaded: []\n    };\n\n    /**\n     *\n     * @param {string | HTMLElement} el\n     * @param {Object} options\n     */\n    constructor(el, options = {}) {\n        this.options = _.mergeDeep(IconPicker.DEFAULT_OPTIONS, options);\n        this.element = el;\n        this.iconsLoading = true;\n\n        // Initialize icon picker\n        this._preBuild();\n\n        if (this.element && this.options.iconSource.length > 0) {\n            this._binEvents();\n            this._renderdIcons();\n            this._createModal();\n        } else {\n            this._catchError('iconSourceMissing');\n        }\n    }\n\n    _preBuild() {\n        this.element = _.resolveElement(this.element);\n        this.root = template(this.options);\n\n        if (!Array.isArray(this.options.iconSource) && this.options.iconSource.length > 0) {\n            this.options.iconSource = [this.options.iconSource];\n        }\n    }\n\n    _binEvents() {\n        const {options, root, element} = this;\n        let iconsElements = [];\n\n        this._eventBindings = [\n            _.addEvent(element, 'click', () => this.show()),\n            _.addEvent(root.close, 'click', () => this.hide()),\n            _.addEvent(root.modal, 'click', (evt) => {\n                if (evt.target === root.modal) {\n                    this.hide();\n                }\n            }),\n            _.addEvent(root.search, 'keyup', _.debounce((evt) => {\n                const iconsResult = this.availableIcons.filter((obj) => {\n                    return obj.value.includes(evt.target.value.toLowerCase()) || obj.categories?.filter(c => c.includes(evt.target.value.toLowerCase())).length > 0\n                });\n\n                if (!iconsElements.length) {\n                    iconsElements = document.querySelectorAll('.icon-element');\n                }\n\n                iconsElements.forEach((iconElement) => {\n                    iconElement.hidden = true;\n\n                    iconsResult.forEach((result) => {\n                        if (iconElement.classList.contains(result.value)) {\n                            iconElement.hidden = false;\n                        }\n                    });\n                });\n\n                const emptyElement = root.content.querySelector('.is-empty');\n\n                if (iconsResult.length > 0) {\n                    if (emptyElement) {\n                        emptyElement.remove();\n                    }\n                } else {\n                    if (!emptyElement) {\n                        root.content.appendChild(_.stringToHTML(`<div class=\"is-empty\">${options.i18n['text:empty']}</div>`));\n                    }\n                }\n            }, 250))\n        ];\n\n        if (!options.closeOnSelect) {\n            this._eventBindings.push(_.addEvent(root.save, 'click', () => this._onSave()));\n        }\n    }\n\n    /**\n     * Hide icon picker modal\n     */\n    hide() {\n        if (this.isOpen()) {\n            this.root.modal.classList.remove('is-visible');\n            this._emit('hide');\n\n            return this;\n        }\n\n        return false\n    }\n\n    /**\n     * Show icon picker modal\n     */\n    show() {\n        if (!this.isOpen()) {\n            this.root.modal.classList.add('is-visible');\n            this._emit('show');\n\n            return this;\n        }\n\n        return false\n    }\n\n    clear() {\n        if (this.initialized && this.currentlySelectName) {\n            this.currentlySelectName = null;\n\n            this._emit('clear');\n        }\n    }\n\n    /**\n     * Check if modal is open\n     * @returns {boolean}\n     */\n    isOpen() {\n        return this.root.modal.classList.contains('is-visible');\n    }\n\n    /**\n     * Check if the icons are loaded\n     * @returns {boolean}\n     */\n    iconsLoaded(){\n        return !this.loadingState;\n    }\n\n    /**\n     * Destroy icon picker instance and detach all events listeners\n     * @param {boolean} deleteInstance\n     */\n    destroy(deleteInstance = true) {\n        this.initialized = false;\n\n        // Remove elements events\n        this._eventBindings.forEach(args => _.removeEvent(...args));\n\n        // Delete instance\n        if (deleteInstance) {\n            Object.keys(this).forEach((key) => delete this[key]);\n        }\n    }\n\n    _emit(event, ...args) {\n        this._eventListener[event].forEach(cb => cb(...args, this));\n    }\n\n    on(event, callback) {\n        if (this._eventListener[event] !== undefined) {\n            this._eventListener[event].push(callback);\n            return this;\n        }\n\n        return false\n    }\n\n    off(event, callback) {\n        const callBacks = (this._eventListener[event] || []);\n        const index = callBacks.indexOf(callback);\n\n        if (~index) {\n            callBacks.splice(index, 1);\n        }\n\n        return this;\n    }\n\n    _createModal() {\n        document.body.appendChild(this.root.modal);\n\n        this.initialized = true;\n    }\n\n    _onSave() {\n        this._setValueInput()\n\n        this.hide();\n        this._emit('save', this.emitValues);\n    }\n\n    /**\n     * Generate icons elements\n     * @private\n     */\n    async _renderdIcons() {\n        const {root, options} = this;\n        let previousSelectedIcon = null;\n        let currentlySelectElement = null;\n        let categories = null;\n        this.availableIcons = [];\n\n        root.content.innerHTML = `<div class=\"is-loading\">${options.i18n['text:loading']}</div>`;\n\n        let icons = await this._getIcons();\n\n        icons.forEach((library) => {\n            let iconFormat = library.iconFormat ? library.iconFormat : 'svg';\n\n            for (const [key, value] of Object.entries(library.icons)) {\n                const iconTarget = document.createElement('button');\n                iconTarget.title = key\n                iconTarget.className = `icon-element ${key}`;\n                iconTarget.dataset.value = library.prefix + key;\n\n                if (library.categories && Object.entries(library.categories).length > 0) {\n                    categories = [];\n\n                    for (const [categoryKey] of Object.entries(library.categories)) {\n                        if (library.categories[categoryKey].includes(key)) {\n                            if (categories.length > 0) {\n                                categories.push(categoryKey.toLowerCase())\n                            } else {\n                                categories = [categoryKey.toLowerCase()]\n                            }\n                        }\n                    }\n                }\n\n                if (library.chars) {\n                    iconTarget.dataset.unicode = _.getKeyByValue(library.chars, key);\n                }\n\n                let iconElement;\n                if (iconFormat === 'i' || !value.body) {\n                    iconElement = document.createElement('i');\n                    iconElement.setAttribute('class', iconTarget.dataset.value);\n                } else if (iconFormat === 'markup') {\n                    let t = document.createElement('template');\n                    t.innerHTML = value.body;\n                    iconElement = t.content;\n                } else {\n                    iconElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n                    iconElement.setAttribute('height', '24');\n                    iconElement.setAttribute('width', '24');\n                    iconElement.setAttribute('viewBox', `0 0 ${value.width ? value.width : library.width} ${value.height ? value.height : library.height}`);\n                    iconElement.innerHTML = value.body;\n                }\n\n                iconTarget.append(iconElement)\n\n                root.content.appendChild(iconTarget);\n\n                this.availableIcons.push({value: key, body: iconElement.outerHTML, ...(categories?.length > 0 && {categories})});\n\n                // Icon click event\n                iconTarget.addEventListener('click', (evt) => {\n                    if (this.currentlySelectName !== evt.currentTarget.firstChild.className) {\n                        evt.currentTarget.classList.add('is-selected');\n\n                        currentlySelectElement = evt.currentTarget;\n                        this.currentlySelectName = currentlySelectElement.dataset.value;\n                        this.SVGString = iconElement.outerHTML;\n\n                        this.emitValues = {\n                            name: key,\n                            value: this.currentlySelectName,\n                            svg: this.SVGString,\n                        }\n\n                        if (library.chars) {\n                            this.emitValues.unicode = iconElement.dataset.unicode\n                        }\n\n                        this._emit('select', this.emitValues);\n                    }\n\n                    if (previousSelectedIcon) {\n                        previousSelectedIcon.classList.remove('is-selected');\n                    }\n\n                    if (options.closeOnSelect) {\n                        this._onSave();\n                    }\n\n                    previousSelectedIcon = currentlySelectElement;\n                });\n            }\n        });\n\n        if (options.defaultValue || this.element.value) {\n            // Check if icon name ou icon value is set\n            let defaultValueElement = document.querySelector(`[data-value=\"${options.defaultValue ? options.defaultValue : this.element.value}\"]`) ?\n                document.querySelector(`[data-value=\"${options.defaultValue ? options.defaultValue : this.element.value}\"]`) :\n                document.querySelector(`.${options.defaultValue ? options.defaultValue : this.element.value}`);\n\n            let iconValue = defaultValueElement?.dataset.value ?? '';\n            defaultValueElement?.classList.add('is-selected');\n\n            previousSelectedIcon = defaultValueElement;\n            this.currentlySelectName = iconValue;\n\n            if (!this.element.value) {\n                this._setValueInput();\n            }\n        }\n\n        const loadingElement = root.content.querySelector('.is-loading');\n        if (loadingElement) {\n            loadingElement.remove();\n        }\n\n        this.iconsLoading = false;\n        this._emit('loaded');\n    }\n\n    /**\n     *\n     * @returns {string}\n     * @private\n     */\n    async _getIcons() {\n        const {options} = this\n        const iconsURL = [];\n\n        let sourceInformation = resolveCollection(options.iconSource);\n\n        for (const source of Object.values(sourceInformation)) {\n            iconsURL.push(source.url)\n        }\n\n        return await Promise.all(iconsURL.map((iconURL) => fetch(iconURL).then((response) => response.json())))\n            .then((iconLibrary) => {\n                iconLibrary.forEach((library) => {\n                    if (sourceInformation.hasOwnProperty(library.prefix)) {\n                        library.prefix = sourceInformation[library.prefix].prefix\n                    }\n                });\n\n                return iconLibrary;\n            });\n    }\n\n    /**\n     *\n     * @param {string} exception\n     * @private\n     */\n    _catchError(exception) {\n        switch (exception) {\n            case 'iconSourceMissing':\n                throw Error('No icon source was found.');\n        }\n    }\n\n    /**\n     * Set value into input element\n     * @param value\n     * @private\n     */\n    _setValueInput(value = this.currentlySelectName) {\n        const {element} = this;\n\n        if (element instanceof HTMLInputElement && this.currentlySelectName) {\n            element.value = value;\n        }\n    }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","eventListener","method","elements","events","fn","Array","isArray","el","ev","slice","arguments","addEvent","bind","removeEvent","stringToHTML","str","window","DOMParser","parseFromString","body","firstElementChild","dom","document","createElement","innerHTML","isObject","item","mergeDeep","target","source","output","assign","keys","forEach","getKeyByValue","object","value","find","options","theme","i18n","closeOnSelect","modalElement","removeAttribute","name","getAttribute","resolve","element","base","elementKey","child","from","children","childInteractionKey","getHTMLElements","includes","save","classList","add","search","iconifyPath","collections","prefix","url","resolveCollection","collectionsOptions","collectionResolved","create","collection","hasCollection","IconPicker","static","defaultValue","iconSource","_eventListener","select","show","clear","hide","loaded","constructor","this","DEFAULT_OPTIONS","iconsLoading","_preBuild","length","_binEvents","_renderdIcons","_createModal","_catchError","val","HTMLElement","querySelector","template","iconsElements","callback","delay","timer","_eventBindings","close","modal","evt","iconsResult","availableIcons","filter","toLowerCase","categories","c","querySelectorAll","iconElement","hidden","result","contains","emptyElement","content","remove","appendChild","args","context","clearTimeout","setTimeout","apply","push","_onSave","isOpen","_emit","initialized","currentlySelectName","iconsLoaded","loadingState","destroy","deleteInstance","event","cb","on","undefined","off","callBacks","index","indexOf","splice","_setValueInput","emitValues","async","previousSelectedIcon","currentlySelectElement","_getIcons","library","iconFormat","entries","icons","iconTarget","title","className","dataset","categoryKey","chars","unicode","t","createElementNS","setAttribute","width","height","append","outerHTML","addEventListener","currentTarget","firstChild","SVGString","svg","defaultValueElement","iconValue","loadingElement","iconsURL","sourceInformation","values","Promise","all","map","iconURL","fetch","then","response","json","iconLibrary","exception","Error","HTMLInputElement"],"sourceRoot":""}