import * as i0 from '@angular/core';
import { OnInit, AfterViewInit, OnDestroy, OnChanges, QueryList, ChangeDetectorRef, ElementRef, DestroyRef, NgZone, SimpleChanges } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import * as i1 from '@fundamental-ngx/cdk/utils';
import { FocusableItemDirective, FocusableListDirective } from '@fundamental-ngx/cdk/utils';
import { ButtonComponent } from '@fundamental-ngx/core/button';

type SegmentedButtonValue = string | (string | null)[] | null;
/**
 * Container for grouped buttons.
 *
 * ```html
 * <fd-segmented-button [(ngModel)]="value">
 *     <button fd-button value="first">Button</button>
 *     <button fd-button value="second">Button</button>
 *     <button fd-button value="third">Button</button>
 * </fd-segmented-button>
 * ```
 */
declare class SegmentedButtonComponent implements OnInit, AfterViewInit, ControlValueAccessor, OnDestroy, OnChanges {
    private readonly _changeDetRef;
    private readonly _elementRef;
    private readonly _destroyRef;
    private readonly _ngZone;
    private _focusableList;
    /** Whether segmented button is on toggle mode, which allows to toggle more than 1 button */
    toggle: boolean;
    /**
     * Whether segmented button is on vertical mode,
     * which allows to display buttons vertically
     **/
    vertical: boolean;
    /** @hidden */
    _buttons: QueryList<ButtonComponent>;
    /** @hidden */
    _focusableItems: QueryList<FocusableItemDirective>;
    /** @hidden */
    _groupRoleDescription: string;
    /** @hidden */
    _buttonRoleDescription: string;
    /** @hidden */
    protected _focusedItemId: i0.WritableSignal<string | null | undefined>;
    /**
     * Value of segmented button can have 2 types:
     * - string, when there is no toggle mode and only 1 value can be chosen.
     * - array of strings, when there is toggle mode and more than 1 value can be chosen.
     */
    private _currentValue;
    /** @hidden */
    private _isDisabled;
    /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing)  */
    private readonly _onRefresh$;
    /** @hidden */
    private readonly _lang$;
    /** @hidden */
    private _translationResolver;
    /** @hidden */
    private renderer;
    /** @hidden */
    private readonly _rtlService;
    /** @hidden */
    constructor(_changeDetRef: ChangeDetectorRef, _elementRef: ElementRef, _destroyRef: DestroyRef, _ngZone: NgZone, _focusableList: FocusableListDirective);
    /** @hidden */
    protected _click(event: MouseEvent): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    onChange: (value: SegmentedButtonValue) => void;
    /** @hidden */
    onTouched: () => void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    writeValue(values: string[] | string): void;
    /**
     * @hidden
     * @param fn User defined function that handles the *onChange* event of the SegmentedButtons.
     */
    registerOnChange(fn: (value: SegmentedButtonValue) => void): void;
    /**
     * @hidden
     * @param fn User defined function that handles the *onTouch* event of the SegmentedButtons.
     */
    registerOnTouched(fn: () => void): void;
    /**
     * @hidden
     * @param isDisabled Sets the value of the *disabled* property of the SegmentedButtons.
     */
    setDisabledState(isDisabled: boolean): void;
    /** @hidden */
    private _listenToButtonChanges;
    /** @hidden */
    private _listenToTriggerEvents;
    /** @hidden */
    private _setButtonAttributes;
    private _updateButtonRoleDescriptions;
    /** @hidden */
    private _handleTriggerOnButton;
    /** @hidden */
    private _propagateChange;
    /** @hidden */
    private _toggleButton;
    /** @hidden */
    private _pickButtonsByValues;
    /** @hidden */
    private _getButtonsByValues;
    /** @hidden */
    private _selectButton;
    /** @hidden */
    private _deselectButton;
    /** @hidden */
    private _isButtonSelected;
    /** @hidden */
    private _isButtonDisabled;
    /** @hidden */
    private _toggleDisableButtons;
    /** @hidden */
    private _getButtonValue;
    /** @hidden
     * Returns values depending on selected state of buttons
     */
    private _getValuesBySelected;
    static ɵfac: i0.ɵɵFactoryDeclaration<SegmentedButtonComponent, [null, null, null, null, { host: true; }]>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SegmentedButtonComponent, "fd-segmented-button", never, { "toggle": { "alias": "toggle"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; }, {}, ["_buttons", "_focusableItems"], ["*"], true, [{ directive: typeof i1.FocusableListDirective; inputs: {}; outputs: {}; }]>;
    static ngAcceptInputType_toggle: unknown;
    static ngAcceptInputType_vertical: unknown;
}

/**
 * @deprecated
 * Use direct `SegmentedButtonComponent` import instead.
 */
declare class SegmentedButtonModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<SegmentedButtonModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<SegmentedButtonModule, never, [typeof SegmentedButtonComponent], [typeof SegmentedButtonComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<SegmentedButtonModule>;
}

export { SegmentedButtonComponent, SegmentedButtonModule };
export type { SegmentedButtonValue };
