ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
168 lines (129 loc) • 5.84 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props');
var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _dist = require('@ant-design/icons/lib/dist');
var allIcons = _interopRequireWildcard(_dist);
var _iconsVue = require('@ant-design/icons-vue');
var _iconsVue2 = _interopRequireDefault(_iconsVue);
var _vueTypes = require('../_util/vue-types');
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _IconFont = require('./IconFont');
var _IconFont2 = _interopRequireDefault(_IconFont);
var _utils = require('./utils');
var _warning = require('../_util/warning');
var _warning2 = _interopRequireDefault(_warning);
var _twoTonePrimaryColor = require('./twoTonePrimaryColor');
var _propsUtil = require('../_util/props-util');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// Initial setting
_iconsVue2['default'].add.apply(_iconsVue2['default'], (0, _toConsumableArray3['default'])(Object.keys(allIcons).map(function (key) {
return allIcons[key];
})));
(0, _twoTonePrimaryColor.setTwoToneColor)('#1890ff');
var defaultTheme = 'outlined';
var dangerousTheme = void 0;
var Icon = {
functional: true,
name: 'AIcon',
props: {
type: _vueTypes2['default'].string,
component: _vueTypes2['default'].any,
viewBox: _vueTypes2['default'].any,
spin: _vueTypes2['default'].bool.def(false),
theme: _vueTypes2['default'].oneOf(['filled', 'outlined', 'twoTone']),
twoToneColor: _vueTypes2['default'].string
},
render: function render(h, context) {
var _extends2;
var props = context.props,
slots = context.slots,
listeners = context.listeners,
data = context.data;
var type = props.type,
Component = props.component,
viewBox = props.viewBox,
spin = props.spin,
theme = props.theme,
twoToneColor = props.twoToneColor;
var slotsMap = slots();
var children = (0, _propsUtil.filterEmpty)(slotsMap['default']);
children = children.length === 0 ? undefined : children;
(0, _warning2['default'])(Boolean(type || Component || children), 'Icon should have `type` prop or `component` prop or `children`.');
var classString = (0, _classnames2['default'])((0, _extends4['default'])({}, (0, _propsUtil.getClass)(context), (_extends2 = {}, (0, _defineProperty3['default'])(_extends2, 'anticon', true), (0, _defineProperty3['default'])(_extends2, 'anticon-' + type, !!type), _extends2)));
var svgClassString = (0, _classnames2['default'])((0, _defineProperty3['default'])({}, 'anticon-spin', !!spin || type === 'loading'));
var innerNode = void 0;
// component > children > type
if (Component) {
var innerSvgProps = {
attrs: (0, _extends4['default'])({}, _utils.svgBaseProps, {
viewBox: viewBox
}),
'class': svgClassString
};
if (!viewBox) {
delete innerSvgProps.attrs.viewBox;
}
innerNode = h(
Component,
innerSvgProps,
[children]
);
}
if (children) {
(0, _warning2['default'])(Boolean(viewBox) || children.length === 1 && children[0].tag === 'use', 'Make sure that you provide correct `viewBox`' + ' prop (default `0 0 1024 1024`) to the icon.');
var _innerSvgProps = {
attrs: (0, _extends4['default'])({}, _utils.svgBaseProps),
'class': svgClassString
};
innerNode = h(
'svg',
(0, _babelHelperVueJsxMergeProps2['default'])([_innerSvgProps, {
attrs: { viewBox: viewBox }
}]),
[children]
);
}
if (typeof type === 'string') {
var computedType = type;
if (theme) {
var themeInName = (0, _utils.getThemeFromTypeName)(type);
(0, _warning2['default'])(!themeInName || theme === themeInName, 'The icon name \'' + type + '\' already specify a theme \'' + themeInName + '\',' + (' the \'theme\' prop \'' + theme + '\' will be ignored.'));
}
computedType = (0, _utils.withThemeSuffix)((0, _utils.removeTypeTheme)((0, _utils.alias)(type)), dangerousTheme || theme || defaultTheme);
innerNode = h(_iconsVue2['default'], {
'class': svgClassString,
attrs: { type: computedType,
primaryColor: twoToneColor
}
});
}
// functional component not support nativeOn,https://github.com/vuejs/vue/issues/7526
var iProps = (0, _extends4['default'])({}, data, { on: (0, _extends4['default'])({}, listeners, data.nativeOn), 'class': classString, staticClass: ''
});
return h(
'i',
iProps,
[innerNode]
);
}
};
Icon.createFromIconfontCN = _IconFont2['default'];
Icon.getTwoToneColor = _twoTonePrimaryColor.getTwoToneColor;
Icon.setTwoToneColor = _twoTonePrimaryColor.setTwoToneColor;
/* istanbul ignore next */
Icon.install = function (Vue) {
Vue.component(Icon.name, Icon);
};
exports['default'] = Icon;