import { LitElement } from 'lit';
import '../icon-button/icon-button.js';
import '../../icons/icon-configure.js';
import '../../icons/icon-com-microphone.js';
import '../../icons/icon-com-mic-muted-google.js';
import '../../icons/icon-wifi2-google.js';
import '../../icons/icon-wifi2-off-google.js';
import '../../icons/icon-sensor-gps-bad.js';
import '../../icons/icon-sensor-gps-low.js';
import '../../icons/icon-sensor-gps-medium.js';
import '../../icons/icon-sensor-gps-full.js';
import '../../icons/icon-sound-muted.js';
import '../../icons/icon-sound-no.js';
import '../../icons/icon-sound-low.js';
import '../../icons/icon-sound.js';
import '../button/button.js';
import '../battery-icon/battery-icon.js';
export declare enum SystemButtonVariant {
    condensed = "condensed",
    expanded = "expanded",
    actions = "actions"
}
/**
 * Describes the enabled state and current value for each system indicator displayed by `<obc-system-button>`.
 *
 * - `wifi`: WiFi status (enabled, connected, strength, network name)
 * - `audio`: Audio status (enabled, muted, volume)
 * - `microphone`: Microphone status (enabled, muted, sensitivity)
 * - `battery`: Battery status (enabled, level, charging)
 * - `gps`: GPS status (enabled, connected, quality)
 */
export interface SystemState {
    wifi?: {
        connected: boolean;
        networkName?: string;
        strength: 0 | 1 | 2 | 3 | 4;
    };
    audio?: {
        muted: boolean;
        volume: number;
    };
    microphone?: {
        muted: boolean;
        sensitivity: number;
    };
    battery?: {
        level: number;
        charging: boolean;
        poweredNotCharging?: boolean;
        notification?: boolean;
    };
    gps?: {
        connected: boolean;
        quality: 'bad' | 'low' | 'medium' | 'full';
    };
}
/**
 * `<obc-system-button>` – A multi-state system status and quick-action button for displaying and controlling core system indicators.
 *
 * This component provides a compact, interactive summary of system-level statuses such as WiFi, audio, microphone, battery, and GPS. It can be used as a single icon button, an expanded status display, or a segmented set of quick-action buttons, depending on the chosen variant. Designed for use in application toolbars, system menus, or quick-access panels where users need to view and interact with system controls at a glance.
 *
 * Appears as an icon or set of icons representing real-time system states. Supports toggling panels for detailed control or configuration, and adapts its layout to suit condensed, expanded, or action-oriented contexts.
 *
 * ## Features
 *
 * - **Variants**:
 *   - **Condensed**: Single icon button (typically a settings or system icon) for minimal space usage.
 *   - **Expanded**: Horizontal button displaying a row of system status icons (WiFi, audio, microphone, battery, GPS) for quick visual overview.
 *   - **Actions**: Segmented button group, each segment representing a system function (microphone, volume, system icons), with interactive actions for each.
 * - **Dynamic Iconography**: Icons update in real time to reflect system state (e.g., WiFi strength, battery level, mute status, GPS quality).
 * - **Quick Actions**: In actions variant, clicking a segment opens the corresponding control panel (e.g., microphone settings, volume slider).
 * - **State Awareness**: Each system indicator (WiFi, audio, microphone, battery, GPS) can be enabled/disabled independently, and their visual state reflects connection, mute, charge, or quality status.
 * - **Accessibility**: Button segments are keyboard accessible and support disabled state.
 * - **Customizable**: System state can be controlled via the `systemState` property, allowing for integration with live system data.
 *
 * ## Usage Guidelines
 *
 * Use `<obc-system-button>` to provide users with a compact, always-visible summary of key system statuses and quick access to related controls. Ideal for application toolbars, overlays, or system menus where users need to monitor and adjust system settings without leaving their current context.
 *
 * - Use the **condensed** variant for minimal UI or when only a single system menu entry is needed.
 * - Use the **expanded** variant to show multiple system statuses at a glance, especially when space allows and quick status recognition is important.
 * - Use the **actions** variant to provide direct access to system controls (e.g., mute/unmute, adjust volume, open system settings).
 *
 * Only enable system indicators that are relevant to your application context. For example, if GPS is not available, set `systemState.gps.enabled` to `false` to hide the GPS icon.
 *
 * **TODO(designer):** Provide guidance on when to use each variant and any best practices for grouping or prioritizing system indicators.
 *
 *
 * ## Properties and Attributes
 *
 * - `variant` (`condensed` | `expanded` | `actions`): Controls the visual and interactive mode of the button. Default is `condensed`.
 * - `disabled` (boolean): Disables all interactions and renders the button(s) in a disabled state.
 * - `systemState` (object): Object describing the enabled state and current value for each system indicator (WiFi, audio, microphone, battery, GPS). Each sub-property (e.g., `wifi.enabled`, `audio.volume`) controls the presence and state of its corresponding icon.
 * - `menuOpen` (boolean): Indicates whether a system panel is currently open (used internally for expanded/actions variants).
 * - `activePanel` (string or null): Indicates which panel (if any) is currently active (`microphone`, `volume`, `system-icons`, or `null`).
 *
 * ## Events
 *
 * - `menu-toggle` – Fired when the expanded variant is toggled open or closed.
 * - `system-state-change` – Fired when the system state is updated via `updateSystemState()`.
 * - `microphone-panel-open` – Fired when the microphone action segment is activated.
 * - `volume-panel-open` – Fired when the volume action segment is activated.
 * - `system-icons-panel-open` – Fired when the system icons action segment is activated.
 *
 * ## Best Practices and Constraints
 *
 * - Only enable system indicators that are relevant to your application context.
 * - In the actions variant, avoid overloading the UI with too many segments; keep the number of quick actions manageable.
 * - Each segment in the actions variant should have a clear, distinct purpose.
 * - The component is intended for summary/status and quick access, not for detailed configuration (which should be handled in dedicated panels).
 * - For accessibility, ensure that all interactive segments are reachable via keyboard and provide appropriate labels.
 *
 * ## Example
 *
 * ```html
 * <obc-system-button
 *   variant="actions"
 *   .systemState="${{
 *     wifi: {enabled: true, connected: true, strength: 3},
 *     audio: {enabled: true, muted: false, volume: 65},
 *     microphone: {enabled: true, muted: false, sensitivity: 80},
 *     battery: {enabled: true, level: 78, charging: false},
 *     gps: {enabled: true, connected: true, quality: 'medium'},
 *   }}"
 * >
 *   <span slot="icon"><obi-placeholder></obi-placeholder></span>
 * </obc-system-button>
 * ```
 *
 * @fires menu-toggle {CustomEvent<{open: boolean}>} When the expanded variant is toggled open or closed
 * @fires system-state-change {CustomEvent<{state: SystemState}>} When the system state is updated
 * @fires microphone-panel-open {CustomEvent<void>} When the microphone action segment is activated
 * @fires volume-panel-open {CustomEvent<void>} When the volume action segment is activated
 * @fires system-icons-panel-open {CustomEvent<void>} When the system icons action segment is activated
 */
