{"version":3,"mappings":"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","names":["callback","ICON_CACHE","FALLBACK_ICON","loadIcon","key","name","variant","svg","__variableDynamicImportRuntimeHelper","data","getVariant","sharp","filled","rtl","resolveIcon","v_sharp","v_filled","v_rtl","icon","transformIcon","el","tmp","transformIcons","icons","batchSize","i","batch","promises","init"],"sources":["../../src/helpers/onPageLoad.ts","../../src/components/icon.ts"],"sourcesContent":["export const onPageLoad = (callback: () => void) => {\r\n\tdocument.addEventListener('DOMContentLoaded', callback);\r\n};\r\n","/**\r\n * This script watches the entire dom for special icon shortcuts and transforms them into fully qualified SVGs.\r\n */\r\n\r\nexport type Icon = {\r\n\tkey: string;\r\n\tname: string;\r\n\tvariant: string;\r\n\tdata: string;\r\n};\r\n\r\nconst ICON_CACHE: Record<string, Icon> = {};\r\n\r\nconst FALLBACK_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\r\n\t<path d=\"M21 3h-4v1h3v3h1V3zm-5 0h-2v1h2V3zm-3 0h-2v1h2V3zm-3 0H8v1h2V3zM7 3H3v4h1V4h3V3zm11.15 2.15L17 6.29l.7.71 1.15-1.15-.7-.7zm-12.3 0l-.7.7L6.29 7 7 6.3 5.85 5.14zm5.38.9l-.3.04h-.01a.59.59 0 00-.02.01h-.03-.01v.01h-.01-.01-.01-.01-.01v.01a.05.05 0 01-.01 0h-.03l-.01.01h-.01-.01-.01-.01l-.02.01h-.03l-.56.16-.01.01h-.02l-.01.01h-.02l-.01.01h-.01-.01l-.01.01h-.02l-.01.01h-.01-.01v.01h-.01-.01l-.02.01H9.9l-.18.08.38.92c.4-.16.83-.27 1.26-.33l-.13-1zm1.57 0l-.13 1c.42.05.85.17 1.25.33l.38-.92h-.01a.15.15 0 01-.01-.01h-.01-.01v-.01h-.02l-.01-.01h-.02v-.01h-.01-.01a.27.27 0 00-.01-.01h-.01-.01V6.4h-.01-.01l-.01-.01h-.01-.01v-.01h-.01-.01-.01v-.01h-.02l-.01-.01h-.01-.01v-.01H14l-.02-.01-.02-.01-.03-.01a5.99 5.99 0 00-1.13-.27zM8.36 7.23zm0 0zm0 0c-.41.31-.79.68-1.1 1.1l.78.61c.27-.34.58-.65.93-.92l-.6-.8zm7.3.02l-.6.79c.34.27.65.58.91.92l.8-.6a5.84 5.84 0 00-.09-.11v-.02h-.01v-.01h-.01V8.2h-.01V8.2h-.01v-.01h-.01v-.01l-.01-.01-.01-.02-.02-.01a5.96 5.96 0 00-.93-.9zM21 8h-1v2h1V8zM4 8H3v2h1V8zm10.15 1.15L13 10.29l.7.71 1.15-1.15-.7-.7zm-4.3 0l-.7.7L10.29 11l.71-.7-1.15-1.15zm-3.39.55v.01l-.01.01v.02h-.01v.02l-.01.01v.01a.1.1 0 00-.01.02v.01l-.01.01v.02H6.4v.03h-.01v.02l-.01.01v.02h-.01v.03l-.02.02V10l-.01.02v.02l-.01.02a2.09 2.09 0 00-.01.02c-.13.37-.22.75-.27 1.13l1 .13c.05-.43.17-.85.33-1.25l-.92-.38zm11.09.01l-.93.39c.17.4.28.82.34 1.26l1-.13a6.02 6.02 0 00-.07-.36v-.02-.02-.01l-.01-.02v-.01-.01-.01-.01h-.01v-.01-.01-.01-.01l-.01-.02a6.04 6.04 0 00-.26-.85.06.06 0 010-.01v-.01l-.01-.01a.1.1 0 010-.01V9.8h-.01v-.01-.01l-.01-.02-.02-.05zM21 11h-1v2h1v-2zM4 11H3v2h1v-2zm8 .3l-.7.7.7.7.7-.7-.7-.7zm-4.96 1.33l-1 .13.13.65v.04l.01.01v.04h.01v.03l.01.01v.02l.01.01v.01a.15.15 0 010 .01v.01l.01.01v.03h.01v.03a.32.32 0 01.01.01v.03l.01.01v.02a.05.05 0 00.01 0 .32.32 0 000 .01v.02l.01.02v.02l.01.01c.05.16.1.3.17.45l.92-.37c-.16-.41-.28-.83-.33-1.27zm9.92.03c-.06.43-.17.85-.34 1.26l.92.38v-.01l.01-.01v-.01a.14.14 0 010-.01h.01v-.01-.01a.08.08 0 00.01-.01v-.01l.01-.01v-.01a.3.3 0 010-.01h.01v-.01-.01-.01h.01v-.01-.01l.01-.01v-.01a.13.13 0 00.01-.02v-.01-.01h.01v-.01-.01l.01-.01v-.01-.01l.01-.01V14 14h.01v-.01-.01-.01h.01v-.01-.01-.01h.01v-.01-.01-.01h.01v-.01-.01-.01h.01v-.01-.01-.01h.01v-.01-.01-.01a.04.04 0 00.01 0v-.02-.01h.01v-.01-.01-.01l.01-.01v-.01-.01-.01h.01v-.01-.01-.01h.01v-.01-.01-.01l.01-.01v-.01a.06.06 0 000-.01v-.01h.01a.1.1 0 000-.02v-.01-.01h.01v-.01-.01-.01l.01-.01v-.01-.01-.01h.01v-.01-.01-.01-.01h.01v-.01a.15.15 0 010-.01v-.01-.01h.01a.1.1 0 000-.01.79.79 0 000-.02v-.01h.01v-.01-.02-.01a.16.16 0 01.01-.01v-.02-.02c.05-.17.08-.34.1-.5l-1-.14zM13.7 13l-.71.7 1.15 1.15.7-.7L13.71 13zm-3.42 0l-1.14 1.15.7.7L11 13.71l-.7-.71zM21 14h-1v2h1v-2zM4 14H3v2h1v-2zm4.02 1.03l-.8.6a6 6 0 00.3.35V16l.02.02v.01l.02.01v.01h.01v.01l.01.01.01.01.02.02v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01a.06.06 0 01.01 0v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01l.02.02v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01a.08.08 0 00.01 0v.01h.01v.01h.01v.01h.01v.01a.1.1 0 00.01 0v.01h.01v.01h.01v.01h.01l.01.01v.01h.01l.01.01.01.01h.01v.01h.01v.01h.01v.01H8v.01H8v.01h.01v.01h.01l.01.01.01.01h.01v.01h.01v.01h.01v.01h.01v.01h.01v.01h.01l.01.01h.01v.01h.01l.01.02h.01v.01h.01l.01.01.01.01.02.02.13.1.6-.8a4.97 4.97 0 01-.9-.92zm7.93.04c-.27.34-.58.65-.92.91l.6.8c.41-.31.79-.68 1.11-1.1l-.79-.61zm-5.87 1.55l-.38.92h.01l.01.01h.02v.01h.02v.01h.02a.09.09 0 00.01 0v.01a.16.16 0 00.02 0l.01.01h.02v.01h.03v.01h.02v.01h.03v.01h.03v.01h.02v.01H10l.02.01h.02v.01h.02l.02.01h.02a.1.1 0 010 .01h.02l.03.01c.35.12.7.2 1.05.25l.14-1a5.02 5.02 0 01-1.25-.33zm3.81 0c-.4.17-.83.29-1.26.34l.12 1c.53-.07 1.04-.2 1.52-.4l-.38-.93zM21 17h-1v3h-3v1h4v-4zm-3.3 0l-.7.7 1.15 1.15.7-.7L17.71 17zM6.3 17l-1.15 1.15.7.7L7 17.71 6.3 17zM4 17H3v4h4v-1H4v-3zm12 3h-2v1h2v-1zm-3 0h-2v1h2v-1zm-3 0H8v1h2v-1z\" />\r\n</svg>`;\r\n\r\nconst loadIcon = async (key: string, name: string, variant: string): Promise<Icon | null> => {\r\n\ttry {\r\n\t\t// dynamically import the raw SVG contents from src/icons/**/*.svg\r\n\t\tconst svg = await import(`../icons/${name}/${name}_${variant}.svg?raw`);\r\n\t\tif (!svg?.default) return null;\r\n\r\n\t\tconst data = svg.default;\r\n\t\treturn { key, name, variant, data };\r\n\t} catch (e) {\r\n\t\tconsole.warn(`Failed to import icon: [${name}:${variant}]\\n`, e);\r\n\t\treturn null;\r\n\t}\r\n};\r\n\r\nconst getVariant = (sharp: boolean, filled: boolean, rtl: boolean) => {\r\n\treturn `${sharp ? 'sharp' : 'round'}_${filled ? 'filled' : 'lined'}${rtl ? '_rtl' : ''}`;\r\n};\r\n\r\nconst resolveIcon = async (name: string, variant?: string): Promise<Icon> => {\r\n\t// check the cache\r\n\tconst key = `${name}:${variant ?? ''}`;\r\n\tif (key in ICON_CACHE) return ICON_CACHE[key];\r\n\r\n\tconst v_sharp = variant?.includes('sharp') ?? false;\r\n\tconst v_filled = variant?.includes('filled') ?? false;\r\n\tconst v_rtl = variant?.includes('rtl') ?? false;\r\n\r\n\tlet icon = await loadIcon(key, name, getVariant(v_sharp, v_filled, v_rtl));\r\n\tif (!icon) icon = await loadIcon(key, name, getVariant(!v_sharp, v_filled, v_rtl));\r\n\tif (!icon) icon = await loadIcon(key, name, getVariant(v_sharp, !v_filled, v_rtl));\r\n\tif (!icon) icon = await loadIcon(key, name, getVariant(!v_sharp, !v_filled, v_rtl));\r\n\r\n\t// fall back to non-RTL only if RTL is specifically specified in the variant\r\n\tif (v_rtl) {\r\n\t\tif (!icon) icon = await loadIcon(key, name, getVariant(v_sharp, v_filled, !v_rtl));\r\n\t\tif (!icon) icon = await loadIcon(key, name, getVariant(!v_sharp, v_filled, !v_rtl));\r\n\t\tif (!icon) icon = await loadIcon(key, name, getVariant(v_sharp, !v_filled, !v_rtl));\r\n\t\tif (!icon) icon = await loadIcon(key, name, getVariant(!v_sharp, !v_filled, !v_rtl));\r\n\t}\r\n\r\n\tif (icon) {\r\n\t\t// save to cache\r\n\t\tICON_CACHE[icon.key] = icon;\r\n\t\treturn icon;\r\n\t} else {\r\n\t\treturn { key: '[placeholder]', name: '[placeholder]', variant: '', data: FALLBACK_ICON };\r\n\t}\r\n};\r\n\r\nconst transformIcon = async (el: HTMLElement, name: string) => {\r\n\tif (!name) return;\r\n\r\n\t// load the icon\r\n\tconst icon = await resolveIcon(name, el.dataset.v);\r\n\r\n\t// use a placeholder to generated the transformable SVG node\r\n\tconst tmp = document.createElement('div');\r\n\ttmp.innerHTML = icon.data;\r\n\tconst svg = tmp.querySelector('svg');\r\n\tif (!svg) return;\r\n\tsvg.setAttribute('class', 'icon' + (el.className ? ' ' + el.className : ''));\r\n\tsvg.dataset.icon = icon.name;\r\n\tif (icon.variant) svg.dataset.v = icon.variant;\r\n\r\n\t// replace the span with the svg\r\n\tel.insertAdjacentElement('afterend', svg);\r\n\tel.parentElement?.removeChild(el);\r\n};\r\n\r\nconst transformIcons = async () => {\r\n\tconst icons = Array.from(document.querySelectorAll<HTMLSpanElement>('span[data-icon]'));\r\n\r\n\t// Immediately delete the [data-icon] attribute to prevent processing this tag multiple times while loading.\r\n\t// We save the icon name here on a different attribute so the batch procesor can still read it internally.\r\n\tfor (const icon of icons) {\r\n\t\ticon.dataset.iconLoading = icon.dataset.icon;\r\n\t\tdelete icon.dataset.icon;\r\n\t}\r\n\r\n\t// process icons per batch in case there are too many icons on the page\r\n\tconst batchSize = 20;\r\n\tfor (let i = 0; i < icons.length; i += batchSize) {\r\n\t\tconst batch = icons.slice(i, i + batchSize);\r\n\t\tconst promises: Promise<void>[] = [];\r\n\t\tfor (const icon of batch) {\r\n\t\t\tconst name = icon.dataset.iconLoading || '';\r\n\t\t\tpromises.push(transformIcon(icon, name));\r\n\t\t}\r\n\t\tawait Promise.allSettled(promises);\r\n\t}\r\n};\r\n\r\nexport const init = () => {\r\n\t// first pass\r\n\ttransformIcons();\r\n\r\n\t// start a full-page mutation observer to look for matching icon shortcuts\r\n\tconst observer = new MutationObserver(transformIcons);\r\n\r\n\tobserver.observe(document.body, {\r\n\t\tsubtree: true,\r\n\t\tchildList: true,\r\n\t\tattributes: true,\r\n\t\tattributeFilter: ['data-icon']\r\n\t});\r\n};\r\n\r\nexport default {\r\n\tinit\r\n};\r\n"],"file":"shared/icon.js"}