import * as React from 'react';
import { BaseHtmlProps, BaseProps } from '../../wui-core/src/iCore';
import { Breakpoint, ScreenMap, ResponsiveMap } from '../../wui-core/src/LayoutUtils';
export type LayoutTag = 'header' | 'footer' | 'main' | 'section';
export interface GeneratorProps {
suffixCls: string;
tagName: LayoutTag;
displayName: string;
}
export interface BasicProps extends BaseHtmlProps {
prefixCls?: string;
hasSider?: boolean;
}
export interface LayoutContextProps {
siderHook: {
addSider: (id: string) => void;
removeSider: (id: string) => void;
};
}
export interface BasicPropsWithTagName extends BasicProps {
tagName?: LayoutTag;
}
export interface SiderContextProps {
siderCollapsed?: boolean;
collapsedWidth?: number | string;
}
export type ThemeType = 'light' | 'dark';
export interface SiderProps extends BaseHtmlProps {
prefixCls?: string;
collapsible?: boolean;
collapsed?: boolean;
defaultCollapsed?: boolean;
reverseArrow?: boolean;
onCollapse?: (collapsed: boolean, type: string) => void;
zeroWidthTriggerStyle?: React.CSSProperties;
trigger?: React.ReactNode;
width?: number | string;
collapsedWidth?: number | string;
breakpoint?: Breakpoint;
theme?: 'light' | 'dark';
onBreakpoint?: (broken: boolean) => void;
}
export interface ContainerProps extends BaseHtmlProps {
fluid?: boolean;
componentClass?: React.ElementType;
}
export type Gutter = number | Partial>;
export type RowAligns = 'top' | 'middle' | 'bottom';
export type RowJustify = 'start' | 'end' | 'center' | 'space-around' | 'space-between';
export interface RowProps extends Omit, 'wrap' | 'size'> {
componentClass?: React.ElementType;
grid?: 12 | 24;
direction?: string;
gutter?: Gutter | [Gutter, Gutter];
align?: RowAligns;
justify?: RowJustify;
prefixCls?: string;
wrap?: boolean;
size?: ResponsiveMap;
}
export interface RowState {
supportFlexGap: boolean;
screens: ScreenMap;
}
type ColSpanType = number | string;
type FlexType = number | 'none' | 'auto' | string;
export interface ColSize {
span?: ColSpanType;
order?: ColSpanType;
offset?: ColSpanType;
push?: ColSpanType;
pull?: ColSpanType;
}
export type ColPropsKey = 'xsOffset' | 'smOffset' | 'mdOffset' | 'lgOffset' | 'xlOffset' | 'xxlOffset' | 'xsPush' | 'smPush' | 'mdPush' | 'lgPush' | 'xlPush' | 'xxlPush' | 'xsPull' | 'smPull' | 'mdPull' | 'lgPull' | 'xlPull' | 'xxlPull';
export interface ColProps extends BaseHtmlProps, Partial> {
componentClass?: React.ElementType;
/**
* xs显示列数
*/
xs?: ColSpanType | ColSize;
/**
* sm显示列数
*/
sm?: ColSpanType | ColSize;
/**
* md显示列数
*/
md?: ColSpanType | ColSize;
/**
* lg显示列数
*/
lg?: ColSpanType | ColSize;
/**
* xl显示列数
*/
xl?: ColSpanType | ColSize;
/**
* xxl显示列数
*/
xxl?: ColSpanType | ColSize;
/**
* 显示列数
*/
span?: number;
/**
* 偏移列数
*/
offset?: number;
/**
* 左偏移列数
*/
pull?: number;
/**
* 右偏移列数
*/
push?: number;
order?: number;
flex?: FlexType;
}
export interface ColState {
screens: ScreenMap;
}
export type SplitType = 'vertical' | 'horizontal';
export interface SpliterProps extends BaseProps {
allowResize: boolean;
children?: React.ReactNode[];
primary: 'first' | 'second';
minSize: string | number;
maxSize?: string | number;
defaultSize?: string | number;
size?: string | number;
direction: SplitType;
onDragStarted?: () => void;
onDragFinished?: (size: string | number) => void;
onDragMove?: (size: string | number) => void;
onResizerClick?: (e: React.MouseEvent) => void;
onResizerDoubleClick?: (e: React.MouseEvent) => void;
resizerStyle?: React.CSSProperties;
resizerClassName?: string;
step?: number;
collapsible?: boolean;
collapsed?: boolean;
defaultCollapsed?: boolean;
trigger?: React.ReactNode;
onCollapse?: (collapsed: boolean) => void;
}
export interface SpliterState {
active: boolean;
resized: boolean;
position: number;
draggedSize: number | string | null;
collapsed: boolean;
}
export interface ResizerProps extends BaseProps {
onClick?: SpliterProps['onResizerClick'];
onDoubleClick?: SpliterProps['onResizerDoubleClick'];
onMouseDown?: (e: React.MouseEvent) => void;
onTouchStart?: (e: React.TouchEvent) => void;
onTouchEnd?: (e: React.TouchEvent) => void;
direction?: SplitType;
resizerClassName?: string;
trigger: JSX.Element | null;
}
export interface PaneProps extends BaseProps {
size?: SpliterProps['size'];
direction?: SplitType;
}
export interface PaneState extends BaseProps {
size: SpliterProps['size'] | undefined;
}
export {};