Files
tom goriunovandGitHub 654fe303bb Add progress bar component to toolkit (#3088)
add progress bar component to toolkit
2025-10-31 14:56:05 +01:00

116 lines
2.5 KiB
TypeScript

import { defineSlotRecipe } from '@chakra-ui/react';
export const recipe = defineSlotRecipe({
slots: [ 'root', 'track', 'range', 'label', 'valueText' ],
className: 'chakra-progress',
base: {
root: {
textStyle: 'sm',
position: 'relative',
},
track: {
overflow: 'hidden',
position: 'relative',
borderRadius: 'base',
},
range: {
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
transitionProperty: 'width, height',
transitionDuration: 'slow',
height: '100%',
bgColor: 'var(--track-color)',
_indeterminate: {
'--animate-from-x': '-40%',
'--animate-to-x': '100%',
position: 'absolute',
willChange: 'left',
minWidth: '50%',
animation: 'position 1s ease infinite normal none running',
backgroundImage: `linear-gradient(to right, transparent 0%, var(--track-color) 50%, transparent 100%)`,
},
},
label: {
display: 'inline-flex',
fontWeight: 'medium',
alignItems: 'center',
gap: '1',
},
valueText: {
textStyle: 'xs',
lineHeight: '1',
fontWeight: 'medium',
},
},
variants: {
variant: {
subtle: {
track: {
bgColor: 'progress.track',
},
range: {
bgColor: 'selected.option.bg',
},
},
},
shape: {
rounded: {
track: {
borderRadius: 'base',
},
},
},
striped: {
'true': {
range: {
// eslint-disable-next-line max-len
backgroundImage: `linear-gradient(45deg, var(--stripe-color) 25%, transparent 25%, transparent 50%, var(--stripe-color) 50%, var(--stripe-color) 75%, transparent 75%, transparent)`,
backgroundSize: `var(--stripe-size) var(--stripe-size)`,
'--stripe-size': '1rem',
'--stripe-color': {
_light: 'rgba(255, 255, 255, 0.3)',
_dark: 'rgba(0, 0, 0, 0.3)',
},
},
},
},
animated: {
'true': {
range: {
'--animate-from': 'var(--stripe-size)',
animation: 'bg-position 1s linear infinite',
},
},
},
size: {
xs: {
track: { h: '1' },
},
sm: {
track: { h: '2' },
},
md: {
track: { h: '3' },
},
lg: {
track: { h: '4' },
},
xl: {
track: { h: '8' },
},
},
},
defaultVariants: {
variant: 'subtle',
size: 'xs',
shape: 'rounded',
},
});