import { FormInstance } from 'rc-field-form/es/interface'; export { FormInstance } from 'rc-field-form/es/interface'; import React from 'react'; /** 布局分组配置,用于主题多分组渲染 */ interface GridLayoutGroup { /** 分组唯一标识 */ key: string /** 分组显示标签 */ label?: string [key: string]: unknown } /** 字段项盒模型配置(margin / padding / align / autoHeight) */ interface BoxStyle { /** 是否按内容自适应高度(不再固定跨行) */ autoHeight?: boolean /** 对齐方式,写入 `--grid-layout-box-align-items` */ alignItems?: string /** 主轴对齐方式,写入 `--grid-layout-box-justify-content` */ justifyContent?: string /** 外边距 - 上(px) */ marginTop?: number /** 外边距 - 右(px) */ marginRight?: number /** 外边距 - 下(px) */ marginBottom?: number /** 外边距 - 左(px) */ marginLeft?: number /** 内边距 - 上(px) */ paddingTop?: number /** 内边距 - 右(px) */ paddingRight?: number /** 内边距 - 下(px) */ paddingBottom?: number /** 内边距 - 左(px) */ paddingLeft?: number } /** * 字段内容配置基础类型(ff-grid-layout 与 ff-grid-layout-form 共用) */ interface LayoutField { /** 字段标识,对应 rc-field-form 的 name */ code?: string /** 字段标签 */ label?: string /** 传给控件 $setting 的扩展配置 key 集合(key 存在时从 props 拆分为 extraProps) */ extras?: Record /** 是否虚拟字段,为 true 时不绑定表单字段(name 传 null) */ isVirtual?: boolean /** 初始值,或 initialValueLanguage 为 'javascript' 时的表达式源码 */ initialValue?: unknown /** 初始值类型,'javascript' 时把 initialValue 当表达式执行 */ initialValueLanguage?: string /** 字段值目标类型(string / number / boolean / array 等),用于 toPrimitive 转换 */ type?: string /** 部件标识;以 `@` 或 `blob:` 开头时按原样使用,否则拼接 widgetPrefix */ widget?: string /** widget 非绝对标识时使用的前缀 */ widgetPrefix?: string /** 盒模型配置;getNormalizeFields 渲染时从 field 中提取,不传给 ItemWidget */ boxStyle?: BoxStyle [key: string]: unknown } /** * ff-grid-layout 字段内容配置(在 LayoutField 基础上增加展示值转换配置) */ interface GridLayoutField extends LayoutField { /** 展示值转换表达式(交给 DataConverter 处理) */ convertJs?: unknown /** convertJs 表达式的附加配置 */ convertJsSetting?: unknown } /** 布局字段项(网格坐标 + 字段内容),对应 getNormalizeFields 入参列表的每一项 */ interface GridLayoutItem { /** 字段唯一标识,用作 React key;优先于数组下标 */ i?: unknown /** 网格 x 坐标(起始列,0-indexed) */ x?: number /** 网格 y 坐标(起始行,0-indexed) */ y?: number /** 网格宽度(列数) */ w?: number /** 网格高度(行数) */ h?: number /** 所属分组的 key,缺省时归入 'default' 分组 */ group?: string /** 字段内容配置;field.boxStyle 决定盒模型,其余字段传给 ItemWidget */ field?: GridLayoutField [key: string]: unknown } /** GridLayout 组件的布局配置参数(不含 form/DOM 相关 props) */ interface GridLayoutProps { /** 栅格列数,默认 12 */ cols?: number /** 栅格行高(px),默认 21 */ rowHeight?: number /** 容器内边距 [纵向, 横向](px),默认 [0, 0] */ containerPadding?: [number, number] /** 字段项间距 [纵向, 横向](px),默认 [4, 0] */ itemMargin?: [number, number] /** 布局字段配置列表 */ fields?: GridLayoutItem[] /** 字段分组配置,用于主题多分组渲染 */ groups?: GridLayoutGroup[] /** 主题组件标识,通过 core.getWidgetComponent 异步加载 */ theme?: string /** 传给主题组件的 $setting 配置 */ themeProps?: Record } /** useStructure 返回的布局结构数据,请求完成前为 `{ items: [] }` */ interface GridLayoutStructure extends GridLayoutProps { /** 布局唯一标识 */ uuid?: string /** 布局编码 */ code?: string /** 布局名称 */ name?: string /** 关联资源标识 */ resource?: string /** 记录主键 */ primaryKey?: unknown /** 布局字段配置列表(API 返回名,组件侧对应 GridLayoutProps.fields) */ items?: GridLayoutItem[] } /** useField 返回值:[经 convertJs 转换后的展示值(未配置时等于原值), 原始字段值] */ /** * useFnRun / useField 内 func.exec 脚本上下文中可调用的字段读取 API; * 由 useFnRun 注入,包含当前表单与外层(basicForm)表单的只读接口 */ type GridLayoutFieldAPI = Pick & { /** 从外层(basicForm)表单获取字段值;无 basicForm 时返回 null */ getFieldValueForBasicForm: (name: Parameters[0]) => unknown } type UseFieldReturn = [displayValue: unknown, rawValue: unknown] /** useFnRun 返回值:[按 resultType 转换后的执行结果, 执行出错时的错误对象(null 表示无错误)] */ type UseFnRunReturn = [result: unknown, error: unknown] /** rc-field-form 内部钩子的注册标识 */ declare const HOOK_MARK: "RC_FORM_INTERNAL_HOOKS"; /** * 按布局 code 拉取布局结构定义(字段、主题、栅格设置等),code 变化时重新请求 * @param {string} code 布局的唯一编码 * @returns {GridLayoutStructure} 布局结构数据,请求完成前为 `{ items: [] }` */ declare function useStructure(code: string): GridLayoutStructure; /** * 关联表单字段值,支持初始值表达式求值、watch 联动更新以及经 DataConverter 转换后的展示值 * @param {string} name 字段名(rc-field-form 的字段路径) * @param {Object} setting 字段取值相关配置 * @param {*} [setting.initialValue] 初始值,或语言为 javascript 时的表达式源码 * @param {string} [setting.initialValueLanguage] 初始值类型,'javascript' 时把 initialValue 当表达式执行 * @param {*} [setting.convertJs] 用于生成展示值的转换表达式(交给 DataConverter 处理) * @param {*} [setting.convertJsSetting] convertJs 表达式的附加配置 * @param {string} [setting.type='string'] 字段值的目标类型,用于类型转换 * @param {*} [pContext] 表达式里 getFieldValueForBasicForm 取值用的外层表单实例 * @returns {UseFieldReturn} */ declare function useField(name: string, { initialValue, initialValueLanguage, convertJs, convertJsSetting, type, }: { initialValue?: any; initialValueLanguage?: string; convertJs?: any; convertJsSetting?: any; type?: string; }, pContext?: any): UseFieldReturn; /** * 按 (y, x) 排序将字段列表归一化为渲染项列表(每项已用给定的 ItemWidget 渲染成元素) * @param {GridLayoutItem[]} fields 字段配置列表 * @param {Function} ItemWidget 用于渲染每个字段的组件 * @param {*} [basicForm] 传给每个字段渲染项的外层表单实例 * @returns {ReactNode[]} 已排序并渲染完成的元素列表 */ declare function useGridLayoutFields(fields: GridLayoutItem[], ItemWidget: Function, basicForm?: any): React.ReactNode[]; /** * 执行一段 JS 表达式/函数并跟踪其依赖的表单字段,依赖字段变化时自动重新执行 * @param {string} fn 要执行的表达式源码,为空时直接返回 initialValue * @param {*} initialValue 初始值/执行出错时的回退值 * @param {Object} [params] 传给表达式的额外参数 * @param {Partial} [fns] 传给表达式的额外可调用函数(useFnRun 会在此基础上注入 getFieldValue/isFieldTouched 等) * @param {*} [basicForm] 表达式里 getFieldValueForBasicForm 取值用的外层表单实例 * @param {string} [resultType] 结果值的目标类型,用于类型转换 * @returns {UseFnRunReturn} */ declare function useFnRun(fn: string, initialValue: any, params?: any, fns?: Partial, basicForm?: any, resultType?: string): UseFnRunReturn; /** * 按 widget 标识异步加载并渲染对应的部件组件,加载完成前不渲染任何内容; * 加载出错时渲染错误信息文本 * @param {Object} props * @param {string} [props.widget] 部件标识;以 `@` 或 `blob:` 开头时按原样使用,否则拼接 widgetPrefix 前缀 * @param {string} [props.widgetPrefix='@pkg/ff/grid-layouts'] widget 非绝对标识时使用的前缀 * @param {FormInstance} [props.basicForm] 表达式求值/字段联动用的外层表单实例 */ declare function GridLayoutWidget({ widget, widgetPrefix, basicForm, ...props }: { widget?: string; widgetPrefix?: string; basicForm?: FormInstance; }): undefined; /** * 按 theme 标识异步加载主题外壳组件,并把每个分组(items)渲染成 itemRender 生成的内容后传给主题组件; * theme 未指定时不渲染,加载出错时渲染错误信息文本 * @param {Object} props * @param {string} [props.theme] 主题组件标识,通过 core.getWidgetComponent 加载 * @param {*} [props.basicForm] 传给主题组件及各分组内容的外层表单实例 * @param {GridLayoutGroup[]} [props.items=[{key:'default',label:'默认'}]] 分组配置列表 * @param {GridLayoutItem[]} [props.fields=[]] 全部布局字段,按分组 key 过滤后分给对应 items 项 * @param {(item: GridLayoutGroup, fields: GridLayoutItem[], children: *) => *} [props.itemRender] 生成单个分组渲染内容的函数 * @param {Array} [props.chunks=[]] 额外附加在 items 之后、不参与过滤的分组项 * @param {*} [props.children] 仅附加给 key 为 'default' 的分组的内容 * @param {Object} [props.$setting={}] 传给主题组件的基础设置,会与 themeSetting 合并 */ declare function GridLayoutFramework({ theme, basicForm, items, fields, itemRender, chunks, children, $setting, ...themeSetting }: { theme?: string; basicForm?: any; items?: GridLayoutGroup[]; fields?: GridLayoutItem[]; itemRender?: (item: GridLayoutGroup, fields: GridLayoutItem[], children: any) => any; chunks?: any[]; children?: any; $setting?: any; }): undefined; /** * 栅格布局容器,按 fields 描述的位置/尺寸渲染各字段部件,并托管一个 rc-field-form 表单; * 指定 theme 时委托 GridLayoutFramework 渲染主题外壳,否则直接渲染默认分组 * @param {Object} props * @param {string} [props.name] 表单字段容器名(即 __LAYOUT_KEY__ 语义,由 GridLayoutHoc 传入) * @param {FormInstance} [props.form] 外部传入的 rc-field-form 表单实例,不传时内部自建 * @param {FormInstance} [props.basicForm] 表达式求值/字段联动用的外层表单实例 * @param {Object} [props.style] 容器行内样式 * @param {string} [props.className] 容器额外 class 名 * @param {number} [props.cols=12] 栅格列数 * @param {number} [props.rowHeight=21] 栅格行高(px) * @param {[number, number]} [props.containerPadding=[0, 0]] 容器内边距 [纵向, 横向](px) * @param {[number, number]} [props.itemMargin=[4, 0]] 字段项间距 [纵向, 横向](px) * @param {Object} [props.formProps={}] 注入为 `__PROPS__` 字段值的表单级参数 * @param {Array} [props.formFields=[]] 额外注入的表单字段(与 formProps 一并作为初始 fields) * @param {GridLayoutItem[]} [props.fields=[]] 布局字段配置列表(位置、尺寸、部件类型等) * @param {Object} [props.data] 初始化/回填表单的数据 * @param {string} [props.theme] 主题组件标识,指定时通过 GridLayoutFramework 渲染主题外壳 * @param {Object} [props.themeProps={}] 传给主题组件的额外参数 * @param {GridLayoutGroup[]} [props.groups=[{key:'default',label:'默认'}]] 字段分组配置,用于主题多分组渲染 * @param {*} [props.children] 附加渲染在字段项之后的内容 */ declare function GridLayout({ name, form: initForm, basicForm, style, className, cols, rowHeight, containerPadding, itemMargin, formProps, formFields, fields, data, theme, themeProps, groups, children, ...props }: { name?: string; form?: FormInstance; basicForm?: FormInstance; style?: any; className?: string; cols?: number; rowHeight?: number; containerPadding?: [number, number]; itemMargin?: [number, number]; formProps?: any; formFields?: any[]; fields?: GridLayoutItem[]; data?: any; theme?: string; themeProps?: any; groups?: GridLayoutGroup[]; children?: any; }): React.JSX.Element; export { GridLayout, GridLayoutFramework, GridLayoutWidget, HOOK_MARK, useField, useFnRun, useGridLayoutFields, useStructure }; export type { BoxStyle, GridLayoutField, GridLayoutFieldAPI, GridLayoutGroup, GridLayoutItem, GridLayoutProps, GridLayoutStructure, LayoutField, UseFieldReturn, UseFnRunReturn };