@aplus-frontend/antdv
Version:
Vue basic component library maintained based on ant-design-vue
129 lines • 4.9 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import { createVNode as _createVNode } from "vue";
import classNames from '../_util/classNames';
import createContext from '../_util/createContext';
import useConfigInject from '../config-provider/hooks/useConfigInject';
import useStyle from './style';
import { computed, defineComponent } from 'vue';
import PropTypes from '../_util/vue-types';
import { booleanType, tuple } from '../_util/type';
import { isEmpty } from 'lodash-es';
import { flattenChildren } from '../_util/props-util';
export const spaceCompactItemProps = () => ({
compactSize: String,
compactDirection: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
isFirstItem: booleanType(),
isLastItem: booleanType()
});
export const SpaceCompactItemContext = createContext(null);
export const useCompactItemContext = (prefixCls, direction) => {
const compactItemContext = SpaceCompactItemContext.useInject();
const compactItemClassnames = computed(() => {
if (!compactItemContext || isEmpty(compactItemContext)) return '';
const {
compactDirection,
isFirstItem,
isLastItem
} = compactItemContext;
const separator = compactDirection === 'vertical' ? '-vertical-' : '-';
return classNames({
[`${prefixCls.value}-compact${separator}item`]: true,
[`${prefixCls.value}-compact${separator}first-item`]: isFirstItem,
[`${prefixCls.value}-compact${separator}last-item`]: isLastItem,
[`${prefixCls.value}-compact${separator}item-rtl`]: direction.value === 'rtl'
});
});
return {
compactSize: computed(() => compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactSize),
compactDirection: computed(() => compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactDirection),
compactItemClassnames
};
};
export const NoCompactStyle = defineComponent({
name: 'NoCompactStyle',
setup(_, _ref) {
let {
slots
} = _ref;
SpaceCompactItemContext.useProvide(null);
return () => {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
});
export const spaceCompactProps = () => ({
prefixCls: String,
size: {
type: String
},
direction: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
align: PropTypes.oneOf(tuple('start', 'end', 'center', 'baseline')),
block: {
type: Boolean,
default: undefined
}
});
const CompactItem = defineComponent({
name: 'CompactItem',
props: spaceCompactItemProps(),
setup(props, _ref2) {
let {
slots
} = _ref2;
SpaceCompactItemContext.useProvide(props);
return () => {
var _a;
return (_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots);
};
}
});
const Compact = defineComponent({
name: 'ASpaceCompact',
inheritAttrs: false,
props: spaceCompactProps(),
setup(props, _ref3) {
let {
attrs,
slots
} = _ref3;
const {
prefixCls,
direction: directionConfig
} = useConfigInject('space-compact', props);
const compactItemContext = SpaceCompactItemContext.useInject();
const [wrapSSR, hashId] = useStyle(prefixCls);
const clx = computed(() => {
return classNames(prefixCls.value, hashId.value, {
[`${prefixCls.value}-rtl`]: directionConfig.value === 'rtl',
[`${prefixCls.value}-block`]: props.block,
[`${prefixCls.value}-vertical`]: props.direction === 'vertical'
});
});
return () => {
var _a;
const childNodes = flattenChildren(((_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots)) || []);
// =========================== Render ===========================
if (childNodes.length === 0) {
return null;
}
return wrapSSR(_createVNode("div", _objectSpread(_objectSpread({}, attrs), {}, {
"class": [clx.value, attrs.class]
}), [childNodes.map((child, i) => {
var _a;
const key = child && child.key || `${prefixCls.value}-item-${i}`;
const noCompactItemContext = !compactItemContext || isEmpty(compactItemContext);
return _createVNode(CompactItem, {
"key": key,
"compactSize": (_a = props.size) !== null && _a !== void 0 ? _a : 'middle',
"compactDirection": props.direction,
"isFirstItem": i === 0 && (noCompactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isFirstItem)),
"isLastItem": i === childNodes.length - 1 && (noCompactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isLastItem))
}, {
default: () => [child]
});
})]));
};
}
});
export default Compact;