igniteui-angular 21.1.4 → 21.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"igniteui-angular-combo.mjs","sources":["../../../projects/igniteui-angular/combo/src/combo/combo.api.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.directives.ts","../../../projects/igniteui-angular/combo/src/combo/combo.common.ts","../../../projects/igniteui-angular/combo/src/combo/combo-add-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-dropdown.component.ts","../../../projects/igniteui-angular/drop-down/src/drop-down/drop-down.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.pipes.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.html","../../../projects/igniteui-angular/combo/src/combo/public_api.ts","../../../projects/igniteui-angular/combo/src/combo/combo.module.ts","../../../projects/igniteui-angular/combo/src/igniteui-angular-combo.ts"],"sourcesContent":["import { IgxComboBase } from './combo.common';\nimport { Injectable } from '@angular/core';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxComboAPIService {\n public disableTransitions = false;\n protected combo: IgxComboBase;\n\n public get valueKey() {\n return this.combo.valueKey !== null && this.combo.valueKey !== undefined ? this.combo.valueKey : null;\n }\n\n public get item_focusable(): boolean {\n return false;\n }\n public get isRemote(): boolean {\n return this.combo.isRemote;\n }\n\n public get comboID(): string {\n return this.combo.id;\n }\n\n public register(combo: IgxComboBase) {\n this.combo = combo;\n }\n\n public clear(): void {\n this.combo = null;\n }\n\n public add_custom_item(): void {\n if (!this.combo) {\n return;\n }\n this.combo.addItemToCollection();\n }\n\n public set_selected_item(itemID: any, event?: Event): void {\n const selected = this.combo.isItemSelected(itemID);\n if (itemID === undefined) {\n return;\n }\n if (!selected) {\n this.combo.select([itemID], false, event);\n } else {\n this.combo.deselect([itemID], event);\n }\n }\n\n public is_item_selected(itemID: any): boolean {\n return this.combo.isItemSelected(itemID);\n }\n}\n","import {\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n inject\n} from '@angular/core';\nimport { IgxComboAPIService } from './combo.api';\nimport { rem } from 'igniteui-angular/core';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDropDownItemComponent, Navigate } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n selector: 'igx-combo-item',\n templateUrl: 'combo-item.component.html',\n imports: [IgxCheckboxComponent]\n})\nexport class IgxComboItemComponent extends IgxDropDownItemComponent {\n protected comboAPI = inject(IgxComboAPIService);\n\n\n /**\n * Gets the height of a list item\n *\n * @hidden\n */\n @Input()\n public itemHeight: string | number = '';\n\n /** @hidden @internal */\n @HostBinding('style.height.rem')\n public get _itemHeightToRem() {\n if (this.itemHeight) {\n return rem(this.itemHeight);\n }\n }\n\n @HostBinding('attr.aria-label')\n @Input()\n public override get ariaLabel(): string {\n const valueKey = this.comboAPI.valueKey;\n return (valueKey !== null && this.value != null) ? this.value[valueKey] : this.value;\n }\n\n /** @hidden @internal */\n @Input({ transform: booleanAttribute })\n public singleMode: boolean;\n\n /**\n * @hidden\n */\n public override get itemID() {\n const valueKey = this.comboAPI.valueKey;\n return valueKey !== null ? this.value[valueKey] : this.value;\n }\n\n /**\n * @hidden\n */\n public get comboID() {\n return this.comboAPI.comboID;\n }\n\n /**\n * @hidden\n * @internal\n */\n public get disableTransitions() {\n return this.comboAPI.disableTransitions;\n }\n\n /**\n * @hidden\n */\n public override get selected(): boolean {\n return this.comboAPI.is_item_selected(this.itemID);\n }\n\n public override set selected(value: boolean) {\n if (this.isHeader) {\n return;\n }\n this._selected = value;\n }\n\n /**\n * @hidden\n */\n public isVisible(direction: Navigate): boolean {\n const rect = this.element.nativeElement.getBoundingClientRect();\n const parentDiv = this.element.nativeElement.parentElement.parentElement.getBoundingClientRect();\n if (direction === Navigate.Down) {\n return rect.y + rect.height <= parentDiv.y + parentDiv.height;\n }\n return rect.y >= parentDiv.y;\n }\n\n public override clicked(event): void {\n this.comboAPI.disableTransitions = false;\n if (!this.isSelectable) {\n return;\n }\n this.dropDown.navigateItem(this.index);\n this.comboAPI.set_selected_item(this.itemID, event);\n }\n\n /**\n * @hidden\n * @internal\n * The event that is prevented is the click on the checkbox label element.\n * That is the only visible element that a user can interact with.\n * The click propagates to the host and the preventDefault is to stop it from\n * switching focus to the input it's base on.\n * The toggle happens in an internal handler in the drop-down on the next task queue cycle.\n */\n public disableCheck(event: MouseEvent) {\n event.preventDefault();\n }\n}\n","@if (!isHeader && !singleMode) {\n <!-- checkbox should not allow changing its state from UI click (that's why it should be readonly=true), becasue when cancelling the selectionChange event in the combo, then checkbox will still change state.-->\n <igx-checkbox [checked]=\"selected\" [readonly]=\"true\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n}\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n","import { Directive } from '@angular/core';\n\n/**\n * Allows a custom element to be added at the beginning of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboHeader>\n * <div class=\"header-class\">Custom header</div>\n * <img src=\"\"/>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboHeader]',\n standalone: true\n})\nexport class IgxComboHeaderDirective { }\n\n/**\n * Allows a custom element to be added at the end of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboFooter>\n * <div class=\"footer-class\">Custom footer</div>\n * <img src=\"\"/>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboFooter]',\n standalone: true\n})\nexport class IgxComboFooterDirective { }\n\n/**\n * Allows the combo's items to be modified with a custom template\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *\t<ng-template igxComboItem let-display let-key=\"valueKey\">\n *\t\t<div class=\"item\">\n *\t\t\t<span class=\"state\">State: {{ display[key] }}</span>\n *\t \t\t<span class=\"region\">Region: {{ display.region }}</span>\n *\t \t</div>\n *\t </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboItem]',\n standalone: true\n})\nexport class IgxComboItemDirective { }\n\n/**\n * Defines the custom template that will be displayed when the combo's list is empty\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboEmpty>\n * <div class=\"combo--empty\">\n * There are no items to display\n * </div>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboEmpty]',\n standalone: true\n})\nexport class IgxComboEmptyDirective { }\n\n/**\n * Defines the custom template that will be used when rendering header items for groups in the combo's list\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n * <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboHeaderItem]',\n standalone: true\n})\nexport class IgxComboHeaderItemDirective { }\n\n/**\n * Defines the custom template that will be used to display the `ADD` button\n *\n * @remarks To show the `ADD` button, the `allowCustomValues` option must be enabled\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboAddItem>\n * <button type=\"button\" class=\"combo__add-button\">\n * Click to add item\n * </button>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboAddItem]',\n standalone: true\n})\nexport class IgxComboAddItemDirective { }\n\n/**\n * The custom template that will be used when rendering the combo's toggle button\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboToggleIcon let-collapsed>\n * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboToggleIcon]',\n standalone: true\n})\nexport class IgxComboToggleIconDirective { }\n\n/**\n * Defines the custom template that will be used when rendering the combo's clear icon\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboClearIcon>\n * <igx-icon>clear</igx-icon>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboClearIcon]',\n standalone: true\n})\nexport class IgxComboClearIconDirective { }\n","import {\n AfterContentChecked,\n AfterViewChecked,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n DOCUMENT,\n ViewChildren,\n inject\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NgControl } from '@angular/forms';\nimport { caseSensitive } from '@igniteui/material-icons-extended';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n IgxSelectionAPIService,\n SortingDirection,\n CancelableBrowserEventArgs,\n cloneArray,\n IBaseCancelableBrowserEventArgs,\n IBaseEventArgs,\n rem,\n AbsoluteScrollStrategy,\n AutoPositionStrategy,\n OverlaySettings,\n ComboResourceStringsEN,\n IComboResourceStrings,\n getCurrentResourceStrings,\n onResourceChangeHandle\n} from 'igniteui-angular/core';\nimport { IForOfState, IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { IGX_INPUT_GROUP_TYPE, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupType, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboAPIService } from './combo.api';\nimport {\n IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboEmptyDirective,\n IgxComboFooterDirective, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemDirective, IgxComboToggleIconDirective\n} from './combo.directives';\nimport { isEqual } from 'lodash-es';\nimport { IComboItemAdditionEvent, IComboSearchInputEventArgs } from './combo.component';\n\nexport const IGX_COMBO_COMPONENT = /*@__PURE__*/new InjectionToken<IgxComboBase>('IgxComboComponentToken');\n\n/** @hidden @internal TODO: Evaluate */\nexport interface IgxComboBase {\n id: string;\n data: any[] | null;\n valueKey: string;\n groupKey: string;\n isRemote: boolean;\n filteredData: any[] | null;\n totalItemCount: number;\n itemsMaxHeight: number;\n itemHeight: number;\n searchValue: string;\n searchInput: ElementRef<HTMLInputElement>;\n comboInput: ElementRef<HTMLInputElement>;\n opened: EventEmitter<IBaseEventArgs>;\n opening: EventEmitter<CancelableBrowserEventArgs>;\n closing: EventEmitter<CancelableBrowserEventArgs>;\n closed: EventEmitter<IBaseEventArgs>;\n focusSearchInput(opening?: boolean): void;\n triggerCheck(): void;\n addItemToCollection(): void;\n isAddButtonVisible(): boolean;\n handleInputChange(event?: string): void;\n isItemSelected(itemID: any): boolean;\n select(item: any): void;\n select(itemIDs: any[], clearSelection?: boolean, event?: Event): void;\n deselect(...args: [] | [itemIDs: any[], event?: Event]): void;\n setActiveDescendant(): void;\n}\n\nlet NEXT_ID = 0;\n\n\n/** @hidden @internal */\nexport const enum DataTypes {\n EMPTY = 'empty',\n PRIMITIVE = 'primitive',\n COMPLEX = 'complex',\n PRIMARYKEY = 'valueKey'\n}\n\n/** The filtering criteria to be applied on data search */\nexport interface IComboFilteringOptions {\n /** Defines filtering case-sensitivity */\n caseSensitive?: boolean;\n /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/\n filteringKey?: string;\n}\n\n@Directive()\nexport abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewChecked, OnInit,\n AfterViewInit, AfterContentChecked, OnDestroy, ControlValueAccessor {\n protected elementRef = inject(ElementRef);\n protected cdr = inject(ChangeDetectorRef);\n protected selectionService = inject(IgxSelectionAPIService);\n protected comboAPI = inject(IgxComboAPIService);\n public document = inject<Document>(DOCUMENT);\n protected _inputGroupType = inject<IgxInputGroupType>(IGX_INPUT_GROUP_TYPE, { optional: true });\n protected _injector = inject(Injector, { optional: true });\n protected _iconService = inject(IgxIconService, { optional: true });\n\n /**\n * Defines whether the caseSensitive icon should be shown in the search input\n *\n * ```typescript\n * // get\n * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [showSearchCaseIcon]='true'></igx-combo>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public showSearchCaseIcon = false;\n\n /**\n * Enables/disables filtering in the list. The default is `false`.\n */\n @Input({ transform: booleanAttribute })\n public get disableFiltering(): boolean {\n return this._disableFiltering;\n }\n public set disableFiltering(value: boolean) {\n this._disableFiltering = value;\n }\n\n /**\n * Set custom overlay settings that control how the combo's list of items is displayed.\n * Set:\n * ```html\n * <igx-combo [overlaySettings]=\"customOverlaySettings\"></igx-combo>\n * ```\n *\n * ```typescript\n * const customSettings = { positionStrategy: { settings: { target: myTarget } } };\n * combo.overlaySettings = customSettings;\n * ```\n * Get any custom overlay settings used by the combo:\n * ```typescript\n * const comboOverlaySettings: OverlaySettings = myCombo.overlaySettings;\n * ```\n */\n @Input()\n public overlaySettings: OverlaySettings = null;\n\n /**\n * Gets/gets combo id.\n *\n * ```typescript\n * // get\n * let id = this.combo.id;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [id]='combo1'></igx-combo>\n * ```\n */\n @HostBinding('attr.id')\n @Input()\n public get id(): string {\n return this._id;\n }\n\n public set id(value: string) {\n if (!value) {\n return;\n }\n const selection = this.selectionService.get(this._id);\n this.selectionService.clear(this._id);\n this._id = value;\n if (selection) {\n this.selectionService.set(this._id, selection);\n }\n }\n\n /**\n * Sets the style width of the element\n *\n * ```typescript\n * // get\n * let myComboWidth = this.combo.width;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [width]='250px'></igx-combo>\n * ```\n */\n @HostBinding('style.width')\n @Input()\n public width: string;\n\n /**\n * Controls whether custom values can be added to the collection\n *\n * ```typescript\n * // get\n * let comboAllowsCustomValues = this.combo.allowCustomValues;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [allowCustomValues]='true'></igx-combo>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public allowCustomValues = false;\n\n /**\n * Configures the drop down list height\n *\n * ```typescript\n * // get\n * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemsMaxHeight]='320'></igx-combo>\n * ```\n */\n @Input()\n public get itemsMaxHeight(): number {\n if (this.itemHeight && !this._itemsMaxHeight) {\n return this.itemHeight * this.itemsInContainer;\n }\n return this._itemsMaxHeight;\n }\n\n public set itemsMaxHeight(val: number) {\n this._itemsMaxHeight = val;\n }\n\n /** @hidden */\n public get itemsMaxHeightInRem() {\n if (this.itemsMaxHeight) {\n return rem(this.itemsMaxHeight);\n }\n }\n\n /**\n * Configures the drop down list item height\n *\n * ```typescript\n * // get\n * let myComboItemHeight = this.combo.itemHeight;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemHeight]='32'></igx-combo>\n * ```\n */\n @Input()\n public get itemHeight(): number {\n return this._itemHeight;\n }\n\n public set itemHeight(val: number) {\n this._itemHeight = val;\n }\n\n /**\n * Configures the drop down list width\n *\n * ```typescript\n * // get\n * let myComboItemsWidth = this.combo.itemsWidth;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemsWidth] = '\"180px\"'></igx-combo>\n * ```\n */\n @Input()\n public itemsWidth: string;\n\n /**\n * Defines the placeholder value for the combo value field\n *\n * ```typescript\n * // get\n * let myComboPlaceholder = this.combo.placeholder;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [placeholder]='newPlaceHolder'></igx-combo>\n * ```\n */\n @Input()\n public placeholder: string;\n\n /**\n * Combo data source.\n *\n * ```html\n * <!--set-->\n * <igx-combo [data]='items'></igx-combo>\n * ```\n */\n @Input()\n public get data(): any[] | null {\n return this._data;\n }\n public set data(val: any[] | null) {\n // igxFor directive ignores undefined values\n // if the combo uses simple data and filtering is applied\n // an error will occur due to the mismatch of the length of the data\n // this can occur during filtering for the igx-combo and\n // during filtering & selection for the igx-simple-combo\n // since the simple combo's input is both a container for the selection and a filter\n this._data = (val) ? val.filter(x => x !== undefined) : [];\n }\n\n /**\n * Determines which column in the data source is used to determine the value.\n *\n * ```typescript\n * // get\n * let myComboValueKey = this.combo.valueKey;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [valueKey]='myKey'></igx-combo>\n * ```\n */\n @Input()\n public valueKey: string = null;\n\n @Input()\n public set displayKey(val: string) {\n this._displayKey = val;\n }\n\n /**\n * Determines which column in the data source is used to determine the display value.\n *\n * ```typescript\n * // get\n * let myComboDisplayKey = this.combo.displayKey;\n *\n * // set\n * this.combo.displayKey = 'val';\n *\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [displayKey]='myDisplayKey'></igx-combo>\n * ```\n */\n public get displayKey() {\n return this._displayKey ? this._displayKey : this.valueKey;\n }\n\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```html\n * <!--set-->\n * <igx-combo [groupKey]='newGroupKey'></igx-combo>\n * ```\n */\n @Input()\n public set groupKey(val: string) {\n this._groupKey = val;\n }\n\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```typescript\n * // get\n * let currentGroupKey = this.combo.groupKey;\n * ```\n */\n public get groupKey(): string {\n return this._groupKey;\n }\n\n /**\n * Sets groups sorting order.\n *\n * @example\n * ```html\n * <igx-combo [groupSortingDirection]=\"groupSortingDirection\"></igx-combo>\n * ```\n * ```typescript\n * public groupSortingDirection = SortingDirection.Asc;\n * ```\n */\n @Input()\n public get groupSortingDirection(): SortingDirection {\n return this._groupSortingDirection;\n }\n public set groupSortingDirection(val: SortingDirection) {\n this._groupSortingDirection = val;\n }\n\n /**\n * Gets/Sets the custom filtering function of the combo.\n *\n * @example\n * ```html\n * <igx-comb #combo [data]=\"localData\" [filterFunction]=\"filterFunction\"></igx-combo>\n * ```\n */\n @Input()\n public filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[];\n\n /**\n * Sets aria-labelledby attribute value.\n * ```html\n * <igx-combo [ariaLabelledBy]=\"'label1'\">\n * ```\n */\n @Input()\n public ariaLabelledBy: string;\n\n /** @hidden @internal */\n @HostBinding('class.igx-combo')\n public cssClass = 'igx-combo'; // Independent of display density for the time being\n\n /**\n * Disables the combo. The default is `false`.\n * ```html\n * <igx-combo [disabled]=\"'true'\">\n * ```\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Sets the visual combo type.\n * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.\n * ```html\n * <igx-combo [type]=\"'line'\">\n * ```\n */\n @Input()\n public get type(): IgxInputGroupType {\n return this._type || this._inputGroupType || 'box';\n }\n\n public set type(val: IgxInputGroupType) {\n this._type = val;\n }\n\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n @Input()\n public get resourceStrings(): IComboResourceStrings {\n return this._resourceStrings || this._defaultResourceStrings;\n }\n public set resourceStrings(value: IComboResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Emitted before the dropdown is opened\n *\n * ```html\n * <igx-combo opening='handleOpening($event)'></igx-combo>\n * ```\n */\n @Output()\n public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n /**\n * Emitted after the dropdown is opened\n *\n * ```html\n * <igx-combo (opened)='handleOpened($event)'></igx-combo>\n * ```\n */\n @Output()\n public opened = new EventEmitter<IBaseEventArgs>();\n\n /**\n * Emitted before the dropdown is closed\n *\n * ```html\n * <igx-combo (closing)='handleClosing($event)'></igx-combo>\n * ```\n */\n @Output()\n public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n /**\n * Emitted after the dropdown is closed\n *\n * ```html\n * <igx-combo (closed)='handleClosed($event)'></igx-combo>\n * ```\n */\n @Output()\n public closed = new EventEmitter<IBaseEventArgs>();\n\n /**\n * Emitted when an item is being added to the data collection\n *\n * ```html\n * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public addition = new EventEmitter<IComboItemAdditionEvent>();\n\n /**\n * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)\n *\n * ```html\n * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public searchInputUpdate = new EventEmitter<IComboSearchInputEventArgs>();\n\n /**\n * Emitted when new chunk of data is loaded from the virtualization\n *\n * ```html\n * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public dataPreLoad = new EventEmitter<IForOfState>();\n\n /**\n * The custom template, if any, that should be used when rendering ITEMS in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.itemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboItem let-item let-key=\"valueKey\">\n * <div class=\"custom-item\">\n * <div class=\"custom-item__name\">{{ item[key] }}</div>\n * <div class=\"custom-item__cost\">{{ item.cost }}</div>\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboItemDirective, { read: TemplateRef })\n public itemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the HEADER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.headerTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboHeader>\n * <div class=\"combo__header\">\n * This is a custom header\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboHeaderDirective, { read: TemplateRef })\n public headerTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the FOOTER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.footerTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboFooter>\n * <div class=\"combo__footer\">\n * This is a custom footer\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboFooterDirective, { read: TemplateRef })\n public footerTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.headerItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n * <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboHeaderItemDirective, { read: TemplateRef })\n public headerItemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.addItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboAddItem>\n * <button type=\"button\" igxButton=\"contained\" class=\"combo__add-button\">\n * Click to add item\n * </button>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboAddItemDirective, { read: TemplateRef })\n public addItemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.emptyTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboEmpty>\n * <div class=\"combo--empty\">\n * There are no items to display\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboEmptyDirective, { read: TemplateRef })\n public emptyTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.toggleIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboToggleIcon let-collapsed>\n * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboToggleIconDirective, { read: TemplateRef })\n public toggleIconTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the combo CLEAR button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.clearIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboClearIcon>\n * <igx-icon>clear</igx-icon>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboClearIconDirective, { read: TemplateRef })\n public clearIconTemplate: TemplateRef<any> = null;\n\n /** @hidden @internal */\n @ContentChild(forwardRef(() => IgxLabelDirective), { static: true }) public label: IgxLabelDirective;\n\n /** @hidden @internal */\n @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true })\n public inputGroup: IgxInputGroupComponent;\n\n /** @hidden @internal */\n @ViewChild('comboInput', { read: IgxInputDirective, static: true })\n public comboInput: IgxInputDirective;\n\n /** @hidden @internal */\n @ViewChild('searchInput')\n public searchInput: ElementRef<HTMLInputElement> = null;\n\n /** @hidden @internal */\n @ViewChild(IgxForOfDirective, { static: true })\n public virtualScrollContainer: IgxForOfDirective<any>;\n\n @ViewChild(IgxForOfDirective, { read: IgxForOfDirective, static: true })\n protected virtDir: IgxForOfDirective<any>;\n\n @ViewChild('dropdownItemContainer', { static: true })\n protected dropdownContainer: ElementRef = null;\n\n @ViewChild('primitive', { read: TemplateRef, static: true })\n protected primitiveTemplate: TemplateRef<any>;\n\n @ViewChild('complex', { read: TemplateRef, static: true })\n protected complexTemplate: TemplateRef<any>;\n\n @ContentChildren(IgxPrefixDirective, { descendants: true })\n protected prefixes: QueryList<IgxPrefixDirective>;\n\n @ContentChildren(IgxSuffixDirective, { descendants: true })\n protected suffixes: QueryList<IgxSuffixDirective>;\n\n @ViewChildren(IgxSuffixDirective)\n protected internalSuffixes: QueryList<IgxSuffixDirective>;\n\n /** @hidden @internal */\n public get searchValue(): string {\n return this._searchValue;\n }\n public set searchValue(val: string) {\n this.filterValue = val;\n this._searchValue = val;\n }\n\n /** @hidden @internal */\n public get isRemote() {\n return this.totalItemCount > 0 &&\n this.valueKey &&\n this.dataType === DataTypes.COMPLEX;\n }\n\n /** @hidden @internal */\n public get dataType(): string {\n if (this.displayKey) {\n return DataTypes.COMPLEX;\n }\n return DataTypes.PRIMITIVE;\n }\n\n /**\n * Gets if control is valid, when used in a form\n *\n * ```typescript\n * // get\n * let valid = this.combo.valid;\n * ```\n */\n public get valid(): IgxInputState {\n return this._valid;\n }\n\n /**\n * Sets if control is valid, when used in a form\n *\n * ```typescript\n * // set\n * this.combo.valid = IgxInputState.INVALID;\n * ```\n */\n public set valid(valid: IgxInputState) {\n this._valid = valid;\n this.comboInput.valid = valid;\n }\n\n /**\n * The value of the combo\n *\n * ```typescript\n * // get\n * let comboValue = this.combo.value;\n * ```\n */\n public get value(): any[] {\n return this._value;\n }\n\n /**\n * The text displayed in the combo input\n *\n * ```typescript\n * // get\n * let comboDisplayValue = this.combo.displayValue;\n * ```\n */\n public get displayValue(): string {\n return this._displayValue;\n }\n\n /**\n * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`\n *\n * ```typescript\n * // get\n * let state = this.combo.virtualizationState;\n * ```\n */\n public get virtualizationState(): IForOfState {\n return this.virtDir.state;\n }\n /**\n * Sets the current state of the virtualized data.\n *\n * ```typescript\n * // set\n * this.combo.virtualizationState(state);\n * ```\n */\n public set virtualizationState(state: IForOfState) {\n this.virtDir.state = state;\n }\n\n /**\n * Gets drop down state.\n *\n * ```typescript\n * let state = this.combo.collapsed;\n * ```\n */\n public get collapsed(): boolean {\n return this.dropdown.collapsed;\n }\n\n /**\n * Gets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // get\n * let count = this.combo.totalItemCount;\n * ```\n */\n public get totalItemCount(): number {\n return this.virtDir.totalItemCount;\n }\n /**\n * Sets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // set\n * this.combo.totalItemCount(remoteService.count);\n * ```\n */\n public set totalItemCount(count: number) {\n this.virtDir.totalItemCount = count;\n }\n\n /** @hidden @internal */\n public get template(): TemplateRef<any> {\n this._dataType = this.dataType;\n if (this.itemTemplate) {\n return this.itemTemplate;\n }\n if (this._dataType === DataTypes.COMPLEX) {\n return this.complexTemplate;\n }\n return this.primitiveTemplate;\n }\n\n /** @hidden @internal */\n public customValueFlag = true;\n /** @hidden @internal */\n public filterValue = '';\n /** @hidden @internal */\n public defaultFallbackGroup = 'Other';\n /** @hidden @internal */\n public activeDescendant = '';\n\n /**\n * Configures the way combo items will be filtered.\n *\n * ```typescript\n * // get\n * let myFilteringOptions = this.combo.filteringOptions;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [filteringOptions]='myFilteringOptions'></igx-combo>\n * ```\n */\n\n @Input()\n public get filteringOptions(): IComboFilteringOptions {\n return this._filteringOptions || this._defaultFilteringOptions;\n }\n public set filteringOptions(value: IComboFilteringOptions) {\n this._filteringOptions = value;\n }\n\n protected containerSize = undefined;\n protected itemSize = undefined;\n protected _data = [];\n protected _value = [];\n protected _displayValue = '';\n protected _groupKey = '';\n protected _searchValue = '';\n protected _filteredData = [];\n protected _displayKey: string;\n protected _remoteSelection = {};\n protected _resourceStrings: IComboResourceStrings = null;\n protected _defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN);\n protected _valid = IgxInputState.INITIAL;\n protected ngControl: NgControl = null;\n protected destroy$ = new Subject<void>();\n protected _onTouchedCallback: () => void = noop;\n protected _onChangeCallback: (_: any) => void = noop;\n protected compareCollator = new Intl.Collator();\n protected computedStyles;\n\n private _id: string = `igx-combo-${NEXT_ID++}`;\n private _disableFiltering = false;\n private _type = null;\n private _dataType = '';\n private _itemHeight = undefined;\n private _itemsMaxHeight = null;\n private _overlaySettings: OverlaySettings;\n private _groupSortingDirection: SortingDirection = SortingDirection.Asc;\n private _filteringOptions: IComboFilteringOptions;\n private _defaultFilteringOptions: IComboFilteringOptions = { caseSensitive: false };\n private itemsInContainer = 10;\n\n public abstract dropdown: IgxComboDropDownComponent;\n public abstract selectionChanging: EventEmitter<any>;\n\n constructor() {\n onResourceChangeHandle(this.destroy$, () => {\n this._defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN, false);\n }, this);\n }\n\n public ngAfterViewChecked() {\n const targetElement = this.inputGroup.element.nativeElement.querySelector('.igx-input-group__bundle') as HTMLElement;\n\n this._overlaySettings = {\n target: targetElement,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy(),\n modal: false,\n closeOnOutsideClick: true,\n excludeFromOutsideClick: [targetElement]\n };\n }\n\n /** @hidden @internal */\n public ngAfterContentChecked(): void {\n if (this.inputGroup && this.prefixes?.length > 0) {\n this.inputGroup.prefixes = this.prefixes;\n }\n\n if (this.inputGroup) {\n const suffixesArray = this.suffixes?.toArray() ?? [];\n const internalSuffixesArray = this.internalSuffixes?.toArray() ?? [];\n const mergedSuffixes = new QueryList<IgxSuffixDirective>();\n mergedSuffixes.reset([\n ...suffixesArray,\n ...internalSuffixesArray\n ]);\n this.inputGroup.suffixes = mergedSuffixes;\n }\n }\n\n /** @hidden @internal */\n public ngOnInit() {\n this.ngControl = this._injector.get<NgControl>(NgControl, null);\n this.selectionService.set(this.id, new Set());\n this._iconService?.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');\n this.computedStyles = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n }\n\n /** @hidden @internal */\n public ngAfterViewInit(): void {\n this.filteredData = [...this.data];\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);\n this.manageRequiredAsterisk();\n this.cdr.detectChanges();\n }\n this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e: IForOfState) => {\n const eventArgs: IForOfState = Object.assign({}, e, { owner: this });\n this.dataPreLoad.emit(eventArgs);\n });\n this.dropdown?.opening.subscribe((_args: IBaseCancelableBrowserEventArgs) => {\n // calculate the container size and item size based on the sizes from the DOM\n const dropdownContainerHeight = this.dropdownContainer.nativeElement.getBoundingClientRect().height;\n if (dropdownContainerHeight) {\n this.containerSize = parseFloat(dropdownContainerHeight);\n }\n if (this.dropdown.children?.first) {\n this.itemSize = this.dropdown.children.first.element.nativeElement.getBoundingClientRect().height;\n }\n });\n }\n\n /** @hidden @internal */\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.comboAPI.clear();\n this.selectionService.delete(this.id);\n }\n\n /**\n * A method that opens/closes the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.toggle()\">Toggle Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public toggle(): void {\n if (this.collapsed && this._displayValue.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.toggle(overlaySettings);\n if (!this.collapsed) {\n this.setActiveDescendant();\n }\n }\n\n /**\n * A method that opens the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.open()\">Open Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public open(): void {\n if (this.collapsed && this._displayValue.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.open(overlaySettings);\n this.setActiveDescendant();\n }\n\n /**\n * A method that closes the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.close()\">Close Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public close(): void {\n this.dropdown.close();\n }\n\n /**\n * Triggers change detection on the combo view\n */\n public triggerCheck() {\n this.cdr.detectChanges();\n }\n\n /**\n * Get current selection state\n *\n * @returns Array of selected items\n * ```typescript\n * let mySelection = this.combo.selection;\n * ```\n */\n public get selection(): any[] {\n const serviceRef = this.selectionService.get(this.id);\n return serviceRef ? this.convertKeysToItems(Array.from(serviceRef)) : [];\n }\n\n /**\n * Returns if the specified itemID is selected\n *\n * @hidden\n * @internal\n */\n public isItemSelected(item: any): boolean {\n return this.selectionService.is_item_selected(this.id, item);\n }\n\n /** @hidden @internal */\n public get toggleIcon(): string {\n return this.dropdown.collapsed ? 'input_expand' : 'input_collapse';\n }\n\n /** @hidden @internal */\n public addItemToCollection() {\n if (!this.searchValue) {\n return;\n }\n const addedItem = this.displayKey ? {\n [this.valueKey]: this.searchValue,\n [this.displayKey]: this.searchValue\n } : this.searchValue;\n if (this.groupKey) {\n Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });\n }\n // expose shallow copy instead of this.data in event args so this.data can't be mutated\n const oldCollection = [...this.data];\n const newCollection = [...this.data, addedItem];\n const args: IComboItemAdditionEvent = {\n oldCollection, addedItem, newCollection, owner: this, cancel: false\n };\n this.addition.emit(args);\n if (args.cancel) {\n return;\n }\n this.data.push(args.addedItem);\n // trigger re-render\n this.data = cloneArray(this.data);\n this.select(this.valueKey !== null && this.valueKey !== undefined ?\n [args.addedItem[this.valueKey]] : [args.addedItem], false);\n this.customValueFlag = false;\n this.searchInput?.nativeElement.focus();\n this.dropdown.focusedItem = null;\n this.virtDir.scrollTo(0);\n }\n\n /** @hidden @internal */\n public isAddButtonVisible(): boolean {\n // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;\n return this.searchValue !== '' && this.customValueFlag;\n }\n\n /** @hidden @internal */\n public handleInputChange(event?: any) {\n if (event !== undefined) {\n const args: IComboSearchInputEventArgs = {\n searchText: typeof event === 'string' ? event : event.target.value,\n owner: this,\n cancel: false\n };\n this.searchInputUpdate.emit(args);\n if (args.cancel) {\n this.filterValue = null;\n }\n }\n this.checkMatch();\n }\n\n /**\n * Event handlers\n *\n * @hidden\n * @internal\n */\n public handleOpening(e: IBaseCancelableBrowserEventArgs) {\n const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n this.opening.emit(args);\n e.cancel = args.cancel;\n }\n\n /** @hidden @internal */\n public handleClosing(e: IBaseCancelableBrowserEventArgs) {\n const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n this.searchValue = '';\n const isTab = (e.event as KeyboardEvent)?.key === 'Tab';\n if (!e.event || isTab) {\n this.comboInput?.nativeElement.focus();\n } else {\n this._onTouchedCallback();\n this.updateValidity();\n }\n }\n\n /** @hidden @internal */\n public handleClosed() {\n this.closed.emit({ owner: this });\n }\n\n /** @hidden @internal */\n public handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'ArrowUp' || event.key === 'Up') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n }\n if (event.key === 'Tab') {\n this.close();\n }\n }\n\n /** @hidden @internal */\n public getAriaLabel(): string {\n return this.displayValue ? this.resourceStrings.igx_combo_aria_label_options : this.resourceStrings.igx_combo_aria_label_no_options;\n }\n\n\n /** @hidden @internal */\n public registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n /** @hidden @internal */\n public registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n /** @hidden @internal */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden @internal */\n public onClick(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.disabled) {\n this.toggle();\n }\n }\n\n /** @hidden @internal */\n public onBlur() {\n if (this.collapsed) {\n this._onTouchedCallback();\n this.updateValidity();\n }\n }\n\n /** @hidden @internal */\n public setActiveDescendant(): void {\n this.activeDescendant = this.dropdown.focusedItem?.id || '';\n }\n\n /** @hidden @internal */\n public toggleCaseSensitive() {\n this.filteringOptions = Object.assign({}, this.filteringOptions, { caseSensitive: !this.filteringOptions.caseSensitive });\n }\n\n protected onStatusChanged = () => {\n if (this.ngControl && this.isTouchedOrDirty && !this.disabled) {\n if (this.hasValidators && (!this.collapsed || this.inputGroup.isFocused)) {\n this.valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n } else {\n this.valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n }\n } else {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n this.valid = IgxInputState.INITIAL;\n }\n this.manageRequiredAsterisk();\n };\n\n private updateValidity() {\n if (this.ngControl && this.ngControl.invalid) {\n this.valid = IgxInputState.INVALID;\n } else {\n this.valid = IgxInputState.INITIAL;\n }\n }\n\n private get isTouchedOrDirty(): boolean {\n return (this.ngControl.control.touched || this.ngControl.control.dirty);\n }\n\n private get hasValidators(): boolean {\n return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n }\n\n /** if there is a valueKey - map the keys to data items, else - just return the keys */\n protected convertKeysToItems(keys: any[]) {\n if (this.valueKey === null || this.valueKey === undefined) {\n return keys;\n }\n\n return keys.map(key => {\n const item = this.data.find(entry => isEqual(entry[this.valueKey], key));\n\n return item !== undefined ? item : { [this.valueKey]: key };\n });\n }\n\n protected checkMatch(): void {\n const itemMatch = this.filteredData.some(this.findMatch);\n this.customValueFlag = this.allowCustomValues && !itemMatch;\n }\n\n protected findMatch = (element: any): boolean => {\n const value = this.displayKey ? element[this.displayKey] : element;\n const searchValue = this.searchValue || this.comboInput?.value;\n return value?.toString().trim().toLowerCase() === searchValue.trim().toLowerCase();\n };\n\n protected manageRequiredAsterisk(): void {\n if (this.ngControl) {\n this.inputGroup.isRequired = this.required;\n }\n }\n\n /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n protected registerRemoteEntries(ids: any[], add = true) {\n if (add) {\n const selection = this.getValueDisplayPairs(ids);\n for (const entry of selection) {\n this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];\n }\n } else {\n for (const entry of ids) {\n delete this._remoteSelection[entry];\n }\n }\n }\n\n /**\n * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`\n */\n protected getValueDisplayPairs(ids: any[]) {\n return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({\n [this.valueKey]: e[this.valueKey],\n [this.displayKey]: e[this.displayKey]\n }));\n }\n\n protected getRemoteSelection(newSelection: any[], oldSelection: any[]): string {\n if (!newSelection.length) {\n // If new selection is empty, clear all items\n this.registerRemoteEntries(oldSelection, false);\n return '';\n }\n const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);\n const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);\n this.registerRemoteEntries(addedItems);\n this.registerRemoteEntries(removedItems, false);\n return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');\n }\n\n protected get required(): boolean {\n if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({} as AbstractControl);\n return error && error.required;\n }\n\n return false;\n }\n\n public abstract get filteredData(): any[] | null;\n public abstract set filteredData(val: any[] | null);\n\n public abstract handleOpened();\n public abstract onArrowDown(event: Event);\n public abstract focusSearchInput(opening?: boolean);\n\n public abstract select(newItem: any): void;\n public abstract select(newItems: Array<any> | any, clearCurrentSelection?: boolean, event?: Event): void;\n\n public abstract deselect(...args: [] | [items: Array<any>, event?: Event]): void;\n\n public abstract writeValue(value: any): void;\n\n protected abstract setSelection(newSelection: Set<any>, event?: Event): void;\n protected abstract createDisplayText(newSelection: any[], oldSelection: any[]);\n}\n","import { IgxComboItemComponent } from './combo-item.component';\nimport { Component, HostBinding } from '@angular/core';\n\n/**\n * @hidden\n */\n@Component({\n selector: 'igx-combo-add-item',\n template: '<ng-content></ng-content>',\n providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }],\n})\nexport class IgxComboAddItemComponent extends IgxComboItemComponent {\n @HostBinding('class.igx-drop-down__item')\n public get isDropDownItem(): boolean {\n return false;\n }\n\n public override get selected(): boolean {\n return false;\n }\n public override set selected(value: boolean) {\n }\n\n public override clicked(event?) {// eslint-disable-line\n this.comboAPI.disableTransitions = false;\n this.comboAPI.add_custom_item();\n }\n}\n","import { Component, QueryList, OnDestroy, AfterViewInit, ContentChildren, Input, booleanAttribute, inject } from '@angular/core';\nimport { IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxToggleDirective } from 'igniteui-angular/directives';\nimport { DropDownActionKey, IDropDownBase, IGX_DROPDOWN_BASE, IgxDropDownComponent, IgxDropDownItemBaseDirective } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n selector: 'igx-combo-drop-down',\n templateUrl: '../../../drop-down/src/drop-down/drop-down.component.html',\n providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }],\n imports: [IgxToggleDirective]\n})\nexport class IgxComboDropDownComponent extends IgxDropDownComponent implements IDropDownBase, OnDestroy, AfterViewInit {\n public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n protected comboAPI = inject(IgxComboAPIService);\n\n /** @hidden @internal */\n @Input({ transform: booleanAttribute })\n public singleMode = false;\n\n /**\n * @hidden\n * @internal\n */\n @ContentChildren(IgxComboItemComponent, { descendants: true })\n public override children: QueryList<IgxDropDownItemBaseDirective> = null;\n\n /** @hidden @internal */\n public override get scrollContainer(): HTMLElement {\n // TODO: Update, use public API if possible:\n return this.virtDir.dc.location.nativeElement;\n }\n\n protected get isScrolledToLast(): boolean {\n const scrollTop = this.virtDir.scrollPosition;\n const scrollHeight = this.virtDir.getScroll().scrollHeight;\n return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;\n }\n\n protected get lastVisibleIndex(): number {\n return this.combo.totalItemCount ?\n Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :\n this.items.length - 1;\n }\n\n protected get sortedChildren(): IgxDropDownItemBaseDirective[] {\n if (this.children !== undefined) {\n return this.children.toArray()\n .sort((a: IgxDropDownItemBaseDirective, b: IgxDropDownItemBaseDirective) => a.index - b.index);\n }\n return null;\n }\n\n /**\n * Get all non-header items\n *\n * ```typescript\n * let myDropDownItems = this.dropdown.items;\n * ```\n */\n public override get items(): IgxComboItemComponent[] {\n const items: IgxComboItemComponent[] = [];\n if (this.children !== undefined) {\n const sortedChildren = this.sortedChildren as IgxComboItemComponent[];\n for (const child of sortedChildren) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n\n return items;\n }\n\n /**\n * @hidden @internal\n */\n public onFocus() {\n this.focusedItem = this._focusedItem || this.items[0];\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public onBlur(_evt?) {\n this.focusedItem = null;\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override onToggleOpened() {\n this.opened.emit();\n }\n\n /**\n * @hidden\n */\n public override navigateFirst() {\n this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e?.isHeader));\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden\n */\n public override navigatePrev() {\n if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n this.combo.focusSearchInput(false);\n this.focusedItem = null;\n } else {\n super.navigatePrev();\n }\n this.combo.setActiveDescendant();\n }\n\n\n /**\n * @hidden\n */\n public override navigateNext() {\n const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;\n if (this._focusedItem && this._focusedItem.index === lastIndex) {\n this.focusAddItemButton();\n } else {\n super.navigateNext();\n }\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override selectItem(item: IgxDropDownItemBaseDirective) {\n if (item === null || item === undefined) {\n return;\n }\n this.comboAPI.set_selected_item(item.itemID);\n this._focusedItem = item;\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override updateScrollPosition() {\n this.virtDir.getScroll().scrollTop = this._scrollPosition;\n }\n\n /**\n * @hidden @internal\n */\n public override onItemActionKey(key: DropDownActionKey, event?: KeyboardEvent) {\n switch (key) {\n case DropDownActionKey.ENTER:\n this.handleEnter();\n break;\n case DropDownActionKey.SPACE:\n this.handleSpace();\n break;\n case DropDownActionKey.ESCAPE:\n this.close();\n break;\n case DropDownActionKey.TAB:\n this.close(event);\n }\n }\n\n public override ngAfterViewInit() {\n this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);\n }\n\n /**\n * @hidden @internal\n */\n public override ngOnDestroy(): void {\n this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);\n super.ngOnDestroy();\n }\n\n protected override scrollToHiddenItem(_newItem: any): void { }\n\n protected scrollHandler = () => {\n this.comboAPI.disableTransitions = true;\n };\n\n private handleEnter() {\n if (this.isAddItemFocused()) {\n this.combo.addItemToCollection();\n return;\n }\n if (this.singleMode && this.focusedItem) {\n this.combo.select(this.focusedItem.itemID);\n }\n\n this.close();\n }\n\n private handleSpace() {\n if (this.isAddItemFocused()) {\n return;\n } else {\n this.selectItem(this.focusedItem);\n }\n }\n\n private isAddItemFocused(): boolean {\n return this.focusedItem instanceof IgxComboAddItemComponent;\n }\n\n private focusAddItemButton() {\n if (this.combo.isAddButtonVisible()) {\n this.focusedItem = this.items[this.items.length - 1];\n }\n }\n}\n","<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" [attr.role]=\"role\" [attr.aria-labelledby]=\"labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n @if (!collapsed) {\n <ng-content></ng-content>\n }\n </div>\n</div>\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { IComboFilteringOptions, IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { SortingDirection } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'comboFiltering',\n standalone: true\n})\nexport class IgxComboFilteringPipe implements PipeTransform {\n public transform(\n collection: any[],\n searchValue: any,\n displayKey: any,\n filteringOptions: IComboFilteringOptions,\n filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[] = defaultFilterFunction,\n disableFiltering: boolean = false) {\n if (!collection) {\n return [];\n }\n if (disableFiltering) {\n return collection;\n }\n filteringOptions.filteringKey = filteringOptions.filteringKey ?? displayKey;\n return filterFunction(collection, searchValue, filteringOptions);\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'comboGrouping',\n standalone: true\n})\nexport class IgxComboGroupingPipe implements PipeTransform {\n public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n\n\n public transform(collection: any[], groupKey: any, valueKey: any, sortingDirection: SortingDirection, compareCollator: Intl.Collator) {\n // TODO: should filteredData be changed here?\n this.combo.filteredData = collection;\n if ((!groupKey && groupKey !== 0) || !collection.length) {\n return collection;\n }\n const groups = Object.entries(groupBy(collection, (item) => item[groupKey] ?? 'Other'));\n if (sortingDirection !== SortingDirection.None) {\n const reverse = sortingDirection === SortingDirection.Desc ? -1 : 1;\n groups.sort((a,b) => {\n return compareCollator.compare(a[0], b[0]) * reverse;\n });\n }\n const result = groups.flatMap(([_, items]) => {\n items.unshift({\n isHeader: true,\n [valueKey]: items[0][groupKey],\n [groupKey]: items[0][groupKey]\n })\n return items;\n });\n return result;\n }\n}\n\nfunction defaultFilterFunction<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n if (!searchValue) {\n return collection;\n }\n\n const { caseSensitive, filteringKey } = filteringOptions;\n const term = caseSensitive ? searchValue : searchValue.toLowerCase();\n\n return collection.filter(item => {\n const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n return (caseSensitive ? str : str.toLowerCase()).includes(term);\n });\n}\n\nfunction normalizeString(str: string, caseSensitive = false): string {\n return (caseSensitive ? str : str.toLocaleLowerCase())\n .normalize('NFKD')\n .replace(/\\p{M}/gu, '');\n}\n\nfunction groupBy<T>(data: T[], key: keyof T | ((item: T) => any)) {\n const result: Record<string, T[]> = {};\n const _get = typeof key === 'function' ? key : (item: T) => item[key];\n\n for (const item of data) {\n const category = _get(item);\n const group = result[category];\n\n Array.isArray(group) ? group.push(item) : (result[category] = [item]);\n }\n\n return result;\n}\n\n/**\n * Combo filter function which does not distinguish between accented letters and their base letters.\n * For example, when filtering for \"resume\", this function will match both \"resume\" and \"résumé\".\n *\n * @example\n * ```html\n * <igx-combo [filterFunction]=\"comboIgnoreDiacriticFilterFunction\"></igx-combo>\n * ```\n */\nexport function comboIgnoreDiacriticsFilter<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n if (!searchValue) {\n return collection;\n }\n\n const { caseSensitive, filteringKey } = filteringOptions;\n const term = normalizeString(searchValue, caseSensitive);\n\n return collection.filter(item => {\n const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n return normalizeString(str, caseSensitive).includes(term);\n });\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, OnInit, OnDestroy, ViewChild, Input, Output, EventEmitter, HostListener, DoCheck, booleanAttribute } from '@angular/core';\n\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n IBaseEventArgs,\n IBaseCancelableEventArgs,\n CancelableEventArgs,\n EditorProvider\n} from 'igniteui-angular/core';\nimport { IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxRippleDirective } from 'igniteui-angular/directives';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboFilteringPipe, IgxComboGroupingPipe } from './combo.pipes';\nimport { IGX_COMBO_COMPONENT, IgxComboBaseDirective } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxReadOnlyInputDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxDropDownItemNavigationDirective } from 'igniteui-angular/drop-down';\n\n/** Event emitted when an igx-combo's selection is changing */\nexport interface IComboSelectionChangingEventArgs extends IBaseCancelableEventArgs {\n /** An array containing the values that are currently selected */\n oldValue: any[];\n /** An array containing the values that will be selected after this event */\n newValue: any[];\n /** An array containing the items that are currently selected */\n oldSelection: any[];\n /** An array containing the items that will be selected after this event */\n newSelection: any[];\n /** An array containing the items that will be added to the selection (if any) */\n added: any[];\n /** An array containing the items that will be removed from the selection (if any) */\n removed: any[];\n /** The text that will be displayed in the combo text box */\n displayText: string;\n /** The user interaction that triggered the selection change */\n event?: Event;\n}\n\n/** Event emitted when the igx-combo's search input changes */\nexport interface IComboSearchInputEventArgs extends IBaseCancelableEventArgs {\n /** The text that has been typed into the search input */\n searchText: string;\n}\n\nexport interface IComboItemAdditionEvent extends IBaseEventArgs, CancelableEventArgs {\n oldCollection: any[];\n addedItem: any;\n newCollection: any[];\n}\n\n/**\n * When called with sets A & B, returns A - B (as array);\n *\n * @hidden\n */\nconst diffInSets = (set1: Set<any>, set2: Set<any>): any[] => {\n const results = [];\n set1.forEach(entry => {\n if (!set2.has(entry)) {\n results.push(entry);\n }\n });\n return results;\n};\n\n/**\n * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform selection with the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * <igx-combo [itemsMaxHeight]=\"250\" [data]=\"locationData\"\n * [displayKey]=\"'field'\" [valueKey]=\"'field'\"\n * placeholder=\"Location(s)\" searchPlaceholder=\"Search...\">\n * </igx-combo>\n * ```\n */\n@Component({\n selector: 'igx-combo',\n templateUrl: 'combo.component.html',\n providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n ],\n imports: [\n NgTemplateOutlet,\n NgClass,\n FormsModule,\n IgxInputGroupComponent,\n IgxInputDirective,\n IgxSuffixDirective,\n IgxIconComponent,\n IgxComboDropDownComponent,\n IgxDropDownItemNavigationDirective,\n IgxForOfDirective,\n IgxComboItemComponent,\n IgxComboAddItemComponent,\n IgxButtonDirective,\n IgxRippleDirective,\n IgxReadOnlyInputDirective,\n IgxComboFilteringPipe,\n IgxComboGroupingPipe\n ]\n})\nexport class IgxComboComponent extends IgxComboBaseDirective implements AfterViewInit, ControlValueAccessor, OnInit,\n OnDestroy, DoCheck, EditorProvider {\n /**\n * Whether the combo's search box should be focused after the dropdown is opened.\n * When `false`, the combo's list item container will be focused instead\n */\n @Input({ transform: booleanAttribute })\n public autoFocusSearch = true;\n\n\n /**\n * Defines the placeholder value for the combo dropdown search field\n *\n * @deprecated in version 18.2.0. Replaced with values in the localization resource strings.\n *\n * ```typescript\n * // get\n * let myComboSearchPlaceholder = this.combo.searchPlaceholder;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>\n * ```\n */\n @Input()\n public searchPlaceholder: string;\n\n /**\n * Emitted when item selection is changing, before the selection completes\n *\n * ```html\n * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>\n * ```\n */\n @Output()\n public selectionChanging = new EventEmitter<IComboSelectionChangingEventArgs>();\n\n /** @hidden @internal */\n @ViewChild(IgxComboDropDownComponent, { static: true })\n public dropdown: IgxComboDropDownComponent;\n\n /** @hidden @internal */\n public get filteredData(): any[] | null {\n return this.disableFiltering ? this.data : this._filteredData;\n }\n /** @hidden @internal */\n public set filteredData(val: any[] | null) {\n this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n this.checkMatch();\n }\n\n protected _prevInputValue = '';\n\n private _displayText: string;\n\n constructor() {\n super();\n this.comboAPI.register(this);\n }\n\n @HostListener('keydown.ArrowDown', ['$event'])\n @HostListener('keydown.Alt.ArrowDown', ['$event'])\n public onArrowDown(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n }\n\n @HostListener('keydown.Escape', ['$event'])\n public onEscape(event: Event) {\n if (this.collapsed) {\n this.deselectAllItems(true, event);\n }\n }\n\n /** @hidden @internal */\n public get displaySearchInput(): boolean {\n return !this.disableFiltering || this.allowCustomValues;\n }\n\n /**\n * @hidden @internal\n */\n public handleKeyUp(event: KeyboardEvent): void {\n // TODO: use PlatformUtil for keyboard navigation\n if (event.key === 'ArrowDown' || event.key === 'Down') {\n this.dropdown.focusedItem = this.dropdown.items[0];\n this.dropdownContainer.nativeElement.focus();\n } else if (event.key === 'Escape' || event.key === 'Esc') {\n this.toggle();\n }\n }\n\n /**\n * @hidden @internal\n */\n public handleSelectAll(evt) {\n if (evt.checked) {\n this.selectAllItems();\n } else {\n this.deselectAllItems();\n }\n }\n\n /**\n * @hidden @internal\n */\n public writeValue(value: any[]): void {\n const selection = Array.isArray(value) ? value.filter(x => x !== undefined) : [];\n const oldSelection = this.selection;\n this.selectionService.select_items(this.id, selection, true);\n this.cdr.markForCheck();\n this._displayValue = this.createDisplayText(this.selection, oldSelection);\n this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n }\n\n /** @hidden @internal */\n public ngDoCheck(): void {\n if (this.data?.length && this.selection.length) {\n this._displayValue = this._displayText || this.createDisplayText(this.selection, []);\n this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n }\n }\n\n /**\n * @hidden\n */\n public getEditElement(): HTMLElement {\n return this.comboInput.nativeElement;\n }\n\n /**\n * @hidden @internal\n */\n public get context(): any {\n return {\n $implicit: this\n };\n }\n\n /**\n * @hidden @internal\n */\n public handleClearItems(event: Event): void {\n if (this.disabled) {\n return;\n }\n this.deselectAllItems(true, event);\n if (this.collapsed) {\n this.getEditElement().focus();\n } else {\n this.focusSearchInput(true);\n }\n event.stopPropagation();\n }\n\n /**\n * Select defined items\n *\n * @param newItems new items to be selected\n * @param clearCurrentSelection if true clear previous selected items\n * ```typescript\n * this.combo.select([\"New York\", \"New Jersey\"]);\n * ```\n */\n public select(newItems: Array<any>, clearCurrentSelection?: boolean, event?: Event) {\n if (newItems) {\n const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);\n this.setSelection(newSelection, event);\n }\n }\n\n /**\n * Deselect defined items\n *\n * @param items items to deselected\n * ```typescript\n * this.combo.deselect([\"New York\", \"New Jersey\"]);\n * ```\n */\n public deselect(items: Array<any>, event?: Event) {\n if (items) {\n const newSelection = this.selectionService.delete_items(this.id, items);\n this.setSelection(newSelection, event);\n }\n }\n\n /**\n * Select all (filtered) items\n *\n * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.\n * ```typescript\n * this.combo.selectAllItems();\n * ```\n */\n public selectAllItems(ignoreFilter?: boolean, event?: Event) {\n const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);\n const newSelection = this.selectionService.add_items(this.id, allVisible);\n this.setSelection(newSelection, event);\n }\n\n /**\n * Deselect all (filtered) items\n *\n * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.\n * ```typescript\n * this.combo.deselectAllItems();\n * ```\n */\n public deselectAllItems(ignoreFilter?: boolean, event?: Event): void {\n let newSelection = this.selectionService.get_empty();\n if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n }\n this.setSelection(newSelection, event);\n }\n\n /**\n * Selects/Deselects a single item\n *\n * @param itemID the itemID of the specific item\n * @param select If the item should be selected (true) or deselected (false)\n *\n * Without specified valueKey;\n * ```typescript\n * this.combo.valueKey = null;\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem(items[0], true);\n * ```\n * With specified valueKey;\n * ```typescript\n * this.combo.valueKey = 'field';\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem('Connecticut', true);\n * ```\n */\n public setSelectedItem(itemID: any, select = true, event?: Event): void {\n if (itemID === undefined) {\n return;\n }\n if (select) {\n this.select([itemID], false, event);\n } else {\n this.deselect([itemID], event);\n }\n }\n\n /** @hidden @internal */\n public handleOpened() {\n this.triggerCheck();\n\n // Disabling focus of the search input should happen only when drop down opens.\n // During keyboard navigation input should receive focus, even the autoFocusSearch is disabled.\n // That is why in such cases focusing of the dropdownContainer happens outside focusSearchInput method.\n if (this.autoFocusSearch) {\n this.focusSearchInput(true);\n } else {\n this.dropdownContainer.nativeElement.focus();\n }\n this.opened.emit({ owner: this });\n }\n\n /** @hidden @internal */\n public focusSearchInput(opening?: boolean): void {\n if (this.displaySearchInput && this.searchInput) {\n this.searchInput.nativeElement.focus();\n } else {\n if (opening) {\n this.dropdownContainer.nativeElement.focus();\n } else {\n this.comboInput.nativeElement.focus();\n this.toggle();\n }\n }\n }\n\n protected setSelection(selection: Set<any>, event?: Event): void {\n const currentSelection = this.selectionService.get(this.id);\n const removed = this.convertKeysToItems(diffInSets(currentSelection, selection));\n const added = this.convertKeysToItems(diffInSets(selection, currentSelection));\n const newValue = Array.from(selection);\n const oldValue = Array.from(currentSelection || []);\n const newSelection = this.convertKeysToItems(newValue);\n const oldSelection = this.convertKeysToItems(oldValue);\n const displayText = this.createDisplayText(this.convertKeysToItems(newValue), oldValue);\n const args: IComboSelectionChangingEventArgs = {\n newValue,\n oldValue,\n newSelection,\n oldSelection,\n added,\n removed,\n event,\n owner: this,\n displayText,\n cancel: false\n };\n this.selectionChanging.emit(args);\n if (!args.cancel) {\n this.selectionService.select_items(this.id, args.newValue, true);\n this._value = args.newValue;\n if (displayText !== args.displayText) {\n this._displayValue = this._displayText = args.displayText;\n } else {\n this._displayValue = this.createDisplayText(this.selection, args.oldSelection);\n }\n this._onChangeCallback(args.newValue);\n } else if (this.isRemote) {\n this.registerRemoteEntries(diffInSets(selection, currentSelection), false);\n }\n }\n\n protected createDisplayText(newSelection: any[], oldSelection: any[]) {\n const selection = this.valueKey ? newSelection.map(item => item[this.valueKey]) : newSelection;\n return this.isRemote\n ? this.getRemoteSelection(selection, oldSelection)\n : this.concatDisplayText(newSelection);\n }\n\n protected getSearchPlaceholderText(): string {\n return this.searchPlaceholder ||\n (this.disableFiltering ? this.resourceStrings.igx_combo_addCustomValues_placeholder : this.resourceStrings.igx_combo_filter_search_placeholder);\n }\n\n /** Returns a string that should be populated in the combo's text box */\n private concatDisplayText(selection: any[]): string {\n const value = this.displayKey !== null && this.displayKey !== undefined ?\n selection.map(entry => entry[this.displayKey]).join(', ') :\n selection.join(', ');\n return value;\n }\n}\n","<igx-input-group #inputGroup [type]=\"type === 'search' ? 'box' : type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\" [igxReadOnlyInput]=\"false\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n [attr.aria-label]=\"getAriaLabel()\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n @if (displayValue) {\n <igx-suffix [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n @if (clearIconTemplate) {\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n }\n @if (!clearIconTemplate) {\n <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n }\n </igx-suffix>\n }\n <igx-suffix class=\"igx-combo__toggle-button\">\n @if (toggleIconTemplate) {\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n }\n @if (!toggleIconTemplate) {\n <igx-icon family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n }\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n @if (displaySearchInput) {\n <div class=\"igx-combo__search\">\n <igx-input-group type=\"line\">\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n @if (showSearchCaseIcon) {\n <igx-suffix (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n }\n </igx-input-group>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; initialChunkSize: 10; containerSize: itemsMaxHeight || containerSize; itemSize: itemHeight || itemSize, scrollOrientation: 'vertical';\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n @if (item?.isHeader) {\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n }\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n @if (!item?.isHeader) {\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n }\n </igx-combo-item>\n </div>\n @if (filteredData.length === 0 || isAddButtonVisible()) {\n <div class=\"igx-combo__add\">\n @if (filteredData.length === 0) {\n <div class=\"igx-combo__empty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n }\n @if (isAddButtonVisible()) {\n <igx-combo-add-item [itemHeight]=\"itemHeight\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n }\n </div>\n }\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n","import { IgxHintDirective, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboComponent } from './combo.component';\nimport {\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboEmptyDirective,\n IgxComboFooterDirective,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemDirective,\n IgxComboToggleIconDirective\n} from './combo.directives';\n\nexport * from './combo.api';\nexport * from './combo.common';\nexport * from './combo.component';\nexport * from './combo.directives';\nexport * from './combo.pipes';\nexport * from './combo-add-item.component';\nexport * from './combo-dropdown.component'\nexport * from './combo-item.component';\nexport { comboIgnoreDiacriticsFilter } from './combo.pipes';\n\n/* NOTE: Combo directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_COMBO_DIRECTIVES = [\n IgxComboComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboEmptyDirective,\n IgxComboFooterDirective,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemDirective,\n IgxComboToggleIconDirective,\n IgxLabelDirective,\n IgxPrefixDirective,\n IgxSuffixDirective,\n IgxHintDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_COMBO_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_COMBO_DIRECTIVES\n ],\n exports: [\n ...IGX_COMBO_DIRECTIVES\n ]\n})\nexport class IgxComboModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxComboComponent","i2.IgxComboAddItemDirective","i2.IgxComboClearIconDirective","i2.IgxComboEmptyDirective","i2.IgxComboFooterDirective","i2.IgxComboHeaderDirective","i2.IgxComboHeaderItemDirective","i2.IgxComboItemDirective","i2.IgxComboToggleIconDirective"],"mappings":"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"}
1
+ {"version":3,"file":"igniteui-angular-combo.mjs","sources":["../../../projects/igniteui-angular/combo/src/combo/combo.api.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-item.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.directives.ts","../../../projects/igniteui-angular/combo/src/combo/combo.common.ts","../../../projects/igniteui-angular/combo/src/combo/combo-add-item.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo-dropdown.component.ts","../../../projects/igniteui-angular/drop-down/src/drop-down/drop-down.component.html","../../../projects/igniteui-angular/combo/src/combo/combo.pipes.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.ts","../../../projects/igniteui-angular/combo/src/combo/combo.component.html","../../../projects/igniteui-angular/combo/src/combo/public_api.ts","../../../projects/igniteui-angular/combo/src/combo/combo.module.ts","../../../projects/igniteui-angular/combo/src/igniteui-angular-combo.ts"],"sourcesContent":["import { IgxComboBase } from './combo.common';\nimport { Injectable } from '@angular/core';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxComboAPIService {\n public disableTransitions = false;\n protected combo: IgxComboBase;\n\n public get valueKey() {\n return this.combo.valueKey !== null && this.combo.valueKey !== undefined ? this.combo.valueKey : null;\n }\n\n public get item_focusable(): boolean {\n return false;\n }\n public get isRemote(): boolean {\n return this.combo.isRemote;\n }\n\n public get comboID(): string {\n return this.combo.id;\n }\n\n public register(combo: IgxComboBase) {\n this.combo = combo;\n }\n\n public clear(): void {\n this.combo = null;\n }\n\n public add_custom_item(): void {\n if (!this.combo) {\n return;\n }\n this.combo.addItemToCollection();\n }\n\n public set_selected_item(itemID: any, event?: Event): void {\n const selected = this.combo.isItemSelected(itemID);\n if (itemID === undefined) {\n return;\n }\n if (!selected) {\n this.combo.select([itemID], false, event);\n } else {\n this.combo.deselect([itemID], event);\n }\n }\n\n public is_item_selected(itemID: any): boolean {\n return this.combo.isItemSelected(itemID);\n }\n}\n","import {\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n inject\n} from '@angular/core';\nimport { IgxComboAPIService } from './combo.api';\nimport { rem } from 'igniteui-angular/core';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDropDownItemComponent, Navigate } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n selector: 'igx-combo-item',\n templateUrl: 'combo-item.component.html',\n imports: [IgxCheckboxComponent]\n})\nexport class IgxComboItemComponent extends IgxDropDownItemComponent {\n protected comboAPI = inject(IgxComboAPIService);\n\n\n /**\n * Gets the height of a list item\n *\n * @hidden\n */\n @Input()\n public itemHeight: string | number = '';\n\n /** @hidden @internal */\n @HostBinding('style.height.rem')\n public get _itemHeightToRem() {\n if (this.itemHeight) {\n return rem(this.itemHeight);\n }\n }\n\n @HostBinding('attr.aria-label')\n @Input()\n public override get ariaLabel(): string {\n const valueKey = this.comboAPI.valueKey;\n return (valueKey !== null && this.value != null) ? this.value[valueKey] : this.value;\n }\n\n /** @hidden @internal */\n @Input({ transform: booleanAttribute })\n public singleMode: boolean;\n\n /**\n * @hidden\n */\n public override get itemID() {\n const valueKey = this.comboAPI.valueKey;\n return valueKey !== null ? this.value[valueKey] : this.value;\n }\n\n /**\n * @hidden\n */\n public get comboID() {\n return this.comboAPI.comboID;\n }\n\n /**\n * @hidden\n * @internal\n */\n public get disableTransitions() {\n return this.comboAPI.disableTransitions;\n }\n\n /**\n * @hidden\n */\n public override get selected(): boolean {\n return this.comboAPI.is_item_selected(this.itemID);\n }\n\n public override set selected(value: boolean) {\n if (this.isHeader) {\n return;\n }\n this._selected = value;\n }\n\n /**\n * @hidden\n */\n public isVisible(direction: Navigate): boolean {\n const rect = this.element.nativeElement.getBoundingClientRect();\n const parentDiv = this.element.nativeElement.parentElement.parentElement.getBoundingClientRect();\n if (direction === Navigate.Down) {\n return rect.y + rect.height <= parentDiv.y + parentDiv.height;\n }\n return rect.y >= parentDiv.y;\n }\n\n public override clicked(event): void {\n this.comboAPI.disableTransitions = false;\n if (!this.isSelectable) {\n return;\n }\n this.dropDown.navigateItem(this.index);\n this.comboAPI.set_selected_item(this.itemID, event);\n }\n\n /**\n * @hidden\n * @internal\n * The event that is prevented is the click on the checkbox label element.\n * That is the only visible element that a user can interact with.\n * The click propagates to the host and the preventDefault is to stop it from\n * switching focus to the input it's base on.\n * The toggle happens in an internal handler in the drop-down on the next task queue cycle.\n */\n public disableCheck(event: MouseEvent) {\n event.preventDefault();\n }\n}\n","@if (!isHeader && !singleMode) {\n <!-- checkbox should not allow changing its state from UI click (that's why it should be readonly=true), becasue when cancelling the selectionChange event in the combo, then checkbox will still change state.-->\n <igx-checkbox [checked]=\"selected\" [readonly]=\"true\" [disableRipple]=\"true\" [disableTransitions]=\"disableTransitions\" [tabindex]=\"-1\" (click)=\"disableCheck($event)\" class=\"igx-combo__checkbox\"></igx-checkbox>\n}\n<span class=\"igx-drop-down__inner\"><ng-content></ng-content></span>\n","import { Directive } from '@angular/core';\n\n/**\n * Allows a custom element to be added at the beginning of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboHeader>\n * <div class=\"header-class\">Custom header</div>\n * <img src=\"\"/>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboHeader]',\n standalone: true\n})\nexport class IgxComboHeaderDirective { }\n\n/**\n * Allows a custom element to be added at the end of the combo list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboFooter>\n * <div class=\"footer-class\">Custom footer</div>\n * <img src=\"\"/>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboFooter]',\n standalone: true\n})\nexport class IgxComboFooterDirective { }\n\n/**\n * Allows the combo's items to be modified with a custom template\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n *\t<ng-template igxComboItem let-display let-key=\"valueKey\">\n *\t\t<div class=\"item\">\n *\t\t\t<span class=\"state\">State: {{ display[key] }}</span>\n *\t \t\t<span class=\"region\">Region: {{ display.region }}</span>\n *\t \t</div>\n *\t </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboItem]',\n standalone: true\n})\nexport class IgxComboItemDirective { }\n\n/**\n * Defines the custom template that will be displayed when the combo's list is empty\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboEmpty>\n * <div class=\"combo--empty\">\n * There are no items to display\n * </div>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboEmpty]',\n standalone: true\n})\nexport class IgxComboEmptyDirective { }\n\n/**\n * Defines the custom template that will be used when rendering header items for groups in the combo's list\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo>\n * <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n * <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboHeaderItem]',\n standalone: true\n})\nexport class IgxComboHeaderItemDirective { }\n\n/**\n * Defines the custom template that will be used to display the `ADD` button\n *\n * @remarks To show the `ADD` button, the `allowCustomValues` option must be enabled\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboAddItem>\n * <button type=\"button\" class=\"combo__add-button\">\n * Click to add item\n * </button>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboAddItem]',\n standalone: true\n})\nexport class IgxComboAddItemDirective { }\n\n/**\n * The custom template that will be used when rendering the combo's toggle button\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboToggleIcon let-collapsed>\n * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboToggleIcon]',\n standalone: true\n})\nexport class IgxComboToggleIconDirective { }\n\n/**\n * Defines the custom template that will be used when rendering the combo's clear icon\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @example\n * <igx-combo #combo>\n * <ng-template igxComboClearIcon>\n * <igx-icon>clear</igx-icon>\n * </ng-template>\n * </igx-combo>\n */\n@Directive({\n selector: '[igxComboClearIcon]',\n standalone: true\n})\nexport class IgxComboClearIconDirective { }\n","import {\n AfterContentChecked,\n AfterViewChecked,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n HostBinding,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n DOCUMENT,\n ViewChildren,\n inject\n} from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NgControl } from '@angular/forms';\nimport { caseSensitive } from '@igniteui/material-icons-extended';\nimport { noop, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n IgxSelectionAPIService,\n SortingDirection,\n CancelableBrowserEventArgs,\n cloneArray,\n IBaseCancelableBrowserEventArgs,\n IBaseEventArgs,\n rem,\n AbsoluteScrollStrategy,\n AutoPositionStrategy,\n OverlaySettings,\n ComboResourceStringsEN,\n IComboResourceStrings,\n getCurrentResourceStrings,\n onResourceChangeHandle\n} from 'igniteui-angular/core';\nimport { IForOfState, IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { IGX_INPUT_GROUP_TYPE, IgxInputDirective, IgxInputGroupComponent, IgxInputGroupType, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboAPIService } from './combo.api';\nimport {\n IgxComboAddItemDirective, IgxComboClearIconDirective, IgxComboEmptyDirective,\n IgxComboFooterDirective, IgxComboHeaderDirective, IgxComboHeaderItemDirective, IgxComboItemDirective, IgxComboToggleIconDirective\n} from './combo.directives';\nimport { isEqual } from 'lodash-es';\nimport { IComboItemAdditionEvent, IComboSearchInputEventArgs } from './combo.component';\n\nexport const IGX_COMBO_COMPONENT = /*@__PURE__*/new InjectionToken<IgxComboBase>('IgxComboComponentToken');\n\n/** @hidden @internal TODO: Evaluate */\nexport interface IgxComboBase {\n id: string;\n data: any[] | null;\n valueKey: string;\n groupKey: string;\n isRemote: boolean;\n filteredData: any[] | null;\n totalItemCount: number;\n itemsMaxHeight: number;\n itemHeight: number;\n searchValue: string;\n searchInput: ElementRef<HTMLInputElement>;\n comboInput: ElementRef<HTMLInputElement>;\n opened: EventEmitter<IBaseEventArgs>;\n opening: EventEmitter<CancelableBrowserEventArgs>;\n closing: EventEmitter<CancelableBrowserEventArgs>;\n closed: EventEmitter<IBaseEventArgs>;\n focusSearchInput(opening?: boolean): void;\n triggerCheck(): void;\n addItemToCollection(): void;\n isAddButtonVisible(): boolean;\n handleInputChange(event?: string): void;\n isItemSelected(itemID: any): boolean;\n select(item: any): void;\n select(itemIDs: any[], clearSelection?: boolean, event?: Event): void;\n deselect(...args: [] | [itemIDs: any[], event?: Event]): void;\n setActiveDescendant(): void;\n}\n\nlet NEXT_ID = 0;\n\n\n/** @hidden @internal */\nexport const enum DataTypes {\n EMPTY = 'empty',\n PRIMITIVE = 'primitive',\n COMPLEX = 'complex',\n PRIMARYKEY = 'valueKey'\n}\n\n/** The filtering criteria to be applied on data search */\nexport interface IComboFilteringOptions {\n /** Defines filtering case-sensitivity */\n caseSensitive?: boolean;\n /** Defines optional key to filter against complex list items. Default to displayKey if provided.*/\n filteringKey?: string;\n}\n\n@Directive()\nexport abstract class IgxComboBaseDirective implements IgxComboBase, AfterViewChecked, OnInit,\n AfterViewInit, AfterContentChecked, OnDestroy, ControlValueAccessor {\n protected elementRef = inject(ElementRef);\n protected cdr = inject(ChangeDetectorRef);\n protected selectionService = inject(IgxSelectionAPIService);\n protected comboAPI = inject(IgxComboAPIService);\n public document = inject<Document>(DOCUMENT);\n protected _inputGroupType = inject<IgxInputGroupType>(IGX_INPUT_GROUP_TYPE, { optional: true });\n protected _injector = inject(Injector, { optional: true });\n protected _iconService = inject(IgxIconService, { optional: true });\n\n /**\n * Defines whether the caseSensitive icon should be shown in the search input\n *\n * ```typescript\n * // get\n * let myComboShowSearchCaseIcon = this.combo.showSearchCaseIcon;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [showSearchCaseIcon]='true'></igx-combo>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public showSearchCaseIcon = false;\n\n /**\n * Enables/disables filtering in the list. The default is `false`.\n */\n @Input({ transform: booleanAttribute })\n public get disableFiltering(): boolean {\n return this._disableFiltering;\n }\n public set disableFiltering(value: boolean) {\n this._disableFiltering = value;\n }\n\n /**\n * Set custom overlay settings that control how the combo's list of items is displayed.\n * Set:\n * ```html\n * <igx-combo [overlaySettings]=\"customOverlaySettings\"></igx-combo>\n * ```\n *\n * ```typescript\n * const customSettings = { positionStrategy: { settings: { target: myTarget } } };\n * combo.overlaySettings = customSettings;\n * ```\n * Get any custom overlay settings used by the combo:\n * ```typescript\n * const comboOverlaySettings: OverlaySettings = myCombo.overlaySettings;\n * ```\n */\n @Input()\n public overlaySettings: OverlaySettings = null;\n\n /**\n * Gets/gets combo id.\n *\n * ```typescript\n * // get\n * let id = this.combo.id;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [id]='combo1'></igx-combo>\n * ```\n */\n @HostBinding('attr.id')\n @Input()\n public get id(): string {\n return this._id;\n }\n\n public set id(value: string) {\n if (!value) {\n return;\n }\n const selection = this.selectionService.get(this._id);\n this.selectionService.clear(this._id);\n this._id = value;\n if (selection) {\n this.selectionService.set(this._id, selection);\n }\n }\n\n /**\n * Sets the style width of the element\n *\n * ```typescript\n * // get\n * let myComboWidth = this.combo.width;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [width]='250px'></igx-combo>\n * ```\n */\n @HostBinding('style.width')\n @Input()\n public width: string;\n\n /**\n * Controls whether custom values can be added to the collection\n *\n * ```typescript\n * // get\n * let comboAllowsCustomValues = this.combo.allowCustomValues;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [allowCustomValues]='true'></igx-combo>\n * ```\n */\n @Input({ transform: booleanAttribute })\n public allowCustomValues = false;\n\n /**\n * Configures the drop down list height\n *\n * ```typescript\n * // get\n * let myComboItemsMaxHeight = this.combo.itemsMaxHeight;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemsMaxHeight]='320'></igx-combo>\n * ```\n */\n @Input()\n public get itemsMaxHeight(): number {\n if (this.itemHeight && !this._itemsMaxHeight) {\n return this.itemHeight * this.itemsInContainer;\n }\n return this._itemsMaxHeight;\n }\n\n public set itemsMaxHeight(val: number) {\n this._itemsMaxHeight = val;\n }\n\n /** @hidden */\n public get itemsMaxHeightInRem() {\n if (this.itemsMaxHeight) {\n return rem(this.itemsMaxHeight);\n }\n }\n\n /**\n * Configures the drop down list item height\n *\n * ```typescript\n * // get\n * let myComboItemHeight = this.combo.itemHeight;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemHeight]='32'></igx-combo>\n * ```\n */\n @Input()\n public get itemHeight(): number {\n return this._itemHeight;\n }\n\n public set itemHeight(val: number) {\n this._itemHeight = val;\n }\n\n /**\n * Configures the drop down list width\n *\n * ```typescript\n * // get\n * let myComboItemsWidth = this.combo.itemsWidth;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [itemsWidth] = '\"180px\"'></igx-combo>\n * ```\n */\n @Input()\n public itemsWidth: string;\n\n /**\n * Defines the placeholder value for the combo value field\n *\n * ```typescript\n * // get\n * let myComboPlaceholder = this.combo.placeholder;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [placeholder]='newPlaceHolder'></igx-combo>\n * ```\n */\n @Input()\n public placeholder: string;\n\n /**\n * Combo data source.\n *\n * ```html\n * <!--set-->\n * <igx-combo [data]='items'></igx-combo>\n * ```\n */\n @Input()\n public get data(): any[] | null {\n return this._data;\n }\n public set data(val: any[] | null) {\n // igxFor directive ignores undefined values\n // if the combo uses simple data and filtering is applied\n // an error will occur due to the mismatch of the length of the data\n // this can occur during filtering for the igx-combo and\n // during filtering & selection for the igx-simple-combo\n // since the simple combo's input is both a container for the selection and a filter\n this._data = (val) ? val.filter(x => x !== undefined) : [];\n }\n\n /**\n * Determines which column in the data source is used to determine the value.\n *\n * ```typescript\n * // get\n * let myComboValueKey = this.combo.valueKey;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [valueKey]='myKey'></igx-combo>\n * ```\n */\n @Input()\n public valueKey: string = null;\n\n @Input()\n public set displayKey(val: string) {\n this._displayKey = val;\n }\n\n /**\n * Determines which column in the data source is used to determine the display value.\n *\n * ```typescript\n * // get\n * let myComboDisplayKey = this.combo.displayKey;\n *\n * // set\n * this.combo.displayKey = 'val';\n *\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [displayKey]='myDisplayKey'></igx-combo>\n * ```\n */\n public get displayKey() {\n return this._displayKey ? this._displayKey : this.valueKey;\n }\n\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```html\n * <!--set-->\n * <igx-combo [groupKey]='newGroupKey'></igx-combo>\n * ```\n */\n @Input()\n public set groupKey(val: string) {\n this._groupKey = val;\n }\n\n /**\n * The item property by which items should be grouped inside the items list. Not usable if data is not of type Object[].\n *\n * ```typescript\n * // get\n * let currentGroupKey = this.combo.groupKey;\n * ```\n */\n public get groupKey(): string {\n return this._groupKey;\n }\n\n /**\n * Sets groups sorting order.\n *\n * @example\n * ```html\n * <igx-combo [groupSortingDirection]=\"groupSortingDirection\"></igx-combo>\n * ```\n * ```typescript\n * public groupSortingDirection = SortingDirection.Asc;\n * ```\n */\n @Input()\n public get groupSortingDirection(): SortingDirection {\n return this._groupSortingDirection;\n }\n public set groupSortingDirection(val: SortingDirection) {\n this._groupSortingDirection = val;\n }\n\n /**\n * Gets/Sets the custom filtering function of the combo.\n *\n * @example\n * ```html\n * <igx-comb #combo [data]=\"localData\" [filterFunction]=\"filterFunction\"></igx-combo>\n * ```\n */\n @Input()\n public filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[];\n\n /**\n * Sets aria-labelledby attribute value.\n * ```html\n * <igx-combo [ariaLabelledBy]=\"'label1'\">\n * ```\n */\n @Input()\n public ariaLabelledBy: string;\n\n /** @hidden @internal */\n @HostBinding('class.igx-combo')\n public cssClass = 'igx-combo'; // Independent of display density for the time being\n\n /**\n * Disables the combo. The default is `false`.\n * ```html\n * <igx-combo [disabled]=\"'true'\">\n * ```\n */\n @Input({ transform: booleanAttribute })\n public disabled = false;\n\n /**\n * Sets the visual combo type.\n * The allowed values are `line`, `box`, `border` and `search`. The default is `box`.\n * ```html\n * <igx-combo [type]=\"'line'\">\n * ```\n */\n @Input()\n public get type(): IgxInputGroupType {\n return this._type || this._inputGroupType || 'box';\n }\n\n public set type(val: IgxInputGroupType) {\n this._type = val;\n }\n\n /**\n * Gets/Sets the resource strings.\n *\n * @remarks\n * By default it uses EN resources.\n */\n @Input()\n public get resourceStrings(): IComboResourceStrings {\n return this._resourceStrings || this._defaultResourceStrings;\n }\n public set resourceStrings(value: IComboResourceStrings) {\n this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n }\n\n /**\n * Emitted before the dropdown is opened\n *\n * ```html\n * <igx-combo opening='handleOpening($event)'></igx-combo>\n * ```\n */\n @Output()\n public opening = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n /**\n * Emitted after the dropdown is opened\n *\n * ```html\n * <igx-combo (opened)='handleOpened($event)'></igx-combo>\n * ```\n */\n @Output()\n public opened = new EventEmitter<IBaseEventArgs>();\n\n /**\n * Emitted before the dropdown is closed\n *\n * ```html\n * <igx-combo (closing)='handleClosing($event)'></igx-combo>\n * ```\n */\n @Output()\n public closing = new EventEmitter<IBaseCancelableBrowserEventArgs>();\n\n /**\n * Emitted after the dropdown is closed\n *\n * ```html\n * <igx-combo (closed)='handleClosed($event)'></igx-combo>\n * ```\n */\n @Output()\n public closed = new EventEmitter<IBaseEventArgs>();\n\n /**\n * Emitted when an item is being added to the data collection\n *\n * ```html\n * <igx-combo (addition)='handleAdditionEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public addition = new EventEmitter<IComboItemAdditionEvent>();\n\n /**\n * Emitted when the value of the search input changes (e.g. typing, pasting, clear, etc.)\n *\n * ```html\n * <igx-combo (searchInputUpdate)='handleSearchInputEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public searchInputUpdate = new EventEmitter<IComboSearchInputEventArgs>();\n\n /**\n * Emitted when new chunk of data is loaded from the virtualization\n *\n * ```html\n * <igx-combo (dataPreLoad)='handleDataPreloadEvent($event)'></igx-combo>\n * ```\n */\n @Output()\n public dataPreLoad = new EventEmitter<IForOfState>();\n\n /**\n * The custom template, if any, that should be used when rendering ITEMS in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.itemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboItem let-item let-key=\"valueKey\">\n * <div class=\"custom-item\">\n * <div class=\"custom-item__name\">{{ item[key] }}</div>\n * <div class=\"custom-item__cost\">{{ item.cost }}</div>\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboItemDirective, { read: TemplateRef })\n public itemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the HEADER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.headerTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboHeader>\n * <div class=\"combo__header\">\n * This is a custom header\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboHeaderDirective, { read: TemplateRef })\n public headerTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the FOOTER for the combo items list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.footerTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboFooter>\n * <div class=\"combo__footer\">\n * This is a custom footer\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboFooterDirective, { read: TemplateRef })\n public footerTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering HEADER ITEMS for groups in the combo list\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.headerItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboHeaderItem let-item let-key=\"groupKey\">\n * <div class=\"custom-item--group\">Group header for {{ item[key] }}</div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboHeaderItemDirective, { read: TemplateRef })\n public headerItemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.addItemTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboAddItem>\n * <button type=\"button\" igxButton=\"contained\" class=\"combo__add-button\">\n * Click to add item\n * </button>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboAddItemDirective, { read: TemplateRef })\n public addItemTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the ADD BUTTON in the combo drop down\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.emptyTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboEmpty>\n * <div class=\"combo--empty\">\n * There are no items to display\n * </div>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboEmptyDirective, { read: TemplateRef })\n public emptyTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the combo TOGGLE(open/close) button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.toggleIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboToggleIcon let-collapsed>\n * <igx-icon>{{ collapsed ? 'remove_circle' : 'remove_circle_outline'}}</igx-icon>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboToggleIconDirective, { read: TemplateRef })\n public toggleIconTemplate: TemplateRef<any> = null;\n\n /**\n * The custom template, if any, that should be used when rendering the combo CLEAR button\n *\n * ```typescript\n * // Set in typescript\n * const myCustomTemplate: TemplateRef<any> = myComponent.customTemplate;\n * myComponent.combo.clearIconTemplate = myCustomTemplate;\n * ```\n * ```html\n * <!-- Set in markup -->\n * <igx-combo #combo>\n * ...\n * <ng-template igxComboClearIcon>\n * <igx-icon>clear</igx-icon>\n * </ng-template>\n * </igx-combo>\n * ```\n */\n @ContentChild(IgxComboClearIconDirective, { read: TemplateRef })\n public clearIconTemplate: TemplateRef<any> = null;\n\n /** @hidden @internal */\n @ContentChild(forwardRef(() => IgxLabelDirective), { static: true }) public label: IgxLabelDirective;\n\n /** @hidden @internal */\n @ViewChild('inputGroup', { read: IgxInputGroupComponent, static: true })\n public inputGroup: IgxInputGroupComponent;\n\n /** @hidden @internal */\n @ViewChild('comboInput', { read: IgxInputDirective, static: true })\n public comboInput: IgxInputDirective;\n\n /** @hidden @internal */\n @ViewChild('searchInput')\n public searchInput: ElementRef<HTMLInputElement> = null;\n\n /** @hidden @internal */\n @ViewChild(IgxForOfDirective, { static: true })\n public virtualScrollContainer: IgxForOfDirective<any>;\n\n @ViewChild(IgxForOfDirective, { read: IgxForOfDirective, static: true })\n protected virtDir: IgxForOfDirective<any>;\n\n @ViewChild('dropdownItemContainer', { static: true })\n protected dropdownContainer: ElementRef = null;\n\n @ViewChild('primitive', { read: TemplateRef, static: true })\n protected primitiveTemplate: TemplateRef<any>;\n\n @ViewChild('complex', { read: TemplateRef, static: true })\n protected complexTemplate: TemplateRef<any>;\n\n @ContentChildren(IgxPrefixDirective, { descendants: true })\n protected prefixes: QueryList<IgxPrefixDirective>;\n\n @ContentChildren(IgxSuffixDirective, { descendants: true })\n protected suffixes: QueryList<IgxSuffixDirective>;\n\n @ViewChildren(IgxSuffixDirective)\n protected internalSuffixes: QueryList<IgxSuffixDirective>;\n\n /** @hidden @internal */\n public get searchValue(): string {\n return this._searchValue;\n }\n public set searchValue(val: string) {\n this.filterValue = val;\n this._searchValue = val;\n }\n\n /** @hidden @internal */\n public get isRemote() {\n return this.totalItemCount > 0 &&\n this.valueKey &&\n this.dataType === DataTypes.COMPLEX;\n }\n\n /** @hidden @internal */\n public get dataType(): string {\n if (this.displayKey) {\n return DataTypes.COMPLEX;\n }\n return DataTypes.PRIMITIVE;\n }\n\n /**\n * Gets if control is valid, when used in a form\n *\n * ```typescript\n * // get\n * let valid = this.combo.valid;\n * ```\n */\n public get valid(): IgxInputState {\n return this._valid;\n }\n\n /**\n * Sets if control is valid, when used in a form\n *\n * ```typescript\n * // set\n * this.combo.valid = IgxInputState.INVALID;\n * ```\n */\n public set valid(valid: IgxInputState) {\n this._valid = valid;\n this.comboInput.valid = valid;\n }\n\n /**\n * The value of the combo\n *\n * ```typescript\n * // get\n * let comboValue = this.combo.value;\n * ```\n */\n public get value(): any[] {\n return this._value;\n }\n\n /**\n * The text displayed in the combo input\n *\n * ```typescript\n * // get\n * let comboDisplayValue = this.combo.displayValue;\n * ```\n */\n public get displayValue(): string {\n return this._displayValue;\n }\n\n /**\n * Defines the current state of the virtualized data. It contains `startIndex` and `chunkSize`\n *\n * ```typescript\n * // get\n * let state = this.combo.virtualizationState;\n * ```\n */\n public get virtualizationState(): IForOfState {\n return this.virtDir.state;\n }\n /**\n * Sets the current state of the virtualized data.\n *\n * ```typescript\n * // set\n * this.combo.virtualizationState(state);\n * ```\n */\n public set virtualizationState(state: IForOfState) {\n this.virtDir.state = state;\n }\n\n /**\n * Gets drop down state.\n *\n * ```typescript\n * let state = this.combo.collapsed;\n * ```\n */\n public get collapsed(): boolean {\n return this.dropdown.collapsed;\n }\n\n /**\n * Gets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // get\n * let count = this.combo.totalItemCount;\n * ```\n */\n public get totalItemCount(): number {\n return this.virtDir.totalItemCount;\n }\n /**\n * Sets total count of the virtual data items, when using remote service.\n *\n * ```typescript\n * // set\n * this.combo.totalItemCount(remoteService.count);\n * ```\n */\n public set totalItemCount(count: number) {\n this.virtDir.totalItemCount = count;\n }\n\n /** @hidden @internal */\n public get template(): TemplateRef<any> {\n this._dataType = this.dataType;\n if (this.itemTemplate) {\n return this.itemTemplate;\n }\n if (this._dataType === DataTypes.COMPLEX) {\n return this.complexTemplate;\n }\n return this.primitiveTemplate;\n }\n\n /** @hidden @internal */\n public customValueFlag = true;\n /** @hidden @internal */\n public filterValue = '';\n /** @hidden @internal */\n public defaultFallbackGroup = 'Other';\n /** @hidden @internal */\n public activeDescendant = '';\n\n /**\n * Configures the way combo items will be filtered.\n *\n * ```typescript\n * // get\n * let myFilteringOptions = this.combo.filteringOptions;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [filteringOptions]='myFilteringOptions'></igx-combo>\n * ```\n */\n\n @Input()\n public get filteringOptions(): IComboFilteringOptions {\n return this._filteringOptions || this._defaultFilteringOptions;\n }\n public set filteringOptions(value: IComboFilteringOptions) {\n this._filteringOptions = value;\n }\n\n protected containerSize = undefined;\n protected itemSize = undefined;\n protected _data = [];\n protected _value = [];\n protected _displayValue = '';\n protected _groupKey = '';\n protected _searchValue = '';\n protected _filteredData = [];\n protected _displayKey: string;\n protected _remoteSelection = {};\n protected _resourceStrings: IComboResourceStrings = null;\n protected _defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN);\n protected _valid = IgxInputState.INITIAL;\n protected ngControl: NgControl = null;\n protected destroy$ = new Subject<void>();\n protected _onTouchedCallback: () => void = noop;\n protected _onChangeCallback: (_: any) => void = noop;\n protected compareCollator = new Intl.Collator();\n protected computedStyles;\n\n private _id: string = `igx-combo-${NEXT_ID++}`;\n private _disableFiltering = false;\n private _type = null;\n private _dataType = '';\n private _itemHeight = undefined;\n private _itemsMaxHeight = null;\n private _overlaySettings: OverlaySettings;\n private _groupSortingDirection: SortingDirection = SortingDirection.Asc;\n private _filteringOptions: IComboFilteringOptions;\n private _defaultFilteringOptions: IComboFilteringOptions = { caseSensitive: false };\n private itemsInContainer = 10;\n\n public abstract dropdown: IgxComboDropDownComponent;\n public abstract selectionChanging: EventEmitter<any>;\n\n constructor() {\n onResourceChangeHandle(this.destroy$, () => {\n this._defaultResourceStrings = getCurrentResourceStrings(ComboResourceStringsEN, false);\n }, this);\n }\n\n public ngAfterViewChecked() {\n const targetElement = this.inputGroup.element.nativeElement.querySelector('.igx-input-group__bundle') as HTMLElement;\n\n this._overlaySettings = {\n target: targetElement,\n scrollStrategy: new AbsoluteScrollStrategy(),\n positionStrategy: new AutoPositionStrategy(),\n modal: false,\n closeOnOutsideClick: true,\n excludeFromOutsideClick: [targetElement]\n };\n }\n\n /** @hidden @internal */\n public ngAfterContentChecked(): void {\n if (this.inputGroup && this.prefixes?.length > 0) {\n this.inputGroup.prefixes = this.prefixes;\n }\n\n if (this.inputGroup) {\n const suffixesArray = this.suffixes?.toArray() ?? [];\n const internalSuffixesArray = this.internalSuffixes?.toArray() ?? [];\n const mergedSuffixes = new QueryList<IgxSuffixDirective>();\n mergedSuffixes.reset([\n ...suffixesArray,\n ...internalSuffixesArray\n ]);\n this.inputGroup.suffixes = mergedSuffixes;\n }\n }\n\n /** @hidden @internal */\n public ngOnInit() {\n this.ngControl = this._injector.get<NgControl>(NgControl, null);\n this.selectionService.set(this.id, new Set());\n this._iconService?.addSvgIconFromText(caseSensitive.name, caseSensitive.value, 'imx-icons');\n this.computedStyles = this.document.defaultView.getComputedStyle(this.elementRef.nativeElement);\n }\n\n /** @hidden @internal */\n public ngAfterViewInit(): void {\n this.filteredData = [...this.data];\n if (this.ngControl) {\n this.ngControl.statusChanges.pipe(takeUntil(this.destroy$)).subscribe(this.onStatusChanged);\n this.manageRequiredAsterisk();\n this.cdr.detectChanges();\n }\n this.virtDir.chunkPreload.pipe(takeUntil(this.destroy$)).subscribe((e: IForOfState) => {\n const eventArgs: IForOfState = Object.assign({}, e, { owner: this });\n this.dataPreLoad.emit(eventArgs);\n });\n this.dropdown?.opening.subscribe((_args: IBaseCancelableBrowserEventArgs) => {\n // calculate the container size and item size based on the sizes from the DOM\n const dropdownContainerHeight = this.dropdownContainer.nativeElement.getBoundingClientRect().height;\n if (dropdownContainerHeight) {\n this.containerSize = parseFloat(dropdownContainerHeight);\n }\n if (this.dropdown.children?.first) {\n this.itemSize = this.dropdown.children.first.element.nativeElement.getBoundingClientRect().height;\n }\n });\n }\n\n /** @hidden @internal */\n public ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.comboAPI.clear();\n this.selectionService.delete(this.id);\n }\n\n /**\n * A method that opens/closes the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.toggle()\">Toggle Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public toggle(): void {\n if (this.collapsed && this._displayValue.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.toggle(overlaySettings);\n if (!this.collapsed) {\n this.setActiveDescendant();\n }\n }\n\n /**\n * A method that opens the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.open()\">Open Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public open(): void {\n if (this.collapsed && this._displayValue.length !== 0) {\n this.filterValue = '';\n this.cdr.detectChanges();\n }\n const overlaySettings = Object.assign({}, this._overlaySettings, this.overlaySettings);\n this.dropdown.open(overlaySettings);\n this.setActiveDescendant();\n }\n\n /**\n * A method that closes the combo.\n *\n * ```html\n * <button type=\"button\" (click)=\"combo.close()\">Close Combo</button>\n * <igx-combo #combo></igx-combo>\n * ```\n */\n public close(): void {\n this.dropdown.close();\n }\n\n /**\n * Triggers change detection on the combo view\n */\n public triggerCheck() {\n this.cdr.detectChanges();\n }\n\n /**\n * Get current selection state\n *\n * @returns Array of selected items\n * ```typescript\n * let mySelection = this.combo.selection;\n * ```\n */\n public get selection(): any[] {\n const serviceRef = this.selectionService.get(this.id);\n return serviceRef ? this.convertKeysToItems(Array.from(serviceRef)) : [];\n }\n\n /**\n * Returns if the specified itemID is selected\n *\n * @hidden\n * @internal\n */\n public isItemSelected(item: any): boolean {\n return this.selectionService.is_item_selected(this.id, item);\n }\n\n /** @hidden @internal */\n public get toggleIcon(): string {\n return this.dropdown.collapsed ? 'input_expand' : 'input_collapse';\n }\n\n /** @hidden @internal */\n public addItemToCollection() {\n if (!this.searchValue) {\n return;\n }\n const addedItem = this.displayKey ? {\n [this.valueKey]: this.searchValue,\n [this.displayKey]: this.searchValue\n } : this.searchValue;\n if (this.groupKey) {\n Object.assign(addedItem, { [this.groupKey]: this.defaultFallbackGroup });\n }\n // expose shallow copy instead of this.data in event args so this.data can't be mutated\n const oldCollection = [...this.data];\n const newCollection = [...this.data, addedItem];\n const args: IComboItemAdditionEvent = {\n oldCollection, addedItem, newCollection, owner: this, cancel: false\n };\n this.addition.emit(args);\n if (args.cancel) {\n return;\n }\n this.data.push(args.addedItem);\n // trigger re-render\n this.data = cloneArray(this.data);\n this.select(this.valueKey !== null && this.valueKey !== undefined ?\n [args.addedItem[this.valueKey]] : [args.addedItem], false);\n this.customValueFlag = false;\n this.searchInput?.nativeElement.focus();\n this.dropdown.focusedItem = null;\n this.virtDir.scrollTo(0);\n }\n\n /** @hidden @internal */\n public isAddButtonVisible(): boolean {\n // This should always return a boolean value. If this.searchValue was '', it returns '' instead of false;\n return this.searchValue !== '' && this.customValueFlag;\n }\n\n /** @hidden @internal */\n public handleInputChange(event?: any) {\n if (event !== undefined) {\n const args: IComboSearchInputEventArgs = {\n searchText: typeof event === 'string' ? event : event.target.value,\n owner: this,\n cancel: false\n };\n this.searchInputUpdate.emit(args);\n if (args.cancel) {\n this.filterValue = null;\n }\n }\n this.checkMatch();\n }\n\n /**\n * Event handlers\n *\n * @hidden\n * @internal\n */\n public handleOpening(e: IBaseCancelableBrowserEventArgs) {\n const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n this.opening.emit(args);\n e.cancel = args.cancel;\n }\n\n /** @hidden @internal */\n public handleClosing(e: IBaseCancelableBrowserEventArgs) {\n const args: IBaseCancelableBrowserEventArgs = { owner: this, event: e.event, cancel: e.cancel };\n this.closing.emit(args);\n e.cancel = args.cancel;\n if (e.cancel) {\n return;\n }\n this.searchValue = '';\n const isTab = (e.event as KeyboardEvent)?.key === 'Tab';\n if (!e.event || isTab) {\n this.comboInput?.nativeElement.focus();\n } else {\n this._onTouchedCallback();\n this.updateValidity();\n }\n }\n\n /** @hidden @internal */\n public handleClosed() {\n this.closed.emit({ owner: this });\n }\n\n /** @hidden @internal */\n public handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'ArrowUp' || event.key === 'Up') {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n }\n if (event.key === 'Tab') {\n this.close();\n }\n }\n\n /** @hidden @internal */\n public getAriaLabel(): string {\n return this.displayValue ? this.resourceStrings.igx_combo_aria_label_options : this.resourceStrings.igx_combo_aria_label_no_options;\n }\n\n\n /** @hidden @internal */\n public registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n /** @hidden @internal */\n public registerOnTouched(fn: any): void {\n this._onTouchedCallback = fn;\n }\n\n /** @hidden @internal */\n public setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n /** @hidden @internal */\n public onClick(event: Event) {\n event.stopPropagation();\n event.preventDefault();\n if (!this.disabled) {\n this.toggle();\n }\n }\n\n /** @hidden @internal */\n public onBlur() {\n if (this.collapsed) {\n this._onTouchedCallback();\n this.updateValidity();\n }\n }\n\n /** @hidden @internal */\n public setActiveDescendant(): void {\n this.activeDescendant = this.dropdown.focusedItem?.id || '';\n }\n\n /** @hidden @internal */\n public toggleCaseSensitive() {\n this.filteringOptions = Object.assign({}, this.filteringOptions, { caseSensitive: !this.filteringOptions.caseSensitive });\n }\n\n protected onStatusChanged = () => {\n if (this.ngControl && this.isTouchedOrDirty && !this.disabled) {\n if (this.hasValidators && (!this.collapsed || this.inputGroup.isFocused)) {\n this.valid = this.ngControl.valid ? IgxInputState.VALID : IgxInputState.INVALID;\n } else {\n this.valid = this.ngControl.valid ? IgxInputState.INITIAL : IgxInputState.INVALID;\n }\n } else {\n // B.P. 18 May 2021: IgxDatePicker does not reset its state upon resetForm #9526\n this.valid = IgxInputState.INITIAL;\n }\n this.manageRequiredAsterisk();\n };\n\n private updateValidity() {\n if (this.ngControl && this.ngControl.invalid) {\n this.valid = IgxInputState.INVALID;\n } else {\n this.valid = IgxInputState.INITIAL;\n }\n }\n\n private get isTouchedOrDirty(): boolean {\n return (this.ngControl.control.touched || this.ngControl.control.dirty);\n }\n\n private get hasValidators(): boolean {\n return (!!this.ngControl.control.validator || !!this.ngControl.control.asyncValidator);\n }\n\n /** if there is a valueKey - map the keys to data items, else - just return the keys */\n protected convertKeysToItems(keys: any[]) {\n if (this.valueKey === null || this.valueKey === undefined) {\n return keys;\n }\n\n return keys.map(key => {\n const item = this.data.find(entry => isEqual(entry[this.valueKey], key));\n\n return item !== undefined ? item : { [this.valueKey]: key };\n });\n }\n\n protected checkMatch(): void {\n const itemMatch = this.filteredData.some(this.findMatch);\n this.customValueFlag = this.allowCustomValues && !itemMatch;\n }\n\n protected findMatch = (element: any): boolean => {\n const value = this.displayKey ? element[this.displayKey] : element;\n const searchValue = this.searchValue || this.comboInput?.value;\n return value?.toString().trim().toLowerCase() === searchValue.trim().toLowerCase();\n };\n\n protected manageRequiredAsterisk(): void {\n if (this.ngControl) {\n this.inputGroup.isRequired = this.required;\n }\n }\n\n /** Contains key-value pairs of the selected valueKeys and their resp. displayKeys */\n protected registerRemoteEntries(ids: any[], add = true) {\n if (add) {\n const selection = this.getValueDisplayPairs(ids);\n for (const entry of selection) {\n this._remoteSelection[entry[this.valueKey]] = entry[this.displayKey];\n }\n } else {\n for (const entry of ids) {\n delete this._remoteSelection[entry];\n }\n }\n }\n\n /**\n * For `id: any[]` returns a mapped `{ [combo.valueKey]: any, [combo.displayKey]: any }[]`\n */\n protected getValueDisplayPairs(ids: any[]) {\n return this.data.filter(entry => ids.indexOf(entry[this.valueKey]) > -1).map(e => ({\n [this.valueKey]: e[this.valueKey],\n [this.displayKey]: e[this.displayKey]\n }));\n }\n\n protected getRemoteSelection(newSelection: any[], oldSelection: any[]): string {\n if (!newSelection.length) {\n // If new selection is empty, clear all items\n this.registerRemoteEntries(oldSelection, false);\n return '';\n }\n const removedItems = oldSelection.filter(e => newSelection.indexOf(e) < 0);\n const addedItems = newSelection.filter(e => oldSelection.indexOf(e) < 0);\n this.registerRemoteEntries(addedItems);\n this.registerRemoteEntries(removedItems, false);\n return Object.keys(this._remoteSelection).map(e => this._remoteSelection[e]).join(', ');\n }\n\n protected get required(): boolean {\n if (this.ngControl && this.ngControl.control && this.ngControl.control.validator) {\n // Run the validation with empty object to check if required is enabled.\n const error = this.ngControl.control.validator({} as AbstractControl);\n return error && error.required;\n }\n\n return false;\n }\n\n public abstract get filteredData(): any[] | null;\n public abstract set filteredData(val: any[] | null);\n\n public abstract handleOpened();\n public abstract onArrowDown(event: Event);\n public abstract focusSearchInput(opening?: boolean);\n\n public abstract select(newItem: any): void;\n public abstract select(newItems: Array<any> | any, clearCurrentSelection?: boolean, event?: Event): void;\n\n public abstract deselect(...args: [] | [items: Array<any>, event?: Event]): void;\n\n public abstract writeValue(value: any): void;\n\n protected abstract setSelection(newSelection: Set<any>, event?: Event): void;\n protected abstract createDisplayText(newSelection: any[], oldSelection: any[]);\n}\n","import { IgxComboItemComponent } from './combo-item.component';\nimport { Component, HostBinding } from '@angular/core';\n\n/**\n * @hidden\n */\n@Component({\n selector: 'igx-combo-add-item',\n template: '<ng-content></ng-content>',\n providers: [{ provide: IgxComboItemComponent, useExisting: IgxComboAddItemComponent }],\n})\nexport class IgxComboAddItemComponent extends IgxComboItemComponent {\n @HostBinding('class.igx-drop-down__item')\n public get isDropDownItem(): boolean {\n return false;\n }\n\n public override get selected(): boolean {\n return false;\n }\n public override set selected(value: boolean) {\n }\n\n public override clicked(event?) {// eslint-disable-line\n this.comboAPI.disableTransitions = false;\n this.comboAPI.add_custom_item();\n }\n}\n","import { Component, QueryList, OnDestroy, AfterViewInit, ContentChildren, Input, booleanAttribute, inject } from '@angular/core';\nimport { IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxToggleDirective } from 'igniteui-angular/directives';\nimport { DropDownActionKey, IDropDownBase, IGX_DROPDOWN_BASE, IgxDropDownComponent, IgxDropDownItemBaseDirective } from 'igniteui-angular/drop-down';\n\n/** @hidden */\n@Component({\n selector: 'igx-combo-drop-down',\n templateUrl: '../../../drop-down/src/drop-down/drop-down.component.html',\n providers: [{ provide: IGX_DROPDOWN_BASE, useExisting: IgxComboDropDownComponent }],\n imports: [IgxToggleDirective]\n})\nexport class IgxComboDropDownComponent extends IgxDropDownComponent implements IDropDownBase, OnDestroy, AfterViewInit {\n public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n protected comboAPI = inject(IgxComboAPIService);\n\n /** @hidden @internal */\n @Input({ transform: booleanAttribute })\n public singleMode = false;\n\n /**\n * @hidden\n * @internal\n */\n @ContentChildren(IgxComboItemComponent, { descendants: true })\n public override children: QueryList<IgxDropDownItemBaseDirective> = null;\n\n /** @hidden @internal */\n public override get scrollContainer(): HTMLElement {\n // TODO: Update, use public API if possible:\n return this.virtDir.dc.location.nativeElement;\n }\n\n protected get isScrolledToLast(): boolean {\n const scrollTop = this.virtDir.scrollPosition;\n const scrollHeight = this.virtDir.getScroll().scrollHeight;\n return Math.floor(scrollTop + this.virtDir.igxForContainerSize) === scrollHeight;\n }\n\n protected get lastVisibleIndex(): number {\n return this.combo.totalItemCount ?\n Math.floor(this.combo.itemsMaxHeight / this.combo.itemHeight) :\n this.items.length - 1;\n }\n\n protected get sortedChildren(): IgxDropDownItemBaseDirective[] {\n if (this.children !== undefined) {\n return this.children.toArray()\n .sort((a: IgxDropDownItemBaseDirective, b: IgxDropDownItemBaseDirective) => a.index - b.index);\n }\n return null;\n }\n\n /**\n * Get all non-header items\n *\n * ```typescript\n * let myDropDownItems = this.dropdown.items;\n * ```\n */\n public override get items(): IgxComboItemComponent[] {\n const items: IgxComboItemComponent[] = [];\n if (this.children !== undefined) {\n const sortedChildren = this.sortedChildren as IgxComboItemComponent[];\n for (const child of sortedChildren) {\n if (!child.isHeader) {\n items.push(child);\n }\n }\n }\n\n return items;\n }\n\n /**\n * @hidden @internal\n */\n public onFocus() {\n this.focusedItem = this._focusedItem || this.items[0];\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public onBlur(_evt?) {\n this.focusedItem = null;\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override onToggleOpened() {\n this.opened.emit();\n }\n\n /**\n * @hidden\n */\n public override navigateFirst() {\n this.navigateItem(this.virtDir.igxForOf.findIndex(e => !e?.isHeader));\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden\n */\n public override navigatePrev() {\n if (this._focusedItem && this._focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n this.combo.focusSearchInput(false);\n this.focusedItem = null;\n } else {\n super.navigatePrev();\n }\n this.combo.setActiveDescendant();\n }\n\n\n /**\n * @hidden\n */\n public override navigateNext() {\n const lastIndex = this.combo.totalItemCount ? this.combo.totalItemCount - 1 : this.virtDir.igxForOf.length - 1;\n if (this._focusedItem && this._focusedItem.index === lastIndex) {\n this.focusAddItemButton();\n } else {\n super.navigateNext();\n }\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override selectItem(item: IgxDropDownItemBaseDirective) {\n if (item === null || item === undefined) {\n return;\n }\n this.comboAPI.set_selected_item(item.itemID);\n this._focusedItem = item;\n this.combo.setActiveDescendant();\n }\n\n /**\n * @hidden @internal\n */\n public override updateScrollPosition() {\n this.virtDir.getScroll().scrollTop = this._scrollPosition;\n }\n\n /**\n * @hidden @internal\n */\n public override onItemActionKey(key: DropDownActionKey, event?: KeyboardEvent) {\n switch (key) {\n case DropDownActionKey.ENTER:\n this.handleEnter();\n break;\n case DropDownActionKey.SPACE:\n this.handleSpace();\n break;\n case DropDownActionKey.ESCAPE:\n this.close();\n break;\n case DropDownActionKey.TAB:\n this.close(event);\n }\n }\n\n public override ngAfterViewInit() {\n this.virtDir.getScroll().addEventListener('scroll', this.scrollHandler);\n }\n\n /**\n * @hidden @internal\n */\n public override ngOnDestroy(): void {\n this.virtDir.getScroll().removeEventListener('scroll', this.scrollHandler);\n super.ngOnDestroy();\n }\n\n protected override scrollToHiddenItem(_newItem: any): void { }\n\n protected scrollHandler = () => {\n this.comboAPI.disableTransitions = true;\n };\n\n private handleEnter() {\n if (this.isAddItemFocused()) {\n this.combo.addItemToCollection();\n return;\n }\n if (this.singleMode && this.focusedItem) {\n this.combo.select(this.focusedItem.itemID);\n }\n\n this.close();\n }\n\n private handleSpace() {\n if (this.isAddItemFocused()) {\n return;\n } else {\n this.selectItem(this.focusedItem);\n }\n }\n\n private isAddItemFocused(): boolean {\n return this.focusedItem instanceof IgxComboAddItemComponent;\n }\n\n private focusAddItemButton() {\n if (this.combo.isAddButtonVisible()) {\n this.focusedItem = this.items[this.items.length - 1];\n }\n }\n}\n","<div class=\"igx-drop-down__list\" [style.width]=\"width\"\n igxToggle\n (appended)=\"onToggleContentAppended($event)\"\n (opening)=\"onToggleOpening($event)\" (opened)=\"onToggleOpened()\"\n (closing)=\"onToggleClosing($event)\" (closed)=\"onToggleClosed()\">\n <div class=\"igx-drop-down__list-scroll\" #scrollContainer [attr.id]=\"listId\" [attr.role]=\"role\" [attr.aria-labelledby]=\"labelledBy\"\n [style.height]=\"height\"\n [style.maxHeight]=\"maxHeight\">\n @if (!collapsed) {\n <ng-content></ng-content>\n }\n </div>\n</div>\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { IComboFilteringOptions, IgxComboBase, IGX_COMBO_COMPONENT } from './combo.common';\nimport { SortingDirection } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n name: 'comboFiltering',\n standalone: true\n})\nexport class IgxComboFilteringPipe implements PipeTransform {\n public transform(\n collection: any[],\n searchValue: any,\n displayKey: any,\n filteringOptions: IComboFilteringOptions,\n filterFunction: (collection: any[], searchValue: any, filteringOptions: IComboFilteringOptions) => any[] = defaultFilterFunction,\n disableFiltering: boolean = false) {\n if (!collection) {\n return [];\n }\n if (disableFiltering) {\n return collection;\n }\n filteringOptions.filteringKey = filteringOptions.filteringKey ?? displayKey;\n return filterFunction(collection, searchValue, filteringOptions);\n }\n}\n\n/** @hidden */\n@Pipe({\n name: 'comboGrouping',\n standalone: true\n})\nexport class IgxComboGroupingPipe implements PipeTransform {\n public combo = inject<IgxComboBase>(IGX_COMBO_COMPONENT);\n\n\n public transform(collection: any[], groupKey: any, valueKey: any, sortingDirection: SortingDirection, compareCollator: Intl.Collator) {\n // TODO: should filteredData be changed here?\n this.combo.filteredData = collection;\n if ((!groupKey && groupKey !== 0) || !collection.length) {\n return collection;\n }\n const groups = Object.entries(groupBy(collection, (item) => item[groupKey] ?? 'Other'));\n if (sortingDirection !== SortingDirection.None) {\n const reverse = sortingDirection === SortingDirection.Desc ? -1 : 1;\n groups.sort((a,b) => {\n return compareCollator.compare(a[0], b[0]) * reverse;\n });\n }\n const result = groups.flatMap(([_, items]) => {\n items.unshift({\n isHeader: true,\n [valueKey]: items[0][groupKey],\n [groupKey]: items[0][groupKey]\n })\n return items;\n });\n return result;\n }\n}\n\nfunction defaultFilterFunction<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n if (!searchValue) {\n return collection;\n }\n\n const { caseSensitive, filteringKey } = filteringOptions;\n const term = caseSensitive ? searchValue : searchValue.toLowerCase();\n\n return collection.filter(item => {\n const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n return (caseSensitive ? str : str.toLowerCase()).includes(term);\n });\n}\n\nfunction normalizeString(str: string, caseSensitive = false): string {\n return (caseSensitive ? str : str.toLocaleLowerCase())\n .normalize('NFKD')\n .replace(/\\p{M}/gu, '');\n}\n\nfunction groupBy<T>(data: T[], key: keyof T | ((item: T) => any)) {\n const result: Record<string, T[]> = {};\n const _get = typeof key === 'function' ? key : (item: T) => item[key];\n\n for (const item of data) {\n const category = _get(item);\n const group = result[category];\n\n Array.isArray(group) ? group.push(item) : (result[category] = [item]);\n }\n\n return result;\n}\n\n/**\n * Combo filter function which does not distinguish between accented letters and their base letters.\n * For example, when filtering for \"resume\", this function will match both \"resume\" and \"résumé\".\n *\n * @example\n * ```html\n * <igx-combo [filterFunction]=\"comboIgnoreDiacriticFilterFunction\"></igx-combo>\n * ```\n */\nexport function comboIgnoreDiacriticsFilter<T>(collection: T[], searchValue: string, filteringOptions: IComboFilteringOptions): T[] {\n if (!searchValue) {\n return collection;\n }\n\n const { caseSensitive, filteringKey } = filteringOptions;\n const term = normalizeString(searchValue, caseSensitive);\n\n return collection.filter(item => {\n const str = filteringKey ? `${item[filteringKey]}` : `${item}`;\n return normalizeString(str, caseSensitive).includes(term);\n });\n}\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { AfterViewInit, Component, OnInit, OnDestroy, ViewChild, Input, Output, EventEmitter, HostListener, DoCheck, booleanAttribute } from '@angular/core';\n\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n IBaseEventArgs,\n IBaseCancelableEventArgs,\n CancelableEventArgs,\n EditorProvider\n} from 'igniteui-angular/core';\nimport { IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxRippleDirective } from 'igniteui-angular/directives';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxComboItemComponent } from './combo-item.component';\nimport { IgxComboDropDownComponent } from './combo-dropdown.component';\nimport { IgxComboFilteringPipe, IgxComboGroupingPipe } from './combo.pipes';\nimport { IGX_COMBO_COMPONENT, IgxComboBaseDirective } from './combo.common';\nimport { IgxComboAddItemComponent } from './combo-add-item.component';\nimport { IgxComboAPIService } from './combo.api';\nimport { IgxInputGroupComponent, IgxInputDirective, IgxReadOnlyInputDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxDropDownItemNavigationDirective } from 'igniteui-angular/drop-down';\n\n/** Event emitted when an igx-combo's selection is changing */\nexport interface IComboSelectionChangingEventArgs extends IBaseCancelableEventArgs {\n /** An array containing the values that are currently selected */\n oldValue: any[];\n /** An array containing the values that will be selected after this event */\n newValue: any[];\n /** An array containing the items that are currently selected */\n oldSelection: any[];\n /** An array containing the items that will be selected after this event */\n newSelection: any[];\n /** An array containing the items that will be added to the selection (if any) */\n added: any[];\n /** An array containing the items that will be removed from the selection (if any) */\n removed: any[];\n /** The text that will be displayed in the combo text box */\n displayText: string;\n /** The user interaction that triggered the selection change */\n event?: Event;\n}\n\n/** Event emitted when the igx-combo's search input changes */\nexport interface IComboSearchInputEventArgs extends IBaseCancelableEventArgs {\n /** The text that has been typed into the search input */\n searchText: string;\n}\n\nexport interface IComboItemAdditionEvent extends IBaseEventArgs, CancelableEventArgs {\n oldCollection: any[];\n addedItem: any;\n newCollection: any[];\n}\n\n/**\n * When called with sets A & B, returns A - B (as array);\n *\n * @hidden\n */\nconst diffInSets = (set1: Set<any>, set2: Set<any>): any[] => {\n const results = [];\n set1.forEach(entry => {\n if (!set2.has(entry)) {\n results.push(entry);\n }\n });\n return results;\n};\n\n/**\n * Represents a drop-down list that provides editable functionalities, allowing users to choose an option from a predefined list.\n *\n * @igxModule IgxComboModule\n * @igxTheme igx-combo-theme\n * @igxKeywords combobox, combo selection\n * @igxGroup Grids & Lists\n *\n * @remarks\n * It provides the ability to filter items as well as perform selection with the provided data.\n * Additionally, it exposes keyboard navigation and custom styling capabilities.\n * @example\n * ```html\n * <igx-combo [itemsMaxHeight]=\"250\" [data]=\"locationData\"\n * [displayKey]=\"'field'\" [valueKey]=\"'field'\"\n * placeholder=\"Location(s)\" searchPlaceholder=\"Search...\">\n * </igx-combo>\n * ```\n */\n@Component({\n selector: 'igx-combo',\n templateUrl: 'combo.component.html',\n providers: [\n IgxComboAPIService,\n { provide: IGX_COMBO_COMPONENT, useExisting: IgxComboComponent },\n { provide: NG_VALUE_ACCESSOR, useExisting: IgxComboComponent, multi: true }\n ],\n imports: [\n NgTemplateOutlet,\n NgClass,\n FormsModule,\n IgxInputGroupComponent,\n IgxInputDirective,\n IgxSuffixDirective,\n IgxIconComponent,\n IgxComboDropDownComponent,\n IgxDropDownItemNavigationDirective,\n IgxForOfDirective,\n IgxComboItemComponent,\n IgxComboAddItemComponent,\n IgxButtonDirective,\n IgxRippleDirective,\n IgxReadOnlyInputDirective,\n IgxComboFilteringPipe,\n IgxComboGroupingPipe\n ]\n})\nexport class IgxComboComponent extends IgxComboBaseDirective implements AfterViewInit, ControlValueAccessor, OnInit,\n OnDestroy, DoCheck, EditorProvider {\n /**\n * Whether the combo's search box should be focused after the dropdown is opened.\n * When `false`, the combo's list item container will be focused instead\n */\n @Input({ transform: booleanAttribute })\n public autoFocusSearch = true;\n\n\n /**\n * Defines the placeholder value for the combo dropdown search field\n *\n * @deprecated in version 18.2.0. Replaced with values in the localization resource strings.\n *\n * ```typescript\n * // get\n * let myComboSearchPlaceholder = this.combo.searchPlaceholder;\n * ```\n *\n * ```html\n * <!--set-->\n * <igx-combo [searchPlaceholder]='newPlaceHolder'></igx-combo>\n * ```\n */\n @Input()\n public searchPlaceholder: string;\n\n /**\n * Emitted when item selection is changing, before the selection completes\n *\n * ```html\n * <igx-combo (selectionChanging)='handleSelection()'></igx-combo>\n * ```\n */\n @Output()\n public selectionChanging = new EventEmitter<IComboSelectionChangingEventArgs>();\n\n /** @hidden @internal */\n @ViewChild(IgxComboDropDownComponent, { static: true })\n public dropdown: IgxComboDropDownComponent;\n\n /** @hidden @internal */\n public get filteredData(): any[] | null {\n return this.disableFiltering ? this.data : this._filteredData;\n }\n /** @hidden @internal */\n public set filteredData(val: any[] | null) {\n this._filteredData = this.groupKey ? (val || []).filter((e) => e.isHeader !== true) : val;\n this.checkMatch();\n }\n\n protected _prevInputValue = '';\n\n private _displayText: string;\n\n constructor() {\n super();\n this.comboAPI.register(this);\n }\n\n @HostListener('keydown.ArrowDown', ['$event'])\n @HostListener('keydown.Alt.ArrowDown', ['$event'])\n public onArrowDown(event: Event) {\n event.preventDefault();\n event.stopPropagation();\n this.open();\n }\n\n @HostListener('keydown.Escape', ['$event'])\n public onEscape(event: Event) {\n event.stopPropagation();\n if (this.collapsed) {\n this.deselectAllItems(true, event);\n }\n }\n\n /** @hidden @internal */\n public get displaySearchInput(): boolean {\n return !this.disableFiltering || this.allowCustomValues;\n }\n\n /**\n * @hidden @internal\n */\n public handleKeyUp(event: KeyboardEvent): void {\n // TODO: use PlatformUtil for keyboard navigation\n if (event.key === 'ArrowDown' || event.key === 'Down') {\n this.dropdown.focusedItem = this.dropdown.items[0];\n this.dropdownContainer.nativeElement.focus();\n } else if (event.key === 'Escape' || event.key === 'Esc') {\n this.toggle();\n }\n }\n\n /**\n * @hidden @internal\n */\n public handleSelectAll(evt) {\n if (evt.checked) {\n this.selectAllItems();\n } else {\n this.deselectAllItems();\n }\n }\n\n /**\n * @hidden @internal\n */\n public writeValue(value: any[]): void {\n const selection = Array.isArray(value) ? value.filter(x => x !== undefined) : [];\n const oldSelection = this.selection;\n this.selectionService.select_items(this.id, selection, true);\n this.cdr.markForCheck();\n this._displayValue = this.createDisplayText(this.selection, oldSelection);\n this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n }\n\n /** @hidden @internal */\n public ngDoCheck(): void {\n if (this.data?.length && this.selection.length) {\n this._displayValue = this._displayText || this.createDisplayText(this.selection, []);\n this._value = this.valueKey ? this.selection.map(item => item[this.valueKey]) : this.selection;\n }\n }\n\n /**\n * @hidden\n */\n public getEditElement(): HTMLElement {\n return this.comboInput.nativeElement;\n }\n\n /**\n * @hidden @internal\n */\n public get context(): any {\n return {\n $implicit: this\n };\n }\n\n /**\n * @hidden @internal\n */\n public handleClearItems(event: Event): void {\n if (this.disabled) {\n return;\n }\n this.deselectAllItems(true, event);\n if (this.collapsed) {\n this.getEditElement().focus();\n } else {\n this.focusSearchInput(true);\n }\n event.stopPropagation();\n }\n\n /**\n * Select defined items\n *\n * @param newItems new items to be selected\n * @param clearCurrentSelection if true clear previous selected items\n * ```typescript\n * this.combo.select([\"New York\", \"New Jersey\"]);\n * ```\n */\n public select(newItems: Array<any>, clearCurrentSelection?: boolean, event?: Event) {\n if (newItems) {\n const newSelection = this.selectionService.add_items(this.id, newItems, clearCurrentSelection);\n this.setSelection(newSelection, event);\n }\n }\n\n /**\n * Deselect defined items\n *\n * @param items items to deselected\n * ```typescript\n * this.combo.deselect([\"New York\", \"New Jersey\"]);\n * ```\n */\n public deselect(items: Array<any>, event?: Event) {\n if (items) {\n const newSelection = this.selectionService.delete_items(this.id, items);\n this.setSelection(newSelection, event);\n }\n }\n\n /**\n * Select all (filtered) items\n *\n * @param ignoreFilter if set to true, selects all items, otherwise selects only the filtered ones.\n * ```typescript\n * this.combo.selectAllItems();\n * ```\n */\n public selectAllItems(ignoreFilter?: boolean, event?: Event) {\n const allVisible = this.selectionService.get_all_ids(ignoreFilter ? this.data : this.filteredData, this.valueKey);\n const newSelection = this.selectionService.add_items(this.id, allVisible);\n this.setSelection(newSelection, event);\n }\n\n /**\n * Deselect all (filtered) items\n *\n * @param ignoreFilter if set to true, deselects all items, otherwise deselects only the filtered ones.\n * ```typescript\n * this.combo.deselectAllItems();\n * ```\n */\n public deselectAllItems(ignoreFilter?: boolean, event?: Event): void {\n let newSelection = this.selectionService.get_empty();\n if (this.filteredData.length !== this.data.length && !ignoreFilter) {\n newSelection = this.selectionService.delete_items(this.id, this.selectionService.get_all_ids(this.filteredData, this.valueKey));\n }\n this.setSelection(newSelection, event);\n }\n\n /**\n * Selects/Deselects a single item\n *\n * @param itemID the itemID of the specific item\n * @param select If the item should be selected (true) or deselected (false)\n *\n * Without specified valueKey;\n * ```typescript\n * this.combo.valueKey = null;\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem(items[0], true);\n * ```\n * With specified valueKey;\n * ```typescript\n * this.combo.valueKey = 'field';\n * const items: { field: string, region: string}[] = data;\n * this.combo.setSelectedItem('Connecticut', true);\n * ```\n */\n public setSelectedItem(itemID: any, select = true, event?: Event): void {\n if (itemID === undefined) {\n return;\n }\n if (select) {\n this.select([itemID], false, event);\n } else {\n this.deselect([itemID], event);\n }\n }\n\n /** @hidden @internal */\n public handleOpened() {\n this.triggerCheck();\n\n // Disabling focus of the search input should happen only when drop down opens.\n // During keyboard navigation input should receive focus, even the autoFocusSearch is disabled.\n // That is why in such cases focusing of the dropdownContainer happens outside focusSearchInput method.\n if (this.autoFocusSearch) {\n this.focusSearchInput(true);\n } else {\n this.dropdownContainer.nativeElement.focus();\n }\n this.opened.emit({ owner: this });\n }\n\n /** @hidden @internal */\n public focusSearchInput(opening?: boolean): void {\n if (this.displaySearchInput && this.searchInput) {\n this.searchInput.nativeElement.focus();\n } else {\n if (opening) {\n this.dropdownContainer.nativeElement.focus();\n } else {\n this.comboInput.nativeElement.focus();\n this.toggle();\n }\n }\n }\n\n protected setSelection(selection: Set<any>, event?: Event): void {\n const currentSelection = this.selectionService.get(this.id);\n const removed = this.convertKeysToItems(diffInSets(currentSelection, selection));\n const added = this.convertKeysToItems(diffInSets(selection, currentSelection));\n const newValue = Array.from(selection);\n const oldValue = Array.from(currentSelection || []);\n const newSelection = this.convertKeysToItems(newValue);\n const oldSelection = this.convertKeysToItems(oldValue);\n const displayText = this.createDisplayText(this.convertKeysToItems(newValue), oldValue);\n const args: IComboSelectionChangingEventArgs = {\n newValue,\n oldValue,\n newSelection,\n oldSelection,\n added,\n removed,\n event,\n owner: this,\n displayText,\n cancel: false\n };\n this.selectionChanging.emit(args);\n if (!args.cancel) {\n this.selectionService.select_items(this.id, args.newValue, true);\n this._value = args.newValue;\n if (displayText !== args.displayText) {\n this._displayValue = this._displayText = args.displayText;\n } else {\n this._displayValue = this.createDisplayText(this.selection, args.oldSelection);\n }\n this._onChangeCallback(args.newValue);\n } else if (this.isRemote) {\n this.registerRemoteEntries(diffInSets(selection, currentSelection), false);\n }\n }\n\n protected createDisplayText(newSelection: any[], oldSelection: any[]) {\n const selection = this.valueKey ? newSelection.map(item => item[this.valueKey]) : newSelection;\n return this.isRemote\n ? this.getRemoteSelection(selection, oldSelection)\n : this.concatDisplayText(newSelection);\n }\n\n protected getSearchPlaceholderText(): string {\n return this.searchPlaceholder ||\n (this.disableFiltering ? this.resourceStrings.igx_combo_addCustomValues_placeholder : this.resourceStrings.igx_combo_filter_search_placeholder);\n }\n\n /** Returns a string that should be populated in the combo's text box */\n private concatDisplayText(selection: any[]): string {\n const value = this.displayKey !== null && this.displayKey !== undefined ?\n selection.map(entry => entry[this.displayKey]).join(', ') :\n selection.join(', ');\n return value;\n }\n}\n","<igx-input-group #inputGroup [type]=\"type === 'search' ? 'box' : type\" (click)=\"onClick($event)\">\n <ng-container ngProjectAs=\"[igxLabel]\">\n <ng-content select=\"[igxLabel]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-prefix\">\n <ng-content select=\"igx-prefix,[igxPrefix]\"></ng-content>\n </ng-container>\n <ng-container ngProjectAs=\"igx-hint, [igxHint]\">\n <ng-content select=\"igx-hint, [igxHint]\"></ng-content>\n </ng-container>\n <input igxInput #comboInput name=\"comboInput\" type=\"text\" [value]=\"displayValue\" readonly\n [attr.placeholder]=\"placeholder\" [disabled]=\"disabled\" [igxReadOnlyInput]=\"false\"\n role=\"combobox\" aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"!dropdown.collapsed\" [attr.aria-controls]=\"dropdown.listId\"\n [attr.aria-labelledby]=\"ariaLabelledBy || label?.id || placeholder\"\n [attr.aria-label]=\"getAriaLabel()\"\n (blur)=\"onBlur()\" />\n <ng-container ngProjectAs=\"igx-suffix\">\n <ng-content select=\"igx-suffix,[igxSuffix]\"></ng-content>\n </ng-container>\n @if (displayValue) {\n <igx-suffix [attr.aria-label]=\"resourceStrings.igx_combo_clearItems_placeholder\" class=\"igx-combo__clear-button\"\n (click)=\"handleClearItems($event)\">\n @if (clearIconTemplate) {\n <ng-container *ngTemplateOutlet=\"clearIconTemplate\"></ng-container>\n }\n @if (!clearIconTemplate) {\n <igx-icon family=\"default\" name=\"input_clear\"></igx-icon>\n }\n </igx-suffix>\n }\n <igx-suffix class=\"igx-combo__toggle-button\">\n @if (toggleIconTemplate) {\n <ng-container *ngTemplateOutlet=\"toggleIconTemplate; context: {$implicit: collapsed}\"></ng-container>\n }\n @if (!toggleIconTemplate) {\n <igx-icon family=\"default\" [name]=\"toggleIcon\"></igx-icon>\n }\n </igx-suffix>\n</igx-input-group>\n<igx-combo-drop-down #igxComboDropDown class=\"igx-combo__drop-down\"\n [labelledBy]=\"ariaLabelledBy || label?.id || placeholder || ''\"\n [width]=\"itemsWidth || '100%'\" (opening)=\"handleOpening($event)\" (closing)=\"handleClosing($event)\"\n (opened)=\"handleOpened()\" (closed)=\"handleClosed()\">\n @if (displaySearchInput) {\n <div class=\"igx-combo__search\">\n <igx-input-group type=\"line\">\n <input igxInput #searchInput name=\"searchInput\" autocomplete=\"off\" type=\"text\"\n [(ngModel)]=\"searchValue\" (ngModelChange)=\"handleInputChange($event)\" (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\" (focus)=\"dropdown.onBlur($event)\" [attr.placeholder]=\"getSearchPlaceholderText()\"\n aria-autocomplete=\"list\" role=\"searchbox\" aria-label=\"search\"/>\n @if (showSearchCaseIcon) {\n <igx-suffix (click)=\"toggleCaseSensitive()\">\n <span [ngClass]=\"filteringOptions.caseSensitive? 'igx-combo__case-icon--active' : 'igx-combo__case-icon'\">\n <igx-icon\n family=\"default\"\n name=\"case_sensitive\"\n [active]=\"filteringOptions.caseSensitive\">\n </igx-icon>\n </span>\n </igx-suffix>\n }\n </igx-input-group>\n </div>\n }\n <ng-container *ngTemplateOutlet=\"headerTemplate\">\n </ng-container>\n <div #dropdownItemContainer class=\"igx-combo__content\" [style.overflow]=\"'hidden'\"\n [style.maxHeight.rem]=\"itemsMaxHeightInRem\" [igxDropDownItemNavigation]=\"dropdown\" (focus)=\"dropdown.onFocus()\"\n [tabindex]=\"dropdown.collapsed ? -1 : 0\" [attr.id]=\"dropdown.id\" aria-multiselectable=\"true\"\n [attr.aria-activedescendant]=\"activeDescendant\">\n <igx-combo-item [itemHeight]=\"itemHeight\" *igxFor=\"let item of data\n | comboFiltering:filterValue:displayKey:filteringOptions:filterFunction:disableFiltering\n | comboGrouping:groupKey:valueKey:groupSortingDirection:compareCollator;\n index as rowIndex; initialChunkSize: 10; containerSize: itemsMaxHeight || containerSize; itemSize: itemHeight || itemSize, scrollOrientation: 'vertical';\"\n [value]=\"item\" [isHeader]=\"item?.isHeader\" [index]=\"rowIndex\" [role]=\"item?.isHeader? 'group' : 'option'\">\n @if (item?.isHeader) {\n <ng-container\n *ngTemplateOutlet=\"headerItemTemplate ? headerItemTemplate : headerItemBase;\n context: {$implicit: item, data: data, valueKey: valueKey, groupKey: groupKey, displayKey: displayKey}\">\n </ng-container>\n }\n <!-- if item is 'null' it should be displayed and !!(item?.isHeader) would resolve it to 'false' and not display it -->\n @if (!item?.isHeader) {\n <ng-container #listItem\n *ngTemplateOutlet=\"template; context: {$implicit: item, data: data, valueKey: valueKey, displayKey: displayKey};\">\n </ng-container>\n }\n </igx-combo-item>\n </div>\n @if (filteredData.length === 0 || isAddButtonVisible()) {\n <div class=\"igx-combo__add\">\n @if (filteredData.length === 0) {\n <div class=\"igx-combo__empty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate ? emptyTemplate : empty\">\n </ng-container>\n </div>\n }\n @if (isAddButtonVisible()) {\n <igx-combo-add-item [itemHeight]=\"itemHeight\"\n [tabindex]=\"dropdown.collapsed ? -1 : customValueFlag ? 1 : -1\" class=\"igx-combo__add-item\" role=\"button\"\n [attr.aria-label]=\"resourceStrings.igx_combo_addCustomValues_placeholder\" [index]=\"virtualScrollContainer.igxForOf.length\">\n <ng-container *ngTemplateOutlet=\"addItemTemplate ? addItemTemplate : addItemDefault\">\n </ng-container>\n </igx-combo-add-item>\n }\n </div>\n }\n <ng-container *ngTemplateOutlet=\"footerTemplate\">\n </ng-container>\n</igx-combo-drop-down>\n<ng-template #complex let-display let-data=\"data\" let-key=\"displayKey\">\n {{display[key]}}\n</ng-template>\n<ng-template #primitive let-display>\n {{display}}\n</ng-template>\n<ng-template #empty>\n <span>{{resourceStrings.igx_combo_empty_message}}</span>\n</ng-template>\n<ng-template #addItemDefault let-control>\n <button type=\"button\" igxButton=\"flat\" igxRipple>{{ resourceStrings.igx_combo_addCustomValues_placeholder }}</button>\n</ng-template>\n<ng-template #headerItemBase let-item let-key=\"valueKey\" let-groupKey=\"groupKey\">\n {{ item[key] }}\n</ng-template>\n","import { IgxHintDirective, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxComboComponent } from './combo.component';\nimport {\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboEmptyDirective,\n IgxComboFooterDirective,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemDirective,\n IgxComboToggleIconDirective\n} from './combo.directives';\n\nexport * from './combo.api';\nexport * from './combo.common';\nexport * from './combo.component';\nexport * from './combo.directives';\nexport * from './combo.pipes';\nexport * from './combo-add-item.component';\nexport * from './combo-dropdown.component'\nexport * from './combo-item.component';\nexport { comboIgnoreDiacriticsFilter } from './combo.pipes';\n\n/* NOTE: Combo directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_COMBO_DIRECTIVES = [\n IgxComboComponent,\n IgxComboAddItemDirective,\n IgxComboClearIconDirective,\n IgxComboEmptyDirective,\n IgxComboFooterDirective,\n IgxComboHeaderDirective,\n IgxComboHeaderItemDirective,\n IgxComboItemDirective,\n IgxComboToggleIconDirective,\n IgxLabelDirective,\n IgxPrefixDirective,\n IgxSuffixDirective,\n IgxHintDirective\n] as const;\n","import { NgModule } from '@angular/core';\nimport { IGX_COMBO_DIRECTIVES } from './public_api';\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n imports: [\n ...IGX_COMBO_DIRECTIVES\n ],\n exports: [\n ...IGX_COMBO_DIRECTIVES\n ]\n})\nexport class IgxComboModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.IgxComboComponent","i2.IgxComboAddItemDirective","i2.IgxComboClearIconDirective","i2.IgxComboEmptyDirective","i2.IgxComboFooterDirective","i2.IgxComboHeaderDirective","i2.IgxComboHeaderItemDirective","i2.IgxComboItemDirective","i2.IgxComboToggleIconDirective"],"mappings":"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"}