feat(ui): enable columns layout

This commit is contained in:
upsiflu 2024-12-17 23:11:56 +01:00
parent 1b5cfc7215
commit c2dcd6cdba
2 changed files with 39 additions and 2 deletions

View File

@ -3,7 +3,7 @@ import { useCssModule } from 'vue'
const props = defineProps<
{ columnWidth?: number, noGap?:true }
& { [P in "stack" | "grid" | "flex"]?: true }
& { [P in "stack" | "grid" | "flex" | "columns"]?: true }
& { [C in "nav" | "aside" | "header" | "footer" | "main"]?:true }>()
const classes = useCssModule()
const columnWidth = props.columnWidth ?? 320
@ -17,7 +17,8 @@ const columnWidth = props.columnWidth ?? 320
noGap || classes.gap,
props.grid ? classes.grid
: props.flex ? classes.flex
: classes.stack
: props.columns? classes.columns
: classes.stack
]">
<slot />
</component>
@ -39,6 +40,12 @@ const columnWidth = props.columnWidth ?? 320
flex-grow:0;
}
}
&.columns{
column-count: auto;
column-width: calc(v-bind(columnWidth) * 1px);
display: block;
column-rule: 1px solid var(--border-color);
}
&.grid {
display: grid;
grid-template-columns:

View File

@ -150,6 +150,36 @@ Add space between vertically stacked items
</Tab>
<Tab title="Columns" icon="𝌆">
Let items flow like words on a printed newspaper, Great for very long lists of buttons or links.
<Layout flex>
```vue-html
<Layout columns>
<Card title="A"></Card>
<Card title="B"></Card>
<Card title="C"></Card>
<Card title="D"></Card>
<Card title="E"></Card>
</Layout>
```
<div class="preview">
<Layout columns>
<Card title="A"></Card>
<Card title="B"></Card>
<Card title="C"></Card>
<Card title="D"></Card>
<Card title="E"></Card>
</Layout>
</div>
</Layout>
</Tab>
</Tabs>
## Common props