mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import { PropType } from 'vue';
|
|
import { createNamespace, addUnit } from '../utils';
|
|
import { BORDER_TOP } from '../utils/constant';
|
|
import { useChildren } from '@vant/use';
|
|
|
|
const [createComponent, bem] = createNamespace('grid');
|
|
|
|
export const GRID_KEY = 'vanGrid';
|
|
|
|
export type GridDirection = 'horizontal' | 'vertical';
|
|
|
|
export type GridProvide = {
|
|
props: {
|
|
center: boolean;
|
|
border: boolean;
|
|
square?: boolean;
|
|
gutter?: number | string;
|
|
iconSize?: number | string;
|
|
columnNum: number | string;
|
|
direction?: GridDirection;
|
|
clickable?: boolean;
|
|
};
|
|
};
|
|
|
|
export default createComponent({
|
|
props: {
|
|
square: Boolean,
|
|
gutter: [Number, String],
|
|
iconSize: [Number, String],
|
|
direction: String as PropType<GridDirection>,
|
|
clickable: Boolean,
|
|
columnNum: {
|
|
type: [Number, String],
|
|
default: 4,
|
|
},
|
|
center: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
border: {
|
|
type: Boolean,
|
|
default: true,
|
|
},
|
|
},
|
|
|
|
setup(props, { slots }) {
|
|
const { linkChildren } = useChildren(GRID_KEY);
|
|
|
|
linkChildren({ props });
|
|
|
|
return () => (
|
|
<div
|
|
style={{ paddingLeft: addUnit(props.gutter) }}
|
|
class={[bem(), { [BORDER_TOP]: props.border && !props.gutter }]}
|
|
>
|
|
{slots.default?.()}
|
|
</div>
|
|
);
|
|
},
|
|
});
|