add outer label

This commit is contained in:
hirakei1203
2022-10-28 23:11:31 +09:00
parent a8cfc85b36
commit 910541c061
2 changed files with 50 additions and 18 deletions

View File

@@ -1,6 +1,16 @@
<template> <template>
<div class="w-full bg-gray-200 rounded-full dark:bg-gray-700" :class="outerClass"> <template v-if="label || (labelProgress && labelPosition === 'outside')">
<div class="rounded-full" :class="wrapperClasses" style="width: 45%"></div> <div class="flex justify-between mb-1">
<span v-show="label || (labelProgress && labelPosition === 'outside')" class="text-base font-medium" :class="outsideLabelClasses">{{ label }}</span>
<span v-if="labelProgress && labelPosition === 'outside'" class="text-sm font-medium" :class="outsideLabelClasses">45%</span>
</div>
</template>
<div class="w-full bg-gray-200 rounded-full dark:bg-gray-700" :class="outerClasses">
<div class="rounded-full font-medium text-blue-100 text-center p-0.5" :class="innerClasses" style="width: 45%">
<template v-if="labelProgress && labelPosition === 'inside'">
{{ progress }}%
</template>
</div>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@@ -15,26 +25,26 @@ const props = defineProps({
}, },
label: { label: {
type: String, type: String,
default: 'progressbar', default: 'rate',
}, },
labelPosition: { labelPosition: {
type: String, // 'inside' | 'outside' | 'none' type: String, // 'inside' | 'outside' | 'none'
default: 'none', default: 'inside',
}, },
labelProgress: { labelProgress: {
type: Boolean, type: Boolean,
default: false, default: true,
}, },
progress: { progress: {
type: Number, type: Number,
default: 0, default: 55,
}, },
size: { size: {
type: String, // 'sm' | 'md' | 'lg' | 'xl' type: String, // 'sm' | 'md' | 'lg' | 'xl'
default: 'lg', default: 'md',
}, },
}) })
const { wrapperClasses, outerClass } = useProgressClasses(toRefs(props)) const { innerClasses, outerClasses, outsideLabelClasses } = useProgressClasses(toRefs(props))
</script> </script>

View File

@@ -6,7 +6,7 @@ import type { ProgressVariant, ProgressSize } from '../types'
// export type ProgressClassMap<T extends string> = { default: Record<T, string> } // export type ProgressClassMap<T extends string> = { default: Record<T, string> }
const progressColorClasses: Record<ProgressVariant, string> = { const barColorClasses: Record<ProgressVariant, string> = {
// const progressColorClasses: ProgressClassMap<ProgressVariant> = { // const progressColorClasses: ProgressClassMap<ProgressVariant> = {
// default: { // default: {
default: 'bg-blue-600 dark:bg-blue-600', default: 'bg-blue-600 dark:bg-blue-600',
@@ -22,11 +22,24 @@ const progressColorClasses: Record<ProgressVariant, string> = {
// }, // },
} }
const outsideTextColorClasses: Record<ProgressVariant, string> = {
default: 'text-blue-700 dark:text-blue-500',
blue: 'text-blue-700 dark:text-blue-500',
alternative: 'dark:bg-gray-800',
dark: 'dark:text-white',
light: 'text-white dark:text-gray-800',
green: 'text-green-700 dark:text-green-500',
red: 'text-red-700 dark:text-red-500',
yellow: 'text-yellow-700 dark:text-yellow-500',
purple: 'text-purple-700 dark:text-purple-500',
pink: 'text-pink-700 dark:text-pink-600',
}
const progressSizeClasses: Record<ProgressSize, string> = { const progressSizeClasses: Record<ProgressSize, string> = {
sm: 'text-sm h-1.5', sm: 'h-1.5 text-xs leading-none',
md: 'text-sm h-2.5', md: 'h-2.5 text-xs leading-none',
lg: 'text-base h-4', lg: 'h-4 text-sm leading-none',
xl: 'text-base h-6', xl: 'h-6 text-base leading-tight',
} }
export type UseProgressClassesProps = { export type UseProgressClassesProps = {
@@ -34,11 +47,11 @@ export type UseProgressClassesProps = {
size: Ref<ProgressSize> size: Ref<ProgressSize>
} }
export function useProgressClasses(props: UseProgressClassesProps): { wrapperClasses: Ref<string>, outerClass: Ref<string>} { export function useProgressClasses(props: UseProgressClassesProps): { innerClasses: Ref<string>, outerClasses: Ref<string>, outsideLabelClasses: Ref<string>} {
const bindClasses = computed(() => { const bindClasses = computed(() => {
let colorClass = '' let colorClass = ''
colorClass = progressColorClasses[props.color.value] colorClass = barColorClasses[props.color.value]
let sizeClass = '' let sizeClass = ''
sizeClass = progressSizeClasses[props.size.value] sizeClass = progressSizeClasses[props.size.value]
@@ -49,7 +62,7 @@ export function useProgressClasses(props: UseProgressClassesProps): { wrapperCla
) )
}) })
const outerClass = computed(() => { const outerClasses = computed(() => {
let outerSizeClass = '' let outerSizeClass = ''
outerSizeClass = progressSizeClasses[props.size.value] outerSizeClass = progressSizeClasses[props.size.value]
return classNames( return classNames(
@@ -57,9 +70,18 @@ export function useProgressClasses(props: UseProgressClassesProps): { wrapperCla
) )
}) })
const outsideLabelClasses = computed(() => {
let outsideLabelClass = ''
outsideLabelClass = outsideTextColorClasses[props.color.value]
return classNames(
outsideLabelClass
)
})
return { return {
wrapperClasses: bindClasses, innerClasses: bindClasses,
outerClass outerClasses,
outsideLabelClasses
} }
} }