UNPKG

iep-ui

Version:

An enterprise-class UI design language and Vue-based implementation

147 lines (122 loc) 5.04 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SpaceProps = exports.SpaceSizeType = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _vueTypes = require('../_util/vue-types'); var _vueTypes2 = _interopRequireDefault(_vueTypes); var _propsUtil = require('../_util/props-util'); var _configConsumerProps = require('../config-provider/configConsumerProps'); var _styleChecker = require('../_util/styleChecker'); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var SpaceSizeType = exports.SpaceSizeType = _vueTypes2['default'].oneOfType([_vueTypes2['default'].number, _vueTypes2['default'].oneOf(['small', 'middle', 'large']), _vueTypes2['default'].arrayOf([_vueTypes2['default'].number, _vueTypes2['default'].number])]); var spaceSize = { small: 8, middle: 16, large: 24 }; var SpaceProps = exports.SpaceProps = { prefixCls: _vueTypes2['default'].string, size: SpaceSizeType, wrap: _vueTypes2['default'].bool.def(false), direction: _vueTypes2['default'].oneOf(['horizontal', 'vertical']), align: _vueTypes2['default'].oneOf(['start', 'end', 'center', 'baseline']) }; function getNumberSize(size) { return typeof size === 'string' ? spaceSize[size] : size || 0; } var Space = { functional: true, name: 'ASpace', props: (0, _propsUtil.initDefaultProps)(SpaceProps, { size: 'small', direction: 'horizontal' }), inject: { configProvider: { 'default': function _default() { return _configConsumerProps.ConfigConsumerProps; } } }, render: function render(h, content) { var customizePrefixCls = content.prefixCls, configProvider = content.injections.configProvider, children = content.children; var _content$props = content.props, align = _content$props.align, size = _content$props.size, direction = _content$props.direction, wrap = _content$props.wrap; var supportFlexGap = (0, _styleChecker.detectFlexGapSupported)(); var getPrefixCls = configProvider.getPrefixCls; var prefixCls = getPrefixCls('space', customizePrefixCls); var items = (0, _propsUtil.filterEmpty)(children); var len = items.length; var horizontalSize = 0, verticalSize = 0; var directionConfig = 'ltr'; if (len === 0) { return null; } var watchSize = Array.isArray(size) ? size : [size, size].map(function (item) { return getNumberSize(item); }); if (watchSize) { horizontalSize = watchSize[0]; verticalSize = watchSize[1]; } var split = content.slots.split || (content.scopedSlots.split ? content.scopedSlots.split() : false); var itemClassName = prefixCls + '-item'; var horizontalSizeVal = horizontalSize; var latestIndex = len - 1; var mergedAlign = align === undefined && direction === 'horizontal' ? 'center' : align; var cn = function cn() { var _classNames; return (0, _classnames2['default'])(prefixCls, prefixCls + '-' + direction, (_classNames = {}, (0, _defineProperty3['default'])(_classNames, prefixCls + '-rtl', directionConfig === 'rtl'), (0, _defineProperty3['default'])(_classNames, prefixCls + '-align-' + mergedAlign, mergedAlign), _classNames)); }; var style = function style() { var gapStyle = {}; if (supportFlexGap) { gapStyle.columnGap = horizontalSize + 'px'; gapStyle.rowGap = verticalSize + 'px'; } return (0, _extends3['default'])({}, gapStyle, wrap && { flexWrap: 'wrap', marginBottom: -verticalSize + 'px' }); }; var marginDirection = directionConfig === 'rtl' ? 'marginLeft' : 'marginRight'; return h( 'div', { 'class': cn(), style: style() }, [items.map(function (child, index) { var itemStyle = {}; if (!supportFlexGap) { if (direction === 'vertical') { if (index < latestIndex) { itemStyle = { marginBottom: horizontalSizeVal / (split ? 2 : 1) + 'px' }; } } else { itemStyle = (0, _extends3['default'])({}, index < latestIndex && (0, _defineProperty3['default'])({}, marginDirection, horizontalSizeVal / (split ? 2 : 1) + 'px'), wrap && { paddingBottom: verticalSize + 'px' }); } } return [h( 'div', { 'class': itemClassName, style: itemStyle }, [child] ), index < latestIndex && split && h( 'span', { 'class': itemClassName + '-split', style: itemStyle }, [split] )]; })] ); } }; /* istanbul ignore next */ Space.install = function (Vue) { Vue.component(Space.name, Space); }; exports['default'] = Space;