import { LitElement } from 'lit';
import { ObcTextInputFieldSize } from '../text-input-field/text-input-field.js';
import '../icon-button/icon-button.js';
import '../../icons/icon-close-google.js';
import '../../icons/icon-backspace-google.js';
import '../../icons/icon-arrow-right-google.js';
import '../../icons/icon-arrow-left-google.js';
import '../../icons/icon-shift-lock.js';
import '../text-input-field/text-input-field.js';
import '../button/button.js';
import '../check-button/check-button.js';
export declare enum ObcKeyboardFullType {
    Floating = "floating",
    Flat = "flat"
}
export declare enum ObcKeyboardFullMode {
    ABC = "abc",
    Numbers = "123",
    Symbols = "symbols",
    SymbolsWithNumberRow = "symbols-with-number-row"
}
/**
 * `<obc-keyboard-full>` – A comprehensive virtual keyboard component for alphanumeric text input.
 *
 * A full-featured on-screen keyboard that provides QWERTY layout with numeric and symbol modes,
 * designed for touch-screen interfaces where physical keyboards are unavailable or impractical.
 * Includes an integrated text input field with cursor positioning, action buttons for mode switching,
 * and customizable visual presentation.
 *
 * ## Features
 *
 * ### Keyboard Modes
 * The component supports multiple input modes that users can toggle between:
 *
 * - **ABC Mode (QWERTY)**: Standard alphabetic layout with CAPS lock functionality for uppercase/lowercase toggling.
 *   When CAPS is enabled, letters appear in uppercase; when disabled, lowercase.
 * - **123 Mode (Numbers)**: Numeric layout (0-9) combined with commonly-used symbols like parentheses,
 *   forward/backslash, quotation marks, and mathematical operators.
 * - **Symbols Mode**: Extended symbol set including currency symbols (§, €, £), brackets, mathematical
 *   operators, and punctuation marks for specialized input.
 *
 * ### Visual Variants
 *
 * - **Floating (`type="floating"`)**: Default presentation with shadow elevation and rounded corners,
 *   appearing to float above the UI. Suitable for modal or overlay contexts.
 * - **Flat (`type="flat"`)**: Minimalist presentation without shadows, designed to integrate seamlessly
 *   at the bottom of the screen or within embedded layouts. Uses a top border for subtle separation.
 *
 * ### Layout Configurations
 *
 * - **Standard Layout** (`showNumberRow={false}`): Three-row QWERTY layout with mode toggle buttons
 *   (ABC → 123 → Symbols → ABC) and cursor navigation arrows positioned beside the input field.
 * - **Compact Layout with Number Row** (`showNumberRow={true}`): Four-row layout featuring a dedicated
 *   number row (1-0) above the QWERTY keys. In this mode, only ABC and Symbols modes are available
 *   (no dedicated 123 mode), and cursor navigation arrows relocate to the action button panel on the right.
 *
 * ### Interactive Elements
 *
 * - **Integrated Input Field**: Displays current text value with placeholder support and direct editing capability.
 * - **Cursor Navigation**: Left/right arrow buttons for precise cursor positioning within the text.
 * - **SPACE Bar**: Full-width button for space character insertion at cursor position.
 * - **DEL (Backspace)**: Removes character before cursor position, with visual icon indicator.
 * - **CAPS Button**: Toggles uppercase/lowercase for alphabetic characters (ABC mode only).
 * - **Mode Toggle Button**: Cycles between keyboard modes, showing appropriate label (123, #+=, or ABC).
 * - **DONE Button**: Confirms input completion and dispatches the `done-click` event with final value.
 * - **Close Button** (optional): Appears in top bar when `showTopBar={true}`, dispatches `close-click` event.
 *
 * ### Optional Top Bar
 *
 * When `showTopBar` is enabled, displays a header containing:
 * - Parameter name label (customizable via `parameterName` property) in overline typography style
 * - Close button (icon-button with close icon) aligned to the right
 *
 * ## Usage Guidelines
 *
 * Use `<obc-keyboard-full>` when:
 * - Implementing touch-screen applications where users cannot access physical keyboards
 * - Building kiosk interfaces, embedded systems, or specialized control panels
 * - Creating password entry or secure input fields requiring custom keyboard layouts
 * - Designing applications for environments where on-screen keyboards improve workflow
 *   (e.g., gloves-required environments, or where switching between physical keyboard and touchscreen is inefficient)
 *
 * **Layout Decision Guide:**
 * - Use **floating type** for modal dialogs, overlays, or temporary input contexts where the keyboard
 *   should appear distinct from underlying content.
 * - Use **flat type** for persistent keyboards anchored to the bottom of the screen or embedded
 *   within a fixed layout section.
 * - Enable **showNumberRow** when frequent numeric input is required (passwords, codes, mixed alphanumeric),
 *   reducing mode switches. This is ideal for fields like serial numbers, product codes, or passwords
 *   containing both letters and numbers.
 * - Disable **showNumberRow** for primarily alphabetic input or when screen space is limited,
 *   as standard layout provides more compact dimensions.
 *
 * **Best Practices:**
 * - Always provide meaningful `parameterName` text when `showTopBar` is enabled to give users context
 *   about what they're entering (e.g., "Enter Password", "Station Name", "Notes").
 * - Listen for `value-change` events to reactively update your application state as the user types.
 * - Handle `done-click` to process completed input (e.g., submit form, close keyboard, validate entry).
 * - Handle `close-click` to allow users to dismiss the keyboard without completing input
 *   (equivalent to "cancel" action).
 * - For input fields requiring specific formats (URLs, emails), consider pre-populating `value`
 *   with protocol prefixes or domain suffixes, or add validation after `done-click`.
 *
 * **TODO(designer)**: Confirm whether there are recommended timeout behaviors if the keyboard remains
 * idle, or if keyboard should always require explicit close/done action.
 *
 * **TODO(designer)**: Clarify whether `type="flat"` has specific use cases tied to certain application
 * contexts, or if it's purely a visual preference decision.
 *
 * ## Keyboard Interaction Details
 *
 * The component maintains proper cursor position during editing:
 * - Clicking within the input field positions the cursor at that location
 * - Key presses insert characters at the current cursor position (not just at the end)
 * - Backspace removes the character immediately before the cursor
 * - Space bar inserts a space at the cursor position
 * - Arrow buttons move the cursor left/right one character at a time
 *
 * Focus is automatically maintained on the input field during keyboard interactions to prevent
 * focus loss when clicking keyboard buttons (via `@mousedown` prevention).
 *
 * ## Example Usage
 *
 * **Basic floating keyboard:**
 * ```html
 * <obc-keyboard-full
 *   parameterName="Enter Station Name"
 *   placeholder="Type here..."
 *   @value-change=${(e) => console.log('Value:', e.detail.value)}
 *   @done-click=${(e) => this.handleSubmit(e.detail.value)}
 *   @close-click=${() => this.dismissKeyboard()}
 * >
 * </obc-keyboard-full>
 * ```
 *
 * **Flat keyboard with number row for password input:**
 * ```html
 * <obc-keyboard-full
 *   type="flat"
 *   parameterName="Password"
 *   placeholder="Enter password"
 *   showNumberRow
 *   showTopBar={false}
 *   @done-click=${(e) => this.validatePassword(e.detail.value)}
 * >
 * </obc-keyboard-full>
 * ```
 *
 * **Pre-filled value for editing:**
 * ```html
 * <obc-keyboard-full
 *   value="Initial text"
 *   parameterName="Edit Description"
 *   @value-change=${(e) => this.updateDraft(e.detail.value)}
 * >
 * </obc-keyboard-full>
 * ```
 *
 * @fires value-change {CustomEvent<{value: string}>} Dispatched whenever the text value changes
 *   (on key press, backspace, space, or direct input field editing). The `detail.value` contains
 *   the complete current text string.
 * @fires done-click {CustomEvent<{value: string}>} Dispatched when the DONE button is clicked,
 *   indicating the user has completed text entry. The `detail.value` contains the final text string.
 * @fires close-click {CustomEvent<void>} Dispatched when the close button (in top bar) is clicked,
 *   allowing the application to dismiss the keyboard without submitting the value.
 */
