import * as _angular_core from '@angular/core';
import { OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { TranslatableString } from '@siemens/element-translate-ng/translate-types';

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

/** An item for si-status-toggle. */
interface StatusToggleItem {
    /** Text displayed for the item. */
    text: TranslatableString;
    /** Icon displayed for the item. */
    icon: string;
    /** Value of the item. */
    value: string | number;
    /** Whether the item is disabled. */
    disabled?: boolean;
    /** Icon shown when the item is active. */
    activeIcon?: string;
    /** Stacked icon shown when the item is active. */
    activeIconStacked?: string;
    /** Class applied to the icon when the item is selected. */
    activeIconClass?: string;
    /** Class applied to the stacked icon when the item is selected. */
    activeIconStackedClass?: string;
    /** Class applied to the text when the item is selected. */
    activeTextClass?: string;
}

declare class SiStatusToggleComponent implements ControlValueAccessor, OnInit, OnDestroy, OnChanges {
    /** List of status items. */
    readonly items: _angular_core.InputSignal<StatusToggleItem[]>;
    /**
     * Disabled state for the whole component.
     * @defaultValue false
     **/
    readonly disabled: _angular_core.InputSignal<boolean>;
    /** Value of currently selected status item. */
    readonly value: _angular_core.ModelSignal<string | number | undefined>;
    /** Emitted when an item is clicked. */
    readonly itemClick: _angular_core.OutputEmitterRef<string | number>;
    private readonly containerElement;
    private readonly draggableElement;
    private boundingX;
    private x0;
    private offset0;
    private onChange?;
    private onTouched?;
    private unlistenDragEvents;
    private readonly internalDisabled;
    protected readonly selectedIndex: _angular_core.WritableSignal<number | undefined>;
    protected readonly draggablePosition: _angular_core.WritableSignal<string>;
    protected readonly animated: _angular_core.WritableSignal<boolean>;
    protected readonly isDisabled: _angular_core.Signal<boolean>;
    ngOnChanges(changes: SimpleChanges<this>): void;
    ngOnInit(): void;
    ngOnDestroy(): void;
    /** @internal */
    writeValue(value: string | number): void;
    /** @internal */
    registerOnChange(fn: (value: string | number) => void): void;
    /** @internal */
    registerOnTouched(fn: () => void): void;
    /** @internal */
    setDisabledState(isDisabled: boolean): void;
    protected handleMouseDown(event: MouseEvent): void;
    protected handleTouchStart(event: TouchEvent): void;
    private handleDragStart;
    private handleDragEnd;
    private getOffset;
    private getUnderlyingIndex;
    private arrangeToUnderlyingItem;
    private handleDragMove;
    private getX;
    private setValue;
    protected selectItem(index: number | undefined, animated?: boolean, emit?: boolean): void;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiStatusToggleComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiStatusToggleComponent, "si-status-toggle", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "itemClick": "itemClick"; }, never, never, true, never>;
}

export { SiStatusToggleComponent };
export type { StatusToggleItem };
