{"version":3,"sources":["webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/components/VIcon/index.ts"],"names":["isFontAwesome5","some","val","iconType","isSvgPath","test","icon","SIZE_MAP","VIcon","name","props","dense","disabled","left","right","size","Number","tag","type","required","default","computed","medium","hasClickListener","Boolean","this","listeners$","click","methods","getIcon","iconName","$slots","text","getSize","sizes","xSmall","small","large","xLarge","explicitSize","key","getDefaultData","staticClass","class","attrs","attrs$","on","getSvgWrapperData","fontSize","wrapperData","style","height","width","undefined","applyColors","data","themeClasses","renderFontIcon","newChildren","delimiterIndex","isMaterialIcon","h","renderSvgIcon","svgData","xmlns","viewBox","role","d","renderSvgIconComponent","component","render","$_wrapperFor","functional","children"],"mappings":"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","file":"js/chunk-2683c2f2.6e831929.js","sourcesContent":["import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\n","import VIcon from './VIcon'\n\nexport { VIcon }\nexport default VIcon\n"],"sourceRoot":""}