@fundamental-ngx/core 0.61.3 → 0.61.4

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.
@@ -233,7 +233,7 @@ class SelectKeyManagerService {
233
233
  .withAllowedModifierKeys(['shiftKey']);
234
234
  this._keyManager.tabOut.pipe(takeUntilDestroyed(this._component._destroy)).subscribe(() => {
235
235
  // tab focus fix for mobile
236
- if (!this._component.mobile) {
236
+ if (!this._isMobile()) {
237
237
  this._component.focus();
238
238
  this._component.close(false, true);
239
239
  }
@@ -318,13 +318,22 @@ class SelectKeyManagerService {
318
318
  manager.activeItem._selectViaInteraction();
319
319
  this._component.blur();
320
320
  }
321
- else if (!isTyping && KeyUtil.isKeyCode(event, [TAB]) && this._component.mobile) {
322
- event.preventDefault();
321
+ else if (!isTyping && KeyUtil.isKeyCode(event, [TAB])) {
322
+ if (this._isMobile()) {
323
+ event.preventDefault();
324
+ }
323
325
  }
324
326
  else {
325
327
  manager.onKeydown(event);
326
328
  }
327
329
  }
330
+ /**
331
+ * Checks if the component is in mobile mode.
332
+ * @hidden
333
+ */
334
+ _isMobile() {
335
+ return typeof this._component.mobile === 'function' ? this._component.mobile() : this._component.mobile;
336
+ }
328
337
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectKeyManagerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
329
338
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: SelectKeyManagerService }); }
330
339
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-select.mjs","sources":["../../../../libs/core/select/option/option.component.ts","../../../../libs/core/select/option/option.component.html","../../../../libs/core/select/select-key-manager.service.ts","../../../../libs/core/select/select.interface.ts","../../../../libs/core/select/select-mobile/select-mobile.component.ts","../../../../libs/core/select/select-mobile/select-mobile.component.html","../../../../libs/core/select/select-mobile/select-mobile.module.ts","../../../../libs/core/select/select.component.ts","../../../../libs/core/select/select.component.html","../../../../libs/core/select/select.module.ts","../../../../libs/core/select/fundamental-ngx-core-select.ts"],"sourcesContent":["import { FocusOrigin, FocusableOption } from '@angular/cdk/a11y';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { ListTitleDirective } from '@fundamental-ngx/core/list';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { startWith } from 'rxjs/operators';\nimport { OptionsInterface } from '../options.interface';\n\nlet optionUniqueId = 0;\n\n/**\n * Event object emitted by OptionComponent when\n * selected or deselected.\n */\nexport class FdOptionSelectionChange {\n /**\n * Reference to the OptionComponent that emitted the event.\n * @param source The option that emitted the event.\n * @param isUserInput Whether the change in the option's value was a result of a user interaction.\n */\n constructor(\n /** Reference to the option that emitted the event. */\n readonly source: OptionComponent,\n /** Whether the change in the option's value was a result of a user action. */\n readonly isUserInput = false\n ) {}\n}\n\n/**\n * Used to represent an option of the select component.\n */\n@Component({\n selector: '[fd-option], fd-option',\n templateUrl: './option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-list__item',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-selected]': 'selected',\n '[class.is-focus]': 'active',\n '[attr.id]': 'id',\n '[tabindex]': '-1',\n role: 'option',\n '(click)': '_selectViaInteraction()',\n '(keydown)': '_handleKeydown($event)'\n },\n styles: [\n `\n .fd-list__item[aria-disabled='true'],\n .fd-list__item.is-disabled,\n .fd-list__item:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .fd-list__item:disabled:focus {\n outline: none;\n }\n `\n ],\n imports: [ListTitleDirective, NgTemplateOutlet]\n})\nexport class OptionComponent implements AfterViewInit, AfterViewChecked, OnDestroy, FocusableOption, OptionsInterface {\n /** Option id attribute */\n @Input()\n id = `fd-option-${optionUniqueId++}`;\n\n /** Value of the option. Similar to how a native select operates. */\n @Input()\n value: any;\n\n /** Whether to disable this option specifically. */\n @Input()\n disabled = false;\n\n /**\n * Emits event when option is selected or deselected.\n */\n @Output()\n readonly selectionChange = new EventEmitter<FdOptionSelectionChange>();\n\n /** @hidden */\n @HostBinding('class.is-selected')\n selected = false;\n\n /** @Hidden */\n @ContentChildren(ListTitleDirective)\n _listTitleDirectives: QueryList<ListTitleDirective> | undefined;\n\n /** @hidden */\n _renderer: 'plain' | 'title' = 'title';\n\n /**\n * The displayed value of the option. It shows the selected option in the select's trigger.\n */\n get viewValue(): string {\n return (this._elementRef.nativeElement.textContent || '').trim();\n }\n\n /** used in components like autocomplete where focus must remain on the input.*/\n get active(): boolean {\n return this._active;\n }\n\n /** @hidden */\n readonly _stateChanges = new Subject<void>();\n\n /** @hidden */\n private _mostRecentViewValue = '';\n\n /** @hidden */\n private _active = false;\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) {}\n\n /** @Hidden */\n ngAfterViewInit(): void {\n this._listTitleDirectives?.changes.pipe(startWith(null)).subscribe(() => {\n const directivesLength = this._listTitleDirectives?.length ?? 0;\n this._renderer = directivesLength > 0 ? 'plain' : 'title';\n this._changeDetectorRef.detectChanges();\n });\n }\n\n /**\n * @hidden\n * Since select components could be using the option's label to display the selected values\n * and they don't have a way of knowing if the option's label has changed\n * we have to check for changes in the DOM ourselves and dispatch an event\n */\n ngAfterViewChecked(): void {\n if (this.selected) {\n const viewValue = this.viewValue;\n\n if (viewValue !== this._mostRecentViewValue) {\n this._mostRecentViewValue = viewValue;\n this._stateChanges.next();\n }\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._stateChanges.complete();\n }\n\n /** @hidden\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setActiveStyles(): void {\n if (!this._active) {\n this._active = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setInactiveStyles(): void {\n if (this._active) {\n this._active = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden\n * Focuses the element. */\n focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n const element = this._elementRef.nativeElement;\n\n if (typeof element.focus === 'function') {\n element.focus(options);\n }\n }\n\n /** @hidden\n * option value\n */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** @hidden\n * Returns HTMLElement representation of the component. */\n _getHtmlElement(): HTMLElement {\n return this._elementRef.nativeElement as HTMLElement;\n }\n\n /** Selects the option.\n * * @hidden\n */\n _select(): void {\n if (!this.selected) {\n this.selected = true;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, false));\n }\n }\n\n /** @hidden\n * Deselects the option.\n */\n _deselect(): void {\n if (this.selected) {\n this.selected = false;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, false));\n }\n }\n\n /**\n * Ensures the option is selected when activated from the keyboard.\n *\n * @hidden\n */\n _handleKeydown(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE]) && !hasModifierKey(event)) {\n this._selectViaInteraction();\n event.preventDefault();\n }\n }\n\n /** @hidden */\n _selectViaInteraction(): void {\n if (!this.disabled) {\n this.selected = true;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, true));\n }\n }\n}\n","@if (_renderer === 'title') {\n <span fd-list-title>\n <ng-template [ngTemplateOutlet]=\"plainRenderer\"></ng-template>\n </span>\n} @else {\n <ng-template [ngTemplateOutlet]=\"plainRenderer\"></ng-template>\n}\n<ng-template #plainRenderer>\n <ng-content></ng-content>\n</ng-template>\n<ng-content select=\"[secondary]\"></ng-content>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, END, ENTER, ESCAPE, HOME, SPACE, TAB, UP_ARROW, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Injectable } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { OptionsInterface } from './options.interface';\nimport { SelectInterface } from './select.interface';\n\n@Injectable()\nexport class SelectKeyManagerService {\n /** @hidden */\n _component: SelectInterface;\n\n /** @hidden */\n _keyManager: ActiveDescendantKeyManager<OptionsInterface>;\n\n /**\n * Sets up a key manager to listen to keyboard events on the overlay panel.\n * @hidden\n */\n _initKeyManager(): void {\n this._keyManager = new ActiveDescendantKeyManager<OptionsInterface>(this._component._options)\n .withTypeAhead(this._component.typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._component.isRtl() ? 'rtl' : 'ltr')\n .withAllowedModifierKeys(['shiftKey']);\n\n this._keyManager.tabOut.pipe(takeUntilDestroyed(this._component._destroy)).subscribe(() => {\n // tab focus fix for mobile\n if (!this._component.mobile) {\n this._component.focus();\n this._component.close(false, true);\n }\n });\n\n this._keyManager.change.pipe(takeUntilDestroyed(this._component._destroy)).subscribe(() => {\n if (this._component._isOpen && this._component._optionPanel) {\n this._scrollActiveOptionIntoView();\n } else if (!this._component._isOpen && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n /** @hidden */\n _scrollActiveOptionIntoView(): void {\n const activeOptionIndex = this._keyManager.activeItemIndex || 0;\n this._component._optionPanel.nativeElement.parentElement.scrollTop = this._component._getOptionScrollPosition(\n activeOptionIndex,\n this._component._getItemHeight(),\n this._component._optionPanel.nativeElement.scrollTop\n );\n }\n\n /**\n * Handles keyboard events while the select is closed.\n * @hidden\n */\n _handleClosedKeydown(event: KeyboardEvent): void {\n const isOpenKey = KeyUtil.isKeyCode(event, [ENTER, SPACE]);\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (!manager.isTyping() && isOpenKey && !hasModifierKey(event)) {\n // prevents the page from scrolling down when pressing space\n event.preventDefault();\n this._component.open();\n } else {\n const previouslySelectedOption = this._component.selected;\n\n if (KeyUtil.isKeyCode(event, [HOME, END])) {\n if (KeyUtil.isKeyCode(event, HOME)) {\n manager.setFirstItemActive();\n } else {\n manager.setLastItemActive();\n }\n event.preventDefault();\n }\n\n const selectedOption = this._component.selected;\n\n // a11y Since the value has changed, we need to announce it.\n if (selectedOption && previouslySelectedOption !== selectedOption) {\n this._component._liveAnnouncer.announce((selectedOption as OptionsInterface).viewValue, 10000);\n }\n manager.onKeydown(event);\n }\n }\n\n /**\n * Handles keyboard events when the selected is open.\n *\n * @hidden\n */\n _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const isArrowKey = KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW]);\n const isTyping = manager.isTyping();\n\n if (KeyUtil.isKeyCode(event, [HOME, END])) {\n event.preventDefault();\n if (KeyUtil.isKeyCode(event, HOME)) {\n manager.setFirstItemActive();\n } else {\n manager.setLastItemActive();\n }\n } else if ((isArrowKey && event.altKey) || KeyUtil.isKeyCode(event, [ESCAPE])) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this._component.blur();\n this._component.close();\n // When user is typing do nothing,\n // because the typing sequence can include the space key.\n } else if (\n !isTyping &&\n KeyUtil.isKeyCode(event, [ENTER, SPACE]) &&\n manager.activeItem &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n this._component.blur();\n } else if (!isTyping && KeyUtil.isKeyCode(event, [TAB]) && this._component.mobile) {\n event.preventDefault();\n } else {\n manager.onKeydown(event);\n }\n }\n}\n","import { DestroyRef, ElementRef, EventEmitter, InjectionToken, QueryList, Signal } from '@angular/core';\n\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { MobileMode, MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { OptionComponent } from './option/option.component';\n\nexport const SELECT_COMPONENT = new InjectionToken<SelectInterface>('SelectInterface');\n\n/**\n * Select Interface to have typing and avoid circular dependency between\n * SelectComponent <==> SelectMobileComponent\n */\nexport interface SelectInterface<TOption = any> extends MobileMode {\n typeaheadDebounceInterval: number;\n /** Whether the component is in RTL mode */\n isRtl: Signal<boolean>;\n selected: OptionComponent;\n mobileConfig: MobileModeConfig;\n _options: QueryList<TOption>;\n _destroy: DestroyRef;\n _optionPanel: ElementRef;\n _isOpen: boolean;\n _calculatedMaxHeight: number;\n _liveAnnouncer: LiveAnnouncer;\n\n isOpenChange: EventEmitter<boolean>;\n valueChange: EventEmitter<any>;\n\n close(forceClose?: boolean, tabOut?: boolean): void;\n open(): void;\n focus(): void;\n blur(): void;\n _getItemHeight(): number;\n _getOptionScrollPosition(optionIndex: number, optionHeight: number, currentScrollPosition: number): void;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { SELECT_COMPONENT, SelectInterface } from '../select.interface';\n\n/**\n * This component provides extended mobile support for Select component to render list of option since full screen\n * dialog.\n */\n@Component({\n selector: 'fd-select-mobile',\n templateUrl: './select-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DynamicComponentService],\n imports: [\n ButtonBarComponent,\n TitleComponent,\n TitleComponent,\n NgTemplateOutlet,\n ButtonBarComponent,\n DialogComponent,\n DialogHeaderComponent,\n DialogFooterComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent\n ]\n})\nexport class SelectMobileComponent extends MobileModeBase<SelectInterface> implements OnInit, AfterViewInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate')\n _dialogTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * from mobile class can not prefix _,\n * to avoid build issues\n */\n childContent: TemplateRef<any> | null = null;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(@Inject(SELECT_COMPONENT) _selectComponent: SelectInterface) {\n super(_selectComponent, MobileModeControl.SELECT);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onItemKeydown(event: KeyboardEvent): void {\n if (event && KeyUtil.isKeyCode(event, [ESCAPE])) {\n this._component.close(true);\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnSelectOpenChange();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._openDialog();\n this.dialogRef.hide(true);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.dialogRef.close();\n this._subscriptions.unsubscribe();\n }\n\n /**\n * Only when we have Approve.\n * @hidden\n */\n _cancel(): void {\n this._component.close(true);\n }\n\n /** @hidden */\n _approve(): void {\n this._component.close(true);\n }\n\n /** @hidden Hide/Show the Dialog when Select Open/Close*/\n private _listenOnSelectOpenChange(): void {\n this._subscriptions.add(\n this._component.isOpenChange.subscribe((isOpen) => {\n this._elementRef.nativeElement.blur();\n this.dialogRef.hide(!isOpen);\n })\n );\n }\n\n /** @hidden */\n private _openDialog(): void {\n this.dialogRef = this._dialogService.open(this._dialogTemplate, {\n ...this.dialogConfig,\n mobile: true,\n disablePaddings: true,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n ariaLabelledBy: 'fd-dialog-header'\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog tabindex=\"-1\" [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 id=\"fd-dialog-header\" fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button\n role=\"button\"\n aria-label=\"close\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"_cancel()\"\n ></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent\"></ng-template>\n </fd-dialog-body>\n @if (mobileConfig.approveButtonText || mobileConfig.cancelButtonText) {\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"_approve()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"_cancel()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { SelectMobileComponent } from './select-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [DialogModule, ButtonComponent, SelectMobileComponent],\n exports: [SelectMobileComponent],\n providers: [DynamicComponentService]\n})\nexport class SelectMobileModule {}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n inject,\n isDevMode\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { Observable, Subscription, defer, merge } from 'rxjs';\nimport { startWith, switchMap, takeUntil } from 'rxjs/operators';\n\nimport {\n DynamicComponentService,\n KeyUtil,\n ModuleDeprecation,\n Nullable,\n RtlService,\n destroyObservable\n} from '@fundamental-ngx/cdk/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\n\nimport { ENTER, ESCAPE, SPACE } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormFieldAdvancedStateMessage, FormStates, SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { ListComponent, ListMessageDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FdOptionSelectionChange, OptionComponent } from './option/option.component';\nimport { SelectKeyManagerService } from './select-key-manager.service';\nimport { SelectMobileComponent } from './select-mobile/select-mobile.component';\nimport { SELECT_COMPONENT, SelectInterface } from './select.interface';\n\nlet selectUniqueId = 0;\n\nconst SELECT_HEADER_IDENTIFIER = '.fd-list__group-header';\n\nexport const SELECT_PANEL_MAX_HEIGHT = 250;\n\n/** The height of the select items in `rem` units. */\nexport const SELECT_ITEM_HEIGHT_EM = 4;\n\nexport type TextOverflowMode = 'full' | 'ellipsis';\n\nexport enum TextOverflowModeEnum {\n FULL = 'full',\n ELLIPSIS = 'ellipsis'\n}\n\n/**\n * Select component intended to mimic\n * the behaviour of the native select element.\n */\n@Component({\n selector: 'fd-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-select',\n '[class.fd-select--inline]': 'inline',\n // @deprecated leaving class fd-select-custom-class for backwards compatibility\n '[class.fd-select-custom-class]': 'inline',\n // @deprecated leaving class fd-select-custom-class--mobile for backwards compatibility\n '[class.fd-select-custom-class--mobile]': 'mobile'\n },\n providers: [\n {\n provide: SELECT_COMPONENT,\n useExisting: SelectComponent\n },\n registerFormItemControl(SelectComponent),\n SelectKeyManagerService,\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n NgClass,\n IconComponent,\n ListComponent,\n ListMessageDirective,\n FdTranslatePipe,\n ButtonComponent,\n ListTitleDirective\n ]\n})\nexport class SelectComponent<T = any>\n implements\n SingleDropdownValueControl,\n ControlValueAccessor,\n SelectInterface,\n OnInit,\n AfterViewInit,\n AfterContentInit,\n OnChanges,\n OnDestroy,\n FormItemControl\n{\n /** @deprecated\n * it is handled internally by controlTemplate != null|undefined is\n * Equal as extendedBodyTemplate as true.\n * Whether option components contain more than basic text. */\n @Input()\n set extendedBodyTemplate(value: boolean) {\n this._extendedBodyTemplate = value;\n }\n\n get extendedBodyTemplate(): boolean {\n return this._extendedBodyTemplate;\n }\n\n /** Scrolling strategy to be used for popover. */\n @Input()\n scrollStrategy: ScrollStrategy;\n\n /**\n * Controls how long text is displayed in the dropdown list of the Select component.\n *\n * - `'ellipsis'`: Truncates the text with an ellipsis (`...`) if it exceeds a certain length.\n * - `'full'`: Displays the entire text on multiple lines, ensuring full visibility.\n */\n @Input()\n textOverflow: TextOverflowMode = 'ellipsis';\n\n /** The ID of the control. */\n @Input()\n controlId = `fd-select-${selectUniqueId++}`;\n\n /** Holds the control state of select */\n @Input()\n state: Nullable<FormStates>;\n\n /** Whether the select component should be displayed in mobile mode. */\n @Input()\n mobile = false;\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: Nullable<string>;\n\n /** Whether the select component is disabled. */\n @Input()\n disabled = false;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Whether the select component is readonly. */\n @Input()\n readonly = false;\n\n /** Placeholder for the select. Appears in the triggerbox if no option is selected. */\n @Input()\n placeholder: string;\n\n /** Value of the select control. */\n @Input()\n set value(newValue: any) {\n if (newValue !== this._internalValue) {\n this.writeValue(newValue);\n this._internalValue = newValue;\n }\n }\n get value(): any {\n return this._internalValue;\n }\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight: string;\n\n /** Glyph to add icon in the select component. */\n @Input()\n glyph = 'slim-arrow-down';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether close the popover on outside click. */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Custom template used to build control body. */\n @Input()\n controlTemplate: TemplateRef<any> | undefined;\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /**\n * If the option should be unselected and value changed to undefined, when the current value is\n * not presented in option array. Switching it off can be handy, when there is some delay between providing\n * possible options and chosen value.\n */\n @Input()\n unselectMissingOption = true;\n\n /** Time to wait in milliseconds after the last keydown before focusing or selecting option based on alphanumeric keys. */\n @Input()\n typeaheadDebounceInterval = 250;\n\n /** Binds to control aria-labelledBy attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Sets control aria-label attribute value */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Select Input Mobile Configuration */\n @Input()\n mobileConfig: MobileModeConfig = { hasCloseButton: true };\n\n /** Should select be inlined. */\n @Input()\n inline = true;\n\n /** Additional classname for the select control element. */\n @Input()\n selectControlClass: Nullable<string>;\n\n /** Additional classname for the select dropdown button element. */\n @Input()\n selectDropdownButtonClass: Nullable<string>;\n\n /** Holds advanced message renderer with respect to state. */\n @Input()\n advancedStateMessage: Nullable<FormFieldAdvancedStateMessage>;\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'close';\n\n /** Event emitted when the popover open state changes. */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the selected value of the select changes. */\n @Output()\n readonly valueChange = new EventEmitter<T>();\n\n /** @hidden */\n @ContentChildren(OptionComponent, { descendants: true })\n _options: QueryList<OptionComponent>;\n\n /** @hidden */\n @ViewChild('selectControl')\n _controlElementRef: ElementRef<HTMLDivElement>;\n\n /** Reference to element containing list of options */\n @ViewChild('selectOptionsListTemplate')\n selectOptionsListTemplate: TemplateRef<any>;\n\n /** @hidden\n * Reference to root element for the mobile mode dialog */\n @ViewChild('dialogContainer')\n _dialogContainerElementRef: ElementRef;\n\n /**\n * Overlay pane containing the options.\n * @hidden\n */\n @ViewChild(CdkConnectedOverlay)\n _overlayDir: CdkConnectedOverlay;\n\n /** @hidden\n * Referent to the option;s container\n */\n @ViewChild('optionPanel', { read: ElementRef })\n _optionPanel: ElementRef;\n\n /** Whether popover is opened\n * @hidden\n */\n _isOpen = false;\n\n /** @hidden */\n _tabIndex: number;\n\n /** @hidden */\n _liveAnnouncer: LiveAnnouncer;\n\n /** @hidden */\n _internalValue: any;\n\n /** @hidden */\n _calculatedMaxHeight: number;\n\n /** @hidden */\n _selectionModel: SelectionModel<OptionComponent>;\n\n /** @hidden */\n get showEllipsis(): boolean {\n return this.textOverflow === TextOverflowModeEnum.ELLIPSIS;\n }\n\n /**\n * @hidden\n * Triggers when component is destroyed\n */\n readonly _destroy = inject(DestroyRef);\n\n /** @hidden */\n get _selectControlClass(): string {\n return [this.state ? `is-${this.state}` : '', this.selectControlClass]\n .filter((className) => !!className)\n .join(' ');\n }\n\n /**\n * @hidden\n * Combined stream of all of the child options' change events.\n */\n readonly _optionSelectionChanges: Observable<FdOptionSelectionChange> = defer(() => {\n const _options = this._options;\n\n return _options?.changes.pipe(\n startWith(_options),\n switchMap(() => merge(..._options.map((option) => option.selectionChange)))\n );\n });\n\n /** Selected option. */\n get selected(): OptionComponent {\n return this._selectionModel.selected[0];\n }\n\n /** Retrieves selected value if any. */\n get triggerValue(): string {\n const emptyValue = ' ';\n if (this._selectionModel.isEmpty()) {\n return this.placeholder || emptyValue;\n }\n return this.selected.viewValue || this.placeholder || emptyValue;\n }\n\n /** equal to close\n * Tells the OptionList if it's closable by simply selecting the item either with CLICK | SPACE | ENTER.\n * When we are in mobile mode (mobile=true) and have we have enabled confirmation buttons then we\n * dont close option list. We close only after we hit confirm button.\n */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** Whether control can be interacted with */\n get isInteractive(): boolean {\n return !(this.readonly || this.disabled);\n }\n\n /**\n * Check if we can emit a value. They are 3 different paths where we can emit value:\n * - We are not in mobile mode [mobile]=false\n * - We are in mobile mode [mobile]=true and mobile dialog as just close X button to dismiss it\n * - We are in mobile mode [mobile]=true and mobile dialog has ApproveButton available and\n * dialog is closed. (meaning we already clicked this button)\n */\n get canEmitValueChange(): boolean {\n return (\n !this.mobile ||\n (this.mobile &&\n // Approve + Cancel\n !!this.mobileConfig.approveButtonText &&\n !this._isOpen) ||\n // CloseButton. Emits when you click on the option item\n (!!this.mobileConfig.hasCloseButton && !!this.mobileConfig.approveButtonText === false)\n );\n }\n\n /** Function to compare the option values with the selected values. */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw Error('compareWith` must be a function.');\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n\n get compareWith(): (o1: any, o2: any) => boolean {\n return this._compareWith;\n }\n\n /** @hidden */\n get focused(): boolean {\n return this._focused || this._isOpen;\n }\n\n /** @hidden */\n get calculatedMaxHeight(): number {\n return this._maxHeight || this._calculatedMaxHeight;\n }\n /** Whether the component is in RTL mode */\n readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private _extendedBodyTemplate = false;\n\n /** @hidden */\n private _controlElemFontSize = 0;\n\n /** @hidden */\n private _focused = false;\n\n /**\n * @hidden\n * Stored calculated maxHeight from Option Panel\n */\n private _maxHeight: number;\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\n\n /** @hidden */\n constructor(\n @Attribute('tabindex') _tabIndex: string,\n private readonly _keyManagerService: SelectKeyManagerService,\n private readonly _changeDetectorRef: ChangeDetectorRef,\n private readonly _viewContainerRef: ViewContainerRef,\n @Optional() private readonly _dynamicComponentService: DynamicComponentService,\n @Optional() @Self() private readonly ngControl: NgControl,\n @Optional() private readonly _injector: Injector,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n this._tabIndex = parseInt(_tabIndex, 10) || 0;\n }\n\n /** @hidden */\n @HostListener('window:resize')\n _resizeScrollHandler(): void {\n this._updateCalculatedHeight();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled && !this.readonly) {\n this._isOpen\n ? this._keyManagerService._handleOpenKeydown(event)\n : this._keyManagerService._handleClosedKeydown(event);\n }\n if (KeyUtil.isKeyCode(event, [ESCAPE, ENTER, SPACE])) {\n this._controlElementRef.nativeElement.focus();\n }\n }\n\n /** Toggles the open state of the select. */\n @HostListener('click')\n toggle(): void {\n this._isOpen ? this.close() : this.open();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._tabIndex = this.disabled ? -1 : 0;\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n _compareWith = (o1: any, o2: any): boolean => o1 === o2;\n\n /** @hidden */\n ngOnInit(): void {\n this._initializeCommonBehavior();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyManagerService._initKeyManager();\n this._setupMobileMode();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._registerEventsAfterContentInit();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['typeaheadDebounceInterval'] && this._keyManagerService._keyManager) {\n this._keyManagerService._keyManager.withTypeAhead(this.typeaheadDebounceInterval);\n } else if (changes['disabled']) {\n this._tabIndex = this.disabled ? -1 : 0;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** Opens the select popover body. */\n open(): void {\n if (this.disabled || this.readonly || !this._options || !this._getItemCount() || this._isOpen) {\n return;\n }\n this._isOpen = true;\n\n this._controlElemFontSize = parseInt(\n getComputedStyle(this._controlElementRef.nativeElement).fontSize || '0',\n 10\n );\n\n this._keyManagerService._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n this._controlElementRef.nativeElement.focus();\n this.isOpenChange.emit(true);\n }\n\n /** @hidden */\n close(forceClose = false, tabOut = false): void {\n if (this._isOpen || forceClose) {\n if (tabOut && this.tabOutStrategy === 'closeAndSelect') {\n this._keyManagerService._keyManager.activeItem?._selectViaInteraction();\n }\n this._isOpen = false;\n this._keyManagerService._keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this.onTouched();\n\n this.isOpenChange.emit(false);\n }\n }\n\n /** Focuses select control. */\n focus(): void {\n (this._controlElementRef?.nativeElement as HTMLElement).focus();\n }\n\n /** Blurs select control. */\n blur(): void {\n (this._controlElementRef?.nativeElement as HTMLElement).blur();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden from ControlValue Accessor */\n writeValue(value: any): void {\n if (this._options) {\n this._setSelectionByValue(value);\n }\n }\n\n /** @hidden */\n _setSelectionByValue(value: any | any[]): void {\n this._selectionModel.clear();\n const correspondingOption = this._selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManagerService._keyManager.setActiveItem(correspondingOption);\n } else if (!this._isOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManagerService._keyManager.setActiveItem(-1);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n _selectValue(value: any): OptionComponent | undefined {\n const correspondingOption = this._options.find((option: OptionComponent) => {\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n /** @hidden */\n _popoverOpenChangeHandle(isOpen: boolean): void {\n isOpen ? this.open() : this.close();\n }\n\n /** @hidden Returns _keyManagerService. */\n _getKeyService(): SelectKeyManagerService {\n return this._keyManagerService;\n }\n\n /** @hidden */\n _setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n\n this._tabIndex = -1;\n }\n\n /** @hidden */\n _highlightCorrectOption(): void {\n if (this._keyManagerService._keyManager && this._selectionModel.isEmpty()) {\n this._keyManagerService._keyManager.setFirstItemActive();\n } else if (this._keyManagerService._keyManager && !this._selectionModel.isEmpty()) {\n this._keyManagerService._keyManager.setActiveItem(this.selected);\n }\n }\n\n /** @hidden */\n _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._internalValue);\n });\n }\n\n /**\n * Expose outside of this mixin to give component ability\n * to update caluclatedMaxHeight if needed\n * @hidden\n */\n _updateCalculatedHeight(): void {\n this._calculatedMaxHeight = window.innerHeight * 0.45;\n }\n\n /** @hidden */\n _getOptionScrollPosition(optionIndex: number, itemHeight: number, currentScrollPosition: number): number {\n const optionHeight = this._options.get(optionIndex)?._getHtmlElement().offsetHeight || itemHeight;\n const optionOffset = optionIndex * optionHeight;\n if (optionOffset < currentScrollPosition) {\n return optionOffset;\n }\n\n if (optionOffset + optionHeight > currentScrollPosition + SELECT_PANEL_MAX_HEIGHT) {\n return Math.max(0, optionOffset - SELECT_PANEL_MAX_HEIGHT + optionHeight);\n }\n return currentScrollPosition;\n }\n\n /** @hidden */\n _getItemHeight(): number {\n // also include border with default value 1.\n return this._controlElemFontSize * SELECT_ITEM_HEIGHT_EM + 1;\n }\n\n /** @hidden */\n _initializeCommonBehavior(): void {\n this._selectionModel = new SelectionModel<OptionComponent>(false);\n this._keyManagerService._component = this;\n\n this._updateCalculatedHeight();\n }\n\n /** @hidden */\n _registerEventsAfterContentInit(): void {\n this._selectionModel.changed.pipe(takeUntilDestroyed(this._destroy)).subscribe((event) => {\n event.added.forEach((option) => option._select());\n event.removed.forEach((option) => option._deselect());\n });\n\n this._options.changes.pipe(startWith(null), takeUntilDestroyed(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n /** @hidden */\n _getAriaActiveDescendant(): string | null {\n if (this._isOpen && this._keyManagerService._keyManager && this._keyManagerService._keyManager.activeItem) {\n return this._keyManagerService._keyManager.activeItem.id;\n }\n return null;\n }\n\n /** @hidden */\n _onFocus(): void {\n if (!this.disabled) {\n this._focused = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n _onBlur(): void {\n this._focused = false;\n\n if (!this.disabled && !this._isOpen) {\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n _buttonClick(): void {}\n\n /** @hidden */\n private _resetOptions(): void {\n const changedOrDestroyed = merge(this._options.changes, destroyObservable(this._destroy));\n\n this._optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe((event) => {\n this._onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && this._isOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the _options and react accordingly.\n // Handles cases like the labels of the selected _options changing.\n merge(...this._options.map((option) => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * @hidden\n * Invoked when an option is clicked.\n */\n private _onSelect(option: OptionComponent, isUserInput: boolean): void {\n const wasSelected = this._selectionModel.isSelected(option);\n if ((option.value === null || option.value === undefined) && this.unselectMissingOption) {\n option._deselect();\n this._selectionModel.clear();\n this._emitSelectChange(option.value);\n } else {\n if (wasSelected !== option.selected) {\n option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManagerService._keyManager.setActiveItem(option);\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option) || this.mobile) {\n this._emitSelectChange();\n }\n }\n\n /** @hidden */\n private _emitSelectChange(defaultVal?: any): void {\n if (this.canEmitValueChange) {\n this._internalValue =\n this._selectionModel.selected && this._selectionModel.selected.length !== 0\n ? (this.selected as OptionComponent).value\n : defaultVal;\n this.valueChange.emit(this._internalValue);\n this.onChange(this._internalValue);\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n private _getItemCount(): number {\n if (this._optionPanel && this._headerElements().length > 0) {\n return this._options.length + this._headerElements().length;\n }\n return this._options.length;\n }\n\n /** @hidden */\n private _headerElements(): NodeListOf<Element> {\n return this._optionPanel?.nativeElement.querySelectorAll(SELECT_HEADER_IDENTIFIER);\n }\n\n /** @hidden */\n private async _setupMobileMode(): Promise<void> {\n if (!this.mobile) {\n return;\n }\n\n const injector = Injector.create({\n providers: [{ provide: SELECT_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n this.selectOptionsListTemplate,\n SelectMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n\nexport class DeprecatedSelectCSSClasses implements ModuleDeprecation {\n /** @hidden */\n message = `Select CSS classes fd-select--compact, fd-select--compact--mobile, fd-popover-custom-select-body, fd-popover-custom-list are deprecated`;\n\n /** @hidden */\n alternative = {\n name: 'Inspect the elements of the Select component to see the new classes',\n link: ['/core', 'select']\n };\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <!-- &#64;deprecated leaving class fd-popover-custom-list to support backwards compatibility-->\n <fd-popover\n additionalBodyClass=\"fd-select-dropdown fd-popover-custom-list\"\n [isOpen]=\"_isOpen\"\n [triggers]=\"[]\"\n [focusTrapped]=\"true\"\n [disabled]=\"disabled || readonly\"\n [appendTo]=\"appendTo\"\n [scrollStrategy]=\"scrollStrategy\"\n [closeOnEscapeKey]=\"true\"\n [fillControlMode]=\"fillControlMode\"\n [maxWidth]=\"fillControlMode !== 'equal' ? 600 : null\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"selectInputControlTemplate\"></ng-template>\n </fd-popover-control>\n <!-- &#64;deprecated leaving class fd-popover-custom-select-body to support backwards compatibility-->\n <fd-popover-body class=\"fd-popover-custom-select-body\">\n <ng-template [ngTemplateOutlet]=\"selectOptionsListTemplate\"></ng-template>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #selectInputControlTemplate>\n <div\n class=\"fd-select__control\"\n #selectControl\n [class]=\"_selectControlClass\"\n [class.is-active]=\"_isOpen\"\n [class.is-expanded]=\"_isOpen\"\n [class.is-disabled]=\"disabled\"\n [class.is-readonly]=\"readonly\"\n [class.is-placeholder]=\"!selected\"\n [attr.tabindex]=\"_tabIndex\"\n [attr.id]=\"controlId\"\n [attr.aria-active]=\"_isOpen\"\n aria-live=\"polite\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-roledescription=\"listbox\"\n [attr.aria-expanded]=\"_isOpen\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-controls]=\"controlId + '-list-box'\"\n [attr.aria-required]=\"required\"\n [attr.title]=\"triggerValue\"\n [attr.aria-label]=\"ariaLabel || ('platformSelect.selectOptionLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-activedescendant]=\"_getAriaActiveDescendant()\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n >\n <div class=\"fd-select__text-content\">\n <ng-template\n [ngTemplateOutlet]=\"controlTemplate ? controlTemplate : defaultSelectContent\"\n [ngTemplateOutletContext]=\"{ $implicit: triggerValue, selected: selected }\"\n >\n </ng-template>\n <ng-template #defaultSelectContent>\n {{ triggerValue }}\n </ng-template>\n </div>\n @if (!readonly) {\n <span\n fd-button\n fdType=\"transparent\"\n class=\"fd-select__button\"\n [ngClass]=\"selectDropdownButtonClass\"\n [class.is-disabled]=\"disabled\"\n >\n <fd-icon [ariaHidden]=\"true\" [glyph]=\"glyph\" [font]=\"glyphFont\"></fd-icon>\n </span>\n }\n </div>\n</ng-template>\n<ng-template #selectOptionsListTemplate>\n <ul\n #optionPanel\n fd-list\n class=\"fd-select-options\"\n role=\"listbox\"\n tabindex=\"-1\"\n [mobileMode]=\"mobile\"\n [dropdownMode]=\"true\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [attr.id]=\"controlId + '-list-box'\"\n [style.max-height]=\"maxHeight || calculatedMaxHeight + 'px'\"\n [style.padding-block-start.rem]=\"showEllipsis && stateMessage ? 2 : 0\"\n [attr.tooltip]=\"triggerValue\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n [class.fd-select-message]=\"!showEllipsis\"\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n >\n @if (!showEllipsis) {\n <span fd-list-title>\n {{ stateMessage }}\n </span>\n } @else {\n <span>\n {{ stateMessage }}\n </span>\n }\n </li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n </ul>\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"selectInputControlTemplate\"></ng-template>\n <div #dialogContainer></div>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { OptionComponent } from './option/option.component';\nimport { SelectComponent } from './select.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n exports: [SelectComponent, OptionComponent],\n imports: [SelectComponent, OptionComponent]\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SelectKeyManagerService"],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-select.mjs","sources":["../../../../libs/core/select/option/option.component.ts","../../../../libs/core/select/option/option.component.html","../../../../libs/core/select/select-key-manager.service.ts","../../../../libs/core/select/select.interface.ts","../../../../libs/core/select/select-mobile/select-mobile.component.ts","../../../../libs/core/select/select-mobile/select-mobile.component.html","../../../../libs/core/select/select-mobile/select-mobile.module.ts","../../../../libs/core/select/select.component.ts","../../../../libs/core/select/select.component.html","../../../../libs/core/select/select.module.ts","../../../../libs/core/select/fundamental-ngx-core-select.ts"],"sourcesContent":["import { FocusOrigin, FocusableOption } from '@angular/cdk/a11y';\nimport { ENTER, SPACE, hasModifierKey } from '@angular/cdk/keycodes';\nimport {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnDestroy,\n Output,\n QueryList,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport { ListTitleDirective } from '@fundamental-ngx/core/list';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { startWith } from 'rxjs/operators';\nimport { OptionsInterface } from '../options.interface';\n\nlet optionUniqueId = 0;\n\n/**\n * Event object emitted by OptionComponent when\n * selected or deselected.\n */\nexport class FdOptionSelectionChange {\n /**\n * Reference to the OptionComponent that emitted the event.\n * @param source The option that emitted the event.\n * @param isUserInput Whether the change in the option's value was a result of a user interaction.\n */\n constructor(\n /** Reference to the option that emitted the event. */\n readonly source: OptionComponent,\n /** Whether the change in the option's value was a result of a user action. */\n readonly isUserInput = false\n ) {}\n}\n\n/**\n * Used to represent an option of the select component.\n */\n@Component({\n selector: '[fd-option], fd-option',\n templateUrl: './option.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-list__item',\n '[attr.aria-disabled]': 'disabled',\n '[attr.aria-selected]': 'selected',\n '[class.is-focus]': 'active',\n '[attr.id]': 'id',\n '[tabindex]': '-1',\n role: 'option',\n '(click)': '_selectViaInteraction()',\n '(keydown)': '_handleKeydown($event)'\n },\n styles: [\n `\n .fd-list__item[aria-disabled='true'],\n .fd-list__item.is-disabled,\n .fd-list__item:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n }\n\n .fd-list__item:disabled:focus {\n outline: none;\n }\n `\n ],\n imports: [ListTitleDirective, NgTemplateOutlet]\n})\nexport class OptionComponent implements AfterViewInit, AfterViewChecked, OnDestroy, FocusableOption, OptionsInterface {\n /** Option id attribute */\n @Input()\n id = `fd-option-${optionUniqueId++}`;\n\n /** Value of the option. Similar to how a native select operates. */\n @Input()\n value: any;\n\n /** Whether to disable this option specifically. */\n @Input()\n disabled = false;\n\n /**\n * Emits event when option is selected or deselected.\n */\n @Output()\n readonly selectionChange = new EventEmitter<FdOptionSelectionChange>();\n\n /** @hidden */\n @HostBinding('class.is-selected')\n selected = false;\n\n /** @Hidden */\n @ContentChildren(ListTitleDirective)\n _listTitleDirectives: QueryList<ListTitleDirective> | undefined;\n\n /** @hidden */\n _renderer: 'plain' | 'title' = 'title';\n\n /**\n * The displayed value of the option. It shows the selected option in the select's trigger.\n */\n get viewValue(): string {\n return (this._elementRef.nativeElement.textContent || '').trim();\n }\n\n /** used in components like autocomplete where focus must remain on the input.*/\n get active(): boolean {\n return this._active;\n }\n\n /** @hidden */\n readonly _stateChanges = new Subject<void>();\n\n /** @hidden */\n private _mostRecentViewValue = '';\n\n /** @hidden */\n private _active = false;\n\n /** @hidden */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef\n ) {}\n\n /** @Hidden */\n ngAfterViewInit(): void {\n this._listTitleDirectives?.changes.pipe(startWith(null)).subscribe(() => {\n const directivesLength = this._listTitleDirectives?.length ?? 0;\n this._renderer = directivesLength > 0 ? 'plain' : 'title';\n this._changeDetectorRef.detectChanges();\n });\n }\n\n /**\n * @hidden\n * Since select components could be using the option's label to display the selected values\n * and they don't have a way of knowing if the option's label has changed\n * we have to check for changes in the DOM ourselves and dispatch an event\n */\n ngAfterViewChecked(): void {\n if (this.selected) {\n const viewValue = this.viewValue;\n\n if (viewValue !== this._mostRecentViewValue) {\n this._mostRecentViewValue = viewValue;\n this._stateChanges.next();\n }\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._stateChanges.complete();\n }\n\n /** @hidden\n * This method sets display styles on the option to make it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setActiveStyles(): void {\n if (!this._active) {\n this._active = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden\n * This method removes display styles on the option that made it appear\n * active. This is used by the ActiveDescendantKeyManager so key\n * events will display the proper options as active on arrow key events.\n */\n setInactiveStyles(): void {\n if (this._active) {\n this._active = false;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden\n * Focuses the element. */\n focus(_origin?: FocusOrigin, options?: FocusOptions): void {\n const element = this._elementRef.nativeElement;\n\n if (typeof element.focus === 'function') {\n element.focus(options);\n }\n }\n\n /** @hidden\n * option value\n */\n getLabel(): string {\n return this.viewValue;\n }\n\n /** @hidden\n * Returns HTMLElement representation of the component. */\n _getHtmlElement(): HTMLElement {\n return this._elementRef.nativeElement as HTMLElement;\n }\n\n /** Selects the option.\n * * @hidden\n */\n _select(): void {\n if (!this.selected) {\n this.selected = true;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, false));\n }\n }\n\n /** @hidden\n * Deselects the option.\n */\n _deselect(): void {\n if (this.selected) {\n this.selected = false;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, false));\n }\n }\n\n /**\n * Ensures the option is selected when activated from the keyboard.\n *\n * @hidden\n */\n _handleKeydown(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, [ENTER, SPACE]) && !hasModifierKey(event)) {\n this._selectViaInteraction();\n event.preventDefault();\n }\n }\n\n /** @hidden */\n _selectViaInteraction(): void {\n if (!this.disabled) {\n this.selected = true;\n this._changeDetectorRef.markForCheck();\n this.selectionChange.emit(new FdOptionSelectionChange(this, true));\n }\n }\n}\n","@if (_renderer === 'title') {\n <span fd-list-title>\n <ng-template [ngTemplateOutlet]=\"plainRenderer\"></ng-template>\n </span>\n} @else {\n <ng-template [ngTemplateOutlet]=\"plainRenderer\"></ng-template>\n}\n<ng-template #plainRenderer>\n <ng-content></ng-content>\n</ng-template>\n<ng-content select=\"[secondary]\"></ng-content>\n","import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, END, ENTER, ESCAPE, HOME, SPACE, TAB, UP_ARROW, hasModifierKey } from '@angular/cdk/keycodes';\nimport { Injectable } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { OptionsInterface } from './options.interface';\nimport { SelectInterface } from './select.interface';\n\n@Injectable()\nexport class SelectKeyManagerService {\n /** @hidden */\n _component: SelectInterface;\n\n /** @hidden */\n _keyManager: ActiveDescendantKeyManager<OptionsInterface>;\n\n /**\n * Sets up a key manager to listen to keyboard events on the overlay panel.\n * @hidden\n */\n _initKeyManager(): void {\n this._keyManager = new ActiveDescendantKeyManager<OptionsInterface>(this._component._options)\n .withTypeAhead(this._component.typeaheadDebounceInterval)\n .withVerticalOrientation()\n .withHorizontalOrientation(this._component.isRtl() ? 'rtl' : 'ltr')\n .withAllowedModifierKeys(['shiftKey']);\n\n this._keyManager.tabOut.pipe(takeUntilDestroyed(this._component._destroy)).subscribe(() => {\n // tab focus fix for mobile\n if (!this._isMobile()) {\n this._component.focus();\n this._component.close(false, true);\n }\n });\n\n this._keyManager.change.pipe(takeUntilDestroyed(this._component._destroy)).subscribe(() => {\n if (this._component._isOpen && this._component._optionPanel) {\n this._scrollActiveOptionIntoView();\n } else if (!this._component._isOpen && this._keyManager.activeItem) {\n this._keyManager.activeItem._selectViaInteraction();\n }\n });\n }\n\n /** @hidden */\n _scrollActiveOptionIntoView(): void {\n const activeOptionIndex = this._keyManager.activeItemIndex || 0;\n this._component._optionPanel.nativeElement.parentElement.scrollTop = this._component._getOptionScrollPosition(\n activeOptionIndex,\n this._component._getItemHeight(),\n this._component._optionPanel.nativeElement.scrollTop\n );\n }\n\n /**\n * Handles keyboard events while the select is closed.\n * @hidden\n */\n _handleClosedKeydown(event: KeyboardEvent): void {\n const isOpenKey = KeyUtil.isKeyCode(event, [ENTER, SPACE]);\n const manager = this._keyManager;\n\n // Open the select on ALT + arrow key to match the native <select>\n if (!manager.isTyping() && isOpenKey && !hasModifierKey(event)) {\n // prevents the page from scrolling down when pressing space\n event.preventDefault();\n this._component.open();\n } else {\n const previouslySelectedOption = this._component.selected;\n\n if (KeyUtil.isKeyCode(event, [HOME, END])) {\n if (KeyUtil.isKeyCode(event, HOME)) {\n manager.setFirstItemActive();\n } else {\n manager.setLastItemActive();\n }\n event.preventDefault();\n }\n\n const selectedOption = this._component.selected;\n\n // a11y Since the value has changed, we need to announce it.\n if (selectedOption && previouslySelectedOption !== selectedOption) {\n this._component._liveAnnouncer.announce((selectedOption as OptionsInterface).viewValue, 10000);\n }\n manager.onKeydown(event);\n }\n }\n\n /**\n * Handles keyboard events when the selected is open.\n *\n * @hidden\n */\n _handleOpenKeydown(event: KeyboardEvent): void {\n const manager = this._keyManager;\n const isArrowKey = KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW]);\n const isTyping = manager.isTyping();\n\n if (KeyUtil.isKeyCode(event, [HOME, END])) {\n event.preventDefault();\n if (KeyUtil.isKeyCode(event, HOME)) {\n manager.setFirstItemActive();\n } else {\n manager.setLastItemActive();\n }\n } else if ((isArrowKey && event.altKey) || KeyUtil.isKeyCode(event, [ESCAPE])) {\n // Close the select on ALT + arrow key to match the native <select>\n event.preventDefault();\n this._component.blur();\n this._component.close();\n // When user is typing do nothing,\n // because the typing sequence can include the space key.\n } else if (\n !isTyping &&\n KeyUtil.isKeyCode(event, [ENTER, SPACE]) &&\n manager.activeItem &&\n !hasModifierKey(event)\n ) {\n event.preventDefault();\n manager.activeItem._selectViaInteraction();\n this._component.blur();\n } else if (!isTyping && KeyUtil.isKeyCode(event, [TAB])) {\n if (this._isMobile()) {\n event.preventDefault();\n }\n } else {\n manager.onKeydown(event);\n }\n }\n\n /**\n * Checks if the component is in mobile mode.\n * @hidden\n */\n private _isMobile(): boolean {\n return typeof this._component.mobile === 'function' ? this._component.mobile() : this._component.mobile;\n }\n}\n","import { DestroyRef, ElementRef, EventEmitter, InjectionToken, QueryList, Signal } from '@angular/core';\n\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { MobileMode, MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { OptionComponent } from './option/option.component';\n\nexport const SELECT_COMPONENT = new InjectionToken<SelectInterface>('SelectInterface');\n\n/**\n * Select Interface to have typing and avoid circular dependency between\n * SelectComponent <==> SelectMobileComponent\n */\nexport interface SelectInterface<TOption = any> extends MobileMode {\n typeaheadDebounceInterval: number;\n /** Whether the component is in RTL mode */\n isRtl: Signal<boolean>;\n selected: OptionComponent;\n mobileConfig: MobileModeConfig;\n _options: QueryList<TOption>;\n _destroy: DestroyRef;\n _optionPanel: ElementRef;\n _isOpen: boolean;\n _calculatedMaxHeight: number;\n _liveAnnouncer: LiveAnnouncer;\n\n isOpenChange: EventEmitter<boolean>;\n valueChange: EventEmitter<any>;\n\n close(forceClose?: boolean, tabOut?: boolean): void;\n open(): void;\n focus(): void;\n blur(): void;\n _getItemHeight(): number;\n _getOptionScrollPosition(optionIndex: number, optionHeight: number, currentScrollPosition: number): void;\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n HostListener,\n Inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { ESCAPE } from '@angular/cdk/keycodes';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport {\n DialogBodyComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { SELECT_COMPONENT, SelectInterface } from '../select.interface';\n\n/**\n * This component provides extended mobile support for Select component to render list of option since full screen\n * dialog.\n */\n@Component({\n selector: 'fd-select-mobile',\n templateUrl: './select-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DynamicComponentService],\n imports: [\n ButtonBarComponent,\n TitleComponent,\n TitleComponent,\n NgTemplateOutlet,\n ButtonBarComponent,\n DialogComponent,\n DialogHeaderComponent,\n DialogFooterComponent,\n DialogBodyComponent,\n DialogCloseButtonComponent\n ]\n})\nexport class SelectMobileComponent extends MobileModeBase<SelectInterface> implements OnInit, AfterViewInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate')\n _dialogTemplate: TemplateRef<any>;\n\n /**\n * @hidden\n * from mobile class can not prefix _,\n * to avoid build issues\n */\n childContent: TemplateRef<any> | null = null;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(@Inject(SELECT_COMPONENT) _selectComponent: SelectInterface) {\n super(_selectComponent, MobileModeControl.SELECT);\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n onItemKeydown(event: KeyboardEvent): void {\n if (event && KeyUtil.isKeyCode(event, [ESCAPE])) {\n this._component.close(true);\n }\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._listenOnSelectOpenChange();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._openDialog();\n this.dialogRef.hide(true);\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this.dialogRef.close();\n this._subscriptions.unsubscribe();\n }\n\n /**\n * Only when we have Approve.\n * @hidden\n */\n _cancel(): void {\n this._component.close(true);\n }\n\n /** @hidden */\n _approve(): void {\n this._component.close(true);\n }\n\n /** @hidden Hide/Show the Dialog when Select Open/Close*/\n private _listenOnSelectOpenChange(): void {\n this._subscriptions.add(\n this._component.isOpenChange.subscribe((isOpen) => {\n this._elementRef.nativeElement.blur();\n this.dialogRef.hide(!isOpen);\n })\n );\n }\n\n /** @hidden */\n private _openDialog(): void {\n this.dialogRef = this._dialogService.open(this._dialogTemplate, {\n ...this.dialogConfig,\n mobile: true,\n disablePaddings: true,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n ariaLabelledBy: 'fd-dialog-header'\n });\n }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog tabindex=\"-1\" [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n @if (mobileConfig.title) {\n <h1 id=\"fd-dialog-header\" fd-title>{{ mobileConfig.title }}</h1>\n }\n @if (mobileConfig.hasCloseButton) {\n <button\n role=\"button\"\n aria-label=\"close\"\n fd-dialog-close-button\n [mobile]=\"true\"\n (click)=\"_cancel()\"\n ></button>\n }\n </fd-dialog-header>\n <fd-dialog-body>\n <ng-template [ngTemplateOutlet]=\"childContent\"></ng-template>\n </fd-dialog-body>\n @if (mobileConfig.approveButtonText || mobileConfig.cancelButtonText) {\n <fd-dialog-footer>\n @if (mobileConfig.approveButtonText) {\n <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"_approve()\">\n </fd-button-bar>\n }\n @if (mobileConfig.cancelButtonText) {\n <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"_cancel()\"> </fd-button-bar>\n }\n </fd-dialog-footer>\n }\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { DynamicComponentService } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { SelectMobileComponent } from './select-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [DialogModule, ButtonComponent, SelectMobileComponent],\n exports: [SelectMobileComponent],\n providers: [DynamicComponentService]\n})\nexport class SelectMobileModule {}\n","import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { CdkConnectedOverlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport {\n AfterContentInit,\n AfterViewInit,\n Attribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation,\n computed,\n inject,\n isDevMode\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { Observable, Subscription, defer, merge } from 'rxjs';\nimport { startWith, switchMap, takeUntil } from 'rxjs/operators';\n\nimport {\n DynamicComponentService,\n KeyUtil,\n ModuleDeprecation,\n Nullable,\n RtlService,\n destroyObservable\n} from '@fundamental-ngx/cdk/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\n\nimport { ENTER, ESCAPE, SPACE } from '@angular/cdk/keycodes';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormFieldAdvancedStateMessage, FormStates, SingleDropdownValueControl } from '@fundamental-ngx/cdk/forms';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent, IconFont } from '@fundamental-ngx/core/icon';\nimport { ListComponent, ListMessageDirective, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { FdOptionSelectionChange, OptionComponent } from './option/option.component';\nimport { SelectKeyManagerService } from './select-key-manager.service';\nimport { SelectMobileComponent } from './select-mobile/select-mobile.component';\nimport { SELECT_COMPONENT, SelectInterface } from './select.interface';\n\nlet selectUniqueId = 0;\n\nconst SELECT_HEADER_IDENTIFIER = '.fd-list__group-header';\n\nexport const SELECT_PANEL_MAX_HEIGHT = 250;\n\n/** The height of the select items in `rem` units. */\nexport const SELECT_ITEM_HEIGHT_EM = 4;\n\nexport type TextOverflowMode = 'full' | 'ellipsis';\n\nexport enum TextOverflowModeEnum {\n FULL = 'full',\n ELLIPSIS = 'ellipsis'\n}\n\n/**\n * Select component intended to mimic\n * the behaviour of the native select element.\n */\n@Component({\n selector: 'fd-select',\n templateUrl: './select.component.html',\n styleUrl: './select.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fd-select',\n '[class.fd-select--inline]': 'inline',\n // @deprecated leaving class fd-select-custom-class for backwards compatibility\n '[class.fd-select-custom-class]': 'inline',\n // @deprecated leaving class fd-select-custom-class--mobile for backwards compatibility\n '[class.fd-select-custom-class--mobile]': 'mobile'\n },\n providers: [\n {\n provide: SELECT_COMPONENT,\n useExisting: SelectComponent\n },\n registerFormItemControl(SelectComponent),\n SelectKeyManagerService,\n contentDensityObserverProviders()\n ],\n imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n NgClass,\n IconComponent,\n ListComponent,\n ListMessageDirective,\n FdTranslatePipe,\n ButtonComponent,\n ListTitleDirective\n ]\n})\nexport class SelectComponent<T = any>\n implements\n SingleDropdownValueControl,\n ControlValueAccessor,\n SelectInterface,\n OnInit,\n AfterViewInit,\n AfterContentInit,\n OnChanges,\n OnDestroy,\n FormItemControl\n{\n /** @deprecated\n * it is handled internally by controlTemplate != null|undefined is\n * Equal as extendedBodyTemplate as true.\n * Whether option components contain more than basic text. */\n @Input()\n set extendedBodyTemplate(value: boolean) {\n this._extendedBodyTemplate = value;\n }\n\n get extendedBodyTemplate(): boolean {\n return this._extendedBodyTemplate;\n }\n\n /** Scrolling strategy to be used for popover. */\n @Input()\n scrollStrategy: ScrollStrategy;\n\n /**\n * Controls how long text is displayed in the dropdown list of the Select component.\n *\n * - `'ellipsis'`: Truncates the text with an ellipsis (`...`) if it exceeds a certain length.\n * - `'full'`: Displays the entire text on multiple lines, ensuring full visibility.\n */\n @Input()\n textOverflow: TextOverflowMode = 'ellipsis';\n\n /** The ID of the control. */\n @Input()\n controlId = `fd-select-${selectUniqueId++}`;\n\n /** Holds the control state of select */\n @Input()\n state: Nullable<FormStates>;\n\n /** Whether the select component should be displayed in mobile mode. */\n @Input()\n mobile = false;\n\n /** Holds the message with respect to state */\n @Input()\n stateMessage: Nullable<string>;\n\n /** Whether the select component is disabled. */\n @Input()\n disabled = false;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Whether the select component is readonly. */\n @Input()\n readonly = false;\n\n /** Placeholder for the select. Appears in the triggerbox if no option is selected. */\n @Input()\n placeholder: string;\n\n /** Value of the select control. */\n @Input()\n set value(newValue: any) {\n if (newValue !== this._internalValue) {\n this.writeValue(newValue);\n this._internalValue = newValue;\n }\n }\n get value(): any {\n return this._internalValue;\n }\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight: string;\n\n /** Glyph to add icon in the select component. */\n @Input()\n glyph = 'slim-arrow-down';\n\n /** Glyph font family */\n @Input()\n glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n /** Whether close the popover on outside click. */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n @Input()\n fillControlMode: PopoverFillMode = 'at-least';\n\n /** Custom template used to build control body. */\n @Input()\n controlTemplate: TemplateRef<any> | undefined;\n\n /** The element to which the popover should be appended. */\n @Input()\n appendTo: ElementRef;\n\n /**\n * If the option should be unselected and value changed to undefined, when the current value is\n * not presented in option array. Switching it off can be handy, when there is some delay between providing\n * possible options and chosen value.\n */\n @Input()\n unselectMissingOption = true;\n\n /** Time to wait in milliseconds after the last keydown before focusing or selecting option based on alphanumeric keys. */\n @Input()\n typeaheadDebounceInterval = 250;\n\n /** Binds to control aria-labelledBy attribute */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** Sets control aria-label attribute value */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Select Input Mobile Configuration */\n @Input()\n mobileConfig: MobileModeConfig = { hasCloseButton: true };\n\n /** Should select be inlined. */\n @Input()\n inline = true;\n\n /** Additional classname for the select control element. */\n @Input()\n selectControlClass: Nullable<string>;\n\n /** Additional classname for the select dropdown button element. */\n @Input()\n selectDropdownButtonClass: Nullable<string>;\n\n /** Holds advanced message renderer with respect to state. */\n @Input()\n advancedStateMessage: Nullable<FormFieldAdvancedStateMessage>;\n\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n @Input()\n tabOutStrategy: 'close' | 'closeAndSelect' = 'close';\n\n /** Event emitted when the popover open state changes. */\n @Output()\n readonly isOpenChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the selected value of the select changes. */\n @Output()\n readonly valueChange = new EventEmitter<T>();\n\n /** @hidden */\n @ContentChildren(OptionComponent, { descendants: true })\n _options: QueryList<OptionComponent>;\n\n /** @hidden */\n @ViewChild('selectControl')\n _controlElementRef: ElementRef<HTMLDivElement>;\n\n /** Reference to element containing list of options */\n @ViewChild('selectOptionsListTemplate')\n selectOptionsListTemplate: TemplateRef<any>;\n\n /** @hidden\n * Reference to root element for the mobile mode dialog */\n @ViewChild('dialogContainer')\n _dialogContainerElementRef: ElementRef;\n\n /**\n * Overlay pane containing the options.\n * @hidden\n */\n @ViewChild(CdkConnectedOverlay)\n _overlayDir: CdkConnectedOverlay;\n\n /** @hidden\n * Referent to the option;s container\n */\n @ViewChild('optionPanel', { read: ElementRef })\n _optionPanel: ElementRef;\n\n /** Whether popover is opened\n * @hidden\n */\n _isOpen = false;\n\n /** @hidden */\n _tabIndex: number;\n\n /** @hidden */\n _liveAnnouncer: LiveAnnouncer;\n\n /** @hidden */\n _internalValue: any;\n\n /** @hidden */\n _calculatedMaxHeight: number;\n\n /** @hidden */\n _selectionModel: SelectionModel<OptionComponent>;\n\n /** @hidden */\n get showEllipsis(): boolean {\n return this.textOverflow === TextOverflowModeEnum.ELLIPSIS;\n }\n\n /**\n * @hidden\n * Triggers when component is destroyed\n */\n readonly _destroy = inject(DestroyRef);\n\n /** @hidden */\n get _selectControlClass(): string {\n return [this.state ? `is-${this.state}` : '', this.selectControlClass]\n .filter((className) => !!className)\n .join(' ');\n }\n\n /**\n * @hidden\n * Combined stream of all of the child options' change events.\n */\n readonly _optionSelectionChanges: Observable<FdOptionSelectionChange> = defer(() => {\n const _options = this._options;\n\n return _options?.changes.pipe(\n startWith(_options),\n switchMap(() => merge(..._options.map((option) => option.selectionChange)))\n );\n });\n\n /** Selected option. */\n get selected(): OptionComponent {\n return this._selectionModel.selected[0];\n }\n\n /** Retrieves selected value if any. */\n get triggerValue(): string {\n const emptyValue = ' ';\n if (this._selectionModel.isEmpty()) {\n return this.placeholder || emptyValue;\n }\n return this.selected.viewValue || this.placeholder || emptyValue;\n }\n\n /** equal to close\n * Tells the OptionList if it's closable by simply selecting the item either with CLICK | SPACE | ENTER.\n * When we are in mobile mode (mobile=true) and have we have enabled confirmation buttons then we\n * dont close option list. We close only after we hit confirm button.\n */\n get canClose(): boolean {\n return !(this.mobile && this.mobileConfig.approveButtonText);\n }\n\n /** Whether control can be interacted with */\n get isInteractive(): boolean {\n return !(this.readonly || this.disabled);\n }\n\n /**\n * Check if we can emit a value. They are 3 different paths where we can emit value:\n * - We are not in mobile mode [mobile]=false\n * - We are in mobile mode [mobile]=true and mobile dialog as just close X button to dismiss it\n * - We are in mobile mode [mobile]=true and mobile dialog has ApproveButton available and\n * dialog is closed. (meaning we already clicked this button)\n */\n get canEmitValueChange(): boolean {\n return (\n !this.mobile ||\n (this.mobile &&\n // Approve + Cancel\n !!this.mobileConfig.approveButtonText &&\n !this._isOpen) ||\n // CloseButton. Emits when you click on the option item\n (!!this.mobileConfig.hasCloseButton && !!this.mobileConfig.approveButtonText === false)\n );\n }\n\n /** Function to compare the option values with the selected values. */\n @Input()\n set compareWith(fn: (o1: any, o2: any) => boolean) {\n if (typeof fn !== 'function') {\n throw Error('compareWith` must be a function.');\n }\n this._compareWith = fn;\n if (this._selectionModel) {\n // A different comparator means the selection could change.\n this._initializeSelection();\n }\n }\n\n get compareWith(): (o1: any, o2: any) => boolean {\n return this._compareWith;\n }\n\n /** @hidden */\n get focused(): boolean {\n return this._focused || this._isOpen;\n }\n\n /** @hidden */\n get calculatedMaxHeight(): number {\n return this._maxHeight || this._calculatedMaxHeight;\n }\n /** Whether the component is in RTL mode */\n readonly isRtl = computed(() => this._rtlService?.rtl() ?? false);\n\n private readonly _rtlService = inject(RtlService, {\n optional: true\n });\n\n /** @hidden */\n private _extendedBodyTemplate = false;\n\n /** @hidden */\n private _controlElemFontSize = 0;\n\n /** @hidden */\n private _focused = false;\n\n /**\n * @hidden\n * Stored calculated maxHeight from Option Panel\n */\n private _maxHeight: number;\n\n /** @hidden */\n private _subscriptions: Subscription = new Subscription();\n\n /** @hidden */\n constructor(\n @Attribute('tabindex') _tabIndex: string,\n private readonly _keyManagerService: SelectKeyManagerService,\n private readonly _changeDetectorRef: ChangeDetectorRef,\n private readonly _viewContainerRef: ViewContainerRef,\n @Optional() private readonly _dynamicComponentService: DynamicComponentService,\n @Optional() @Self() private readonly ngControl: NgControl,\n @Optional() private readonly _injector: Injector,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n this._tabIndex = parseInt(_tabIndex, 10) || 0;\n }\n\n /** @hidden */\n @HostListener('window:resize')\n _resizeScrollHandler(): void {\n this._updateCalculatedHeight();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n _handleKeydown(event: KeyboardEvent): void {\n if (!this.disabled && !this.readonly) {\n this._isOpen\n ? this._keyManagerService._handleOpenKeydown(event)\n : this._keyManagerService._handleClosedKeydown(event);\n }\n if (KeyUtil.isKeyCode(event, [ESCAPE, ENTER, SPACE])) {\n this._controlElementRef.nativeElement.focus();\n }\n }\n\n /** Toggles the open state of the select. */\n @HostListener('click')\n toggle(): void {\n this._isOpen ? this.close() : this.open();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._tabIndex = this.disabled ? -1 : 0;\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n _compareWith = (o1: any, o2: any): boolean => o1 === o2;\n\n /** @hidden */\n ngOnInit(): void {\n this._initializeCommonBehavior();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._keyManagerService._initKeyManager();\n this._setupMobileMode();\n }\n\n /** @hidden */\n ngAfterContentInit(): void {\n this._registerEventsAfterContentInit();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['typeaheadDebounceInterval'] && this._keyManagerService._keyManager) {\n this._keyManagerService._keyManager.withTypeAhead(this.typeaheadDebounceInterval);\n } else if (changes['disabled']) {\n this._tabIndex = this.disabled ? -1 : 0;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** Opens the select popover body. */\n open(): void {\n if (this.disabled || this.readonly || !this._options || !this._getItemCount() || this._isOpen) {\n return;\n }\n this._isOpen = true;\n\n this._controlElemFontSize = parseInt(\n getComputedStyle(this._controlElementRef.nativeElement).fontSize || '0',\n 10\n );\n\n this._keyManagerService._keyManager.withHorizontalOrientation(null);\n this._highlightCorrectOption();\n this._changeDetectorRef.markForCheck();\n this._controlElementRef.nativeElement.focus();\n this.isOpenChange.emit(true);\n }\n\n /** @hidden */\n close(forceClose = false, tabOut = false): void {\n if (this._isOpen || forceClose) {\n if (tabOut && this.tabOutStrategy === 'closeAndSelect') {\n this._keyManagerService._keyManager.activeItem?._selectViaInteraction();\n }\n this._isOpen = false;\n this._keyManagerService._keyManager.withHorizontalOrientation(this.isRtl() ? 'rtl' : 'ltr');\n this._changeDetectorRef.markForCheck();\n this.onTouched();\n\n this.isOpenChange.emit(false);\n }\n }\n\n /** Focuses select control. */\n focus(): void {\n (this._controlElementRef?.nativeElement as HTMLElement).focus();\n }\n\n /** Blurs select control. */\n blur(): void {\n (this._controlElementRef?.nativeElement as HTMLElement).blur();\n }\n\n /** @hidden */\n registerOnChange(fn: (value: any) => void): void {\n this.onChange = fn;\n }\n\n /** @hidden */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @hidden from ControlValue Accessor */\n writeValue(value: any): void {\n if (this._options) {\n this._setSelectionByValue(value);\n }\n }\n\n /** @hidden */\n _setSelectionByValue(value: any | any[]): void {\n this._selectionModel.clear();\n const correspondingOption = this._selectValue(value);\n\n // Shift focus to the active item. Note that we shouldn't do this in multiple\n // mode, because we don't know what option the user interacted with last.\n if (correspondingOption) {\n this._keyManagerService._keyManager.setActiveItem(correspondingOption);\n } else if (!this._isOpen) {\n // Otherwise reset the highlighted option. Note that we only want to do this while\n // closed, because doing it while open can shift the user's focus unnecessarily.\n this._keyManagerService._keyManager.setActiveItem(-1);\n }\n\n this._changeDetectorRef.markForCheck();\n }\n\n /** @hidden */\n _selectValue(value: any): OptionComponent | undefined {\n const correspondingOption = this._options.find((option: OptionComponent) => {\n try {\n // Treat null as a special reset value.\n return option.value != null && this._compareWith(option.value, value);\n } catch (error) {\n if (isDevMode()) {\n // Notify developers of errors in their comparator.\n console.warn(error);\n }\n return false;\n }\n });\n\n if (correspondingOption) {\n this._selectionModel.select(correspondingOption);\n }\n\n return correspondingOption;\n }\n\n /** @hidden */\n _popoverOpenChangeHandle(isOpen: boolean): void {\n isOpen ? this.open() : this.close();\n }\n\n /** @hidden Returns _keyManagerService. */\n _getKeyService(): SelectKeyManagerService {\n return this._keyManagerService;\n }\n\n /** @hidden */\n _setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._changeDetectorRef.markForCheck();\n\n this._tabIndex = -1;\n }\n\n /** @hidden */\n _highlightCorrectOption(): void {\n if (this._keyManagerService._keyManager && this._selectionModel.isEmpty()) {\n this._keyManagerService._keyManager.setFirstItemActive();\n } else if (this._keyManagerService._keyManager && !this._selectionModel.isEmpty()) {\n this._keyManagerService._keyManager.setActiveItem(this.selected);\n }\n }\n\n /** @hidden */\n _initializeSelection(): void {\n // Defer setting the value in order to avoid the \"Expression\n // has changed after it was checked\" errors from Angular.\n Promise.resolve().then(() => {\n this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._internalValue);\n });\n }\n\n /**\n * Expose outside of this mixin to give component ability\n * to update caluclatedMaxHeight if needed\n * @hidden\n */\n _updateCalculatedHeight(): void {\n this._calculatedMaxHeight = window.innerHeight * 0.45;\n }\n\n /** @hidden */\n _getOptionScrollPosition(optionIndex: number, itemHeight: number, currentScrollPosition: number): number {\n const optionHeight = this._options.get(optionIndex)?._getHtmlElement().offsetHeight || itemHeight;\n const optionOffset = optionIndex * optionHeight;\n if (optionOffset < currentScrollPosition) {\n return optionOffset;\n }\n\n if (optionOffset + optionHeight > currentScrollPosition + SELECT_PANEL_MAX_HEIGHT) {\n return Math.max(0, optionOffset - SELECT_PANEL_MAX_HEIGHT + optionHeight);\n }\n return currentScrollPosition;\n }\n\n /** @hidden */\n _getItemHeight(): number {\n // also include border with default value 1.\n return this._controlElemFontSize * SELECT_ITEM_HEIGHT_EM + 1;\n }\n\n /** @hidden */\n _initializeCommonBehavior(): void {\n this._selectionModel = new SelectionModel<OptionComponent>(false);\n this._keyManagerService._component = this;\n\n this._updateCalculatedHeight();\n }\n\n /** @hidden */\n _registerEventsAfterContentInit(): void {\n this._selectionModel.changed.pipe(takeUntilDestroyed(this._destroy)).subscribe((event) => {\n event.added.forEach((option) => option._select());\n event.removed.forEach((option) => option._deselect());\n });\n\n this._options.changes.pipe(startWith(null), takeUntilDestroyed(this._destroy)).subscribe(() => {\n this._resetOptions();\n this._initializeSelection();\n });\n }\n\n /** @hidden */\n _getAriaActiveDescendant(): string | null {\n if (this._isOpen && this._keyManagerService._keyManager && this._keyManagerService._keyManager.activeItem) {\n return this._keyManagerService._keyManager.activeItem.id;\n }\n return null;\n }\n\n /** @hidden */\n _onFocus(): void {\n if (!this.disabled) {\n this._focused = true;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n _onBlur(): void {\n this._focused = false;\n\n if (!this.disabled && !this._isOpen) {\n this.onTouched();\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n _buttonClick(): void {}\n\n /** @hidden */\n private _resetOptions(): void {\n const changedOrDestroyed = merge(this._options.changes, destroyObservable(this._destroy));\n\n this._optionSelectionChanges.pipe(takeUntil(changedOrDestroyed)).subscribe((event) => {\n this._onSelect(event.source, event.isUserInput);\n\n if (event.isUserInput && this._isOpen) {\n this.close();\n this.focus();\n }\n });\n\n // Listen to changes in the internal state of the _options and react accordingly.\n // Handles cases like the labels of the selected _options changing.\n merge(...this._options.map((option) => option._stateChanges))\n .pipe(takeUntil(changedOrDestroyed))\n .subscribe(() => {\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * @hidden\n * Invoked when an option is clicked.\n */\n private _onSelect(option: OptionComponent, isUserInput: boolean): void {\n const wasSelected = this._selectionModel.isSelected(option);\n if ((option.value === null || option.value === undefined) && this.unselectMissingOption) {\n option._deselect();\n this._selectionModel.clear();\n this._emitSelectChange(option.value);\n } else {\n if (wasSelected !== option.selected) {\n option.selected ? this._selectionModel.select(option) : this._selectionModel.deselect(option);\n }\n if (isUserInput) {\n this._keyManagerService._keyManager.setActiveItem(option);\n }\n }\n\n if (wasSelected !== this._selectionModel.isSelected(option) || this.mobile) {\n this._emitSelectChange();\n }\n }\n\n /** @hidden */\n private _emitSelectChange(defaultVal?: any): void {\n if (this.canEmitValueChange) {\n this._internalValue =\n this._selectionModel.selected && this._selectionModel.selected.length !== 0\n ? (this.selected as OptionComponent).value\n : defaultVal;\n this.valueChange.emit(this._internalValue);\n this.onChange(this._internalValue);\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /** @hidden */\n private _getItemCount(): number {\n if (this._optionPanel && this._headerElements().length > 0) {\n return this._options.length + this._headerElements().length;\n }\n return this._options.length;\n }\n\n /** @hidden */\n private _headerElements(): NodeListOf<Element> {\n return this._optionPanel?.nativeElement.querySelectorAll(SELECT_HEADER_IDENTIFIER);\n }\n\n /** @hidden */\n private async _setupMobileMode(): Promise<void> {\n if (!this.mobile) {\n return;\n }\n\n const injector = Injector.create({\n providers: [{ provide: SELECT_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n this._dynamicComponentService.createDynamicComponent(\n this.selectOptionsListTemplate,\n SelectMobileComponent,\n {\n containerRef: this._viewContainerRef\n },\n { injector }\n );\n }\n}\n\nexport class DeprecatedSelectCSSClasses implements ModuleDeprecation {\n /** @hidden */\n message = `Select CSS classes fd-select--compact, fd-select--compact--mobile, fd-popover-custom-select-body, fd-popover-custom-list are deprecated`;\n\n /** @hidden */\n alternative = {\n name: 'Inspect the elements of the Select component to see the new classes',\n link: ['/core', 'select']\n };\n}\n","<ng-template [ngTemplateOutlet]=\"mobile ? mobileTemplate : desktopTemplate\"></ng-template>\n<ng-template #desktopTemplate>\n <!-- &#64;deprecated leaving class fd-popover-custom-list to support backwards compatibility-->\n <fd-popover\n additionalBodyClass=\"fd-select-dropdown fd-popover-custom-list\"\n [isOpen]=\"_isOpen\"\n [triggers]=\"[]\"\n [focusTrapped]=\"true\"\n [disabled]=\"disabled || readonly\"\n [appendTo]=\"appendTo\"\n [scrollStrategy]=\"scrollStrategy\"\n [closeOnEscapeKey]=\"true\"\n [fillControlMode]=\"fillControlMode\"\n [maxWidth]=\"fillControlMode !== 'equal' ? 600 : null\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"selectInputControlTemplate\"></ng-template>\n </fd-popover-control>\n <!-- &#64;deprecated leaving class fd-popover-custom-select-body to support backwards compatibility-->\n <fd-popover-body class=\"fd-popover-custom-select-body\">\n <ng-template [ngTemplateOutlet]=\"selectOptionsListTemplate\"></ng-template>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n<ng-template #selectInputControlTemplate>\n <div\n class=\"fd-select__control\"\n #selectControl\n [class]=\"_selectControlClass\"\n [class.is-active]=\"_isOpen\"\n [class.is-expanded]=\"_isOpen\"\n [class.is-disabled]=\"disabled\"\n [class.is-readonly]=\"readonly\"\n [class.is-placeholder]=\"!selected\"\n [attr.tabindex]=\"_tabIndex\"\n [attr.id]=\"controlId\"\n [attr.aria-active]=\"_isOpen\"\n aria-live=\"polite\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-roledescription=\"listbox\"\n [attr.aria-expanded]=\"_isOpen\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-controls]=\"controlId + '-list-box'\"\n [attr.aria-required]=\"required\"\n [attr.title]=\"triggerValue\"\n [attr.aria-label]=\"ariaLabel || ('platformSelect.selectOptionLabel' | fdTranslate)\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-activedescendant]=\"_getAriaActiveDescendant()\"\n (focus)=\"_onFocus()\"\n (blur)=\"_onBlur()\"\n >\n <div class=\"fd-select__text-content\">\n <ng-template\n [ngTemplateOutlet]=\"controlTemplate ? controlTemplate : defaultSelectContent\"\n [ngTemplateOutletContext]=\"{ $implicit: triggerValue, selected: selected }\"\n >\n </ng-template>\n <ng-template #defaultSelectContent>\n {{ triggerValue }}\n </ng-template>\n </div>\n @if (!readonly) {\n <span\n fd-button\n fdType=\"transparent\"\n class=\"fd-select__button\"\n [ngClass]=\"selectDropdownButtonClass\"\n [class.is-disabled]=\"disabled\"\n >\n <fd-icon [ariaHidden]=\"true\" [glyph]=\"glyph\" [font]=\"glyphFont\"></fd-icon>\n </span>\n }\n </div>\n</ng-template>\n<ng-template #selectOptionsListTemplate>\n <ul\n #optionPanel\n fd-list\n class=\"fd-select-options\"\n role=\"listbox\"\n tabindex=\"-1\"\n [mobileMode]=\"mobile\"\n [dropdownMode]=\"true\"\n [hasMessage]=\"!!stateMessage || (!!advancedStateMessage?.hasErrors && !!advancedStateMessage?.template)\"\n [attr.id]=\"controlId + '-list-box'\"\n [style.max-height]=\"maxHeight || calculatedMaxHeight + 'px'\"\n [style.padding-block-start.rem]=\"showEllipsis && stateMessage ? 2 : 0\"\n [attr.tooltip]=\"triggerValue\"\n >\n @if (stateMessage) {\n <li\n [attr.aria-label]=\"stateMessage\"\n fd-list-message\n [class.fd-select-message]=\"!showEllipsis\"\n tabindex=\"-1\"\n role=\"presentation\"\n [type]=\"state || 'default'\"\n >\n @if (!showEllipsis) {\n <span fd-list-title>\n {{ stateMessage }}\n </span>\n } @else {\n <span>\n {{ stateMessage }}\n </span>\n }\n </li>\n }\n @if (advancedStateMessage?.hasErrors && advancedStateMessage?.template) {\n <li fd-list-message tabindex=\"-1\" role=\"presentation\" [type]=\"state || 'default'\">\n <ng-template [ngTemplateOutlet]=\"advancedStateMessage!.template!\"></ng-template>\n </li>\n }\n <ng-content></ng-content>\n </ul>\n</ng-template>\n<ng-template #mobileTemplate>\n <ng-template [ngTemplateOutlet]=\"selectInputControlTemplate\"></ng-template>\n <div #dialogContainer></div>\n</ng-template>\n","import { NgModule } from '@angular/core';\n\nimport { OptionComponent } from './option/option.component';\nimport { SelectComponent } from './select.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n exports: [SelectComponent, OptionComponent],\n imports: [SelectComponent, OptionComponent]\n})\nexport class SelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SelectKeyManagerService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.61.3",
3
+ "version": "0.61.4",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "ng-update": {
6
6
  "migrations": "./schematics/migrations.json"
@@ -23,8 +23,8 @@
23
23
  "@angular/forms": "^21.0.0",
24
24
  "@angular/platform-browser": "^21.0.0",
25
25
  "@angular/router": "^21.0.0",
26
- "@fundamental-ngx/cdk": "0.61.3",
27
- "@fundamental-ngx/i18n": "0.61.3",
26
+ "@fundamental-ngx/cdk": "0.61.4",
27
+ "@fundamental-ngx/i18n": "0.61.4",
28
28
  "@sap-theming/theming-base-content": "^11.32.0",
29
29
  "fundamental-styles": "0.40.1",
30
30
  "rxjs": "^7.8.0"
@@ -15,9 +15,13 @@ interface MobileModeConfig {
15
15
  dialogConfig?: DialogConfig;
16
16
  }
17
17
 
18
+ /**
19
+ * Base interface for mobile mode support.
20
+ * Supports both plain properties and signal-based (function) access patterns.
21
+ */
18
22
  interface MobileMode {
19
- mobile: boolean;
20
- mobileConfig: MobileModeConfig;
23
+ readonly mobile: boolean | (() => boolean);
24
+ readonly mobileConfig: MobileModeConfig | (() => MobileModeConfig);
21
25
  }
22
26
 
23
27
  declare const MOBILE_MODE_CONFIG: InjectionToken<MobileModeConfigToken>;
@@ -183,6 +183,11 @@ declare class SelectKeyManagerService {
183
183
  * @hidden
184
184
  */
185
185
  _handleOpenKeydown(event: KeyboardEvent): void;
186
+ /**
187
+ * Checks if the component is in mobile mode.
188
+ * @hidden
189
+ */
190
+ private _isMobile;
186
191
  static ɵfac: i0.ɵɵFactoryDeclaration<SelectKeyManagerService, never>;
187
192
  static ɵprov: i0.ɵɵInjectableDeclaration<SelectKeyManagerService>;
188
193
  }