import * as React from "react";
/**
* The accessible-name / description / validation contract that {@link FormField} injects onto its
* single control child (via `cloneElement`). EVERY form-capable `@godxjp/ui` component accepts
* these props and forwards them to its **semantic focus target** — the real `` / combobox /
* trigger the user tabs to, never a presentational wrapper `
`.
*/
export interface FieldA11yProps {
"aria-label"?: string;
"aria-labelledby"?: string;
"aria-describedby"?: string;
"aria-errormessage"?: string;
"aria-invalid"?: React.AriaAttributes["aria-invalid"];
"aria-required"?: React.AriaAttributes["aria-required"];
"data-field"?: string;
}
/**
* Merge one or more space-separated id-reference lists (`aria-describedby`, `aria-labelledby`,
* `aria-errormessage`) into a single deduplicated token list. Returns `undefined` when empty so the
* attribute is omitted rather than rendered as `""`.
*/
export declare function mergeAriaIds(...values: Array): string | undefined;
/**
* Extract ONLY the defined field-a11y attributes from a props bag, ready to spread onto a
* component's semantic focus target. Undefined entries are dropped so a forwarded contract never
* clobbers a control's own intrinsic `aria-label` / `aria-invalid`.
*/
export declare function pickFieldA11y(props: FieldA11yProps): FieldA11yProps;
/**
* The inverse of {@link pickFieldA11y}: everything EXCEPT the field-a11y attributes. Use it when a
* component must route the contract somewhere other than the element the remaining props land on —
* e.g.
*/
export declare function omitFieldA11y(props: T): Omit;
/**
* As {@link pickFieldA11y}, but resolves the accessible **name** for a control that also has an
* intrinsic `aria-label` (e.g. SearchInput's built-in "Search"): when the FormField supplies an
* `aria-labelledby`, it wins and the intrinsic `aria-label` is dropped (a control must not carry
* both — `aria-labelledby` takes precedence and the redundant `aria-label` only adds noise).
*/
export declare function resolveFieldA11y(props: FieldA11yProps, intrinsicAriaLabel?: string): FieldA11yProps;
/**
* `cloneElement` can only wire the field-a11y contract onto FormField's single direct child. When
* that child is a layout wrapper (a `Flex` holding a range from/to pair, a 年/月 input+select
* combo), the naming attributes stop on the wrapper `div` and every control inside is left with no
* accessible name at all (axe: `label` on the inputs, `button-name` on select/combobox triggers).
*/
export interface FieldNameContextValue {
/** DOM id of FormField's visible label element (the `aria-labelledby` target). */
labelId: string;
/** The label's plain-text content, when it is a string (belt-and-suspenders `aria-label`). */
label?: string;
}
/**
* Write attributes onto the real `` react-aria hides inside a Checkbox / Radio / Switch.
*
* react-aria renders the painted control as a `