{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/ui/icon/index.ts"],"sourcesContent":["import { h, defineComponent, computed, VNode, ComponentPublicInstance } from 'vue'\nimport type { CSSProperties } from 'vue'\nimport useSize, { useSizeProps } from '@vue-cesium/composables/private/use-size'\nimport { hMergeSlot, hSlot } from '@vue-cesium/utils/private/render'\n\nexport const iconProps = {\n  ...useSizeProps,\n\n  tag: {\n    type: String,\n    default: 'i'\n  },\n\n  name: String,\n  color: String,\n  hoverColor: String,\n  left: Boolean,\n  right: Boolean\n}\nexport default defineComponent({\n  name: 'VcIcon',\n  props: iconProps,\n  setup(props: VcIconProps, { slots }) {\n    const sizeStyle = useSize(props)\n    const style = computed(() => {\n      const css: CSSProperties | null = sizeStyle.value\n      if (!css) {\n        return undefined\n      }\n      props.color && (css.color = props.color)\n      props.hoverColor && (css['--hover-color'] = props.hoverColor)\n      return css\n    })\n\n    const classes = computed(\n      () =>\n        'vc-icon' +\n        (props.left === true ? ' on-left' : '') +\n        (props.right === true ? ' on-right' : '') +\n        (props.color !== void 0 ? ` text-${props.color}` : '')\n    )\n\n    const type = computed(() => {\n      let cls\n      let icon = props.name\n\n      if (!icon) {\n        return {\n          none: true,\n          cls: classes.value\n        }\n      }\n\n      if (icon.startsWith('M') === true) {\n        const [def, viewBox] = icon.split('|')\n\n        return {\n          svg: true,\n          cls: classes.value,\n          nodes: def.split('&&').map(path => {\n            const [d, style, transform] = path.split('@@')\n            return h('path', {\n              style,\n              d,\n              transform\n            })\n          }),\n          viewBox: viewBox !== void 0 ? viewBox : '0 0 24 24'\n        }\n      }\n\n      if (icon.startsWith('img:') === true) {\n        return {\n          img: true,\n          cls: classes.value,\n          src: icon.substring(4)\n        }\n      }\n\n      if (icon.startsWith('svguse:') === true) {\n        const [def, viewBox] = icon.split('|')\n\n        return {\n          svguse: true,\n          cls: classes.value,\n          src: def.substring(7),\n          viewBox: viewBox !== void 0 ? viewBox : '0 0 24 24'\n        }\n      }\n\n      let content = ' '\n\n      if (/^[l|f]a[s|r|l|b|d]{0,1} /.test(icon) || icon.startsWith('icon-') === true) {\n        cls = icon\n      } else if (icon.startsWith('bt-') === true) {\n        cls = `bt ${icon}`\n      } else if (icon.startsWith('eva-') === true) {\n        cls = `eva ${icon}`\n      } else if (/^ion-(md|ios|logo)/.test(icon) === true) {\n        cls = `ionicons ${icon}`\n      } else if (icon.startsWith('ion-') === true) {\n        cls = `ionicons ion-md${icon.substr(3)}`\n      } else if (icon.startsWith('mdi-') === true) {\n        cls = `mdi ${icon}`\n      } else if (icon.startsWith('iconfont ') === true) {\n        cls = `${icon}`\n      } else if (icon.startsWith('ti-') === true) {\n        cls = `themify-icon ${icon}`\n      } else if (icon.startsWith('vc-') === true) {\n        cls = `vc-icons ${icon}`\n      } else {\n        // \"notranslate\" class is for Google Translate\n        // to avoid tampering with Material Icons ligature font\n        //\n        // Caution: To be able to add suffix to the class name,\n        // keep the 'material-icons' at the end of the string.\n        cls = 'notranslate material-icons'\n\n        if (icon.startsWith('o_') === true) {\n          icon = icon.substring(2)\n          cls += '-outlined'\n        } else if (icon.startsWith('r_') === true) {\n          icon = icon.substring(2)\n          cls += '-round'\n        } else if (icon.startsWith('s_') === true) {\n          icon = icon.substring(2)\n          cls += '-sharp'\n        }\n\n        content = icon\n      }\n\n      return {\n        cls: cls + ' ' + classes.value,\n        content\n      }\n    })\n\n    return () => {\n      const data = {\n        class: type.value.cls,\n        style: style.value,\n        'aria-hidden': 'true',\n        role: 'presentation',\n        viewBox: '',\n        src: ''\n      }\n\n      if (type.value.none === true) {\n        return h(props.tag, data, hSlot(slots.default))\n      }\n\n      if (type.value.img === true) {\n        data.src = type.value.src\n        if (data.style) {\n          data.style.width = data.style.fontSize\n          data.style.height = data.style.fontSize\n        }\n        return h('img', data)\n      }\n\n      if (type.value.svg === true) {\n        data.viewBox = type.value.viewBox\n        data['aria-hidden'] = 'true'\n\n        if (data.style) {\n          data.style.width = data.style.fontSize\n          data.style.height = data.style.fontSize\n        }\n\n        return h('svg', data, hMergeSlot(slots.default, type.value.nodes))\n      }\n\n      if (type.value.svguse === true) {\n        data.viewBox = type.value.viewBox\n        data['aria-hidden'] = 'true'\n\n        if (data.style) {\n          data.style.width = data.style.fontSize\n          data.style.height = data.style.fontSize\n        }\n        return h('svg', data, hMergeSlot(slots.default, [h('use', { 'xlink:href': type.value.src })]))\n      }\n\n      return h(props.tag, data, hMergeSlot(slots.default, [type.value.content]))\n    }\n  }\n})\n\nexport interface VcIconProps {\n  /**\n   * Size in CSS units, including unit name or standard size name (xs|sm|md|lg|xl).\n   */\n  size?: string\n  /**\n   * HTML tag to render, unless no icon is supplied or it's an svg icon.\n   * Default value: i\n   */\n  tag?: string\n  /**\n   * Name of the icon, following VueCesium convention.\n   */\n  name?: string\n  /**\n   * Color name for component from the css color palette.\n   */\n  color?: string\n  hoverColor?: string\n  /**\n   * Useful if icon is on the left side of something: applies a standard margin on the right side of Icon.\n   */\n  left?: boolean\n  /**\n   * Useful if icon is on the right side of something: applies a standard margin on the left side of Icon.\n   */\n  right?: boolean\n}\n\nexport interface VcIconSlots {\n  /**\n   * Suggestions: VcTooltip\n   */\n  default: () => VNode[]\n}\n\nexport type VcIconRef = ComponentPublicInstance<VcIconProps>\n"],"names":["style"],"mappings":"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"}