song-ui-u
Version:
vue3 + js的PC前端组件库
76 lines (73 loc) • 1.98 kB
JavaScript
import { defineComponent, renderSlot, createVNode, isVNode } from 'vue';
import SpaceItem from './item.mjs';
import { useNamespace } from '../../../hook/use-namespace/index.mjs';
import { useStyle } from '../../../hook/use-style/index.mjs';
import '../../../hook/use-zindex/index.mjs';
var Space = defineComponent({
name: "x-space",
props: {
direction: {
type: String,
default: "horizontal"
},
size: {
type: [Number, Array],
default: 0
},
wrap: Boolean,
spacer: {
type: [Boolean, Object],
default: false
},
align: {
type: String,
default: ""
}
},
setup(props, { emit, slots }) {
const ns = useNamespace("space");
const uStyle = useStyle();
const spacerVNode = () => {
const isVNodeElem = isVNode(props.spacer);
return isVNodeElem ? props.spacer : createVNode("span", { class: ns.e("spacer") });
};
return () => {
const children = renderSlot(
slots,
"default",
{ key: 0 },
() => []
).children;
if (children.length === 0) {
return null;
}
if (Array.isArray(children)) {
const getChildrenItem = [];
children.forEach((item, index) => {
const renderVNode = createVNode(
SpaceItem,
{ class: "" },
{ default: () => item }
);
getChildrenItem.push(renderVNode);
props.spacer && index + 1 !== children.length && getChildrenItem.push(spacerVNode());
});
return createVNode(
"div",
{
class: [
ns.b(),
ns.m("direction", props.direction),
ns.is("wrap", props.wrap)
],
style: [uStyle.gap(props.size), uStyle.alignItem(props.align)]
},
getChildrenItem
);
}
return children;
};
}
});
export { Space as default };
//# sourceMappingURL=space.mjs.map