import type { Ref } from "../lib/svelte.svelte.js"; import type { ComponentProps, ComponentType, Config, FieldErrors, FormEnumOption, FoundationalComponentType, SchemaValue, UiOption } from "../form/index.js"; import type { EnumValueMapper } from "../options.svelte.js"; export interface Handlers { onblur?: () => void; oninput?: () => void; onchange?: () => void; } export interface WidgetCommonProps { type: "widget"; config: Config; value: V | undefined; handlers: Handlers; errors: FieldErrors; uiOption: UiOption; } export type WidgetType = keyof { [T in ComponentType as ComponentProps[T] extends WidgetCommonProps ? T : never]: T; }; export type FoundationalWidgetType = keyof { [T in WidgetType & FoundationalComponentType as WidgetCommonProps extends ComponentProps[T] ? T : never]: T; }; export interface Options { options: FormEnumOption[]; mapper?: EnumValueMapper; } export interface SingleSelectOptions extends Options { /** @deprecated use `clearable` instead */ hasInitialValue?: boolean; clearable?: boolean; mapped?: Ref; } export interface MultiSelectOptions extends Options { mapped?: Ref; } declare module "../form/index.js" { interface FoundationalComponents { textWidget: {}; numberWidget: {}; selectWidget: {}; checkboxWidget: {}; } interface ComponentProps { textWidget: WidgetCommonProps; numberWidget: WidgetCommonProps; selectWidget: WidgetCommonProps & SingleSelectOptions; checkboxWidget: WidgetCommonProps; } interface ComponentBindings { textWidget: "value"; numberWidget: "value"; selectWidget: "value"; checkboxWidget: "value"; } }