| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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>
- )
- }
|