{"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/utlis/virtualIconGrid.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) {\r\n    if (!Array.isArray(elements)) {\r\n        elements = [elements];\r\n    }\r\n\r\n    if (!Array.isArray(events)) {\r\n        events = [events];\r\n    }\r\n\r\n    for (const el of elements) {\r\n        for (const ev of events) {\r\n            el[method](ev, fn);\r\n        }\r\n    }\r\n\r\n    return [].slice.call(arguments, 1);\r\n}\r\n\r\n/**\r\n * Add event to element.\r\n * @param elements DOM-Elements\r\n * @param events Event names\r\n * @param fn Callback\r\n * @param options Optional options\r\n * @return Array passed arguments\r\n */\r\nexport const addEvent = eventListener.bind(null, 'addEventListener');\r\n\r\n/**\r\n * Remove event from element.\r\n * @param elements DOM-Elements\r\n * @param events Event names\r\n * @param fn Callback\r\n * @param options Optional options\r\n * @return Array passed arguments\r\n */\r\nexport const removeEvent = eventListener.bind(null, 'removeEventListener');\r\n\r\n/**\r\n * Resolves a HTMLElement by query.\r\n * @param val\r\n * @returns {null|Document|Element}\r\n */\r\nexport function resolveElement(val) {\r\n    if (val instanceof HTMLElement) {\r\n        return val;\r\n    } else if (typeof val === 'string') {\r\n        return document.querySelector(val)\r\n    }\r\n\r\n    return null;\r\n}\r\n\r\n/**\r\n * Convert a template string into HTML DOM nodes\r\n * @param  {String} str The template string\r\n * @return {Node}       The template HTML\r\n */\r\nexport function stringToHTML(str) {\r\n    if (window.DOMParser) {\r\n        const parser = new DOMParser();\r\n        const doc = parser.parseFromString(str, 'text/html');\r\n        return doc.body.firstElementChild;\r\n    }\r\n\r\n    const dom = document.createElement('div');\r\n    dom.innerHTML = str;\r\n    return dom.firstElementChild;\r\n}\r\n\r\n/**\r\n * Check if item is an object\r\n * @param {Object} item\r\n * @returns {boolean}\r\n */\r\nexport function isObject(item) {\r\n    return (item && typeof item === 'object' && !Array.isArray(item));\r\n}\r\n\r\n/**\r\n *\r\n * @param target\r\n * @param source\r\n * @returns {Object}\r\n */\r\nexport function mergeDeep(target, source) {\r\n    let output = Object.assign({}, target);\r\n\r\n    if (isObject(target) && isObject(source)) {\r\n        Object.keys(source).forEach(key => {\r\n            if (isObject(source[key])) {\r\n                if (!(key in target))\r\n                    Object.assign(output, {[key]: source[key]});\r\n                else\r\n                    output[key] = mergeDeep(target[key], source[key]);\r\n            } else {\r\n                Object.assign(output, {[key]: source[key]});\r\n            }\r\n        });\r\n    }\r\n    return output;\r\n}\r\n\r\n/**\r\n *\r\n * @param callback\r\n * @param delay\r\n * @returns {(function(): void)|*}\r\n */\r\nexport function debounce(callback, delay){\r\n    var timer;\r\n    return function(){\r\n        var args = arguments;\r\n        var context = this;\r\n        clearTimeout(timer);\r\n        timer = setTimeout(function(){\r\n            callback.apply(context, args);\r\n        }, delay)\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param object\r\n * @param value\r\n * @returns {string}\r\n */\r\nexport function getKeyByValue(object, value) {\r\n    return Object.keys(object).find(key => object[key] === value);\r\n}\r\n","/*\r\n  Virtualized Icon Grid (vanilla JS)\r\n  ----------------------------------\r\n  Renders only the visible icons (plus a buffer) inside a scrollable container.\r\n  - No frameworks, no dependencies\r\n  - Works with your availableIcons: [{ value: string, categories?: string[] }]\r\n  - Integrates with an <input> for searching\r\n  - Keeps DOM size tiny and fast even with thousands of icons\r\n\r\n  Basic usage (inside your component/class):\r\n\r\n    this.virtualIconGrid = new VirtualIconGrid({\r\n      container: root.content,                    // scrollable container element\r\n      items: this.availableIcons,                 // data source\r\n      renderItem: (icon) => {\r\n        // Customize how each icon renders\r\n        const btn = document.createElement('button');\r\n        btn.type = 'button';\r\n        btn.className = `icon-element ${icon.value}`; // keep your class for styles\r\n        btn.title = icon.value;\r\n        btn.setAttribute('aria-label', icon.value);\r\n        // Example inner content; adjust to your icon system\r\n        btn.innerHTML = `<i class=\"${icon.value}\"></i>`;\r\n        // Optional: selection behavior\r\n        btn.addEventListener('click', () => this._onSelect && this._onSelect(icon));\r\n        return btn;\r\n      },\r\n      i18nEmpty: options.i18n['text:empty'],\r\n      estimateItemSize: { width: 72, height: 72 }, // tune to your icon tile size\r\n      bufferRows: 4                                // extra rows rendered above/below viewport\r\n    });\r\n\r\n    this.virtualIconGrid.mount();\r\n\r\n    // Hook up search input\r\n    const onSearch = debounce((evt) => {\r\n      const q = (evt.target.value || '').trim().toLowerCase();\r\n      this.virtualIconGrid.setQuery(q);\r\n    }, 120);\r\n    this._eventBindings.push(addEvent(root.search, 'input', onSearch));\r\n\r\n  Minimal CSS you should have:\r\n    .virtual-scroll { overflow: auto; position: relative; }\r\n    .vs-inner { position: relative; width: 100%; }\r\n    .vs-item { position: absolute; }\r\n    .is-empty { padding: 1rem; color: #666; }\r\n\r\n*/\r\n\r\nexport default class VirtualIconGrid {\r\n  constructor({\r\n    container,\r\n    items,\r\n    renderItem,\r\n    i18nEmpty = 'No results',\r\n    estimateItemSize = { width: 42, height: 42 },\r\n    gaps = { x: 6, y: 6 },\r\n\r\n    bufferRows = 3\r\n  }) {\r\n    if (!container) throw new Error('VirtualIconGrid: container is required');\r\n    if (!renderItem) throw new Error('VirtualIconGrid: renderItem is required');\r\n\r\n    this.container = container; // scrollable element\r\n    this.items = Array.isArray(items) ? items.slice() : [];\r\n    this.renderItem = renderItem;\r\n    this.i18nEmpty = i18nEmpty;\r\n    this.estimate = estimateItemSize;\r\n    this.bufferRows = Math.max(0, bufferRows | 0);\r\n\r\n    // Internal state\r\n    this._query = '';\r\n    this._indexed = [];   // [{value, text}]\r\n    this._filtered = [];  // filtered items\r\n    this._cols = 1;\r\n    this._itemW = this.estimate.width;\r\n    this._itemH = this.estimate.height;\r\n    this._gapX = gaps.x; // horizontal gap guess; refined via measurement\r\n    this._gapY = gaps.y; // vertical gap guess\r\n    this._mounted = false;\r\n    this._onScroll = this._onScroll.bind(this);\r\n    this._onResize = this._onResize.bind(this);\r\n\r\n    // DOM nodes\r\n    this._inner = document.createElement('div');\r\n    this._inner.className = 'vs-inner';\r\n    this._emptyEl = document.createElement('div');\r\n    this._emptyEl.className = 'is-empty';\r\n    this._emptyEl.textContent = this.i18nEmpty;\r\n\r\n    // For cheap diff to avoid rerendering same window\r\n    this._lastRange = { start: -1, end: -1 };\r\n\r\n    // Observer\r\n    this._resizeObs = null;\r\n\r\n    // Prepare index and initial filter\r\n    this._buildIndex();\r\n    this._filtered = this.items;\r\n  }\r\n\r\n  mount() {\r\n    if (this._mounted) return;\r\n    this._mounted = true;\r\n\r\n    // Clear container (you may want to preserve other siblings if needed)\r\n    while (this.container.firstChild) this.container.removeChild(this.container.firstChild);\r\n\r\n    // Ensure container has the right class for scroll behavior\r\n    this.container.classList.add('virtual-scroll');\r\n\r\n    // Attach inner scroll space\r\n    this.container.appendChild(this._inner);\r\n\r\n    // Measure actual item size + gaps using a sample\r\n    this._measureItem();\r\n\r\n    // Compute columns and paint initial frame\r\n    this._computeLayout();\r\n    this._updateInnerHeight();\r\n    this._renderWindow();\r\n    this._toggleEmptyMessage();\r\n\r\n    // Listeners\r\n    this.container.addEventListener('scroll', this._onScroll, { passive: true });\r\n\r\n    // ResizeObserver for container size changes\r\n    if ('ResizeObserver' in window) {\r\n      this._resizeObs = new ResizeObserver(this._onResize);\r\n      this._resizeObs.observe(this.container);\r\n    } else {\r\n      // Fallback: recompute on window resize\r\n      window.addEventListener('resize', this._onResize);\r\n    }\r\n  }\r\n\r\n  destroy() {\r\n    if (!this._mounted) return;\r\n    this._mounted = false;\r\n\r\n    this.container.removeEventListener('scroll', this._onScroll);\r\n    if (this._resizeObs) {\r\n      this._resizeObs.disconnect();\r\n      this._resizeObs = null;\r\n    } else {\r\n      window.removeEventListener('resize', this._onResize);\r\n    }\r\n\r\n    // Clean DOM\r\n    this._inner.replaceChildren();\r\n    if (this._emptyEl && this._emptyEl.parentNode) this._emptyEl.remove();\r\n  }\r\n\r\n  setItems(nextItems) {\r\n    this.items = Array.isArray(nextItems) ? nextItems.slice() : [];\r\n    this._buildIndex();\r\n    this._applyFilter();\r\n  }\r\n\r\n  setQuery(q) {\r\n    const next = (q || '').toLowerCase();\r\n    if (next === this._query) return;\r\n    this._query = next;\r\n    this._applyFilter();\r\n  }\r\n\r\n  // ---------- internals ----------\r\n  _buildIndex() {\r\n    this._indexed = this.items.map(it => ({\r\n      value: it.value,\r\n      text: [it.value, ...(it.categories || [])].join(' ').toLowerCase(),\r\n      ref: it\r\n    }));\r\n  }\r\n\r\n  _applyFilter() {\r\n    if (!this._query) {\r\n      this._filtered = this.items;\r\n    } else {\r\n      const q = this._query;\r\n      this._filtered = this._indexed\r\n        .filter(row => row.text.includes(q))\r\n        .map(row => row.ref);\r\n    }\r\n\r\n    this._toggleEmptyMessage();\r\n    this._updateInnerHeight();\r\n    this._lastRange.start = -1; // force repaint\r\n    this._renderWindow();\r\n  }\r\n\r\n  _toggleEmptyMessage() {\r\n    const hasResults = this._filtered.length > 0;\r\n    if (!hasResults) {\r\n      if (!this._emptyEl.parentNode) this.container.appendChild(this._emptyEl);\r\n    } else if (this._emptyEl.parentNode) {\r\n      this._emptyEl.remove();\r\n    }\r\n  }\r\n\r\n  _measureItem() {\r\n    // Create a sample tile using renderItem to get actual size and margins/gaps\r\n    const sampleData = this.items[0] || { value: 'sample' };\r\n    const sample = this.renderItem(sampleData);\r\n    sample.style.position = 'absolute';\r\n    sample.style.visibility = 'hidden';\r\n    sample.classList.add('vs-item');\r\n\r\n  // Ignore measured size, always use configured estimateItemSize for robust layout\r\n  this._itemW = this.estimate.width;\r\n  this._itemH = this.estimate.height;\r\n  sample.remove();\r\n  }\r\n\r\n  _computeLayout() {\r\n    const width = this.container.clientWidth || 1;\r\n    const fullW = this._itemW + this._gapX;\r\n    const cols = Math.max(1, Math.floor((width + this._gapX) / fullW));\r\n\r\n    this._cols = cols;\r\n  }\r\n\r\n  _totalRows() {\r\n    return Math.ceil(this._filtered.length / this._cols);\r\n  }\r\n\r\n  _updateInnerHeight() {\r\n    const rows = this._totalRows();\r\n    const totalH = rows * (this._itemH + this._gapY) - this._gapY; // last row no gap\r\n    this._inner.style.height = Math.max(0, totalH).toString() + 'px';\r\n  }\r\n\r\n  _onResize() {\r\n    const prevCols = this._cols;\r\n    this._computeLayout();\r\n    if (this._cols !== prevCols) {\r\n      this._updateInnerHeight();\r\n      this._lastRange.start = -1; // force repaint on layout change\r\n      this._renderWindow();\r\n    } else {\r\n      // Height may still change if container height changed\r\n      this._renderWindow();\r\n    }\r\n  }\r\n\r\n  _onScroll() {\r\n    this._renderWindow();\r\n  }\r\n\r\n  _renderWindow() {\r\n    if (!this._filtered.length) {\r\n      this._inner.replaceChildren();\r\n      this._lastRange = { start: -1, end: -1 };\r\n      return;\r\n    }\r\n\r\n    const viewTop = this.container.scrollTop;\r\n    const viewH = this.container.clientHeight;\r\n    const rowH = this._itemH + this._gapY;\r\n\r\n    const firstRow = Math.max(0, Math.floor(viewTop / rowH) - this.bufferRows);\r\n    const lastRow = Math.floor((viewTop + viewH) / rowH) + this.bufferRows;\r\n\r\n    const start = firstRow * this._cols;\r\n    const endExclusive = Math.min(this._filtered.length, (lastRow + 1) * this._cols);\r\n\r\n    if (start === this._lastRange.start && endExclusive === this._lastRange.end) return;\r\n    this._lastRange = { start, end: endExclusive };\r\n\r\n    const frag = document.createDocumentFragment();\r\n\r\n    for (let i = start; i < endExclusive; i++) {\r\n      const data = this._filtered[i];\r\n      if (!data) continue;\r\n      const row = Math.floor(i / this._cols);\r\n      const col = i % this._cols;\r\n      const x = col * (this._itemW + this._gapX);\r\n      const y = row * (this._itemH + this._gapY);\r\n\r\n      const el = this.renderItem(data);\r\n      el.classList.add('vs-item');\r\n      el.style.transform = `translate(${x}px, ${y}px)`;\r\n      el.style.width = this._itemW + 'px';\r\n      el.style.height = this._itemH + 'px';\r\n  \r\n      frag.appendChild(el);\r\n    }\r\n\r\n    this._inner.replaceChildren(frag);\r\n  }\r\n}\r\n","import {stringToHTML} from \"./utlis/utils\";\r\n\r\nexport default options => {\r\n    const {theme, i18n, closeOnSelect} = options;\r\n\r\n    const modalElement = getHTMLElements(`\r\n        <div class=\"icon-picker-modal\" tabindex=\"-1\" data-theme=\"${theme}\" data-element=\"modal\" aria-modal=\"true\" aria-labelledby=\"Icon picker modal\" role=\"dialog\">\r\n            <div class=\"icon-picker-modal__dialog\">\r\n                <div class=\"icon-picker-modal__header\" data-element=\"header\">\r\n                    ${typeof i18n['text:title'] === 'string' && i18n['text:title'] !== '' ? `<h2>${i18n['text:title']}</h2>` : ''}\r\n                    \r\n                    <button class=\"icon-picker-modal--close\" aria-label=\"Close\" data-interaction=\"close\">\r\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke-width=\"1.5\">\r\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\"/>\r\n                        </svg>\r\n                    </button>\r\n                </div>\r\n                \r\n                <input placeholder=\"${i18n['input:placeholder']}\" class=\"icon-picker-modal__search\" aria-label=\"${i18n['input:placeholder']}\" data-interaction=\"search\">\r\n                \r\n                <div class=\"icon-picker-modal__content\" data-element=\"content\"></div>\r\n            \r\n                ${!closeOnSelect ? `\r\n                    <div class=\"icon-picker-modal__footer\" data-element=\"footer\">\r\n                        <button type=\"button\" class=\"picker-save\" data-interaction=\"save\">${i18n['btn:save']}</button>\r\n                    </div>` : ''\r\n    }\r\n            </div>\r\n        </div>\r\n    `);\r\n\r\n    if (theme.includes('bootstrap')) {\r\n        modalElement.save?.classList.add('btn', 'btn-primary');\r\n        modalElement.search.classList.add('form-control');\r\n    }\r\n\r\n    return modalElement;\r\n}\r\n\r\n\r\nfunction getHTMLElements(str) {\r\n    const removeAttribute = (el, name) => {\r\n        const value = el.getAttribute(name);\r\n        el.removeAttribute(name);\r\n        return value;\r\n    };\r\n\r\n    const resolve = (element, base = {}) => {\r\n        const elementKey = removeAttribute(element, 'data-element');\r\n        elementKey && (base[elementKey] = element);\r\n\r\n        for (const child of Array.from(element.children)) {\r\n            const childInteractionKey = removeAttribute(child, 'data-interaction');\r\n\r\n            if (childInteractionKey) {\r\n                childInteractionKey && (base[childInteractionKey] = child);\r\n            }\r\n\r\n            resolve(child, base);\r\n        }\r\n\r\n        return base;\r\n    };\r\n\r\n    return resolve(stringToHTML(str));\r\n}\r\n","const iconifyPath = 'https://raw.githubusercontent.com/iconify/icon-sets/master/json';\r\n\r\nexport const collections = {\r\n    'Material Design Icons': {\r\n        key: 'mdi',\r\n        prefix: 'mdi mdi-',\r\n        url: `${iconifyPath}/mdi.json`\r\n    },\r\n    'FontAwesome Brands 6': {\r\n        key: 'fa6-brands',\r\n        prefix: 'fab fa-',\r\n        url: `${iconifyPath}/fa6-brands.json`\r\n    },\r\n    'FontAwesome Solid 6': {\r\n        key: 'fa6-solid',\r\n        prefix: 'fas fa-',\r\n        url: `${iconifyPath}/fa6-solid.json`\r\n\r\n    },\r\n    'FontAwesome Regular 6': {\r\n        key: 'fa6-regular',\r\n        prefix: 'far fa-',\r\n        url: `${iconifyPath}/fa6-regular.json`\r\n    },\r\n    'Iconoir': {\r\n        key: 'iconoir',\r\n        prefix: 'iconoir-',\r\n        url: `${iconifyPath}/iconoir.json`\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {array} collectionsOptions\r\n */\r\nexport function resolveCollection(collectionsOptions) {\r\n    let collectionResolved = Object.create({});\r\n\r\n    if (Array.isArray(collectionsOptions)) {\r\n        collectionsOptions.forEach((collection) => {\r\n            if (hasCollection(collection)) {\r\n                collectionResolved[collections[collection].key] = collections[collection]\r\n            } else if (collection.key) {\r\n                collectionResolved[collection.key] = collection\r\n            }\r\n        })\r\n    }\r\n\r\n    return collectionResolved;\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} collection\r\n * @returns {boolean}\r\n */\r\nfunction hasCollection(collection) {\r\n    return collections.hasOwnProperty(collection)\r\n}\r\n","import * as _ from \"./utlis/utils\";\r\nimport VirtualIconGrid from \"./utlis/virtualIconGrid\";\r\nimport template from \"./template\";\r\nimport { resolveCollection } from \"./utlis/collections\";\r\n\r\nexport default class IconPicker {\r\n    virtualIconGrid = null;\r\n    availableIcons = [];\r\n    static DEFAULT_OPTIONS = {\r\n        theme: 'default',\r\n        closeOnSelect: true,\r\n        defaultValue: null,\r\n        iconSource: [],\r\n        i18n: {\r\n            'input:placeholder': 'Search icon…',\r\n\r\n            'text:title': 'Select icon',\r\n            'text:empty': 'No results found…',\r\n            'text:loading' : 'Loading…',\r\n\r\n            'btn:save': 'Save'\r\n        },\r\n        itemSize: 50, // px\r\n        iconSize: 32, // px\r\n    }\r\n\r\n    _eventListener = {\r\n        select: [],\r\n        save: [],\r\n        show: [],\r\n        clear: [],\r\n        hide: [],\r\n        loaded: []\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {string | HTMLElement} el\r\n     * @param {Object} options\r\n     */\r\n    constructor(el, options = {}) {\r\n        this.options = _.mergeDeep(IconPicker.DEFAULT_OPTIONS, options);\r\n        this.element = el;\r\n        this.iconsLoading = true;\r\n\r\n        // Initialize icon picker\r\n        this._preBuild();\r\n\r\n        if (this.element && this.options.iconSource.length > 0) {\r\n            this._binEvents();\r\n            this._renderdIcons();\r\n            this._createModal();\r\n        } else {\r\n            this._catchError('iconSourceMissing');\r\n        }\r\n\r\n    }\r\n\r\n    _preBuild() {\r\n        this.element = _.resolveElement(this.element);\r\n        this.root = template(this.options);\r\n\r\n        if (!Array.isArray(this.options.iconSource) && this.options.iconSource.length > 0) {\r\n            this.options.iconSource = [this.options.iconSource];\r\n        }\r\n        // Prepare (lazy) virtual grid; mount after modal becomes visible to get correct widths\r\n        this.virtualIconGrid = this.virtualIconGrid || new VirtualIconGrid({\r\n            container: this.root.content,\r\n            items: this.availableIcons ?? [],\r\n            renderItem: (icon) => this.renderItem(icon),\r\n            i18nEmpty: this.options.i18n['text:empty'],\r\n            estimateItemSize: { width: this.options.itemSize, height: this.options.itemSize }, // tweak to your tile size\r\n            bufferRows: 4\r\n        });\r\n    }\r\n\r\n    renderItem(icon) {\r\n        // Customize how each icon renders\r\n        const btn = document.createElement('button');\r\n        btn.type = 'button';\r\n        btn.className = `icon-element ${icon.value}`; \r\n        btn.title = icon.value;\r\n        btn.setAttribute('aria-label', icon.value);\r\n        btn.innerHTML = icon.body;\r\n        btn.addEventListener('click', (evt) => icon.onSelect && icon.onSelect(evt));\r\n        \r\n        return btn;\r\n    }\r\n\r\n\r\n    ensureVirtualMounted = () => {\r\n        // If modal just opened, wait a frame so it has layout/width\r\n        requestAnimationFrame(() => {\r\n        if (!this.virtualIconGrid._mounted) {\r\n            this.virtualIconGrid.mount();\r\n        } else {\r\n            // Recompute columns/height if container size changed while hidden\r\n            this.virtualIconGrid._onResize && this.virtualIconGrid._onResize();\r\n        }\r\n        // Apply whatever is currently in the search box\r\n        const q = (this.root.search?.value || '').trim().toLowerCase();\r\n        this.virtualIconGrid.setQuery(q);\r\n        this.virtualIconGrid.setItems(this.availableIcons);\r\n        });\r\n    };\r\n\r\n\r\n    _binEvents() {\r\n        const {options, root, element, virtualIconGrid} = this;\r\n\r\n        const onSearch = _.debounce((evt) => {\r\n            const q = (evt.target.value || '').trim().toLowerCase();\r\n            if (virtualIconGrid) virtualIconGrid.setQuery(q);\r\n        }, 120);\r\n\r\n        this._eventBindings = [\r\n            _.addEvent(element, 'click', () => { \r\n                this.show(); \r\n                this.ensureVirtualMounted(); \r\n            }),\r\n            _.addEvent(root.close, 'click', () => this.hide()),\r\n            _.addEvent(root.modal, 'click', (evt) => {\r\n                if (evt.target === root.modal) {\r\n                    this.hide();\r\n                }\r\n            }),\r\n            _.addEvent(root.search, 'keyup', _.debounce(onSearch, 250))\r\n        ];\r\n\r\n        if (!options.closeOnSelect) {\r\n            this._eventBindings.push(_.addEvent(root.save, 'click', () => this._onSave()));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Hide icon picker modal\r\n     */\r\n    hide() {\r\n        if (this.isOpen()) {\r\n            this.root.modal.classList.remove('is-visible');\r\n            this._emit('hide');\r\n\r\n            return this;\r\n        }\r\n\r\n        return false\r\n    }\r\n\r\n    /**\r\n     * Show icon picker modal\r\n     */\r\n    show() {\r\n        if (!this.isOpen()) {\r\n            this.root.modal.classList.add('is-visible');\r\n            this._emit('show');\r\n\r\n            return this;\r\n        }\r\n\r\n        return false\r\n    }\r\n\r\n    clear() {\r\n        if (this.initialized && this.currentlySelectName) {\r\n            this.currentlySelectName = null;\r\n\r\n            this._emit('clear');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check if modal is open\r\n     * @returns {boolean}\r\n     */\r\n    isOpen() {\r\n        return this.root.modal.classList.contains('is-visible');\r\n    }\r\n\r\n    /**\r\n     * Check if the icons are loaded\r\n     * @returns {boolean}\r\n     */\r\n    iconsLoaded(){\r\n        return !this.loadingState;\r\n    }\r\n\r\n    /**\r\n     * Destroy icon picker instance and detach all events listeners\r\n     * @param {boolean} deleteInstance\r\n     */\r\n    destroy(deleteInstance = true) {\r\n        this.initialized = false;\r\n\r\n        // Remove elements events\r\n        this._eventBindings.forEach(args => _.removeEvent(...args));\r\n\r\n        // Delete instance\r\n        if (deleteInstance) {\r\n            Object.keys(this).forEach((key) => delete this[key]);\r\n        }\r\n    }\r\n\r\n    _emit(event, ...args) {\r\n        this._eventListener[event].forEach(cb => cb(...args, this));\r\n    }\r\n\r\n    on(event, callback) {\r\n        if (this._eventListener[event] !== undefined) {\r\n            this._eventListener[event].push(callback);\r\n            return this;\r\n        }\r\n\r\n        return false\r\n    }\r\n\r\n    off(event, callback) {\r\n        const callBacks = (this._eventListener[event] || []);\r\n        const index = callBacks.indexOf(callback);\r\n\r\n        if (~index) {\r\n            callBacks.splice(index, 1);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    _createModal() {\r\n        document.body.appendChild(this.root.modal);\r\n\r\n        this.initialized = true;\r\n    }\r\n\r\n    _onSave() {\r\n        this._setValueInput()\r\n\r\n        this.hide();\r\n        this._emit('save', this.emitValues);\r\n    }\r\n\r\n    /**\r\n     * Generate icons elements\r\n     * @private\r\n     */\r\n    async _renderdIcons() {\r\n        const {root, options} = this;\r\n        let previousSelectedIcon = null;\r\n        let currentlySelectElement = null;\r\n        let categories = null;\r\n        this.availableIcons = [];\r\n\r\n        root.content.innerHTML = `<div class=\"is-loading\">${options.i18n['text:loading']}</div>`;\r\n\r\n        let icons = await this._getIcons();\r\n\r\n        icons.forEach((library) => {\r\n            let iconFormat = library.iconFormat ? library.iconFormat : 'svg';\r\n\r\n            for (const [key, value] of Object.entries(library.icons)) {\r\n                const iconTarget = document.createElement('button');\r\n                iconTarget.title = key\r\n                iconTarget.className = `icon-element ${key}`;\r\n                iconTarget.dataset.value = library.prefix + key;\r\n\r\n                if (library.categories && Object.entries(library.categories).length > 0) {\r\n                    categories = [];\r\n\r\n                    for (const [categoryKey] of Object.entries(library.categories)) {\r\n                        if (library.categories[categoryKey].includes(key)) {\r\n                            if (categories.length > 0) {\r\n                                categories.push(categoryKey.toLowerCase())\r\n                            } else {\r\n                                categories = [categoryKey.toLowerCase()]\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (library.chars) {\r\n                    iconTarget.dataset.unicode = _.getKeyByValue(library.chars, key);\r\n                }\r\n\r\n                let iconElement;\r\n                if (iconFormat === 'i' || !value.body) {\r\n                    iconElement = document.createElement('i');\r\n                    iconElement.setAttribute('class', iconTarget.dataset.value);\r\n                } else if (iconFormat === 'markup') {\r\n                    let t = document.createElement('template');\r\n                    t.innerHTML = value.body;\r\n                    iconElement = t.content;\r\n                } else {\r\n                    iconElement = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n                    iconElement.setAttribute('height', (this.options.iconSize).toString());\r\n                    iconElement.setAttribute('width', (this.options.iconSize).toString());\r\n                    iconElement.setAttribute('viewBox', `0 0 ${value.width ? value.width : library.width} ${value.height ? value.height : library.height}`);\r\n                    iconElement.innerHTML = value.body;\r\n                }\r\n\r\n                this.availableIcons.push({value: key, body: iconElement.outerHTML, ...(categories?.length > 0 && {categories}), onSelect: (evt) => {\r\n                    if (this.currentlySelectName !== evt.currentTarget.firstChild.className) {\r\n                        evt.currentTarget.classList.add('is-selected');\r\n\r\n                        currentlySelectElement = evt.currentTarget;\r\n                        this.currentlySelectName = currentlySelectElement.dataset.value;\r\n                        this.SVGString = iconElement.outerHTML;\r\n\r\n                        this.emitValues = {\r\n                            name: key,\r\n                            value: this.currentlySelectName,\r\n                            svg: this.SVGString,\r\n                        }\r\n\r\n                        if (library.chars) {\r\n                            this.emitValues.unicode = iconElement.dataset.unicode\r\n                        }\r\n\r\n                        this._emit('select', this.emitValues);\r\n                    }\r\n\r\n                    if (previousSelectedIcon) {\r\n                        previousSelectedIcon.classList.remove('is-selected');\r\n                    }\r\n\r\n                    if (options.closeOnSelect) {\r\n                        this._onSave();\r\n                    }\r\n\r\n                    previousSelectedIcon = currentlySelectElement;\r\n                }});\r\n            }\r\n        });\r\n\r\n        if (options.defaultValue || this.element.value) {\r\n            // Check if icon name ou icon value is set\r\n            let defaultValueElement = document.querySelector(`[data-value=\"${options.defaultValue ? options.defaultValue : this.element.value}\"]`) ?\r\n                document.querySelector(`[data-value=\"${options.defaultValue ? options.defaultValue : this.element.value}\"]`) :\r\n                document.querySelector(`.${options.defaultValue ? options.defaultValue : this.element.value}`);\r\n\r\n            let iconValue = defaultValueElement?.dataset.value ?? '';\r\n            defaultValueElement?.classList.add('is-selected');\r\n\r\n            previousSelectedIcon = defaultValueElement;\r\n            this.currentlySelectName = iconValue;\r\n\r\n            if (!this.element.value) {\r\n                this._setValueInput();\r\n            }\r\n        }\r\n        this.ensureVirtualMounted(); \r\n\r\n        const loadingElement = root.content.querySelector('.is-loading');\r\n        if (loadingElement) {\r\n            loadingElement.remove();\r\n        }\r\n\r\n        this.iconsLoading = false;\r\n        this._emit('loaded');\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {string}\r\n     * @private\r\n     */\r\n    async _getIcons() {\r\n        const {options} = this\r\n        const iconsURL = [];\r\n\r\n        let sourceInformation = resolveCollection(options.iconSource);\r\n\r\n        for (const source of Object.values(sourceInformation)) {\r\n            iconsURL.push(source.url)\r\n        }\r\n\r\n        return await Promise.all(iconsURL.map((iconURL) => fetch(iconURL).then((response) => response.json())))\r\n            .then((iconLibrary) => {\r\n                iconLibrary.forEach((library) => {\r\n                    if (sourceInformation.hasOwnProperty(library.prefix)) {\r\n                        library.prefix = sourceInformation[library.prefix].prefix\r\n                    }\r\n                });\r\n\r\n                return iconLibrary;\r\n            });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string} exception\r\n     * @private\r\n     */\r\n    _catchError(exception) {\r\n        switch (exception) {\r\n            case 'iconSourceMissing':\r\n                throw Error('No icon source was found.');\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set value into input element\r\n     * @param value\r\n     * @private\r\n     */\r\n    _setValueInput(value = this.currentlySelectName) {\r\n        const {element} = this;\r\n\r\n        if (element instanceof HTMLInputElement && this.currentlySelectName) {\r\n            element.value = value;\r\n        }\r\n    }\r\n}\r\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","isObject","item","mergeDeep","target","source","output","assign","keys","forEach","debounce","callback","delay","timer","args","context","this","clearTimeout","setTimeout","apply","getKeyByValue","object","value","find","VirtualIconGrid","constructor","container","items","renderItem","i18nEmpty","estimateItemSize","width","height","gaps","x","y","bufferRows","Error","estimate","Math","max","_query","_indexed","_filtered","_cols","_itemW","_itemH","_gapX","_gapY","_mounted","_onScroll","_onResize","_inner","document","createElement","className","_emptyEl","textContent","_lastRange","start","end","_resizeObs","_buildIndex","mount","firstChild","removeChild","classList","add","appendChild","_measureItem","_computeLayout","_updateInnerHeight","_renderWindow","_toggleEmptyMessage","addEventListener","passive","window","ResizeObserver","observe","destroy","removeEventListener","disconnect","replaceChildren","parentNode","remove","setItems","nextItems","_applyFilter","setQuery","q","next","toLowerCase","map","it","text","categories","join","ref","filter","row","includes","length","sampleData","sample","style","position","visibility","clientWidth","fullW","cols","floor","_totalRows","ceil","totalH","toString","prevCols","viewTop","scrollTop","viewH","clientHeight","rowH","firstRow","lastRow","endExclusive","min","frag","createDocumentFragment","i","data","transform","options","theme","i18n","closeOnSelect","modalElement","str","removeAttribute","name","getAttribute","resolve","element","base","elementKey","child","from","children","childInteractionKey","DOMParser","parseFromString","body","firstElementChild","dom","innerHTML","stringToHTML","getHTMLElements","save","search","iconifyPath","collections","prefix","url","resolveCollection","collectionsOptions","collectionResolved","create","collection","hasCollection","IconPicker","virtualIconGrid","availableIcons","static","defaultValue","iconSource","itemSize","iconSize","_eventListener","select","show","clear","hide","loaded","DEFAULT_OPTIONS","iconsLoading","_preBuild","_binEvents","_renderdIcons","_createModal","_catchError","val","HTMLElement","querySelector","template","content","icon","btn","type","title","setAttribute","evt","onSelect","ensureVirtualMounted","requestAnimationFrame","trim","onSearch","_eventBindings","close","modal","push","_onSave","isOpen","_emit","initialized","currentlySelectName","contains","iconsLoaded","loadingState","deleteInstance","event","cb","on","undefined","off","callBacks","index","indexOf","splice","_setValueInput","emitValues","previousSelectedIcon","currentlySelectElement","_getIcons","library","iconFormat","entries","icons","iconTarget","dataset","categoryKey","iconElement","chars","unicode","t","createElementNS","outerHTML","currentTarget","SVGString","svg","defaultValueElement","iconValue","loadingElement","iconsURL","sourceInformation","values","Promise","all","iconURL","fetch","then","response","json","iconLibrary","exception","HTMLInputElement"],"sourceRoot":""}