import type { Snippet } from 'svelte'; import { type FormFieldStatus } from '../../../utils/formContext.js'; export interface FormFieldControlProps { id?: string; name?: string; value: string; status: FormFieldStatus; helperText?: string; disabled: boolean; required: boolean; setValue: (next: string) => void; clearError: () => void; } /** * Form-bound text input (email, tel, url, search, …). * * Kit remote: pass the encoded `name` (and `type`) from `.as()`, **not** the full * spread — Kit’s `value` get/set fights `$bindable` and can loop. * * @example * ```svelte * * ``` */ interface FormFieldProps { id?: string; name?: string; label?: string; placeholder?: string; value?: string; type?: 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'date' | 'time'; status?: FormFieldStatus; helperText?: string; errorMessage?: string; disabled?: boolean; readonly?: boolean; required?: boolean; clearable?: boolean; size?: 'sm' | 'md' | 'lg'; maxLength?: number; showCount?: boolean; /** * When true and inside `
`, keep `value` in sync with `form.data[name]`. * Uses the logical field name (strips Kit `/formId` when present). */ bindData?: boolean; /** * Override HTML `name` if logical `name` is separate. * Prefer passing Kit `.as(...).name` as `name` instead. */ inputName?: string; leadIcon?: Snippet; trailIcon?: Snippet; control?: Snippet<[FormFieldControlProps]>; class?: string; oninput?: (e: Event) => void; onchange?: (e: Event) => void; /** Absorbed if a Kit `.as()` object is spread by mistake. */ defaultValue?: unknown; 'aria-invalid'?: boolean | 'true' | 'false'; autocomplete?: string; uncontrolled?: boolean; } declare const FormField: import("svelte").Component; type FormField = ReturnType; export default FormField;