refactor(Space): less to cssinjs & add compact mode (#6229)
* refactor(Space): less to cssinjs & add compact mode * chore(space): update md * chore(space): add demo * chore(space): add some demo * feat(button): add compact mode * fix: reactivity lose * docs: fix props version --------- Co-authored-by: tangjinzhou <415800467@qq.com>pull/6246/head^2
parent
e2d4f8c2e3
commit
f0649999fb
|
@ -19,6 +19,7 @@ import useStyle from './style';
|
||||||
import type { ButtonType } from './buttonTypes';
|
import type { ButtonType } from './buttonTypes';
|
||||||
import type { VNode, Ref } from 'vue';
|
import type { VNode, Ref } from 'vue';
|
||||||
import { GroupSizeContext } from './button-group';
|
import { GroupSizeContext } from './button-group';
|
||||||
|
import { useCompactItemContext } from '../space/Compact';
|
||||||
|
|
||||||
type Loading = boolean | number;
|
type Loading = boolean | number;
|
||||||
|
|
||||||
|
@ -49,6 +50,7 @@ export default defineComponent({
|
||||||
const hasTwoCNChar = ref(false);
|
const hasTwoCNChar = ref(false);
|
||||||
|
|
||||||
const autoInsertSpace = computed(() => autoInsertSpaceInButton.value !== false);
|
const autoInsertSpace = computed(() => autoInsertSpaceInButton.value !== false);
|
||||||
|
const { compactSize, compactItemClassnames } = useCompactItemContext(prefixCls, direction);
|
||||||
|
|
||||||
// =============== Update Loading ===============
|
// =============== Update Loading ===============
|
||||||
const loadingOrDelay = computed(() =>
|
const loadingOrDelay = computed(() =>
|
||||||
|
@ -79,22 +81,25 @@ export default defineComponent({
|
||||||
const pre = prefixCls.value;
|
const pre = prefixCls.value;
|
||||||
|
|
||||||
const sizeClassNameMap = { large: 'lg', small: 'sm', middle: undefined };
|
const sizeClassNameMap = { large: 'lg', small: 'sm', middle: undefined };
|
||||||
const sizeFullname = groupSize?.value || size.value;
|
const sizeFullname = compactSize.value || groupSize?.value || size.value;
|
||||||
const sizeCls = sizeFullname ? sizeClassNameMap[sizeFullname] || '' : '';
|
const sizeCls = sizeFullname ? sizeClassNameMap[sizeFullname] || '' : '';
|
||||||
|
|
||||||
return {
|
return [
|
||||||
[hashId.value]: true,
|
compactItemClassnames.value,
|
||||||
[`${pre}`]: true,
|
{
|
||||||
[`${pre}-${shape}`]: shape !== 'default' && shape,
|
[hashId.value]: true,
|
||||||
[`${pre}-${type}`]: type,
|
[`${pre}`]: true,
|
||||||
[`${pre}-${sizeCls}`]: sizeCls,
|
[`${pre}-${shape}`]: shape !== 'default' && shape,
|
||||||
[`${pre}-loading`]: innerLoading.value,
|
[`${pre}-${type}`]: type,
|
||||||
[`${pre}-background-ghost`]: ghost && !isUnBorderedButtonType(type),
|
[`${pre}-${sizeCls}`]: sizeCls,
|
||||||
[`${pre}-two-chinese-chars`]: hasTwoCNChar.value && autoInsertSpace.value,
|
[`${pre}-loading`]: innerLoading.value,
|
||||||
[`${pre}-block`]: block,
|
[`${pre}-background-ghost`]: ghost && !isUnBorderedButtonType(type),
|
||||||
[`${pre}-dangerous`]: !!danger,
|
[`${pre}-two-chinese-chars`]: hasTwoCNChar.value && autoInsertSpace.value,
|
||||||
[`${pre}-rtl`]: direction.value === 'rtl',
|
[`${pre}-block`]: block,
|
||||||
};
|
[`${pre}-dangerous`]: !!danger,
|
||||||
|
[`${pre}-rtl`]: direction.value === 'rtl',
|
||||||
|
},
|
||||||
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
const fixTwoCNChar = () => {
|
const fixTwoCNChar = () => {
|
||||||
|
@ -209,7 +214,11 @@ export default defineComponent({
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isUnBorderedButtonType(type)) {
|
if (!isUnBorderedButtonType(type)) {
|
||||||
buttonNode = <Wave ref="wave" disabled={!!innerLoading.value}>{buttonNode}</Wave>;
|
buttonNode = (
|
||||||
|
<Wave ref="wave" disabled={!!innerLoading.value}>
|
||||||
|
{buttonNode}
|
||||||
|
</Wave>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return wrapSSR(buttonNode);
|
return wrapSSR(buttonNode);
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
import classNames from '../_util/classNames';
|
||||||
|
import type { DirectionType, SizeType } from '../config-provider';
|
||||||
|
import createContext from '../_util/createContext';
|
||||||
|
import useConfigInject from '../config-provider/hooks/useConfigInject';
|
||||||
|
|
||||||
|
import useStyle from './style';
|
||||||
|
import { computed, defineComponent } from 'vue';
|
||||||
|
import type { PropType, ExtractPropTypes, Ref } from 'vue';
|
||||||
|
import PropTypes from '../_util/vue-types';
|
||||||
|
import { booleanType, tuple } from '../_util/type';
|
||||||
|
import { isEmpty } from 'lodash-es';
|
||||||
|
|
||||||
|
export const spaceCompactItemProps = () => ({
|
||||||
|
compactSize: String as PropType<SizeType>,
|
||||||
|
compactDirection: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
|
||||||
|
isFirstItem: booleanType(),
|
||||||
|
isLastItem: booleanType(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export type SpaceCompactItemContextType = Partial<
|
||||||
|
ExtractPropTypes<ReturnType<typeof spaceCompactItemProps>>
|
||||||
|
>;
|
||||||
|
|
||||||
|
export const SpaceCompactItemContext = createContext<SpaceCompactItemContextType | null>(null);
|
||||||
|
|
||||||
|
export const useCompactItemContext = (prefixCls: Ref<string>, direction: Ref<DirectionType>) => {
|
||||||
|
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?.compactSize),
|
||||||
|
compactDirection: computed(() => compactItemContext?.compactDirection),
|
||||||
|
compactItemClassnames,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
export const NoCompactStyle = defineComponent({
|
||||||
|
name: 'NoCompactStyle',
|
||||||
|
setup(_, { slots }) {
|
||||||
|
SpaceCompactItemContext.useProvide(null);
|
||||||
|
return () => {
|
||||||
|
return slots.default?.();
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export const spaceCompactProps = () => ({
|
||||||
|
prefixCls: String,
|
||||||
|
size: {
|
||||||
|
type: [String, Number, Array] as PropType<SizeType>,
|
||||||
|
},
|
||||||
|
direction: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
|
||||||
|
align: PropTypes.oneOf(tuple('start', 'end', 'center', 'baseline')),
|
||||||
|
block: { type: Boolean, default: undefined },
|
||||||
|
});
|
||||||
|
|
||||||
|
export type SpaceCompactProps = Partial<ExtractPropTypes<ReturnType<typeof spaceCompactProps>>>;
|
||||||
|
|
||||||
|
const CompactItem = defineComponent({
|
||||||
|
name: 'CompactItem',
|
||||||
|
props: spaceCompactItemProps(),
|
||||||
|
setup(props, { slots }) {
|
||||||
|
SpaceCompactItemContext.useProvide(props);
|
||||||
|
|
||||||
|
return () => slots.default?.();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const Compact = defineComponent({
|
||||||
|
name: 'ASpaceCompact',
|
||||||
|
inheritAttrs: false,
|
||||||
|
props: spaceCompactProps(),
|
||||||
|
setup(props, { attrs, slots }) {
|
||||||
|
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 () => {
|
||||||
|
// =========================== Render ===========================
|
||||||
|
if (slots.default?.()?.length === 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const childNodes = slots.default?.() || [];
|
||||||
|
|
||||||
|
return wrapSSR(
|
||||||
|
<div class={clx.value} {...attrs}>
|
||||||
|
{childNodes.map((child, i) => {
|
||||||
|
const key = (child && child.key) || `${prefixCls.value}-item-${i}`;
|
||||||
|
const noCompactItemContext = !compactItemContext || isEmpty(compactItemContext);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<CompactItem
|
||||||
|
key={key}
|
||||||
|
compactSize={props.size}
|
||||||
|
compactDirection={props.direction}
|
||||||
|
isFirstItem={i === 0 && (noCompactItemContext || compactItemContext?.isFirstItem)}
|
||||||
|
isLastItem={
|
||||||
|
i === childNodes.length - 1 &&
|
||||||
|
(noCompactItemContext || compactItemContext?.isLastItem)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{child}
|
||||||
|
</CompactItem>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default Compact;
|
|
@ -0,0 +1,43 @@
|
||||||
|
<docs>
|
||||||
|
---
|
||||||
|
order: 8
|
||||||
|
title:
|
||||||
|
zh-CN: 垂直方向紧凑布局
|
||||||
|
en-US: Vertical Compact Mode
|
||||||
|
---
|
||||||
|
|
||||||
|
## zh-CN
|
||||||
|
|
||||||
|
垂直方向的紧凑布局,目前仅支持 Button 组合。
|
||||||
|
|
||||||
|
## en-US
|
||||||
|
|
||||||
|
Vertical Mode for Space.Compact, support Button only.
|
||||||
|
|
||||||
|
</docs>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<a-space>
|
||||||
|
<a-space-compact direction="vertical">
|
||||||
|
<a-button>Button 1</a-button>
|
||||||
|
<a-button>Button 2</a-button>
|
||||||
|
<a-button>Button 3</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<a-space-compact direction="vertical">
|
||||||
|
<a-button type="dashed">Button 1</a-button>
|
||||||
|
<a-button type="dashed">Button 2</a-button>
|
||||||
|
<a-button type="dashed">Button 3</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<a-space-compact direction="vertical">
|
||||||
|
<a-button type="primary">Button 1</a-button>
|
||||||
|
<a-button type="primary">Button 2</a-button>
|
||||||
|
<a-button type="primary">Button 3</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({});
|
||||||
|
</script>
|
|
@ -0,0 +1,151 @@
|
||||||
|
<docs>
|
||||||
|
---
|
||||||
|
order: 7
|
||||||
|
title:
|
||||||
|
zh-CN: Button 紧凑布局
|
||||||
|
en-US: Button Compact Mode
|
||||||
|
---
|
||||||
|
|
||||||
|
## zh-CN
|
||||||
|
|
||||||
|
Button 组件紧凑排列的示例。
|
||||||
|
|
||||||
|
## en-US
|
||||||
|
|
||||||
|
Button component compact example.
|
||||||
|
|
||||||
|
</docs>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-tooltip title="Like">
|
||||||
|
<a-button>
|
||||||
|
<LikeOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Comment">
|
||||||
|
<a-button>
|
||||||
|
<CommentOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Star">
|
||||||
|
<a-button>
|
||||||
|
<StarOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Heart">
|
||||||
|
<a-button>
|
||||||
|
<HeartOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Share">
|
||||||
|
<a-button>
|
||||||
|
<ShareAltOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Download">
|
||||||
|
<a-button>
|
||||||
|
<DownloadOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-dropdown placement="bottomRight" :trigger="['click']">
|
||||||
|
<a-button>
|
||||||
|
<EllipsisOutlined />
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<template #overlay>
|
||||||
|
<a-menu>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">1st menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">2nd menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">3rd menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
</a-menu>
|
||||||
|
</template>
|
||||||
|
</a-dropdown>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-button type="primary">Button 1</a-button>
|
||||||
|
<a-button type="primary">Button 2</a-button>
|
||||||
|
<a-button type="primary">Button 3</a-button>
|
||||||
|
<a-button type="primary">Button 4</a-button>
|
||||||
|
<a-tooltip title="Tooltip">
|
||||||
|
<a-button type="primary" disabled>
|
||||||
|
<DownloadOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Tooltip">
|
||||||
|
<a-button type="primary" disabled>
|
||||||
|
<DownloadOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-button>Button 1</a-button>
|
||||||
|
<a-button>Button 2</a-button>
|
||||||
|
<a-button>Button 3</a-button>
|
||||||
|
<a-tooltip title="Tooltip">
|
||||||
|
<a-button disabled>
|
||||||
|
<DownloadOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-tooltip title="Tooltip">
|
||||||
|
<a-button>
|
||||||
|
<DownloadOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
<a-button type="primary">Button 4</a-button>
|
||||||
|
<a-dropdown placement="bottomRight" :trigger="['click']">
|
||||||
|
<a-button type="primary">
|
||||||
|
<EllipsisOutlined />
|
||||||
|
</a-button>
|
||||||
|
|
||||||
|
<template #overlay>
|
||||||
|
<a-menu>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">1st menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">2nd menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
<a-menu-item>
|
||||||
|
<a href="javascript:;">3rd menu item</a>
|
||||||
|
</a-menu-item>
|
||||||
|
</a-menu>
|
||||||
|
</template>
|
||||||
|
</a-dropdown>
|
||||||
|
</a-space-compact>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {
|
||||||
|
DownloadOutlined,
|
||||||
|
EllipsisOutlined,
|
||||||
|
HeartOutlined,
|
||||||
|
LikeOutlined,
|
||||||
|
CommentOutlined,
|
||||||
|
StarOutlined,
|
||||||
|
ShareAltOutlined,
|
||||||
|
} from '@ant-design/icons-vue';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
DownloadOutlined,
|
||||||
|
EllipsisOutlined,
|
||||||
|
HeartOutlined,
|
||||||
|
LikeOutlined,
|
||||||
|
CommentOutlined,
|
||||||
|
StarOutlined,
|
||||||
|
ShareAltOutlined,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,227 @@
|
||||||
|
<docs>
|
||||||
|
---
|
||||||
|
order: 6
|
||||||
|
title:
|
||||||
|
zh-CN: 紧凑布局组合
|
||||||
|
en-US: Compact Mode for form component
|
||||||
|
---
|
||||||
|
|
||||||
|
## zh-CN
|
||||||
|
|
||||||
|
使用 Space.Compact 让表单组件之间紧凑连接且合并边框。
|
||||||
|
|
||||||
|
## en-US
|
||||||
|
|
||||||
|
Compact Mode for form component.
|
||||||
|
|
||||||
|
</docs>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div className="site-space-compact-wrapper">
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input :style="{ width: '20%' }" default-value="0571" />
|
||||||
|
<a-input :style="{ width: '30%' }" default-value="26888888" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block size="small">
|
||||||
|
<a-input :style="{ width: 'calc(100% - 200px)' }" default-value="https://ant.design" />
|
||||||
|
<a-button type="primary">Submit</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input :style="{ width: 'calc(100% - 200px)' }" default-value="https://ant.design" />
|
||||||
|
<a-button type="primary">Submit</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input
|
||||||
|
:style="{ width: 'calc(100% - 200px)' }"
|
||||||
|
default-value="git@github.com:ant-design/ant-design.git"
|
||||||
|
/>
|
||||||
|
<a-tooltip title="copy git url">
|
||||||
|
<a-button>
|
||||||
|
<CopyOutlined />
|
||||||
|
</a-button>
|
||||||
|
</a-tooltip>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select default-value="Zhejiang" allow-clear>
|
||||||
|
<a-select-option value="Zhejiang">Zhejiang</a-select-option>
|
||||||
|
<a-select-option value="Jiangsu">Jiangsu</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input :style="{ width: '50%' }" default-value="Xihu District, Hangzhou" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select allow-clear mode="multiple" default-value="Zhejianggggg" :style="{ width: '50%' }">
|
||||||
|
<a-select-option value="Zhejianggggg">Zhejianggggg</a-select-option>
|
||||||
|
<a-select-option value="Jiangsu">Jiangsu</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input :style="{ width: '50%' }" default-value="Xihu District, Hangzhou" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input-search :style="{ width: '30%' }" default-value="0571" />
|
||||||
|
<a-input-search allow-clear :style="{ width: '50%' }" default-value="26888888" />
|
||||||
|
<a-input-search :style="{ width: '20%' }" default-value="+1" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select default-value="Option1">
|
||||||
|
<a-select-option value="Option1">Option1</a-select-option>
|
||||||
|
<a-select-option value="Option2">Option2</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input :style="{ width: '50%' }" default-value="input content" />
|
||||||
|
<a-input-number :default-value="12" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input :style="{ width: '50%' }" default-value="input content" />
|
||||||
|
<a-date-picker :style="{ width: '50%' }" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-range-picker :style="{ width: '70%' }" />
|
||||||
|
<a-input :style="{ width: '30%' }" default-value="input content" />
|
||||||
|
<a-button type="primary">查询</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-input :style="{ width: '30%' }" default-value="input content" />
|
||||||
|
<a-range-picker :style="{ width: '70%' }" />
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select default-value="Option1-1">
|
||||||
|
<a-select-option value="Option1-1">Option1-1</a-select-option>
|
||||||
|
<a-select-option value="Option1-2">Option1-2</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-select default-value="Option2-2">
|
||||||
|
<a-select-option value="Option2-1">Option2-1</a-select-option>
|
||||||
|
<a-select-option value="Option2-2">Option2-2</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select default-value="1">
|
||||||
|
<a-select-option value="1">Between</a-select-option>
|
||||||
|
<a-select-option value="2">Except</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-input :style="{ width: 100, textAlig: 'center' }" placeholder="Minimum" />
|
||||||
|
<a-input
|
||||||
|
class="site-input-split"
|
||||||
|
:style="{
|
||||||
|
width: 30,
|
||||||
|
borderLef: 0,
|
||||||
|
borderRight: 0,
|
||||||
|
pointerEvents: 'none',
|
||||||
|
}"
|
||||||
|
placeholder="~"
|
||||||
|
disabled
|
||||||
|
/>
|
||||||
|
<a-input
|
||||||
|
class="site-input-right"
|
||||||
|
:style="{
|
||||||
|
width: 100,
|
||||||
|
textAlig: 'center',
|
||||||
|
}"
|
||||||
|
placeholder="Maximum"
|
||||||
|
/>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-select default-value="Sign Up" :style="{ width: '30%' }">
|
||||||
|
<a-select-option value="Sign Up">Sign Up</a-select-option>
|
||||||
|
<a-select-option value="Sign In">Sign In</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
<a-auto-complete
|
||||||
|
:style="{ width: '70%' }"
|
||||||
|
placeholder="Email"
|
||||||
|
:options="[{ value: 'text 1' }, { value: 'text 2' }]"
|
||||||
|
/>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-time-picker :style="{ width: '70%' }" />
|
||||||
|
<a-cascader
|
||||||
|
:style="{ width: '70%' }"
|
||||||
|
:options="[
|
||||||
|
{
|
||||||
|
value: 'zhejiang',
|
||||||
|
label: 'Zhejiang',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
value: 'hangzhou',
|
||||||
|
label: 'Hangzhou',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
value: 'xihu',
|
||||||
|
label: 'West Lake',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 'jiangsu',
|
||||||
|
label: 'Jiangsu',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
value: 'nanjing',
|
||||||
|
label: 'Nanjing',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
value: 'zhonghuamen',
|
||||||
|
label: 'Zhong Hua Men',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
placeholder="Select Address"
|
||||||
|
/>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
<a-space-compact block>
|
||||||
|
<a-time-range-picker />
|
||||||
|
<a-tree-select
|
||||||
|
show-search
|
||||||
|
:style="{ width: '60%' }"
|
||||||
|
value="leaf1"
|
||||||
|
:dropdown-style="{ maxHeight: 400, overflow: 'auto' }"
|
||||||
|
placeholder="Please select"
|
||||||
|
allow-clear
|
||||||
|
tree-default-expand-all
|
||||||
|
>
|
||||||
|
<a-tree-select-node value="parent 1" title="parent 1">
|
||||||
|
<a-tree-select-node value="parent 1-0" title="parent 1-0">
|
||||||
|
<a-tree-select-node value="leaf1" title="leaf1" />
|
||||||
|
<a-tree-select-node value="leaf2" title="leaf2" />
|
||||||
|
</a-tree-select-node>
|
||||||
|
<a-tree-select-node value="parent 1-1" title="parent 1-1">
|
||||||
|
<a-tree-select-node value="leaf3">
|
||||||
|
<template #title>
|
||||||
|
<b :style="{ color: '#08c' }">leaf3</b>
|
||||||
|
</template>
|
||||||
|
</a-tree-select-node>
|
||||||
|
</a-tree-select-node>
|
||||||
|
</a-tree-select-node>
|
||||||
|
</a-tree-select>
|
||||||
|
<a-button type="primary">Submit</a-button>
|
||||||
|
</a-space-compact>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { CopyOutlined } from '@ant-design/icons-vue';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: {
|
||||||
|
CopyOutlined,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -4,6 +4,11 @@
|
||||||
<Customize />
|
<Customize />
|
||||||
<Vertical />
|
<Vertical />
|
||||||
<Align />
|
<Align />
|
||||||
|
<Wrap />
|
||||||
|
<Split />
|
||||||
|
<Compact />
|
||||||
|
<CompactButtons />
|
||||||
|
<CompactButtonVertical />
|
||||||
</demo-sort>
|
</demo-sort>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
@ -11,6 +16,11 @@ import Base from './base.vue';
|
||||||
import Customize from './customize.vue';
|
import Customize from './customize.vue';
|
||||||
import Vertical from './vertical.vue';
|
import Vertical from './vertical.vue';
|
||||||
import Align from './align.vue';
|
import Align from './align.vue';
|
||||||
|
import Wrap from './wrap.vue';
|
||||||
|
import Split from './split.vue';
|
||||||
|
import Compact from './compact.vue';
|
||||||
|
import CompactButtons from './compact-buttons.vue';
|
||||||
|
import CompactButtonVertical from './compact-button-vertical.vue';
|
||||||
import CN from '../index.zh-CN.md';
|
import CN from '../index.zh-CN.md';
|
||||||
import US from '../index.en-US.md';
|
import US from '../index.en-US.md';
|
||||||
import { defineComponent } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
|
@ -23,6 +33,11 @@ export default defineComponent({
|
||||||
Customize,
|
Customize,
|
||||||
Vertical,
|
Vertical,
|
||||||
Align,
|
Align,
|
||||||
|
Wrap,
|
||||||
|
Split,
|
||||||
|
Compact,
|
||||||
|
CompactButtons,
|
||||||
|
CompactButtonVertical,
|
||||||
},
|
},
|
||||||
setup() {
|
setup() {
|
||||||
return {};
|
return {};
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<docs>
|
||||||
|
---
|
||||||
|
order: 0
|
||||||
|
title:
|
||||||
|
zh-CN: 分隔符
|
||||||
|
en-US: Split
|
||||||
|
---
|
||||||
|
|
||||||
|
## zh-CN
|
||||||
|
|
||||||
|
相邻组件分隔符。
|
||||||
|
|
||||||
|
## en-US
|
||||||
|
|
||||||
|
Crowded components split.
|
||||||
|
|
||||||
|
</docs>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<a-space>
|
||||||
|
<template #split>
|
||||||
|
<a-divider type="vertical" />
|
||||||
|
</template>
|
||||||
|
<a-typography-link>Link</a-typography-link>
|
||||||
|
<a-typography-link>Link</a-typography-link>
|
||||||
|
<a-typography-link>Link</a-typography-link>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({});
|
||||||
|
</script>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<docs>
|
||||||
|
---
|
||||||
|
order: 0
|
||||||
|
title:
|
||||||
|
zh-CN: 自动换行
|
||||||
|
en-US: Basic Usage
|
||||||
|
---
|
||||||
|
|
||||||
|
## zh-CN
|
||||||
|
|
||||||
|
自动换行。
|
||||||
|
|
||||||
|
## en-US
|
||||||
|
|
||||||
|
Wrap
|
||||||
|
|
||||||
|
</docs>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<a-space :size="[8, 16]" wrap>
|
||||||
|
<template v-for="index in 20" :key="index">
|
||||||
|
<a-button>Button</a-button>
|
||||||
|
</template>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
|
export default defineComponent({});
|
||||||
|
</script>
|
|
@ -10,12 +10,36 @@ Set components spacing.
|
||||||
|
|
||||||
## When To Use
|
## When To Use
|
||||||
|
|
||||||
Avoid components clinging together and set a unified space.
|
- Avoid components clinging together and set a unified space.
|
||||||
|
- Use Space.Compact when child form components are compactly connected and the border is collapsed (After version `ant-design-vue@4.0.0` Supported).
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
|
### Space
|
||||||
|
|
||||||
| Property | Description | Type | Default | Version |
|
| Property | Description | Type | Default | Version |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| align | Align items | `start` \| `end` \|`center` \|`baseline` | - | 1.6.5 |
|
| align | Align items | `start` \| `end` \|`center` \|`baseline` | - | 1.6.5 |
|
||||||
| direction | The space direction | `vertical` \| `horizontal` | `horizontal` | 1.6.5 |
|
| direction | The space direction | `vertical` \| `horizontal` | `horizontal` | 1.6.5 |
|
||||||
| size | The space size | `small` \| `middle` \| `large` \| `number` | `small` | 1.6.5 |
|
| size | The space size | `small` \| `middle` \| `large` \| `number` | `small` | 1.6.5 |
|
||||||
|
| split | Set split | VueNode \| v-slot | - | 2.2.0 |
|
||||||
|
| wrap | Auto wrap line, when `horizontal` effective | boolean | false | 2.2.0 |
|
||||||
|
|
||||||
|
### Space.Compact
|
||||||
|
|
||||||
|
Use Space.Compact when child form components are compactly connected and the border is collapsed. The supported components are:
|
||||||
|
|
||||||
|
- Button
|
||||||
|
- AutoComplete
|
||||||
|
- Cascader
|
||||||
|
- DatePicker
|
||||||
|
- Input/Input.Search
|
||||||
|
- Select
|
||||||
|
- TimePicker
|
||||||
|
- TreeSelect
|
||||||
|
|
||||||
|
| Property | Description | Type | Default | Version |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| block | Option to fit width to its parent\'s width | boolean | false | 4.0.0 |
|
||||||
|
| direction | Set direction of layout | `vertical` \| `horizontal` | `horizontal` | 4.0.0 |
|
||||||
|
| size | Set child component size | `large` \| `middle` \| `small` | `middle` | 4.0.0 |
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
import type { PropType, ExtractPropTypes, CSSProperties } from 'vue';
|
import type { PropType, ExtractPropTypes, CSSProperties, Plugin, App } from 'vue';
|
||||||
import { defineComponent, computed, ref, watch } from 'vue';
|
import { defineComponent, computed, ref, watch } from 'vue';
|
||||||
import PropTypes from '../_util/vue-types';
|
import PropTypes from '../_util/vue-types';
|
||||||
import { filterEmpty } from '../_util/props-util';
|
import { filterEmpty } from '../_util/props-util';
|
||||||
import type { SizeType } from '../config-provider';
|
import type { SizeType } from '../config-provider';
|
||||||
import { tuple, withInstall } from '../_util/type';
|
import { booleanType, tuple } from '../_util/type';
|
||||||
import useConfigInject from '../config-provider/hooks/useConfigInject';
|
import useConfigInject from '../config-provider/hooks/useConfigInject';
|
||||||
import useFlexGapSupport from '../_util/hooks/useFlexGapSupport';
|
import useFlexGapSupport from '../_util/hooks/useFlexGapSupport';
|
||||||
import classNames from '../_util/classNames';
|
import classNames from '../_util/classNames';
|
||||||
|
import Compact from './Compact';
|
||||||
|
|
||||||
|
import useStyle from './style';
|
||||||
|
|
||||||
export type SpaceSize = SizeType | number;
|
export type SpaceSize = SizeType | number;
|
||||||
const spaceSize = {
|
const spaceSize = {
|
||||||
|
@ -21,7 +24,7 @@ export const spaceProps = () => ({
|
||||||
},
|
},
|
||||||
direction: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
|
direction: PropTypes.oneOf(tuple('horizontal', 'vertical')).def('horizontal'),
|
||||||
align: PropTypes.oneOf(tuple('start', 'end', 'center', 'baseline')),
|
align: PropTypes.oneOf(tuple('start', 'end', 'center', 'baseline')),
|
||||||
wrap: { type: Boolean, default: undefined },
|
wrap: booleanType(),
|
||||||
});
|
});
|
||||||
|
|
||||||
export type SpaceProps = Partial<ExtractPropTypes<ReturnType<typeof spaceProps>>>;
|
export type SpaceProps = Partial<ExtractPropTypes<ReturnType<typeof spaceProps>>>;
|
||||||
|
@ -33,10 +36,12 @@ function getNumberSize(size: SpaceSize) {
|
||||||
const Space = defineComponent({
|
const Space = defineComponent({
|
||||||
compatConfig: { MODE: 3 },
|
compatConfig: { MODE: 3 },
|
||||||
name: 'ASpace',
|
name: 'ASpace',
|
||||||
|
inheritAttrs: false,
|
||||||
props: spaceProps(),
|
props: spaceProps(),
|
||||||
slots: ['split'],
|
slots: ['split'],
|
||||||
setup(props, { slots }) {
|
setup(props, { slots, attrs }) {
|
||||||
const { prefixCls, space, direction: directionConfig } = useConfigInject('space', props);
|
const { prefixCls, space, direction: directionConfig } = useConfigInject('space', props);
|
||||||
|
const [wrapSSR, hashId] = useStyle(prefixCls);
|
||||||
const supportFlexGap = useFlexGapSupport();
|
const supportFlexGap = useFlexGapSupport();
|
||||||
const size = computed(() => props.size ?? space?.value?.size ?? 'small');
|
const size = computed(() => props.size ?? space?.value?.size ?? 'small');
|
||||||
const horizontalSize = ref<number>();
|
const horizontalSize = ref<number>();
|
||||||
|
@ -58,7 +63,7 @@ const Space = defineComponent({
|
||||||
props.align === undefined && props.direction === 'horizontal' ? 'center' : props.align,
|
props.align === undefined && props.direction === 'horizontal' ? 'center' : props.align,
|
||||||
);
|
);
|
||||||
const cn = computed(() => {
|
const cn = computed(() => {
|
||||||
return classNames(prefixCls.value, `${prefixCls.value}-${props.direction}`, {
|
return classNames(prefixCls.value, hashId.value, `${prefixCls.value}-${props.direction}`, {
|
||||||
[`${prefixCls.value}-rtl`]: directionConfig.value === 'rtl',
|
[`${prefixCls.value}-rtl`]: directionConfig.value === 'rtl',
|
||||||
[`${prefixCls.value}-align-${mergedAlign.value}`]: mergedAlign.value,
|
[`${prefixCls.value}-align-${mergedAlign.value}`]: mergedAlign.value,
|
||||||
});
|
});
|
||||||
|
@ -92,7 +97,7 @@ const Space = defineComponent({
|
||||||
const horizontalSizeVal = horizontalSize.value;
|
const horizontalSizeVal = horizontalSize.value;
|
||||||
const latestIndex = len - 1;
|
const latestIndex = len - 1;
|
||||||
return (
|
return (
|
||||||
<div class={cn.value} style={style.value}>
|
<div {...attrs} class={cn.value} style={style.value}>
|
||||||
{items.map((child, index) => {
|
{items.map((child, index) => {
|
||||||
let itemStyle: CSSProperties = {};
|
let itemStyle: CSSProperties = {};
|
||||||
if (!supportFlexGap.value) {
|
if (!supportFlexGap.value) {
|
||||||
|
@ -110,7 +115,7 @@ const Space = defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return wrapSSR(
|
||||||
<>
|
<>
|
||||||
<div class={itemClassName} style={itemStyle}>
|
<div class={itemClassName} style={itemStyle}>
|
||||||
{child}
|
{child}
|
||||||
|
@ -120,7 +125,7 @@ const Space = defineComponent({
|
||||||
{split}
|
{split}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</>
|
</>,
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
@ -129,4 +134,17 @@ const Space = defineComponent({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export default withInstall(Space);
|
Space.Compact = Compact;
|
||||||
|
|
||||||
|
Space.install = function (app: App) {
|
||||||
|
app.component(Space.name, Space);
|
||||||
|
app.component(Compact.name, Compact);
|
||||||
|
return app;
|
||||||
|
};
|
||||||
|
|
||||||
|
export { Compact };
|
||||||
|
|
||||||
|
export default Space as typeof Space &
|
||||||
|
Plugin & {
|
||||||
|
readonly Compact: typeof Compact;
|
||||||
|
};
|
||||||
|
|
|
@ -15,11 +15,37 @@ cover: https://gw.alipayobjects.com/zos/antfincdn/wc6%263gJ0Y8/Space.svg
|
||||||
|
|
||||||
- 适合行内元素的水平间距。
|
- 适合行内元素的水平间距。
|
||||||
- 可以设置各种水平对齐方式。
|
- 可以设置各种水平对齐方式。
|
||||||
|
- 需要表单组件之间紧凑连接且合并边框时,使用 Space.Compact(自 `ant-design-vue@4.0.0` 版本开始提供该组件)。
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|
### Space
|
||||||
| --------- | -------- | ------------------------------------------ | ------------ | ----- |
|
|
||||||
| align | 对齐方式 | `start` \| `end` \|`center` \|`baseline` | - | 1.6.5 |
|
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|
||||||
| direction | 间距方向 | `vertical` \| `horizontal` | `horizontal` | 1.6.5 |
|
| --- | --- | --- | --- | --- |
|
||||||
| size | 间距大小 | `small` \| `middle` \| `large` \| `number` | `small` | 1.6.5 |
|
| align | 对齐方式 | `start` \| `end` \|`center` \|`baseline` | - | 1.6.5 |
|
||||||
|
| direction | 间距方向 | `vertical` \| `horizontal` | `horizontal` | 1.6.5 |
|
||||||
|
| size | 间距大小 | `small` \| `middle` \| `large` \| `number` | `small` | 1.6.5 |
|
||||||
|
| split | 设置拆分 | VueNode \| v-slot | - | 2.2.0 |
|
||||||
|
| wrap | 是否自动换行,仅在 `horizontal` 时有效 | boolean | false | 2.2.0 |
|
||||||
|
|
||||||
|
### Space.Compact
|
||||||
|
|
||||||
|
> 自 ant-design-vue@4.0.0 版本开始提供该组件。
|
||||||
|
|
||||||
|
需要表单组件之间紧凑连接且合并边框时,使用 Space.Compact。支持的组件有:
|
||||||
|
|
||||||
|
- Button
|
||||||
|
- AutoComplete
|
||||||
|
- Cascader
|
||||||
|
- DatePicker
|
||||||
|
- Input/Input.Search
|
||||||
|
- Select
|
||||||
|
- TimePicker
|
||||||
|
- TreeSelect
|
||||||
|
|
||||||
|
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|
||||||
|
| --------- | ---------------------------- | ------------------------------ | ------------ | ----- |
|
||||||
|
| block | 将宽度调整为父元素宽度的选项 | boolean | false | 4.0.0 |
|
||||||
|
| direction | 指定排列方向 | `vertical` \| `horizontal` | `horizontal` | 4.0.0 |
|
||||||
|
| size | 子组件大小 | `large` \| `middle` \| `small` | `middle` | 4.0.0 |
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
import type { FullToken, GenerateStyle } from '../../theme/internal';
|
||||||
|
/** Component only token. Which will handle additional calculation of alias token */
|
||||||
|
export interface ComponentToken {
|
||||||
|
// Component token here
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpaceToken extends FullToken<'Space'> {
|
||||||
|
// Custom token here
|
||||||
|
}
|
||||||
|
|
||||||
|
const genSpaceCompactStyle: GenerateStyle<SpaceToken> = token => {
|
||||||
|
const { componentCls } = token;
|
||||||
|
|
||||||
|
return {
|
||||||
|
[componentCls]: {
|
||||||
|
display: 'inline-flex',
|
||||||
|
'&-block': {
|
||||||
|
display: 'flex',
|
||||||
|
width: '100%',
|
||||||
|
},
|
||||||
|
'&-vertical': {
|
||||||
|
flexDirection: 'column',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// ============================== Export ==============================
|
||||||
|
export default genSpaceCompactStyle;
|
|
@ -1,39 +0,0 @@
|
||||||
@import '../../style/themes/index';
|
|
||||||
@import '../../style/mixins/index';
|
|
||||||
|
|
||||||
@space-prefix-cls: ~'@{ant-prefix}-space';
|
|
||||||
@space-item-prefix-cls: ~'@{ant-prefix}-space-item';
|
|
||||||
|
|
||||||
.@{space-prefix-cls} {
|
|
||||||
display: inline-flex;
|
|
||||||
|
|
||||||
&-vertical {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-align {
|
|
||||||
&-center {
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-start {
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-end {
|
|
||||||
align-items: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-baseline {
|
|
||||||
align-items: baseline;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.@{space-item-prefix-cls} {
|
|
||||||
&:empty {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@import './rtl';
|
|
|
@ -1,2 +1,54 @@
|
||||||
import '../../style/index.less';
|
import type { FullToken, GenerateStyle } from '../../theme/internal';
|
||||||
import './index.less';
|
import { genComponentStyleHook } from '../../theme/internal';
|
||||||
|
import genSpaceCompactStyle from './compact';
|
||||||
|
|
||||||
|
/** Component only token. Which will handle additional calculation of alias token */
|
||||||
|
export interface ComponentToken {
|
||||||
|
// Component token here
|
||||||
|
}
|
||||||
|
|
||||||
|
interface SpaceToken extends FullToken<'Space'> {
|
||||||
|
// Custom token here
|
||||||
|
}
|
||||||
|
|
||||||
|
const genSpaceStyle: GenerateStyle<SpaceToken> = token => {
|
||||||
|
const { componentCls } = token;
|
||||||
|
|
||||||
|
return {
|
||||||
|
[componentCls]: {
|
||||||
|
display: 'inline-flex',
|
||||||
|
'&-rtl': {
|
||||||
|
direction: 'rtl',
|
||||||
|
},
|
||||||
|
'&-vertical': {
|
||||||
|
flexDirection: 'column',
|
||||||
|
},
|
||||||
|
'&-align': {
|
||||||
|
flexDirection: 'column',
|
||||||
|
'&-center': {
|
||||||
|
alignItems: 'center',
|
||||||
|
},
|
||||||
|
'&-start': {
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
},
|
||||||
|
'&-end': {
|
||||||
|
alignItems: 'flex-end',
|
||||||
|
},
|
||||||
|
'&-baseline': {
|
||||||
|
alignItems: 'baseline',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
[`${componentCls}-space-item`]: {
|
||||||
|
'&:empty': {
|
||||||
|
display: 'none',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// ============================== Export ==============================
|
||||||
|
export default genComponentStyleHook('Space', token => [
|
||||||
|
genSpaceStyle(token),
|
||||||
|
genSpaceCompactStyle(token),
|
||||||
|
]);
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
@import '../../style/themes/index';
|
|
||||||
@import '../../style/mixins/index';
|
|
||||||
|
|
||||||
@space-prefix-cls: ~'@{ant-prefix}-space';
|
|
||||||
|
|
||||||
.@{space-prefix-cls} {
|
|
||||||
&-rtl {
|
|
||||||
direction: rtl;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -58,7 +58,7 @@ import './result/style';
|
||||||
// import './descriptions/style';
|
// import './descriptions/style';
|
||||||
// import './page-header/style';
|
// import './page-header/style';
|
||||||
import './form/style';
|
import './form/style';
|
||||||
import './space/style';
|
// import './space/style';
|
||||||
import './image/style';
|
import './image/style';
|
||||||
import './typography/style';
|
import './typography/style';
|
||||||
// import './color-picker/style';
|
// import './color-picker/style';
|
||||||
|
|
|
@ -34,7 +34,7 @@ import type { ComponentToken as ProgressComponentToken } from '../../progress/st
|
||||||
// import type { ComponentToken as SelectComponentToken } from '../../select/style';
|
// import type { ComponentToken as SelectComponentToken } from '../../select/style';
|
||||||
import type { ComponentToken as SkeletonComponentToken } from '../../skeleton/style';
|
import type { ComponentToken as SkeletonComponentToken } from '../../skeleton/style';
|
||||||
// import type { ComponentToken as SliderComponentToken } from '../../slider/style';
|
// import type { ComponentToken as SliderComponentToken } from '../../slider/style';
|
||||||
// import type { ComponentToken as SpaceComponentToken } from '../../space/style';
|
import type { ComponentToken as SpaceComponentToken } from '../../space/style';
|
||||||
import type { ComponentToken as SpinComponentToken } from '../../spin/style';
|
import type { ComponentToken as SpinComponentToken } from '../../spin/style';
|
||||||
// import type { ComponentToken as StepsComponentToken } from '../../steps/style';
|
// import type { ComponentToken as StepsComponentToken } from '../../steps/style';
|
||||||
// import type { ComponentToken as TableComponentToken } from '../../table/style';
|
// import type { ComponentToken as TableComponentToken } from '../../table/style';
|
||||||
|
@ -111,7 +111,7 @@ export interface ComponentTokenMap {
|
||||||
Tooltip?: TooltipComponentToken;
|
Tooltip?: TooltipComponentToken;
|
||||||
// Table?: TableComponentToken;
|
// Table?: TableComponentToken;
|
||||||
// Space?: SpaceComponentToken;
|
// Space?: SpaceComponentToken;
|
||||||
Progress?: ProgressComponentToken;
|
// Progress?: ProgressComponentToken;
|
||||||
// Tour?: TourComponentToken;
|
// Tour?: TourComponentToken;
|
||||||
// QRCode?: QRCodeComponentToken;
|
// QRCode?: QRCodeComponentToken;
|
||||||
// App?: AppComponentToken;
|
// App?: AppComponentToken;
|
||||||
|
|
Loading…
Reference in New Issue