Skip to content

Commit 4eacdd2

Browse files
committed
feat: add support for custom progress bar colors in FwbProgress component
1 parent ca3473e commit 4eacdd2

File tree

5 files changed

+43
-22
lines changed

5 files changed

+43
-22
lines changed

docs/components/progress.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,15 @@ You can also apply color.
8686
```vue
8787
<template>
8888
<div class="grid gap-2">
89-
<fwb-progress :progress="12.5" label="Default" />
90-
<fwb-progress :progress="25" color="dark" label="Dark" />
91-
<fwb-progress :progress="37.5" color="blue" label="Blue" />
92-
<fwb-progress :progress="50" color="red" label="Red" />
93-
<fwb-progress :progress="62.5" color="green" label="Green" />
94-
<fwb-progress :progress="75" color="yellow" label="Yellow" />
95-
<fwb-progress :progress="87.5" color="indigo" label="Indigo" />
96-
<fwb-progress :progress="100" color="purple" label="Purple" />
89+
<fwb-progress :progress="11" label="Default" />
90+
<fwb-progress :progress="22" color="dark" label="Dark" />
91+
<fwb-progress :progress="33" color="blue" label="Blue" />
92+
<fwb-progress :progress="44" color="red" label="Red" />
93+
<fwb-progress :progress="55" color="green" label="Green" />
94+
<fwb-progress :progress="66" color="yellow" label="Yellow" />
95+
<fwb-progress :progress="77" color="indigo" label="Indigo" />
96+
<fwb-progress :progress="88" color="purple" label="Purple" />
97+
<fwb-progress :progress="99" color="#3fb984" label="Custom color" />
9798
</div>
9899
</template>
99100

docs/components/progress/examples/FwbProgressExampleColor.vue

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,47 @@
22
<div class="vp-raw grid gap-2">
33
<fwb-progress
44
label="Default"
5-
:progress="12.5"
5+
:progress="11"
66
/>
77
<fwb-progress
88
color="dark"
99
label="Dark"
10-
:progress="25"
10+
:progress="22"
1111
/>
1212
<fwb-progress
1313
color="blue"
1414
label="Blue"
15-
:progress="37.5"
15+
:progress="33"
1616
/>
1717
<fwb-progress
1818
color="red"
1919
label="Red"
20-
:progress="50"
20+
:progress="44"
2121
/>
2222
<fwb-progress
2323
color="green"
2424
label="Green"
25-
:progress="62.5"
25+
:progress="55"
2626
/>
2727
<fwb-progress
2828
color="yellow"
2929
label="Yellow"
30-
:progress="75"
30+
:progress="66"
3131
/>
3232
<fwb-progress
3333
color="indigo"
3434
label="Indigo"
35-
:progress="87.5"
35+
:progress="77"
3636
/>
3737
<fwb-progress
3838
color="purple"
3939
label="Purple"
40-
:progress="100"
40+
:progress="88"
41+
/>
42+
<fwb-progress
43+
color="#3fb984"
44+
label="Custom color"
45+
:progress="99"
4146
/>
4247
</div>
4348
</template>

src/components/FwbProgress/FwbProgress.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
<div class="mb-1 flex justify-between">
55
<span
66
:class="outsideLabelClasses"
7+
:style="customColor ? { color: customColor } : {}"
78
class="text-base font-medium"
89
>{{ label }}</span>
910
<span
1011
v-if="labelProgress && labelPosition === 'outside'"
1112
:class="outsideLabelClasses"
13+
:style="customColor ? { color: customColor } : {}"
1214
class="text-sm font-medium"
1315
>{{ progress }}%</span>
1416
</div>
@@ -19,7 +21,9 @@
1921
>
2022
<div
2123
:class="innerClasses"
22-
:style="{ width: progress + '%' }"
24+
:style="customColor
25+
? { width: progress + '%', backgroundColor: customColor }
26+
: { width: progress + '%' }"
2327
class="rounded-full p-0.5 text-center font-medium text-blue-100"
2428
>
2529
<template v-if="labelProgress && labelPosition === 'inside'">
@@ -59,5 +63,6 @@ const {
5963
innerClasses,
6064
outerClasses,
6165
outsideLabelClasses,
66+
customColor,
6267
} = useProgressClasses(toRefs(props))
6368
</script>

src/components/FwbProgress/composables/useProgressClasses.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import classNames from 'classnames'
22
import { computed, type Ref } from 'vue'
33

4-
import type { ProgressLabelPosition, ProgressSize, ProgressVariant } from '../types'
4+
import type { CustomColor, ProgressLabelPosition, ProgressSize, ProgressVariant } from '../types'
55

66
const barColorClasses: Record<ProgressVariant, string> = {
77
default: 'bg-blue-600 dark:bg-blue-600',
@@ -38,10 +38,18 @@ export type UseProgressClassesProps = {
3838
labelPosition: Ref<ProgressLabelPosition>
3939
}
4040

41-
export function useProgressClasses (props: UseProgressClassesProps): { innerClasses: Ref<string>, outerClasses: Ref<string>, outsideLabelClasses: Ref<string> } {
41+
export function useProgressClasses (props: UseProgressClassesProps): {
42+
innerClasses: Ref<string>,
43+
outerClasses: Ref<string>,
44+
outsideLabelClasses: Ref<string>,
45+
customColor: Ref<CustomColor | null>
46+
} {
47+
const customColor = computed(() => {
48+
return props.color.value as CustomColor
49+
})
4250
const bindClasses = computed(() => {
4351
return classNames(
44-
barColorClasses[props.color.value],
52+
customColor.value ? '' : barColorClasses[props.color.value],
4553
progressSizeClasses[props.size.value],
4654
)
4755
})
@@ -51,7 +59,7 @@ export function useProgressClasses (props: UseProgressClassesProps): { innerClas
5159
)
5260
})
5361
const outsideLabelClasses = computed(() => {
54-
return classNames(
62+
return customColor.value ? '' : classNames(
5563
outsideTextColorClasses[props.color.value],
5664
)
5765
})
@@ -60,5 +68,6 @@ export function useProgressClasses (props: UseProgressClassesProps): { innerClas
6068
innerClasses: bindClasses,
6169
outerClasses,
6270
outsideLabelClasses,
71+
customColor,
6372
}
6473
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export type ProgressLabelPosition = 'inside' | 'outside' | 'none'
22
export type ProgressSize = 'sm' | 'md' | 'lg' | 'xl'
3-
export type ProgressVariant = 'default' | 'dark' | 'green' | 'red' | 'yellow' | 'purple' | 'blue' | 'indigo'
3+
export type CustomColor = (`#${string}` & {})
4+
export type ProgressVariant = 'default' | 'dark' | 'green' | 'red' | 'yellow' | 'purple' | 'blue' | 'indigo' | CustomColor

0 commit comments

Comments
 (0)