/**
 * Trellis Forms Vanilla — framework-free bindings + DOM glue.
 *
 * Import from `trellis/forms/vanilla`:
 *
 *   const form = createVanillaForm(taskDescriptor);
 *   const unbind = bindFormToDOM(form, document.querySelector('form'), {
 *     title: '[name="title"]',
 *   }, async (values) => createEntity(type, values));
 *
 * @module trellis/forms/vanilla
 */
import type { AnyType } from '../../schema/define.js';
import type { FormDescriptor } from '../types.js';
import { type FieldBinding, type UseFormReturn } from '../core/index.js';
import type { FormState, FormValues } from '../core/types.js';
export type FormSchemaInput = AnyType | FormDescriptor;
export interface VanillaForm extends UseFormReturn {
    field: (name: string) => FieldBinding;
    subscribe: (listener: (state: FormState) => void) => () => void;
}
/** Create a framework-free form core with a state-subscription surface. */
export declare function createVanillaForm(schema: FormSchemaInput, initialValues?: FormValues): VanillaForm;
export interface DomBindOptions {
    /** Attribute name for per-field error text (`data-error-for="{name}"`). */
    errorAttribute?: string;
}
/**
 * Bind a vanilla form to real DOM: two-way value sync via `input`/`blur`,
 * submit handling with validation, and error text rendered into
 * `[data-error-for]` elements. Returns an unbind function.
 */
export declare function bindFormToDOM(form: VanillaForm, formElement: HTMLFormElement, fieldSelectors: Record<string, string>, onSubmit?: (values: FormValues) => Promise<void>, options?: DomBindOptions): () => void;
//# sourceMappingURL=index.d.ts.map