({
parameter,
value,
onChange,
}: {
parameter: ModelParameterConfig
value: string
onChange: (value: string) => void
})
| 3398 | } |
| 3399 | |
| 3400 | function ModelParameterControl({ |
| 3401 | parameter, |
| 3402 | value, |
| 3403 | onChange, |
| 3404 | }: { |
| 3405 | parameter: ModelParameterConfig |
| 3406 | value: string |
| 3407 | onChange: (value: string) => void |
| 3408 | }) { |
| 3409 | const booleanOptions = getBooleanParameterOptions(parameter) |
| 3410 | if (booleanOptions) { |
| 3411 | const isOn = value === booleanOptions.on.id |
| 3412 | return ( |
| 3413 | <div className="flex items-center gap-3"> |
| 3414 | <span className="text-sm font-medium">{parameter.label}</span> |
| 3415 | <button |
| 3416 | type="button" |
| 3417 | role="switch" |
| 3418 | aria-checked={isOn} |
| 3419 | aria-label={parameter.label} |
| 3420 | className={cn( |
| 3421 | "relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border p-0 transition-colors outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50", |
| 3422 | isOn ? "border-primary bg-primary" : "border-input bg-muted" |
| 3423 | )} |
| 3424 | onClick={() => { |
| 3425 | onChange( |
| 3426 | isOn ? booleanOptions.off.id : booleanOptions.on.id |
| 3427 | ) |
| 3428 | }} |
| 3429 | > |
| 3430 | <span |
| 3431 | aria-hidden="true" |
| 3432 | className={cn( |
| 3433 | "absolute left-0.5 top-1/2 size-4 -translate-y-1/2 rounded-full bg-background shadow-sm transition-transform", |
| 3434 | isOn ? "translate-x-4" : "translate-x-0" |
| 3435 | )} |
| 3436 | /> |
| 3437 | </button> |
| 3438 | </div> |
| 3439 | ) |
| 3440 | } |
| 3441 | |
| 3442 | if (parameter.values.length <= 4) { |
| 3443 | return ( |
| 3444 | <Field> |
| 3445 | <FieldLabel>{parameter.label}</FieldLabel> |
| 3446 | <ToggleGroup |
| 3447 | value={[value]} |
| 3448 | onValueChange={(nextValue) => { |
| 3449 | if (nextValue[0]) { |
| 3450 | onChange(nextValue[0]) |
| 3451 | } |
| 3452 | }} |
| 3453 | size="sm" |
| 3454 | variant="outline" |
| 3455 | className="rounded-md bg-muted/40 data-[size=sm]:rounded-md" |
| 3456 | > |
| 3457 | {parameter.values.map((option) => ( |
nothing calls this directly
no test coverage detected