@@ -11,6 +11,7 @@ import type { HasValueSignalString } from "~ui/utils/HasValueSignalString"
1111import type { MayHaveValueText } from "~ui/utils/HasValueText"
1212import type { MayHaveButtonVariant } from "~ui/utils/MayHaveButtonVariant"
1313import type { MayHaveClass } from "~ui/utils/MayHaveClass"
14+ import type { MayHaveDisabled } from "~ui/utils/MayHaveDisabled"
1415import type { MayHaveId } from "~ui/utils/MayHaveId"
1516import type { MayHaveInnerClass } from "~ui/utils/MayHaveInnerClass"
1617
@@ -21,16 +22,16 @@ export interface CheckSingleProps
2122 MayHaveId ,
2223 MayHaveButtonVariant ,
2324 MayHaveClass ,
24- MayHaveInnerClass {
25- // styling
25+ MayHaveInnerClass ,
26+ MayHaveDisabled {
2627 optionClass ?: string
2728}
2829
2930export function CheckSingle ( p : CheckSingleProps ) {
3031 return (
3132 < div
3233 id = { p . id }
33- class = { classArr (
34+ class = { classMerge (
3435 "group border border-input" ,
3536 "px-2 py-2" ,
3637 "ring-offset-background" ,
@@ -57,23 +58,14 @@ interface OptionListProps
5758 HasGetOptions ,
5859 MayHaveValueText ,
5960 MayHaveButtonVariant ,
61+ MayHaveDisabled ,
6062 MayHaveInnerClass {
6163 optionClass ?: string
6264}
6365
6466function OptionList ( p : OptionListProps ) {
65- const innerClass = ( ) => {
66- if ( p . innerClass ) return p . innerClass
67- const optionAmount = p . getOptions ( ) . length
68- if ( optionAmount <= 0 ) return ""
69- const base = " gap-x-2 gap-y-1"
70- if ( optionAmount <= 5 ) return `grid grid-cols-1${ base } `
71- if ( optionAmount <= 9 ) return `grid grid-cols-2${ base } `
72- return `${ classesGridCols3xl } ${ base } `
73- }
74-
7567 return (
76- < div class = { innerClass ( ) } >
68+ < div class = { innerClass ( p . getOptions ( ) . length , p . innerClass ) } >
7769 < For each = { p . getOptions ( ) } >
7870 { ( option ) => (
7971 < CheckOption
@@ -82,14 +74,24 @@ function OptionList(p: OptionListProps) {
8274 valueText = { p . valueText }
8375 optionClass = { p . optionClass }
8476 variant = { p . variant }
77+ disabled = { p . disabled }
8578 />
8679 ) }
8780 </ For >
8881 </ div >
8982 )
9083}
9184
92- interface CheckOptionProps extends MayHaveButtonVariant {
85+ function innerClass ( optionAmount : number , innerClass ?: string ) : string {
86+ if ( innerClass ) return innerClass
87+ if ( optionAmount <= 0 ) return ""
88+ const base = "gap-x-2 gap-y-1"
89+ if ( optionAmount === 1 ) return classArr ( "grid grid-cols-1" , base )
90+ if ( optionAmount === 2 ) return classArr ( "grid grid-cols-2" , base )
91+ return classArr ( classesGridCols3xl , base )
92+ }
93+
94+ interface CheckOptionProps extends MayHaveButtonVariant , MayHaveDisabled {
9395 option : string
9496 valueSignal : SignalObject < string >
9597 valueText ?: ( value : string ) => string
@@ -109,6 +111,7 @@ function CheckOption(p: CheckOptionProps) {
109111 onClick = { ( ) => toggleOption ( p ) }
110112 variant = { p . variant ?? buttonVariant . filled }
111113 class = { classMerge ( "justify-start text-left" , p . optionClass ) }
114+ disabled = { p . disabled }
112115 >
113116 { label ( ) }
114117 </ ButtonIcon >
0 commit comments