Files

174 lines
5.0 KiB
TypeScript
Raw Permalink Normal View History

2026-02-10 08:05:03 +08:00
export type Classes = Array<string>;
export interface Styles {
[css: string]: string | number;
}
export type ImageEvent = any;
export type PlainObject = { [key: string]: any };
export type OptionData = {
label?: string;
value?: string | number;
} & PlainObject;
export type TreeOptionData<T = string | number> = {
children?: Array<TreeOptionData<T>> | boolean;
/** option label content */
label?: string;
/** option search text */
text?: string;
/** option value */
value?: T;
/** option node content */
content?: string;
} & PlainObject;
export type FormResetEvent = Event;
export type FormSubmitEvent = Event;
/**
* on
* @param T -
* @param MakeRequired - false
*/
export type TransformEventHandlers<
T,
MakeRequired extends boolean = false
> = MakeRequired extends true
? {
[K in keyof T as K extends `on${infer Event}`
? Uncapitalize<Event>
: never
]-?: T[K]
}
: {
[K in keyof T as K extends `on${infer Event}`
? Uncapitalize<Event>
: never
]: T[K]
};
type WrapWithContext<T extends (...args: any[]) => any> =
T extends (...args: infer P) => infer R
? (context: { [K in keyof P]: P[K] }) => R
: never;
export type WrapParamsWithContext<T> = {
[K in keyof T]: T[K] extends (...args: any[]) => any
? WrapWithContext<T[K]>
: T[K];
};
// 提取非 on 开头的属性
export type ExtractNonOnProps<T> = {
[K in keyof T as K extends `on${string}` ? never : K]: T[K]
};
export interface IsEmailOptions {
allow_display_name?: boolean;
require_display_name?: boolean;
allow_utf8_local_part?: boolean;
require_tld?: boolean;
allow_ip_dot?: boolean;
domain_specific_validation?: boolean;
host_blacklist?: string[];
ignore_max_length?: boolean;
}
export interface IsURLOptions {
protocols?: string[];
require_tld?: boolean;
require_protocol?: boolean;
require_host?: boolean;
require_port?: boolean;
require_valid_protocol?: boolean;
allow_underscores?: boolean;
host_whitelist?: (string | RegExp)[];
host_blacklist?: (string | RegExp)[];
allow_trailing_dot?: boolean;
allow_protocol_relative_urls?: boolean;
disallow_auth?: boolean;
validate_length?: boolean;
}
/**
*
* */
export type SizeEnum = 'small' | 'medium' | 'large';
export type ShapeEnum = 'circle' | 'round';
export type HorizontalAlignEnum = 'left' | 'center' | 'right';
export type VerticalAlignEnum = 'top' | 'middle' | 'bottom';
export type LayoutEnum = 'vertical' | 'horizontal';
export type ClassName = { [className: string]: any } | ClassName[] | string;
export type CSSSelector = string;
export interface KeysType {
value?: string;
label?: string;
disabled?: string;
}
export interface TreeKeysType extends KeysType {
children?: string;
}
export interface HTMLElementAttributes {
[attribute: string]: string;
}
export interface TScroll {
/**
*
* @default 20
*/
bufferSize?: number;
/**
* `scroll.type` `virtual` `true` `scroll.rowHeight`
* @default false
*/
isFixedRowHeight?: boolean;
/**
* 使
*/
rowHeight?: number;
/**
* `scroll.threshold`
* @default 100
*/
threshold?: number;
/**
* <br /> `lazy` <br />`virtual`
*/
type: 'lazy' | 'virtual';
}
/**
* @deprecated use TScroll instead
*/
export type InfinityScroll = TScroll;
export interface ScrollToElementParams {
/** 跳转元素下标 */
index?: number;
/** 跳转元素距离顶部的距离 */
top?: number;
/** 单个元素高度非固定场景下,即 isFixedRowHeight = false。延迟设置元素位置一般用于依赖不同高度异步渲染等场景单位毫秒 */
time?: number;
behavior?: 'auto' | 'smooth';
}
export interface ComponentScrollToElementParams extends ScrollToElementParams {
key?: string | number;
}