vuetify
Version:
Vue Material Component Framework
1 lines • 8.76 kB
Source Map (JSON)
{"version":3,"file":"icons.mjs","names":["aliases","mdi","computed","inject","isRef","defineComponent","genericComponent","mergeDeep","propsFactory","IconValue","String","Function","Object","IconSymbol","Symbol","for","makeIconProps","icon","type","tag","required","VComponentIcon","name","props","setup","slots","default","VSvgIcon","inheritAttrs","attrs","VLigatureIcon","VClassIcon","defaultSets","svg","component","class","createIcons","options","defaultSet","sets","useIcon","icons","Error","iconData","iconAlias","value","trim","startsWith","slice","iconSetName","keys","find","setName","iconName","length","iconSet"],"sources":["../../src/composables/icons.tsx"],"sourcesContent":["// Icons\nimport { aliases, mdi } from '@/iconsets/mdi'\n\n// Utilities\nimport { computed, inject, isRef } from 'vue'\nimport { defineComponent, genericComponent, mergeDeep, propsFactory } from '@/util'\n\n// Types\nimport type { InjectionKey, JSXComponent, PropType, Ref } from 'vue'\n\nexport type IconValue = string | JSXComponent\nexport const IconValue = [String, Function, Object] as PropType<IconValue>\n\nexport interface IconAliases {\n [name: string]: IconValue\n complete: IconValue\n cancel: IconValue\n close: IconValue\n delete: IconValue\n clear: IconValue\n success: IconValue\n info: IconValue\n warning: IconValue\n error: IconValue\n prev: IconValue\n next: IconValue\n checkboxOn: IconValue\n checkboxOff: IconValue\n checkboxIndeterminate: IconValue\n delimiter: IconValue\n sortAsc: IconValue\n sortDesc: IconValue\n expand: IconValue\n menu: IconValue\n subgroup: IconValue\n dropdown: IconValue\n radioOn: IconValue\n radioOff: IconValue\n edit: IconValue\n ratingEmpty: IconValue\n ratingFull: IconValue\n ratingHalf: IconValue\n loading: IconValue\n first: IconValue\n last: IconValue\n unfold: IconValue\n file: IconValue\n plus: IconValue\n minus: IconValue\n}\n\nexport interface IconProps {\n tag: string\n icon?: IconValue\n disabled?: Boolean\n}\n\ntype IconComponent = JSXComponent<IconProps>\n\nexport interface IconSet {\n component: IconComponent\n}\n\nexport type IconOptions = {\n defaultSet: string\n aliases?: Partial<IconAliases>\n sets: Record<string, IconSet>\n}\n\ntype IconInstance = {\n component: IconComponent\n icon?: IconValue\n}\n\nexport const IconSymbol: InjectionKey<IconOptions> = Symbol.for('vuetify:icons')\n\nexport const makeIconProps = propsFactory({\n icon: {\n type: IconValue,\n },\n // Could not remove this and use makeTagProps, types complained because it is not required\n tag: {\n type: String,\n required: true,\n },\n}, 'icon')\n\nexport const VComponentIcon = genericComponent()({\n name: 'VComponentIcon',\n\n props: makeIconProps(),\n\n setup (props, { slots }) {\n return () => {\n return (\n <props.tag>\n { props.icon ? <props.icon /> : slots.default?.() }\n </props.tag>\n )\n }\n },\n})\nexport type VComponentIcon = InstanceType<typeof VComponentIcon>\n\nexport const VSvgIcon = defineComponent({\n name: 'VSvgIcon',\n\n inheritAttrs: false,\n\n props: makeIconProps(),\n\n setup (props, { attrs }) {\n return () => {\n return (\n <props.tag { ...attrs } style={ null }>\n <svg\n class=\"v-icon__svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n role=\"img\"\n aria-hidden=\"true\"\n >\n <path d={ props.icon as string }></path>\n </svg>\n </props.tag>\n )\n }\n },\n})\nexport type VSvgIcon = InstanceType<typeof VSvgIcon>\n\nexport const VLigatureIcon = defineComponent({\n name: 'VLigatureIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag>{ props.icon }</props.tag>\n }\n },\n})\nexport type VLigatureIcon = InstanceType<typeof VLigatureIcon>\n\nexport const VClassIcon = defineComponent({\n name: 'VClassIcon',\n\n props: makeIconProps(),\n\n setup (props) {\n return () => {\n return <props.tag class={ props.icon }></props.tag>\n }\n },\n})\nexport type VClassIcon = InstanceType<typeof VClassIcon>\n\nexport const defaultSets: Record<string, IconSet> = {\n svg: {\n component: VSvgIcon,\n },\n class: {\n component: VClassIcon,\n },\n}\n\n// Composables\nexport function createIcons (options?: IconOptions) {\n return mergeDeep({\n defaultSet: 'mdi',\n sets: {\n ...defaultSets,\n mdi,\n },\n aliases,\n }, options)\n}\n\nexport const useIcon = (props: Ref<string | undefined> | { icon?: IconValue }) => {\n const icons = inject(IconSymbol)\n\n if (!icons) throw new Error('Missing Vuetify Icons provide!')\n\n const iconData: Ref<IconInstance> = computed(() => {\n const iconAlias = isRef(props) ? props.value : props.icon\n\n if (!iconAlias) return { component: VComponentIcon }\n\n let icon: IconValue | undefined = iconAlias\n\n if (typeof icon === 'string') {\n icon = icon.trim()\n\n if (icon.startsWith('$')) {\n icon = icons.aliases?.[icon.slice(1)]\n }\n }\n\n if (!icon) throw new Error(`Could not find aliased icon \"${iconAlias}\"`)\n\n if (typeof icon !== 'string') {\n return {\n component: VComponentIcon,\n icon,\n }\n }\n\n const iconSetName = Object.keys(icons.sets).find(\n setName => typeof icon === 'string' && icon.startsWith(`${setName}:`)\n )\n\n const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon\n const iconSet = icons.sets[iconSetName ?? icons.defaultSet]\n\n return {\n component: iconSet.component,\n icon: iconName,\n }\n })\n\n return { iconData }\n}\n"],"mappings":"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"}