UNPKG

@nasl/types

Version:

NASL types for TypeScript Declaration

441 lines (415 loc) 9.35 kB
/* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/adjacent-overload-signatures */ declare namespace nasl.ui { /** * 设置器基类 */ export type BaseSetter<T extends object, K extends keyof T> = CustomSetter | InputSetter | SwitchSetter | EnumSelectSetter<T, K> | CapsulesSetter<T, K> | NumberInputSetter | IconSetter | ImageSetter | PropertySelectSetter | PropertyTransformSetter | AnonymousFunctionSetter; /** * 自定义属性设置器 */ export interface CustomSetter { concept: 'CustomSetter'; /** * 自定义属性设置器名称 */ name: string; /** * 参数映射 */ argumentMap: Record<string, string>; } /** * 输入框设置器 */ export interface InputSetter { concept: 'InputSetter'; /** * 占位文本 */ placeholder?: string; /** * 空值自动删除 */ autoClear?: boolean; } /** * 切换设置器 */ export interface SwitchSetter { concept: 'SwitchSetter'; } /** * 枚举选择设置器 */ export interface EnumSelectSetter<T extends object, K extends keyof T> { concept: 'EnumSelectSetter'; /** * 枚举选项列表 */ options: Array<SetterOption<T, K>>; /** * 是否多选 */ multiple?: boolean; /** * 是否可清空 */ clearable?: boolean; } /** * 胶囊设置器 */ export interface CapsulesSetter<T extends object, K extends keyof T> { concept: 'CapsulesSetter'; /** * 枚举选项列表 */ options: Array<SetterOption<T, K>>; /** * 是否多选 */ multiple?: boolean; } /** * 数字输入设置器 */ export interface NumberInputSetter { concept: 'NumberInputSetter'; /** * 按钮位置 */ placement?: string; /** * 最小值 */ min?: number; /** * 最大值 */ max?: number; /** * 精度 */ precision?: number; /** * 占位文本 */ placeholder?: string; } /** * 图标设置器 */ export interface IconSetter { concept: 'IconSetter'; /** * 图标标题 */ title?: string; /** * 使用自定义 iconfont 库 */ customIconFont?: string; /** * 隐藏上传图标功能 */ hideUploadIcon?: boolean; } /** * 图片设置器 */ export interface ImageSetter { concept: 'ImageSetter'; } /** * 属性选择设置器 */ export interface PropertySelectSetter { concept: 'PropertySelectSetter'; } /** * 属性选择设置器 */ export interface PropertyTransformSetter { concept: 'PropertyTransformSetter'; } /** * 匿名函数设置器 */ export interface AnonymousFunctionSetter { concept: 'AnonymousFunctionSetter'; } /** * 页面组件 */ export interface ViewComponentOpts { /** * 页面组件中划线名称 */ kebabName?: string; /** * 页面组件标题 */ title: string; /** * 所在分组 */ group?: string; /** * 页面组件图标 */ icon?: string; /** * 页面组件描述 */ description?: string; /** * 关于 TS 的 typeParams */ typeParams?: string; /** * 国际化配置列表 */ i18nMap?: Record<string, Record<string, string>>; } /** * 组件属性 */ export type PropOpts<T extends object, K extends keyof T> = { /** * 组件属性标题 */ title: string; /** * 组件属性分组 */ group?: '基础信息' | '数据属性' | '主要属性' | '交互属性' | '状态属性' | '样式属性' | '工具属性' | '高级属性'; /** * 组件属性图标 */ icon?: string; /** * 组件属性描述 */ description?: string; /** * 允许该组件在逻辑中设置 */ settable?: boolean; /** * 该属性是否为数据源 */ isDataSource?: boolean; /** * 工具提示链接 */ tooltipLink?: string; /** * 文档描述 */ docDescription?: string; /** * 隐藏绑定属性按钮 */ bindHide?: boolean; /** * 绑定属性并打开弹窗 */ bindOpen?: boolean; /** * 所在的 tab 页 */ tabKind?: 'property' | 'style'; /** * 属性设置器 */ setter?: BaseSetter<T, K>; /** * 属性在面板中的布局方式 * * block 表示标题与设置器分行展示;inline 表示同一行展示 */ layout?: 'block' | 'inline'; /** * 渲染时的设计值 */ designerValue?: any; /** * 是否显隐 * * 用 TS 写表达式,在 IDE 中直接 eval */ if?: (target: T) => boolean; /** * 是否禁用 * * 用 TS 写表达式,在 IDE 中直接 eval */ disabledIf?: (target: T) => boolean; /** * 在属性切换时发生的事件 * * 用 TS 写表达式,在 IDE 中直接 eval */ onChange?: Array<{ update: any; if?: (value: T[K]) => boolean } | { clear: Array<string>; if?: (value: T[K]) => boolean }>; } & ({ /** * 是否支持双向绑定 */ sync?: true; } | { /** * 是否支持双向绑定 */ sync?: false; /** * 是否将任意类型隐式转换成String * * 仅在属性类型为 string(不包括字符串枚举)的情况下,且 sync 为 falsy 时可配置 */ implicitToString?: T[K] extends string ? (string extends T[K] ? boolean : never) : never; }) /** * 组件事件 */ export interface EventOpts { /** * 组件事件标题 */ title: string; /** * 组件事件描述 */ description?: string; } /** * 插槽 */ export interface SlotOpts { /** * 插槽标题 */ title: string; /** * 插槽描述 */ description?: string; /** * 空的占位图 */ emptyBackground?: string; /** * 插槽代码块 */ snippets?: Array<ViewBlockWithImage>; } /** * 逻辑声明 */ export interface LogicOpts { /** * 逻辑标题 */ title: string; /** * 逻辑描述 */ description: string; } /** * 带分组的参数 */ export interface ParamOpts { /** * 输入参数描述 */ description?: string; /** * 是否为展开参数 */ spread?: boolean; /** * 标题 */ title: string; /** * 分组 */ group?: string; } /** * 设置器枚举选项 */ export interface SetterOption<T extends object = never, K extends keyof T = never> { /** * 选项值 */ value?: string; /** * 选项标题 */ title: string; /** * 选项图标 */ icon?: string; /** * 选项工具提示 */ tooltip?: string; /** * 是否显隐 * * 用 TS 写表达式,在 IDE 中直接 eval */ if?: (target: T) => boolean; /** * 是否禁用 * * 用 TS 写表达式,在 IDE 中直接 eval */ disabledIf?: (target: T) => boolean; } /** * 带截图的代码块 */ export interface ViewBlockWithImage { /** * 标题 */ title: string; /** * 代码 */ code: string; /** * 描述 */ description?: string; /** * 截图 */ screenshot?: string; /** * 手绘 */ drawing?: string; } /** * 页面组件的代码块 */ export interface ViewBlock { /** * 标题 */ title: string; /** * 代码 */ code: string; /** * 描述 */ description?: string; } }