import React from 'react'; import { type ActionsMenuGroup, type ActionsMenuItem } from './actions-menu'; import type { ButtonProps, SplitButtonIconAction } from './button'; export type PageActionButton = { /** Button label. Omit to render an icon-only button. */ label?: string; /** Accessible name. Required for icon-only buttons (when `label` is omitted). */ ariaLabel?: string; /** Click handler. Optional when `href` or `submenu` is provided. */ onClick?: () => void; icon?: React.ReactNode; /** `overlay` is media chrome only — SplitButton has no divider colour for it. */ variant?: Exclude; disabled?: boolean; /** * For SplitButton actions (when `iconAction` is set): disables only the main * half. Combine with `iconAction.disabled` for icon-only disable. Ignored * for non-SplitButton actions. */ mainDisabled?: boolean; loading?: boolean; /** Show action only on mobile (below md). Default: visible on all screens. */ showOnlyMobile?: boolean; /** * Render the desktop button as icon-only (label hidden, icon centered). The full * label still appears in the mobile "..." dropdown. The desktop icon is forced to * `text-ods-text-primary`; the mobile row keeps the caller-provided icon color. */ iconOnlyOnDesktop?: boolean; /** Render as a link (next/link). Mutually exclusive with `submenu`. */ href?: string; /** Forwarded to next/link's prefetch. Only applies when `href` is set. */ prefetch?: boolean; /** Open link in a new tab. Only applies when `href` is set. */ openInNewTab?: boolean; /** * Render the action as a `SplitButton` (two independent click targets). * The main half runs `onClick`/`href`; the icon half runs its own action. * Mutually exclusive with `submenu`. */ iconAction?: SplitButtonIconAction; /** * Render a button with a chevron that opens a dropdown. The whole button is * a single click target — clicking anywhere opens the menu. * Mutually exclusive with `iconAction` and `href`/`onClick`. */ submenu?: ActionsMenuItem[]; /** When set, the rendered desktop button is wrapped in a hover tooltip. */ tooltip?: React.ReactNode; }; export interface PageActionsProps { variant?: 'icon-buttons' | 'primary-buttons' | 'menu-primary'; actions: PageActionButton[]; menuActions?: ActionsMenuGroup[]; /** * Desktop-only slot rendered before the action buttons (e.g. a `TabSelector` * for view-mode toggles). Hidden on mobile and never merged into the "…" menu. * Honored by the `icon-buttons` and `menu-primary` variants. */ selector?: React.ReactNode; className?: string; /** * Render placeholders instead of the actions — for pages whose action SET * depends on data still in flight. Opt-in: a page whose actions are already * final while its title loads keeps rendering them. */ loading?: boolean; } export declare function PageActions({ variant, actions, menuActions, selector, className, loading, }: PageActionsProps): React.JSX.Element; export declare function usePageActionsBottomPadding(variant: PageActionsProps['variant']): "" | "pb-40 md:pb-0"; export default PageActions; //# sourceMappingURL=page-actions.d.ts.map