tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 1.88 kB
Source Map (JSON)
{"version":3,"file":"icon.mjs","sources":["../../src/hooks/icon.tsx"],"sourcesContent":["import { isFunction } from 'lodash-es';\nimport { getCurrentInstance, h } from 'vue';\n\n/**\n * 渲染icon,用于icon、close等渲染图标的场景\n * @example const renderIconTNode = useIcon();\n * @returns renderIconTNode\n * @param iconType 要渲染的icon元素\n * @param defaultIcons 默认icon集合\n */\nexport function useIcon() {\n const instance = getCurrentInstance();\n return function renderIconTNode(iconType: string, defaultIcons?: Record<string, any>) {\n let iconContent;\n // 传入的是渲染函数\n if (isFunction(instance.props[iconType])) {\n iconContent = (instance.props as Object)[iconType](h);\n } else if (instance.slots[iconType]) {\n // 插槽slot\n iconContent = instance.slots[iconType] && instance.slots[iconType](null)[0];\n } else if (defaultIcons) {\n const Component = defaultIcons[instance.props.theme as string];\n iconContent = Component;\n }\n return iconContent;\n };\n}\n"],"names":["useIcon","instance","getCurrentInstance","renderIconTNode","iconType","defaultIcons","iconContent","isFunction","props","h","slots","Component","theme"],"mappings":";;;;;;;;;AAUO,SAASA,OAAUA,GAAA;AACxB,EAAA,IAAMC,WAAWC,kBAAmB,EAAA,CAAA;AAC7B,EAAA,OAAA,SAASC,eAAgBA,CAAAC,QAAA,EAAkBC,YAAoC,EAAA;AAChF,IAAA,IAAAC,WAAA,CAAA;IAEJ,IAAIC,UAAW,CAAAN,QAAA,CAASO,KAAM,CAAAJ,QAAA,CAAS,CAAG,EAAA;MACzBE,WAAA,GAAAL,QAAA,CAASO,KAAiB,CAAAJ,QAAA,CAAA,CAAUK,CAAC,CAAA,CAAA;KACtD,MAAA,IAAWR,QAAS,CAAAS,KAAA,CAAMN,QAAW,CAAA,EAAA;AAEnCE,MAAAA,WAAA,GAAcL,SAASS,KAAM,CAAAN,QAAA,CAAA,IAAaH,SAASS,KAAM,CAAAN,QAAA,CAAA,CAAU,IAAI,CAAE,CAAA,CAAA,CAAA,CAAA;eAChEC,YAAc,EAAA;MACjB,IAAAM,SAAA,GAAYN,YAAa,CAAAJ,QAAA,CAASO,KAAM,CAAAI,KAAA,CAAA,CAAA;AAChCN,MAAAA,WAAA,GAAAK,SAAA,CAAA;AAChB,KAAA;AACO,IAAA,OAAAL,WAAA,CAAA;GACT,CAAA;AACF;;;;"}