/**
 * This file is part of the NocoBase (R) project.
 * Copyright (c) 2020-2024 NocoBase Co., Ltd.
 * Authors: NocoBase Team.
 *
 * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
 * For more information, please refer to: https://www.nocobase.com/agreement.
 */
import { FlowModel } from '@nocobase/flow-engine';
import { type ButtonProps, type MenuProps } from 'antd';
import React from 'react';
import type { PluginSettingsPageType } from '../../../PluginSettingsManager';
import type { CustomToken } from '../../../theme';
/**
 * 将 settings 顶部菜单转换成右上角 dropdown items。
 *
 * @param {PluginSettingsPageType[]} settings 当前可访问的 settings 列表
 * @param {boolean} canManagePlugins 是否允许访问插件管理
 * @param {(key: string) => string} t 国际化函数
 * @returns {NonNullable<MenuProps['items']>} dropdown items
 */
export declare function getTopbarPluginSettingsItems(options: {
    settings: PluginSettingsPageType[];
    canManagePlugins: boolean;
    t: (key: string) => string;
}): NonNullable<MenuProps['items']>;
/**
 * 右上角动作基类。
 *
 * 该基类只负责单个按钮的稳定协议，
 * 统一的列表聚合、分隔线和 Help 由 TopbarActionsBar 负责。
 */
export declare class TopbarActionModel extends FlowModel {
    props: ButtonProps;
    icon: React.ReactNode;
    tooltip: string;
    aclSnippet?: string;
    actionId?: string;
    testId?: string;
    sort: number;
    /**
     * 获取稳定动作标识。
     *
     * @returns {string} 动作标识
     */
    getActionId(): string;
    /**
     * 获取稳定测试标识。
     *
     * @returns {string} data-testid
     */
    getTestId(): string;
    /**
     * 判断当前动作是否被显式隐藏。
     *
     * @returns {boolean} 是否隐藏
     */
    isHidden(): boolean;
    /**
     * 计算按钮视觉样式。
     *
     * @param {CustomToken} _token 当前主题 token
     * @returns {React.CSSProperties | undefined} 按钮样式
     */
    getButtonStyle(_token: CustomToken): React.CSSProperties | undefined;
    /**
     * 点击动作默认实现。
     *
     * @param {React.MouseEvent<HTMLElement>} _event 点击事件
     * @returns {void}
     */
    onClick(_event?: React.MouseEvent<HTMLElement>): void;
    /**
     * 渲染按钮外壳。
     *
     * @returns {React.ReactNode} 按钮节点
     */
    renderButton(): React.JSX.Element;
    /**
     * 包装按钮节点，例如 tooltip 或 dropdown。
     *
     * @param {React.ReactNode} node 按钮节点
     * @returns {React.ReactNode} 包装后的节点
     */
    renderWrapper(node: React.ReactNode): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element;
    /**
     * 渲染最终动作节点。
     *
     * @returns {React.ReactNode} 最终节点
     */
    render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element;
}
export declare class UIEditorTopbarActionModel extends TopbarActionModel {
    sort: number;
    actionId: string;
    testId: string;
    aclSnippet: string;
    icon: React.JSX.Element;
    tooltip: string;
    /**
     * 切换 UI 编辑器开关。
     *
     * @returns {Promise<void>} 异步切换结果
     */
    onClick(): Promise<void>;
    render(): React.JSX.Element;
}
export declare class PluginSettingsTopbarActionModel extends TopbarActionModel {
    sort: number;
    actionId: string;
    testId: string;
    icon: React.JSX.Element;
    render(): React.JSX.Element;
}
