Export id in ProgressBar, add UX animated progress bar example (#732)

* fix(progress-bar): export id prop #731

Fixes #731

* docs(progress-bar): add UX example
This commit is contained in:
Eric Liu 2021-07-07 10:08:03 -07:00 committed by GitHub
commit 2d47bcaf1f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 63 additions and 30 deletions

View file

@ -7441,6 +7441,16 @@
"isFunction": false,
"constant": false,
"reactive": false
},
{
"name": "id",
"kind": "let",
"description": "Set an id for the progress bar element",
"type": "string",
"value": "\"ccs-\" + Math.random().toString(36)",
"isFunction": false,
"constant": false,
"reactive": false
}
],
"slots": [

View file

@ -21,4 +21,10 @@ The default `max` value is `100`.
### Hidden label
<ProgressBar hideLabel value={40} labelText="Upload status" helperText="40 MB of 100 MB" />
<ProgressBar hideLabel value={40} labelText="Upload status" helperText="40 MB of 100 MB" />
### UX example
This example shows how to animate the progress bar from 0 to 100% with start and end states.
<FileSource src="/framed/ProgressBar/ProgressBarUx" />

View file

@ -1,30 +1,11 @@
<script>
import { onMount } from "svelte";
import { ProgressBar } from "carbon-components-svelte";
import { ProgressBar, ButtonSet, Button } from "carbon-components-svelte";
let max = 328;
let value = 0;
let timer = undefined;
onMount(() => {
timer = setTimeout(() => {
const interval = setInterval(() => {
const delta = Math.random() * 10;
if (value + delta < max) {
value += delta;
} else {
value = max;
clearInterval(interval);
}
}, 20);
}, 2000);
return () => clearTimeout(timer);
});
$: helperText =
value > 0 ? `${value.toFixed(0)}MB of ${max}MB` : "Preparing upload...";
value > 0 ? value.toFixed(0) + "MB of " + max + "MB" : "Press start";
$: if (value === max) helperText = "Done";
</script>
@ -34,3 +15,30 @@
max="{max}"
helperText="{helperText}"
/>
<ButtonSet style="margin-top: var(--cds-spacing-08)">
<Button
disabled="{value > 0}"
on:click="{() => {
const interval = setInterval(() => {
const delta = Math.random() * 10;
if (value + delta < max) {
value += delta;
} else {
value = max;
clearInterval(interval);
}
}, 30);
}}"
>
Start
</Button>
<Button
kind="tertiary"
disabled="{value !== max}"
on:click="{() => (value = 0)}"
>
Reset
</Button>
</ButtonSet>