import type { VmPrimitive, VmRecord } from '@mirascript/mirascript'; import type { ExpressionFunction, ExpressionOrValue } from '../expression.js'; import type { ArgumentMap, ArgumentValue, ConditionExpression } from './argument.js'; import type { Constraint } from './constraint.js'; import type { ParameterDecoration } from './parameter-decoration.js'; import type { ParameterGroup } from './parameter-group.js'; export type { ArgumentMap }; /** 参数定义 */ export interface ParameterBase { /** 参数类型 */ type: T; /** 实现阶段用于索引的键值,即 {@link ArgumentMap} 的 key */ key: string; /** 名称 */ name: string; /** 详细描述 */ description: string; /** 参数可用的条件表达式 */ condition?: ConditionExpression; /** 参数初始值(默认值) */ value: ExpressionOrValue; /** 需要满足的其他约束 */ constraints?: Array>; /** 布局时占用的位置 */ span?: number; /** 装饰 */ before?: ParameterDecoration; /** 装饰 */ after?: ParameterDecoration; } export declare const NumericParameterInterval: readonly ["open", "left-open", "right-open", "closed"]; /** * 区间类型 */ export type NumericParameterInterval = (typeof NumericParameterInterval)[number]; /** * 数值类型参数定义 */ export interface NumericParameter extends ParameterBase { /** 允许的最小值 */ minimum?: number; /** 允许的最大值 */ maximum?: number; /** 区间选项 */ interval?: NumericParameterInterval; /** 数值单位 */ unit?: string; } /** * 实数类型参数定义 */ export interface RealParameter extends NumericParameter<'real'> { } /** * 整数类型参数定义 */ export interface IntegerParameter extends NumericParameter<'integer'> { } /** 可用于选项的值 */ export type ChoiceArgumentValue = NonNullable; /** 表示一个选项 */ export type Choice = { /** 选中该选项将存储的参数值,默认值为其在数组中的索引 */ key: V; /** 选项名称 */ name: string; /** 选项详细描述 */ description: string; /** 选项可用的条件表达式 */ condition?: ConditionExpression; }; /** 是否为选项 */ export declare function isChoice(value: unknown): value is Choice; /** * 表示值为选择项的参数定义 */ export interface ChoiceParameter extends ParameterBase<'choice', V> { /** * 可选取值及其对应的说明文本 */ choices: ExpressionOrValue>> | ExpressionFunction>>; } /** * 表示值为多选选择项的参数定义 */ export interface MultiSelectParameter extends ParameterBase<'multiSelect', V> { /** * 可选取值及其对应的说明文本 */ choices: ExpressionOrValue>> | ExpressionFunction>>; } /** * 表示值为布尔量的参数定义 */ export interface LogicalParameter extends ParameterBase<'logical', V> { /** * 可选取值及其对应的说明文本 */ choices?: ExpressionOrValue<[false: Choice, true: Choice]> | ExpressionFunction, true: Choice]>; } /** * 表示值为表格的参数定义 */ export interface TableParameter extends ParameterBase<'table', V> { /** 最小行数 */ minRowCount?: number; /** 最大行数 */ maxRowCount?: number; /** * 各列的定义 * * `key` 默认为列定义在 {@link columns} 中的索引 * * 当仅包含一列时,表格参数的值为该列定义的数组; * * 否则,表格参数的值为记录类型数组,每个记录包含各列定义的键值 */ columns: Parameter[] | ExpressionFunction; /** 添加额外属性以跟踪表格行 */ trackTag?: string; } /** 生成用于跟踪的额外属性值 */ export declare function generateTrackId(): number; /** * 表示值为简单记录类型的定义 * * 简单记录类型包含一组字段,其编辑界面按字段顺序线性排列,可以沿行或列排列。 * * 字段中可包含占位符,占位符在主轴上尺寸可自定义。 */ export interface RecordParameter extends ParameterBase<'record', V> { /** 主轴的优先方向 */ direction?: 'row' | 'column'; /** 包含的元素 */ items: Parameter[]; } /** * 表示值为包含分组的复杂记录的定义 * * 每个分组包含一组字段,与简单记录类似。在编辑界面,分组名和内容沿正交轴线型排列。当所有分组都没有名字时,分组名会被隐藏。 * * 各分组沿主轴排列时占据位置由 span 定义。 */ export interface GroupedParameter extends ParameterBase<'grouped', V> { /** 主轴的优先方向 */ direction?: 'row' | 'column'; /** 包含的元素 */ items: ParameterGroup[]; } /** 表示值为文本的参数定义 */ export interface TextParameter extends ParameterBase<'text', string> { /** 验证有效性的正则表达式 */ pattern?: string; /** 验证未通过的提示信息 */ patternErrorMessage?: string; /** 最小长度 */ minLength?: number; /** 最大长度 */ maxLength?: number; } /** 表示值为代码的参数定义 */ export interface CodeParameter extends ParameterBase<'code', string> { /** 代码的语言 */ language?: string; } /** * 文件类型说明符 * @example ".png" "image/*" */ export type FileTypeDescriptor = `.${string}` | `${string}/${string}`; /** 接受的文件内容格式 */ export type FileUrlCategory = 'embed' | 'storage' | 'link'; /** 表示值为文件的参数定义 */ export interface FileParameter extends ParameterBase<'file', string> { /** 支持的文件类型 */ accept?: FileTypeDescriptor | FileTypeDescriptor[]; /** 首选的文件处理方式 */ preference?: FileUrlCategory; } /** * 已定义的参数类型 */ export interface ParameterMap { /** 实数参数 */ real: RealParameter; /** 整数参数 */ integer: IntegerParameter; /** 选择参数 */ choice: ChoiceParameter; /** 多选参数 */ multiSelect: MultiSelectParameter; /** 布尔参数 */ logical: LogicalParameter; /** 表格参数 */ table: TableParameter; /** 文本参数 */ text: TextParameter; /** 代码参数 */ code: CodeParameter; /** 文件参数 */ file: FileParameter; /** 记录参数 */ record: RecordParameter; /** 分组记录参数 */ grouped: GroupedParameter; } /** 已定义的参数类型 type */ export type ParameterType = keyof ParameterMap; /** 已定义的参数类型 */ export type Parameter = ParameterMap[ParameterType]; /** 已定义的选择参数类型 */ export type ChoiceParameterType = { [K in keyof ParameterMap]: ParameterMap[K] extends { choices?: infer _; } ? ParameterMap[K]['type'] : never; }[keyof ParameterMap]; /** * 是否为参数定义 */ export declare function isParameter(value: unknown): value is Parameter; //# sourceMappingURL=parameter.d.ts.map