{"ast":null,"code":"import React from 'react';\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n  const colonSeparated = value.split(\":\");\n  if (value.slice(0, 1) === \"@\") {\n    if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n      return null;\n    }\n    provider = colonSeparated.shift().slice(1);\n  }\n  if (colonSeparated.length > 3 || !colonSeparated.length) {\n    return null;\n  }\n  if (colonSeparated.length > 1) {\n    const name2 = colonSeparated.pop();\n    const prefix = colonSeparated.pop();\n    const result = {\n      // Allow provider without '@': \"provider:prefix:name\"\n      provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n      prefix,\n      name: name2\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  const name = colonSeparated[0];\n  const dashSeparated = name.split(\"-\");\n  if (dashSeparated.length > 1) {\n    const result = {\n      provider,\n      prefix: dashSeparated.shift(),\n      name: dashSeparated.join(\"-\")\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  if (allowSimpleName && provider === \"\") {\n    const result = {\n      provider,\n      prefix: \"\",\n      name\n    };\n    return validate && !validateIconName(result, allowSimpleName) ? null : result;\n  }\n  return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n  if (!icon) {\n    return false;\n  }\n  return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\nconst defaultIconDimensions = Object.freeze({\n  left: 0,\n  top: 0,\n  width: 16,\n  height: 16\n});\nconst defaultIconTransformations = Object.freeze({\n  rotate: 0,\n  vFlip: false,\n  hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n  ...defaultIconDimensions,\n  ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n  ...defaultIconProps,\n  body: \"\",\n  hidden: false\n});\nfunction mergeIconTransformations(obj1, obj2) {\n  const result = {};\n  if (!obj1.hFlip !== !obj2.hFlip) {\n    result.hFlip = true;\n  }\n  if (!obj1.vFlip !== !obj2.vFlip) {\n    result.vFlip = true;\n  }\n  const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n  if (rotate) {\n    result.rotate = rotate;\n  }\n  return result;\n}\nfunction mergeIconData(parent, child) {\n  const result = mergeIconTransformations(parent, child);\n  for (const key in defaultExtendedIconProps) {\n    if (key in defaultIconTransformations) {\n      if (key in parent && !(key in result)) {\n        result[key] = defaultIconTransformations[key];\n      }\n    } else if (key in child) {\n      result[key] = child[key];\n    } else if (key in parent) {\n      result[key] = parent[key];\n    }\n  }\n  return result;\n}\nfunction getIconsTree(data, names) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */Object.create(null);\n  const resolved = /* @__PURE__ */Object.create(null);\n  function resolve(name) {\n    if (icons[name]) {\n      return resolved[name] = [];\n    }\n    if (!(name in resolved)) {\n      resolved[name] = null;\n      const parent = aliases[name] && aliases[name].parent;\n      const value = parent && resolve(parent);\n      if (value) {\n        resolved[name] = [parent].concat(value);\n      }\n    }\n    return resolved[name];\n  }\n  (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n  return resolved;\n}\nfunction internalGetIconData(data, name, tree) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */Object.create(null);\n  let currentProps = {};\n  function parse(name2) {\n    currentProps = mergeIconData(icons[name2] || aliases[name2], currentProps);\n  }\n  parse(name);\n  tree.forEach(parse);\n  return mergeIconData(data, currentProps);\n}\nfunction parseIconSet(data, callback) {\n  const names = [];\n  if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n    return names;\n  }\n  if (data.not_found instanceof Array) {\n    data.not_found.forEach(name => {\n      callback(name, null);\n      names.push(name);\n    });\n  }\n  const tree = getIconsTree(data);\n  for (const name in tree) {\n    const item = tree[name];\n    if (item) {\n      callback(name, internalGetIconData(data, name, item));\n      names.push(name);\n    }\n  }\n  return names;\n}\nconst optionalPropertyDefaults = {\n  provider: \"\",\n  aliases: {},\n  not_found: {},\n  ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n  for (const prop in defaults) {\n    if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction quicklyValidateIconSet(obj) {\n  if (typeof obj !== \"object\" || obj === null) {\n    return null;\n  }\n  const data = obj;\n  if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n    return null;\n  }\n  if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n    return null;\n  }\n  const icons = data.icons;\n  for (const name in icons) {\n    const icon = icons[name];\n    if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) {\n      return null;\n    }\n  }\n  const aliases = data.aliases || /* @__PURE__ */Object.create(null);\n  for (const name in aliases) {\n    const icon = aliases[name];\n    const parent = icon.parent;\n    if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) {\n      return null;\n    }\n  }\n  return data;\n}\nconst dataStorage = /* @__PURE__ */Object.create(null);\nfunction newStorage(provider, prefix) {\n  return {\n    provider,\n    prefix,\n    icons: /* @__PURE__ */Object.create(null),\n    missing: /* @__PURE__ */new Set()\n  };\n}\nfunction getStorage(provider, prefix) {\n  const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */Object.create(null));\n  return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n  if (!quicklyValidateIconSet(data)) {\n    return [];\n  }\n  return parseIconSet(data, (name, icon) => {\n    if (icon) {\n      storage.icons[name] = icon;\n    } else {\n      storage.missing.add(name);\n    }\n  });\n}\nfunction addIconToStorage(storage, name, icon) {\n  try {\n    if (typeof icon.body === \"string\") {\n      storage.icons[name] = {\n        ...icon\n      };\n      return true;\n    }\n  } catch (err) {}\n  return false;\n}\nfunction listIcons(provider, prefix) {\n  let allIcons = [];\n  const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n  providers.forEach(provider2 => {\n    const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n    prefixes.forEach(prefix2 => {\n      const storage = getStorage(provider2, prefix2);\n      allIcons = allIcons.concat(Object.keys(storage.icons).map(name => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name));\n    });\n  });\n  return allIcons;\n}\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n  if (typeof allow === \"boolean\") {\n    simpleNames = allow;\n  }\n  return simpleNames;\n}\nfunction getIconData(name) {\n  const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n  if (icon) {\n    const storage = getStorage(icon.provider, icon.prefix);\n    const iconName = icon.name;\n    return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n  }\n}\nfunction addIcon(name, data) {\n  const icon = stringToIcon(name, true, simpleNames);\n  if (!icon) {\n    return false;\n  }\n  const storage = getStorage(icon.provider, icon.prefix);\n  return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n  if (typeof data !== \"object\") {\n    return false;\n  }\n  if (typeof provider !== \"string\") {\n    provider = data.provider || \"\";\n  }\n  if (simpleNames && !provider && !data.prefix) {\n    let added = false;\n    if (quicklyValidateIconSet(data)) {\n      data.prefix = \"\";\n      parseIconSet(data, (name, icon) => {\n        if (icon && addIcon(name, icon)) {\n          added = true;\n        }\n      });\n    }\n    return added;\n  }\n  const prefix = data.prefix;\n  if (!validateIconName({\n    provider,\n    prefix,\n    name: \"a\"\n  })) {\n    return false;\n  }\n  const storage = getStorage(provider, prefix);\n  return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n  return !!getIconData(name);\n}\nfunction getIcon(name) {\n  const result = getIconData(name);\n  return result ? {\n    ...defaultIconProps,\n    ...result\n  } : null;\n}\nconst defaultIconSizeCustomisations = Object.freeze({\n  width: null,\n  height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n  // Dimensions\n  ...defaultIconSizeCustomisations,\n  // Transformations\n  ...defaultIconTransformations\n});\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n  if (ratio === 1) {\n    return size;\n  }\n  precision = precision || 100;\n  if (typeof size === \"number\") {\n    return Math.ceil(size * ratio * precision) / precision;\n  }\n  if (typeof size !== \"string\") {\n    return size;\n  }\n  const oldParts = size.split(unitsSplit);\n  if (oldParts === null || !oldParts.length) {\n    return size;\n  }\n  const newParts = [];\n  let code = oldParts.shift();\n  let isNumber = unitsTest.test(code);\n  while (true) {\n    if (isNumber) {\n      const num = parseFloat(code);\n      if (isNaN(num)) {\n        newParts.push(code);\n      } else {\n        newParts.push(Math.ceil(num * ratio * precision) / precision);\n      }\n    } else {\n      newParts.push(code);\n    }\n    code = oldParts.shift();\n    if (code === void 0) {\n      return newParts.join(\"\");\n    }\n    isNumber = !isNumber;\n  }\n}\nconst isUnsetKeyword = value => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n  const fullIcon = {\n    ...defaultIconProps,\n    ...icon\n  };\n  const fullCustomisations = {\n    ...defaultIconCustomisations,\n    ...customisations\n  };\n  const box = {\n    left: fullIcon.left,\n    top: fullIcon.top,\n    width: fullIcon.width,\n    height: fullIcon.height\n  };\n  let body = fullIcon.body;\n  [fullIcon, fullCustomisations].forEach(props => {\n    const transformations = [];\n    const hFlip = props.hFlip;\n    const vFlip = props.vFlip;\n    let rotation = props.rotate;\n    if (hFlip) {\n      if (vFlip) {\n        rotation += 2;\n      } else {\n        transformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n        transformations.push(\"scale(-1 1)\");\n        box.top = box.left = 0;\n      }\n    } else if (vFlip) {\n      transformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n      transformations.push(\"scale(1 -1)\");\n      box.top = box.left = 0;\n    }\n    let tempValue;\n    if (rotation < 0) {\n      rotation -= Math.floor(rotation / 4) * 4;\n    }\n    rotation = rotation % 4;\n    switch (rotation) {\n      case 1:\n        tempValue = box.height / 2 + box.top;\n        transformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n        break;\n      case 2:\n        transformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n        break;\n      case 3:\n        tempValue = box.width / 2 + box.left;\n        transformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n        break;\n    }\n    if (rotation % 2 === 1) {\n      if (box.left !== box.top) {\n        tempValue = box.left;\n        box.left = box.top;\n        box.top = tempValue;\n      }\n      if (box.width !== box.height) {\n        tempValue = box.width;\n        box.width = box.height;\n        box.height = tempValue;\n      }\n    }\n    if (transformations.length) {\n      body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n    }\n  });\n  const customisationsWidth = fullCustomisations.width;\n  const customisationsHeight = fullCustomisations.height;\n  const boxWidth = box.width;\n  const boxHeight = box.height;\n  let width;\n  let height;\n  if (customisationsWidth === null) {\n    height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n    width = calculateSize(height, boxWidth / boxHeight);\n  } else {\n    width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n    height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n  }\n  const attributes = {};\n  const setAttr = (prop, value) => {\n    if (!isUnsetKeyword(value)) {\n      attributes[prop] = value.toString();\n    }\n  };\n  setAttr(\"width\", width);\n  setAttr(\"height\", height);\n  attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n  return {\n    attributes,\n    body\n  };\n}\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n  const ids = [];\n  let match;\n  while (match = regex.exec(body)) {\n    ids.push(match[1]);\n  }\n  if (!ids.length) {\n    return body;\n  }\n  const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n  ids.forEach(id => {\n    const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n    const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    body = body.replace(\n    // Allowed characters before id: [#;\"]\n    // Allowed characters after id: [)\"], .[a-z]\n    new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"), \"$1\" + newID + suffix + \"$3\");\n  });\n  body = body.replace(new RegExp(suffix, \"g\"), \"\");\n  return body;\n}\nconst storage = /* @__PURE__ */Object.create(null);\nfunction setAPIModule(provider, item) {\n  storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n  return storage[provider] || storage[\"\"];\n}\nfunction createAPIConfig(source) {\n  let resources;\n  if (typeof source.resources === \"string\") {\n    resources = [source.resources];\n  } else {\n    resources = source.resources;\n    if (!(resources instanceof Array) || !resources.length) {\n      return null;\n    }\n  }\n  const result = {\n    // API hosts\n    resources,\n    // Root path\n    path: source.path || \"/\",\n    // URL length limit\n    maxURL: source.maxURL || 500,\n    // Timeout before next host is used.\n    rotate: source.rotate || 750,\n    // Timeout before failing query.\n    timeout: source.timeout || 5e3,\n    // Randomise default API end point.\n    random: source.random === true,\n    // Start index\n    index: source.index || 0,\n    // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n    dataAfterTimeout: source.dataAfterTimeout !== false\n  };\n  return result;\n}\nconst configStorage = /* @__PURE__ */Object.create(null);\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n  if (fallBackAPISources.length === 1) {\n    fallBackAPI.push(fallBackAPISources.shift());\n  } else {\n    if (Math.random() > 0.5) {\n      fallBackAPI.push(fallBackAPISources.shift());\n    } else {\n      fallBackAPI.push(fallBackAPISources.pop());\n    }\n  }\n}\nconfigStorage[\"\"] = createAPIConfig({\n  resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n  const config = createAPIConfig(customConfig);\n  if (config === null) {\n    return false;\n  }\n  configStorage[provider] = config;\n  return true;\n}\nfunction getAPIConfig(provider) {\n  return configStorage[provider];\n}\nfunction listAPIProviders() {\n  return Object.keys(configStorage);\n}\nconst detectFetch = () => {\n  let callback;\n  try {\n    callback = fetch;\n    if (typeof callback === \"function\") {\n      return callback;\n    }\n  } catch (err) {}\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n  fetchModule = fetch2;\n}\nfunction getFetch() {\n  return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n  const config = getAPIConfig(provider);\n  if (!config) {\n    return 0;\n  }\n  let result;\n  if (!config.maxURL) {\n    result = 0;\n  } else {\n    let maxHostLength = 0;\n    config.resources.forEach(item => {\n      const host = item;\n      maxHostLength = Math.max(maxHostLength, host.length);\n    });\n    const url = prefix + \".json?icons=\";\n    result = config.maxURL - maxHostLength - config.path.length - url.length;\n  }\n  return result;\n}\nfunction shouldAbort(status) {\n  return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n  const results = [];\n  const maxLength = calculateMaxLength(provider, prefix);\n  const type = \"icons\";\n  let item = {\n    type,\n    provider,\n    prefix,\n    icons: []\n  };\n  let length = 0;\n  icons.forEach((name, index) => {\n    length += name.length + 1;\n    if (length >= maxLength && index > 0) {\n      results.push(item);\n      item = {\n        type,\n        provider,\n        prefix,\n        icons: []\n      };\n      length = name.length;\n    }\n    item.icons.push(name);\n  });\n  results.push(item);\n  return results;\n};\nfunction getPath(provider) {\n  if (typeof provider === \"string\") {\n    const config = getAPIConfig(provider);\n    if (config) {\n      return config.path;\n    }\n  }\n  return \"/\";\n}\nconst send = (host, params, callback) => {\n  if (!fetchModule) {\n    callback(\"abort\", 424);\n    return;\n  }\n  let path = getPath(params.provider);\n  switch (params.type) {\n    case \"icons\":\n      {\n        const prefix = params.prefix;\n        const icons = params.icons;\n        const iconsList = icons.join(\",\");\n        const urlParams = new URLSearchParams({\n          icons: iconsList\n        });\n        path += prefix + \".json?\" + urlParams.toString();\n        break;\n      }\n    case \"custom\":\n      {\n        const uri = params.uri;\n        path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n        break;\n      }\n    default:\n      callback(\"abort\", 400);\n      return;\n  }\n  let defaultError = 503;\n  fetchModule(host + path).then(response => {\n    const status = response.status;\n    if (status !== 200) {\n      setTimeout(() => {\n        callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n      });\n      return;\n    }\n    defaultError = 501;\n    return response.json();\n  }).then(data => {\n    if (typeof data !== \"object\" || data === null) {\n      setTimeout(() => {\n        if (data === 404) {\n          callback(\"abort\", data);\n        } else {\n          callback(\"next\", defaultError);\n        }\n      });\n      return;\n    }\n    setTimeout(() => {\n      callback(\"success\", data);\n    });\n  }).catch(() => {\n    callback(\"next\", defaultError);\n  });\n};\nconst fetchAPIModule = {\n  prepare,\n  send\n};\nfunction sortIcons(icons) {\n  const result = {\n    loaded: [],\n    missing: [],\n    pending: []\n  };\n  const storage = /* @__PURE__ */Object.create(null);\n  icons.sort((a, b) => {\n    if (a.provider !== b.provider) {\n      return a.provider.localeCompare(b.provider);\n    }\n    if (a.prefix !== b.prefix) {\n      return a.prefix.localeCompare(b.prefix);\n    }\n    return a.name.localeCompare(b.name);\n  });\n  let lastIcon = {\n    provider: \"\",\n    prefix: \"\",\n    name: \"\"\n  };\n  icons.forEach(icon => {\n    if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n      return;\n    }\n    lastIcon = icon;\n    const provider = icon.provider;\n    const prefix = icon.prefix;\n    const name = icon.name;\n    const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */Object.create(null));\n    const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n    let list;\n    if (name in localStorage.icons) {\n      list = result.loaded;\n    } else if (prefix === \"\" || localStorage.missing.has(name)) {\n      list = result.missing;\n    } else {\n      list = result.pending;\n    }\n    const item = {\n      provider,\n      prefix,\n      name\n    };\n    list.push(item);\n  });\n  return result;\n}\nfunction removeCallback(storages, id) {\n  storages.forEach(storage => {\n    const items = storage.loaderCallbacks;\n    if (items) {\n      storage.loaderCallbacks = items.filter(row => row.id !== id);\n    }\n  });\n}\nfunction updateCallbacks(storage) {\n  if (!storage.pendingCallbacksFlag) {\n    storage.pendingCallbacksFlag = true;\n    setTimeout(() => {\n      storage.pendingCallbacksFlag = false;\n      const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n      if (!items.length) {\n        return;\n      }\n      let hasPending = false;\n      const provider = storage.provider;\n      const prefix = storage.prefix;\n      items.forEach(item => {\n        const icons = item.icons;\n        const oldLength = icons.pending.length;\n        icons.pending = icons.pending.filter(icon => {\n          if (icon.prefix !== prefix) {\n            return true;\n          }\n          const name = icon.name;\n          if (storage.icons[name]) {\n            icons.loaded.push({\n              provider,\n              prefix,\n              name\n            });\n          } else if (storage.missing.has(name)) {\n            icons.missing.push({\n              provider,\n              prefix,\n              name\n            });\n          } else {\n            hasPending = true;\n            return true;\n          }\n          return false;\n        });\n        if (icons.pending.length !== oldLength) {\n          if (!hasPending) {\n            removeCallback([storage], item.id);\n          }\n          item.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n        }\n      });\n    });\n  }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n  const id = idCounter++;\n  const abort = removeCallback.bind(null, pendingSources, id);\n  if (!icons.pending.length) {\n    return abort;\n  }\n  const item = {\n    id,\n    icons,\n    callback,\n    abort\n  };\n  pendingSources.forEach(storage => {\n    (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n  });\n  return abort;\n}\nfunction listToIcons(list, validate = true, simpleNames = false) {\n  const result = [];\n  list.forEach(item => {\n    const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n    if (icon) {\n      result.push(icon);\n    }\n  });\n  return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n  resources: [],\n  index: 0,\n  timeout: 2e3,\n  rotate: 750,\n  random: false,\n  dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n  const resourcesCount = config.resources.length;\n  const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n  let resources;\n  if (config.random) {\n    let list = config.resources.slice(0);\n    resources = [];\n    while (list.length > 1) {\n      const nextIndex = Math.floor(Math.random() * list.length);\n      resources.push(list[nextIndex]);\n      list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n    }\n    resources = resources.concat(list);\n  } else {\n    resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n  }\n  const startTime = Date.now();\n  let status = \"pending\";\n  let queriesSent = 0;\n  let lastError;\n  let timer = null;\n  let queue = [];\n  let doneCallbacks = [];\n  if (typeof done === \"function\") {\n    doneCallbacks.push(done);\n  }\n  function resetTimer() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function abort() {\n    if (status === \"pending\") {\n      status = \"aborted\";\n    }\n    resetTimer();\n    queue.forEach(item => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function subscribe(callback, overwrite) {\n    if (overwrite) {\n      doneCallbacks = [];\n    }\n    if (typeof callback === \"function\") {\n      doneCallbacks.push(callback);\n    }\n  }\n  function getQueryStatus() {\n    return {\n      startTime,\n      payload,\n      status,\n      queriesSent,\n      queriesPending: queue.length,\n      subscribe,\n      abort\n    };\n  }\n  function failQuery() {\n    status = \"failed\";\n    doneCallbacks.forEach(callback => {\n      callback(void 0, lastError);\n    });\n  }\n  function clearQueue() {\n    queue.forEach(item => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function moduleResponse(item, response, data) {\n    const isError = response !== \"success\";\n    queue = queue.filter(queued => queued !== item);\n    switch (status) {\n      case \"pending\":\n        break;\n      case \"failed\":\n        if (isError || !config.dataAfterTimeout) {\n          return;\n        }\n        break;\n      default:\n        return;\n    }\n    if (response === \"abort\") {\n      lastError = data;\n      failQuery();\n      return;\n    }\n    if (isError) {\n      lastError = data;\n      if (!queue.length) {\n        if (!resources.length) {\n          failQuery();\n        } else {\n          execNext();\n        }\n      }\n      return;\n    }\n    resetTimer();\n    clearQueue();\n    if (!config.random) {\n      const index = config.resources.indexOf(item.resource);\n      if (index !== -1 && index !== config.index) {\n        config.index = index;\n      }\n    }\n    status = \"completed\";\n    doneCallbacks.forEach(callback => {\n      callback(data);\n    });\n  }\n  function execNext() {\n    if (status !== \"pending\") {\n      return;\n    }\n    resetTimer();\n    const resource = resources.shift();\n    if (resource === void 0) {\n      if (queue.length) {\n        timer = setTimeout(() => {\n          resetTimer();\n          if (status === \"pending\") {\n            clearQueue();\n            failQuery();\n          }\n        }, config.timeout);\n        return;\n      }\n      failQuery();\n      return;\n    }\n    const item = {\n      status: \"pending\",\n      resource,\n      callback: (status2, data) => {\n        moduleResponse(item, status2, data);\n      }\n    };\n    queue.push(item);\n    queriesSent++;\n    timer = setTimeout(execNext, config.rotate);\n    query(resource, payload, item.callback);\n  }\n  setTimeout(execNext);\n  return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n  const config = {\n    ...defaultConfig,\n    ...cfg\n  };\n  let queries = [];\n  function cleanup() {\n    queries = queries.filter(item => item().status === \"pending\");\n  }\n  function query(payload, queryCallback, doneCallback) {\n    const query2 = sendQuery(config, payload, queryCallback, (data, error) => {\n      cleanup();\n      if (doneCallback) {\n        doneCallback(data, error);\n      }\n    });\n    queries.push(query2);\n    return query2;\n  }\n  function find(callback) {\n    return queries.find(value => {\n      return callback(value);\n    }) || null;\n  }\n  const instance = {\n    query,\n    find,\n    setIndex: index => {\n      config.index = index;\n    },\n    getIndex: () => config.index,\n    cleanup\n  };\n  return instance;\n}\nfunction emptyCallback$1() {}\nconst redundancyCache = /* @__PURE__ */Object.create(null);\nfunction getRedundancyCache(provider) {\n  if (!redundancyCache[provider]) {\n    const config = getAPIConfig(provider);\n    if (!config) {\n      return;\n    }\n    const redundancy = initRedundancy(config);\n    const cachedReundancy = {\n      config,\n      redundancy\n    };\n    redundancyCache[provider] = cachedReundancy;\n  }\n  return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n  let redundancy;\n  let send;\n  if (typeof target === \"string\") {\n    const api = getAPIModule(target);\n    if (!api) {\n      callback(void 0, 424);\n      return emptyCallback$1;\n    }\n    send = api.send;\n    const cached = getRedundancyCache(target);\n    if (cached) {\n      redundancy = cached.redundancy;\n    }\n  } else {\n    const config = createAPIConfig(target);\n    if (config) {\n      redundancy = initRedundancy(config);\n      const moduleKey = target.resources ? target.resources[0] : \"\";\n      const api = getAPIModule(moduleKey);\n      if (api) {\n        send = api.send;\n      }\n    }\n  }\n  if (!redundancy || !send) {\n    callback(void 0, 424);\n    return emptyCallback$1;\n  }\n  return redundancy.query(query, send, callback)().abort;\n}\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\nfunction getStoredItem(func, key) {\n  try {\n    return func.getItem(key);\n  } catch (err) {}\n}\nfunction setStoredItem(func, key, value) {\n  try {\n    func.setItem(key, value);\n    return true;\n  } catch (err) {}\n}\nfunction removeStoredItem(func, key) {\n  try {\n    func.removeItem(key);\n  } catch (err) {}\n}\nfunction setBrowserStorageItemsCount(storage, value) {\n  return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n  return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\nconst browserStorageConfig = {\n  local: true,\n  session: true\n};\nconst browserStorageEmptyItems = {\n  local: /* @__PURE__ */new Set(),\n  session: /* @__PURE__ */new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n  browserStorageStatus = status;\n}\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n  const attr = key + \"Storage\";\n  try {\n    if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n      return _window[attr];\n    }\n  } catch (err) {}\n  browserStorageConfig[key] = false;\n}\nfunction iterateBrowserStorage(key, callback) {\n  const func = getBrowserStorage(key);\n  if (!func) {\n    return;\n  }\n  const version = getStoredItem(func, browserCacheVersionKey);\n  if (version !== browserCacheVersion) {\n    if (version) {\n      const total2 = getBrowserStorageItemsCount(func);\n      for (let i = 0; i < total2; i++) {\n        removeStoredItem(func, browserCachePrefix + i.toString());\n      }\n    }\n    setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n    setBrowserStorageItemsCount(func, 0);\n    return;\n  }\n  const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n  const parseItem = index => {\n    const name = browserCachePrefix + index.toString();\n    const item = getStoredItem(func, name);\n    if (typeof item !== \"string\") {\n      return;\n    }\n    try {\n      const data = JSON.parse(item);\n      if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" &&\n      // Valid item: run callback\n      callback(data, index)) {\n        return true;\n      }\n    } catch (err) {}\n    removeStoredItem(func, name);\n  };\n  let total = getBrowserStorageItemsCount(func);\n  for (let i = total - 1; i >= 0; i--) {\n    if (!parseItem(i)) {\n      if (i === total - 1) {\n        total--;\n        setBrowserStorageItemsCount(func, total);\n      } else {\n        browserStorageEmptyItems[key].add(i);\n      }\n    }\n  }\n}\nfunction initBrowserStorage() {\n  if (browserStorageStatus) {\n    return;\n  }\n  setBrowserStorageStatus(true);\n  for (const key in browserStorageConfig) {\n    iterateBrowserStorage(key, item => {\n      const iconSet = item.data;\n      const provider = item.provider;\n      const prefix = iconSet.prefix;\n      const storage = getStorage(provider, prefix);\n      if (!addIconSet(storage, iconSet).length) {\n        return false;\n      }\n      const lastModified = iconSet.lastModified || -1;\n      storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n      return true;\n    });\n  }\n}\nfunction updateLastModified(storage, lastModified) {\n  const lastValue = storage.lastModifiedCached;\n  if (\n  // Matches or newer\n  lastValue && lastValue >= lastModified) {\n    return lastValue === lastModified;\n  }\n  storage.lastModifiedCached = lastModified;\n  if (lastValue) {\n    for (const key in browserStorageConfig) {\n      iterateBrowserStorage(key, item => {\n        const iconSet = item.data;\n        return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n      });\n    }\n  }\n  return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n  if (!browserStorageStatus) {\n    initBrowserStorage();\n  }\n  function store(key) {\n    let func;\n    if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n      return;\n    }\n    const set = browserStorageEmptyItems[key];\n    let index;\n    if (set.size) {\n      set.delete(index = Array.from(set).shift());\n    } else {\n      index = getBrowserStorageItemsCount(func);\n      if (!setBrowserStorageItemsCount(func, index + 1)) {\n        return;\n      }\n    }\n    const item = {\n      cached: Math.floor(Date.now() / browserStorageHour),\n      provider: storage.provider,\n      data\n    };\n    return setStoredItem(func, browserCachePrefix + index.toString(), JSON.stringify(item));\n  }\n  if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n    return;\n  }\n  if (!Object.keys(data.icons).length) {\n    return;\n  }\n  if (data.not_found) {\n    data = Object.assign({}, data);\n    delete data.not_found;\n  }\n  if (!store(\"local\")) {\n    store(\"session\");\n  }\n}\nfunction emptyCallback() {}\nfunction loadedNewIcons(storage) {\n  if (!storage.iconsLoaderFlag) {\n    storage.iconsLoaderFlag = true;\n    setTimeout(() => {\n      storage.iconsLoaderFlag = false;\n      updateCallbacks(storage);\n    });\n  }\n}\nfunction loadNewIcons(storage, icons) {\n  if (!storage.iconsToLoad) {\n    storage.iconsToLoad = icons;\n  } else {\n    storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n  }\n  if (!storage.iconsQueueFlag) {\n    storage.iconsQueueFlag = true;\n    setTimeout(() => {\n      storage.iconsQueueFlag = false;\n      const {\n        provider,\n        prefix\n      } = storage;\n      const icons2 = storage.iconsToLoad;\n      delete storage.iconsToLoad;\n      let api;\n      if (!icons2 || !(api = getAPIModule(provider))) {\n        return;\n      }\n      const params = api.prepare(provider, prefix, icons2);\n      params.forEach(item => {\n        sendAPIQuery(provider, item, data => {\n          if (typeof data !== \"object\") {\n            item.icons.forEach(name => {\n              storage.missing.add(name);\n            });\n          } else {\n            try {\n              const parsed = addIconSet(storage, data);\n              if (!parsed.length) {\n                return;\n              }\n              const pending = storage.pendingIcons;\n              if (pending) {\n                parsed.forEach(name => {\n                  pending.delete(name);\n                });\n              }\n              storeInBrowserStorage(storage, data);\n            } catch (err) {\n              console.error(err);\n            }\n          }\n          loadedNewIcons(storage);\n        });\n      });\n    });\n  }\n}\nconst loadIcons = (icons, callback) => {\n  const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n  const sortedIcons = sortIcons(cleanedIcons);\n  if (!sortedIcons.pending.length) {\n    let callCallback = true;\n    if (callback) {\n      setTimeout(() => {\n        if (callCallback) {\n          callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n        }\n      });\n    }\n    return () => {\n      callCallback = false;\n    };\n  }\n  const newIcons = /* @__PURE__ */Object.create(null);\n  const sources = [];\n  let lastProvider, lastPrefix;\n  sortedIcons.pending.forEach(icon => {\n    const {\n      provider,\n      prefix\n    } = icon;\n    if (prefix === lastPrefix && provider === lastProvider) {\n      return;\n    }\n    lastProvider = provider;\n    lastPrefix = prefix;\n    sources.push(getStorage(provider, prefix));\n    const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */Object.create(null));\n    if (!providerNewIcons[prefix]) {\n      providerNewIcons[prefix] = [];\n    }\n  });\n  sortedIcons.pending.forEach(icon => {\n    const {\n      provider,\n      prefix,\n      name\n    } = icon;\n    const storage = getStorage(provider, prefix);\n    const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */new Set());\n    if (!pendingQueue.has(name)) {\n      pendingQueue.add(name);\n      newIcons[provider][prefix].push(name);\n    }\n  });\n  sources.forEach(storage => {\n    const {\n      provider,\n      prefix\n    } = storage;\n    if (newIcons[provider][prefix].length) {\n      loadNewIcons(storage, newIcons[provider][prefix]);\n    }\n  });\n  return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = icon => {\n  return new Promise((fulfill, reject) => {\n    const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n    if (!iconObj) {\n      reject(icon);\n      return;\n    }\n    loadIcons([iconObj || icon], loaded => {\n      if (loaded.length && iconObj) {\n        const data = getIconData(iconObj);\n        if (data) {\n          fulfill({\n            ...defaultIconProps,\n            ...data\n          });\n          return;\n        }\n      }\n      reject(icon);\n    });\n  });\n};\nfunction toggleBrowserCache(storage, value) {\n  switch (storage) {\n    case \"local\":\n    case \"session\":\n      browserStorageConfig[storage] = value;\n      break;\n    case \"all\":\n      for (const key in browserStorageConfig) {\n        browserStorageConfig[key] = value;\n      }\n      break;\n  }\n}\nfunction mergeCustomisations(defaults, item) {\n  const result = {\n    ...defaults\n  };\n  for (const key in item) {\n    const value = item[key];\n    const valueType = typeof value;\n    if (key in defaultIconSizeCustomisations) {\n      if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n        result[key] = value;\n      }\n    } else if (valueType === typeof result[key]) {\n      result[key] = key === \"rotate\" ? value % 4 : value;\n    }\n  }\n  return result;\n}\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n  flip.split(separator).forEach(str => {\n    const value = str.trim();\n    switch (value) {\n      case \"horizontal\":\n        custom.hFlip = true;\n        break;\n      case \"vertical\":\n        custom.vFlip = true;\n        break;\n    }\n  });\n}\nfunction rotateFromString(value, defaultValue = 0) {\n  const units = value.replace(/^-?[0-9.]*/, \"\");\n  function cleanup(value2) {\n    while (value2 < 0) {\n      value2 += 4;\n    }\n    return value2 % 4;\n  }\n  if (units === \"\") {\n    const num = parseInt(value);\n    return isNaN(num) ? 0 : cleanup(num);\n  } else if (units !== value) {\n    let split = 0;\n    switch (units) {\n      case \"%\":\n        split = 25;\n        break;\n      case \"deg\":\n        split = 90;\n    }\n    if (split) {\n      let num = parseFloat(value.slice(0, value.length - units.length));\n      if (isNaN(num)) {\n        return 0;\n      }\n      num = num / split;\n      return num % 1 === 0 ? cleanup(num) : 0;\n    }\n  }\n  return defaultValue;\n}\nfunction iconToHTML(body, attributes) {\n  let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n  for (const attr in attributes) {\n    renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n  }\n  return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\nfunction encodeSVGforURL(svg) {\n  return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n  return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n  return 'url(\"' + svgToData(svg) + '\")';\n}\nlet policy;\nfunction createPolicy() {\n  try {\n    policy = window.trustedTypes.createPolicy(\"iconify\", {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      createHTML: s => s\n    });\n  } catch (err) {\n    policy = null;\n  }\n}\nfunction cleanUpInnerHTML(html) {\n  if (policy === void 0) {\n    createPolicy();\n  }\n  return policy ? policy.createHTML(html) : html;\n}\nconst defaultExtendedIconCustomisations = {\n  ...defaultIconCustomisations,\n  inline: false\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n  'xmlns': 'http://www.w3.org/2000/svg',\n  'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n  'aria-hidden': true,\n  'role': 'img'\n};\n/**\n * Style modes\n */\nconst commonProps = {\n  display: 'inline-block'\n};\nconst monotoneProps = {\n  backgroundColor: 'currentColor'\n};\nconst coloredProps = {\n  backgroundColor: 'transparent'\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n  Image: 'var(--svg)',\n  Repeat: 'no-repeat',\n  Size: '100% 100%'\n};\nconst propsToAddTo = {\n  WebkitMask: monotoneProps,\n  mask: monotoneProps,\n  background: coloredProps\n};\nfor (const prefix in propsToAddTo) {\n  const list = propsToAddTo[prefix];\n  for (const prop in propsToAdd) {\n    list[prefix + prop] = propsToAdd[prop];\n  }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n  ...defaultExtendedIconCustomisations,\n  inline: true\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n  return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon,\n// Partial properties\nprops,\n// True if icon should have vertical-align added\ninline,\n// Optional reference for SVG/SPAN, extracted by React.forwardRef()\nref) => {\n  // Get default properties\n  const defaultProps = inline ? inlineDefaults : defaultExtendedIconCustomisations;\n  // Get all customisations\n  const customisations = mergeCustomisations(defaultProps, props);\n  // Check mode\n  const mode = props.mode || 'svg';\n  // Create style\n  const style = {};\n  const customStyle = props.style || {};\n  // Create SVG component properties\n  const componentProps = {\n    ...(mode === 'svg' ? svgDefaults : {}),\n    ref\n  };\n  // Get element properties\n  for (let key in props) {\n    const value = props[key];\n    if (value === void 0) {\n      continue;\n    }\n    switch (key) {\n      // Properties to ignore\n      case 'icon':\n      case 'style':\n      case 'children':\n      case 'onLoad':\n      case 'mode':\n      case '_ref':\n      case '_inline':\n        break;\n      // Boolean attributes\n      case 'inline':\n      case 'hFlip':\n      case 'vFlip':\n        customisations[key] = value === true || value === 'true' || value === 1;\n        break;\n      // Flip as string: 'horizontal,vertical'\n      case 'flip':\n        if (typeof value === 'string') {\n          flipFromString(customisations, value);\n        }\n        break;\n      // Color: copy to style\n      case 'color':\n        style.color = value;\n        break;\n      // Rotation as string\n      case 'rotate':\n        if (typeof value === 'string') {\n          customisations[key] = rotateFromString(value);\n        } else if (typeof value === 'number') {\n          customisations[key] = value;\n        }\n        break;\n      // Remove aria-hidden\n      case 'ariaHidden':\n      case 'aria-hidden':\n        if (value !== true && value !== 'true') {\n          delete componentProps['aria-hidden'];\n        }\n        break;\n      // Copy missing property if it does not exist in customisations\n      default:\n        if (defaultProps[key] === void 0) {\n          componentProps[key] = value;\n        }\n    }\n  }\n  // Generate icon\n  const item = iconToSVG(icon, customisations);\n  const renderAttribs = item.attributes;\n  // Inline display\n  if (customisations.inline) {\n    style.verticalAlign = '-0.125em';\n  }\n  if (mode === 'svg') {\n    // Add style\n    componentProps.style = {\n      ...style,\n      ...customStyle\n    };\n    // Add icon stuff\n    Object.assign(componentProps, renderAttribs);\n    // Counter for ids based on \"id\" property to render icons consistently on server and client\n    let localCounter = 0;\n    let id = props.id;\n    if (typeof id === 'string') {\n      // Convert '-' to '_' to avoid errors in animations\n      id = id.replace(/-/g, '_');\n    }\n    // Add icon stuff\n    componentProps.dangerouslySetInnerHTML = {\n      __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact'))\n    };\n    return React.createElement('svg', componentProps);\n  }\n  // Render <span> with style\n  const {\n    body,\n    width,\n    height\n  } = icon;\n  const useMask = mode === 'mask' || (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n  // Generate SVG\n  const html = iconToHTML(body, {\n    ...renderAttribs,\n    width: width + '',\n    height: height + ''\n  });\n  // Generate style\n  componentProps.style = {\n    ...style,\n    '--svg': svgToURL(html),\n    'width': fixSize(renderAttribs.width),\n    'height': fixSize(renderAttribs.height),\n    ...commonProps,\n    ...(useMask ? monotoneProps : coloredProps),\n    ...customStyle\n  };\n  return React.createElement('span', componentProps);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n  toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n  toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n  // Set cache and load existing cache\n  initBrowserStorage();\n  const _window = window;\n  // Load icons from global \"IconifyPreload\"\n  if (_window.IconifyPreload !== void 0) {\n    const preload = _window.IconifyPreload;\n    const err = 'Invalid IconifyPreload syntax.';\n    if (typeof preload === 'object' && preload !== null) {\n      (preload instanceof Array ? preload : [preload]).forEach(item => {\n        try {\n          if (\n          // Check if item is an object and not null/array\n          typeof item !== 'object' || item === null || item instanceof Array ||\n          // Check for 'icons' and 'prefix'\n          typeof item.icons !== 'object' || typeof item.prefix !== 'string' ||\n          // Add icon set\n          !addCollection(item)) {\n            console.error(err);\n          }\n        } catch (e) {\n          console.error(err);\n        }\n      });\n    }\n  }\n  // Set API from global \"IconifyProviders\"\n  if (_window.IconifyProviders !== void 0) {\n    const providers = _window.IconifyProviders;\n    if (typeof providers === 'object' && providers !== null) {\n      for (let key in providers) {\n        const err = 'IconifyProviders[' + key + '] is invalid.';\n        try {\n          const value = providers[key];\n          if (typeof value !== 'object' || !value || value.resources === void 0) {\n            continue;\n          }\n          if (!addAPIProvider(key, value)) {\n            console.error(err);\n          }\n        } catch (e) {\n          console.error(err);\n        }\n      }\n    }\n  }\n}\nclass IconComponent extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      // Render placeholder before component is mounted\n      icon: null\n    };\n  }\n  /**\n   * Abort loading icon\n   */\n  _abortLoading() {\n    if (this._loading) {\n      this._loading.abort();\n      this._loading = null;\n    }\n  }\n  /**\n   * Update state\n   */\n  _setData(icon) {\n    if (this.state.icon !== icon) {\n      this.setState({\n        icon\n      });\n    }\n  }\n  /**\n   * Check if icon should be loaded\n   */\n  _checkIcon(changed) {\n    const state = this.state;\n    const icon = this.props.icon;\n    // Icon is an object\n    if (typeof icon === 'object' && icon !== null && typeof icon.body === 'string') {\n      // Stop loading\n      this._icon = '';\n      this._abortLoading();\n      if (changed || state.icon === null) {\n        // Set data if it was changed\n        this._setData({\n          data: icon\n        });\n      }\n      return;\n    }\n    // Invalid icon?\n    let iconName;\n    if (typeof icon !== 'string' || (iconName = stringToIcon(icon, false, true)) === null) {\n      this._abortLoading();\n      this._setData(null);\n      return;\n    }\n    // Load icon\n    const data = getIconData(iconName);\n    if (!data) {\n      // Icon data is not available\n      if (!this._loading || this._loading.name !== icon) {\n        // New icon to load\n        this._abortLoading();\n        this._icon = '';\n        this._setData(null);\n        if (data !== null) {\n          // Icon was not loaded\n          this._loading = {\n            name: icon,\n            abort: loadIcons([iconName], this._checkIcon.bind(this, false))\n          };\n        }\n      }\n      return;\n    }\n    // Icon data is available\n    if (this._icon !== icon || state.icon === null) {\n      // New icon or icon has been loaded\n      this._abortLoading();\n      this._icon = icon;\n      // Add classes\n      const classes = ['iconify'];\n      if (iconName.prefix !== '') {\n        classes.push('iconify--' + iconName.prefix);\n      }\n      if (iconName.provider !== '') {\n        classes.push('iconify--' + iconName.provider);\n      }\n      // Set data\n      this._setData({\n        data,\n        classes\n      });\n      if (this.props.onLoad) {\n        this.props.onLoad(icon);\n      }\n    }\n  }\n  /**\n   * Component mounted\n   */\n  componentDidMount() {\n    this._checkIcon(false);\n  }\n  /**\n   * Component updated\n   */\n  componentDidUpdate(oldProps) {\n    if (oldProps.icon !== this.props.icon) {\n      this._checkIcon(true);\n    }\n  }\n  /**\n   * Abort loading\n   */\n  componentWillUnmount() {\n    this._abortLoading();\n  }\n  /**\n   * Render\n   */\n  render() {\n    const props = this.props;\n    const icon = this.state.icon;\n    if (icon === null) {\n      // Render placeholder\n      return props.children ? props.children : React.createElement('span', {});\n    }\n    // Add classes\n    let newProps = props;\n    if (icon.classes) {\n      newProps = {\n        ...props,\n        className: (typeof props.className === 'string' ? props.className + ' ' : '') + icon.classes.join(' ')\n      };\n    }\n    // Render icon\n    return render({\n      ...defaultIconProps,\n      ...icon.data\n    }, newProps, props._inline, props._ref);\n  }\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = React.forwardRef(function Icon(props, ref) {\n  const newProps = {\n    ...props,\n    _ref: ref,\n    _inline: false\n  };\n  return React.createElement(IconComponent, newProps);\n});\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = React.forwardRef(function InlineIcon(props, ref) {\n  const newProps = {\n    ...props,\n    _ref: ref,\n    _inline: true\n  };\n  return React.createElement(IconComponent, newProps);\n});\n/**\n * Internal API\n */\nconst _api = {\n  getAPIConfig,\n  setAPIModule,\n  sendAPIQuery,\n  setFetch,\n  getFetch,\n  listAPIProviders\n};\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconExists, listIcons, loadIcon, loadIcons, replaceIDs };","map":{"version":3,"names":["React","matchIconName","stringToIcon","value","validate","allowSimpleName","provider","colonSeparated","split","slice","length","shift","name2","pop","prefix","result","name","validateIconName","dashSeparated","join","icon","match","defaultIconDimensions","Object","freeze","left","top","width","height","defaultIconTransformations","rotate","vFlip","hFlip","defaultIconProps","defaultExtendedIconProps","body","hidden","mergeIconTransformations","obj1","obj2","mergeIconData","parent","child","key","getIconsTree","data","names","icons","aliases","create","resolved","resolve","concat","keys","forEach","internalGetIconData","tree","currentProps","parse","parseIconSet","callback","not_found","Array","push","item","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","obj","dataStorage","newStorage","missing","Set","getStorage","providerStorage","addIconSet","storage","add","addIconToStorage","err","listIcons","allIcons","providers","provider2","prefixes","prefix2","map","simpleNames","allowSimpleNames","allow","getIconData","iconName","has","addIcon","addCollection","added","iconExists","getIcon","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","Math","ceil","oldParts","newParts","code","isNumber","test","num","parseFloat","isNaN","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","props","transformations","rotation","toString","tempValue","floor","unshift","customisationsWidth","customisationsHeight","boxWidth","boxHeight","attributes","setAttr","viewBox","regex","randomPrefix","Date","now","random","counter","replaceIDs","ids","exec","suffix","id","newID","escapedID","replace","RegExp","setAPIModule","getAPIModule","createAPIConfig","source","resources","path","maxURL","timeout","index","dataAfterTimeout","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","listAPIProviders","detectFetch","fetch","fetchModule","setFetch","fetch2","getFetch","calculateMaxLength","maxHostLength","host","max","url","shouldAbort","status","prepare","results","maxLength","type","getPath","send","params","iconsList","urlParams","URLSearchParams","uri","defaultError","then","response","setTimeout","json","catch","fetchAPIModule","sortIcons","loaded","pending","sort","a","b","localeCompare","lastIcon","localStorage","list","removeCallback","storages","items","loaderCallbacks","filter","row","updateCallbacks","pendingCallbacksFlag","hasPending","oldLength","abort","idCounter","storeCallback","pendingSources","bind","listToIcons","defaultConfig","sendQuery","payload","query","done","resourcesCount","startIndex","nextIndex","startTime","queriesSent","lastError","timer","queue","doneCallbacks","resetTimer","clearTimeout","subscribe","overwrite","getQueryStatus","queriesPending","failQuery","clearQueue","moduleResponse","isError","queued","execNext","indexOf","resource","status2","initRedundancy","cfg","queries","cleanup","queryCallback","doneCallback","query2","error","find","instance","setIndex","getIndex","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","target","api","cached","moduleKey","browserCacheVersion","browserCachePrefix","browserCacheCountKey","browserCacheVersionKey","browserStorageHour","browserStorageCacheExpiration","getStoredItem","func","getItem","setStoredItem","setItem","removeStoredItem","removeItem","setBrowserStorageItemsCount","getBrowserStorageItemsCount","parseInt","browserStorageConfig","local","session","browserStorageEmptyItems","browserStorageStatus","setBrowserStorageStatus","_window","window","getBrowserStorage","attr","iterateBrowserStorage","version","total2","i","minTime","parseItem","JSON","total","initBrowserStorage","iconSet","lastModified","lastModifiedCached","min","updateLastModified","lastValue","storeInBrowserStorage","store","set","delete","from","stringify","assign","emptyCallback","loadedNewIcons","iconsLoaderFlag","loadNewIcons","iconsToLoad","iconsQueueFlag","icons2","parsed","pendingIcons","console","loadIcons","cleanedIcons","sortedIcons","callCallback","newIcons","sources","lastProvider","lastPrefix","providerNewIcons","pendingQueue","loadIcon","Promise","fulfill","reject","iconObj","toggleBrowserCache","mergeCustomisations","valueType","separator","flipFromString","custom","flip","str","trim","rotateFromString","defaultValue","units","value2","iconToHTML","renderAttribsHTML","encodeSVGforURL","svg","svgToData","svgToURL","policy","createPolicy","trustedTypes","createHTML","s","cleanUpInnerHTML","html","defaultExtendedIconCustomisations","inline","svgDefaults","commonProps","display","monotoneProps","backgroundColor","coloredProps","propsToAdd","Image","Repeat","Size","propsToAddTo","WebkitMask","mask","background","inlineDefaults","fixSize","render","ref","defaultProps","mode","style","customStyle","componentProps","color","renderAttribs","verticalAlign","localCounter","dangerouslySetInnerHTML","__html","createElement","useMask","enableCache","disableCache","document","IconifyPreload","preload","e","IconifyProviders","IconComponent","Component","constructor","state","_abortLoading","_loading","_setData","setState","_checkIcon","changed","_icon","classes","onLoad","componentDidMount","componentDidUpdate","oldProps","componentWillUnmount","children","newProps","className","_inline","_ref","Icon","forwardRef","InlineIcon","_api","buildIcon"],"sources":["/Users/chrishaack/UC_Trains_Voice/react-demo/node_modules/@iconify/react/dist/iconify.mjs"],"sourcesContent":["import React from 'react';\n\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n  const colonSeparated = value.split(\":\");\n  if (value.slice(0, 1) === \"@\") {\n    if (colonSeparated.length < 2 || colonSeparated.length > 3) {\n      return null;\n    }\n    provider = colonSeparated.shift().slice(1);\n  }\n  if (colonSeparated.length > 3 || !colonSeparated.length) {\n    return null;\n  }\n  if (colonSeparated.length > 1) {\n    const name2 = colonSeparated.pop();\n    const prefix = colonSeparated.pop();\n    const result = {\n      // Allow provider without '@': \"provider:prefix:name\"\n      provider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n      prefix,\n      name: name2\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  const name = colonSeparated[0];\n  const dashSeparated = name.split(\"-\");\n  if (dashSeparated.length > 1) {\n    const result = {\n      provider,\n      prefix: dashSeparated.shift(),\n      name: dashSeparated.join(\"-\")\n    };\n    return validate && !validateIconName(result) ? null : result;\n  }\n  if (allowSimpleName && provider === \"\") {\n    const result = {\n      provider,\n      prefix: \"\",\n      name\n    };\n    return validate && !validateIconName(result, allowSimpleName) ? null : result;\n  }\n  return null;\n};\nconst validateIconName = (icon, allowSimpleName) => {\n  if (!icon) {\n    return false;\n  }\n  return !!((icon.provider === \"\" || icon.provider.match(matchIconName)) && (allowSimpleName && icon.prefix === \"\" || icon.prefix.match(matchIconName)) && icon.name.match(matchIconName));\n};\n\nconst defaultIconDimensions = Object.freeze(\n  {\n    left: 0,\n    top: 0,\n    width: 16,\n    height: 16\n  }\n);\nconst defaultIconTransformations = Object.freeze({\n  rotate: 0,\n  vFlip: false,\n  hFlip: false\n});\nconst defaultIconProps = Object.freeze({\n  ...defaultIconDimensions,\n  ...defaultIconTransformations\n});\nconst defaultExtendedIconProps = Object.freeze({\n  ...defaultIconProps,\n  body: \"\",\n  hidden: false\n});\n\nfunction mergeIconTransformations(obj1, obj2) {\n  const result = {};\n  if (!obj1.hFlip !== !obj2.hFlip) {\n    result.hFlip = true;\n  }\n  if (!obj1.vFlip !== !obj2.vFlip) {\n    result.vFlip = true;\n  }\n  const rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n  if (rotate) {\n    result.rotate = rotate;\n  }\n  return result;\n}\n\nfunction mergeIconData(parent, child) {\n  const result = mergeIconTransformations(parent, child);\n  for (const key in defaultExtendedIconProps) {\n    if (key in defaultIconTransformations) {\n      if (key in parent && !(key in result)) {\n        result[key] = defaultIconTransformations[key];\n      }\n    } else if (key in child) {\n      result[key] = child[key];\n    } else if (key in parent) {\n      result[key] = parent[key];\n    }\n  }\n  return result;\n}\n\nfunction getIconsTree(data, names) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  const resolved = /* @__PURE__ */ Object.create(null);\n  function resolve(name) {\n    if (icons[name]) {\n      return resolved[name] = [];\n    }\n    if (!(name in resolved)) {\n      resolved[name] = null;\n      const parent = aliases[name] && aliases[name].parent;\n      const value = parent && resolve(parent);\n      if (value) {\n        resolved[name] = [parent].concat(value);\n      }\n    }\n    return resolved[name];\n  }\n  (names || Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n  return resolved;\n}\n\nfunction internalGetIconData(data, name, tree) {\n  const icons = data.icons;\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  let currentProps = {};\n  function parse(name2) {\n    currentProps = mergeIconData(\n      icons[name2] || aliases[name2],\n      currentProps\n    );\n  }\n  parse(name);\n  tree.forEach(parse);\n  return mergeIconData(data, currentProps);\n}\n\nfunction parseIconSet(data, callback) {\n  const names = [];\n  if (typeof data !== \"object\" || typeof data.icons !== \"object\") {\n    return names;\n  }\n  if (data.not_found instanceof Array) {\n    data.not_found.forEach((name) => {\n      callback(name, null);\n      names.push(name);\n    });\n  }\n  const tree = getIconsTree(data);\n  for (const name in tree) {\n    const item = tree[name];\n    if (item) {\n      callback(name, internalGetIconData(data, name, item));\n      names.push(name);\n    }\n  }\n  return names;\n}\n\nconst optionalPropertyDefaults = {\n  provider: \"\",\n  aliases: {},\n  not_found: {},\n  ...defaultIconDimensions\n};\nfunction checkOptionalProps(item, defaults) {\n  for (const prop in defaults) {\n    if (prop in item && typeof item[prop] !== typeof defaults[prop]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction quicklyValidateIconSet(obj) {\n  if (typeof obj !== \"object\" || obj === null) {\n    return null;\n  }\n  const data = obj;\n  if (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") {\n    return null;\n  }\n  if (!checkOptionalProps(obj, optionalPropertyDefaults)) {\n    return null;\n  }\n  const icons = data.icons;\n  for (const name in icons) {\n    const icon = icons[name];\n    if (!name.match(matchIconName) || typeof icon.body !== \"string\" || !checkOptionalProps(\n      icon,\n      defaultExtendedIconProps\n    )) {\n      return null;\n    }\n  }\n  const aliases = data.aliases || /* @__PURE__ */ Object.create(null);\n  for (const name in aliases) {\n    const icon = aliases[name];\n    const parent = icon.parent;\n    if (!name.match(matchIconName) || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(\n      icon,\n      defaultExtendedIconProps\n    )) {\n      return null;\n    }\n  }\n  return data;\n}\n\nconst dataStorage = /* @__PURE__ */ Object.create(null);\nfunction newStorage(provider, prefix) {\n  return {\n    provider,\n    prefix,\n    icons: /* @__PURE__ */ Object.create(null),\n    missing: /* @__PURE__ */ new Set()\n  };\n}\nfunction getStorage(provider, prefix) {\n  const providerStorage = dataStorage[provider] || (dataStorage[provider] = /* @__PURE__ */ Object.create(null));\n  return providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\nfunction addIconSet(storage, data) {\n  if (!quicklyValidateIconSet(data)) {\n    return [];\n  }\n  return parseIconSet(data, (name, icon) => {\n    if (icon) {\n      storage.icons[name] = icon;\n    } else {\n      storage.missing.add(name);\n    }\n  });\n}\nfunction addIconToStorage(storage, name, icon) {\n  try {\n    if (typeof icon.body === \"string\") {\n      storage.icons[name] = { ...icon };\n      return true;\n    }\n  } catch (err) {\n  }\n  return false;\n}\nfunction listIcons(provider, prefix) {\n  let allIcons = [];\n  const providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n  providers.forEach((provider2) => {\n    const prefixes = typeof provider2 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider2] || {});\n    prefixes.forEach((prefix2) => {\n      const storage = getStorage(provider2, prefix2);\n      allIcons = allIcons.concat(\n        Object.keys(storage.icons).map(\n          (name) => (provider2 !== \"\" ? \"@\" + provider2 + \":\" : \"\") + prefix2 + \":\" + name\n        )\n      );\n    });\n  });\n  return allIcons;\n}\n\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n  if (typeof allow === \"boolean\") {\n    simpleNames = allow;\n  }\n  return simpleNames;\n}\nfunction getIconData(name) {\n  const icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n  if (icon) {\n    const storage = getStorage(icon.provider, icon.prefix);\n    const iconName = icon.name;\n    return storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n  }\n}\nfunction addIcon(name, data) {\n  const icon = stringToIcon(name, true, simpleNames);\n  if (!icon) {\n    return false;\n  }\n  const storage = getStorage(icon.provider, icon.prefix);\n  return addIconToStorage(storage, icon.name, data);\n}\nfunction addCollection(data, provider) {\n  if (typeof data !== \"object\") {\n    return false;\n  }\n  if (typeof provider !== \"string\") {\n    provider = data.provider || \"\";\n  }\n  if (simpleNames && !provider && !data.prefix) {\n    let added = false;\n    if (quicklyValidateIconSet(data)) {\n      data.prefix = \"\";\n      parseIconSet(data, (name, icon) => {\n        if (icon && addIcon(name, icon)) {\n          added = true;\n        }\n      });\n    }\n    return added;\n  }\n  const prefix = data.prefix;\n  if (!validateIconName({\n    provider,\n    prefix,\n    name: \"a\"\n  })) {\n    return false;\n  }\n  const storage = getStorage(provider, prefix);\n  return !!addIconSet(storage, data);\n}\nfunction iconExists(name) {\n  return !!getIconData(name);\n}\nfunction getIcon(name) {\n  const result = getIconData(name);\n  return result ? {\n    ...defaultIconProps,\n    ...result\n  } : null;\n}\n\nconst defaultIconSizeCustomisations = Object.freeze({\n  width: null,\n  height: null\n});\nconst defaultIconCustomisations = Object.freeze({\n  // Dimensions\n  ...defaultIconSizeCustomisations,\n  // Transformations\n  ...defaultIconTransformations\n});\n\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n  if (ratio === 1) {\n    return size;\n  }\n  precision = precision || 100;\n  if (typeof size === \"number\") {\n    return Math.ceil(size * ratio * precision) / precision;\n  }\n  if (typeof size !== \"string\") {\n    return size;\n  }\n  const oldParts = size.split(unitsSplit);\n  if (oldParts === null || !oldParts.length) {\n    return size;\n  }\n  const newParts = [];\n  let code = oldParts.shift();\n  let isNumber = unitsTest.test(code);\n  while (true) {\n    if (isNumber) {\n      const num = parseFloat(code);\n      if (isNaN(num)) {\n        newParts.push(code);\n      } else {\n        newParts.push(Math.ceil(num * ratio * precision) / precision);\n      }\n    } else {\n      newParts.push(code);\n    }\n    code = oldParts.shift();\n    if (code === void 0) {\n      return newParts.join(\"\");\n    }\n    isNumber = !isNumber;\n  }\n}\n\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\nfunction iconToSVG(icon, customisations) {\n  const fullIcon = {\n    ...defaultIconProps,\n    ...icon\n  };\n  const fullCustomisations = {\n    ...defaultIconCustomisations,\n    ...customisations\n  };\n  const box = {\n    left: fullIcon.left,\n    top: fullIcon.top,\n    width: fullIcon.width,\n    height: fullIcon.height\n  };\n  let body = fullIcon.body;\n  [fullIcon, fullCustomisations].forEach((props) => {\n    const transformations = [];\n    const hFlip = props.hFlip;\n    const vFlip = props.vFlip;\n    let rotation = props.rotate;\n    if (hFlip) {\n      if (vFlip) {\n        rotation += 2;\n      } else {\n        transformations.push(\n          \"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\"\n        );\n        transformations.push(\"scale(-1 1)\");\n        box.top = box.left = 0;\n      }\n    } else if (vFlip) {\n      transformations.push(\n        \"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\"\n      );\n      transformations.push(\"scale(1 -1)\");\n      box.top = box.left = 0;\n    }\n    let tempValue;\n    if (rotation < 0) {\n      rotation -= Math.floor(rotation / 4) * 4;\n    }\n    rotation = rotation % 4;\n    switch (rotation) {\n      case 1:\n        tempValue = box.height / 2 + box.top;\n        transformations.unshift(\n          \"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n        );\n        break;\n      case 2:\n        transformations.unshift(\n          \"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\"\n        );\n        break;\n      case 3:\n        tempValue = box.width / 2 + box.left;\n        transformations.unshift(\n          \"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\"\n        );\n        break;\n    }\n    if (rotation % 2 === 1) {\n      if (box.left !== box.top) {\n        tempValue = box.left;\n        box.left = box.top;\n        box.top = tempValue;\n      }\n      if (box.width !== box.height) {\n        tempValue = box.width;\n        box.width = box.height;\n        box.height = tempValue;\n      }\n    }\n    if (transformations.length) {\n      body = '<g transform=\"' + transformations.join(\" \") + '\">' + body + \"</g>\";\n    }\n  });\n  const customisationsWidth = fullCustomisations.width;\n  const customisationsHeight = fullCustomisations.height;\n  const boxWidth = box.width;\n  const boxHeight = box.height;\n  let width;\n  let height;\n  if (customisationsWidth === null) {\n    height = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n    width = calculateSize(height, boxWidth / boxHeight);\n  } else {\n    width = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n    height = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n  }\n  const attributes = {};\n  const setAttr = (prop, value) => {\n    if (!isUnsetKeyword(value)) {\n      attributes[prop] = value.toString();\n    }\n  };\n  setAttr(\"width\", width);\n  setAttr(\"height\", height);\n  attributes.viewBox = box.left.toString() + \" \" + box.top.toString() + \" \" + boxWidth.toString() + \" \" + boxHeight.toString();\n  return {\n    attributes,\n    body\n  };\n}\n\nconst regex = /\\sid=\"(\\S+)\"/g;\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\nlet counter = 0;\nfunction replaceIDs(body, prefix = randomPrefix) {\n  const ids = [];\n  let match;\n  while (match = regex.exec(body)) {\n    ids.push(match[1]);\n  }\n  if (!ids.length) {\n    return body;\n  }\n  const suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n  ids.forEach((id) => {\n    const newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n    const escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    body = body.replace(\n      // Allowed characters before id: [#;\"]\n      // Allowed characters after id: [)\"], .[a-z]\n      new RegExp('([#;\"])(' + escapedID + ')([\")]|\\\\.[a-z])', \"g\"),\n      \"$1\" + newID + suffix + \"$3\"\n    );\n  });\n  body = body.replace(new RegExp(suffix, \"g\"), \"\");\n  return body;\n}\n\nconst storage = /* @__PURE__ */ Object.create(null);\nfunction setAPIModule(provider, item) {\n  storage[provider] = item;\n}\nfunction getAPIModule(provider) {\n  return storage[provider] || storage[\"\"];\n}\n\nfunction createAPIConfig(source) {\n  let resources;\n  if (typeof source.resources === \"string\") {\n    resources = [source.resources];\n  } else {\n    resources = source.resources;\n    if (!(resources instanceof Array) || !resources.length) {\n      return null;\n    }\n  }\n  const result = {\n    // API hosts\n    resources,\n    // Root path\n    path: source.path || \"/\",\n    // URL length limit\n    maxURL: source.maxURL || 500,\n    // Timeout before next host is used.\n    rotate: source.rotate || 750,\n    // Timeout before failing query.\n    timeout: source.timeout || 5e3,\n    // Randomise default API end point.\n    random: source.random === true,\n    // Start index\n    index: source.index || 0,\n    // Receive data after time out (used if time out kicks in first, then API module sends data anyway).\n    dataAfterTimeout: source.dataAfterTimeout !== false\n  };\n  return result;\n}\nconst configStorage = /* @__PURE__ */ Object.create(null);\nconst fallBackAPISources = [\n  \"https://api.simplesvg.com\",\n  \"https://api.unisvg.com\"\n];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) {\n  if (fallBackAPISources.length === 1) {\n    fallBackAPI.push(fallBackAPISources.shift());\n  } else {\n    if (Math.random() > 0.5) {\n      fallBackAPI.push(fallBackAPISources.shift());\n    } else {\n      fallBackAPI.push(fallBackAPISources.pop());\n    }\n  }\n}\nconfigStorage[\"\"] = createAPIConfig({\n  resources: [\"https://api.iconify.design\"].concat(fallBackAPI)\n});\nfunction addAPIProvider(provider, customConfig) {\n  const config = createAPIConfig(customConfig);\n  if (config === null) {\n    return false;\n  }\n  configStorage[provider] = config;\n  return true;\n}\nfunction getAPIConfig(provider) {\n  return configStorage[provider];\n}\nfunction listAPIProviders() {\n  return Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n  let callback;\n  try {\n    callback = fetch;\n    if (typeof callback === \"function\") {\n      return callback;\n    }\n  } catch (err) {\n  }\n};\nlet fetchModule = detectFetch();\nfunction setFetch(fetch2) {\n  fetchModule = fetch2;\n}\nfunction getFetch() {\n  return fetchModule;\n}\nfunction calculateMaxLength(provider, prefix) {\n  const config = getAPIConfig(provider);\n  if (!config) {\n    return 0;\n  }\n  let result;\n  if (!config.maxURL) {\n    result = 0;\n  } else {\n    let maxHostLength = 0;\n    config.resources.forEach((item) => {\n      const host = item;\n      maxHostLength = Math.max(maxHostLength, host.length);\n    });\n    const url = prefix + \".json?icons=\";\n    result = config.maxURL - maxHostLength - config.path.length - url.length;\n  }\n  return result;\n}\nfunction shouldAbort(status) {\n  return status === 404;\n}\nconst prepare = (provider, prefix, icons) => {\n  const results = [];\n  const maxLength = calculateMaxLength(provider, prefix);\n  const type = \"icons\";\n  let item = {\n    type,\n    provider,\n    prefix,\n    icons: []\n  };\n  let length = 0;\n  icons.forEach((name, index) => {\n    length += name.length + 1;\n    if (length >= maxLength && index > 0) {\n      results.push(item);\n      item = {\n        type,\n        provider,\n        prefix,\n        icons: []\n      };\n      length = name.length;\n    }\n    item.icons.push(name);\n  });\n  results.push(item);\n  return results;\n};\nfunction getPath(provider) {\n  if (typeof provider === \"string\") {\n    const config = getAPIConfig(provider);\n    if (config) {\n      return config.path;\n    }\n  }\n  return \"/\";\n}\nconst send = (host, params, callback) => {\n  if (!fetchModule) {\n    callback(\"abort\", 424);\n    return;\n  }\n  let path = getPath(params.provider);\n  switch (params.type) {\n    case \"icons\": {\n      const prefix = params.prefix;\n      const icons = params.icons;\n      const iconsList = icons.join(\",\");\n      const urlParams = new URLSearchParams({\n        icons: iconsList\n      });\n      path += prefix + \".json?\" + urlParams.toString();\n      break;\n    }\n    case \"custom\": {\n      const uri = params.uri;\n      path += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n      break;\n    }\n    default:\n      callback(\"abort\", 400);\n      return;\n  }\n  let defaultError = 503;\n  fetchModule(host + path).then((response) => {\n    const status = response.status;\n    if (status !== 200) {\n      setTimeout(() => {\n        callback(shouldAbort(status) ? \"abort\" : \"next\", status);\n      });\n      return;\n    }\n    defaultError = 501;\n    return response.json();\n  }).then((data) => {\n    if (typeof data !== \"object\" || data === null) {\n      setTimeout(() => {\n        if (data === 404) {\n          callback(\"abort\", data);\n        } else {\n          callback(\"next\", defaultError);\n        }\n      });\n      return;\n    }\n    setTimeout(() => {\n      callback(\"success\", data);\n    });\n  }).catch(() => {\n    callback(\"next\", defaultError);\n  });\n};\nconst fetchAPIModule = {\n  prepare,\n  send\n};\n\nfunction sortIcons(icons) {\n  const result = {\n    loaded: [],\n    missing: [],\n    pending: []\n  };\n  const storage = /* @__PURE__ */ Object.create(null);\n  icons.sort((a, b) => {\n    if (a.provider !== b.provider) {\n      return a.provider.localeCompare(b.provider);\n    }\n    if (a.prefix !== b.prefix) {\n      return a.prefix.localeCompare(b.prefix);\n    }\n    return a.name.localeCompare(b.name);\n  });\n  let lastIcon = {\n    provider: \"\",\n    prefix: \"\",\n    name: \"\"\n  };\n  icons.forEach((icon) => {\n    if (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) {\n      return;\n    }\n    lastIcon = icon;\n    const provider = icon.provider;\n    const prefix = icon.prefix;\n    const name = icon.name;\n    const providerStorage = storage[provider] || (storage[provider] = /* @__PURE__ */ Object.create(null));\n    const localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n    let list;\n    if (name in localStorage.icons) {\n      list = result.loaded;\n    } else if (prefix === \"\" || localStorage.missing.has(name)) {\n      list = result.missing;\n    } else {\n      list = result.pending;\n    }\n    const item = {\n      provider,\n      prefix,\n      name\n    };\n    list.push(item);\n  });\n  return result;\n}\n\nfunction removeCallback(storages, id) {\n  storages.forEach((storage) => {\n    const items = storage.loaderCallbacks;\n    if (items) {\n      storage.loaderCallbacks = items.filter((row) => row.id !== id);\n    }\n  });\n}\nfunction updateCallbacks(storage) {\n  if (!storage.pendingCallbacksFlag) {\n    storage.pendingCallbacksFlag = true;\n    setTimeout(() => {\n      storage.pendingCallbacksFlag = false;\n      const items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n      if (!items.length) {\n        return;\n      }\n      let hasPending = false;\n      const provider = storage.provider;\n      const prefix = storage.prefix;\n      items.forEach((item) => {\n        const icons = item.icons;\n        const oldLength = icons.pending.length;\n        icons.pending = icons.pending.filter((icon) => {\n          if (icon.prefix !== prefix) {\n            return true;\n          }\n          const name = icon.name;\n          if (storage.icons[name]) {\n            icons.loaded.push({\n              provider,\n              prefix,\n              name\n            });\n          } else if (storage.missing.has(name)) {\n            icons.missing.push({\n              provider,\n              prefix,\n              name\n            });\n          } else {\n            hasPending = true;\n            return true;\n          }\n          return false;\n        });\n        if (icons.pending.length !== oldLength) {\n          if (!hasPending) {\n            removeCallback([storage], item.id);\n          }\n          item.callback(\n            icons.loaded.slice(0),\n            icons.missing.slice(0),\n            icons.pending.slice(0),\n            item.abort\n          );\n        }\n      });\n    });\n  }\n}\nlet idCounter = 0;\nfunction storeCallback(callback, icons, pendingSources) {\n  const id = idCounter++;\n  const abort = removeCallback.bind(null, pendingSources, id);\n  if (!icons.pending.length) {\n    return abort;\n  }\n  const item = {\n    id,\n    icons,\n    callback,\n    abort\n  };\n  pendingSources.forEach((storage) => {\n    (storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n  });\n  return abort;\n}\n\nfunction listToIcons(list, validate = true, simpleNames = false) {\n  const result = [];\n  list.forEach((item) => {\n    const icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n    if (icon) {\n      result.push(icon);\n    }\n  });\n  return result;\n}\n\n// src/config.ts\nvar defaultConfig = {\n  resources: [],\n  index: 0,\n  timeout: 2e3,\n  rotate: 750,\n  random: false,\n  dataAfterTimeout: false\n};\n\n// src/query.ts\nfunction sendQuery(config, payload, query, done) {\n  const resourcesCount = config.resources.length;\n  const startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n  let resources;\n  if (config.random) {\n    let list = config.resources.slice(0);\n    resources = [];\n    while (list.length > 1) {\n      const nextIndex = Math.floor(Math.random() * list.length);\n      resources.push(list[nextIndex]);\n      list = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n    }\n    resources = resources.concat(list);\n  } else {\n    resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n  }\n  const startTime = Date.now();\n  let status = \"pending\";\n  let queriesSent = 0;\n  let lastError;\n  let timer = null;\n  let queue = [];\n  let doneCallbacks = [];\n  if (typeof done === \"function\") {\n    doneCallbacks.push(done);\n  }\n  function resetTimer() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function abort() {\n    if (status === \"pending\") {\n      status = \"aborted\";\n    }\n    resetTimer();\n    queue.forEach((item) => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function subscribe(callback, overwrite) {\n    if (overwrite) {\n      doneCallbacks = [];\n    }\n    if (typeof callback === \"function\") {\n      doneCallbacks.push(callback);\n    }\n  }\n  function getQueryStatus() {\n    return {\n      startTime,\n      payload,\n      status,\n      queriesSent,\n      queriesPending: queue.length,\n      subscribe,\n      abort\n    };\n  }\n  function failQuery() {\n    status = \"failed\";\n    doneCallbacks.forEach((callback) => {\n      callback(void 0, lastError);\n    });\n  }\n  function clearQueue() {\n    queue.forEach((item) => {\n      if (item.status === \"pending\") {\n        item.status = \"aborted\";\n      }\n    });\n    queue = [];\n  }\n  function moduleResponse(item, response, data) {\n    const isError = response !== \"success\";\n    queue = queue.filter((queued) => queued !== item);\n    switch (status) {\n      case \"pending\":\n        break;\n      case \"failed\":\n        if (isError || !config.dataAfterTimeout) {\n          return;\n        }\n        break;\n      default:\n        return;\n    }\n    if (response === \"abort\") {\n      lastError = data;\n      failQuery();\n      return;\n    }\n    if (isError) {\n      lastError = data;\n      if (!queue.length) {\n        if (!resources.length) {\n          failQuery();\n        } else {\n          execNext();\n        }\n      }\n      return;\n    }\n    resetTimer();\n    clearQueue();\n    if (!config.random) {\n      const index = config.resources.indexOf(item.resource);\n      if (index !== -1 && index !== config.index) {\n        config.index = index;\n      }\n    }\n    status = \"completed\";\n    doneCallbacks.forEach((callback) => {\n      callback(data);\n    });\n  }\n  function execNext() {\n    if (status !== \"pending\") {\n      return;\n    }\n    resetTimer();\n    const resource = resources.shift();\n    if (resource === void 0) {\n      if (queue.length) {\n        timer = setTimeout(() => {\n          resetTimer();\n          if (status === \"pending\") {\n            clearQueue();\n            failQuery();\n          }\n        }, config.timeout);\n        return;\n      }\n      failQuery();\n      return;\n    }\n    const item = {\n      status: \"pending\",\n      resource,\n      callback: (status2, data) => {\n        moduleResponse(item, status2, data);\n      }\n    };\n    queue.push(item);\n    queriesSent++;\n    timer = setTimeout(execNext, config.rotate);\n    query(resource, payload, item.callback);\n  }\n  setTimeout(execNext);\n  return getQueryStatus;\n}\n\n// src/index.ts\nfunction initRedundancy(cfg) {\n  const config = {\n    ...defaultConfig,\n    ...cfg\n  };\n  let queries = [];\n  function cleanup() {\n    queries = queries.filter((item) => item().status === \"pending\");\n  }\n  function query(payload, queryCallback, doneCallback) {\n    const query2 = sendQuery(\n      config,\n      payload,\n      queryCallback,\n      (data, error) => {\n        cleanup();\n        if (doneCallback) {\n          doneCallback(data, error);\n        }\n      }\n    );\n    queries.push(query2);\n    return query2;\n  }\n  function find(callback) {\n    return queries.find((value) => {\n      return callback(value);\n    }) || null;\n  }\n  const instance = {\n    query,\n    find,\n    setIndex: (index) => {\n      config.index = index;\n    },\n    getIndex: () => config.index,\n    cleanup\n  };\n  return instance;\n}\n\nfunction emptyCallback$1() {\n}\nconst redundancyCache = /* @__PURE__ */ Object.create(null);\nfunction getRedundancyCache(provider) {\n  if (!redundancyCache[provider]) {\n    const config = getAPIConfig(provider);\n    if (!config) {\n      return;\n    }\n    const redundancy = initRedundancy(config);\n    const cachedReundancy = {\n      config,\n      redundancy\n    };\n    redundancyCache[provider] = cachedReundancy;\n  }\n  return redundancyCache[provider];\n}\nfunction sendAPIQuery(target, query, callback) {\n  let redundancy;\n  let send;\n  if (typeof target === \"string\") {\n    const api = getAPIModule(target);\n    if (!api) {\n      callback(void 0, 424);\n      return emptyCallback$1;\n    }\n    send = api.send;\n    const cached = getRedundancyCache(target);\n    if (cached) {\n      redundancy = cached.redundancy;\n    }\n  } else {\n    const config = createAPIConfig(target);\n    if (config) {\n      redundancy = initRedundancy(config);\n      const moduleKey = target.resources ? target.resources[0] : \"\";\n      const api = getAPIModule(moduleKey);\n      if (api) {\n        send = api.send;\n      }\n    }\n  }\n  if (!redundancy || !send) {\n    callback(void 0, 424);\n    return emptyCallback$1;\n  }\n  return redundancy.query(query, send, callback)().abort;\n}\n\nconst browserCacheVersion = \"iconify2\";\nconst browserCachePrefix = \"iconify\";\nconst browserCacheCountKey = browserCachePrefix + \"-count\";\nconst browserCacheVersionKey = browserCachePrefix + \"-version\";\nconst browserStorageHour = 36e5;\nconst browserStorageCacheExpiration = 168;\n\nfunction getStoredItem(func, key) {\n  try {\n    return func.getItem(key);\n  } catch (err) {\n  }\n}\nfunction setStoredItem(func, key, value) {\n  try {\n    func.setItem(key, value);\n    return true;\n  } catch (err) {\n  }\n}\nfunction removeStoredItem(func, key) {\n  try {\n    func.removeItem(key);\n  } catch (err) {\n  }\n}\n\nfunction setBrowserStorageItemsCount(storage, value) {\n  return setStoredItem(storage, browserCacheCountKey, value.toString());\n}\nfunction getBrowserStorageItemsCount(storage) {\n  return parseInt(getStoredItem(storage, browserCacheCountKey)) || 0;\n}\n\nconst browserStorageConfig = {\n  local: true,\n  session: true\n};\nconst browserStorageEmptyItems = {\n  local: /* @__PURE__ */ new Set(),\n  session: /* @__PURE__ */ new Set()\n};\nlet browserStorageStatus = false;\nfunction setBrowserStorageStatus(status) {\n  browserStorageStatus = status;\n}\n\nlet _window = typeof window === \"undefined\" ? {} : window;\nfunction getBrowserStorage(key) {\n  const attr = key + \"Storage\";\n  try {\n    if (_window && _window[attr] && typeof _window[attr].length === \"number\") {\n      return _window[attr];\n    }\n  } catch (err) {\n  }\n  browserStorageConfig[key] = false;\n}\n\nfunction iterateBrowserStorage(key, callback) {\n  const func = getBrowserStorage(key);\n  if (!func) {\n    return;\n  }\n  const version = getStoredItem(func, browserCacheVersionKey);\n  if (version !== browserCacheVersion) {\n    if (version) {\n      const total2 = getBrowserStorageItemsCount(func);\n      for (let i = 0; i < total2; i++) {\n        removeStoredItem(func, browserCachePrefix + i.toString());\n      }\n    }\n    setStoredItem(func, browserCacheVersionKey, browserCacheVersion);\n    setBrowserStorageItemsCount(func, 0);\n    return;\n  }\n  const minTime = Math.floor(Date.now() / browserStorageHour) - browserStorageCacheExpiration;\n  const parseItem = (index) => {\n    const name = browserCachePrefix + index.toString();\n    const item = getStoredItem(func, name);\n    if (typeof item !== \"string\") {\n      return;\n    }\n    try {\n      const data = JSON.parse(item);\n      if (typeof data === \"object\" && typeof data.cached === \"number\" && data.cached > minTime && typeof data.provider === \"string\" && typeof data.data === \"object\" && typeof data.data.prefix === \"string\" && // Valid item: run callback\n      callback(data, index)) {\n        return true;\n      }\n    } catch (err) {\n    }\n    removeStoredItem(func, name);\n  };\n  let total = getBrowserStorageItemsCount(func);\n  for (let i = total - 1; i >= 0; i--) {\n    if (!parseItem(i)) {\n      if (i === total - 1) {\n        total--;\n        setBrowserStorageItemsCount(func, total);\n      } else {\n        browserStorageEmptyItems[key].add(i);\n      }\n    }\n  }\n}\n\nfunction initBrowserStorage() {\n  if (browserStorageStatus) {\n    return;\n  }\n  setBrowserStorageStatus(true);\n  for (const key in browserStorageConfig) {\n    iterateBrowserStorage(key, (item) => {\n      const iconSet = item.data;\n      const provider = item.provider;\n      const prefix = iconSet.prefix;\n      const storage = getStorage(\n        provider,\n        prefix\n      );\n      if (!addIconSet(storage, iconSet).length) {\n        return false;\n      }\n      const lastModified = iconSet.lastModified || -1;\n      storage.lastModifiedCached = storage.lastModifiedCached ? Math.min(storage.lastModifiedCached, lastModified) : lastModified;\n      return true;\n    });\n  }\n}\n\nfunction updateLastModified(storage, lastModified) {\n  const lastValue = storage.lastModifiedCached;\n  if (\n    // Matches or newer\n    lastValue && lastValue >= lastModified\n  ) {\n    return lastValue === lastModified;\n  }\n  storage.lastModifiedCached = lastModified;\n  if (lastValue) {\n    for (const key in browserStorageConfig) {\n      iterateBrowserStorage(key, (item) => {\n        const iconSet = item.data;\n        return item.provider !== storage.provider || iconSet.prefix !== storage.prefix || iconSet.lastModified === lastModified;\n      });\n    }\n  }\n  return true;\n}\nfunction storeInBrowserStorage(storage, data) {\n  if (!browserStorageStatus) {\n    initBrowserStorage();\n  }\n  function store(key) {\n    let func;\n    if (!browserStorageConfig[key] || !(func = getBrowserStorage(key))) {\n      return;\n    }\n    const set = browserStorageEmptyItems[key];\n    let index;\n    if (set.size) {\n      set.delete(index = Array.from(set).shift());\n    } else {\n      index = getBrowserStorageItemsCount(func);\n      if (!setBrowserStorageItemsCount(func, index + 1)) {\n        return;\n      }\n    }\n    const item = {\n      cached: Math.floor(Date.now() / browserStorageHour),\n      provider: storage.provider,\n      data\n    };\n    return setStoredItem(\n      func,\n      browserCachePrefix + index.toString(),\n      JSON.stringify(item)\n    );\n  }\n  if (data.lastModified && !updateLastModified(storage, data.lastModified)) {\n    return;\n  }\n  if (!Object.keys(data.icons).length) {\n    return;\n  }\n  if (data.not_found) {\n    data = Object.assign({}, data);\n    delete data.not_found;\n  }\n  if (!store(\"local\")) {\n    store(\"session\");\n  }\n}\n\nfunction emptyCallback() {\n}\nfunction loadedNewIcons(storage) {\n  if (!storage.iconsLoaderFlag) {\n    storage.iconsLoaderFlag = true;\n    setTimeout(() => {\n      storage.iconsLoaderFlag = false;\n      updateCallbacks(storage);\n    });\n  }\n}\nfunction loadNewIcons(storage, icons) {\n  if (!storage.iconsToLoad) {\n    storage.iconsToLoad = icons;\n  } else {\n    storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n  }\n  if (!storage.iconsQueueFlag) {\n    storage.iconsQueueFlag = true;\n    setTimeout(() => {\n      storage.iconsQueueFlag = false;\n      const { provider, prefix } = storage;\n      const icons2 = storage.iconsToLoad;\n      delete storage.iconsToLoad;\n      let api;\n      if (!icons2 || !(api = getAPIModule(provider))) {\n        return;\n      }\n      const params = api.prepare(provider, prefix, icons2);\n      params.forEach((item) => {\n        sendAPIQuery(provider, item, (data) => {\n          if (typeof data !== \"object\") {\n            item.icons.forEach((name) => {\n              storage.missing.add(name);\n            });\n          } else {\n            try {\n              const parsed = addIconSet(\n                storage,\n                data\n              );\n              if (!parsed.length) {\n                return;\n              }\n              const pending = storage.pendingIcons;\n              if (pending) {\n                parsed.forEach((name) => {\n                  pending.delete(name);\n                });\n              }\n              storeInBrowserStorage(storage, data);\n            } catch (err) {\n              console.error(err);\n            }\n          }\n          loadedNewIcons(storage);\n        });\n      });\n    });\n  }\n}\nconst loadIcons = (icons, callback) => {\n  const cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n  const sortedIcons = sortIcons(cleanedIcons);\n  if (!sortedIcons.pending.length) {\n    let callCallback = true;\n    if (callback) {\n      setTimeout(() => {\n        if (callCallback) {\n          callback(\n            sortedIcons.loaded,\n            sortedIcons.missing,\n            sortedIcons.pending,\n            emptyCallback\n          );\n        }\n      });\n    }\n    return () => {\n      callCallback = false;\n    };\n  }\n  const newIcons = /* @__PURE__ */ Object.create(null);\n  const sources = [];\n  let lastProvider, lastPrefix;\n  sortedIcons.pending.forEach((icon) => {\n    const { provider, prefix } = icon;\n    if (prefix === lastPrefix && provider === lastProvider) {\n      return;\n    }\n    lastProvider = provider;\n    lastPrefix = prefix;\n    sources.push(getStorage(provider, prefix));\n    const providerNewIcons = newIcons[provider] || (newIcons[provider] = /* @__PURE__ */ Object.create(null));\n    if (!providerNewIcons[prefix]) {\n      providerNewIcons[prefix] = [];\n    }\n  });\n  sortedIcons.pending.forEach((icon) => {\n    const { provider, prefix, name } = icon;\n    const storage = getStorage(provider, prefix);\n    const pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n    if (!pendingQueue.has(name)) {\n      pendingQueue.add(name);\n      newIcons[provider][prefix].push(name);\n    }\n  });\n  sources.forEach((storage) => {\n    const { provider, prefix } = storage;\n    if (newIcons[provider][prefix].length) {\n      loadNewIcons(storage, newIcons[provider][prefix]);\n    }\n  });\n  return callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\nconst loadIcon = (icon) => {\n  return new Promise((fulfill, reject) => {\n    const iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n    if (!iconObj) {\n      reject(icon);\n      return;\n    }\n    loadIcons([iconObj || icon], (loaded) => {\n      if (loaded.length && iconObj) {\n        const data = getIconData(iconObj);\n        if (data) {\n          fulfill({\n            ...defaultIconProps,\n            ...data\n          });\n          return;\n        }\n      }\n      reject(icon);\n    });\n  });\n};\n\nfunction toggleBrowserCache(storage, value) {\n  switch (storage) {\n    case \"local\":\n    case \"session\":\n      browserStorageConfig[storage] = value;\n      break;\n    case \"all\":\n      for (const key in browserStorageConfig) {\n        browserStorageConfig[key] = value;\n      }\n      break;\n  }\n}\n\nfunction mergeCustomisations(defaults, item) {\n  const result = {\n    ...defaults\n  };\n  for (const key in item) {\n    const value = item[key];\n    const valueType = typeof value;\n    if (key in defaultIconSizeCustomisations) {\n      if (value === null || value && (valueType === \"string\" || valueType === \"number\")) {\n        result[key] = value;\n      }\n    } else if (valueType === typeof result[key]) {\n      result[key] = key === \"rotate\" ? value % 4 : value;\n    }\n  }\n  return result;\n}\n\nconst separator = /[\\s,]+/;\nfunction flipFromString(custom, flip) {\n  flip.split(separator).forEach((str) => {\n    const value = str.trim();\n    switch (value) {\n      case \"horizontal\":\n        custom.hFlip = true;\n        break;\n      case \"vertical\":\n        custom.vFlip = true;\n        break;\n    }\n  });\n}\n\nfunction rotateFromString(value, defaultValue = 0) {\n  const units = value.replace(/^-?[0-9.]*/, \"\");\n  function cleanup(value2) {\n    while (value2 < 0) {\n      value2 += 4;\n    }\n    return value2 % 4;\n  }\n  if (units === \"\") {\n    const num = parseInt(value);\n    return isNaN(num) ? 0 : cleanup(num);\n  } else if (units !== value) {\n    let split = 0;\n    switch (units) {\n      case \"%\":\n        split = 25;\n        break;\n      case \"deg\":\n        split = 90;\n    }\n    if (split) {\n      let num = parseFloat(value.slice(0, value.length - units.length));\n      if (isNaN(num)) {\n        return 0;\n      }\n      num = num / split;\n      return num % 1 === 0 ? cleanup(num) : 0;\n    }\n  }\n  return defaultValue;\n}\n\nfunction iconToHTML(body, attributes) {\n  let renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"';\n  for (const attr in attributes) {\n    renderAttribsHTML += \" \" + attr + '=\"' + attributes[attr] + '\"';\n  }\n  return '<svg xmlns=\"http://www.w3.org/2000/svg\"' + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\nfunction encodeSVGforURL(svg) {\n  return svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\nfunction svgToData(svg) {\n  return \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\nfunction svgToURL(svg) {\n  return 'url(\"' + svgToData(svg) + '\")';\n}\n\nlet policy;\nfunction createPolicy() {\n  try {\n    policy = window.trustedTypes.createPolicy(\"iconify\", {\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n      createHTML: (s) => s\n    });\n  } catch (err) {\n    policy = null;\n  }\n}\nfunction cleanUpInnerHTML(html) {\n  if (policy === void 0) {\n    createPolicy();\n  }\n  return policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n    ...defaultIconCustomisations,\n    inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n    'xmlns': 'http://www.w3.org/2000/svg',\n    'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n    'aria-hidden': true,\n    'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n    display: 'inline-block',\n};\nconst monotoneProps = {\n    backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n    backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n    Image: 'var(--svg)',\n    Repeat: 'no-repeat',\n    Size: '100% 100%',\n};\nconst propsToAddTo = {\n    WebkitMask: monotoneProps,\n    mask: monotoneProps,\n    background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n    const list = propsToAddTo[prefix];\n    for (const prop in propsToAdd) {\n        list[prefix + prop] = propsToAdd[prop];\n    }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n    ...defaultExtendedIconCustomisations,\n    inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n    return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// True if icon should have vertical-align added\ninline, \n// Optional reference for SVG/SPAN, extracted by React.forwardRef()\nref) => {\n    // Get default properties\n    const defaultProps = inline\n        ? inlineDefaults\n        : defaultExtendedIconCustomisations;\n    // Get all customisations\n    const customisations = mergeCustomisations(defaultProps, props);\n    // Check mode\n    const mode = props.mode || 'svg';\n    // Create style\n    const style = {};\n    const customStyle = props.style || {};\n    // Create SVG component properties\n    const componentProps = {\n        ...(mode === 'svg' ? svgDefaults : {}),\n        ref,\n    };\n    // Get element properties\n    for (let key in props) {\n        const value = props[key];\n        if (value === void 0) {\n            continue;\n        }\n        switch (key) {\n            // Properties to ignore\n            case 'icon':\n            case 'style':\n            case 'children':\n            case 'onLoad':\n            case 'mode':\n            case '_ref':\n            case '_inline':\n                break;\n            // Boolean attributes\n            case 'inline':\n            case 'hFlip':\n            case 'vFlip':\n                customisations[key] =\n                    value === true || value === 'true' || value === 1;\n                break;\n            // Flip as string: 'horizontal,vertical'\n            case 'flip':\n                if (typeof value === 'string') {\n                    flipFromString(customisations, value);\n                }\n                break;\n            // Color: copy to style\n            case 'color':\n                style.color = value;\n                break;\n            // Rotation as string\n            case 'rotate':\n                if (typeof value === 'string') {\n                    customisations[key] = rotateFromString(value);\n                }\n                else if (typeof value === 'number') {\n                    customisations[key] = value;\n                }\n                break;\n            // Remove aria-hidden\n            case 'ariaHidden':\n            case 'aria-hidden':\n                if (value !== true && value !== 'true') {\n                    delete componentProps['aria-hidden'];\n                }\n                break;\n            // Copy missing property if it does not exist in customisations\n            default:\n                if (defaultProps[key] === void 0) {\n                    componentProps[key] = value;\n                }\n        }\n    }\n    // Generate icon\n    const item = iconToSVG(icon, customisations);\n    const renderAttribs = item.attributes;\n    // Inline display\n    if (customisations.inline) {\n        style.verticalAlign = '-0.125em';\n    }\n    if (mode === 'svg') {\n        // Add style\n        componentProps.style = {\n            ...style,\n            ...customStyle,\n        };\n        // Add icon stuff\n        Object.assign(componentProps, renderAttribs);\n        // Counter for ids based on \"id\" property to render icons consistently on server and client\n        let localCounter = 0;\n        let id = props.id;\n        if (typeof id === 'string') {\n            // Convert '-' to '_' to avoid errors in animations\n            id = id.replace(/-/g, '_');\n        }\n        // Add icon stuff\n        componentProps.dangerouslySetInnerHTML = {\n            __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n        };\n        return React.createElement('svg', componentProps);\n    }\n    // Render <span> with style\n    const { body, width, height } = icon;\n    const useMask = mode === 'mask' ||\n        (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n    // Generate SVG\n    const html = iconToHTML(body, {\n        ...renderAttribs,\n        width: width + '',\n        height: height + '',\n    });\n    // Generate style\n    componentProps.style = {\n        ...style,\n        '--svg': svgToURL(html),\n        'width': fixSize(renderAttribs.width),\n        'height': fixSize(renderAttribs.height),\n        ...commonProps,\n        ...(useMask ? monotoneProps : coloredProps),\n        ...customStyle,\n    };\n    return React.createElement('span', componentProps);\n};\n\n/**\n * Enable cache\n */\nfunction enableCache(storage) {\n    toggleBrowserCache(storage, true);\n}\n/**\n * Disable cache\n */\nfunction disableCache(storage) {\n    toggleBrowserCache(storage, false);\n}\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n    // Set cache and load existing cache\n    initBrowserStorage();\n    const _window = window;\n    // Load icons from global \"IconifyPreload\"\n    if (_window.IconifyPreload !== void 0) {\n        const preload = _window.IconifyPreload;\n        const err = 'Invalid IconifyPreload syntax.';\n        if (typeof preload === 'object' && preload !== null) {\n            (preload instanceof Array ? preload : [preload]).forEach((item) => {\n                try {\n                    if (\n                    // Check if item is an object and not null/array\n                    typeof item !== 'object' ||\n                        item === null ||\n                        item instanceof Array ||\n                        // Check for 'icons' and 'prefix'\n                        typeof item.icons !== 'object' ||\n                        typeof item.prefix !== 'string' ||\n                        // Add icon set\n                        !addCollection(item)) {\n                        console.error(err);\n                    }\n                }\n                catch (e) {\n                    console.error(err);\n                }\n            });\n        }\n    }\n    // Set API from global \"IconifyProviders\"\n    if (_window.IconifyProviders !== void 0) {\n        const providers = _window.IconifyProviders;\n        if (typeof providers === 'object' && providers !== null) {\n            for (let key in providers) {\n                const err = 'IconifyProviders[' + key + '] is invalid.';\n                try {\n                    const value = providers[key];\n                    if (typeof value !== 'object' ||\n                        !value ||\n                        value.resources === void 0) {\n                        continue;\n                    }\n                    if (!addAPIProvider(key, value)) {\n                        console.error(err);\n                    }\n                }\n                catch (e) {\n                    console.error(err);\n                }\n            }\n        }\n    }\n}\nclass IconComponent extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            // Render placeholder before component is mounted\n            icon: null,\n        };\n    }\n    /**\n     * Abort loading icon\n     */\n    _abortLoading() {\n        if (this._loading) {\n            this._loading.abort();\n            this._loading = null;\n        }\n    }\n    /**\n     * Update state\n     */\n    _setData(icon) {\n        if (this.state.icon !== icon) {\n            this.setState({\n                icon,\n            });\n        }\n    }\n    /**\n     * Check if icon should be loaded\n     */\n    _checkIcon(changed) {\n        const state = this.state;\n        const icon = this.props.icon;\n        // Icon is an object\n        if (typeof icon === 'object' &&\n            icon !== null &&\n            typeof icon.body === 'string') {\n            // Stop loading\n            this._icon = '';\n            this._abortLoading();\n            if (changed || state.icon === null) {\n                // Set data if it was changed\n                this._setData({\n                    data: icon,\n                });\n            }\n            return;\n        }\n        // Invalid icon?\n        let iconName;\n        if (typeof icon !== 'string' ||\n            (iconName = stringToIcon(icon, false, true)) === null) {\n            this._abortLoading();\n            this._setData(null);\n            return;\n        }\n        // Load icon\n        const data = getIconData(iconName);\n        if (!data) {\n            // Icon data is not available\n            if (!this._loading || this._loading.name !== icon) {\n                // New icon to load\n                this._abortLoading();\n                this._icon = '';\n                this._setData(null);\n                if (data !== null) {\n                    // Icon was not loaded\n                    this._loading = {\n                        name: icon,\n                        abort: loadIcons([iconName], this._checkIcon.bind(this, false)),\n                    };\n                }\n            }\n            return;\n        }\n        // Icon data is available\n        if (this._icon !== icon || state.icon === null) {\n            // New icon or icon has been loaded\n            this._abortLoading();\n            this._icon = icon;\n            // Add classes\n            const classes = ['iconify'];\n            if (iconName.prefix !== '') {\n                classes.push('iconify--' + iconName.prefix);\n            }\n            if (iconName.provider !== '') {\n                classes.push('iconify--' + iconName.provider);\n            }\n            // Set data\n            this._setData({\n                data,\n                classes,\n            });\n            if (this.props.onLoad) {\n                this.props.onLoad(icon);\n            }\n        }\n    }\n    /**\n     * Component mounted\n     */\n    componentDidMount() {\n        this._checkIcon(false);\n    }\n    /**\n     * Component updated\n     */\n    componentDidUpdate(oldProps) {\n        if (oldProps.icon !== this.props.icon) {\n            this._checkIcon(true);\n        }\n    }\n    /**\n     * Abort loading\n     */\n    componentWillUnmount() {\n        this._abortLoading();\n    }\n    /**\n     * Render\n     */\n    render() {\n        const props = this.props;\n        const icon = this.state.icon;\n        if (icon === null) {\n            // Render placeholder\n            return props.children\n                ? props.children\n                : React.createElement('span', {});\n        }\n        // Add classes\n        let newProps = props;\n        if (icon.classes) {\n            newProps = {\n                ...props,\n                className: (typeof props.className === 'string'\n                    ? props.className + ' '\n                    : '') + icon.classes.join(' '),\n            };\n        }\n        // Render icon\n        return render({\n            ...defaultIconProps,\n            ...icon.data,\n        }, newProps, props._inline, props._ref);\n    }\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = React.forwardRef(function Icon(props, ref) {\n    const newProps = {\n        ...props,\n        _ref: ref,\n        _inline: false,\n    };\n    return React.createElement(IconComponent, newProps);\n});\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = React.forwardRef(function InlineIcon(props, ref) {\n    const newProps = {\n        ...props,\n        _ref: ref,\n        _inline: true,\n    };\n    return React.createElement(IconComponent, newProps);\n});\n/**\n * Internal API\n */\nconst _api = {\n    getAPIConfig,\n    setAPIModule,\n    sendAPIQuery,\n    setFetch,\n    getFetch,\n    listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, disableCache, enableCache, getIcon, iconExists, listIcons, loadIcon, loadIcons, replaceIDs };\n"],"mappings":"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"},"metadata":{},"sourceType":"module","externalDependencies":[]}