components/grid.vue (45 lines of code) (raw):
<script>
export default {
props: {
tag: {
type: String,
required: false,
default: 'div',
},
columns: {
type: [Number, String],
required: false,
default: 2,
},
gap: {
type: [Number, String],
required: false,
default: 5,
},
},
computed: {
classes() {
const columnClasses = {
2: 'md:gl-grid-cols-2',
3: 'md:gl-grid-cols-3',
4: 'md:gl-grid-cols-4',
};
const gapClasses = {
3: 'gl-gap-3',
5: 'gl-gap-5',
7: 'gl-gap-7',
};
return [columnClasses[this.columns], gapClasses[this.gap]];
},
},
};
</script>
<template>
<component
:is="tag"
class="gl-m-0 gl-mb-5 gl-grid gl-list-none gl-p-0 last:gl-mb-0"
:class="classes"
>
<slot></slot>
</component>
</template>