vuetify
Version:
Vue Material Component Framework
1 lines • 5.12 kB
Source Map (JSON)
{"version":3,"file":"VIcon.mjs","names":["IconValue","useIcon","makeSizeProps","useSize","makeTagProps","makeThemeProps","provideTheme","useTextColor","computed","Text","toRef","convertToUnit","genericComponent","propsFactory","useRender","makeVIconProps","color","String","start","Boolean","end","icon","tag","VIcon","name","props","setup","attrs","slots","slotIcon","default","slot","filter","node","type","children","themeClasses","iconData","sizeClasses","textColorClasses","textColorStyles","value","onClick","fontSize","size","height","width","undefined"],"sources":["../../../src/components/VIcon/VIcon.tsx"],"sourcesContent":["// Styles\nimport './VIcon.sass'\n\n// Composables\nimport { IconValue, useIcon } from '@/composables/icons'\nimport { makeSizeProps, useSize } from '@/composables/size'\nimport { makeTagProps } from '@/composables/tag'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { useTextColor } from '@/composables/color'\n\n// Utilities\nimport { computed, Text, toRef } from 'vue'\nimport { convertToUnit, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { ComputedRef } from 'vue'\n\nexport const makeVIconProps = propsFactory({\n color: String,\n start: Boolean,\n end: Boolean,\n icon: IconValue,\n\n ...makeSizeProps(),\n ...makeTagProps({ tag: 'i' }),\n ...makeThemeProps(),\n}, 'v-icon')\n\nexport const VIcon = genericComponent()({\n name: 'VIcon',\n\n props: makeVIconProps(),\n\n setup (props, { attrs, slots }) {\n let slotIcon: ComputedRef<string | undefined> | undefined\n if (slots.default) {\n slotIcon = computed(() => {\n const slot = slots.default?.()\n if (!slot) return\n\n return slot.filter(node =>\n node.type === Text && node.children && typeof node.children === 'string'\n )[0]?.children as string\n })\n }\n\n const { themeClasses } = provideTheme(props)\n const { iconData } = useIcon(slotIcon || props)\n const { sizeClasses } = useSize(props)\n const { textColorClasses, textColorStyles } = useTextColor(toRef(props, 'color'))\n\n useRender(() => (\n <iconData.value.component\n tag={ props.tag }\n icon={ iconData.value.icon }\n class={[\n 'v-icon',\n 'notranslate',\n themeClasses.value,\n sizeClasses.value,\n textColorClasses.value,\n {\n 'v-icon--clickable': !!attrs.onClick,\n 'v-icon--start': props.start,\n 'v-icon--end': props.end,\n },\n ]}\n style={[\n !sizeClasses.value ? ({\n fontSize: convertToUnit(props.size),\n height: convertToUnit(props.size),\n width: convertToUnit(props.size),\n }) : undefined,\n textColorStyles.value,\n ]}\n role={ attrs.onClick ? 'button' : undefined }\n aria-hidden={ !attrs.onClick }\n >\n { slots.default?.() }\n </iconData.value.component>\n ))\n\n return {}\n },\n})\n\nexport type VIcon = InstanceType<typeof VIcon>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,SAAS,EAAEC,OAAO;AAAA,SAClBC,aAAa,EAAEC,OAAO;AAAA,SACtBC,YAAY;AAAA,SACZC,cAAc,EAAEC,YAAY;AAAA,SAC5BC,YAAY,uCAErB;AACA,SAASC,QAAQ,EAAEC,IAAI,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAClCC,aAAa,EAAEC,gBAAgB,EAAEC,YAAY,EAAEC,SAAS,gCAEjE;AAGA,OAAO,MAAMC,cAAc,GAAGF,YAAY,CAAC;EACzCG,KAAK,EAAEC,MAAM;EACbC,KAAK,EAAEC,OAAO;EACdC,GAAG,EAAED,OAAO;EACZE,IAAI,EAAErB,SAAS;EAEf,GAAGE,aAAa,EAAE;EAClB,GAAGE,YAAY,CAAC;IAAEkB,GAAG,EAAE;EAAI,CAAC,CAAC;EAC7B,GAAGjB,cAAc;AACnB,CAAC,EAAE,QAAQ,CAAC;AAEZ,OAAO,MAAMkB,KAAK,GAAGX,gBAAgB,EAAE,CAAC;EACtCY,IAAI,EAAE,OAAO;EAEbC,KAAK,EAAEV,cAAc,EAAE;EAEvBW,KAAK,CAAED,KAAK,QAAoB;IAAA,IAAlB;MAAEE,KAAK;MAAEC;IAAM,CAAC;IAC5B,IAAIC,QAAqD;IACzD,IAAID,KAAK,CAACE,OAAO,EAAE;MACjBD,QAAQ,GAAGrB,QAAQ,CAAC,MAAM;QACxB,MAAMuB,IAAI,GAAGH,KAAK,CAACE,OAAO,IAAI;QAC9B,IAAI,CAACC,IAAI,EAAE;QAEX,OAAOA,IAAI,CAACC,MAAM,CAACC,IAAI,IACrBA,IAAI,CAACC,IAAI,KAAKzB,IAAI,IAAIwB,IAAI,CAACE,QAAQ,IAAI,OAAOF,IAAI,CAACE,QAAQ,KAAK,QAAQ,CACzE,CAAC,CAAC,CAAC,EAAEA,QAAQ;MAChB,CAAC,CAAC;IACJ;IAEA,MAAM;MAAEC;IAAa,CAAC,GAAG9B,YAAY,CAACmB,KAAK,CAAC;IAC5C,MAAM;MAAEY;IAAS,CAAC,GAAGpC,OAAO,CAAC4B,QAAQ,IAAIJ,KAAK,CAAC;IAC/C,MAAM;MAAEa;IAAY,CAAC,GAAGnC,OAAO,CAACsB,KAAK,CAAC;IACtC,MAAM;MAAEc,gBAAgB;MAAEC;IAAgB,CAAC,GAAGjC,YAAY,CAACG,KAAK,CAACe,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjFX,SAAS,CAAC;MAAA,OAEAW,KAAK,CAACH,GAAG;MAAA,QACRe,QAAQ,CAACI,KAAK,CAACpB,IAAI;MAAA,SACnB,CACL,QAAQ,EACR,aAAa,EACbe,YAAY,CAACK,KAAK,EAClBH,WAAW,CAACG,KAAK,EACjBF,gBAAgB,CAACE,KAAK,EACtB;QACE,mBAAmB,EAAE,CAAC,CAACd,KAAK,CAACe,OAAO;QACpC,eAAe,EAAEjB,KAAK,CAACP,KAAK;QAC5B,aAAa,EAAEO,KAAK,CAACL;MACvB,CAAC,CACF;MAAA,SACM,CACL,CAACkB,WAAW,CAACG,KAAK,GAAI;QACpBE,QAAQ,EAAEhC,aAAa,CAACc,KAAK,CAACmB,IAAI,CAAC;QACnCC,MAAM,EAAElC,aAAa,CAACc,KAAK,CAACmB,IAAI,CAAC;QACjCE,KAAK,EAAEnC,aAAa,CAACc,KAAK,CAACmB,IAAI;MACjC,CAAC,GAAIG,SAAS,EACdP,eAAe,CAACC,KAAK,CACtB;MAAA,QACMd,KAAK,CAACe,OAAO,GAAG,QAAQ,GAAGK,SAAS;MAAA,eAC7B,CAACpB,KAAK,CAACe;IAAO;MAAA,gBAE1Bd,KAAK,CAACE,OAAO,IAAI;IAAA,EAEtB,CAAC;IAEF,OAAO,CAAC,CAAC;EACX;AACF,CAAC,CAAC"}