Skip to content

Commit d1986af

Browse files
Added sizes to TwButtonGroup.vue
1 parent b0421c9 commit d1986af

File tree

4 files changed

+44
-12
lines changed

4 files changed

+44
-12
lines changed

src/App.vue

+16-2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ const blurRollout = ref(true)
5353
const rangeValue = ref(0)
5454
const rangeStep = ref(1)
5555
const rangeShowLabels = ref(true)
56+
const buttonGroupSize = ref('sm')
5657

5758
let numOfPages = computed(() => {
5859
return Math.ceil(records.value.length / pageSize.value)
@@ -106,6 +107,14 @@ const notificationPositions = [
106107
{label: 'Bottom Right', value: 'bottom-right'},
107108
]
108109
110+
const buttonGroupSizes = [
111+
{label: 'Large', value: 'lg'},
112+
{label: 'Medium', value: 'md'},
113+
{label: 'Small', value: 'sm'},
114+
{label: 'Extra Small', value: 'xs'},
115+
116+
]
117+
109118
110119
const headings = [
111120
{
@@ -207,6 +216,7 @@ function handleChangeTheme() {
207216

208217
</section>
209218
<section class=" p-4">
219+
<h1 class="my-2 text-2xl">Tables</h1>
210220
<tw-collapse label="Table Operations" :color="accentColor">
211221
<template #label>
212222
<h3>
@@ -365,8 +375,12 @@ function handleChangeTheme() {
365375
Toggle button
366376
</tw-button>
367377
</div>
368-
<div>
369-
<tw-button-group :color="accentColor" :items="colors" v-model="accentColor"></tw-button-group>
378+
<div class="block">
379+
<div class="mb-4">
380+
<tw-button-group :color="accentColor" :items="colors" v-model="accentColor" :size="buttonGroupSize"></tw-button-group>
381+
</div>
382+
383+
<tw-button-group :color="accentColor" :items="buttonGroupSizes" v-model="buttonGroupSize" :size="buttonGroupSize" ></tw-button-group>
370384
</div>
371385

372386
</div>

src/components/buttonGroup/README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ This is a simple button group. the v-model equals the selected value in the item
77
```
88
## Properties
99

10-
| Property | Type | Required | default | notes |
11-
|:------------|:-------:|:--------:|:---------:|:-------------------------------------------------------------------------------|
12-
| v-model | Boolean | yes | false | The value of the selected item |
13-
| color | String | no | 'primary' | The color scheme of the button group |
14-
| items | Array | yes | [] | An array of name value objects `[{label:"A Label",value:"a343",icon:"circle"}]` |
10+
| Property | Type | Required | default | notes |
11+
|:---------|:-------:|:--------:|:---------:|:--------------------------------------------------------------------------------|
12+
| v-model | Boolean | yes | false | The value of the selected item |
13+
| color | String | no | 'primary' | The color scheme of the button group |
14+
| items | Array | yes | [] | An array of name value objects `[{label:"A Label",value:"a343",icon:"circle"}]` |
15+
| size | string | no | 'md' | A sting either "xs", "sm","md" or "lg" |
1516

src/components/buttonGroup/TwButtonGroup.vue

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ const props = defineProps({
2020
color:{
2121
type: String,
2222
default:'primary'
23+
},
24+
size:{
25+
type:String,
26+
default:'md',
27+
accept:['sm','md','lg','xs']
2328
}
2429
})
2530
@@ -34,7 +39,7 @@ function handleClick(i){
3439
<template>
3540
<div class="inline-flex -space-x-0 divide-x overflow-hidden rounded-lg border text-sm " :class="baseClass">
3641

37-
<tw-button-group-item :color="props.color" v-for="(item, index) in items" :key="index" @click="handleClick(item.value)" :item="item" :value="item.value" :selected-value="props.modelValue"></tw-button-group-item>
42+
<tw-button-group-item :color="props.color" v-for="(item, index) in items" :key="index" @click="handleClick(item.value)" :item="item" :size="size" :value="item.value" :selected-value="props.modelValue"></tw-button-group-item>
3843

3944
</div>
4045
</template>

src/components/buttonGroup/TwButtonGroupItem.vue

+16-4
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,42 @@ const props=defineProps(
99
default:{
1010
label:'Not set',
1111
value:0,
12-
icon:'gauge'
12+
icon:'gauge',
1313
}
1414
},
1515
1616
value:{},
1717
selectedValue:{},
1818
color:{type:String, default:'primary'},
19+
size:{type:String, default:'md', accept:['sm','md','lg','xs']}
1920
}
2021
)
2122
2223
const hasIcon = computed(()=>{
2324
return props.item.hasOwnProperty('icon')
2425
})
2526
26-
const selectedClass = computed(() => {
27-
return props.selectedValue === props.value? `bg-${props.color}-200 dark:bg-${props.color}-700 `:`hover:bg-${props.color}-100 dark:hover:bg-${props.color}-500`;
27+
const dynamicClass = computed(() => {
28+
let _cls = ''
29+
switch (props.size) {
30+
case 'xs': _cls = ' text-[11px] py-[4px] px-3 '
31+
break;
32+
case 'sm': _cls = ' text-xs py-1 px-3 '
33+
break;
34+
case 'lg': _cls = ' text-lg py-3 px-8 '
35+
break;
36+
default: _cls = ' py-2 px-4 '
37+
}
38+
_cls+= props.selectedValue === props.value? `bg-${props.color}-200 dark:bg-${props.color}-700 `:`hover:bg-${props.color}-100 dark:hover:bg-${props.color}-500`;
39+
return _cls
2840
})
2941
3042
</script>
3143

3244
<template>
3345

3446

35-
<div class="px-4 py-2 cursor-pointer" :class="selectedClass">
47+
<div class="px-4 py-2 cursor-pointer" :class="dynamicClass">
3648
<tw-icon class="mr-1" v-if="hasIcon" :icon="props.item.icon"></tw-icon>
3749
{{ props.item.label }}
3850

0 commit comments

Comments
 (0)