import type { GridSizeUnit, GridSizeUnitStr, SchemaBoolean, SchemaExpression } from 'jamis-core';
import type { FormBaseControlSchema, FormControlProps, FormHorizontal, FormMode, FormSchema, IFormItemStore, IFormStore, SchemaClassName, SchemaCollection, SchemaObject } from '../types';
/**
 * Group 表单集合渲染器，能让多个表单在一行显示
 */
export interface FormControlSchema extends FormBaseControlSchema {
    type: 'control';
    /**
     * FormItem 内容
     */
    body: SchemaCollection;
}
/**
 * InputGroup
 *
 */
export interface InputGroupControlSchema extends FormBaseControlSchema {
    type: 'input-group';
    /**
     * @deprecated 已过期, 请使用 body
     */
    controls?: SchemaCollection;
    /** FormItem 集合 */
    body: SchemaCollection;
}
export interface InputGroupProps extends FormControlProps {
    body: Array<any>;
    formItem?: IFormItemStore;
    formStore: IFormStore;
}
export type GroupSubControl = SchemaObject & {
    /**
     * 列类名
     */
    columnClassName?: SchemaClassName;
    /**
     * 宽度占用比率。在某些容器里面有用比如 group
     */
    columnRatio?: GridSizeUnit;
    columnRatioExpr?: GridSizeUnit | SchemaExpression | Record<GridSizeUnitStr, boolean | SchemaBoolean>;
    mode?: FormMode;
    modeExpr?: SchemaExpression;
};
/**
 * Group 表单集合渲染器，能让多个表单在一行显示
 *
 */
export interface GroupControlSchema extends FormBaseControlSchema {
    type: 'group';
    /**
     * FormItem 集合
     */
    body: Array<GroupSubControl>;
    /**
     * 间隔
     */
    gap?: 'xs' | 'sm' | 'normal';
    /**
     * 配置时垂直摆放还是左右摆放。
     */
    direction?: 'horizontal' | 'vertical';
    /**
     * 配置子表单项默认的展示方式。
     */
    subFormMode?: FormMode;
    /**
     * 如果是水平排版，这个属性可以细化水平排版的左右宽度占比。
     */
    subFormHorizontal?: FormHorizontal;
    /**
     * 一行分配多少列, 只有在horizontal情况下才有用
     */
    columnCount?: FormSchema['columnCount'];
    /**
     * 每一项的样式类
     */
    itemClassName?: SchemaClassName;
}
