{"version":3,"file":"igniteui-angular-button-group.mjs","sources":["../../../projects/igniteui-angular/button-group/src/button-group/button-group.component.ts","../../../projects/igniteui-angular/button-group/src/button-group/button-group-content.component.html","../../../projects/igniteui-angular/button-group/src/button-group/public_api.ts","../../../projects/igniteui-angular/button-group/src/button-group/button-group.module.ts","../../../projects/igniteui-angular/button-group/src/igniteui-angular-button-group.ts"],"sourcesContent":["import { AfterViewInit, Component, ContentChildren, ChangeDetectorRef, EventEmitter, HostBinding, Input, Output, QueryList, Renderer2, ViewChildren, OnDestroy, ElementRef, booleanAttribute, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxRippleDirective } from 'igniteui-angular/directives';\n\nimport { takeUntil } from 'rxjs/operators';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/**\n * Determines the Button Group alignment\n */\nexport const ButtonGroupAlignment = {\n    horizontal: 'horizontal',\n    vertical: 'vertical'\n} as const;\nexport type ButtonGroupAlignment = typeof ButtonGroupAlignment[keyof typeof ButtonGroupAlignment];\n\nlet NEXT_ID = 0;\n\n/**\n * **Ignite UI for Angular Button Group** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/buttongroup.html)\n *\n * The Ignite UI Button Group displays a group of buttons either vertically or horizontally. The group supports\n * single, multi and singleRequired selection.\n *\n * Example:\n * ```html\n * <igx-buttongroup selectionMode=\"multi\" [values]=\"fontOptions\">\n * </igx-buttongroup>\n * ```\n * The `fontOptions` value shown above is defined as:\n * ```typescript\n * this.fontOptions = [\n *   { icon: 'format_bold', selected: false },\n *   { icon: 'format_italic', selected: false },\n *   { icon: 'format_underlined', selected: false }];\n * ```\n */\n@Component({\n    selector: 'igx-buttongroup',\n    templateUrl: 'button-group-content.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent]\n})\nexport class IgxButtonGroupComponent implements AfterViewInit, OnDestroy {\n    private _cdr = inject(ChangeDetectorRef);\n    private _renderer = inject(Renderer2);\n    private _el = inject(ElementRef);\n\n    /**\n     * A collection containing all buttons inside the button group.\n     */\n    public get buttons(): IgxButtonDirective[] {\n        return [...this.viewButtons.toArray(), ...this.templateButtons.toArray()];\n    }\n\n    /**\n     * Gets/Sets the value of the `id` attribute. If not set it will be automatically generated.\n     * ```html\n     *  <igx-buttongroup [id]=\"'igx-dialog-56'\" [selectionMode]=\"'multi'\" [values]=\"alignOptions\">\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-buttongroup-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.zIndex')\n    public zIndex = 0;\n\n    /**\n     * Allows you to set a style using the `itemContentCssClass` input.\n     * The value should be the CSS class name that will be applied to the button group.\n     * ```typescript\n     * public style1 = \"styleClass\";\n     *  //..\n     * ```\n     *  ```html\n     * <igx-buttongroup [itemContentCssClass]=\"style1\" [selectionMode]=\"'multi'\" [values]=\"alignOptions\">\n     * ```\n     */\n    @Input()\n    public set itemContentCssClass(value: string) {\n        this._itemContentCssClass = value || this._itemContentCssClass;\n    }\n\n    /**\n     * Returns the CSS class of the item content of the `IgxButtonGroup`.\n     * ```typescript\n     *  @ViewChild(\"MyChild\")\n     * public buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let buttonSelect = this.buttonG.itemContentCssClass;\n     * }\n     * ```\n     */\n    public get itemContentCssClass(): string {\n        return this._itemContentCssClass;\n    }\n\n    /**\n     * Enables selecting multiple buttons. By default, multi-selection is false.\n     *\n     * @deprecated in version 16.1.0. Use the `selectionMode` property instead.\n     */\n    @Input()\n    public get multiSelection() {\n        if (this.selectionMode === 'multi') {\n            return true;\n        } else {\n            return false;\n        }\n    }\n    public set multiSelection(selectionMode: boolean) {\n        if (selectionMode) {\n            this.selectionMode = 'multi';\n        } else {\n            this.selectionMode = 'single';\n        }\n    }\n\n    /**\n     * Gets/Sets the selection mode to 'single', 'singleRequired' or 'multi' of the buttons. By default, the selection mode is 'single'.\n     * ```html\n     * <igx-buttongroup [selectionMode]=\"'multi'\" [alignment]=\"alignment\"></igx-buttongroup>\n     * ```\n     */\n    @Input()\n    public get selectionMode() {\n        return this._selectionMode;\n    }\n    public set selectionMode(selectionMode: 'single' | 'singleRequired' | 'multi') {\n        if (this.viewButtons && selectionMode !== this._selectionMode) {\n            this.buttons.forEach((b,i) => {\n                this.deselectButton(i);\n            });\n            this._selectionMode = selectionMode;\n        } else {\n            this._selectionMode = selectionMode;\n        }\n    }\n\n    /**\n     * Property that configures the buttons in the button group using a collection of `Button` objects.\n     * ```typescript\n     *  public ngOnInit() {\n     *      this.cities = [\n     *        new Button({\n     *          label: \"Sofia\"\n     *      }),\n     *        new Button({\n     *          label: \"London\"\n     *      }),\n     *        new Button({\n     *          label: \"New York\",\n     *          selected: true\n     *      }),\n     *        new Button({\n     *          label: \"Tokyo\"\n     *      })\n     *  ];\n     *  }\n     *  //..\n     * ```\n     * ```html\n     *  <igx-buttongroup [selectionMode]=\"'single'\" [values]=\"cities\"></igx-buttongroup>\n     * ```\n     */\n    @Input() public values: any;\n\n    /**\n     * Disables the `igx-buttongroup` component. By default it's false.\n     * ```html\n     * <igx-buttongroup [disabled]=\"true\" [selectionMode]=\"'multi'\" [values]=\"fontOptions\"></igx-buttongroup>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get disabled(): boolean {\n        return this._disabled;\n    }\n    public set disabled(value: boolean) {\n        if (this._disabled !== value) {\n            this._disabled = value;\n\n            if (this.viewButtons && this.templateButtons) {\n                this.buttons.forEach((b) => (b.disabled = this._disabled));\n            }\n        }\n    }\n\n    /**\n     * Allows you to set the button group alignment.\n     * Available options are `ButtonGroupAlignment.horizontal` (default) and `ButtonGroupAlignment.vertical`.\n     * ```typescript\n     * public alignment = ButtonGroupAlignment.vertical;\n     * //..\n     * ```\n     * ```html\n     * <igx-buttongroup [selectionMode]=\"'single'\" [values]=\"cities\" [alignment]=\"alignment\"></igx-buttongroup>\n     * ```\n     */\n    @Input()\n    public set alignment(value: ButtonGroupAlignment) {\n        this._isVertical = value === ButtonGroupAlignment.vertical;\n    }\n    /**\n     * Returns the alignment of the `igx-buttongroup`.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * public buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let buttonAlignment = this.buttonG.alignment;\n     * }\n     * ```\n     */\n    public get alignment(): ButtonGroupAlignment {\n        return this._isVertical ? ButtonGroupAlignment.vertical : ButtonGroupAlignment.horizontal;\n    }\n\n    /**\n     * An @Ouput property that emits an event when a button is selected.\n     * ```typescript\n     * @ViewChild(\"toast\")\n     * private toast: IgxToastComponent;\n     * public selectedHandler(buttongroup) {\n     *     this.toast.open()\n     * }\n     *  //...\n     * ```\n     * ```html\n     * <igx-buttongroup #MyChild [selectionMode]=\"'multi'\" (selected)=\"selectedHandler($event)\"></igx-buttongroup>\n     * <igx-toast #toast>You have made a selection!</igx-toast>\n     * ```\n     */\n    @Output()\n    public selected = new EventEmitter<IButtonGroupEventArgs>();\n\n    /**\n     * An @Ouput property that emits an event when a button is deselected.\n     * ```typescript\n     *  @ViewChild(\"toast\")\n     *  private toast: IgxToastComponent;\n     *  public deselectedHandler(buttongroup){\n     *     this.toast.open()\n     * }\n     *  //...\n     * ```\n     * ```html\n     * <igx-buttongroup> #MyChild [selectionMode]=\"'multi'\" (deselected)=\"deselectedHandler($event)\"></igx-buttongroup>\n     * <igx-toast #toast>You have deselected a button!</igx-toast>\n     * ```\n     */\n    @Output()\n    public deselected = new EventEmitter<IButtonGroupEventArgs>();\n\n    @ViewChildren(IgxButtonDirective) private viewButtons: QueryList<IgxButtonDirective>;\n    @ContentChildren(IgxButtonDirective) private templateButtons: QueryList<IgxButtonDirective>;\n\n    /**\n     * Returns true if the `igx-buttongroup` alignment is vertical.\n     * Note that in order for the accessor to work correctly the property should be set explicitly.\n     * ```html\n     * <igx-buttongroup #MyChild [alignment]=\"alignment\" [values]=\"alignOptions\">\n     * ```\n     * ```typescript\n     * //...\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let orientation = this.buttonG.isVertical;\n     * }\n     * ```\n     */\n    public get isVertical(): boolean {\n        return this._isVertical;\n    }\n\n    /**\n     * @hidden\n     */\n    public selectedIndexes: number[] = [];\n\n    protected buttonClickNotifier$ = new Subject<void>();\n    protected queryListNotifier$ = new Subject<void>();\n\n    private _isVertical: boolean;\n    private _itemContentCssClass: string;\n    private _disabled = false;\n    private _selectionMode: 'single' | 'singleRequired' | 'multi' = 'single';\n\n    private mutationObserver: MutationObserver;\n    private observerConfig: MutationObserverInit = {\n      attributeFilter: [\"data-selected\"],\n      childList: true,\n      subtree: true,\n    };\n\n    /**\n     * Gets the selected button/buttons.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    let selectedButton = this.buttonG.selectedButtons;\n     * }\n     * ```\n     */\n    public get selectedButtons(): IgxButtonDirective[] {\n        return this.buttons.filter((_, i) => this.selectedIndexes.indexOf(i) !== -1);\n    }\n\n    /**\n     * Selects a button by its index.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    this.buttonG.selectButton(2);\n     *    this.cdr.detectChanges();\n     * }\n     * ```\n     *\n     * @memberOf {@link IgxButtonGroupComponent}\n     */\n    public selectButton(index: number) {\n        if (index >= this.buttons.length || index < 0) {\n            return;\n        }\n\n        const button = this.buttons[index];\n        button.select();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public updateSelected(index: number) {\n        const button = this.buttons[index];\n\n        if (this.selectedIndexes.indexOf(index) === -1) {\n            this.selectedIndexes.push(index);\n        }\n\n        this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'true');\n        this._renderer.addClass(button.nativeElement, 'igx-button-group__item--selected');\n\n        const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n        if (indexInViewButtons !== -1) {\n            this.values[indexInViewButtons].selected = true;\n        }\n\n        // deselect other buttons if selectionMode is not multi\n        if (this.selectionMode !== 'multi' && this.selectedIndexes.length > 1) {\n            this.buttons.forEach((_, i) => {\n                if (i !== index && this.selectedIndexes.indexOf(i) !== -1) {\n                    this.deselectButton(i);\n                    this.updateDeselected(i);\n                }\n            });\n        }\n\n    }\n\n    public updateDeselected(index: number) {\n        const button = this.buttons[index];\n        if (this.selectedIndexes.indexOf(index) !== -1) {\n            this.selectedIndexes.splice(this.selectedIndexes.indexOf(index), 1);\n        }\n\n        this._renderer.setAttribute(button.nativeElement, 'aria-pressed', 'false');\n        this._renderer.removeClass(button.nativeElement, 'igx-button-group__item--selected');\n\n        const indexInViewButtons = this.viewButtons.toArray().indexOf(button);\n        if (indexInViewButtons !== -1) {\n            this.values[indexInViewButtons].selected = false;\n        }\n    }\n\n    /**\n     * Deselects a button by its index.\n     * ```typescript\n     * @ViewChild(\"MyChild\")\n     * private buttonG: IgxButtonGroupComponent;\n     * ngAfterViewInit(){\n     *    this.buttonG.deselectButton(2);\n     *    this.cdr.detectChanges();\n     * }\n     * ```\n     *\n     * @memberOf {@link IgxButtonGroupComponent}\n     */\n    public deselectButton(index: number) {\n        if (index >= this.buttons.length || index < 0) {\n            return;\n        }\n\n        const button = this.buttons[index];\n        button.deselect();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        const initButtons = () => {\n            // Cancel any existing buttonClick subscriptions\n            this.buttonClickNotifier$.next();\n\n            this.selectedIndexes.splice(0, this.selectedIndexes.length);\n\n            // initial configuration\n            this.buttons.forEach((button, index) => {\n                const buttonElement = button.nativeElement;\n                this._renderer.addClass(buttonElement, 'igx-button-group__item');\n\n                if (this.disabled) {\n                    button.disabled = true;\n                }\n\n                if (button.selected) {\n                    this.updateSelected(index);\n                }\n\n                button.buttonClick.pipe(takeUntil(this.buttonClickNotifier$)).subscribe((_) => this._clickHandler(index));\n            });\n        };\n\n        this.mutationObserver = this.setMutationsObserver();\n\n        this.viewButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => {\n            this.mutationObserver.disconnect();\n            initButtons();\n            this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n        });\n        this.templateButtons.changes.pipe(takeUntil(this.queryListNotifier$)).subscribe(() => {\n            this.mutationObserver.disconnect();\n            initButtons();\n            this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n        });\n\n        initButtons();\n        this._cdr.detectChanges();\n        this.mutationObserver?.observe(this._el.nativeElement, this.observerConfig);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.buttonClickNotifier$.next();\n        this.buttonClickNotifier$.complete();\n\n        this.queryListNotifier$.next();\n        this.queryListNotifier$.complete();\n\n        this.mutationObserver?.disconnect();\n    }\n\n    /**\n     * @hidden\n     */\n    public _clickHandler(index: number) {\n        const button = this.buttons[index];\n        const args: IButtonGroupEventArgs = { owner: this, button, index };\n\n        if (this.selectionMode !== 'multi') {\n            this.buttons.forEach((b, i) => {\n                if (i !== index && this.selectedIndexes.indexOf(i) !== -1) {\n                    this.deselected.emit({ owner: this, button: b, index: i });\n                }\n            });\n        }\n\n        if (this.selectedIndexes.indexOf(index) === -1) {\n            this.selectButton(index);\n            this.selected.emit(args);\n        } else {\n            if (this.selectionMode !== 'singleRequired') {\n                this.deselectButton(index);\n                this.deselected.emit(args);\n            }\n        }\n    }\n\n    private setMutationsObserver() {\n        if (typeof MutationObserver !== 'undefined') {\n            return new MutationObserver((records, observer) => {\n                // Stop observing while handling changes\n                observer.disconnect();\n\n                const updatedButtons = this.getUpdatedButtons(records);\n\n                if (updatedButtons.length > 0) {\n                    updatedButtons.forEach((button) => {\n                        const index = this.buttons.map((b) => b.nativeElement).indexOf(button);\n\n                        this.updateButtonSelectionState(index);\n                    });\n                }\n\n                // Watch for changes again\n                observer.observe(this._el.nativeElement, this.observerConfig);\n            });\n        }\n    }\n\n    private getUpdatedButtons(records: MutationRecord[]) {\n        const updated: HTMLButtonElement[] = [];\n\n        records\n          .filter((x) => x.type === 'attributes')\n          .reduce((prev, curr) => {\n            prev.push(\n              curr.target as HTMLButtonElement\n            );\n            return prev;\n          }, updated);\n\n        return updated;\n    }\n\n    private updateButtonSelectionState(index: number) {\n        if (this.buttons[index].selected) {\n            this.updateSelected(index);\n        } else {\n            this.updateDeselected(index);\n        }\n    }\n}\n\nexport interface IButtonGroupEventArgs extends IBaseEventArgs {\n    owner: IgxButtonGroupComponent;\n    button: IgxButtonDirective;\n    index: number;\n}\n","<div class=\"igx-button-group\" role=\"group\" [class.igx-button-group--vertical]=\"isVertical\">\n    @for (button of values; track button) {\n        <button\n            type=\"button\"\n            igxButton=\"flat\"\n            [selected]=\"button.selected\"\n            [attr.data-togglable]=\"button.togglable\"\n            [disabled]=\"disabled || button.disabled\"\n            [igxLabel]=\"button.label\"\n            [igxRipple]=\"button.ripple\"\n        >\n            <span class=\"igx-button-group__item-content {{ itemContentCssClass }}\">\n                @if (button.icon) {\n                    <igx-icon>{{button.icon}}</igx-icon>\n                }\n                @if (button.label) {\n                    <span class=\"igx-button-group__button-text\">{{button.label}}</span>\n                }\n            </span>\n        </button>\n    }\n    <ng-content></ng-content>\n</div>\n","import { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxButtonGroupComponent } from './button-group.component';\n\nexport * from './button-group.component';\n\n/* Button group directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_BUTTON_GROUP_DIRECTIVES = [\n    IgxButtonGroupComponent,\n    IgxButtonDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_BUTTON_GROUP_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * @deprecated\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n    imports: [...IGX_BUTTON_GROUP_DIRECTIVES],\n    exports: [...IGX_BUTTON_GROUP_DIRECTIVES]\n})\nexport class IgxButtonGroupModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxButtonGroupComponent"],"mappings":"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"}