import type { ComponentType, Dispatch, HTMLAttributes, ReactNode, SetStateAction } from "react";
import type { AnySchema } from "yup";
import type { ModelWithClearableCache } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/admin/performance/types";
import { type DataPermission, DataPermissionValue, type DatabaseEntityId, type EntityId, type PermissionSubject } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/admin/permissions/types";
import { InteractiveEmbeddingSettings } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/admin/settings/components/EmbeddingSettings/InteractiveEmbeddingSettings";
import type { ADMIN_SETTINGS_SECTIONS } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/admin/settings/selectors";
import type { MetricFilterControlsProps, MetricFilterSettings } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/browse/metrics";
import type { ModelFilterControlsProps, ModelFilterSettings } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/browse/models";
import type { LinkProps } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/core/components/Link";
import PluginPlaceholder from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/plugins/components/PluginPlaceholder";
import type { SearchFilterComponent } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/search/types";
import type { GroupProps, IconName, IconProps } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase/ui";
import type Question from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/Question";
import type Database from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-lib/v1/metadata/Database";
import type { BaseUser, Bookmark, CacheableDashboard, CacheableModel, Collection, CollectionAuthorityLevelConfig, CollectionEssentials, CollectionId, CollectionInstanceAnaltyicsConfig, Dashboard, Database as DatabaseType, Dataset, Group, GroupPermissions, GroupsPermissions, ModelCacheRefreshStatus, Revision, User } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-types/api";
import type { AdminPathKey, State } from "@metabase/embedding-sdk-react/dist/frontend/src/metabase-types/store";
import type { GetAuthProviders, PluginGroupManagersType, PluginLLMAutoDescription } from "./types";
export declare const PLUGIN_APP_INIT_FUNCTIONS: never[];
export declare const PLUGIN_LANDING_PAGE: never[];
export declare const PLUGIN_REDUX_MIDDLEWARES: never[];
export declare const PLUGIN_LOGO_ICON_COMPONENTS: never[];
export declare const PLUGIN_ADMIN_NAV_ITEMS: never[];
export declare const PLUGIN_ADMIN_ROUTES: never[];
export declare const PLUGIN_ADMIN_ALLOWED_PATH_GETTERS: ((user: any) => AdminPathKey[])[];
export declare const PLUGIN_ADMIN_TOOLS: {
    INDEX_ROUTE: string;
    EXTRA_ROUTES_INFO: never[];
    EXTRA_ROUTES: never[];
};
export declare const PLUGIN_ADMIN_TROUBLESHOOTING: {
    EXTRA_ROUTES: ReactNode[];
    GET_EXTRA_NAV: () => ReactNode[];
};
export declare const PLUGIN_ADMIN_SETTINGS: {
    InteractiveEmbeddingSettings: typeof InteractiveEmbeddingSettings;
};
export declare const PLUGIN_ADMIN_SETTINGS_UPDATES: ((sections: typeof ADMIN_SETTINGS_SECTIONS) => void)[];
export declare const PLUGIN_ADMIN_PERMISSIONS_DATABASE_ROUTES: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_DATABASE_GROUP_ROUTES: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_DATABASE_POST_ACTIONS: {
    impersonated: null;
};
export declare const PLUGIN_ADMIN_PERMISSIONS_DATABASE_ACTIONS: {
    impersonated: never[];
};
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_OPTIONS: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_ROUTES: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_GROUP_ROUTES: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_FIELDS_OPTIONS: never[];
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_FIELDS_CONFIRMATIONS: ((_permissions: GroupsPermissions, _groupId: number, _entityId: EntityId, _value: DataPermissionValue) => any)[];
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_FIELDS_ACTIONS: {
    sandboxed: never[];
};
export declare const PLUGIN_ADMIN_PERMISSIONS_TABLE_FIELDS_POST_ACTION: {
    sandboxed: null;
};
export declare const PLUGIN_DATA_PERMISSIONS: {
    permissionsPayloadExtraSelectors: ((state: State) => [Record<string, undefined | {
        group_id: string;
    }[]>, string[]])[];
    hasChanges: ((state: State) => boolean)[];
    shouldRestrictNativeQueryPermissions: (permissions: GroupsPermissions, groupId: number, entityId: EntityId, permission: DataPermission, value: DataPermissionValue, database: Database) => boolean;
    upgradeViewPermissionsIfNeeded: ((permissions: GroupsPermissions, groupId: number, entityId: EntityId, value: any, database: Database, permission: DataPermission) => GroupPermissions) | null;
};
export declare const PLUGIN_ADMIN_USER_FORM_FIELDS: {
    FormLoginAttributes: typeof PluginPlaceholder;
};
export declare const PLUGIN_ADMIN_USER_MENU_ITEMS: never[];
export declare const PLUGIN_ADMIN_USER_MENU_ROUTES: never[];
interface AuthTabs {
    name: string;
    key: string;
    to: string;
}
export declare const PLUGIN_ADMIN_SETTINGS_AUTH_TABS: AuthTabs[];
export declare const PLUGIN_AUTH_PROVIDERS: GetAuthProviders[];
export declare const PLUGIN_LDAP_FORM_FIELDS: {
    formFieldAttributes: string[];
    defaultableFormFieldAttributes: string[];
    formFieldsSchemas: Record<string, AnySchema>;
    UserProvisioning: ComponentType<{
        settings: {
            [setting: string]: {
                display_name?: string | undefined;
                warningMessage?: string | undefined;
                description?: string | ReactNode | undefined;
                note?: string | undefined;
            };
        };
        fields: {
            [field: string]: {
                name: string;
                default: boolean;
            };
        };
    }>;
};
export declare const PLUGIN_IS_PASSWORD_USER: ((user: User) => boolean)[];
export declare const PLUGIN_SELECTORS: {
    canWhitelabel: (_state: State) => boolean;
    getLoadingMessageFactory: (_state: State) => (isSlow?: boolean) => string;
    getIsWhiteLabeling: (_state: State) => boolean;
    getApplicationName: (_state: State) => string;
    getShowMetabaseLinks: (_state: State) => boolean;
    getLoginPageIllustration: (_state: State) => IllustrationValue;
    getLandingPageIllustration: (_state: State) => IllustrationValue;
    getNoDataIllustration: (_state: State) => string;
    getNoObjectIllustration: (_state: State) => string;
};
export type IllustrationValue = {
    src: string;
    isDefault: boolean;
} | null;
export declare const PLUGIN_FORM_WIDGETS: Record<string, ComponentType<any>>;
export declare const PLUGIN_SNIPPET_SIDEBAR_PLUS_MENU_OPTIONS: never[];
export declare const PLUGIN_SNIPPET_SIDEBAR_ROW_RENDERERS: {};
export declare const PLUGIN_SNIPPET_SIDEBAR_MODALS: never[];
export declare const PLUGIN_SNIPPET_SIDEBAR_HEADER_BUTTONS: never[];
export declare const PLUGIN_DASHBOARD_SUBSCRIPTION_PARAMETERS_SECTION_OVERRIDE: {
    Component: undefined;
};
export declare const PLUGIN_LLM_AUTODESCRIPTION: PluginLLMAutoDescription;
type AuthorityLevelMenuItem = {
    title: string;
    icon: string;
    action: () => void;
};
type CleanUpMenuItem = {
    title: string;
    icon: string;
    link: string;
};
export type ItemWithCollection = {
    collection: CollectionEssentials;
};
type GetCollectionIdType = (sourceCollectionId?: CollectionId | null) => CollectionId | null;
export type CollectionAuthorityLevelDisplayProps = {
    collection: Collection;
};
export declare const PLUGIN_COLLECTIONS: {
    AUTHORITY_LEVEL: {
        [x: string]: CollectionAuthorityLevelConfig;
    };
    COLLECTION_TYPES: {
        [x: string]: CollectionAuthorityLevelConfig;
    };
    REGULAR_COLLECTION: CollectionAuthorityLevelConfig;
    isRegularCollection: (_: Partial<Collection> | Bookmark) => boolean;
    getCollectionType: (_: Partial<Collection>) => CollectionAuthorityLevelConfig | CollectionInstanceAnaltyicsConfig;
    useGetDefaultCollectionId: GetCollectionIdType | null;
    CUSTOM_INSTANCE_ANALYTICS_COLLECTION_ENTITY_ID: string;
    INSTANCE_ANALYTICS_ADMIN_READONLY_MESSAGE: string;
    getAuthorityLevelMenuItems: (_collection: Collection, _onUpdate: (collection: Collection, values: Partial<Collection>) => void) => AuthorityLevelMenuItem[];
    getIcon: (item: import("@metabase/embedding-sdk-react/dist/frontend/src/metabase/lib/icon").ObjectWithModel) => import("@metabase/embedding-sdk-react/dist/frontend/src/metabase/lib/icon").IconData;
    filterOutItemsFromInstanceAnalytics: <Item extends ItemWithCollection>(items: Item[]) => Item[];
    canCleanUp: boolean;
    getCleanUpMenuItems: (_itemCount: number, _url: string, _isInstanceAnalyticsCustom: boolean, _isTrashed: boolean, _canWrite: boolean) => CleanUpMenuItem[];
    cleanUpRoute: import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | null;
};
export type CollectionAuthorityLevelIcon = ComponentType<Omit<IconProps, "name" | "tooltip"> & {
    collection: Pick<Collection, "authority_level">;
    tooltip?: "default" | "belonging";
    archived?: boolean;
}>;
type CollectionInstanceAnalyticsIcon = React.ComponentType<Omit<IconProps, "name"> & {
    collection: Collection;
    entity: "collection" | "question" | "model" | "dashboard" | "metric";
}>;
type FormCollectionAuthorityLevelPicker = React.ComponentType<HTMLAttributes<HTMLDivElement> & {
    name: string;
    title?: string;
}>;
export declare const PLUGIN_COLLECTION_COMPONENTS: {
    CollectionAuthorityLevelIcon: CollectionAuthorityLevelIcon;
    FormCollectionAuthorityLevelPicker: FormCollectionAuthorityLevelPicker;
    CollectionInstanceAnalyticsIcon: CollectionInstanceAnalyticsIcon;
    CollectionAuthorityLevelDisplay: ComponentType<CollectionAuthorityLevelDisplayProps>;
};
export type RevisionOrModerationEvent = {
    title: string;
    timestamp: string;
    icon: IconName | {
        name: IconName;
        color: string;
    } | Record<string, never>;
    description?: string;
    revision?: Revision;
};
export declare const PLUGIN_MODERATION: {
    isEnabled: () => boolean;
    EntityModerationIcon: typeof PluginPlaceholder;
    QuestionModerationSection: typeof PluginPlaceholder;
    ModerationReviewBanner: typeof PluginPlaceholder;
    ModerationReviewTextForQuestion: typeof PluginPlaceholder;
    ModerationReviewTextForDashboard: typeof PluginPlaceholder;
    ModerationStatusIcon: typeof PluginPlaceholder;
    getQuestionIcon: typeof PluginPlaceholder;
    getStatusIcon: (_moderated_status?: string) => string | IconProps | undefined;
    getModerationTimelineEvents: (_reviews: any, _currentUser: BaseUser | null) => RevisionOrModerationEvent[];
    useDashboardMenuItems: (_model?: Dashboard, _reload?: () => void) => never[];
    useQuestionMenuItems: (_model?: Question, _reload?: () => void) => never[];
};
export type InvalidateNowButtonProps = {
    targetId: number;
    /** The type of object that the target is */
    targetModel: ModelWithClearableCache;
    targetName: string;
};
export type SidebarCacheSectionProps = {
    item: CacheableDashboard | Question;
    model: CacheableModel;
    setPage: Dispatch<SetStateAction<"default" | "caching">>;
};
export type SidebarCacheFormProps = {
    item: CacheableDashboard | Question;
    model: CacheableModel;
    onClose: () => void;
} & GroupProps;
export declare const PLUGIN_CACHING: {
    isGranularCachingEnabled: () => boolean;
    StrategyFormLauncherPanel: any;
    GranularControlsExplanation: any;
    SidebarCacheSection: ComponentType<SidebarCacheSectionProps>;
    SidebarCacheForm: ComponentType<{
        item: CacheableDashboard | Question;
        model: CacheableModel;
        onClose: () => void;
    } & GroupProps & {
        onBack: () => void;
    }>;
    InvalidateNowButton: ComponentType<InvalidateNowButtonProps>;
    hasQuestionCacheSection: (_question: Question) => boolean;
    canOverrideRootStrategy: boolean;
    /** Metadata describing the different kinds of strategies */
    strategies: Record<string, import("@metabase/embedding-sdk-react/dist/frontend/src/metabase/admin/performance/types").StrategyData>;
    DashboardAndQuestionCachingTab: any;
    StrategyEditorForQuestionsAndDashboards: any;
    getTabMetadata: () => (import("@metabase/embedding-sdk-react/dist/frontend/src/metabase-types/store").AdminPath & {
        tabId: string;
    })[];
};
export declare const PLUGIN_REDUCERS: {
    applicationPermissionsPlugin: any;
    sandboxingPlugin: any;
    shared: any;
};
export declare const PLUGIN_ADVANCED_PERMISSIONS: {
    addDatabasePermissionOptions: (permissions: any[], _database: Database) => any[];
    addSchemaPermissionOptions: (permissions: any[], _value: string) => any[];
    addTablePermissionOptions: (permissions: any[], _value: string) => any[];
    getDatabaseLimitedAccessPermission: (_value: string) => null;
    isAccessPermissionDisabled: (_value: string, _subject: "schemas" | "tables" | "fields") => boolean;
    isRestrictivePermission: (_value: string) => boolean;
    shouldShowViewDataColumn: boolean;
    defaultViewDataPermission: DataPermissionValue;
};
export declare const PLUGIN_FEATURE_LEVEL_PERMISSIONS: {
    getFeatureLevelDataPermissions: (_entityId: DatabaseEntityId, _groupId: number, _isAdmin: boolean, _permissions: GroupsPermissions, _dataAccessPermissionValue: DataPermissionValue, _defaultGroup: Group, _permissionSubject: PermissionSubject) => any;
    getDataColumns: (_subject: PermissionSubject) => any;
    getDownloadWidgetMessageOverride: (_result: Dataset) => string | null;
    canDownloadResults: (_result: Dataset) => boolean;
    dataModelQueryProps: any;
    databaseDetailsQueryProps: any;
};
export declare const PLUGIN_APPLICATION_PERMISSIONS: {
    getRoutes: () => ReactNode;
    tabs: any;
    selectors: {
        canManageSubscriptions: (_state: any) => boolean;
    };
};
export declare const PLUGIN_GROUP_MANAGERS: PluginGroupManagersType;
export declare const PLUGIN_MODEL_PERSISTENCE: {
    isModelLevelPersistenceEnabled: () => boolean;
    ModelCacheToggle: ({ persistedModel, model, }: {
        persistedModel?: ModelCacheRefreshStatus;
        model: Question;
    }) => JSX.Element;
};
export declare const PLUGIN_EMBEDDING: {
    isEnabled: () => boolean;
    isInteractiveEmbeddingEnabled: (_state: State) => boolean;
};
export declare const PLUGIN_EMBEDDING_SDK: {
    isEnabled: () => boolean;
};
export declare const PLUGIN_CONTENT_VERIFICATION: {
    contentVerificationEnabled: boolean;
    VerifiedFilter: SearchFilterComponent<"verified">;
    sortCollectionsByVerification: (_a: CollectionEssentials, _b: CollectionEssentials) => number;
    ModelFilterControls: (_props: ModelFilterControlsProps) => null;
    getDefaultModelFilters: (_state: State) => ModelFilterSettings;
    getDefaultMetricFilters: (_state: State) => MetricFilterSettings;
    MetricFilterControls: (_props: MetricFilterControlsProps) => null;
};
export declare const PLUGIN_DASHBOARD_HEADER: {
    extraButtons: (_dashboard: Dashboard) => never[];
};
export declare const PLUGIN_QUERY_BUILDER_HEADER: {
    extraButtons: (_question: Question) => never[];
};
export type InsightsLinkProps = ({
    question: Pick<Question, "id" | "collection">;
    dashboard?: never;
} | {
    question?: never;
    dashboard: Pick<Dashboard, "id" | "collection">;
}) & Omit<LinkProps, "to">;
export declare const PLUGIN_AUDIT: {
    isAuditDb: (_db: DatabaseType) => boolean;
    InsightsLink: ComponentType<InsightsLinkProps>;
};
export declare const PLUGIN_UPLOAD_MANAGEMENT: {
    UploadManagementTable: typeof PluginPlaceholder;
};
export declare const PLUGIN_IS_EE_BUILD: {
    isEEBuild: () => boolean;
};
export declare const PLUGIN_RESOURCE_DOWNLOADS: {
    /**
     * Returns if 'download results' on cards and pdf exports are enabled in public and embedded contexts.
     */
    areDownloadsEnabled: (_args: {
        hide_download_button?: boolean | null;
        downloads?: boolean | null;
    }) => boolean;
};
export {};
