Skip to content

Commit 3a27212

Browse files
Feat/add disabled to listbox listboxitem (#2485)
Co-authored-by: endigo9740 <[email protected]>
1 parent a5a588d commit 3a27212

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

.changeset/giant-tomatoes-kick.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@skeletonlabs/skeleton": minor
3+
---
4+
5+
feat: Added `disabled` prop to ListBox and ListBoxItem components.

packages/skeleton/src/lib/components/ListBox/ListBox.svelte

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
// Props
88
/** Enable selection of multiple items. */
99
export let multiple = false;
10+
/** Disables selection of items. */
11+
export let disabled = false;
1012
1113
// Props (styles)
1214
/** Provide class to set the vertical spacing style. */
@@ -35,6 +37,7 @@
3537
export let labelledby = '';
3638
3739
// Context
40+
setContext('disabled', disabled);
3841
setContext('multiple', multiple);
3942
setContext('rounded', rounded);
4043
setContext('active', active);

packages/skeleton/src/lib/components/ListBox/ListBoxItem.svelte

+7-4
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
export let value: any;
2020
2121
// Context
22+
export let disabled: boolean = getContext('disabled');
2223
export let multiple: string = getContext('multiple');
2324
export let rounded: CssClasses = getContext('rounded');
2425
export let active: CssClasses = getContext('active');
@@ -30,6 +31,7 @@
3031
3132
// Classes
3233
const cBase = 'cursor-pointer -outline-offset-[3px]';
34+
const cDisabled = 'opacity-50 !cursor-default';
3335
const cLabel = 'flex items-center space-x-4';
3436
3537
// Local
@@ -95,8 +97,9 @@
9597
9698
// Reactive
9799
$: selected = multiple ? group.some((groupVal: unknown) => areDeeplyEqual(value, groupVal)) : areDeeplyEqual(group, value);
98-
$: classesActive = selected ? active : hover;
99-
$: classesBase = `${cBase} ${rounded} ${padding} ${classesActive} ${$$props.class ?? ''}`;
100+
$: classesActive = selected ? active : !disabled ? hover : '';
101+
$: classesDisabled = disabled ? cDisabled : '';
102+
$: classesBase = `${cBase} ${classesDisabled} ${rounded} ${padding} ${classesActive} ${$$props.class ?? ''}`;
100103
$: classesLabel = `${cLabel}`;
101104
$: classesRegionLead = `${cRegionLead} ${regionLead}`;
102105
$: classesRegionDefault = `${cRegionDefault} ${regionDefault}`;
@@ -119,9 +122,9 @@
119122
<!-- NOTE: Don't use `hidden` as it prevents `required` from operating -->
120123
<div class="h-0 w-0 overflow-hidden">
121124
{#if multiple}
122-
<input bind:this={elemInput} type="checkbox" {name} {value} bind:checked tabindex="-1" on:click on:change />
125+
<input {disabled} bind:this={elemInput} type="checkbox" {name} {value} bind:checked tabindex="-1" on:click on:change />
123126
{:else}
124-
<input bind:this={elemInput} type="radio" bind:group {name} {value} tabindex="-1" on:click on:change />
127+
<input {disabled} bind:this={elemInput} type="radio" bind:group {name} {value} tabindex="-1" on:click on:change />
125128
{/if}
126129
</div>
127130
<!-- <slot /> -->

sites/skeleton.dev/src/routes/(inner)/components/listboxes/+page.svelte

+7
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
// Local
3131
let valueSingle = 'books';
3232
let valueMultiple = ['books', 'movies'];
33+
let valueDisabled = ['books', 'movies'];
3334
</script>
3435

3536
<DocsShell {settings}>
@@ -119,6 +120,12 @@
119120
</svelte:fragment>
120121
</DocsPreview>
121122
</section>
123+
<section class="space-y-4">
124+
<h2 class="h2">Disabled</h2>
125+
<p>Use the <code class="code">disabled</code> property to disable the entire listbox or each item.</p>
126+
<CodeBlock language="html" code={`<ListBox ... disabled>...</ListBox>`} />
127+
<CodeBlock language="html" code={`<ListBoxItem ... disabled>...</ListBoxItem>`} />
128+
</section>
122129
<section class="space-y-4">
123130
<h2 class="h2">Lead and Trail Slots</h2>
124131
<p>

0 commit comments

Comments
 (0)