import { default as React } from 'react';
import { TCanCallback } from '../../AUtils/cbF';
import { IObject } from '../../AUtils/objF';
import { sF } from '../../AUtils/sF';
import { IABaseProps } from '../ABase/ABase';
import { TIdx } from '../ATypes/ATypes';
export interface IAListViewLabelProps<T extends IObject> {
    /**
     * def : IAListViewDef<T>
     *
     * Description : def of AListView
     */
    def: IAListViewDef<T>;
    /**
     * defKey : TIdx
     *
     * Description : defKey of AListView
     */
    defKey: TIdx;
    /**
     * item : T
     *
     * Description : item of AListView
     */
    item?: T;
}
export interface IAListViewContentProps<T extends IObject> {
    /**
     * def : IAListViewDef<T>
     *
     * Description : def of AListView
     */
    def: IAListViewDef<T>;
    /**
     * defKey : TIdx
     *
     * Description : defKey of AListView
     */
    defKey: TIdx;
    /**
     * item : T
     *
     * Description : item of AListView
     */
    item: T;
}
export type TAListViewBold = 'label' | 'content' | 'both' | keyof typeof sF.fontWeights;
export interface IAListViewDef<T extends IObject> {
    /**
     * bold? : TCanCallback<IAListViewLabelProps<T>, TAListViewBold>
     *
     * Description : bold of AListView, Default is label. Can be 'label', 'content', 'both' or specific weight like 'SemiBold'.
     */
    bold?: TCanCallback<IAListViewLabelProps<T>, TAListViewBold>;
    /**
     * content? : TCanCallback<IAListViewContentProps<T>, React.ReactNode>
     *
     * Description : content of AListView
     */
    content?: TCanCallback<IAListViewContentProps<T>, React.ReactNode>;
    /**
     * height? : number | string
     *
     * Description : height of AListView
     */
    height?: number | string;
    /**
     * label? : TCanCallback<IAListViewLabelProps<T>, React.ReactNode>
     *
     * Description : label of AListView
     */
    label?: TCanCallback<IAListViewLabelProps<T>, React.ReactNode>;
}
export type TAListViewDefs<T extends IObject> = {
    [key in Exclude<keyof T, symbol>]?: IAListViewDef<T>;
} & {
    [key in TIdx]?: IAListViewDef<T>;
};
export interface IAListViewProps<T extends IObject> extends IABaseProps {
    /**
     * bold? : TAListViewBold
     *
     * Description : global bold setting for AListView
     */
    bold?: TAListViewBold;
    /**
     * contentClassName? : string
     *
     * Description : contentClassName of AListView
     */
    contentClassName?: string;
    /**
     * contentStyle? : React.CSSProperties
     *
     * Description : contentStyle of AListView
     */
    contentStyle?: React.CSSProperties;
    /**
     * defaultDef? : IAListViewDef<T>
     *
     * Description : defaultDef of AListView. it affects no all defs, and can be overridden by each def.
     */
    defaultDef?: IAListViewDef<T>;
    /**
     * defs : TAListViewDefs<T>
     *
     * Description : defs of AListView
     */
    defs: TAListViewDefs<T>;
    /**
     * item : T
     *
     * Description : item of AListView
     */
    item?: T;
    /**
     * labelClassName? : string
     *
     * Description : labelClassName of AListView
     */
    labelClassName?: string;
    /**
     * noBorder? : boolean
     *
     * Description : noBorder of AListView
     */
    labelStyle?: React.CSSProperties;
    /**
     * labelWidth? : number | string
     *
     * Description : labelWidth of AListView
     */
    labelWidth?: number | string;
    /**
     * middleBorder? : string
     *
     * Description : css value for middle vertical border (e.g., '1px solid #e5e7eb')
     */
    middleBorder?: string;
    /**
     * noBorder? : boolean
     *
     * Description : noBorder of AListView
     */
    noBorder?: boolean;
    /**
     * onlyMiddleBorder? : boolean
     *
     * Description : when true, removes outer borders and keeps only the middle separator
     */
    onlyMiddleBorder?: boolean;
    /**
     * outerBorder? : string
     *
     * Description : css value for outer thick borders (left/right of container)
     */
    outerBorder?: string;
    /**
     * rowBottomBorder? : string
     *
     * Description : css value for each row bottom border when outer borders are used
     */
    rowBottomBorder?: string;
    /**
     * rowGap? : number | string
     *
     * Description : gap between rows. Adds top margin for rows except the first.
     */
    rowGap?: number | string;
    /**
     * rowHeight? : number | string
     *
     * Description : rowHeight of AListView
     */
    rowHeight?: number | string;
}
/**
 * AComponent : AListView
 *
 * Description : AListView is a list view component that can show the key:values of items
 *
 * Basic Usage :
 *
 *     const defs = {
 *       name : {label: 'Name~'}
 *       age : {content: ({item}) => item.age},
 *       height : {}
 *       description : {}
 *     }
 *     const defaultDef = {
 *       label: ({defKey}) => 'label is ' + defKey,
 *       content: ({defKey, item}) => 'content is ' + item[defKey]
 *     }
 *     const user = {name: 'John', age: 20, height: 180, description: 'good'}
 *
 *     if (case 1)
 *       <AListView defs={defs} item={user}/>
 *
 *     if (case 2)
 *       <AListView defs={defs} item={user} defaultDef={defaultDef}/>
 */
export declare const AListView: <T extends IObject>(props: IAListViewProps<T>) => import("react/jsx-runtime").JSX.Element;
