duoyun-ui
Version:
A lightweight desktop UI component library, implemented using Gem
94 lines • 3.15 kB
TypeScript
import { GemElement, TemplateResult } from '@mantou/gem/lib/element';
import type { StyleObject } from '@mantou/gem/lib/utils';
import type { DuoyunFormItemElement } from '../elements/form';
import type { ModalOpenOptions, ModalOptions } from '../elements/modal';
import '../elements/button';
import '../elements/form';
import '../elements/sort-box';
import '../elements/space';
type ListOptions = {
add?: boolean | string | TemplateResult;
remove?: boolean | string | TemplateResult;
initItem?: any;
sortable?: boolean;
};
type FormItemProps<T = unknown> = {
label: string;
type: DuoyunFormItemElement['type'];
field: keyof T | string[];
style?: StyleObject;
disabled?: boolean;
hidden?: boolean;
ignore?: boolean;
required?: boolean;
rules?: DuoyunFormItemElement['rules'];
slot?: TemplateResult | HTMLElement | HTMLElement[];
autofocus?: boolean;
placeholder?: string;
multiple?: boolean;
searchable?: boolean;
clearable?: boolean;
rows?: number;
step?: number;
min?: number;
max?: number;
options?: DuoyunFormItemElement['options'];
dependencies?: (keyof T | string[])[];
/**dependencies change, text change, text clear select search */
getOptions?: (search: string, data: T) => Promise<DuoyunFormItemElement['options']>;
/**dependencies change, this.data change */
getInitValue?: (data: T) => any;
/**update field setting for any field change */
update?: (data: T) => Partial<FormItemProps<T>>;
list?: boolean | ListOptions;
};
export type FormItem<T = unknown> = TemplateResult | FormItemProps<T> | FormItemProps<T>[] | {
fieldset: (TemplateResult | FormItemProps<T> | FormItemProps<T>[])[];
label?: string;
};
type OptionsRecord = {
loading: boolean;
options?: DuoyunFormItemElement['options'];
};
type State<T> = {
data: T;
optionsRecord: Partial<Record<string, OptionsRecord>>;
ignoreCache: Partial<Record<string, any>>;
};
export declare class DyPatFormElement<T = Record<string, unknown>> extends GemElement {
#private;
data?: T;
formItems?: FormItem<T>[];
render: () => TemplateResult;
state: ((payload?: Partial<State<T>> | undefined) => any) & Omit<{
name: never;
apply: never;
call: never;
bind: never;
toString: never;
prototype: never;
length: never;
arguments: never;
caller: never;
[Symbol.hasInstance]: never;
[Symbol.metadata]: never;
}, keyof State<T>> & State<T>;
valid: () => Promise<boolean>;
}
type CreateFormOptions<T> = {
type?: 'modal' | 'drawer';
style?: StyleObject;
query?: [string, any];
} & ModalOptions & ModalOpenOptions<T> & Pick<DyPatFormElement<T>, 'formItems' | 'data'>;
/**
* !WARNING
*
* form field not contain `,`
*/
export declare function createForm<T = Record<string, unknown>>(options: CreateFormOptions<T>): import("../lib/utils").DyPromise<T, {
modal: import("../elements/modal").DuoyunModalElement;
}> & {
modal: import("../elements/modal").DuoyunModalElement;
};
export {};
//# sourceMappingURL=form.d.ts.map