import type { JSX, ValidComponent } from "@solidjs/web"; import type { FieldRootState } from "../../internals/field-constants.js"; import { type MaybeAccessor } from "../../internals/maybe-accessor.js"; import type { BaseUIComponentProps } from "../../internals/types.js"; import { type NumberFieldRootChangeEventDetails, type NumberFieldRootCommitEventDetails } from "./number-field-root-context.js"; export type { NumberFieldRootChangeEventDetails, NumberFieldRootChangeEventReason, NumberFieldRootCommitEventDetails, NumberFieldRootCommitEventReason, } from "./number-field-root-context.js"; /** Overall state used by every `` part's `data-*` projection. */ export interface NumberFieldRootState extends FieldRootState { value: number | null; inputValue: string; required: boolean; disabled: boolean; readOnly: boolean; scrubbing: boolean; } export interface NumberFieldRootProps extends Omit, "onChange"> { /** Tag/component to render. Defaults to `"div"`. */ as?: ValidComponent; id?: string | undefined; min?: MaybeAccessor; max?: MaybeAccessor; /** * When true, direct text entry may be outside the `min`/`max` range * without clamping, so native range underflow/overflow validation can * occur. Step-based interactions (keyboard arrows, buttons, wheel, * scrub) still clamp. * @default false */ allowOutOfRange?: MaybeAccessor; /** @default 0.1 */ smallStep?: MaybeAccessor; /** @default 1 */ step?: MaybeAccessor; /** @default 10 */ largeStep?: MaybeAccessor; /** @default false */ required?: boolean | undefined; /** @default false */ disabled?: boolean | undefined; /** @default false */ readOnly?: boolean | undefined; name?: string | undefined; form?: string | undefined; /** * Controlled value. `null` means empty. While its resolved value is not * `undefined` the consumer owns the state — pair with * {@link onValueChange}. When omitted, the field manages its own value * (seeded from {@link defaultValue}). */ value?: MaybeAccessor; /** * Initial value when uncontrolled. `null` means empty. Read once at * mount. To render a controlled number field, use the `value` prop * instead. * @default null */ defaultValue?: MaybeAccessor; /** @default false */ allowWheelScrub?: boolean | undefined; /** @default false */ snapOnStep?: MaybeAccessor; format?: MaybeAccessor; onValueChange?: ((value: number | null, eventDetails: NumberFieldRootChangeEventDetails) => void) | undefined; onValueCommitted?: ((value: number | null, eventDetails: NumberFieldRootCommitEventDetails) => void) | undefined; locale?: MaybeAccessor; /** A setter to capture the hidden input element. */ inputRef?: ((element: HTMLInputElement | null) => void) | undefined; } /** * Groups all parts of the number field and manages its state. Renders a * `
`. * * Logical state (value normalization, step math, formatting, increment / * decrement) is owned by `createNumberField`. This wrapper retains DOM * concerns: field registration, hidden input, wheel listener, `disabled` / * `readOnly` / `required` resolved against the ``, and the * shared mutable refs that child event handlers need synchronously. */ export declare function NumberFieldRoot(props: NumberFieldRootProps): JSX.Element; export declare namespace NumberFieldRoot { type State = NumberFieldRootState; type Props = NumberFieldRootProps; type ChangeEventDetails = NumberFieldRootChangeEventDetails; type CommitEventDetails = NumberFieldRootCommitEventDetails; } //# sourceMappingURL=number-field-root.d.ts.map