///
import * as React from 'react';
import { IterableLike } from '../../../WebRx';
import { PanelFragment, PanelItemContext, PanelItemProps, PanelRenderProps } from '../Panel';
export declare type ViewTemplate = (itemsPanel: PanelFragment, itemsPresenter: ItemsPresenter) => JSX.Element | null | false;
export declare type ItemsPanelTemplate = (itemTemplates: PanelFragment[], itemsPresenter: ItemsPresenter, items: T[] | undefined) => PanelFragment;
export interface ItemsPresenterTemplateProps {
/**
* template that wraps the entire control.
* use this to compose the exterior of the the view.
* render the items presenter where you want the items panel located.
*/
viewTemplate?: ViewTemplate;
/**
* template to render panel responsible for items layout.
* this template can control how items are rendered next to one another
* (i.e., wrapping, stack, grid, etc...)
*/
itemsPanelTemplate?: ItemsPanelTemplate;
/**
* template to render each item
*/
itemTemplate?: (item: T, index: number, context?: any) => PanelFragment;
}
export interface ItemsPresenterSourceProps {
/**
* data source of items to render
* if omitted then component children is used in place
*/
itemsSource?: IterableLike;
}
export interface ItemsPresenterProps extends ItemsPresenterTemplateProps, ItemsPresenterSourceProps, PanelItemProps, PanelRenderProps {
}
export interface ItemsPresenterComponentProps extends React.HTMLProps, ItemsPresenterProps {
fill?: boolean;
}
export declare class ItemsPresenter extends React.Component {
static displayName: string;
static defaultItemTemplate(item: {}, index: number, context?: any): JSX.Element;
static defaultPanelTemplate(itemTemplates: PanelFragment[], itemsPresenter: ItemsPresenter): JSX.Element;
static defaultViewTemplate(itemsPanel: PanelFragment, itemsPresenter: ItemsPresenter): JSX.Element;
render(): false | JSX.Element | null;
protected getItemsPanelTemplate(): ItemsPanelTemplate;
protected renderItemTemplates(): {
items: undefined;
itemTemplates: React.ReactChild[];
} | {
items: {}[];
itemTemplates: React.ReactNode[];
};
protected renderPanelTemplate(): PanelFragment;
protected renderViewTemplate(): JSX.Element | null | false;
}