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 {};