docs: Checkbox, Tabs, NumberInput (#1045)

* add `Checkbox` reactive example for `bind:checked` (#967)

* update `Checkbox` reactive example for `bind:group` to demo two-way binding

* simplify `Tabs` reactive example

* add `NumberInput` "No value" example
This commit is contained in:
metonym 2022-01-27 07:27:10 -08:00 committed by GitHub
commit 4e3415a4e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 27 deletions

View file

@ -1,5 +1,5 @@
<script> <script>
import { Checkbox } from "carbon-components-svelte"; import { Checkbox, InlineNotification } from "carbon-components-svelte";
import Preview from "../../components/Preview.svelte"; import Preview from "../../components/Preview.svelte";
</script> </script>
@ -23,9 +23,21 @@
<Checkbox labelText="Label text" disabled /> <Checkbox labelText="Label text" disabled />
### Multiple ### Reactive example (bind:checked)
Bind a selection [group](https://svelte.dev/tutorial/group-inputs) to multiple checkboxes. The `checked` prop supports two-way binding.
<FileSource src="/framed/Checkbox/CheckboxReactive" />
### Reactive example (bind:group)
An alternative to `checked` is binding an array of values using `group`. This API in inspired by Svelte [group inputs]([group](https://svelte.dev/tutorial/group-inputs)).
<InlineNotification svx-ignore title="Note:" kind="info" hideCloseButton>
<div class="body-short-01">
If using <strong>bind:group</strong>, <strong>bind:checked</strong> will only support one-way binding.
</div>
</InlineNotification>
<FileSource src="/framed/Checkbox/MultipleCheckboxes" /> <FileSource src="/framed/Checkbox/MultipleCheckboxes" />

View file

@ -19,6 +19,14 @@ components: ["NumberInput", "NumberInputSkeleton"]
<NumberInput min="{4}" max="{20}" value="{4}" invalidText="Number must be between 4 and 20." helperText="Clusters provisioned in your region" label="Clusters (4 min, 20 max)" /> <NumberInput min="{4}" max="{20}" value="{4}" invalidText="Number must be between 4 and 20." helperText="Clusters provisioned in your region" label="Clusters (4 min, 20 max)" />
### No value
Set `allowEmpty` to `true` to allow for no value.
Set `value` to `null` to denote "no value."
<FileSource src="/framed/NumberInput/NumberInputEmpty" />
### Hidden label ### Hidden label
<NumberInput hideLabel label="Clusters" /> <NumberInput hideLabel label="Clusters" />

View file

@ -0,0 +1,14 @@
<script>
import { Checkbox, Button } from "carbon-components-svelte";
let checked = false;
</script>
<Checkbox labelText="Label text" bind:checked />
<div style="margin: var(--cds-layout-01) 0">
<Button on:click="{() => (checked = !checked)}">Toggle</Button>
</div>
<strong>checked:</strong>
{checked}

View file

@ -1,15 +1,17 @@
<script> <script>
import { Checkbox } from "carbon-components-svelte"; import { Checkbox, Button } from "carbon-components-svelte";
let options = ["Apple", "Banana", "Coconut"]; let values = ["Apple", "Banana", "Coconut"];
let selection = options.slice(0, 2); let group = values.slice(0, 2);
</script> </script>
{#each options as option} {#each values as value}
<Checkbox bind:group="{selection}" labelText="{option}" value="{option}" /> <Checkbox bind:group labelText="{value}" value="{value}" />
{/each} {/each}
<div style="margin: var(--cds-layout-01) 0"> <div style="margin: var(--cds-layout-01) 0">
Selected options: <Button on:click="{() => (group = ['Banana'])}">Set to ["Banana"]</Button>
<strong>{selection.join(", ")}</strong>
</div> </div>
<strong>Selected:</strong>
{JSON.stringify(group)}

View file

@ -0,0 +1,15 @@
<script>
import { NumberInput, Button } from "carbon-components-svelte";
let value = null;
</script>
<NumberInput allowEmpty bind:value />
<div style="margin: var(--cds-layout-01) 0">
<Button on:click="{() => (value = null)}">Set to null</Button>
<Button on:click="{() => (value = 0)}">Set to 0</Button>
</div>
<strong>Value:</strong>
{value}

View file

@ -15,22 +15,9 @@
</svelte:fragment> </svelte:fragment>
</Tabs> </Tabs>
<div> <div style="margin: var(--cds-layout-01) 0">
<h4>Selected index: {selected}</h4> <Button on:click="{() => (selected = 1)}">Set index to 1</Button>
</div> </div>
<div> <strong>Selected index:</strong>
<Button {selected}
size="small"
disabled="{selected === 1}"
on:click="{() => (selected = 1)}"
>
Set index to 1
</Button>
</div>
<style>
div {
margin-top: var(--cds-spacing-05);
}
</style>