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