{"version":3,"file":"fundamental-ngx-core-segmented-button.mjs","sources":["../../../../libs/core/segmented-button/segmented-button.component.ts","../../../../libs/core/segmented-button/segmented-button.module.ts","../../../../libs/core/segmented-button/fundamental-ngx-core-segmented-button.ts"],"sourcesContent":["import { ENTER, SPACE } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChildren,\n    DestroyRef,\n    ElementRef,\n    Host,\n    HostListener,\n    Input,\n    OnChanges,\n    OnDestroy,\n    QueryList,\n    Renderer2,\n    SimpleChanges,\n    ViewEncapsulation,\n    booleanAttribute,\n    effect,\n    forwardRef,\n    inject,\n    signal\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n    FocusableItemDirective,\n    FocusableListDirective,\n    KeyUtil,\n    Nullable,\n    RtlService,\n    destroyObservable\n} from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent, FD_BUTTON_COMPONENT } from '@fundamental-ngx/core/button';\nimport { FD_LANGUAGE_SIGNAL, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { EMPTY, Subject, asyncScheduler, fromEvent, merge } from 'rxjs';\nimport { filter, observeOn, startWith, takeUntil, tap } from 'rxjs/operators';\n\nexport type SegmentedButtonValue = string | (string | null)[] | null;\n\n/**\n * Container for grouped buttons.\n *\n * ```html\n * <fd-segmented-button [(ngModel)]=\"value\">\n *     <button fd-button value=\"first\">Button</button>\n *     <button fd-button value=\"second\">Button</button>\n *     <button fd-button value=\"third\">Button</button>\n * </fd-segmented-button>\n * ```\n */\n@Component({\n    selector: 'fd-segmented-button',\n    template: `<ng-content></ng-content>`,\n    styleUrl: './segmented-button.component.scss',\n    host: {\n        role: 'listbox',\n        '[class.fd-segmented-button]': 'true',\n        '[class.fd-segmented-button--vertical]': 'vertical',\n        '[attr.aria-multiselectable]': 'toggle',\n        '[attr.aria-orientation]': 'vertical ? \"vertical\" : \"horizontal\"',\n        '[attr.aria-roledescription]': '_groupRoleDescription',\n        '[attr.aria-activedescendant]': '_focusedItemId()'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => SegmentedButtonComponent),\n            multi: true\n        }\n    ],\n    hostDirectives: [FocusableListDirective]\n})\nexport class SegmentedButtonComponent implements AfterViewInit, ControlValueAccessor, OnDestroy, OnChanges {\n    /** Whether segmented button is on toggle mode, which allows to toggle more than 1 button */\n    @Input({ transform: booleanAttribute })\n    toggle = false;\n\n    /**\n     * Whether segmented button is on vertical mode,\n     * which allows to display buttons vertically\n     **/\n    @Input({ transform: booleanAttribute })\n    vertical = false;\n\n    /** @hidden */\n    @ContentChildren(FD_BUTTON_COMPONENT)\n    _buttons: QueryList<ButtonComponent>;\n\n    /** @hidden */\n    @ContentChildren(FocusableItemDirective)\n    _focusableItems: QueryList<FocusableItemDirective>;\n\n    /** @hidden */\n    _groupRoleDescription: string;\n\n    /** @hidden */\n    _buttonRoleDescription: string;\n\n    /** @hidden */\n    protected _focusedItemId = signal<string | null | undefined>(null);\n\n    /**\n     * Value of segmented button can have 2 types:\n     * - string, when there is no toggle mode and only 1 value can be chosen.\n     * - array of strings, when there is toggle mode and more than 1 value can be chosen.\n     */\n    private _currentValue: SegmentedButtonValue;\n\n    /** @hidden */\n    private _isDisabled = false;\n\n    /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing)  */\n    private readonly _onRefresh$: Subject<void> = new Subject<void>();\n\n    /** @hidden */\n    private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n    /** @hidden */\n    private _translationResolver = inject(TranslationResolver);\n\n    /** @hidden */\n    private renderer = inject(Renderer2);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    constructor(\n        private readonly _changeDetRef: ChangeDetectorRef,\n        private readonly _elementRef: ElementRef,\n        private readonly _destroyRef: DestroyRef,\n        @Host() private _focusableList: FocusableListDirective\n    ) {\n        this._focusableList.navigationDirection.set(this.vertical ? 'vertical' : 'horizontal');\n        effect(() => {\n            this._focusableList.contentDirection.set(this._rtlService?.rtl() ? 'rtl' : 'ltr');\n        });\n        const itemFocusedSubscription = this._focusableList.itemFocused.subscribe((item) => {\n            this._focusedItemId.set(item.id);\n        });\n        this._destroyRef.onDestroy(() => itemFocusedSubscription.unsubscribe());\n\n        // Effect for language changes\n        effect(() => {\n            const lang = this._langSignal();\n            this._groupRoleDescription = this._translationResolver.resolve(\n                lang,\n                'segmentedButton.groupRoleDescription'\n            );\n            this._buttonRoleDescription = this._translationResolver.resolve(\n                lang,\n                'segmentedButton.buttonRoleDescription'\n            );\n            this._updateButtonRoleDescriptions();\n            this._changeDetRef.markForCheck();\n        });\n    }\n\n    /** @hidden */\n    @HostListener('click', ['$event'])\n    protected _click(event: MouseEvent): void {\n        if (this._isDisabled) {\n            return;\n        }\n        if (!this._elementRef.nativeElement.contains(event.relatedTarget)) {\n            this.onTouched();\n        }\n    }\n\n    /** @hidden */\n    onChange: (value: SegmentedButtonValue) => void = () => {};\n\n    /** @hidden */\n    onTouched = (): void => {};\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        this._listenToButtonChanges();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes && changes.vertical) {\n            this._focusableList.navigationDirection.set(this.vertical ? 'vertical' : 'horizontal');\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._onRefresh$.complete();\n        this._buttons = null as any;\n        this._focusableItems = null as any;\n    }\n\n    /** @hidden */\n    writeValue(values: string[] | string): void {\n        this._currentValue = values;\n        this._pickButtonsByValues(values);\n    }\n\n    /**\n     * @hidden\n     * @param fn User defined function that handles the *onChange* event of the SegmentedButtons.\n     */\n    registerOnChange(fn: (value: SegmentedButtonValue) => void): void {\n        this.onChange = fn;\n    }\n\n    /**\n     * @hidden\n     * @param fn User defined function that handles the *onTouch* event of the SegmentedButtons.\n     */\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * @hidden\n     * @param isDisabled Sets the value of the *disabled* property of the SegmentedButtons.\n     */\n    setDisabledState(isDisabled: boolean): void {\n        this._isDisabled = isDisabled;\n        this._toggleDisableButtons(isDisabled);\n        this._onRefresh$.next();\n\n        if (!isDisabled) {\n            if (this._buttons) {\n                this._listenToButtonChanges();\n                this._pickButtonsByValues(this._currentValue);\n            }\n        }\n        this._changeDetRef.detectChanges();\n    }\n\n    /** @hidden */\n    private _listenToButtonChanges(): void {\n        if (!this._buttons || !this._focusableItems) {\n            return;\n        }\n\n        this._onRefresh$.next();\n\n        merge(this._buttons.changes ?? EMPTY, this._focusableItems.changes ?? EMPTY)\n            .pipe(startWith(1), observeOn(asyncScheduler), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n                if (!this._buttons || !this._focusableItems) {\n                    return;\n                }\n\n                this._toggleDisableButtons(this._isDisabled);\n                this._pickButtonsByValues(this._currentValue);\n                this._buttons.forEach((button, index) => {\n                    this._setButtonAttributes(button, index);\n                    this._listenToTriggerEvents(button);\n                });\n            });\n    }\n\n    /** @hidden */\n    private _listenToTriggerEvents(buttonComponent: ButtonComponent): void {\n        const htmlElement = buttonComponent.elementRef.nativeElement;\n\n        const refresh$ = merge(destroyObservable(this._destroyRef), this._onRefresh$);\n\n        const triggerEvents$ = merge(\n            fromEvent(htmlElement, 'click'),\n            fromEvent<KeyboardEvent>(htmlElement, 'keydown').pipe(\n                filter((event) => KeyUtil.isKeyCode(event, [ENTER, SPACE])),\n                tap((event) => {\n                    event.preventDefault();\n                    this.onTouched();\n                })\n            )\n        );\n\n        triggerEvents$.pipe(takeUntil(refresh$)).subscribe(() => this._handleTriggerOnButton(buttonComponent));\n    }\n\n    /** @hidden */\n    private _setButtonAttributes(buttonComponent: ButtonComponent, index: number): void {\n        const el = buttonComponent.elementRef.nativeElement;\n        this.renderer.setAttribute(el, 'role', 'option');\n        this.renderer.setAttribute(el, 'aria-roledescription', this._buttonRoleDescription);\n        this.renderer.setAttribute(el, 'aria-posinset', String(index + 1));\n        this.renderer.setAttribute(el, 'aria-setsize', String(this._buttons.length));\n    }\n\n    private _updateButtonRoleDescriptions(): void {\n        if (!this._buttons) {\n            return;\n        }\n        this._buttons.forEach((button) => {\n            this.renderer.setAttribute(\n                button.elementRef.nativeElement,\n                'aria-roledescription',\n                this._buttonRoleDescription\n            );\n        });\n    }\n\n    /** @hidden */\n    private _handleTriggerOnButton(buttonComponent: ButtonComponent): void {\n        if (!this._isButtonDisabled(buttonComponent)) {\n            if (!this.toggle) {\n                this._buttons.forEach((button) => this._deselectButton(button));\n                this._selectButton(buttonComponent);\n                this._propagateChange();\n                this._changeDetRef.markForCheck();\n            } else {\n                this._toggleButton(buttonComponent);\n                this._propagateChange();\n                this._changeDetRef.markForCheck();\n            }\n        }\n    }\n\n    /** @hidden */\n    private _propagateChange(): void {\n        const selectedValue = this._getValuesBySelected();\n        this.onChange(selectedValue);\n        this._currentValue = selectedValue;\n    }\n\n    /** @hidden */\n    private _toggleButton(buttonComponent: ButtonComponent): void {\n        if (this._isButtonSelected(buttonComponent)) {\n            this._deselectButton(buttonComponent);\n        } else {\n            this._selectButton(buttonComponent);\n        }\n    }\n\n    /** @hidden */\n    private _pickButtonsByValues(values: SegmentedButtonValue): void {\n        if (!this._buttons) {\n            return;\n        }\n        this._buttons.forEach((button) => this._deselectButton(button));\n        this._getButtonsByValues(values).forEach((button) => this._selectButton(button));\n        this._changeDetRef.detectChanges();\n    }\n\n    /** @hidden */\n    private _getButtonsByValues(values: SegmentedButtonValue): ButtonComponent[] {\n        if (!values) {\n            return [];\n        }\n\n        if (Array.isArray(values)) {\n            return this._buttons.filter((button) => !!values.find((value) => this._getButtonValue(button) === value));\n        } else {\n            return this._buttons.filter((button) => this._getButtonValue(button) === values);\n        }\n    }\n\n    /** @hidden */\n    private _selectButton(buttonComponent: ButtonComponent): void {\n        buttonComponent.setSelected(true);\n    }\n\n    /** @hidden */\n    private _deselectButton(buttonComponent: ButtonComponent): void {\n        buttonComponent.setSelected(false);\n    }\n\n    /** @hidden */\n    private _isButtonSelected(buttonComponent: ButtonComponent): Nullable<boolean> {\n        return !!buttonComponent.isSelected();\n    }\n\n    /** @hidden */\n    private _isButtonDisabled(buttonComponent: ButtonComponent): boolean {\n        return buttonComponent.isDisabled() || buttonComponent.ariaDisabled();\n    }\n\n    /** @hidden */\n    private _toggleDisableButtons(disable: boolean): void {\n        if (!this._buttons || !this._focusableItems) {\n            return;\n        }\n\n        this._buttons.forEach((button) => button.setDisabled(disable));\n\n        this._focusableItems.forEach((focusableItemDirective) => {\n            focusableItemDirective.setTabbable(!disable);\n            focusableItemDirective.setFocusable(!disable);\n        });\n\n        this._changeDetRef.markForCheck();\n    }\n\n    /** @hidden */\n    private _getButtonValue(buttonComponent: ButtonComponent): string | null {\n        const element = buttonComponent.elementRef.nativeElement;\n        if (element instanceof HTMLButtonElement) {\n            return element.value;\n        }\n        return element.getAttribute('value');\n    }\n\n    /** @hidden\n     * Returns values depending on selected state of buttons\n     */\n    private _getValuesBySelected(): SegmentedButtonValue {\n        if (!this._buttons) {\n            return [];\n        }\n\n        const resButtons = this._buttons\n            .filter((button) => !!this._isButtonSelected(button))\n            .map((button) => this._getButtonValue(button));\n        if (!this.toggle) {\n            return resButtons.length === 1 ? resButtons[0] : null;\n        } else {\n            return resButtons;\n        }\n    }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SegmentedButtonComponent } from './segmented-button.component';\n\n/**\n * @deprecated\n * Use direct `SegmentedButtonComponent` import instead.\n */\n@NgModule({\n    imports: [SegmentedButtonComponent],\n    exports: [SegmentedButtonComponent]\n})\nexport class SegmentedButtonModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}