import { Component } from 'vue';
import { PrimitiveProps } from 'reka-ui';
import { SidebarProps } from '../../components/core/sidebar';
/**
 * Pattern wrapper props for the application sidebar shell.
 * Same API as the underlying core `Sidebar` component.
 * @category Patterns
 * @useCases app navigation, dashboard sidebar, collapsible layout
 * @keywords sidebar, navigation, layout, shell
 */
export type UiSidebarProps = SidebarProps;
/**
 * Pattern wrapper props for sidebar groups.
 */
export interface UiSidebarGroupProps {
    /**
     * Initial expanded state for the group content.
     * @default true
     */
    defaultOpen?: boolean;
}
/**
 * Group label row inside the sidebar pattern.
 * Supports a title plus optional collapse and action icon buttons.
 * @category Patterns
 * @useCases sidebar section heading, collapsible group label, grouped navigation
 * @keywords sidebar, group, label, collapse, action
 */
export interface UiSidebarGroupLabelProps {
    /**
     * Optional density hook (`data-size` on the root). Title copy is always Label 12 / medium at content/on-surface/muted.
     * @default 'sm'
     */
    size?: 'sm' | 'xs';
    /**
     * Icon shown beside the title for the collapse action.
     */
    collapseIcon?: Component;
    /**
     * Tooltip for the collapse action button.
     */
    collapseTooltip?: string;
    /**
     * Accessible label for the collapse action button.
     * @default 'Collapse group'
     */
    collapseAriaLabel?: string;
    /**
     * Icon shown at the far end of the row for the secondary action.
     */
    actionIcon?: Component;
    /**
     * Tooltip for the secondary action button.
     */
    actionTooltip?: string;
    /**
     * Accessible label for the secondary action button.
     * @default 'Group action'
     */
    actionAriaLabel?: string;
    /**
     * Whether to render the secondary action button.
     * @default true
     */
    showAction?: boolean;
    /**
     * Whether the collapse chevron and secondary action button should only appear on hover/focus.
     * @default true
     */
    showActionOnHover?: boolean;
    /**
     * Whether to render the collapse action button.
     * @default true
     */
    showCollapse?: boolean;
}
/**
 * Emitted events for `UiSidebarGroupLabel`.
 */
export interface UiSidebarGroupLabelEmits {
    /**
     * Fired when the collapse action is clicked.
     */
    'collapse-click': [event: MouseEvent];
    /**
     * Fired when the secondary action is clicked.
     */
    'action-click': [event: MouseEvent];
}
/**
 * Pattern wrapper props for the sidebar header.
 */
export interface UiSidebarHeaderProps {
    /**
     * Tooltip text displayed for the trigger.
     */
    tooltip?: string;
    /**
     * Accessible label for the trigger.
     * @default 'Toggle sidebar'
     */
    ariaLabel?: string;
}
/**
 * Pattern wrapper props for the sidebar toggle trigger.
 */
export interface UiSidebarTriggerProps {
    /**
     * Tooltip text displayed for the trigger.
     */
    tooltip?: string;
    /**
     * Accessible label for the trigger.
     * @default 'Toggle sidebar'
     */
    ariaLabel?: string;
}
/**
 * Pattern wrapper props for sidebar navigation buttons.
 */
export interface UiSidebarMenuButtonProps {
    /**
     * Optional tooltip shown in collapsed mode.
     */
    tooltip?: string | Component;
    /**
     * Visual variant of the menu button.
     * @default 'default'
     */
    variant?: 'default' | 'outline';
    /**
     * Size variant of the menu button.
     * @default 'default'
     */
    size?: 'default' | 'sm' | 'lg';
    /**
     * Marks the button as active.
     * @default false
     */
    isActive?: boolean;
    /**
     * Renders the end icon as a separate clickable action.
     * @default false
     */
    endIconClickable?: boolean;
    /**
     * Accessible label for the end icon action button.
     * @default 'Menu action'
     */
    endIconAriaLabel?: string;
}
/**
 * Emitted events for `UiSidebarMenuButton`.
 */
