import { LitElement, PropertyValues } from 'lit';
import { ObcNavigationItemGroup } from '../navigation-item-group/navigation-item-group.js';
import { ObcNavigationItem } from '../navigation-item/navigation-item.js';
/**
 * `ObcNavigationMenuVariant` – Enumerates the available visual and behavioral variants for `<obc-navigation-menu>`.
 *
 * - `Full`: Standard navigation menu with both icons and labels.
 * - `IconOnly`: Compact menu showing only icons (should only be used when no flyouts/submenus are present).
 * - `IconOnlyLarge`: Icon-only menu variant designed for use when flyouts/submenus are present.
 * - `Compact`: Space-saving menu with reduced padding and layout.
 *
 * Use these variants to adapt the navigation menu to different layouts or device sizes.
 */
export declare enum ObcNavigationMenuVariant {
    Full = "full",
    IconOnly = "icon-only",// Should only be used when no flyouts are present in the navigation menu
    IconOnlyLarge = "icon-only-large",// Should be used when flyouts are present in the navigation menu
    Compact = "compact"
}
/**
 * `ObcNavigationMenuFlyoutVariant` – Enumerates the available visual and behavioral variants for the flyout.
 *
 * - `Full`: Standard navigation flyout that takes the full height.
 * - `Compact`: Space-saving menu with reduced padding and layout.
 *
 * Use these variants to adapt the flyout menu to different layouts or device sizes.
 */
export declare enum ObcNavigationMenuFlyoutVariant {
    Full = "full",
    Compact = "compact"
}
/**
 * `<obc-navigation-menu>` – A flexible, slot-based navigation menu component for organizing primary and secondary navigation items.
 *
 * This component provides a vertical navigation structure supporting groups, flyouts, and footer sections. It adapts to various layouts and device sizes via its `variant` and `smallScreen` properties. Items and groups are provided via slots, allowing for icons, labels, and nested navigation hierarchies.
 *
 * Appears as a sidebar or persistent navigation panel, supporting both icon-only and full-label modes. Designed for use as the main navigation in applications, dashboards, or any interface requiring structured navigation.
 *
 * ## Features
 *
 * - **Variants:**
 *   - **Full:** Displays both icons and labels for all navigation items (default).
 *   - **IconOnly:** Shows only icons for a compact appearance. *Should only be used when no navigation items have sub-items or flyouts.*
 *   - **IconOnlyLarge:** Icon-only mode that supports flyouts/submenus. Use when navigation contains groups or nested items.
 *   - **Compact:** Reduces padding and overall width for a space-saving layout.
 * - **Responsive Layout:**
 *   - `smallScreen` property adapts the footer and logo layout for smaller viewports.
 * - **Slot-based Content:**
 *   - `main` slot for primary navigation items and groups.
 *   - `footer` slot for secondary actions or links.
 *   - `logo` slot for branding or logo placement (position adapts based on variant and screen size).
 * - **Nested Navigation:**
 *   - Supports nested groups and flyouts via `<obc-navigation-item-group>`.
 * - **Automatic Variant Propagation:**
 *   - Child items and groups automatically receive the correct variant for consistent appearance.
 * - **Dynamic Content Handling:**
 *   - Reacts to dynamic addition/removal of items and groups, updating layout and variants as needed.
 * - **Interaction:**
 *   - Clicking a navigation item closes all open groups/flyouts for streamlined navigation.
 *
 * ## Usage Guidelines
 *
 * Use `<obc-navigation-menu>` as the main navigation container in your application layout. Place navigation items and groups in the `main` slot for primary navigation, and use the `footer` slot for secondary actions (such as settings or help). The `logo` slot is intended for branding and is positioned according to the selected variant and screen size.
 *
 * - Use the `Full` variant for standard navigation with both icons and labels.
 * - Use `IconOnly` only when there are no nested groups or flyouts; otherwise, use `IconOnlyLarge` for icon-only navigation with flyout support.
 * - The `Compact` variant is suitable for layouts with limited space or when a minimal navigation appearance is desired.
 * - Set `smallScreen` to `true` to optimize the layout for smaller devices or responsive breakpoints.
 *
 * **TODO(designer):** Provide additional guidance on when to use each variant and recommended slot content for best usability.
 *
 * ## Slots
 *
 * | Slot Name | Renders When... | Purpose |
 * |-----------|----------------|---------|
 * | main      | Always         | Primary navigation items and groups. |
 * | footer    | Always         | Secondary navigation items (e.g., settings, help). |
 * | logo      | Always         | Branding/logo area (position varies by variant and screen size). |
 *
 * Place `<obc-navigation-item>`, `<obc-navigation-item-group>`, or other suitable elements in these slots. For icons, use `<obi-placeholder>`, `<obi-applications>`, or other OpenBridge icon components in the `icon` slot of each navigation item.
 *
 * ## Properties
 *
 * - `variant` (`ObcNavigationMenuVariant`): Controls the visual style and layout of the menu. Default is `Full`.
 * - `smallScreen` (`boolean`): When `true`, adapts the layout for small screens (e.g., moves logo into the footer area).
 *
 * ## Best Practices and Constraints
 *
 * - Only use the `IconOnly` variant when there are no navigation items with sub-items or flyouts. Use `IconOnlyLarge` if your navigation includes groups or nested items.
 * - Place only navigation-related components in the `main` and `footer` slots for clarity and accessibility.
 * - For best accessibility, ensure each navigation item has a clear label and, if using icons, a suitable `aria-label` or accessible name.
 * - Avoid placing interactive elements other than navigation items/groups in the `main` or `footer` slots.
 *
 * ## Example
 *
 * ```html
 * <obc-navigation-menu variant="full">
 *   <obc-navigation-item-group slot="main" label="Apps">
 *     <obi-applications slot="icon"></obi-applications>
 *     <obc-navigation-item label="Sub item 1" hasIcon href="#">
 *       <obi-placeholder slot="icon"></obi-placeholder>
 *     </obc-navigation-item>
 *   </obc-navigation-item-group>
 *   <obc-navigation-item slot="footer" label="Settings" hasIcon href="#">
 *     <obi-settings-iec slot="icon"></obi-settings-iec>
 *   </obc-navigation-item>
 *   <obc-vendor-button imageSrc="/companylogo-day.png" alt="logo" slot="logo"></obc-vendor-button>
 * </obc-navigation-menu>
 * ```
 *
 * In this example, the menu displays a group with sub-items in the main navigation, several footer actions, and a logo.
 *
 * @slot main - Slot for primary navigation items and groups.
 * @slot footer - Slot for secondary navigation items (e.g., settings, help).
 * @slot logo - Slot for branding/logo area.
 */
