mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-17 12:56:41 +02:00
76 lines
1.9 KiB
TypeScript
76 lines
1.9 KiB
TypeScript
import { TextField as Kobalte } from "@kobalte/core/text-field"
|
|
import { Show, splitProps } from "solid-js"
|
|
import type { ComponentProps } from "solid-js"
|
|
|
|
export interface InputProps
|
|
extends ComponentProps<typeof Kobalte.Input>,
|
|
Partial<
|
|
Pick<
|
|
ComponentProps<typeof Kobalte>,
|
|
| "name"
|
|
| "defaultValue"
|
|
| "value"
|
|
| "onChange"
|
|
| "onKeyDown"
|
|
| "validationState"
|
|
| "required"
|
|
| "disabled"
|
|
| "readOnly"
|
|
>
|
|
> {
|
|
label?: string
|
|
hideLabel?: boolean
|
|
hidden?: boolean
|
|
description?: string
|
|
error?: string
|
|
variant?: "normal" | "ghost"
|
|
}
|
|
|
|
export function Input(props: InputProps) {
|
|
const [local, others] = splitProps(props, [
|
|
"name",
|
|
"defaultValue",
|
|
"value",
|
|
"onChange",
|
|
"onKeyDown",
|
|
"validationState",
|
|
"required",
|
|
"disabled",
|
|
"readOnly",
|
|
"class",
|
|
"label",
|
|
"hidden",
|
|
"hideLabel",
|
|
"description",
|
|
"error",
|
|
"variant",
|
|
])
|
|
return (
|
|
<Kobalte
|
|
data-component="input"
|
|
data-variant={local.variant || "normal"}
|
|
name={local.name}
|
|
defaultValue={local.defaultValue}
|
|
value={local.value}
|
|
onChange={local.onChange}
|
|
onKeyDown={local.onKeyDown}
|
|
required={local.required}
|
|
disabled={local.disabled}
|
|
readOnly={local.readOnly}
|
|
style={{ height: local.hidden ? 0 : undefined }}
|
|
validationState={local.validationState}
|
|
>
|
|
<Show when={local.label}>
|
|
<Kobalte.Label data-slot="input-label" classList={{ "sr-only": local.hideLabel }}>
|
|
{local.label}
|
|
</Kobalte.Label>
|
|
</Show>
|
|
<Kobalte.Input {...others} data-slot="input-input" class={local.class} />
|
|
<Show when={local.description}>
|
|
<Kobalte.Description data-slot="input-description">{local.description}</Kobalte.Description>
|
|
</Show>
|
|
<Kobalte.ErrorMessage data-slot="input-error">{local.error}</Kobalte.ErrorMessage>
|
|
</Kobalte>
|
|
)
|
|
}
|