import { type ElementPart, type PropertyPart } from 'lit'; import { type PartInfo } from 'lit/directive.js'; import { type AbstractModel } from './Models.js'; export interface FieldBase { required: boolean; invalid: boolean; errorMessage: string; value: T | undefined; } export type FieldConstraintValidation = Readonly<{ validity: ValidityState; checkValidity(): boolean; }>; export type FieldElement = FieldBase & HTMLElement & Partial; export declare function isFieldElement(element: HTMLElement): element is FieldElement; interface FieldElementHolder { get element(): FieldElement; set element(element: FieldElement); } interface Field extends FieldBase { readonly model?: AbstractModel; } interface FieldState extends Field, FieldElementHolder { name: string; validity: ValidityState; strategy: FieldStrategy; } type EventHandler = (event: Event) => void; export type FieldStrategy = Field & FieldConstraintValidation & { onChange?: EventHandler; onInput?: EventHandler; removeEventListeners(): void; }; export declare abstract class AbstractFieldStrategy = FieldElement> implements FieldStrategy { #private; abstract required: boolean; abstract invalid: boolean; readonly model?: AbstractModel; constructor(element: E, model?: AbstractModel); get element(): E; set element(element: E); get value(): T | undefined; set value(value: T | undefined); set errorMessage(_: string); get validity(): ValidityState; get onChange(): EventHandler | undefined; set onChange(onChange: EventHandler | undefined); get onInput(): EventHandler | undefined; set onInput(onInput: EventHandler | undefined); checkValidity(): boolean; setAttribute(key: string, val: any): void; removeEventListeners(): void; } export declare class VaadinFieldStrategy = FieldElement> extends AbstractFieldStrategy { #private; constructor(element: E, model?: AbstractModel); set required(value: boolean); set invalid(value: boolean); set errorMessage(value: string); removeEventListeners(): void; checkValidity(): boolean; } export declare class GenericFieldStrategy = FieldElement> extends AbstractFieldStrategy { set required(value: boolean); set invalid(value: boolean); } type CheckedFieldElement = FieldElement & { checked: boolean; }; export declare class CheckedFieldStrategy = CheckedFieldElement> extends GenericFieldStrategy { get value(): T | undefined; set value(val: T | undefined); } export declare class CheckedGroupFieldStrategy = FieldElement> extends GenericFieldStrategy { get value(): T | undefined; set value(val: T | undefined); } type ComboBoxFieldElement = FieldElement & { value: string; selectedItem: T | null; }; export declare class ComboBoxFieldStrategy = ComboBoxFieldElement> extends VaadinFieldStrategy { get value(): T | undefined; set value(val: T | undefined); } export declare class VaadinStringFieldStrategy extends VaadinFieldStrategy { get value(): string | undefined; set value(val: string | undefined); } export declare class VaadinDateTimeFieldStrategy = FieldElement> extends VaadinFieldStrategy { get value(): T | undefined; set value(val: T | undefined); } type MultiSelectComboBoxFieldElement = FieldElement & { value: never; selectedItems: T; }; export declare class MultiSelectComboBoxFieldStrategy = MultiSelectComboBoxFieldElement> extends VaadinFieldStrategy { get value(): T; set value(val: any); } type SelectedFieldElement = FieldElement & { value: never; selected: T; }; export declare class SelectedFieldStrategy = SelectedFieldElement> extends GenericFieldStrategy { get value(): T; set value(val: T); } export declare function getDefaultFieldStrategy(elm: FieldElement, model?: AbstractModel): AbstractFieldStrategy; export declare const field: (_model: AbstractModel, _effect?: ((element: Element) => void) | undefined) => import("lit-html/directive.js").DirectiveResult<{ new (partInfo: PartInfo): { fieldState?: FieldState; render(_model: AbstractModel, _effect?: (element: Element) => void): symbol; update(part: ElementPart | PropertyPart, [model, effect]: [_model: AbstractModel, _effect?: ((element: Element) => void) | undefined]): symbol; readonly _$isConnected: boolean; }; }>; export {};