export interface UiSidebarMenuButtonEmits {
    /**
     * Fired when the end icon action is clicked.
     */
    'end-icon-click': [event: MouseEvent];
}
/**
 * Pattern wrapper props for sidebar sub-menu containers.
 */
export interface UiSidebarMenuSubProps {
    /**
     * Visual presentation of the sub-menu group.
     * @default 'default'
     */
    mode?: 'default' | 'border' | 'indent';
}
/**
 * Subgroup container for {@link UiSidebarMenuSubItem} rows inside a collapsible menu item or button.
 * Distinct from {@link UiSidebarMenuSub} spacing: tuned for nested groups with a left rail, tight, or extra-indent layouts.
 */
export interface UiSidebarSubProps {
    /**
     * Visual variant for the subgroup shell.
     * - `border` — left vertical rule (`border-border-input-default`) with 16px start margin (`ml-4`) and 8px end margin (`mr-2`) on the rail; list has no start padding, 24px end padding (`pr-6`).
     * - `default` — 24px horizontal padding (`px-6`), no vertical padding.
     * - `indent` — same as default plus 6px extra horizontal padding per side (`calc(1.5rem + 6px)`).
     * @default 'default'
     */
    variant?: 'border' | 'default' | 'indent';
}
/**
 * Pattern wrapper props for sidebar sub-menu rows.
 */
export interface UiSidebarMenuSubItemProps extends PrimitiveProps {
    /**
     * Marks the sub-item as active.
     * @default false
     */
    isActive?: boolean;
}
/**
 * Pattern wrapper props for sidebar popover triggers.
 */
export interface UiSidebarPopoverTriggerProps {
    /**
     * Trigger label shown inside the sidebar button.
     */
    label: string;
    /**
     * Optional tooltip shown for the trigger.
     */
    tooltip?: string;
    /**
     * Marks the trigger as active.
     * @default false
     */
    isActive?: boolean;
}
/**
 * Pattern wrapper props for sidebar popovers.
 */
export interface UiSidebarPopoverProps {
    /**
     * Trigger label shown inside the sidebar button.
     */
    label: string;
    /**
     * Optional tooltip shown for the trigger.
     */
    tooltip?: string;
    /**
     * Popover side relative to the trigger.
     * @default 'bottom'
     */
    side?: 'top' | 'right' | 'bottom' | 'left';
    /**
     * Popover alignment relative to the trigger.
     * @default 'start'
     */
    align?: 'start' | 'center' | 'end';
    /**
     * Offset between trigger and content.
     * @default 8
     */
    sideOffset?: number;
}
/**
 * Pattern wrapper props for sidebar popover menus.
 */
export interface UiSidebarPopoverMenuProps {
    /**
     * Optional section label displayed above the menu items.
     */
    label?: string;
    /**
     * Whether to render a separator above the footer slot.
     * @default true
     */
    showFooterSeparator?: boolean;
}
/**
 * Pattern wrapper props for sidebar popover menu items.
 *
 * Slots: `icon` (leading), `end-icon` (trailing icon beside `shortcut` when either is set).
 */
export interface UiSidebarPopoverMenuItemProps extends PrimitiveProps {
    /**
     * Main label of the menu item.
     */
    label: string;
    /**
     * Optional keyboard shortcut or hint shown at the end, before the `end-icon` slot content.
     */
    shortcut?: string;
    /**
     * Marks the menu item as active.
     * @default false
     */
    isActive?: boolean;
}
/**
 * Emitted events for `UiSidebarPopoverMenuItem`.
 * This pattern does not emit custom events; the interface is reserved for API consistency.
 */
export type UiSidebarPopoverMenuItemEmits = Record<string, never>;
/**
 * Pass-through pattern shells: no pattern-level props; attributes are forwarded to the core sidebar component.
 */
export type UiSidebarContentProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarFooterProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarGroupContentProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarInsetProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarMenuProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarMenuItemProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarProviderProps = Record<string, never>;
/**
 * @see UiSidebarContentProps
 */
export type UiSidebarRailProps = Record<string, never>;
