UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 5.96 kB
{"version":3,"file":"icon.cjs","sources":["../../../components/icon/icon.tsx"],"sourcesContent":["import { computed, defineComponent, h, renderSlot } from 'vue'\n\nimport { useNameHelper, useProps } from '@vexip-ui/config'\nimport { toNumber } from '@vexip-ui/utils'\nimport { iconProps } from './props'\n\nimport type { CSSProperties } from 'vue'\nimport type { IconPresetEffect } from './symbol'\n\nconst internalEffects = Object.freeze<IconPresetEffect[]>([\n 'spin-in',\n 'spin-out',\n 'pulse-in',\n 'pulse-out',\n])\n\nconst angleRE = /(^\\s*[+-]?\\d*\\.?\\d+\\s*)(deg|grad|turn|rad)?\\s*/i\n\nexport default defineComponent({\n name: 'Icon',\n props: iconProps,\n setup(_props, { attrs, slots }) {\n const props = useProps('icon', _props, {\n icon: {\n isFunc: true,\n default: null,\n static: true,\n },\n scale: 1,\n title: null,\n label: null,\n flip: {\n default: null,\n validator: value => ['horizontal', 'vertical', 'both'].includes(value),\n },\n effect: null,\n size: null,\n color: null,\n rotate: null,\n renderer: {\n default: null,\n isFunc: true,\n },\n })\n\n const nh = useNameHelper('icon')\n\n const className = computed(() => {\n let effectCls = ''\n\n if (props.effect) {\n effectCls = internalEffects.includes(props.effect as IconPresetEffect)\n ? nh.bm(props.effect)\n : props.effect\n }\n\n return {\n [nh.b()]: true,\n [nh.bm(`flip-${props.flip}`)]: props.flip,\n [effectCls]: effectCls,\n }\n })\n const computedScale = computed(() => toNumber(props.scale) || 1)\n const rotate = computed(() => {\n if (typeof props.rotate === 'number') {\n return `${(props.rotate % 4) / 4}turn`\n }\n\n const matched = props.rotate?.match(angleRE)\n\n if (!matched) return null\n\n const number = toNumber(matched[1])\n\n if (!matched[2]) {\n return `${(number % 4) / 4}turn`\n }\n\n return number ? `${number}${matched[2]}` : null\n })\n const style = computed(() => {\n const style: CSSProperties = {\n color: props.color,\n }\n\n if (props.size) {\n style.fontSize = props.size\n } else if (computedScale.value !== 1) {\n style.fontSize = `${computedScale.value}em`\n }\n\n if (rotate.value) {\n style[nh.cv('rotate')] = rotate.value\n }\n\n return style\n })\n\n function renderDefault() {\n const iAttrs = {\n class: className.value,\n style: style.value,\n title: props.title,\n role: (attrs.role as string) || (props.label || props.title ? 'img' : undefined),\n 'aria-label': props.label,\n 'aria-hidden': !(props.label || props.title),\n }\n\n if (slots.default) {\n return (\n <i {...iAttrs}>\n <g>{renderSlot(slots, 'default')}</g>\n </i>\n )\n }\n\n if (props.icon) {\n return (\n <i {...iAttrs}>\n <g>{h(props.icon)}</g>\n </i>\n )\n }\n\n return <i {...iAttrs}></i>\n }\n\n return () => {\n if (typeof props.renderer === 'function') {\n return props.renderer(props as any, attrs, renderDefault)\n }\n\n return renderDefault()\n }\n },\n})\n"],"names":["internalEffects","Object","freeze","angleRE","defineComponent","name","props","iconProps","setup","_props","attrs","slots","useProps","icon","isFunc","default","static","scale","title","label","flip","validator","value","includes","effect","size","color","rotate","renderer","nh","useNameHelper","className","computed","effectCls","bm","b","computedScale","toNumber","matched","match","number","style","fontSize","cv","renderDefault","iAttrs","class","role","undefined","_createVNode","renderSlot","h"],"mappings":"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"}