|
19 | 19 | export let value: any;
|
20 | 20 |
|
21 | 21 | // Context
|
| 22 | + export let disabled: boolean = getContext('disabled'); |
22 | 23 | export let multiple: string = getContext('multiple');
|
23 | 24 | export let rounded: CssClasses = getContext('rounded');
|
24 | 25 | export let active: CssClasses = getContext('active');
|
|
30 | 31 |
|
31 | 32 | // Classes
|
32 | 33 | const cBase = 'cursor-pointer -outline-offset-[3px]';
|
| 34 | + const cDisabled = 'opacity-50 !cursor-default'; |
33 | 35 | const cLabel = 'flex items-center space-x-4';
|
34 | 36 |
|
35 | 37 | // Local
|
|
95 | 97 |
|
96 | 98 | // Reactive
|
97 | 99 | $: 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 ?? ''}`; |
100 | 103 | $: classesLabel = `${cLabel}`;
|
101 | 104 | $: classesRegionLead = `${cRegionLead} ${regionLead}`;
|
102 | 105 | $: classesRegionDefault = `${cRegionDefault} ${regionDefault}`;
|
|
119 | 122 | <!-- NOTE: Don't use `hidden` as it prevents `required` from operating -->
|
120 | 123 | <div class="h-0 w-0 overflow-hidden">
|
121 | 124 | {#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 /> |
123 | 126 | {: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 /> |
125 | 128 | {/if}
|
126 | 129 | </div>
|
127 | 130 | <!-- <slot /> -->
|
|
0 commit comments