Chips
Assist chip
Outlined
Copy Code
<ChipSet>
<AssistChip label="Assist chip" />
<AssistChip label="With icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</AssistChip>
</ChipSet>Elevated
Copy Code
<ChipSet>
<AssistChip elevated label="Assist chip" />
<AssistChip elevated label="With icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</AssistChip>
</ChipSet>Disabled
Copy Code
<ChipSet>
<AssistChip disabled label="Outlined" />
<AssistChip disabled label="Outlined with icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</AssistChip>
<AssistChip disabled elevated label="Elevated" />
<AssistChip disabled elevated label="Elevated with icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</AssistChip>
</ChipSet>As link
Copy Code
<ChipSet>
<AssistChip label="Visit website" href="https://noph.dev">
{#snippet icon()}<Icon>open_in_new</Icon>{/snippet}
</AssistChip>
</ChipSet>Filter chip
Outlined
Copy Code
<ChipSet>
<FilterChip label="Filter chip" />
<FilterChip label="Selected" selected />
<FilterChip label="With icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</FilterChip>
<FilterChip label="Selected with icon" selected>
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</FilterChip>
</ChipSet>Elevated
Copy Code
<ChipSet>
<FilterChip elevated label="Filter chip" />
<FilterChip elevated label="Selected" selected />
<FilterChip elevated label="With icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</FilterChip>
<FilterChip elevated label="Selected with icon" selected>
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</FilterChip>
</ChipSet>Removable
Copy Code
<ChipSet>
<FilterChip label="Removable" removable onremove={() => {}} />
<FilterChip label="Selected" removable selected onremove={() => {}} />
<FilterChip elevated label="Elevated" removable onremove={() => {}} />
</ChipSet>Disabled
Copy Code
<ChipSet>
<FilterChip disabled label="Outlined" />
<FilterChip disabled label="Outlined selected" selected />
<FilterChip disabled elevated label="Elevated" />
<FilterChip disabled elevated label="Elevated selected" selected />
<FilterChip disabled label="With icon">
{#snippet icon()}<Icon>bookmark</Icon>{/snippet}
</FilterChip>
</ChipSet>Group
Copy Code
let filterGroup = $state<string[]>([])
<ChipSet>
<FilterChip label="Running" value="running" bind:group={filterGroup} />
<FilterChip label="Walking" value="walking" bind:group={filterGroup} />
<FilterChip label="Cycling" value="cycling" bind:group={filterGroup} />
<FilterChip label="Swimming" value="swimming" bind:group={filterGroup} />
</ChipSet>Input chip
Default
Input chip
Copy Code
<ChipSet>
<InputChip label="Input chip" />
<InputChip label="With icon">
{#snippet icon()}<Icon>person</Icon>{/snippet}
</InputChip>
</ChipSet>Selected
Selected
Copy Code
<ChipSet>
<InputChip selected label="Selected" />
<InputChip selected label="With icon">
{#snippet icon()}<Icon>person</Icon>{/snippet}
</InputChip>
</ChipSet>Disabled
Disabled
Disabled selected
Copy Code
<ChipSet>
<InputChip disabled label="Disabled" />
<InputChip disabled selected label="Disabled selected" />
<InputChip disabled label="With icon">
{#snippet icon()}<Icon>person</Icon>{/snippet}
</InputChip>
</ChipSet>Chips with text fields
Copy Code
let pendingDeleteIndex: number | null = $state(null)
<TextField
type="email"
label="Emails"
variant="outlined"
placeholder="Add email..."
bind:value={email}
populated={emails.length > 0}
onkeydown={(e) => {
if (e.key === 'Enter') {
e.preventDefault()
if (e.currentTarget.value && e.currentTarget.reportValidity()) {
emails.push(e.currentTarget.value)
email = ''
}
} else if (e.key === 'Backspace' && !e.currentTarget.value && emails.length > 0) {
e.preventDefault()
if (pendingDeleteIndex !== null) {
emails.splice(pendingDeleteIndex, 1)
pendingDeleteIndex = null
} else {
pendingDeleteIndex = emails.length - 1
}
} else {
pendingDeleteIndex = null
}
}}
onfocus={() => { pendingDeleteIndex = null }}
>
<ChipSet chipsCount={emails.length}>
{#each emails as email, index (index)}
<InputChip
name="email"
value={email}
selected={pendingDeleteIndex === index}
onremove={() => {
if (index > -1) {
emails.splice(index, 1)
pendingDeleteIndex = null
}
}}
/>
{/each}
</ChipSet>
</TextField>