import type { PickClassStyleType, RendererProps, SchemaBoolean, SchemaClassName } from 'jamis-core'; import type { ReactNode } from 'react'; import type { BaseSchema, Offset, SchemaCollection, SchemaSlots } from '../types'; export * from './components/types'; export type PopOverPosition = 'auto' | 'center' | 'left-top' | 'left-top-left-top' | 'left-top-left-center' | 'left-top-left-bottom' | 'left-top-center-top' | 'left-top-center-center' | 'left-top-center-bottom' | 'left-top-right-top' | 'left-top-right-center' | 'left-top-right-bottom' | 'right-top' | 'right-top-left-top' | 'right-top-left-center' | 'right-top-left-bottom' | 'right-top-center-top' | 'right-top-center-center' | 'right-top-center-bottom' | 'right-top-right-top' | 'right-top-right-center' | 'right-top-right-bottom' | 'left-bottom' | 'left-bottom-left-top' | 'left-bottom-left-center' | 'left-bottom-left-bottom' | 'left-bottom-center-top' | 'left-bottom-center-center' | 'left-bottom-center-bottom' | 'left-bottom-right-top' | 'left-bottom-right-center' | 'left-bottom-right-bottom' | 'right-bottom' | 'right-bottom-left-top' | 'right-bottom-left-center' | 'right-bottom-left-bottom' | 'right-bottom-center-top' | 'right-bottom-center-center' | 'right-bottom-center-bottom' | 'right-bottom-right-top' | 'right-bottom-right-center' | 'right-bottom-right-bottom' | 'fixed-center' | 'fixed-left-top' | 'fixed-right-top' | 'fixed-left-bottom' | 'fixed-right-bottom'; export interface SchemaPopOverObject { popOverEnable?: boolean; /** * 配置当前行是否启动,要用表达式 */ popOverEnableOn?: SchemaBoolean; /** * 弹出模式 */ mode?: 'dialog' | 'drawer' | 'popOver'; /** * 是弹窗形式的时候有用。 */ size?: 'sm' | 'md' | 'lg' | 'xl'; /** * 弹出位置 */ position?: PopOverPosition; /** * 触发条件,默认是 click */ trigger?: 'click' | 'hover'; /** * 是否显示查看更多的 icon,通常是放大图标。 */ showIcon?: boolean; /** * 偏移量 */ offset?: Partial; /** * 标题 */ title?: string; body?: SchemaCollection; /** * 内部使用的自定义的 react 组件, 和 body 互斥, 优先级高于 body */ children?: ReactNode | (() => ReactNode); /** * 外部控制的打开状态 */ isOpened?: boolean | SchemaBoolean; isOpenedOn?: SchemaBoolean; /** * 点击外部时是否关闭popover */ closeOnOutside?: boolean; closeOnOutsideOn?: SchemaBoolean; /** * 点击container时是否关闭popover, 默认是true */ closeOnContainer?: boolean; slots?: SchemaSlots; /** * HOC弹框容器`.cxd-PopOverAble` * @deprecated 请使用`slots.PopOverAble` */ className?: SchemaClassName; /** * 弹框外层`.cxd-PopOverAble-popover`类名 * @deprecated 请使用`slots.PopOverAble-popover` */ popOverClassName?: SchemaClassName; /** * 元素`.cxd-PopOverWrap`的样式类 * @deprecated 请使用`slots.PopOverWrap` */ popOverWrapClassName?: SchemaClassName; /** * 按钮样式类 * 请使用 `slots.Field-popOverBtn` */ popOverBtnClassName?: SchemaClassName; } export type SchemaPopOver = boolean | SchemaPopOverObject; export interface PopOverHocProps extends RendererProps { name?: string; label?: string; popOver?: SchemaPopOver; /** * @deprecated 使用 popOverEnabled 替代 */ popOverEnable?: boolean | string; popOverEnabled?: boolean | string; onPopOverOpened?: (popover: any) => void | boolean; onPopOverClosed?: (popover: any) => void | boolean; } export interface PopOverHocConfig { /**是否定位目标为整个外层 */ targetOutter?: boolean; position?: SchemaPopOverObject['position']; delay?: number; } export interface PopoverWrapperSchema extends BaseSchema { type: 'popover-wrapper'; popOver?: Omit; body: SchemaCollection; } export interface PopoverRendererProps extends PopoverWrapperSchema, RendererProps { } export interface UsePopOverableTriggerProps { className?: string; onMouseEnter?: (ev?: any) => void; onMouseLeave?: (ev?: any) => void; onClick?: (ev?: any) => void; } export type UsePopOverableProps = Pick & { popOverContainer?: any; } & Required;