import { ReactNode } from 'react'; import { PopupContainerProps } from './container'; export { PopupContainerProps } from './container'; declare const _default: OperationAuth; /** 按钮操作权限的单例;维护一份 uuid -> 是否有权限的映射,供 Button 组件的鉴权逻辑查询 */ declare class OperationAuth { /** @type {OperationAuth} */ static "__#private@#instance": OperationAuth; /** @returns {OperationAuth} 单例实例 */ static getInstance: () => OperationAuth; /** * 用一批权限数据初始化/覆盖内部映射 * @param {Iterable<[string, boolean]>} data uuid 到权限布尔值的键值对集合 */ init: (data: Iterable<[string, boolean]>) => Map; /** * 判断某个操作是否有权限;没有记录该 uuid 时默认视为有权限 * @param {string} uuid 操作标识 * @returns {boolean} 是否有权限 */ check: (uuid: string) => boolean; #private; } /** antd Button 的视觉类型 */ type ButtonType = 'primary' | 'default' | 'danger' | '' /** 按钮尺寸 */ type ButtonSize = 'large' | 'middle' | 'small' /** 按钮外观分类,对应 entry(cate) 的参数 */ type ButtonCate = 'default' | 'link' | 'circle' | 'round' | 'dashed' /** 按钮触发的行为类型 */ type WidgetType = | 'redirect' | 'func' | 'component' | 'fsdpf-component' | 'grid-layout-form' | 'grid-layout' | 'data-list' | 'destroy' /** antd Tooltip / Popconfirm 支持的弹出位置 */ type PlacementType = | 'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom' /** Button props.tooltip 配置 */ interface ButtonTooltip { /** 提示文字 */ title: string /** 弹出位置 */ placement?: PlacementType /** 是否启用,0 视同 false */ enabled?: boolean | number getPopupContainer?: (e: HTMLElement) => HTMLElement } /** Button props.confirm 二次确认气泡配置 */ interface ButtonConfirm { /** 确认提示文字 */ title: string cancelText?: string okText?: string /** 确认按钮类型 */ okType?: ButtonType placement?: PlacementType /** 是否启用,0 视同 false */ enabled?: boolean | number getPopupContainer?: (e: HTMLElement) => HTMLElement arrow?: boolean | { pointAtCenter: boolean } } /** * 按钮点击行为的容器配置;在 PopupContainerProps 基础上叠加 Popover 专有字段和 Button 专有的 mode, * 流经 Button → Popover → Popup.modal 三层,各层按需取用不同字段 */ interface WidgetContainerProps extends Omit { /** 'popover' 时按钮触发内嵌气泡卡片,否则走 Popup.modal */ mode?: 'popover' | string /** 弹窗标题,支持 lodash template 插值(以点击时的 raw data 为上下文) */ title?: string /** antd Popover 的弹出位置(12 方向) */ placement?: PlacementType | string /** antd Popover 对齐微调配置 */ align?: unknown /** antd Popover 的 zIndex */ zIndex?: number /** antd Popover 的箭头配置 */ arrow?: boolean | { pointAtCenter: boolean } getPopupContainer?: (e: HTMLElement) => HTMLElement /** 气泡挂载到 body,false 时挂载到触发元素父节点;默认 true */ isPopupMountBodyContainer?: boolean } /** useButton 第二个参数:回调处理器 */ interface UseButtonHandlers { onAfterClick?: (result: unknown) => void onBeforeClick?: (data: unknown) => void } /** useButton 返回 / ButtonProps 共用的状态字段 */ interface UseButtonStatus { loading?: boolean disabled?: boolean } /** useButton 第一个参数:行为配置 */ interface UseButtonProps { /** 行为目标:组件 / 函数 / 路由 / 表达式,含义随 widgetType 而定 */ widget?: unknown /** 行为类型,决定 widget 的解释方式和触发后的动作 */ widgetType?: WidgetType /** 触发时附带的额外数据,合并到 widgetProps 求值结果后传给动作处理器 */ widgetData?: Record /** 触发前解析的 props 映射配置(经 getWidgetPropsData 求值) */ widgetProps?: Record /** 传给目标弹窗/表单/请求的 $setting 配置 */ widgetSetting?: Record /** 传给弹窗容器的配置(title/placement/zIndex 等) */ widgetContainerProps?: WidgetContainerProps } /** Button 组件的 props(所有变体共用) */ interface ButtonProps extends UseButtonProps, UseButtonHandlers, UseButtonStatus { className?: string /** 覆盖工厂默认外观分类 */ variant?: ButtonCate children?: ReactNode /** 按钮文字,与 children 二选一 */ name?: string /** 图标 class 名 */ icon?: string type?: ButtonType iconPosition?: 'start' | 'end' /** 按钮操作的权限标识 */ noAuthType?: string /** onClick 时传给动作处理器的数据源 */ data?: unknown tooltip?: ButtonTooltip confirm?: ButtonConfirm [key: string]: unknown } /** useButton 返回值:[点击处理函数(已防抖), 当前 loading/disabled 状态] */ type UseButtonReturn = [(data: unknown) => void, UseButtonStatus] /** ButtonGroupPopover props.options 中每一项的结构(ButtonProps + uuid + 必填 widgetType) */ interface ButtonOption extends ButtonProps { /** 操作项唯一标识,用于权限校验 */ uuid?: string widgetType: WidgetType /** 操作项自身的容器配置,与外层 widgetContainerProps 合并 */ widgetContainerSetting?: WidgetContainerProps } /** * Button 组件点击行为的核心 hook;按 widgetType 把点击行为分发到对应的处理器 * (跳转/自定义函数/弹窗组件/表单弹窗/数据列表弹窗/删除请求等) * @param {UseButtonProps} config * @param {UseButtonHandlers} [handlers] * @returns {UseButtonReturn} [点击处理函数(已做 300ms 防抖), 当前 loading/disabled 状态] */ declare function useButton({ widget, widgetType, widgetData, widgetProps, widgetSetting, widgetContainerProps, }: UseButtonProps, { onAfterClick, onBeforeClick }?: UseButtonHandlers): UseButtonReturn; export { _default as auth, useButton }; export type { ButtonCate, ButtonConfirm, ButtonOption, ButtonProps, ButtonSize, ButtonTooltip, ButtonType, PlacementType, UseButtonHandlers, UseButtonProps, UseButtonReturn, UseButtonStatus, WidgetContainerProps, WidgetType };