@nasl/types
Version:
NASL types for TypeScript Declaration
441 lines (415 loc) • 9.35 kB
TypeScript
/* 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;
}
}