export declare class ObcKeyboardFull extends LitElement {
    type: ObcKeyboardFullType;
    showTopBar: boolean;
    parameterName: string;
    value: string;
    placeholder: string;
    showNumberRow: boolean;
    inputSize: ObcTextInputFieldSize;
    private mode;
    private capsLock;
    private inputField;
    private readonly numberRow;
    private readonly qwertyLayout;
    private readonly symbolsWithNumberRowLayout;
    private readonly numbersLayout;
    private readonly symbolsLayout;
    private onCloseClick;
    private preventFocusLoss;
    private onKeyPress;
    private onBackspace;
    private onSpace;
    private onToggleCaps;
    private onToggleMode;
    private onCursorLeft;
    private onCursorRight;
    private onDone;
    private dispatchValueChange;
    private onInputFieldValueChanged;
    private renderCursorNavigation;
    private renderModeButton;
    private renderKeyboard;
    private renderABCKeyboard;
    private renderSymbolsWithNumberRowKeyboard;
    private renderNumbersKeyboard;
    private renderSymbolsKeyboard;
    protected render(): import('lit-html').TemplateResult<1>;
    static styles: import('lit').CSSResult;
}
declare global {
    interface HTMLElementTagNameMap {
        'obc-keyboard-full': ObcKeyboardFull;
    }
}
//# sourceMappingURL=keyboard-full.d.ts.map