@fundamental-ngx/core 0.35.4-rc.7 → 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 (171) 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/combobox.component.d.ts +8 -1
  20. package/combobox/combobox.interface.d.ts +1 -0
  21. package/combobox/esm2020/combobox-mobile/combobox-mobile.component.mjs +2 -2
  22. package/combobox/esm2020/combobox.component.mjs +27 -9
  23. package/combobox/esm2020/combobox.interface.mjs +1 -1
  24. package/combobox/fesm2015/fundamental-ngx-core-combobox.mjs +27 -9
  25. package/combobox/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  26. package/combobox/fesm2020/fundamental-ngx-core-combobox.mjs +27 -9
  27. package/combobox/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  28. package/combobox/package.json +1 -1
  29. package/content-density/package.json +3 -3
  30. package/date-picker/package.json +1 -1
  31. package/datetime/package.json +1 -1
  32. package/datetime-picker/package.json +1 -1
  33. package/dialog/package.json +1 -1
  34. package/dynamic-page/package.json +1 -1
  35. package/dynamic-side-content/package.json +1 -1
  36. package/esm2020/breadcrumb/breadcrumb.component.mjs +3 -3
  37. package/esm2020/combobox/combobox-mobile/combobox-mobile.component.mjs +2 -2
  38. package/esm2020/combobox/combobox.component.mjs +27 -9
  39. package/esm2020/combobox/combobox.interface.mjs +1 -1
  40. package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +2 -1
  41. package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +1 -1
  42. package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
  43. package/esm2020/overflow-layout/overflow-layout.component.mjs +4 -3
  44. package/esm2020/overflow-layout/overflow-layout.service.mjs +12 -10
  45. package/facets/package.json +1 -1
  46. package/feed-input/package.json +1 -1
  47. package/feed-list-item/package.json +1 -1
  48. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  49. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  50. package/fesm2015/fundamental-ngx-core-combobox.mjs +27 -9
  51. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  52. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +15 -11
  53. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  54. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  55. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  56. package/fesm2020/fundamental-ngx-core-combobox.mjs +27 -9
  57. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  58. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +15 -11
  59. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  60. package/file-uploader/package.json +1 -1
  61. package/fixed-card-layout/package.json +1 -1
  62. package/flexible-column-layout/package.json +1 -1
  63. package/form/package.json +1 -1
  64. package/formatted-text/package.json +1 -1
  65. package/grid-list/package.json +1 -1
  66. package/icon/package.json +1 -1
  67. package/illustrated-message/package.json +1 -1
  68. package/infinite-scroll/package.json +1 -1
  69. package/info-label/package.json +1 -1
  70. package/inline-help/package.json +1 -1
  71. package/input-group/package.json +1 -1
  72. package/layout-grid/package.json +1 -1
  73. package/layout-panel/package.json +1 -1
  74. package/link/package.json +1 -1
  75. package/list/package.json +1 -1
  76. package/menu/package.json +1 -1
  77. package/message-box/package.json +1 -1
  78. package/message-strip/package.json +1 -1
  79. package/message-toast/package.json +1 -1
  80. package/micro-process-flow/package.json +1 -1
  81. package/mobile-mode/package.json +1 -1
  82. package/multi-input/package.json +1 -1
  83. package/nested-list/package.json +1 -1
  84. package/notification/package.json +1 -1
  85. package/object-identifier/package.json +1 -1
  86. package/object-marker/package.json +1 -1
  87. package/object-number/package.json +1 -1
  88. package/object-status/package.json +1 -1
  89. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +5 -2
  90. package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +2 -1
  91. package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +1 -1
  92. package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
  93. package/overflow-layout/esm2020/overflow-layout.component.mjs +4 -3
  94. package/overflow-layout/esm2020/overflow-layout.service.mjs +12 -10
  95. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +15 -11
  96. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  97. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +15 -11
  98. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  99. package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +4 -1
  100. package/overflow-layout/interfaces/overflow-item.interface.d.ts +3 -0
  101. package/overflow-layout/overflow-layout.service.d.ts +1 -0
  102. package/overflow-layout/package.json +13 -13
  103. package/package.json +13 -26
  104. package/pagination/package.json +1 -1
  105. package/panel/package.json +1 -1
  106. package/popover/package.json +1 -1
  107. package/product-switch/package.json +1 -1
  108. package/progress-indicator/package.json +1 -1
  109. package/quick-view/package.json +1 -1
  110. package/radio/package.json +1 -1
  111. package/rating-indicator/package.json +1 -1
  112. package/resizable-card-layout/package.json +1 -1
  113. package/schematics/add-animations/index.d.ts +1 -0
  114. package/schematics/add-animations/index.js +42 -0
  115. package/schematics/add-animations/index.js.map +1 -0
  116. package/schematics/collection.json +9 -0
  117. package/schematics/migrations/migrate-theme-fonts/index.d.ts +2 -0
  118. package/schematics/migrations/migrate-theme-fonts/index.js +85 -0
  119. package/schematics/migrations/migrate-theme-fonts/index.js.map +1 -0
  120. package/schematics/migrations/migrate-theme-fonts/schema.d.ts +4 -0
  121. package/schematics/migrations/migrate-theme-fonts/schema.js +3 -0
  122. package/schematics/migrations/migrate-theme-fonts/schema.js.map +1 -0
  123. package/schematics/migrations/migrate-theme-fonts/schema.json +21 -0
  124. package/schematics/migrations/migrate-theme-fonts/styles.d.ts +2 -0
  125. package/schematics/migrations/migrate-theme-fonts/styles.js +20 -0
  126. package/schematics/migrations/migrate-theme-fonts/styles.js.map +1 -0
  127. package/schematics/ng-add/index.js +168 -198
  128. package/schematics/ng-add/index.js.map +1 -1
  129. package/schematics/ng-add/schema.d.ts +1 -1
  130. package/schematics/ng-add/schema.json +6 -6
  131. package/schematics/ng-add/styles.d.ts +4 -0
  132. package/{assets/fundamental-ngx-core-fonts.scss → schematics/ng-add/styles.js} +20 -10
  133. package/schematics/ng-add/styles.js.map +1 -0
  134. package/schematics/utils/file-utils.js +1 -1
  135. package/schematics/utils/file-utils.js.map +1 -1
  136. package/scroll-spy/package.json +1 -1
  137. package/scrollbar/package.json +1 -1
  138. package/segmented-button/package.json +1 -1
  139. package/select/package.json +1 -1
  140. package/shared/package.json +1 -1
  141. package/shellbar/package.json +1 -1
  142. package/side-navigation/package.json +1 -1
  143. package/slider/package.json +1 -1
  144. package/split-button/package.json +1 -1
  145. package/splitter/package.json +1 -1
  146. package/status-indicator/package.json +1 -1
  147. package/step-input/package.json +1 -1
  148. package/switch/package.json +1 -1
  149. package/table/package.json +1 -1
  150. package/tabs/package.json +1 -1
  151. package/text/package.json +1 -1
  152. package/theming/package.json +1 -1
  153. package/tile/package.json +1 -1
  154. package/time/package.json +1 -1
  155. package/time-picker/package.json +1 -1
  156. package/timeline/package.json +1 -1
  157. package/title/package.json +1 -1
  158. package/token/package.json +1 -1
  159. package/toolbar/package.json +1 -1
  160. package/tree/package.json +1 -1
  161. package/upload-collection/package.json +1 -1
  162. package/utils/package.json +1 -1
  163. package/vertical-navigation/package.json +1 -1
  164. package/wizard/package.json +1 -1
  165. package/assets/fonts/sap_fiori_3_fonts.css +0 -6
  166. package/assets/fonts/sap_horizon_fonts.css +0 -6
  167. package/assets/fundamental-ngx-core.scss +0 -1
  168. package/schematics/migrations/migration-0.36/index.d.ts +0 -2
  169. package/schematics/migrations/migration-0.36/index.js +0 -113
  170. package/schematics/migrations/migration-0.36/index.js.map +0 -1
  171. package/schematics/migrations.json +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-breadcrumb.mjs","sources":["../../../../libs/core/src/lib/breadcrumb/breadcrumb-item.component.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.component.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.component.html","../../../../libs/core/src/lib/breadcrumb/deprecated-breadcrumbs-compact.directive.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.module.ts","../../../../libs/core/src/lib/breadcrumb/fundamental-ngx-core-breadcrumb.ts"],"sourcesContent":["import { DomPortal } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n forwardRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\n\n/**\n * Breadcrumb item directive. Must have child breadcrumb link directives.\n *\n * ```html\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb-item',\n template: '<ng-content></ng-content>',\n host: {\n class: 'fd-breadcrumb__item'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbItemComponent implements AfterViewInit {\n /** @hidden */\n @ContentChild(forwardRef(() => LinkComponent))\n breadcrumbLink: LinkComponent;\n\n /** In case there is no link in Item and breadcrumb item is non-interactive, we move whole item content to menu item title */\n breadcrumbItemPortal: DomPortal<Element>;\n\n /** When breadcrumb item has link in it, we are moving link content to menu item title */\n linkContentPortal: DomPortal;\n\n /**\n * Breadcrumb item dom portal.\n */\n portal: DomPortal;\n\n /** @hidden */\n private _attached = false;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n get _needsClickProxy(): boolean {\n return (\n !!this.breadcrumbLink?.elementRef().nativeElement.getAttribute('href') || !!this.breadcrumbLink.routerLink\n );\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._attach();\n }\n\n /**\n * Sets breadcrumb item dom portal.\n */\n setPortal(): void {\n if (!this.portal) {\n this.portal = new DomPortal(this.elementRef);\n }\n }\n\n /** @hidden */\n _detach(): void {\n if (!this._attached) {\n return;\n }\n\n if (this.linkContentPortal?.isAttached) {\n this.linkContentPortal?.detach();\n }\n\n if (this.breadcrumbItemPortal?.isAttached) {\n this.breadcrumbItemPortal?.detach();\n }\n\n this._attached = false;\n }\n\n /** @hidden */\n _attach(): void {\n if (this._attached) {\n return;\n }\n\n if (this.breadcrumbLink && this.breadcrumbLink.contentSpan) {\n this.linkContentPortal = new DomPortal<HTMLElement>(this.breadcrumbLink.contentSpan.nativeElement);\n }\n\n this.breadcrumbItemPortal = new DomPortal(this.elementRef.nativeElement.firstElementChild as Element);\n this._attached = true;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n isDevMode,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { OverflowLayoutComponent } from '@fundamental-ngx/core/overflow-layout';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { DestroyedService, RtlService } from '@fundamental-ngx/core/utils';\nimport { BehaviorSubject, takeUntil } from 'rxjs';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { Placement } from '@fundamental-ngx/core/shared';\n\n/**\n * Breadcrumb parent wrapper directive. Must have breadcrumb item child directives.\n *\n * ```html\n * <fd-breadcrumb>\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * </fd-breadcrumb>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb',\n host: {\n class: 'fd-breadcrumb'\n },\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DestroyedService]\n})\nexport class BreadcrumbComponent implements OnInit, AfterViewInit {\n /**\n * @deprecated\n * Breadcrumbs component now uses more advanced calculation mechanism without the need of specifying the container element.\n *\n * The element to act as the breadcrumb container. When provided, the breadcrumb's responsive collapsing behavior\n * performs better. When not provided, the immediate parent element's width will be used.\n */\n @Input()\n set containerElement(_: HTMLElement) {\n if (isDevMode()) {\n console.warn(\n 'Breadcrumbs component now uses more advanced calculation mechanism without the need of specifying the container element.'\n );\n }\n }\n\n /** Whether to append items to the overflow dropdown in reverse order. Default is true. */\n @Input()\n reverse = false;\n\n /**\n * Event emitted when visible items count is changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event emitted when hidden items count is changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /** @hidden */\n @ContentChildren(BreadcrumbItemComponent)\n private readonly _contentItems: QueryList<BreadcrumbItemComponent>;\n\n /** @hidden */\n @ViewChild(MenuComponent)\n private readonly _menuComponent: MenuComponent;\n\n /** @hidden */\n @ViewChild(OverflowLayoutComponent)\n private readonly _overflowLayout: OverflowLayoutComponent;\n\n /**\n * @hidden\n * Array of breadcrumb items.\n */\n _items: BreadcrumbItemComponent[] = [];\n\n /** @hidden */\n _placement$ = new BehaviorSubject<Placement>('bottom-start');\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n private _onDestroy$: DestroyedService,\n @Optional() private _rtlService: RtlService | null,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._rtlService?.rtl\n .pipe(takeUntil(this._onDestroy$))\n .subscribe((value) => this._placement$.next(value ? 'bottom-end' : 'bottom-start'));\n }\n\n /** @hidden */\n onResize(): void {\n this._overflowLayout.triggerRecalculation();\n }\n\n /**\n * We catch interactions with item, Enter, Space, Mouse click and Touch click,\n * if original element had router link we are proxying click to that element\n * */\n itemClicked(breadcrumbItem: any, $event: any): void {\n if (breadcrumbItem.needsClickProxy) {\n $event.preventDefault();\n breadcrumbItem.breadcrumbLink.elementRef().nativeElement.click();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setItems();\n\n this._contentItems.changes.subscribe(() => this._setItems());\n }\n\n /** @hidden */\n _keyDownHandle(event: Event): void {\n this._menuComponent.toggle();\n event.preventDefault();\n }\n\n /** @hidden */\n _onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void {\n if (!isHidden) {\n breadcrumb._detach();\n } else {\n breadcrumb._attach();\n }\n }\n\n /** @hidden */\n _onVisibleItemsCountChange(visibleItemsCount: number): void {\n this.visibleItemsCount.emit(visibleItemsCount);\n }\n\n /** @hidden */\n _onHiddenItemsCountChange(hiddenItemsCount: number): void {\n this.hiddenItemsCount.emit(hiddenItemsCount);\n }\n\n /** @hidden */\n private _setItems(): void {\n this._contentItems.forEach((item) => item.setPortal());\n this._items = this._contentItems.toArray();\n this._cdr.detectChanges();\n }\n}\n","<fd-overflow-layout\n [reverseHiddenItems]=\"reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n>\n <ng-container *ngFor=\"let breadcrumb of _items\">\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n </ng-container>\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"_placement$ | async\">\n <ng-container *ngFor=\"let breadcrumbItem of breadcrumbs\">\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled : false\n \"\n >\n <a\n fd-menu-interactive\n (click)=\"itemClicked(breadcrumbItem.item, $event)\"\n (keydown.enter)=\"itemClicked(breadcrumbItem.item, $event)\"\n (keydown.space)=\"itemClicked(breadcrumbItem.item, $event)\"\n >\n <ng-container *ngIf=\"breadcrumbItem?.item.breadcrumbLink; else portalContent\">\n <ng-container *ngIf=\"breadcrumbItem.item.breadcrumbLink._prefixIconName\">\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._prefixIconName\"\n ></fd-menu-addon>\n </ng-container>\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n <ng-container *ngIf=\"breadcrumbItem.item.breadcrumbLink._postfixIconName\">\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._postfixIconName\"\n ></fd-menu-addon>\n </ng-container>\n </ng-container>\n <ng-template #portalContent>\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n </ng-template>\n </a>\n </li>\n </ng-container>\n </fd-menu>\n <span class=\"fd-breadcrumb__item\" *ngIf=\"breadcrumbs.length > 0\" [fdMenuTrigger]=\"menu\">\n <a\n fd-link\n tabindex=\"0\"\n class=\"fd-breadcrumb__collapsed\"\n (keydown.enter)=\"_keyDownHandle($event)\"\n (keydown.space)=\"_keyDownHandle($event)\"\n >\n …\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n </span>\n </ng-container>\n</fd-overflow-layout>\n\n<ng-content></ng-content>\n","import { Directive, 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-breadcrumb[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedBreadcrumbsCompactDirective)\n }\n ]\n})\nexport class DeprecatedBreadcrumbsCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-breadcrumb');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { OverflowLayoutModule } from '@fundamental-ngx/core/overflow-layout';\n\nimport { BreadcrumbComponent } from './breadcrumb.component';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { LinkModule } from '@fundamental-ngx/core/link';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { DeprecatedBreadcrumbsCompactDirective } from './deprecated-breadcrumbs-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n imports: [\n CommonModule,\n IconModule,\n PopoverModule,\n MenuModule,\n LinkModule,\n PortalModule,\n PipeModule,\n ContentDensityModule,\n OverflowLayoutModule,\n ButtonModule\n ],\n exports: [\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n LinkModule,\n DeprecatedBreadcrumbsCompactDirective,\n ContentDensityModule\n ],\n declarations: [BreadcrumbComponent, BreadcrumbItemComponent, DeprecatedBreadcrumbsCompactDirective]\n})\nexport class BreadcrumbModule {}\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-breadcrumb.mjs","sources":["../../../../libs/core/src/lib/breadcrumb/breadcrumb-item.component.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.component.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.component.html","../../../../libs/core/src/lib/breadcrumb/deprecated-breadcrumbs-compact.directive.ts","../../../../libs/core/src/lib/breadcrumb/breadcrumb.module.ts","../../../../libs/core/src/lib/breadcrumb/fundamental-ngx-core-breadcrumb.ts"],"sourcesContent":["import { DomPortal } from '@angular/cdk/portal';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n forwardRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\n\n/**\n * Breadcrumb item directive. Must have child breadcrumb link directives.\n *\n * ```html\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb-item',\n template: '<ng-content></ng-content>',\n host: {\n class: 'fd-breadcrumb__item'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BreadcrumbItemComponent implements AfterViewInit {\n /** @hidden */\n @ContentChild(forwardRef(() => LinkComponent))\n breadcrumbLink: LinkComponent;\n\n /** In case there is no link in Item and breadcrumb item is non-interactive, we move whole item content to menu item title */\n breadcrumbItemPortal: DomPortal<Element>;\n\n /** When breadcrumb item has link in it, we are moving link content to menu item title */\n linkContentPortal: DomPortal;\n\n /**\n * Breadcrumb item dom portal.\n */\n portal: DomPortal;\n\n /** @hidden */\n private _attached = false;\n\n /** @hidden */\n constructor(public readonly elementRef: ElementRef<HTMLElement>) {}\n\n /** @hidden */\n get _needsClickProxy(): boolean {\n return (\n !!this.breadcrumbLink?.elementRef().nativeElement.getAttribute('href') || !!this.breadcrumbLink.routerLink\n );\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._attach();\n }\n\n /**\n * Sets breadcrumb item dom portal.\n */\n setPortal(): void {\n if (!this.portal) {\n this.portal = new DomPortal(this.elementRef);\n }\n }\n\n /** @hidden */\n _detach(): void {\n if (!this._attached) {\n return;\n }\n\n if (this.linkContentPortal?.isAttached) {\n this.linkContentPortal?.detach();\n }\n\n if (this.breadcrumbItemPortal?.isAttached) {\n this.breadcrumbItemPortal?.detach();\n }\n\n this._attached = false;\n }\n\n /** @hidden */\n _attach(): void {\n if (this._attached) {\n return;\n }\n\n if (this.breadcrumbLink && this.breadcrumbLink.contentSpan) {\n this.linkContentPortal = new DomPortal<HTMLElement>(this.breadcrumbLink.contentSpan.nativeElement);\n }\n\n this.breadcrumbItemPortal = new DomPortal(this.elementRef.nativeElement.firstElementChild as Element);\n this._attached = true;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n isDevMode,\n OnInit,\n Optional,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { OverflowLayoutComponent } from '@fundamental-ngx/core/overflow-layout';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { DestroyedService, RtlService } from '@fundamental-ngx/core/utils';\nimport { BehaviorSubject, takeUntil } from 'rxjs';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { Placement } from '@fundamental-ngx/core/shared';\n\n/**\n * Breadcrumb parent wrapper directive. Must have breadcrumb item child directives.\n *\n * ```html\n * <fd-breadcrumb>\n * <fd-breadcrumb-item>\n * <a fd-link [routerLink]=\"'#'\">Breadcrumb Link</a>\n * </fd-breadcrumb-item>\n * </fd-breadcrumb>\n * ```\n */\n@Component({\n selector: 'fd-breadcrumb',\n host: {\n class: 'fd-breadcrumb'\n },\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [DestroyedService]\n})\nexport class BreadcrumbComponent implements OnInit, AfterViewInit {\n /**\n * @deprecated\n * Breadcrumbs component now uses more advanced calculation mechanism without the need of specifying the container element.\n *\n * The element to act as the breadcrumb container. When provided, the breadcrumb's responsive collapsing behavior\n * performs better. When not provided, the immediate parent element's width will be used.\n */\n @Input()\n set containerElement(_: HTMLElement) {\n if (isDevMode()) {\n console.warn(\n 'Breadcrumbs component now uses more advanced calculation mechanism without the need of specifying the container element.'\n );\n }\n }\n\n /** Whether to append items to the overflow dropdown in reverse order. Default is true. */\n @Input()\n reverse = false;\n\n /**\n * Event emitted when visible items count is changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event emitted when hidden items count is changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /** @hidden */\n @ContentChildren(BreadcrumbItemComponent)\n private readonly _contentItems: QueryList<BreadcrumbItemComponent>;\n\n /** @hidden */\n @ViewChild(MenuComponent)\n private readonly _menuComponent: MenuComponent;\n\n /** @hidden */\n @ViewChild(OverflowLayoutComponent)\n private readonly _overflowLayout: OverflowLayoutComponent;\n\n /**\n * @hidden\n * Array of breadcrumb items.\n */\n _items: BreadcrumbItemComponent[] = [];\n\n /** @hidden */\n _placement$ = new BehaviorSubject<Placement>('bottom-start');\n\n /** @hidden */\n constructor(\n public elementRef: ElementRef<HTMLElement>,\n private _onDestroy$: DestroyedService,\n @Optional() private _rtlService: RtlService | null,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._rtlService?.rtl\n .pipe(takeUntil(this._onDestroy$))\n .subscribe((value) => this._placement$.next(value ? 'bottom-end' : 'bottom-start'));\n }\n\n /** @hidden */\n onResize(): void {\n this._overflowLayout.triggerRecalculation();\n }\n\n /**\n * We catch interactions with item, Enter, Space, Mouse click and Touch click,\n * if original element had router link we are proxying click to that element\n * */\n itemClicked(breadcrumbItem: any, $event: any): void {\n if (breadcrumbItem.needsClickProxy) {\n $event.preventDefault();\n breadcrumbItem.breadcrumbLink.elementRef().nativeElement.click();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._setItems();\n\n this._contentItems.changes.subscribe(() => this._setItems());\n }\n\n /** @hidden */\n _keyDownHandle(event: Event): void {\n this._menuComponent.toggle();\n event.preventDefault();\n }\n\n /** @hidden */\n _onHiddenChange(isHidden: boolean, breadcrumb: BreadcrumbItemComponent): void {\n if (!isHidden) {\n breadcrumb._detach();\n } else {\n breadcrumb._attach();\n }\n }\n\n /** @hidden */\n _onVisibleItemsCountChange(visibleItemsCount: number): void {\n this.visibleItemsCount.emit(visibleItemsCount);\n }\n\n /** @hidden */\n _onHiddenItemsCountChange(hiddenItemsCount: number): void {\n this.hiddenItemsCount.emit(hiddenItemsCount);\n }\n\n /** @hidden */\n private _setItems(): void {\n this._contentItems.forEach((item) => item.setPortal());\n this._items = this._contentItems.toArray();\n this._cdr.detectChanges();\n }\n}\n","<fd-overflow-layout\n [reverseHiddenItems]=\"!reverse\"\n showMorePosition=\"left\"\n [enableKeyboardNavigation]=\"false\"\n (visibleItemsCount)=\"_onVisibleItemsCountChange($event)\"\n (hiddenItemsCount)=\"_onHiddenItemsCountChange($event)\"\n>\n <ng-container *ngFor=\"let breadcrumb of _items\">\n <div\n *fdOverflowItemRef=\"breadcrumb; let hidden\"\n fdOverflowLayoutItem\n (hiddenChange)=\"_onHiddenChange($event, breadcrumb)\"\n >\n <ng-template [cdkPortalOutlet]=\"breadcrumb.portal\"></ng-template>\n </div>\n </ng-container>\n <ng-container *fdOverflowExpand=\"let breadcrumbs; items: _items\">\n <fd-menu #menu [closeOnEscapeKey]=\"true\" [focusAutoCapture]=\"true\" [placement]=\"_placement$ | async\">\n <ng-container *ngFor=\"let breadcrumbItem of breadcrumbs\">\n <li\n fd-menu-item\n [disabled]=\"\n breadcrumbItem.item.breadcrumbLink ? breadcrumbItem.item.breadcrumbLink.disabled : false\n \"\n >\n <a\n fd-menu-interactive\n (click)=\"itemClicked(breadcrumbItem.item, $event)\"\n (keydown.enter)=\"itemClicked(breadcrumbItem.item, $event)\"\n (keydown.space)=\"itemClicked(breadcrumbItem.item, $event)\"\n >\n <ng-container *ngIf=\"breadcrumbItem?.item.breadcrumbLink; else portalContent\">\n <ng-container *ngIf=\"breadcrumbItem.item.breadcrumbLink._prefixIconName\">\n <fd-menu-addon\n position=\"before\"\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._prefixIconName\"\n ></fd-menu-addon>\n </ng-container>\n <span fd-menu-title>\n <ng-container [cdkPortalOutlet]=\"breadcrumbItem.item.linkContentPortal\"></ng-container>\n </span>\n <ng-container *ngIf=\"breadcrumbItem.item.breadcrumbLink._postfixIconName\">\n <fd-menu-addon\n [glyph]=\"breadcrumbItem.item.breadcrumbLink._postfixIconName\"\n ></fd-menu-addon>\n </ng-container>\n </ng-container>\n <ng-template #portalContent>\n <span fd-menu-title>\n <ng-container\n [cdkPortalOutlet]=\"breadcrumbItem.item.breadcrumbItemPortal\"\n ></ng-container>\n </span>\n </ng-template>\n </a>\n </li>\n </ng-container>\n </fd-menu>\n <span class=\"fd-breadcrumb__item\" *ngIf=\"breadcrumbs.length > 0\" [fdMenuTrigger]=\"menu\">\n <a\n fd-link\n tabindex=\"0\"\n class=\"fd-breadcrumb__collapsed\"\n (keydown.enter)=\"_keyDownHandle($event)\"\n (keydown.space)=\"_keyDownHandle($event)\"\n >\n …\n <fd-icon glyph=\"slim-arrow-down\"></fd-icon>\n </a>\n </span>\n </ng-container>\n</fd-overflow-layout>\n\n<ng-content></ng-content>\n","import { Directive, 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-breadcrumb[compact]',\n providers: [\n {\n provide: CONTENT_DENSITY_DIRECTIVE,\n useExisting: forwardRef(() => DeprecatedBreadcrumbsCompactDirective)\n }\n ]\n})\nexport class DeprecatedBreadcrumbsCompactDirective extends DeprecatedCompactDirective {\n constructor() {\n super('fd-breadcrumb');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { OverflowLayoutModule } from '@fundamental-ngx/core/overflow-layout';\n\nimport { BreadcrumbComponent } from './breadcrumb.component';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { LinkModule } from '@fundamental-ngx/core/link';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { PipeModule } from '@fundamental-ngx/core/utils';\nimport { DeprecatedBreadcrumbsCompactDirective } from './deprecated-breadcrumbs-compact.directive';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\n\n@NgModule({\n imports: [\n CommonModule,\n IconModule,\n PopoverModule,\n MenuModule,\n LinkModule,\n PortalModule,\n PipeModule,\n ContentDensityModule,\n OverflowLayoutModule,\n ButtonModule\n ],\n exports: [\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n LinkModule,\n DeprecatedBreadcrumbsCompactDirective,\n ContentDensityModule\n ],\n declarations: [BreadcrumbComponent, BreadcrumbItemComponent, DeprecatedBreadcrumbsCompactDirective]\n})\nexport class BreadcrumbModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -62,7 +62,7 @@ class ComboboxMobileComponent extends MobileModeBase {
62
62
  }
