import { makeComponentProps } from '@/composables/component' import { makeTagProps } from '@/composables/tag' import { genericComponent, propsFactory } from '@/utils' import { ExtractPropTypes, computed } from 'vue' import { UTooltip } from '../UTooltip/UTooltip' export const makeUProgressBarProps = propsFactory( { progress: { type: Number, default: 0, required: false, }, label: { type: String, default: 'none', required: false, }, width: { type: String, default: '100%', required: false, }, ...makeComponentProps(), ...makeTagProps(), }, 'UProgressBar' ) export type UProgressBarProps = ExtractPropTypes export const UProgressBar = genericComponent()({ name: 'UProgressBar', props: makeUProgressBarProps(), setup(props) { const progressBarWrapperClasses = computed(() => { let classes = '' if (props.label === 'right') { classes = 'flex gap-3 items-center' } else if (props.label === 'bottom') { classes = 'flex flex-col items-end gap-2' } return classes }) const tooltipFloatingPositionStyles = computed(() => { return `left: ${props.progress - 6}%;` }) const tooltipClasses = computed(() => ({ ['-top-0.85']: props.label === 'top floating', ['-bottom-68']: props.label === 'bottom floating', })) const progressBarWidth = computed(() => { return props.width === '100%' || !props.width ? '100%' : props.width + 'px' }) return () => (
{props.label === 'right' || props.label === 'bottom' ? ( {`${props.progress}%`} ) : null}
{props.label === 'top floating' || props.label === 'bottom floating' ? ( {{ tooltipToggle: () => Icon, text: () => `${props.progress}%`, }} ) : null}
) }, }) export type UProgressBar = InstanceType