export declare class ObcNavigationMenu extends LitElement {
    /**
     * Controls the visual style and layout of the navigation menu.
     *
     * - `full`: Standard menu with icons and labels (default).
     * - `icon-only`: Compact, icon-only menu (use only when no flyouts/groups are present).
     * - `icon-only-large`: Icon-only menu supporting flyouts/groups.
     * - `compact`: Minimal, space-saving menu.
     */
    variant: ObcNavigationMenuVariant;
    /**
     * Visual variant of the flyout.
     * One of `Full` (default) or `Compact`.
     */
    flyoutVariant: ObcNavigationMenuFlyoutVariant;
    /**
     * When `true`, adapts the layout for small screens (e.g., moves logo into the footer area and adjusts item layout).
     */
    smallScreen: boolean;
    private slotObservers;
    findAllElements<T extends Element>(el: Element, tag: string, { slot, stopTag, }?: {
        slot?: 'main' | 'footer' | 'logo';
        stopTag?: string;
    }): T[];
    findAllGroups(el: Element): ObcNavigationItemGroup[];
    findRootItems(el: Element): ObcNavigationItem[];
    findAllItems(el: Element, slot?: 'main' | 'footer' | 'logo'): ObcNavigationItem[];
    closeAllGroups(): void;
    registerGroup(groups: ObcNavigationItemGroup[]): void;
    private cleanupSlotObservers;
    private setupSlotObservers;
    protected firstUpdated(_changedProperties: PropertyValues): void;
    protected updated(_changedProperties: PropertyValues): void;
    private setVariantToFlyoutItems;
    disconnectedCallback(): void;
    private handleSlotChange;
    private setupItems;
    private setHugToGroups;
    render(): import('lit-html').TemplateResult<1>;
    static styles: import('lit').CSSResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'obc-navigation-menu': ObcNavigationMenu;
    }
}
//# sourceMappingURL=navigation-menu.d.ts.map