63
63
  _toggleDialog(open) {
64
64
  if (open) {
65
- this._selectedBackup = this._component.inputText;
65
+ this._selectedBackup = this._component.getValue();
66
66
  if (!this._dialogService.hasOpenDialogs()) {
67
67
  this._open();
68
68
  }
@@ -374,7 +374,8 @@ class ComboboxComponent {
374
374
  }
375
375
  /** Handle dialog dismissing, closes popover and sets backup data. */
376
376
  dialogDismiss(term) {
377
- this.inputText = term;
377
+ this.inputText = this.displayFn(term);
378
+ this.setValue(term);
378
379
  this.isOpenChangeHandle(false);
379
380
  }
380
381
  /** Handle dialog approval, closes popover and propagates data changes. */
@@ -419,6 +420,7 @@ class ComboboxComponent {
419
420
  /** @hidden */
420
421
  writeValue(value) {
421
422
  this.inputTextValue = this.displayFn(value);
423
+ this.setValue(value);
422
424
  this._cdRef.markForCheck();
423
425
  }
424
426
  /** @hidden */
@@ -508,6 +510,10 @@ class ComboboxComponent {
508
510
  clearInputBtnBlur() {
509
511
  this.clearInputBtnFocused = false;
510
512
  }
513
+ /** Current select value */
514
+ getValue() {
515
+ return this._value;
516
+ }
511
517
  /** Method that picks other value moved from current one by offset, called only when combobox is closed */
512
518
  _chooseOtherItem(offset) {
513
519
  const activeValue = this._getOptionObjectByDisplayedValue(this.inputTextValue);
@@ -541,9 +547,7 @@ class ComboboxComponent {
541
547
  return contentArray.filter((item) => {
542
548
  if (item) {
543
549
  const term = this.displayFn(item).toLocaleLowerCase();
544
- let retVal;
545
- this.includes ? (retVal = term.includes(searchLower)) : (retVal = term.startsWith(searchLower));
546
- return retVal;
550
+ return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);
547
551
  }
548
552
  });
549
553
  }
@@ -558,6 +562,7 @@ class ComboboxComponent {
558
562
  this.isOpenChangeHandle(false);
559
563
  }
560
564
  if (this.fillOnSelect) {
565
+ this.setValue(term);
561
566
  this.inputText = this.displayFn(term);
562
567
  this.searchInputElement.nativeElement.value = this.inputText;
563
568
  this._cdRef.detectChanges();
@@ -582,11 +587,20 @@ class ComboboxComponent {
582
587
  }
583
588
  /** @hidden */
584
589
  _propagateChange() {
590
+ if (!this.communicateByObject) {
591
+ this.onChange(this.inputText);
592
+ }
593
+ else {
594
+ this.onChange(this.getValue());
595
+ }
596
+ }
597
+ /** @hidden */
598
+ setValue(value) {
585
599
  if (this.communicateByObject) {
586
- this.onChange(this._getOptionObjectByDisplayedValue(this.inputTextValue));
600
+ this._value = value;
587
601
  }
588
602
  else {
589
- this.onChange(this.inputTextValue);
603
+ this._value = this.displayFn(value);
590
604
  }
591
605
  }
592
606
  /** @hidden */
@@ -599,6 +613,10 @@ class ComboboxComponent {
599
613
  yield this._dynamicComponentService.createDynamicModule({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileModule, ComboboxMobileComponent, this._viewContainerRef, injector);
600
614
  });
601
615
  }
616
+ isSelected(term) {
617
+ const termValue = this.communicateByObject ? term : this.displayFn(term);
618
+ return this.getValue() === termValue;
619
+ }
602
620
  }
603
621
  ComboboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ComboboxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i1$1.DynamicComponentService }, { token: i2$1.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component });
604
622
  ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: ComboboxComponent, selector: "fd-combobox", inputs: { comboboxId: "comboboxId", inputId: "inputId", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", required: "required", dropdownValues: "dropdownValues", filterFn: "filterFn", disabled: "disabled", placeholder: "placeholder", isSearch: "isSearch", glyph: "glyph", showClearButton: "showClearButton", triggers: "triggers", closeOnOutsideClick: "closeOnOutsideClick", openOnKeyboardEvent: "openOnKeyboardEvent", state: "state", itemTemplate: "itemTemplate", groupFn: "groupFn", maxHeight: "maxHeight", searchFn: "searchFn", highlighting: "highlighting", closeOnSelect: "closeOnSelect", fillOnSelect: "fillOnSelect", autoComplete: "autoComplete", fillControlMode: "fillControlMode", communicateByObject: "communicateByObject", displayFn: "displayFn", buttonFocusable: "buttonFocusable", readOnly: "readOnly", mobile: "mobile", mobileConfig: "mobileConfig", showDropdownButton: "showDropdownButton", includes: "includes", title: "title", byline: "byline" }, outputs: { itemClicked: "itemClicked", openChange: "openChange", inputTextChange: "inputTextChange" }, host: { properties: { "class.fd-combobox-custom-class": "true", "class.fd-combobox-input": "true", "class.fd-combobox-custom-class--mobile": "mobile" } }, providers: [
@@ -610,7 +628,7 @@ ComboboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
610
628
  registerFormItemControl(ComboboxComponent),
611
629
  MenuKeyboardService,
612
630
  contentDensityObserverProviders()
613
- ], queries: [{ propertyName: "listMessages", predicate: ListMessageDirective }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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]=\"inputText === (term | displayFnPipe: displayFn)\"\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]=\"inputText === (term | displayFnPipe: displayFn)\"\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", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-combobox-input-menu-overflow{overflow:auto}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], components: [{ type: i3$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i3$1.PopoverControlComponent, selector: "fd-popover-control" }, { type: i3$1.PopoverBodyComponent, selector: "fd-popover-body" }, { type: i4.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }], directives: [{ type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$1.AutoCompleteDirective, selector: "[fd-auto-complete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { type: i4.InputGroupInputDirective, selector: "[fd-input-group-input]", inputs: ["class"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }], pipes: { "highlight": i1$1.SearchHighlightPipe, "displayFnPipe": i1$1.DisplayFnPipe, "async": i8.AsyncPipe, "listGroupPipe": ListGroupPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
631
+ ], queries: [{ propertyName: "listMessages", predicate: ListMessageDirective }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-combobox-input-menu-overflow{overflow:auto}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], components: [{ type: i3$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i3$1.PopoverControlComponent, selector: "fd-popover-control" }, { type: i3$1.PopoverBodyComponent, selector: "fd-popover-body" }, { type: i4.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { type: i7.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { type: i7.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }], directives: [{ type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1$1.AutoCompleteDirective, selector: "[fd-auto-complete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { type: i4.InputGroupInputDirective, selector: "[fd-input-group-input]", inputs: ["class"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }], pipes: { "highlight": i1$1.SearchHighlightPipe, "displayFnPipe": i1$1.DisplayFnPipe, "async": i8.AsyncPipe, "listGroupPipe": ListGroupPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
614
632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ComboboxComponent, decorators: [{
615
633
  type: Component,
616
634
  args: [{ selector: 'fd-combobox', providers: [
@@ -626,7 +644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
626
644
  '[class.fd-combobox-custom-class]': 'true',
627
645
  '[class.fd-combobox-input]': 'true',
628
646
  '[class.fd-combobox-custom-class--mobile]': 'mobile'
629
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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]=\"inputText === (term | displayFnPipe: displayFn)\"\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]=\"inputText === (term | displayFnPipe: displayFn)\"\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", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-combobox-input-menu-overflow{overflow:auto}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"] }]
647
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-combobox-input-menu-overflow{overflow:auto}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"] }]
630
648
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1$1.DynamicComponentService }, { type: i2$1.ContentDensityObserver }]; }, propDecorators: { comboboxId: [{
631
649
  type: Input
632
650
  }], inputId: [{
@@ -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 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.inputText;\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 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: string): void {\n this.inputText = 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._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 /** 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 let retVal;\n this.includes ? (retVal = term.includes(searchLower)) : (retVal = term.startsWith(searchLower));\n return retVal;\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.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._getOptionObjectByDisplayedValue(this.inputTextValue));\n } else {\n this.onChange(this.inputTextValue);\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","<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]=\"inputText === (term | displayFnPipe: displayFn)\"\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]=\"inputText === (term | displayFnPipe: displayFn)\"\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAGa,kBAAkB,GAAG,IAAI,cAAc,CAAW,mBAAmB;;MC6BrE,gCAAgC,cAAiC;IAc1E,YACI,UAAsB,EACtB,aAA4B,EACA,iBAAoC,EACxB,WAAoC;QAE5E,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;;;;;;QAXjG,iBAAY,GAAiF,IAAI,CAAC;KAYjG;IAED,QAAQ;QACJ,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACxC;;IAGD,WAAW;QACP,KAAK,CAAC,SAAS,EAAE,CAAC;KACrB;;IAGD,aAAa;QACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KACvD;;IAGD,aAAa;QACT,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;KACnC;IAEO,aAAa,CAAC,IAAa;QAC/B,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;gBACvC,IAAI,CAAC,KAAK,EAAE,CAAC;aAChB;SACJ;KACJ;;IAGO,6BAA6B;QACjC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;KAClH;;IAGO,KAAK;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,gCACzD,MAAM,EAAE,IAAI,EACZ,eAAe,EAAE,KAAK,IACnB,IAAI,CAAC,YAAY,KACpB,sBAAsB,EAAE,KAAK,EAC7B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,IAC3C,CAAC;QAEH,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;YAChD,KAAK,EAAE,CAAC,IAAI;gBACR,IAAI,IAAI,KAAK,QAAQ,EAAE;oBACnB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACpD,MAAM,CAAC,WAAW,EAAE,CAAC;iBACxB;aACJ;SACJ,CAAC,CAAC;KACN;;IAGO,4BAA4B;QAChC,IAAI,CAAC,SAAS,CAAC,WAAW;aACrB,IAAI,CACD,SAAS,CAAC,cAAc,CAAC;QACzB,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAC9B;aACA,SAAS,CAAC;YACP,IAAI;gBACA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,uCAAuC,CAAC,CAAC;gBACpG,KAAK,CAAC,KAAK,EAAE,CAAC;aACjB;YAAC,OAAO,KAAK,EAAE;gBACZ,IAAI,SAAS,EAAE,EAAE;oBACb,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;iBACjE;aACJ;SACJ,CAAC,CAAC;KACV;;oHAjGQ,uBAAuB,yEAiBpB,kBAAkB,aACN,kBAAkB;wGAlBjC,uBAAuB,mMChCpC,iqDA0CA;2FDVa,uBAAuB;kBANnC,SAAS;+BACI,oBAAoB,mBAEb,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI;;;8BAmBhC,MAAM;+BAAC,kBAAkB;;8BACzB,QAAQ;;8BAAI,MAAM;+BAAC,kBAAkB;;yBAhBb,cAAc;sBAA1C,SAAS;uBAAC,gBAAgB;;;MErBlB,oBAAoB;;iHAApB,oBAAoB;kHAApB,oBAAoB,iBALd,uBAAuB,aAC5B,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,aAEnD,uBAAuB;kHAExB,oBAAoB,YAJpB,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;2FAIrD,oBAAoB;kBANhC,QAAQ;mBAAC;oBACN,YAAY,EAAE,CAAC,uBAAuB,CAAC;oBACvC,OAAO,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC;oBAC9D,eAAe,EAAE,CAAC,uBAAuB,CAAC;oBAC1C,OAAO,EAAE,CAAC,uBAAuB,CAAC;iBACrC;;;MCJY,aAAa;IACtB,SAAS,CAAC,KAAY,EAAE,KAAuB;QAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/E;;0GAHQ,aAAa;wGAAb,aAAa;2FAAb,aAAa;kBAHzB,IAAI;mBAAC;oBACF,IAAI,EAAE,eAAe;iBACxB;;;AC+CD,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB;;;;;;;;;;;;MAkCa,iBAAiB;;IA0Q1B,YACqB,MAAyB,EACzB,SAAmB,EACnB,iBAAmC,EACnC,wBAAiD,EACzD,uBAA+C;QAJvC,WAAM,GAAN,MAAM,CAAmB;QACzB,cAAS,GAAT,SAAS,CAAU;QACnB,sBAAiB,GAAjB,iBAAiB,CAAkB;QACnC,6BAAwB,GAAxB,wBAAwB,CAAyB;QACzD,4BAAuB,GAAvB,uBAAuB,CAAwB;;QA1Q5D,eAAU,GAAG,eAAe,gBAAgB,EAAE,EAAE,CAAC;;QAIjD,YAAO,GAAG,EAAE,CAAC;;QAYb,aAAQ,GAAG,KAAK,CAAC;;QAIjB,mBAAc,GAAU,EAAE,CAAC;;;QAK3B,aAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;;;;QAc/B,aAAQ,GAAG,KAAK,CAAC;;QAIjB,UAAK,GAAG,uBAAuB,CAAC;;;;QAMhC,oBAAe,GAAG,IAAI,CAAC;;;;;QAOvB,aAAQ,GAAa,EAAE,CAAC;;QAIxB,wBAAmB,GAAG,IAAI,CAAC;;;;QAM3B,wBAAmB,GAAG,IAAI,CAAC;;QAwB3B,cAAS,GAAG,MAAM,CAAC;;QAQnB,iBAAY,GAAG,IAAI,CAAC;;QAGpB,oBAAe,GAAG,IAAI,CAAC;;QAIvB,kBAAa,GAAG,IAAI,CAAC;;QAIrB,iBAAY,GAAG,IAAI,CAAC;;QAIpB,iBAAY,GAAG,IAAI,CAAC;;;;;;;QASpB,oBAAe,GAAoB,UAAU,CAAC;;;;QAM9C,wBAAmB,GAAG,KAAK,CAAC;;;;;QAO5B,cAAS,GAAG,IAAI,CAAC,eAAe,CAAC;;;;;QAOjC,oBAAe,GAAG,IAAI,CAAC;;QAIvB,aAAQ,GAAG,KAAK,CAAC;;QAIjB,WAAM,GAAG,KAAK,CAAC;;QAQf,uBAAkB,GAAG,IAAI,CAAC;;;;;QAO1B,aAAQ,GAAG,KAAK,CAAC;;QAUjB,WAAM,GAAG,KAAK,CAAC;;QAIN,gBAAW,GAA+B,IAAI,YAAY,EAAgB,CAAC;;QAI3E,eAAU,GAA0B,IAAI,YAAY,EAAW,CAAC;;QAIzE,oBAAe,GAAyB,IAAI,YAAY,EAAU,CAAC;;QA+B1D,mBAAc,GAAa;YAChC,MAAM;YACN,KAAK;YACL,UAAU;YACV,WAAW;YACX,UAAU;YACV,QAAQ;YACR,OAAO;YACP,GAAG;YACH,KAAK;SACR,CAAC;;QAGO,gBAAW,GAAa,CAAC,MAAM,CAAC,CAAC;;QAG1C,SAAI,GAAG,KAAK,CAAC;;;;;QAMb,eAAU,GAAG,KAAK,CAAC;;QAGnB,oBAAe,GAAU,EAAE,CAAC;;QAG5B,mBAAc,GAAG,EAAE,CAAC;;QAGpB,yBAAoB,GAAG,KAAK,CAAC;;QAGrB,mBAAc,GAAG,IAAI,YAAY,EAAE,CAAC;;QAG5C,aAAQ,GAAyB,SAAQ,CAAC;;QAG1C,cAAS,GAAG,SAAc,CAAC;KASvB;;IAGJ,QAAQ;QACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;SACnC;QACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;KAClC;;IAGD,WAAW,CAAC,OAAsB;QAC9B,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvE,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;KACJ;;IAGD,WAAW;QACP,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;KACrC;;IAGD,eAAe;QACX,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;KACJ;;IAGD,qBAAqB,CAAC,KAAoB;QACtC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,OAAO;SACV;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACf,IAAI,CAAC,QAAQ,EAAE,CAAC;aACnB;SACJ;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;YAC7C,IAAI,KAAK,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC7B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;aACjC;YACD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;gBACjC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACvC;iBAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;aAC5B;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;YAC3C,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;aAAM,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE;YACnD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC/B,KAAK,CAAC,eAAe,EAAE,CAAC;SAC3B;aAAM,IACH,IAAI,CAAC,mBAAmB;YACxB,CAAC,KAAK,CAAC,OAAO;YACd,CAAC,KAAK,CAAC,MAAM;YACb,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAChD;YACE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;gBAClG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACvC;SACJ;KACJ;;IAGD,oBAAoB,CAAC,KAAoB,EAAE,KAAU;QACjD,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACpE,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAClC;KACJ;;IAGD,kBAAkB,CAAC,KAAU;QACzB,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;YACtB,MAAM,KAAK,GAAW,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC,CAAC;YAClF,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;SACjD;KACJ;;IAGD,aAAa,CAAC,IAAY;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;;IAGD,aAAa;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;;IAGD,IAAI,YAAY;;QACZ,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,IAAI,GAAG,MAAM,MAAK,CAAC,CAAC;KACjE;;IAGD,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;KAC9B;;IAGD,IAAI,SAAS,CAAC,KAAa;QACvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;KACpB;;IAGD,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,uBAAuB,CAAC;KAC7D;;IAGD,sBAAsB;QAClB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC3B;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;KAC/B;;IAGD,UAAU,CAAC,KAAU;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KAC9B;;IAGD,gBAAgB,CAAC,EAAwB;QACrC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtB;;IAGD,iBAAiB,CAAC,EAAc;QAC5B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACvB;;IAGD,qBAAqB,CAAC,SAA+B;QACjD,IAAI,SAAS,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACjD;KACJ;;IAGD,sBAAsB;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC;SAC3C;KACJ;;IAGD,oBAAoB;;QAEhB,IAAI,IAAI,CAAC,MAAM,EAAE;YACb,OAAO;SACV;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE,CAAC;SACnB;QACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YACjC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACvC;KACJ;;IAGD,kBAAkB,CAAC,MAAe;;QAE9B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAChC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACtB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAChC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;SACjD;QAED,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;KAC/B;;IAGD,gBAAgB,CAAC,UAAmB;QAChC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;KAC/B;;IAGD,kBAAkB,CAAC,KAAwB;QACvC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,sBAAsB,EAAE,CAAC;SACjC;QACD,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;YACpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAClC;KACJ;;IAGD,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACZ,IAAI,CAAC,kBAAkB,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK;gBACjD,UAAU,EAAE,KAAK;aACpB,CAAC,CAAC;SACN;KACJ;;IAGD,kBAAkB;QACd,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;KACpC;;IAGD,iBAAiB;QACb,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;KACrC;;IAGO,gBAAgB,CAAC,MAAc;QACnC,MAAM,WAAW,GAAQ,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACpF,MAAM,KAAK,GAAW,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW,CAAC,CAAC;QACtF,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;SAChE;KACJ;;IAGO,qBAAqB;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;KAC9C;;IAGO,iBAAiB;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YACtF,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;aACvC;SACJ;KACJ;;IAGO,eAAe,CAAC,GAAQ;QAC5B,OAAO,GAAG,CAAC;KACd;;IAGO,cAAc,CAAC,YAAmB,EAAE,UAAe;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YAChC,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACnD,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI;gBAC5B,IAAI,IAAI,EAAE;oBACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBACtD,IAAI,MAAM,CAAC;oBACX,IAAI,CAAC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;oBAChG,OAAO,MAAM,CAAC;iBACjB;aACJ,CAAC,CAAC;SACN;aAAM,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;YACvC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,UAAU,CAAC,CAAC;SAC7D;QACD,OAAO,YAAY,CAAC;KACvB;;IAGO,mBAAmB,CAAC,IAAS;QACjC,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B;SACJ;QACD,IAAI,CAAC,sBAAsB,EAAE,CAAC;KACjC;;IAGO,gCAAgC,CAAC,YAAoB;QACzD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC,CAAC;KACtF;;IAGO,uBAAuB;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SAC7E;aAAM;YACH,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;SAC9C;KACJ;;IAGO,gBAAgB;QACpB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;SAC7E;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACtC;KACJ;;IAGa,gBAAgB;;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC7B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC5D,MAAM,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CACnD,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAC1E,oBAAoB,EACpB,uBAAuB,EACvB,IAAI,CAAC,iBAAiB,EACtB,QAAQ,CACX,CAAC;SACL;KAAA;;8GA5mBQ,iBAAiB;kGAAjB,iBAAiB,kvCAlBf;QACP;YACI,OAAO,EAAE,iBAAiB;YAC1B,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;YAChD,KAAK,EAAE,IAAI;SACd;QACD,uBAAuB,CAAC,iBAAiB,CAAC;QAC1C,mBAAmB;QACnB,+BAA+B,EAAE;KACpC,uDA4NgB,oBAAoB,4EAhB1B,aAAa,8LAQb,gBAAgB,6EAIhB,mBAAmB,yQCzSlC,8hOAyKA;2FD/Ea,iBAAiB;kBAtB7B,SAAS;+BACI,aAAa,aAGZ;wBACP;4BACI,OAAO,EAAE,iBAAiB;4BAC1B,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;4BAChD,KAAK,EAAE,IAAI;yBACd;wBACD,uBAAuB,mBAAmB;wBAC1C,mBAAmB;wBACnB,+BAA+B,EAAE;qBACpC,QACK;wBACF,kCAAkC,EAAE,MAAM;wBAC1C,2BAA2B,EAAE,MAAM;wBACnC,0CAA0C,EAAE,QAAQ;qBACvD,iBACc,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;6OAO/C,UAAU;sBADT,KAAK;gBAKN,OAAO;sBADN,KAAK;gBAKN,SAAS;sBADR,KAAK;gBAKN,cAAc;sBADb,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,cAAc;sBADb,KAAK;gBAMN,QAAQ;sBADP,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,WAAW;sBADV,KAAK;gBAON,QAAQ;sBADP,KAAK;gBAKN,KAAK;sBADJ,KAAK;gBAON,eAAe;sBADd,KAAK;gBAQN,QAAQ;sBADP,KAAK;gBAKN,mBAAmB;sBADlB,KAAK;gBAON,mBAAmB;sBADlB,KAAK;gBAQN,KAAK;sBADJ,KAAK;gBAQN,YAAY;sBADX,KAAK;gBAON,OAAO;sBADN,KAAK;gBAKN,SAAS;sBADR,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,YAAY;sBADX,KAAK;gBAQN,aAAa;sBADZ,KAAK;gBAKN,YAAY;sBADX,KAAK;gBAKN,YAAY;sBADX,KAAK;gBAUN,eAAe;sBADd,KAAK;gBAON,mBAAmB;sBADlB,KAAK;gBAQN,SAAS;sBADR,KAAK;gBAQN,eAAe;sBADd,KAAK;gBAKN,QAAQ;sBADP,KAAK;gBAKN,MAAM;sBADL,KAAK;gBAKN,YAAY;sBADX,KAAK;gBAKN,kBAAkB;sBADjB,KAAK;gBAQN,QAAQ;sBADP,KAAK;gBAON,KAAK;sBADJ,KAAK;gBAKN,MAAM;sBADL,KAAK;gBAKG,WAAW;sBADnB,MAAM;gBAKE,UAAU;sBADlB,MAAM;gBAKP,eAAe;sBADd,MAAM;gBAKP,aAAa;sBADZ,SAAS;uBAAC,aAAa;gBAKxB,kBAAkB;sBADjB,SAAS;uBAAC,oBAAoB;gBAK/B,gBAAgB;sBADf,SAAS;uBAAC,gBAAgB;gBAK3B,UAAU;sBADT,SAAS;uBAAC,mBAAmB;gBAK9B,YAAY;sBADX,eAAe;uBAAC,oBAAoB;gBAKrC,eAAe;sBADd,SAAS;uBAAC,iBAAiB;gBAK5B,YAAY;sBADX,SAAS;uBAAC,cAAc;;;MExShB,kDAAkD,0BAA0B;IACrF,YAAoB,KAAiB;QACjC,KAAK,CAAC,aAAa,CAAC,CAAC;QADL,UAAK,GAAL,KAAK,CAAY;KAEpC;;sIAHQ,yCAAyC;0HAAzC,yCAAyC,+CAPvC;QACP;YACI,OAAO,EAAE,yBAAyB;YAClC,WAAW,EAAE,UAAU,CAAC,MAAM,yCAAyC,CAAC;SAC3E;KACJ;2FAEQ,yCAAyC;kBAVrD,SAAS;mBAAC;;oBAEP,QAAQ,EAAE,sBAAsB;oBAChC,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,yBAAyB;4BAClC,WAAW,EAAE,UAAU,CAAC,+CAA+C,CAAC;yBAC3E;qBACJ;iBACJ;;;MCuBY,cAAc;;2GAAd,cAAc;4GAAd,cAAc,iBAhBR,iBAAiB,EAAE,aAAa,EAAE,yCAAyC,aAEtF,YAAY;QACZ,aAAa;QACb,WAAW;QACX,UAAU;QACV,UAAU;QACV,YAAY;QACZ,gBAAgB;QAChB,UAAU;QACV,UAAU;QACV,kBAAkB;QAClB,oBAAoB,aAEd,iBAAiB,EAAE,aAAa,EAAE,yCAAyC,EAAE,oBAAoB;4GAElG,cAAc,YAfd;YACL,YAAY;YACZ,aAAa;YACb,WAAW;YACX,UAAU;YACV,UAAU;YACV,YAAY;YACZ,gBAAgB;YAChB,UAAU;YACV,UAAU;YACV,kBAAkB;YAClB,oBAAoB;SACvB,EACsF,oBAAoB;2FAElG,cAAc;kBAjB1B,QAAQ;mBAAC;oBACN,YAAY,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,yCAAyC,CAAC;oBAC3F,OAAO,EAAE;wBACL,YAAY;wBACZ,aAAa;wBACb,WAAW;wBACX,UAAU;wBACV,UAAU;wBACV,YAAY;wBACZ,gBAAgB;wBAChB,UAAU;wBACV,UAAU;wBACV,kBAAkB;wBAClB,oBAAoB;qBACvB;oBACD,OAAO,EAAE,CAAC,iBAAiB,EAAE,aAAa,EAAE,yCAAyC,EAAE,oBAAoB,CAAC;iBAC/G;;;AClCD;;;;;;"}
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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"}