@@ -6,29 +6,27 @@ import { classesGridCols3xl } from "~ui/static/container/classesGridCols"
66import { classArr } from "~ui/utils/classArr"
77import { classMerge } from "~ui/utils/classMerge"
88import type { SignalObject } from "~ui/utils/createSignalObject"
9- import type { HasGetOptions } from "~ui/utils/HasGetOptions"
10- import type { HasValueSignalStringArray } from "~ui/utils/HasValueSignalStringArray"
11- import type { MayHaveValueText } from "~ui/utils/HasValueText"
129import type { MayHaveButtonVariant } from "~ui/utils/MayHaveButtonVariant"
1310import type { MayHaveClass } from "~ui/utils/MayHaveClass"
1411import type { MayHaveDisabled } from "~ui/utils/MayHaveDisabled"
1512import type { MayHaveId } from "~ui/utils/MayHaveId"
1613import type { MayHaveInnerClass } from "~ui/utils/MayHaveInnerClass"
1714
18- export interface CheckMultipleProps
19- extends HasValueSignalStringArray ,
20- HasGetOptions ,
21- MayHaveValueText ,
22- MayHaveId ,
15+ export interface CheckMultipleProps < T extends string >
16+ extends MayHaveId ,
2317 MayHaveButtonVariant ,
2418 MayHaveClass ,
2519 MayHaveInnerClass ,
2620 MayHaveDisabled {
21+ // state
22+ valueSignal : SignalObject < T [ ] >
23+ getOptions : ( ) => T [ ]
24+ valueText ?: ( value : T ) => string
2725 // styling
2826 optionClass ?: string
2927}
3028
31- export function CheckMultiple ( p : CheckMultipleProps ) {
29+ export function CheckMultiple < T extends string = string > ( p : CheckMultipleProps < T > ) {
3230 return (
3331 < div
3432 id = { p . id }
@@ -54,17 +52,14 @@ export function CheckMultiple(p: CheckMultipleProps) {
5452 )
5553}
5654
57- interface OptionListProps
58- extends HasValueSignalStringArray ,
59- HasGetOptions ,
60- MayHaveValueText ,
61- MayHaveButtonVariant ,
62- MayHaveInnerClass ,
63- MayHaveDisabled {
55+ interface OptionListProps < T extends string > extends MayHaveButtonVariant , MayHaveDisabled , MayHaveInnerClass {
56+ valueSignal : SignalObject < T [ ] >
57+ getOptions : ( ) => T [ ]
58+ valueText ?: ( value : T ) => string
6459 optionClass ?: string
6560}
6661
67- function OptionList ( p : OptionListProps ) {
62+ function OptionList < T extends string > ( p : OptionListProps < T > ) {
6863 return (
6964 < div class = { innerClass ( p . getOptions ( ) . length , p . innerClass ) } >
7065 < For each = { p . getOptions ( ) } >
@@ -83,14 +78,14 @@ function OptionList(p: OptionListProps) {
8378 )
8479}
8580
86- interface CheckOptionProps extends MayHaveButtonVariant , MayHaveDisabled {
87- option : string
88- valueSignal : SignalObject < string [ ] >
89- valueText ?: ( value : string ) => string
81+ interface CheckOptionProps < T extends string > extends MayHaveButtonVariant , MayHaveDisabled {
82+ option : T
83+ valueSignal : SignalObject < T [ ] >
84+ valueText ?: ( value : T ) => string
9085 optionClass ?: string
9186}
9287
93- function CheckOption ( p : CheckOptionProps ) {
88+ function CheckOption < T extends string > ( p : CheckOptionProps < T > ) {
9489 const label = ( ) => ( p . valueText ? p . valueText ( p . option ) : p . option )
9590 const isSelected = ( ) => p . valueSignal . get ( ) . includes ( p . option )
9691
@@ -119,7 +114,7 @@ function innerClass(optionAmount: number, innerClass?: string): string {
119114 return classArr ( classesGridCols3xl , base )
120115}
121116
122- function toggleOption ( p : CheckOptionProps ) {
117+ function toggleOption < T extends string > ( p : CheckOptionProps < T > ) {
123118 const hasOption = p . valueSignal . get ( ) . includes ( p . option )
124119 if ( hasOption ) {
125120 optionRemove ( p )
@@ -128,12 +123,12 @@ function toggleOption(p: CheckOptionProps) {
128123 }
129124}
130125
131- function optionRemove ( p : CheckOptionProps ) {
126+ function optionRemove < T extends string > ( p : CheckOptionProps < T > ) {
132127 const newValues = p . valueSignal . get ( ) . filter ( ( v ) => v !== p . option )
133128 p . valueSignal . set ( newValues )
134129}
135130
136- function optionAdd ( p : CheckOptionProps ) {
131+ function optionAdd < T extends string > ( p : CheckOptionProps < T > ) {
137132 const newValues = [ ...p . valueSignal . get ( ) , p . option ]
138133 newValues . sort ( ( a , b ) => a . localeCompare ( b ) )
139134 p . valueSignal . set ( newValues )
0 commit comments