import { RadiantElement } from '@ecopages/radiant'; import type { ContextProvider } from '@ecopages/radiant/context'; import type { EventEmitter } from '@ecopages/radiant/tools/event-emitter'; import { formContext } from './form-context'; import type { FieldValues, Resolver, ValidationMode } from './types'; export type RuiFormProps = { defaultValues?: Partial; /** JSON default values for SSR / JSX attribute channel. */ defaultValuesData?: string; resolver?: Resolver; mode?: ValidationMode; reValidateMode?: ValidationMode; /** Receives validated values instead of performing a native form navigation. */ onSubmit?: (values: T) => void | Promise; /** Native form destination, used when `onSubmit` is not provided. */ action?: string; /** Native form HTTP method, used when `onSubmit` is not provided. */ method?: HTMLFormElement['method']; }; export type RuiFormSubmitDetail = { values: T; }; export type RuiFormInvalidDetail = { errors: Partial>; }; /** * `` — form coordinator with RHF-like validation and field registration. * * Owns the {@link FormStore}, publishes field presentation via {@link formContext}, * and exposes registration / validation entry points for `` connectors. * * @element rui-form * * @attr {('onSubmit'|'onBlur'|'onChange'|'onTouched'|'all')} mode - When validation * runs. Reflects to markup. Default: `onSubmit`. * @attr {('onSubmit'|'onBlur'|'onChange'|'onTouched'|'all')} revalidate-mode - When * fields re-validate after a failed submit. Reflects to markup. Default: `onChange`. * @attr {string} data-default-values - JSON-serialized default values for SSR / JSX * attribute channel. Default: `undefined`. * @attr {string} action - Native form destination when `onSubmit` is not provided. * @attr {string} method - Native form HTTP method when `onSubmit` is not provided. * * @fires rui-submit - Emitted when validation passes; `detail.values` holds field values. * @fires rui-invalid - Emitted when validation fails on submit; `detail.errors` maps * field names to error messages. * * @remarks * `defaultValues` and `resolver` are object props — they only reach the element via * `prop:` bindings from the `RuiForm` view, not plain attributes. * * @cssclass rui-form - Root form surface (`
`). */ export declare class RuiForm extends RadiantElement { formProvider: ContextProvider; submitEvent: EventEmitter; invalidEvent: EventEmitter; defaultValues: FieldValues; defaultValuesData?: string; resolver?: Resolver; mode: ValidationMode; reValidateMode: ValidationMode; action?: string; method?: HTMLFormElement['method']; onSubmit?: (values: FieldValues) => void | Promise; private store; private unsubscribeStore?; private readonly nativeFormId; private lastPublishedRevision; private lastPublishedContext; private readonly presentationListeners; private readonly formActions; connectedCallback(): void; protected onConnected(): void; private queryNativeForm; /** Link submit buttons left on the host outside the composed native ``. */ private wireOrphanSubmitButtons; private runFormSubmit; private hasNativeSubmission; disconnectedCallback(): void; private resolveMode; private resolveReValidateMode; private resolveDefaultValues; private ensureStore; private buildFieldPresentations; private publishFormContext; syncOptions(): void; syncResolver(): void; /** Save clicks must run validation even when the button is not associated with the inner ``. */ onSubmitButtonClick(event: Event): void; onNativeSubmit(event: SubmitEvent): void; onNativeReset(): void; }