export declare class ObcSystemButton extends LitElement {
    /**
     * Controls the visual and interactive mode of the system button.
     *
     * - `condensed`: Single icon button for minimal UI.
     * - `expanded`: Horizontal button showing a row of system status icons.
     * - `actions`: Segmented button group for quick access to system controls.
     *
     * Default: `condensed`
     */
    variant: SystemButtonVariant;
    /**
     * Disables all interactions and renders the button(s) in a disabled state.
     */
    disabled: boolean;
    /**
     * Object describing the enabled state and current value for each system indicator (WiFi, audio, microphone, battery, GPS).
     *
     * Each sub-property (e.g., `wifi.enabled`, `audio.volume`) controls the presence and state of its corresponding icon.
     *
     * Default: all indicators disabled except WiFi (connected), audio (volume 65), microphone (sensitivity 80), battery (level 78), GPS (quality medium).
     */
    systemState: SystemState;
    /**
     * Indicates whether a system panel is currently open (used internally for expanded/actions variants).
     */
    menuOpen: boolean;
    /**
     * Indicates which panel (if any) is currently active.
     * One of: `'microphone'`, `'volume'`, `'system-icons'`, or `null`.
     */
    activePanel: 'microphone' | 'volume' | 'system-icons' | null;
    private _handleExpandedTypeClick;
    /**
     * Updates the system state and dispatches a change event.
     * Called by the System Menu component.
     *
     * @param newState Partial system state to merge with the current state.
     * @fires system-state-change {CustomEvent<{state: SystemState}>} When the system state is updated
     */
    updateSystemState(newState: Partial<SystemState>): void;
    /**
     * Closes the system menu panel.
     * Called by the System Menu component.
     */
    closeMenu(): void;
    private _handleMicrophoneActionClick;
    private _handleVolumeActionClick;
    private _handleSystemIconsActionClick;
    private _renderActionsButtons;
    private _renderMicrophoneIcon;
    private _renderVolumeIcon;
    private _renderWifiIcon;
    private _renderGpsIcon;
    private _renderBatteryIcon;
    render(): import('lit-html').TemplateResult<1>;
    static styles: import('lit').CSSResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'obc-system-button': ObcSystemButton;
    }
}
//# sourceMappingURL=system-button.d.ts.map