The component is used to display progress visually. It helps indicate completion status in a clear and customizable way.
About
The Progress provides flexible options for styling, orientation, and labeling. It supports both horizontal and vertical layouts, with customizable thickness, rounded corners, and additional styling classes. The progress value is determined by the start and end props, and labels can be displayed in different styles.
Example
The following example shows a simple progress bar with a set start and end value, along with a label:
<script>
import { Progress } from "theui-svelte";
</script>
<Progress end={55} />The end prop define the end limit of the progress. The start is 0 default.
Progress Range
The start and end props define the progress range. The start prop sets the initial value, while the end prop sets the final value of the progress bar. By default, both values are 0, which is the minimum value. The maximum value is 100.
- If
startandendare equal, the progress bar will appear empty. Only the label will be display (if available). - If
startis greater thanend, they will swap their values to work properly. - If
endis greater thanstart(which is expected), the progress bar will fill accordingly. - If
endexceeds the maximum range (100), it will be considered as 100.
<Progress start={55} end={55} label="55" />
<Progress start={75} end={55} label="55" />
<Progress start={25} end={55} label="55" />
<Progress start={25} end={155} label="55" />Thickness
The thickness prop controls the thickness of the progress bar. It accepts five values: 'px', 'sm', 'md', 'lg', and 'xl'. The default value is 'md'.
thickness is set to 'px', 'sm' or 'md', the label will always be displayed as a bubble, regardless of the labelVariant setting. <Progress end={55} label="55" thickness="px" />
<Progress end={55} label="55" thickness="sm" />
<Progress end={55} label="55" thickness="md" />
<Progress end={55} label="55" thickness="lg" />
<Progress end={55} label="55" thickness="xl" />Label
The label prop defines the text displayed on the Progress bar, which can represent progress values or any custom text. By default, no label is shown unless explicitly set.
The labelVariant prop controls the appearance of the label. When set to "inline", the label appears as inline text. When set to "bubble", the label is enclosed within a bubble for better visibility. The default value for this prop is "bubble".
<Progress end={55} label="55" />
<Progress end={55} label="55" labelVariant="inline" thickness="lg" />labelVariant setting, if the thickness is not 'lg' or 'xl', the label will automatically use the "bubble" variant. Otherwise, it will follow the specified labelVariant value. More in the thickness section. Vertical Progress
You can add a vertical progress bar by jus adding the vertical attribute to the Progress.
<Progress end={55} label="55" vertical />Dynamic Progress
You can update the progress bar with dynamically by making it reactive. The example given below.
<script lang="ts">
import {Progress} from "$lib";
let startValue = $state(0)
let endValue = $state(40)
</script>
<Progress start={startValue} end={endValue} label={endValue}/>
<input type="range" bind:value={startValue} />
<input type="range" bind:value={endValue} />Customization
The progress bar is fully customizable. Use the barClasses prop to apply custom styles to the progress bar, and the bubbleClasses prop to customize the bubble label. The rounded prop controls the border radius of the progress bar. To further customize the progress bar track, apply classes directly to the Progress component using the class attribute.
<Progress
end={50}
label="50"
barClasses="bg-green-400"
bubbleClasses="bg-green-600 text-white"
class="bg-green-100"
thickness="lg"
rounded="none"
/>Accessibility
TThe Progress component is designed to be accessible, providing clear indicators of progress for all users. To ensure the component is fully accessible:
- ARIA attributes: The component automatically uses
aria-valuenow,aria-valuemin, andaria-valuemaxto communicate the current progress and its range to screen readers. - Color contrast: Ensure sufficient color contrast to make the progress bar readable for users with visual impairments.
- Label visibility: When using the
"bubble"label variant, ensure the label is positioned properly and does not obstruct key content, ensuring a smooth user experience.