You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
74 lines
1.8 KiB
4 years ago
|
import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
|
||
|
// Utils
|
||
|
import { createNamespace, addUnit } from '../utils';
|
||
|
import { inherit } from '../utils/functional'; // Components
|
||
|
|
||
|
import Info from '../info'; // Types
|
||
|
|
||
|
var _createNamespace = createNamespace('icon'),
|
||
|
createComponent = _createNamespace[0],
|
||
|
bem = _createNamespace[1];
|
||
|
|
||
|
function isImage(name) {
|
||
|
return name ? name.indexOf('/') !== -1 : false;
|
||
|
} // compatible with legacy usage, should be removed in next major version
|
||
|
|
||
|
|
||
|
var LEGACY_MAP = {
|
||
|
medel: 'medal',
|
||
|
'medel-o': 'medal-o',
|
||
|
'calender-o': 'calendar-o'
|
||
|
};
|
||
|
|
||
|
function correctName(name) {
|
||
|
return name && LEGACY_MAP[name] || name;
|
||
|
}
|
||
|
|
||
|
function Icon(h, props, slots, ctx) {
|
||
|
var _props$badge;
|
||
|
|
||
|
var name = correctName(props.name);
|
||
|
var imageIcon = isImage(name);
|
||
|
|
||
|
if (process.env.NODE_ENV === 'development' && props.info) {
|
||
|
console.warn('[Vant] Icon: "info" prop is deprecated, use "badge" prop instead.');
|
||
|
}
|
||
|
|
||
|
return h(props.tag, _mergeJSXProps([{
|
||
|
"class": [props.classPrefix, imageIcon ? '' : props.classPrefix + "-" + name],
|
||
|
"style": {
|
||
|
color: props.color,
|
||
|
fontSize: addUnit(props.size)
|
||
|
}
|
||
|
}, inherit(ctx, true)]), [slots.default && slots.default(), imageIcon && h("img", {
|
||
|
"class": bem('image'),
|
||
|
"attrs": {
|
||
|
"src": name
|
||
|
}
|
||
|
}), h(Info, {
|
||
|
"attrs": {
|
||
|
"dot": props.dot,
|
||
|
"info": (_props$badge = props.badge) != null ? _props$badge : props.info
|
||
|
}
|
||
|
})]);
|
||
|
}
|
||
|
|
||
|
Icon.props = {
|
||
|
dot: Boolean,
|
||
|
name: String,
|
||
|
size: [Number, String],
|
||
|
// @deprecated
|
||
|
// should be removed in next major version
|
||
|
info: [Number, String],
|
||
|
badge: [Number, String],
|
||
|
color: String,
|
||
|
tag: {
|
||
|
type: String,
|
||
|
default: 'i'
|
||
|
},
|
||
|
classPrefix: {
|
||
|
type: String,
|
||
|
default: bem()
|
||
|
}
|
||
|
};
|
||
|
export default createComponent(Icon);
|