@fundamental-ngx/core 0.35.4-rc.9 → 0.35.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.
Files changed (135) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/esm2020/breadcrumb.component.mjs +3 -3
  8. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  9. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  10. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  11. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  12. package/breadcrumb/package.json +1 -1
  13. package/busy-indicator/package.json +1 -1
  14. package/button/package.json +1 -1
  15. package/calendar/package.json +1 -1
  16. package/card/package.json +1 -1
  17. package/carousel/package.json +1 -1
  18. package/checkbox/package.json +1 -1
  19. package/combobox/esm2020/combobox.component.mjs +7 -2
  20. package/combobox/fesm2015/fundamental-ngx-core-combobox.mjs +6 -1
  21. package/combobox/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  22. package/combobox/fesm2020/fundamental-ngx-core-combobox.mjs +6 -1
  23. package/combobox/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  24. package/combobox/package.json +1 -1
  25. package/content-density/package.json +3 -3
  26. package/date-picker/package.json +1 -1
  27. package/datetime/package.json +1 -1
  28. package/datetime-picker/package.json +1 -1
  29. package/dialog/package.json +1 -1
  30. package/dynamic-page/package.json +1 -1
  31. package/dynamic-side-content/package.json +1 -1
  32. package/esm2020/breadcrumb/breadcrumb.component.mjs +3 -3
  33. package/esm2020/combobox/combobox.component.mjs +7 -2
  34. package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +2 -1
  35. package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +1 -1
  36. package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
  37. package/esm2020/overflow-layout/overflow-layout.component.mjs +4 -3
  38. package/esm2020/overflow-layout/overflow-layout.service.mjs +12 -10
  39. package/facets/package.json +1 -1
  40. package/feed-input/package.json +1 -1
  41. package/feed-list-item/package.json +1 -1
  42. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  43. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  44. package/fesm2015/fundamental-ngx-core-combobox.mjs +6 -1
  45. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  46. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +15 -11
  47. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  48. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  49. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  50. package/fesm2020/fundamental-ngx-core-combobox.mjs +6 -1
  51. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  52. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +15 -11
  53. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  54. package/file-uploader/package.json +1 -1
  55. package/fixed-card-layout/package.json +1 -1
  56. package/flexible-column-layout/package.json +1 -1
  57. package/form/package.json +1 -1
  58. package/formatted-text/package.json +1 -1
  59. package/grid-list/package.json +1 -1
  60. package/icon/package.json +1 -1
  61. package/illustrated-message/package.json +1 -1
  62. package/infinite-scroll/package.json +1 -1
  63. package/info-label/package.json +1 -1
  64. package/inline-help/package.json +1 -1
  65. package/input-group/package.json +1 -1
  66. package/layout-grid/package.json +1 -1
  67. package/layout-panel/package.json +1 -1
  68. package/link/package.json +1 -1
  69. package/list/package.json +1 -1
  70. package/menu/package.json +1 -1
  71. package/message-box/package.json +1 -1
  72. package/message-strip/package.json +1 -1
  73. package/message-toast/package.json +1 -1
  74. package/micro-process-flow/package.json +1 -1
  75. package/mobile-mode/package.json +1 -1
  76. package/multi-input/package.json +1 -1
  77. package/nested-list/package.json +1 -1
  78. package/notification/package.json +1 -1
  79. package/object-identifier/package.json +1 -1
  80. package/object-marker/package.json +1 -1
  81. package/object-number/package.json +1 -1
  82. package/object-status/package.json +1 -1
  83. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +5 -2
  84. package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +2 -1
  85. package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +1 -1
  86. package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
  87. package/overflow-layout/esm2020/overflow-layout.component.mjs +4 -3
  88. package/overflow-layout/esm2020/overflow-layout.service.mjs +12 -10
  89. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +15 -11
  90. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  91. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +15 -11
  92. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  93. package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +4 -1
  94. package/overflow-layout/interfaces/overflow-item.interface.d.ts +3 -0
  95. package/overflow-layout/overflow-layout.service.d.ts +1 -0
  96. package/overflow-layout/package.json +13 -13
  97. package/package.json +1 -1
  98. package/pagination/package.json +1 -1
  99. package/panel/package.json +1 -1
  100. package/popover/package.json +1 -1
  101. package/product-switch/package.json +1 -1
  102. package/progress-indicator/package.json +1 -1
  103. package/quick-view/package.json +1 -1
  104. package/radio/package.json +1 -1
  105. package/rating-indicator/package.json +1 -1
  106. package/resizable-card-layout/package.json +1 -1
  107. package/scroll-spy/package.json +1 -1
  108. package/scrollbar/package.json +1 -1
  109. package/segmented-button/package.json +1 -1
  110. package/select/package.json +1 -1
  111. package/shared/package.json +1 -1
  112. package/shellbar/package.json +1 -1
  113. package/side-navigation/package.json +1 -1
  114. package/slider/package.json +1 -1
  115. package/split-button/package.json +1 -1
  116. package/splitter/package.json +1 -1
  117. package/status-indicator/package.json +1 -1
  118. package/step-input/package.json +1 -1
  119. package/switch/package.json +1 -1
  120. package/table/package.json +1 -1
  121. package/tabs/package.json +1 -1
  122. package/text/package.json +1 -1
  123. package/theming/package.json +1 -1
  124. package/tile/package.json +1 -1
  125. package/time/package.json +1 -1
  126. package/time-picker/package.json +1 -1
  127. package/timeline/package.json +1 -1
  128. package/title/package.json +1 -1
  129. package/token/package.json +1 -1
  130. package/toolbar/package.json +1 -1
  131. package/tree/package.json +1 -1
  132. package/upload-collection/package.json +1 -1
  133. package/utils/package.json +1 -1
  134. package/vertical-navigation/package.json +1 -1
  135. package/wizard/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../../../../libs/core/src/lib/combobox/combobox.interface.ts","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.component.ts","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.component.html","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.module.ts","../../../../libs/core/src/lib/combobox/list-group.pipe.ts","../../../../libs/core/src/lib/combobox/combobox.component.ts","../../../../libs/core/src/lib/combobox/combobox.component.html","../../../../libs/core/src/lib/combobox/deprecated-combobox-content-density.directive.ts","../../../../libs/core/src/lib/combobox/combobox.module.ts","../../../../libs/core/src/lib/combobox/fundamental-ngx-core-combobox.ts"],"sourcesContent":["import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: EventEmitter<boolean>;\n\n getValue(): any;\n dialogApprove(): void;\n dialogDismiss(backup: string): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n isDevMode,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { observeOn, takeUntil } from 'rxjs/operators';\n\nimport { DialogService } from '@fundamental-ngx/core/dialog';\nimport {\n MOBILE_MODE_CONFIG,\n MobileModeBase,\n MobileModeConfigToken,\n MobileModeControl\n} from '@fundamental-ngx/core/mobile-mode';\n\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\nimport { asyncScheduler } from 'rxjs';\n\n@Component({\n selector: 'fd-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: { listTemplate: TemplateRef<any>; controlTemplate: TemplateRef<any> } | null = null;\n\n /** @hidden */\n private _selectedBackup: string;\n\n constructor(\n elementRef: ElementRef,\n dialogService: DialogService,\n @Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface,\n @Optional() @Inject(MOBILE_MODE_CONFIG) mobileModes: MobileModeConfigToken[]\n ) {\n super(elementRef, dialogService, comboboxComponent, MobileModeControl.COMBOBOX, mobileModes);\n }\n\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.onDestroy();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n private _toggleDialog(open: boolean): void {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange.pipe(takeUntil(this._onDestroy$)).subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n verticalPadding: false,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement\n });\n\n this._focusInputElementOnceOpened();\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n\n /** @hidden */\n private _focusInputElementOnceOpened(): void {\n this.dialogRef.afterLoaded\n .pipe(\n observeOn(asyncScheduler), // making the listener async\n takeUntil(this._onDestroy$)\n )\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n}\n","<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig?.title }}</h1>\n <button\n title=\"Close\"\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ComboboxMobileComponent } from './combobox-mobile.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [ComboboxMobileComponent],\n imports: [BarModule, DialogModule, ButtonModule, CommonModule],\n entryComponents: [ComboboxMobileComponent],\n exports: [ComboboxMobileComponent]\n})\nexport class ComboboxMobileModule {}\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nexport type GroupFunction<T = any> = (items: T[]) => { [key: string]: T[] };\n\n@Pipe({\n name: 'listGroupPipe'\n})\nexport class ListGroupPipe<T = any> implements PipeTransform {\n transform(items: any[], group: GroupFunction<T>): KeyValue<string, T[]>[] {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport { Subscription } from 'rxjs';\n\nimport { ListComponent, ListMessageDirective } from '@fundamental-ngx/core/list';\nimport { AutoCompleteEvent, DynamicComponentService, FocusEscapeDirection, KeyUtil } from '@fundamental-ngx/core/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { FormStates, Nullable, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { InputGroupComponent } from '@fundamental-ngx/core/input-group';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\n\nimport { ComboboxMobileModule } from './combobox-mobile/combobox-mobile.module';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from './combobox.interface';\nimport { ComboboxItem } from './combobox-item';\nimport { GroupFunction } from './list-group.pipe';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\nlet comboboxUniqueId = 0;\n\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\n@Component({\n selector: 'fd-combobox',\n templateUrl: './combobox.component.html',\n styleUrls: ['./combobox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n contentDensityObserverProviders()\n ],\n host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ComboboxComponent\n implements ComboboxInterface, ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy, FormItemControl\n{\n /** Id for the Combobox. */\n @Input()\n comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n\n /** Id attribute for input element inside Combobox component */\n @Input()\n inputId = '';\n\n /** Aria-label for Combobox. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Aria-Labelledby for element describing Combobox. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Values to be filtered in the search input. */\n @Input()\n dropdownValues: any[] = [];\n\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n @Input()\n filterFn = this._defaultFilter;\n\n /** Whether the search input is disabled. **/\n @Input()\n disabled: boolean;\n\n /** Placeholder of the search input. **/\n @Input()\n placeholder: string;\n\n /**\n * Whether the Combobox is a Search Field\n */\n @Input()\n isSearch = false;\n\n /** Icon to display in the right-side button. */\n @Input()\n glyph = 'navigation-down-arrow';\n\n /**\n * Whether to show the clear search term button when the Combobox is a Search Field\n */\n @Input()\n showClearButton = true;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n @Input()\n openOnKeyboardEvent = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * The template with which to display the individual listed items.\n * Use it by passing an ng-template with implicit content. See examples for more info.\n */\n @Input()\n itemTemplate: TemplateRef<any>;\n\n /**\n * Function used to handle grouping of items.\n */\n @Input()\n groupFn: GroupFunction;\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight = '50vh';\n\n /** Search function to execute when the Enter key is pressed on the main input. */\n @Input()\n searchFn: () => void;\n\n /** Whether the matching string should be highlighted during filtration. */\n @Input()\n highlighting = true;\n\n /** Whether the matching string should be highlighted after combobox value is selected. */\n filterHighlight = true;\n\n /** Whether the popover should close when a user selects a result. */\n @Input()\n closeOnSelect = true;\n\n /** Whether the input field should be populated with the result picked by the user. */\n @Input()\n fillOnSelect = true;\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = 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 /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n @Input()\n communicateByObject = false;\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n @Input()\n displayFn = this._defaultDisplay;\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /** Whether the combobox is readonly. */\n @Input()\n readOnly = false;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether to display the addon button. */\n @Input()\n showDropdownButton = true;\n\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n @Input()\n includes = false;\n\n /**\n * The tooltip for the multi-input icon.\n */\n @Input()\n title: string;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n @Output()\n readonly itemClicked: EventEmitter<ComboboxItem> = new EventEmitter<ComboboxItem>();\n\n /** Event emitted, when the combobox's popover body is opened or closed */\n @Output()\n readonly openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the input text changes. */\n @Output()\n inputTextChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement')\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n popoverComponent: PopoverComponent;\n\n /** @hidden */\n @ViewChild(InputGroupComponent)\n inputGroup: InputGroupComponent;\n\n /** @hidden */\n @ContentChildren(ListMessageDirective)\n listMessages: QueryList<ListMessageDirective>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<HTMLElement>;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n readonly nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n\n /** Keys, that will close popover's body, when dispatched on search input */\n readonly closingKeys: number[] = [ESCAPE];\n\n /** Whether the combobox is opened. */\n open = false;\n\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n inShellbar = false;\n\n /** @hidden */\n displayedValues: any[] = [];\n\n /** @hidden */\n inputTextValue = '';\n\n /** @hidden */\n clearInputBtnFocused = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _value: any;\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n constructor(\n private readonly _cdRef: ChangeDetectorRef,\n private readonly _injector: Injector,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _dynamicComponentService: DynamicComponentService,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._addShellbarClass();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readOnly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, this.closingKeys)) {\n this.isOpenChangeHandle(false);\n event.stopPropagation();\n } else if (\n this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)\n ) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent, value: any): void {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n\n /** @hidden */\n onMenuClickHandler(value: any): void {\n if (value || value === 0) {\n const index: number = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term: any): void {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n\n /** If true value empty */\n get isEmptyValue(): boolean {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n\n /** Get the input text of the input. */\n get inputText(): string {\n return this.inputTextValue;\n }\n\n /** Set the input text of the input. */\n set inputText(value: string) {\n this.inputTextValue = value;\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n this.onTouched();\n }\n\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue(): string {\n return this.isSearch ? 'search' : 'navigation-down-arrow';\n }\n\n /** @hidden */\n _handleClearSearchTerm(): void {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues;\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this.onTouched();\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n writeValue(value: any): void {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\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 /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n handleSearchTermChange(): void {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n if (this.popoverComponent) {\n this.popoverComponent.refreshPosition();\n }\n }\n\n /** @hidden */\n onPrimaryButtonClick(): void {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.onTouched();\n this.openChange.emit(isOpen);\n }\n\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus();\n }\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event: AutoCompleteEvent): void {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n handleBlur(): void {\n if (!this.open) {\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n\n /** @hidden */\n clearInputBtnFocus(): void {\n this.clearInputBtnFocused = true;\n }\n\n /** @hidden */\n clearInputBtnBlur(): void {\n this.clearInputBtnFocused = false;\n }\n\n /** Current select value */\n getValue(): any {\n return this._value;\n }\n\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n private _chooseOtherItem(offset: number): void {\n const activeValue: any = this._getOptionObjectByDisplayedValue(this.inputTextValue);\n const index: number = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n private _resetDisplayedValues(): void {\n this.displayedValues = this.dropdownValues;\n }\n\n /** @hidden */\n private _addShellbarClass(): void {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n\n /** @hidden */\n private _defaultDisplay(str: any): string {\n return str;\n }\n\n /** @hidden */\n private _defaultFilter(contentArray: any[], searchTerm: any): any[] {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n } else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray;\n }\n\n /** @hidden */\n private _handleClickActions(term: any): void {\n if (this.closeOnSelect) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n\n if (this.mobile) {\n this._propagateChange();\n }\n }\n this.handleSearchTermChange();\n }\n\n /** @hidden */\n private _getOptionObjectByDisplayedValue(displayValue: string): any {\n return this.dropdownValues.find((value) => this.displayFn(value) === displayValue);\n }\n\n /** @hidden */\n private _refreshDisplayedValues(): void {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n } else {\n this.displayedValues = this.dropdownValues;\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n this.onChange(this.getValue());\n }\n\n /** @hidden */\n private setValue(value: any): void {\n if (this.communicateByObject) {\n this._value = value;\n } else {\n this._value = this.displayFn(value);\n }\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n await this._dynamicComponentService.createDynamicModule(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileModule,\n ComboboxMobileComponent,\n this._viewContainerRef,\n injector\n );\n }\n\n isSelected(term: any): boolean {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n}\n","<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues?.length\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template let-term=\"term\" #itemSource>\n <span\n fd-list-title\n *ngIf=\"!itemTemplate\"\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText:highlighting && filterHighlight\"\n >\n </span>\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: term }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel\"\n [iconTitle]=\"title\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fd-auto-complete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (focus)=\"onTouched()\"\n (blur)=\"handleBlur()\"\n />\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-input-group__addon--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n *ngIf=\"isSearch && showClearButton && inputText && inputText.length > 0\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"buttonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues?.length || 0 }} result list items\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list fd-combobox-input-menu-overflow\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"groupFn\">\n <ng-container *ngFor=\"let group of displayedValues | listGroupPipe: groupFn\">\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of group.value\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!groupFn\">\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of displayedValues\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container [ngTemplateOutlet]=\"itemSource\" [ngTemplateOutletContext]=\"{ term: term }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n","import { Directive, ElementRef, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-combobox[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedComboboxContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedComboboxContentDensityDirective extends DeprecatedCompactDirective {\n constructor(private elRef: ElementRef) {\n super('fd-combobox');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { FormsModule } from '@angular/forms';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { AutoCompleteModule } from '@fundamental-ngx/core/utils';\n\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { DeprecatedComboboxContentDensityDirective } from './deprecated-combobox-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [ComboboxComponent, ListGroupPipe, DeprecatedComboboxContentDensityDirective],\n imports: [\n CommonModule,\n PopoverModule,\n FormsModule,\n MenuModule,\n PipeModule,\n ButtonModule,\n InputGroupModule,\n ListModule,\n IconModule,\n AutoCompleteModule,\n ContentDensityModule\n ],\n exports: [ComboboxComponent, ListGroupPipe, DeprecatedComboboxContentDensityDirective, ContentDensityModule]\n})\nexport class ComboboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../../../../libs/core/src/lib/combobox/combobox.interface.ts","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.component.ts","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.component.html","../../../../libs/core/src/lib/combobox/combobox-mobile/combobox-mobile.module.ts","../../../../libs/core/src/lib/combobox/list-group.pipe.ts","../../../../libs/core/src/lib/combobox/combobox.component.ts","../../../../libs/core/src/lib/combobox/combobox.component.html","../../../../libs/core/src/lib/combobox/deprecated-combobox-content-density.directive.ts","../../../../libs/core/src/lib/combobox/combobox.module.ts","../../../../libs/core/src/lib/combobox/fundamental-ngx-core-combobox.ts"],"sourcesContent":["import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const COMBOBOX_COMPONENT = new InjectionToken<string[]>('ComboboxInterface');\n\n/**\n * Combobox Interface to have typing and avoid circular dependency between\n * ComboboxComponent <==> ComboboxMobileComponent\n */\nexport interface ComboboxInterface extends MobileMode {\n inputText: string;\n openChange: EventEmitter<boolean>;\n\n getValue(): any;\n dialogApprove(): void;\n dialogDismiss(backup: string): void;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n isDevMode,\n OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { observeOn, takeUntil } from 'rxjs/operators';\n\nimport { DialogService } from '@fundamental-ngx/core/dialog';\nimport {\n MOBILE_MODE_CONFIG,\n MobileModeBase,\n MobileModeConfigToken,\n MobileModeControl\n} from '@fundamental-ngx/core/mobile-mode';\n\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from '../combobox.interface';\nimport { asyncScheduler } from 'rxjs';\n\n@Component({\n selector: 'fd-combobox-mobile',\n templateUrl: './combobox-mobile.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class ComboboxMobileComponent extends MobileModeBase<ComboboxInterface> implements OnInit, OnDestroy {\n /** @hidden */\n @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n /** @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n childContent: { listTemplate: TemplateRef<any>; controlTemplate: TemplateRef<any> } | null = null;\n\n /** @hidden */\n private _selectedBackup: string;\n\n constructor(\n elementRef: ElementRef,\n dialogService: DialogService,\n @Inject(COMBOBOX_COMPONENT) comboboxComponent: ComboboxInterface,\n @Optional() @Inject(MOBILE_MODE_CONFIG) mobileModes: MobileModeConfigToken[]\n ) {\n super(elementRef, dialogService, comboboxComponent, MobileModeControl.COMBOBOX, mobileModes);\n }\n\n ngOnInit(): void {\n this._listenOnMultiInputOpenChange();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n super.onDestroy();\n }\n\n /** @hidden */\n handleDismiss(): void {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n\n /** @hidden */\n handleApprove(): void {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n\n private _toggleDialog(open: boolean): void {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n\n /** @hidden */\n private _listenOnMultiInputOpenChange(): void {\n this._component.openChange.pipe(takeUntil(this._onDestroy$)).subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n\n /** @hidden */\n private _open(): void {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n verticalPadding: false,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement\n });\n\n this._focusInputElementOnceOpened();\n\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n\n /** @hidden */\n private _focusInputElementOnceOpened(): void {\n this.dialogRef.afterLoaded\n .pipe(\n observeOn(asyncScheduler), // making the listener async\n takeUntil(this._onDestroy$)\n )\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n } catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n}\n","<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig?.title }}</h1>\n <button\n title=\"Close\"\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig?.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n fd-initial-focus\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ComboboxMobileComponent } from './combobox-mobile.component';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n declarations: [ComboboxMobileComponent],\n imports: [BarModule, DialogModule, ButtonModule, CommonModule],\n entryComponents: [ComboboxMobileComponent],\n exports: [ComboboxMobileComponent]\n})\nexport class ComboboxMobileModule {}\n","import { KeyValue } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\n\nexport type GroupFunction<T = any> = (items: T[]) => { [key: string]: T[] };\n\n@Pipe({\n name: 'listGroupPipe'\n})\nexport class ListGroupPipe<T = any> implements PipeTransform {\n transform(items: any[], group: GroupFunction<T>): KeyValue<string, T[]>[] {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewContainerRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n BACKSPACE,\n CONTROL,\n DOWN_ARROW,\n ENTER,\n ESCAPE,\n LEFT_ARROW,\n RIGHT_ARROW,\n SHIFT,\n SPACE,\n TAB,\n UP_ARROW\n} from '@angular/cdk/keycodes';\nimport { Subscription } from 'rxjs';\n\nimport { ListComponent, ListMessageDirective } from '@fundamental-ngx/core/list';\nimport { AutoCompleteEvent, DynamicComponentService, FocusEscapeDirection, KeyUtil } from '@fundamental-ngx/core/utils';\nimport { FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { FormStates, Nullable, PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { InputGroupComponent } from '@fundamental-ngx/core/input-group';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\n\nimport { ComboboxMobileModule } from './combobox-mobile/combobox-mobile.module';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT, ComboboxInterface } from './combobox.interface';\nimport { ComboboxItem } from './combobox-item';\nimport { GroupFunction } from './list-group.pipe';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\n\nlet comboboxUniqueId = 0;\n\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\n@Component({\n selector: 'fd-combobox',\n templateUrl: './combobox.component.html',\n styleUrls: ['./combobox.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n contentDensityObserverProviders()\n ],\n host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ComboboxComponent\n implements ComboboxInterface, ControlValueAccessor, OnInit, OnChanges, AfterViewInit, OnDestroy, FormItemControl\n{\n /** Id for the Combobox. */\n @Input()\n comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n\n /** Id attribute for input element inside Combobox component */\n @Input()\n inputId = '';\n\n /** Aria-label for Combobox. */\n @Input()\n ariaLabel: Nullable<string>;\n\n /** Aria-Labelledby for element describing Combobox. */\n @Input()\n ariaLabelledBy: Nullable<string>;\n\n /** If it is mandatory field */\n @Input()\n required = false;\n\n /** Values to be filtered in the search input. */\n @Input()\n dropdownValues: any[] = [];\n\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n @Input()\n filterFn = this._defaultFilter;\n\n /** Whether the search input is disabled. **/\n @Input()\n disabled: boolean;\n\n /** Placeholder of the search input. **/\n @Input()\n placeholder: string;\n\n /**\n * Whether the Combobox is a Search Field\n */\n @Input()\n isSearch = false;\n\n /** Icon to display in the right-side button. */\n @Input()\n glyph = 'navigation-down-arrow';\n\n /**\n * Whether to show the clear search term button when the Combobox is a Search Field\n */\n @Input()\n showClearButton = true;\n\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n @Input()\n triggers: string[] = [];\n\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n @Input()\n closeOnOutsideClick = true;\n\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n @Input()\n openOnKeyboardEvent = true;\n\n /**\n * The state of the form control - applies css classes.\n * Can be `success`, `error`, `warning`, `information` or blank for default.\n */\n @Input()\n state?: FormStates;\n\n /**\n * The template with which to display the individual listed items.\n * Use it by passing an ng-template with implicit content. See examples for more info.\n */\n @Input()\n itemTemplate: TemplateRef<any>;\n\n /**\n * Function used to handle grouping of items.\n */\n @Input()\n groupFn: GroupFunction;\n\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n @Input()\n maxHeight = '50vh';\n\n /** Search function to execute when the Enter key is pressed on the main input. */\n @Input()\n searchFn: () => void;\n\n /** Whether the matching string should be highlighted during filtration. */\n @Input()\n highlighting = true;\n\n /** Whether the matching string should be highlighted after combobox value is selected. */\n filterHighlight = true;\n\n /** Whether the popover should close when a user selects a result. */\n @Input()\n closeOnSelect = true;\n\n /** Whether the input field should be populated with the result picked by the user. */\n @Input()\n fillOnSelect = true;\n\n /** Whether the autocomplete should be enabled; Enabled by default */\n @Input()\n autoComplete = 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 /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n @Input()\n communicateByObject = false;\n\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n @Input()\n displayFn = this._defaultDisplay;\n\n /**\n * Whether AddOn Button should be focusable\n * @default true\n */\n @Input()\n buttonFocusable = true;\n\n /** Whether the combobox is readonly. */\n @Input()\n readOnly = false;\n\n /** Whether the combobox should be built on mobile mode */\n @Input()\n mobile = false;\n\n /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n @Input()\n mobileConfig: MobileModeConfig;\n\n /** Whether to display the addon button. */\n @Input()\n showDropdownButton = true;\n\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n @Input()\n includes = false;\n\n /**\n * The tooltip for the multi-input icon.\n */\n @Input()\n title: string;\n\n /** Whether list item options should be rendered as byline. */\n @Input()\n byline = false;\n\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n @Output()\n readonly itemClicked: EventEmitter<ComboboxItem> = new EventEmitter<ComboboxItem>();\n\n /** Event emitted, when the combobox's popover body is opened or closed */\n @Output()\n readonly openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /** Event emitted when the input text changes. */\n @Output()\n inputTextChange: EventEmitter<string> = new EventEmitter<string>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n listComponent: ListComponent;\n\n /** @hidden */\n @ViewChild('searchInputElement')\n searchInputElement: ElementRef<HTMLInputElement>;\n\n /** @hidden */\n @ViewChild(PopoverComponent)\n popoverComponent: PopoverComponent;\n\n /** @hidden */\n @ViewChild(InputGroupComponent)\n inputGroup: InputGroupComponent;\n\n /** @hidden */\n @ContentChildren(ListMessageDirective)\n listMessages: QueryList<ListMessageDirective>;\n\n /** @hidden */\n @ViewChild('controlTemplate')\n controlTemplate: TemplateRef<HTMLElement>;\n\n /** @hidden */\n @ViewChild('listTemplate')\n listTemplate: TemplateRef<HTMLElement>;\n\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n readonly nonOpeningKeys: number[] = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n\n /** Keys, that will close popover's body, when dispatched on search input */\n readonly closingKeys: number[] = [ESCAPE];\n\n /** Whether the combobox is opened. */\n open = false;\n\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n inShellbar = false;\n\n /** @hidden */\n displayedValues: any[] = [];\n\n /** @hidden */\n inputTextValue = '';\n\n /** @hidden */\n clearInputBtnFocused = false;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _value: any;\n\n /** @hidden */\n onChange: (value: any) => void = () => {};\n\n /** @hidden */\n onTouched = (): void => {};\n\n /** @hidden */\n constructor(\n private readonly _cdRef: ChangeDetectorRef,\n private readonly _injector: Injector,\n private readonly _viewContainerRef: ViewContainerRef,\n private readonly _dynamicComponentService: DynamicComponentService,\n readonly _contentDensityObserver: ContentDensityObserver\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._addShellbarClass();\n\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n\n /** @hidden */\n onInputKeydownHandler(event: KeyboardEvent): void {\n if (this.readOnly) {\n return;\n }\n\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n } else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n } else if (KeyUtil.isKeyCode(event, this.closingKeys)) {\n this.isOpenChangeHandle(false);\n event.stopPropagation();\n } else if (\n this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)\n ) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n\n /** @hidden */\n onItemKeyDownHandler(event: KeyboardEvent, value: any): void {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n\n /** @hidden */\n onMenuClickHandler(value: any): void {\n if (value || value === 0) {\n const index: number = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term: any): void {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove(): void {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n\n /** If true value empty */\n get isEmptyValue(): boolean {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n\n /** Get the input text of the input. */\n get inputText(): string {\n return this.inputTextValue;\n }\n\n /** Set the input text of the input. */\n set inputText(value: string) {\n this.inputTextValue = value;\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n this.onTouched();\n }\n\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue(): string {\n return this.isSearch ? 'search' : 'navigation-down-arrow';\n }\n\n /** @hidden */\n _handleClearSearchTerm(): void {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues;\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this.onTouched();\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n writeValue(value: any): void {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\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 /** Method passed to list component */\n handleListFocusEscape(direction: FocusEscapeDirection): void {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n\n /** @hidden */\n handleSearchTermChange(): void {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n if (this.popoverComponent) {\n this.popoverComponent.refreshPosition();\n }\n }\n\n /** @hidden */\n onPrimaryButtonClick(): void {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n }\n\n /** @hidden */\n isOpenChangeHandle(isOpen: boolean): void {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.onTouched();\n this.openChange.emit(isOpen);\n }\n\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus();\n }\n\n this._cdRef.detectChanges();\n }\n\n /** @hidden */\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event: AutoCompleteEvent): void {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n\n /** @hidden */\n handleBlur(): void {\n if (!this.open) {\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n\n /** @hidden */\n clearInputBtnFocus(): void {\n this.clearInputBtnFocused = true;\n }\n\n /** @hidden */\n clearInputBtnBlur(): void {\n this.clearInputBtnFocused = false;\n }\n\n /** Current select value */\n getValue(): any {\n return this._value;\n }\n\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n private _chooseOtherItem(offset: number): void {\n const activeValue: any = this._getOptionObjectByDisplayedValue(this.inputTextValue);\n const index: number = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n private _resetDisplayedValues(): void {\n this.displayedValues = this.dropdownValues;\n }\n\n /** @hidden */\n private _addShellbarClass(): void {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n\n /** @hidden */\n private _defaultDisplay(str: any): string {\n return str;\n }\n\n /** @hidden */\n private _defaultFilter(contentArray: any[], searchTerm: any): any[] {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n } else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray;\n }\n\n /** @hidden */\n private _handleClickActions(term: any): void {\n if (this.closeOnSelect) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n\n if (this.mobile) {\n this._propagateChange();\n }\n }\n this.handleSearchTermChange();\n }\n\n /** @hidden */\n private _getOptionObjectByDisplayedValue(displayValue: string): any {\n return this.dropdownValues.find((value) => this.displayFn(value) === displayValue);\n }\n\n /** @hidden */\n private _refreshDisplayedValues(): void {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n } else {\n this.displayedValues = this.dropdownValues;\n }\n }\n\n /** @hidden */\n private _propagateChange(): void {\n if (!this.communicateByObject) {\n this.onChange(this.inputText);\n } else {\n this.onChange(this.getValue());\n }\n }\n\n /** @hidden */\n private setValue(value: any): void {\n if (this.communicateByObject) {\n this._value = value;\n } else {\n this._value = this.displayFn(value);\n }\n }\n\n /** @hidden */\n private async _setUpMobileMode(): Promise<void> {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n\n await this._dynamicComponentService.createDynamicModule(\n { listTemplate: this.listTemplate, controlTemplate: this.controlTemplate },\n ComboboxMobileModule,\n ComboboxMobileComponent,\n this._viewContainerRef,\n injector\n );\n }\n\n isSelected(term: any): boolean {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n}\n","<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues?.length\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</ng-template>\n\n<ng-template let-term=\"term\" #itemSource>\n <span\n fd-list-title\n *ngIf=\"!itemTemplate\"\n [innerHTML]=\"term | displayFnPipe: displayFn | highlight: inputText:highlighting && filterHighlight\"\n >\n </span>\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: term }\"></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #mobileTemplate>\n <ng-container [ngTemplateOutlet]=\"controlTemplate\"></ng-container>\n</ng-template>\n\n<ng-template #controlTemplate>\n <fd-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel\"\n [iconTitle]=\"title\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fd-auto-complete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (focus)=\"onTouched()\"\n (blur)=\"handleBlur()\"\n />\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-input-group__addon--compact]=\"_contentDensityObserver.isCompact$ | async\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n *ngIf=\"isSearch && showClearButton && inputText && inputText.length > 0\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"buttonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues?.length || 0 }} result list items\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list fd-combobox-input-menu-overflow\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"groupFn\">\n <ng-container *ngFor=\"let group of displayedValues | listGroupPipe: groupFn\">\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of group.value\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!groupFn\">\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of displayedValues\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container [ngTemplateOutlet]=\"itemSource\" [ngTemplateOutletContext]=\"{ term: term }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n","import { Directive, ElementRef, forwardRef } from '@angular/core';\nimport { CONTENT_DENSITY_DIRECTIVE, DeprecatedCompactDirective } from '@fundamental-ngx/core/content-density';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'fd-combobox[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedComboboxContentDensityDirective)\n }\n ]\n})\nexport class DeprecatedComboboxContentDensityDirective extends DeprecatedCompactDirective {\n constructor(private elRef: ElementRef) {\n super('fd-combobox');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { FormsModule } from '@angular/forms';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { InputGroupModule } from '@fundamental-ngx/core/input-group';\nimport { ListModule } from '@fundamental-ngx/core/list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { AutoCompleteModule } from '@fundamental-ngx/core/utils';\n\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { DeprecatedComboboxContentDensityDirective } from './deprecated-combobox-content-density.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n declarations: [ComboboxComponent, ListGroupPipe, DeprecatedComboboxContentDensityDirective],\n imports: [\n CommonModule,\n PopoverModule,\n FormsModule,\n MenuModule,\n PipeModule,\n ButtonModule,\n InputGroupModule,\n ListModule,\n IconModule,\n AutoCompleteModule,\n ContentDensityModule\n ],\n exports: [ComboboxComponent, ListGroupPipe, DeprecatedComboboxContentDensityDirective, ContentDensityModule]\n})\nexport class ComboboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -193,6 +193,7 @@ class OverflowLayoutService {
193
193
  this._listenToItemResize = false;
194
194
  this._allItems = this.config.items.toArray();
195
195
  let allItems = this.config.items.toArray();
196
+ let visibleContainerItems = this.config.visibleItems.toArray();
196
197
  allItems.forEach((item, index) => {
197
198
  // Softly hide previously completely hidden item in order to correctly calculate it's size.
198
199
  item.softHidden = true;
@@ -200,17 +201,17 @@ class OverflowLayoutService {
200
201
  item.index = index;
201
202
  item.first = index === 0;
202
203
  item.last = index === allItems.length - 1;
204
+ item.globalIndex = index;
205
+ visibleContainerItems[index].containerRef.hidden = false;
203
206
  });
204
207
  this._detectChanges$.next();
205
208
  allItems = this.config.direction === 'right' ? allItems : allItems.reverse();
206
- const visibleContainerItems = this.config.direction === 'right'
207
- ? this.config.visibleItems.toArray()
208
- : this.config.visibleItems.toArray().reverse();
209
- visibleContainerItems.forEach((i) => (i.containerRef.hidden = false));
209
+ visibleContainerItems =
210
+ this.config.direction === 'right' ? visibleContainerItems : visibleContainerItems.reverse();
210
211
  this.result.showMore = false;
211
212
  this._emitResult();
212
213
  const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;
213
- const itemsContainerWidth = this.config.itemsWrapper.getBoundingClientRect().width;
214
+ const itemsContainerWidth = allItems.reduce((total, item) => total + this._getElementWidth(item.elementRef.nativeElement), 0);
214
215
  if (containerWidth >= itemsContainerWidth &&
215
216
  this.config.visibleItems.length <= this.config.maxVisibleItems &&
216
217
  this._hiddenItems.length === 0) {
@@ -229,8 +230,8 @@ class OverflowLayoutService {
229
230
  let fittingElmCount = 0;
230
231
  let fittingElmsWidth = 0;
231
232
  let shouldHideItems = false;
232
- const showMoreContainerWidth = Math.ceil(this.config.showMoreContainer.getBoundingClientRect().width);
233
- let layoutWidth = Math.ceil(this.config.layoutContainerElement.getBoundingClientRect().width);
233
+ const showMoreContainerWidth = Math.ceil(this._getElementWidth(this.config.showMoreContainer));
234
+ let layoutWidth = containerWidth - showMoreContainerWidth;
234
235
  // Try to find all forced visible items
235
236
  const forcedItemsIndexes = this._getForcedItemsIndexes();
236
237
  forcedItemsIndexes.forEach((itemIndex) => {
@@ -276,7 +277,7 @@ class OverflowLayoutService {
276
277
  item.softHidden = false;
277
278
  });
278
279
  let hiddenItems = allItems.filter((i) => i.hidden);
279
- hiddenItems = !this.config.reverseHiddenItems ? hiddenItems.reverse() : hiddenItems;
280
+ hiddenItems = this.config.reverseHiddenItems ? hiddenItems.reverse() : hiddenItems;
280
281
  const visibleItems = allItems.filter((i) => !i.hidden);
281
282
  visibleItems.forEach((item, index) => {
282
283
  item.index = index;
@@ -300,9 +301,10 @@ class OverflowLayoutService {
300
301
  return;
301
302
  }
302
303
  this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';
303
- this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)
304
+ this._keyboardEventsManager = new FocusKeyManager(this.config.focusableItems)
304
305
  .withWrap()
305
306
  .withHorizontalOrientation(this._dir)
307
+ .withVerticalOrientation()
306
308
  .skipPredicate((item) => !item.focusable || item.hidden);
307
309
  }
308
310
  /** @hidden Rtl change subscription */
@@ -531,6 +533,7 @@ class OverflowLayoutComponent {
531
533
  return {
532
534
  visibleItems: this._visibleItems,
533
535
  items: this._items,
536
+ focusableItems: this._overflowItems,
534
537
  itemsWrapper: this._itemsWrapper.nativeElement,
535
538
  showMoreContainer: this._showMoreContainer.nativeElement,
536
539
  layoutContainerElement: this._layoutContainer.nativeElement,
@@ -565,7 +568,7 @@ OverflowLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0"
565
568
  useExisting: OverflowLayoutComponent
566
569
  },
567
570
  OverflowLayoutService
568
- ], queries: [{ propertyName: "_moreButton", first: true, predicate: FD_OVERFLOW_EXPAND, descendants: true }, { propertyName: "_items", predicate: FD_OVERFLOW_ITEM_REF, descendants: true }, { propertyName: "_overflowItems", predicate: FD_OVERFLOW_ITEM, descendants: true }], viewQueries: [{ propertyName: "_itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true }, { propertyName: "_layoutContainer", first: true, predicate: ["layoutContainer"], descendants: true }, { propertyName: "_showMoreContainer", first: true, predicate: ["showMoreContainer"], descendants: true }, { propertyName: "_visibleItems", predicate: OverflowLayoutItemContainerDirective, descendants: true }], ngImport: i0, template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer [first]=\"item.first\" [last]=\"item.last\" [softHidden]=\"item.softHidden\">\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important}\n"], components: [{ type: i3.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i3.PopoverControlComponent, selector: "fd-popover-control" }, { type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i3.PopoverBodyComponent, selector: "fd-popover-body" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: OverflowLayoutItemContainerDirective, selector: "[fdOverflowLayoutItemContainer]", inputs: ["last", "first", "softHidden"] }, { type: OverflowItemContainerRefDirective, selector: "[fdOverflowItemContainerRef]" }, { type: OverflowLayoutPopoverContentDirective, selector: "[fdOverflowLayoutPopoverContent]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
571
+ ], queries: [{ propertyName: "_moreButton", first: true, predicate: FD_OVERFLOW_EXPAND, descendants: true }, { propertyName: "_items", predicate: FD_OVERFLOW_ITEM_REF, descendants: true }, { propertyName: "_overflowItems", predicate: FD_OVERFLOW_ITEM, descendants: true }], viewQueries: [{ propertyName: "_itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true }, { propertyName: "_layoutContainer", first: true, predicate: ["layoutContainer"], descendants: true }, { propertyName: "_showMoreContainer", first: true, predicate: ["showMoreContainer"], descendants: true }, { propertyName: "_visibleItems", predicate: OverflowLayoutItemContainerDirective, descendants: true }], ngImport: i0, template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items-wrapper\">\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div\n fdOverflowLayoutItemContainer\n [first]=\"item.first\"\n [last]=\"item.last\"\n [softHidden]=\"item.softHidden\"\n >\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last,\n globalIndex: item.globalIndex\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last,\n globalIndex: item.globalIndex\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%;justify-content:space-between}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;display:inline-flex}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;flex-shrink:0}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-wrapper{display:inline-flex}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important;position:absolute!important}\n"], components: [{ type: i3.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i3.PopoverControlComponent, selector: "fd-popover-control" }, { type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i3.PopoverBodyComponent, selector: "fd-popover-body" }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: OverflowLayoutItemContainerDirective, selector: "[fdOverflowLayoutItemContainer]", inputs: ["last", "first", "softHidden"] }, { type: OverflowItemContainerRefDirective, selector: "[fdOverflowItemContainerRef]" }, { type: OverflowLayoutPopoverContentDirective, selector: "[fdOverflowLayoutPopoverContent]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
569
572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, decorators: [{
570
573
  type: Component,
571
574
  args: [{ selector: 'fd-overflow-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -574,7 +577,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
574
577
  useExisting: OverflowLayoutComponent
575
578
  },
576
579
  OverflowLayoutService
577
- ], template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer [first]=\"item.first\" [last]=\"item.last\" [softHidden]=\"item.softHidden\">\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important}\n"] }]
580
+ ], template: "<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items-wrapper\">\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div\n fdOverflowLayoutItemContainer\n [first]=\"item.first\"\n [last]=\"item.last\"\n [softHidden]=\"item.softHidden\"\n >\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last,\n globalIndex: item.globalIndex\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last,\n globalIndex: item.globalIndex\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%;justify-content:space-between}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;display:inline-flex}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;flex-shrink:0}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-wrapper{display:inline-flex}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__item--soft-hidden{opacity:0!important;position:absolute!important}\n"] }]
578
581
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: OverflowLayoutService }, { type: i1.RtlService, decorators: [{
579
582
  type: Optional
580
583
  }] }]; }, propDecorators: { maxVisibleItems: [{
@@ -625,6 +628,7 @@ class OverflowItemRefDirective {
625
628
  /** @hidden */
626
629
  constructor(templateRef) {
627
630
  this.templateRef = templateRef;
631
+ /** @hidden */
628
632
  this._hidden = false;
629
633
  /** Whether the item is softly hidden. */
630
634
  this.softHidden = true;