mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-15 10:21:05 +00:00
* chore(deps-dev): bump carbon-components to v10.54.0 * feat(progress-bar): add size prop * docs(progress-bar): add "Small size" example * docs(progress-bar): add descriptions * refactor(structured-list): remove monkey patch * feat(radio-button-group): add hideLegend prop * docs(radio-button): add "Hidden legend" example
70 lines
1.7 KiB
Svelte
70 lines
1.7 KiB
Svelte
<script>
|
|
/**
|
|
* Specify the current value
|
|
* @type {number}
|
|
*/
|
|
export let value = undefined;
|
|
|
|
/** Specify the maximum value */
|
|
export let max = 100;
|
|
|
|
/**
|
|
* Specify the size
|
|
* @type {"sm" | "md"}
|
|
*/
|
|
export let size = "md";
|
|
|
|
/** Specify the label text */
|
|
export let labelText = "";
|
|
|
|
/** Set to `true` to visually hide the label text */
|
|
export let hideLabel = false;
|
|
|
|
/** Specify the helper text */
|
|
export let helperText = "";
|
|
|
|
/** Set an id for the progress bar element */
|
|
export let id = "ccs-" + Math.random().toString(36);
|
|
|
|
let helperId = "ccs-" + Math.random().toString(36);
|
|
|
|
$: indeterminate = value === undefined;
|
|
$: capped = value > max ? max : value < 0 ? 0 : value;
|
|
</script>
|
|
|
|
<div
|
|
class:bx--progress-bar="{true}"
|
|
class:bx--progress-bar--indeterminate="{indeterminate}"
|
|
class:bx--progress-bar--big="{size === 'md'}"
|
|
class:bx--progress-bar--small="{size === 'sm'}"
|
|
{...$$restProps}
|
|
>
|
|
<label
|
|
for="{id}"
|
|
class:bx--progress-bar__label="{true}"
|
|
class:bx--visually-hidden="{hideLabel}"
|
|
>
|
|
<slot name="labelText">
|
|
{labelText}
|
|
</slot>
|
|
</label>
|
|
<div
|
|
role="progressbar"
|
|
id="{id}"
|
|
class:bx--progress-bar__track="{true}"
|
|
aria-valuemin="{indeterminate ? undefined : 0}"
|
|
aria-valuemax="{indeterminate ? undefined : max}"
|
|
aria-valuenow="{indeterminate ? undefined : capped}"
|
|
aria-describedby="{helperText ? helperId : null}"
|
|
>
|
|
<div
|
|
class:bx--progress-bar__bar="{true}"
|
|
style="transform: scaleX({capped / max})"
|
|
></div>
|
|
</div>
|
|
{#if helperText}
|
|
<div id="{helperId}" class:bx--progress-bar__helper-text="{true}">
|
|
{helperText}
|
|
</div>
|
|
{/if}
|
|
</div>
|