@fundamental-ngx/core 0.35.3 → 0.35.4-rc.2

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 (173) 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/breadcrumb-item.component.d.ts +20 -13
  8. package/breadcrumb/breadcrumb.component.d.ts +46 -34
  9. package/breadcrumb/breadcrumb.module.d.ts +3 -1
  10. package/breadcrumb/esm2020/breadcrumb-item.component.mjs +44 -23
  11. package/breadcrumb/esm2020/breadcrumb.component.mjs +93 -88
  12. package/breadcrumb/esm2020/breadcrumb.module.mjs +12 -4
  13. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
  14. package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  15. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
  16. package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  17. package/breadcrumb/package.json +1 -1
  18. package/busy-indicator/package.json +1 -1
  19. package/button/package.json +1 -1
  20. package/calendar/package.json +1 -1
  21. package/card/package.json +1 -1
  22. package/carousel/package.json +1 -1
  23. package/checkbox/package.json +1 -1
  24. package/combobox/package.json +1 -1
  25. package/content-density/package.json +3 -3
  26. package/date-picker/package.json +1 -1
  27. package/datetime/package.json +1 -1
  28. package/datetime-picker/package.json +1 -1
  29. package/dialog/package.json +1 -1
  30. package/dynamic-page/package.json +1 -1
  31. package/dynamic-side-content/package.json +1 -1
  32. package/esm2020/breadcrumb/breadcrumb-item.component.mjs +44 -23
  33. package/esm2020/breadcrumb/breadcrumb.component.mjs +93 -88
  34. package/esm2020/breadcrumb/breadcrumb.module.mjs +12 -4
  35. package/esm2020/overflow-layout/directives/overflow-expand.directive.mjs +6 -4
  36. package/esm2020/overflow-layout/directives/overflow-item-container-ref.directive.mjs +2 -2
  37. package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +20 -8
  38. package/esm2020/overflow-layout/directives/overflow-layout-item-container.directive.mjs +30 -3
  39. package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +12 -3
  40. package/esm2020/overflow-layout/index.mjs +3 -1
  41. package/esm2020/overflow-layout/interfaces/overflow-expand.interface.mjs +1 -1
  42. package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +1 -1
  43. package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
  44. package/esm2020/overflow-layout/overflow-layout.component.mjs +83 -157
  45. package/esm2020/overflow-layout/overflow-layout.service.mjs +241 -0
  46. package/esm2020/time/time-column/time-column.component.mjs +7 -8
  47. package/esm2020/utils/functions/resize-observable.mjs +9 -2
  48. package/facets/package.json +1 -1
  49. package/feed-input/package.json +1 -1
  50. package/feed-list-item/package.json +1 -1
  51. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
  52. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  53. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
  54. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  55. package/fesm2015/fundamental-ngx-core-time.mjs +6 -7
  56. package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  57. package/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
  58. package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
  60. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  61. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
  62. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  63. package/fesm2020/fundamental-ngx-core-time.mjs +6 -7
  64. package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
  66. package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  67. package/file-uploader/package.json +1 -1
  68. package/fixed-card-layout/package.json +1 -1
  69. package/flexible-column-layout/package.json +1 -1
  70. package/form/package.json +1 -1
  71. package/formatted-text/package.json +1 -1
  72. package/grid-list/package.json +1 -1
  73. package/icon/package.json +1 -1
  74. package/illustrated-message/package.json +1 -1
  75. package/infinite-scroll/package.json +1 -1
  76. package/info-label/package.json +1 -1
  77. package/inline-help/package.json +1 -1
  78. package/input-group/package.json +1 -1
  79. package/layout-grid/package.json +1 -1
  80. package/layout-panel/package.json +1 -1
  81. package/link/package.json +1 -1
  82. package/list/package.json +1 -1
  83. package/menu/package.json +1 -1
  84. package/message-box/package.json +1 -1
  85. package/message-strip/package.json +1 -1
  86. package/message-toast/package.json +1 -1
  87. package/micro-process-flow/package.json +1 -1
  88. package/mobile-mode/package.json +1 -1
  89. package/multi-input/package.json +1 -1
  90. package/nested-list/package.json +1 -1
  91. package/notification/package.json +1 -1
  92. package/object-identifier/package.json +1 -1
  93. package/object-marker/package.json +1 -1
  94. package/object-number/package.json +1 -1
  95. package/object-status/package.json +1 -1
  96. package/overflow-layout/directives/overflow-expand.directive.d.ts +6 -5
  97. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +16 -6
  98. package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +13 -1
  99. package/overflow-layout/directives/overflow-layout-item.directive.d.ts +7 -2
  100. package/overflow-layout/esm2020/directives/overflow-expand.directive.mjs +6 -4
  101. package/overflow-layout/esm2020/directives/overflow-item-container-ref.directive.mjs +2 -2
  102. package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +20 -8
  103. package/overflow-layout/esm2020/directives/overflow-layout-item-container.directive.mjs +30 -3
  104. package/overflow-layout/esm2020/directives/overflow-layout-item.directive.mjs +12 -3
  105. package/overflow-layout/esm2020/index.mjs +3 -1
  106. package/overflow-layout/esm2020/interfaces/overflow-expand.interface.mjs +1 -1
  107. package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +1 -1
  108. package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
  109. package/overflow-layout/esm2020/overflow-layout.component.mjs +83 -157
  110. package/overflow-layout/esm2020/overflow-layout.service.mjs +241 -0
  111. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
  112. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  113. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
  114. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  115. package/overflow-layout/index.d.ts +2 -0
  116. package/overflow-layout/interfaces/overflow-expand.interface.d.ts +4 -4
  117. package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +14 -3
  118. package/overflow-layout/interfaces/overflow-item.interface.d.ts +2 -1
  119. package/overflow-layout/overflow-layout.component.d.ts +19 -31
  120. package/overflow-layout/overflow-layout.service.d.ts +90 -0
  121. package/overflow-layout/package.json +14 -13
  122. package/overflow-layout/tokens/overflow-expand.token.d.ts +1 -1
  123. package/overflow-layout/tokens/overflow-item-ref.token.d.ts +1 -1
  124. package/package.json +1 -1
  125. package/pagination/package.json +1 -1
  126. package/panel/package.json +1 -1
  127. package/popover/package.json +1 -1
  128. package/product-switch/package.json +1 -1
  129. package/progress-indicator/package.json +1 -1
  130. package/quick-view/package.json +1 -1
  131. package/radio/package.json +1 -1
  132. package/rating-indicator/package.json +1 -1
  133. package/resizable-card-layout/package.json +1 -1
  134. package/scroll-spy/package.json +1 -1
  135. package/scrollbar/package.json +1 -1
  136. package/segmented-button/package.json +1 -1
  137. package/select/package.json +1 -1
  138. package/shared/package.json +1 -1
  139. package/shellbar/package.json +1 -1
  140. package/side-navigation/package.json +1 -1
  141. package/slider/package.json +1 -1
  142. package/split-button/package.json +1 -1
  143. package/splitter/package.json +1 -1
  144. package/status-indicator/package.json +1 -1
  145. package/step-input/package.json +1 -1
  146. package/switch/package.json +1 -1
  147. package/table/package.json +1 -1
  148. package/tabs/package.json +1 -1
  149. package/text/package.json +1 -1
  150. package/theming/package.json +1 -1
  151. package/tile/package.json +1 -1
  152. package/time/esm2020/time-column/time-column.component.mjs +7 -8
  153. package/time/fesm2015/fundamental-ngx-core-time.mjs +6 -7
  154. package/time/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
  155. package/time/fesm2020/fundamental-ngx-core-time.mjs +6 -7
  156. package/time/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
  157. package/time/package.json +1 -1
  158. package/time/time-column/time-column.component.d.ts +1 -0
  159. package/time-picker/package.json +1 -1
  160. package/timeline/package.json +1 -1
  161. package/title/package.json +1 -1
  162. package/token/package.json +1 -1
  163. package/toolbar/package.json +1 -1
  164. package/tree/package.json +1 -1
  165. package/upload-collection/package.json +1 -1
  166. package/utils/esm2020/functions/resize-observable.mjs +9 -2
  167. package/utils/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
  168. package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
  169. package/utils/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
  170. package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
  171. package/utils/package.json +1 -1
  172. package/vertical-navigation/package.json +1 -1
  173. package/wizard/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-overflow-layout.mjs","sources":["../../../../../libs/core/src/lib/overflow-layout/directives/overflow-item-container-ref.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-item-container.directive.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-container.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-expand.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-item-ref.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-item.token.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-popover-content.directive.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.component.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.component.html","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-item-ref.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-expand.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-item.directive.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.module.ts","../../../../../libs/core/src/lib/overflow-layout/fundamental-ngx-core-overflow-layout.ts"],"sourcesContent":["import { Directive, ElementRef, TemplateRef, ViewContainerRef, ViewRef } from '@angular/core';\n\n/**\n * Directive to hide component without actual destroying of the component instance.\n */\n@Directive({\n selector: '[fdOverflowItemContainerRef]'\n})\nexport class OverflowItemContainerRefDirective {\n /** @hidden */\n private _viewRef: ViewRef;\n\n /** @hidden */\n private _detached = false;\n\n /** @hidden */\n private _hidden = false;\n\n /**\n * Shows or hides element without destroying the view itself.\n * @param value\n */\n set hidden(value: boolean) {\n if (this._hidden === value) {\n return;\n }\n this._hidden = value;\n if (value && !this._detached) {\n this._viewRef = this._viewContainerRef.detach()!;\n this._detached = true;\n } else if (!value && this._viewRef && this._detached) {\n this._viewRef = this._viewContainerRef.insert(this._viewRef);\n this._detached = false;\n }\n }\n\n /** @hidden */\n constructor(\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef,\n private _elmRef: ElementRef\n ) {\n // Create embedded view right away and manipulate its visibility later.\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n}\n","import { ContentChild, Directive, ElementRef, HostBinding } from '@angular/core';\nimport { OverflowItemContainerRefDirective } from './overflow-item-container-ref.directive';\n\n@Directive({\n selector: '[fdOverflowLayoutItemContainer]'\n})\nexport class OverflowLayoutItemContainerDirective {\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout__item';\n\n /**\n * Container reference.\n */\n @ContentChild(OverflowItemContainerRefDirective)\n containerRef: OverflowItemContainerRefDirective;\n\n /** @hidden */\n constructor(public elementRef: ElementRef) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { OverflowContainer } from '../interfaces/overflow-container.interface';\n\nexport const FD_OVERFLOW_CONTAINER = new InjectionToken<OverflowContainer>('FdOverflowContainer');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowExpand } from '../interfaces/overflow-expand.interface';\n\nexport const FD_OVERFLOW_EXPAND = new InjectionToken<OverflowExpand>('FdOverflowLayoutExpand');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\n\nexport const FD_OVERFLOW_ITEM_REF = new InjectionToken<OverflowItemRef>('OverflowLayoutItemRef');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\n\nexport const FD_OVERFLOW_ITEM = new InjectionToken<OverflowItem>('FdOverflowItem');\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, HostBinding, HostListener, Inject, Input } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { OverflowContainer } from '../interfaces/overflow-container.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { OverflowPopoverContent } from '../interfaces/overflow-popover-content.interface';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { FD_OVERFLOW_CONTAINER } from '../tokens/overflow-container.token';\n\n/**\n * Directive to wrap Overlay Layout \"More\" popover content.\n * Used to apply keyboard navigation through the items.\n */\n@Directive({\n selector: '[fdOverflowLayoutPopoverContent]'\n})\nexport class OverflowLayoutPopoverContentDirective implements OverflowPopoverContent {\n /**\n * Array of hidden items.\n */\n @Input()\n set items(value: OverflowItemRef[]) {\n this._items = value;\n this._keyboardEventsManager = new FocusKeyManager(\n this._items.filter((item) => item.overflowItem.focusable).map((item) => item.overflowItem)\n )\n .withWrap()\n .withHorizontalOrientation('ltr');\n }\n\n /** @hidden */\n private _keyboardEventsManager: FocusKeyManager<OverflowItem>;\n\n /** @hidden */\n private _items: OverflowItemRef[];\n\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout__popover-container';\n\n /** @hidden */\n constructor(@Inject(FD_OVERFLOW_CONTAINER) private _overflowContainer: OverflowContainer) {\n this._overflowContainer?.registerPopoverContent(this);\n }\n\n /** @hidden */\n @HostListener('keyup', ['$event'])\n keyUpHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, TAB)) {\n const index = this._items.findIndex((item) => item.elementRef.nativeElement === event.target);\n if (index !== -1) {\n this._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n event.preventDefault();\n\n // passing the event to key manager, so we get a change fired\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /**\n * Focuses on the first tabbable element inside directive's element.\n */\n focusFirstTabbableElement(): void {\n this._keyboardEventsManager.setActiveItem(0);\n }\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChildren,\n QueryList,\n ChangeDetectorRef,\n ContentChild,\n HostBinding,\n ViewChild,\n ElementRef,\n NgZone,\n Output,\n EventEmitter,\n HostListener,\n Optional,\n TemplateRef,\n ViewChildren,\n AfterViewInit,\n OnDestroy,\n Input\n} from '@angular/core';\nimport { KeyUtil, resizeObservable, RtlService } from '@fundamental-ngx/core/utils';\nimport { debounceTime, distinctUntilChanged, filter, skip, Subject, Subscription } from 'rxjs';\nimport { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';\nimport { OverflowContainer } from './interfaces/overflow-container.interface';\nimport { OverflowExpand } from './interfaces/overflow-expand.interface';\nimport { OverflowItemRef } from './interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from './interfaces/overflow-item.interface';\nimport { OverflowPopoverContent } from './interfaces/overflow-popover-content.interface';\nimport { FD_OVERFLOW_CONTAINER } from './tokens/overflow-container.token';\nimport { FD_OVERFLOW_EXPAND } from './tokens/overflow-expand.token';\nimport { FD_OVERFLOW_ITEM_REF } from './tokens/overflow-item-ref.token';\nimport { FD_OVERFLOW_ITEM } from './tokens/overflow-item.token';\n\n@Component({\n selector: 'fd-overflow-layout',\n templateUrl: './overflow-layout.component.html',\n styleUrls: ['./overflow-layout.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_OVERFLOW_CONTAINER,\n useExisting: OverflowLayoutComponent\n }\n ]\n})\nexport class OverflowLayoutComponent implements AfterViewInit, OnDestroy, OverflowContainer {\n /**\n * Maximum amount of visible items.\n */\n @Input()\n set maxVisibleItems(value: number) {\n if (value === this._maxVisibleItems) {\n return;\n }\n this._maxVisibleItems = value;\n this.triggerRecalculation();\n }\n\n get maxVisibleItems(): number {\n return this._maxVisibleItems;\n }\n\n /**\n * Event, triggered when amount of visible items has been changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event, triggered when amount of hidden items has been changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /**\n * @hidden\n * List of items to display.\n */\n @ContentChildren(FD_OVERFLOW_ITEM_REF)\n _items: QueryList<OverflowItemRef>;\n\n /**\n * @hidden\n * Template for the custom \"More\" button.\n */\n @ContentChild(FD_OVERFLOW_EXPAND)\n _moreButton: OverflowExpand;\n\n /**\n * @hidden\n * List of items that can be focused.\n */\n @ContentChildren(FD_OVERFLOW_ITEM)\n _overflowItems: QueryList<OverflowItem>;\n\n /**\n * @hidden\n * List of rendered items.\n */\n @ViewChildren(OverflowLayoutItemContainerDirective)\n _visibleItems: QueryList<OverflowLayoutItemContainerDirective>;\n\n /**\n * @hidden\n * Items wrapper directive.\n */\n @ViewChild('itemsWrapper')\n _itemsWrapper: ElementRef<HTMLElement>;\n\n /**\n * @hidden\n * Layout container element.\n */\n @ViewChild('layoutContainer')\n _layoutContainer: ElementRef<HTMLDivElement>;\n\n /**\n * @hidden\n * \"More\" button container element.\n */\n @ViewChild('showMoreContainer')\n _showMoreContainer: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n _allItems: OverflowItemRef[] = [];\n\n /** @hidden */\n _hiddenItems: OverflowItemRef[] = [];\n\n /** @hidden */\n _showMore = false;\n\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout';\n\n /** @hidden */\n private _keyboardEventsManager: FocusKeyManager<OverflowItem>;\n\n /** @hidden */\n private _listenToItemResize = true;\n\n /** @hidden */\n private readonly _subscription = new Subscription();\n\n /** @hidden */\n private _overflowPopoverContent: OverflowPopoverContent;\n\n /** @hidden */\n private _fillTrigger$ = new Subject<void>();\n\n /** @hidden */\n private _dir: 'rtl' | 'ltr' = 'ltr';\n\n /** @hidden */\n private _maxVisibleItems = Infinity;\n\n /** @hidden */\n constructor(\n private _cdr: ChangeDetectorRef,\n private _zone: NgZone,\n private _elRef: ElementRef,\n @Optional() private _rtlService: RtlService\n ) {\n this._subscription.add(this._fillTrigger$.pipe(debounceTime(30)).subscribe(() => this._fitVisibleItems()));\n }\n\n /**\n * Triggers layout recalculation of the items.\n */\n triggerRecalculation(): void {\n this._fillTrigger$.next();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n /** @hidden */\n @HostListener('keyup', ['$event'])\n private _keyUpHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, TAB)) {\n const index = this._allItems.findIndex(\n (item) => item.overflowItem?.focusable && item.elementRef.nativeElement === event.target\n );\n if (index !== -1) {\n this._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n event.preventDefault();\n\n // passing the event to key manager so, we get a change fired\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /**\n * Sets current focused element.\n * @param element Element that needs to be focused.\n */\n setFocusedElement(element: OverflowItem): void {\n const index = this._overflowItems.toArray().findIndex((item) => item === element);\n\n if (index !== -1) {\n this._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n /**\n * Registers popover content directive for main component.\n * @param content {OverflowPopoverContent} directive\n */\n registerPopoverContent(content: OverflowPopoverContent): void {\n this._overflowPopoverContent = content;\n }\n\n /** @hidden */\n _itemsTrackFn(_: number, item: OverflowItemRef): TemplateRef<any> {\n return item.templateRef;\n }\n\n /** @hidden */\n _onPopoverStateChange(opened: boolean): void {\n if (opened) {\n this._overflowPopoverContent?.focusFirstTabbableElement();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._fitVisibleItems();\n this._setFocusKeyManager();\n this._listenToChanges();\n this._subscribeToRtl();\n }\n\n /** @hidden */\n private _listenToChanges(): void {\n this._subscription.add(\n this._items.changes.subscribe(() => {\n setTimeout(() => {\n this._fitVisibleItems();\n });\n })\n );\n\n this._listenToSizeChanges(this._elRef.nativeElement, this._itemsWrapper.nativeElement);\n }\n\n /** @hidden */\n private _listenToSizeChanges(...elements: HTMLElement[]): void {\n elements.forEach((element) =>\n this._subscription.add(\n resizeObservable(element)\n .pipe(\n skip(1),\n filter(() => this._listenToItemResize),\n distinctUntilChanged(),\n debounceTime(30)\n )\n .subscribe(() => {\n setTimeout(() => {\n this._fitVisibleItems();\n });\n })\n )\n );\n }\n\n /** @hidden */\n private _fitVisibleItems(): void {\n this._listenToItemResize = false;\n this._allItems = this._items.toArray();\n this._visibleItems.forEach((i) => (i.containerRef.hidden = false));\n this._allItems.forEach((item, index) => {\n item.hidden = false;\n item.index = index;\n });\n this._cdr.detectChanges();\n const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;\n const itemsContainerWidth = this._itemsWrapper.nativeElement.getBoundingClientRect().width;\n\n if (\n containerWidth >= itemsContainerWidth &&\n this._visibleItems.length <= this.maxVisibleItems &&\n this._hiddenItems.length === 0\n ) {\n this._showMore = false;\n this._cdr.detectChanges();\n this._listenToItemResize = true;\n return;\n }\n this._showMore = true;\n let fittingElmCount = 0;\n let fittingElmsWidth = 0;\n let shouldHideItems = false;\n this._cdr.detectChanges();\n\n const showMoreContainerWidth = this._showMoreContainer.nativeElement.getBoundingClientRect().width;\n let layoutWidth = this._layoutContainer.nativeElement.getBoundingClientRect().width;\n\n // Try to find all forced visible items\n const forcedItemsIndexes = this._getForcedItemsIndexes();\n\n forcedItemsIndexes.forEach((itemIndex) => {\n const container = this._visibleItems.get(itemIndex);\n if (!container) {\n return;\n }\n const elementSize = this._getElementWidth(container.elementRef.nativeElement);\n\n layoutWidth -= elementSize;\n });\n\n if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {\n console.warn(\n 'There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.'\n );\n }\n\n this._visibleItems.forEach((item, index) => {\n const itemRef = this._allItems[index];\n if (shouldHideItems && !itemRef.overflowItem.forceVisibility) {\n item.containerRef.hidden = true;\n itemRef.hidden = true;\n return;\n }\n\n const elementSize = this._getElementWidth(item.elementRef.nativeElement);\n const combinedWidth = fittingElmsWidth + elementSize;\n\n if (\n (combinedWidth <= layoutWidth ||\n (item === this._visibleItems.last && combinedWidth <= layoutWidth + showMoreContainerWidth)) &&\n fittingElmCount < this.maxVisibleItems\n ) {\n fittingElmsWidth += elementSize;\n fittingElmCount++;\n } else if (!itemRef.overflowItem.forceVisibility) {\n shouldHideItems = true;\n item.containerRef.hidden = true;\n itemRef.hidden = true;\n }\n });\n\n this._hiddenItems = this._allItems.filter((i) => i.hidden);\n this.visibleItemsCount.emit(this._allItems.filter((i) => !i.hidden).length);\n this.hiddenItemsCount.emit(this._hiddenItems.length);\n\n this._showMore = this._hiddenItems.length > 0;\n\n this._cdr.detectChanges();\n\n this._listenToItemResize = true;\n }\n\n /** @hidden */\n private _setFocusKeyManager(): void {\n this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';\n this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)\n .withWrap()\n .withHorizontalOrientation(this._dir)\n .skipPredicate((item) => !item.focusable || item.hidden);\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n if (!this._rtlService) {\n return;\n }\n\n const rtlSub = this._rtlService.rtl.subscribe((isRtl) => {\n this._dir = isRtl ? 'rtl' : 'ltr';\n\n this._keyboardEventsManager = this._keyboardEventsManager.withHorizontalOrientation(isRtl ? 'rtl' : 'ltr');\n });\n\n this._subscription.add(rtlSub);\n }\n\n /** @hidden */\n private _getForcedItemsIndexes(): number[] {\n return this._allItems\n .map((item, index) => (item.overflowItem.forceVisibility ? index : -1))\n .filter((i) => i > -1);\n }\n\n /**\n * @hidden\n * Returns combined width of the element including margins.\n * @param element Element to calculate width of.\n */\n private _getElementWidth(element: HTMLElement): number {\n const elementStyle = getComputedStyle(element);\n const elementWidth = element.getBoundingClientRect().width;\n const elementSize = elementWidth + parseFloat(elementStyle.marginLeft) + parseFloat(elementStyle.marginRight);\n\n return elementSize;\n }\n}\n","<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer>\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.hidden, index: item.index }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<div class=\"fd-overflow-layout__more\" *ngIf=\"_showMore\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item.hidden, index: item.index }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n</div>\n","import { Directive, ElementRef, TemplateRef } from '@angular/core';\nimport { OverflowItemDirectiveContext, OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { FD_OVERFLOW_ITEM_REF } from '../tokens/overflow-item-ref.token';\n\n/**\n * Structural directive which is used to pass the context of the item to the template engine.\n */\n@Directive({\n selector: '[fdOverflowItemRef]',\n providers: [\n {\n provide: FD_OVERFLOW_ITEM_REF,\n useExisting: OverflowItemRefDirective\n }\n ]\n})\nexport class OverflowItemRefDirective implements OverflowItemRef {\n /**\n * Element ref of the `fdOverflowLayoutItem` directive.\n */\n elementRef: ElementRef<HTMLElement>;\n /**\n * `fdOverflowLayoutItem` directive.\n */\n overflowItem: OverflowItem;\n /**\n * Whether the item is hidden.\n */\n hidden = false;\n /**\n * Index of the item in the array of Overflow Layout Component's items.\n */\n index: number;\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: OverflowItemRefDirective,\n ctx: OverflowItemDirectiveContext\n ): ctx is OverflowItemDirectiveContext {\n return true;\n }\n\n /** @hidden */\n constructor(public templateRef: TemplateRef<OverflowItemDirectiveContext>) {}\n\n /**\n * Sets the element reference of the `fdOverflowLayoutItem` directive.`\n * @param elmRef\n */\n setElementRef(elmRef: ElementRef): void {\n if (this.elementRef) {\n return;\n }\n this.elementRef = elmRef;\n }\n\n /**\n * Sets the `fdOverflowLayoutItem` directive.\n * @param item\n */\n setOverflowItem(item: OverflowItem): void {\n this.overflowItem = item;\n }\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { OverflowExpand, OverflowExpandDirectiveContext } from '../interfaces/overflow-expand.interface';\nimport { FD_OVERFLOW_EXPAND } from '../tokens/overflow-expand.token';\n\n/**\n * Structural directive which is responsible for rendering the \"More\" button and handling further logic.\n */\n@Directive({\n selector: '[fdOverflowExpand]',\n providers: [\n {\n provide: FD_OVERFLOW_EXPAND,\n useExisting: OverflowExpandDirective\n }\n ]\n})\nexport class OverflowExpandDirective implements OverflowExpand {\n /** @hidden */\n static ngTemplateContextGuard(\n dir: OverflowExpandDirective,\n ctx: OverflowExpandDirectiveContext\n ): ctx is OverflowExpandDirectiveContext {\n return true;\n }\n\n /** @hidden */\n constructor(public templateRef: TemplateRef<OverflowExpandDirectiveContext>) {}\n}\n","import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n Optional,\n SkipSelf\n} from '@angular/core';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { OverflowLayoutComponent } from '../overflow-layout.component';\nimport { FD_OVERFLOW_ITEM_REF } from '../tokens/overflow-item-ref.token';\nimport { FD_OVERFLOW_ITEM } from '../tokens/overflow-item.token';\n\n/**\n * Directive to mark element as part of for Overflow Layout Component items.\n */\n@Directive({\n selector: '[fdOverflowLayoutItem]',\n providers: [\n {\n provide: FD_OVERFLOW_ITEM,\n useExisting: OverflowLayoutItemDirective\n }\n ]\n})\nexport class OverflowLayoutItemDirective implements OverflowItem, OnInit {\n /** Whether the item should be focusable. */\n @Input()\n focusable = false;\n\n /** Whether to force the visibility of the item. */\n @Input()\n set forceVisibility(value: boolean) {\n if (value === this._forceVisibility) {\n return;\n }\n\n this._forceVisibility = value;\n this._overflowContainer.triggerRecalculation();\n }\n\n get forceVisibility(): boolean {\n return this._forceVisibility;\n }\n /**\n * Whether the item is hidden.\n */\n get hidden(): boolean {\n return this._overflowItemRef?.hidden === true;\n }\n\n /** @hidden */\n @HostBinding('attr.tabindex')\n private get _tabindex(): number {\n return this.focusable ? 0 : -1;\n }\n\n /** @hidden */\n private _forceVisibility = false;\n\n /** @hidden */\n @HostListener('focus')\n onFocus(): void {\n this._overflowContainer.setFocusedElement(this);\n }\n\n /** @hidden */\n constructor(\n private _overflowContainer: OverflowLayoutComponent,\n public elmRef: ElementRef,\n @Optional() @SkipSelf() @Inject(FD_OVERFLOW_ITEM_REF) private _overflowItemRef: OverflowItemRef | null\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._overflowItemRef?.setElementRef(this.elmRef);\n this._overflowItemRef?.setOverflowItem(this);\n }\n\n /**\n * Focuses connected to the DOM element.\n */\n focus(): void {\n // Since we use detach() method of ViewContainerRef to remove elements from the visible list,\n // we need to check that element is connected to the DOM.\n this.elmRef.nativeElement.isConnected\n ? this.elmRef.nativeElement.focus()\n : this._overflowItemRef?.elementRef.nativeElement.isConnected\n ? this._overflowItemRef?.elementRef.nativeElement.focus()\n : this._overflowItemRef?.overflowItem.elmRef.nativeElement.focus();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { OverflowLayoutComponent } from './overflow-layout.component';\nimport { OverflowItemRefDirective } from './directives/overflow-item-ref.directive';\nimport { OverflowExpandDirective } from './directives/overflow-expand.directive';\nimport { OverflowLayoutItemDirective } from './directives/overflow-layout-item.directive';\nimport { OverflowItemContainerRefDirective } from './directives/overflow-item-container-ref.directive';\nimport { OverflowLayoutPopoverContentDirective } from './directives/overflow-layout-popover-content.directive';\nimport { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';\n\n@NgModule({\n imports: [CommonModule, PopoverModule, ButtonModule],\n exports: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowExpandDirective,\n OverflowLayoutItemDirective,\n OverflowItemContainerRefDirective,\n OverflowLayoutPopoverContentDirective\n ],\n declarations: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowExpandDirective,\n OverflowLayoutItemDirective,\n OverflowItemContainerRefDirective,\n OverflowLayoutPopoverContentDirective,\n OverflowLayoutItemContainerDirective\n ]\n})\nexport class OverflowLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA;;;MAMa,iCAAiC;;IA6B1C,YACY,YAA8B,EAC9B,iBAAmC,EACnC,OAAmB;QAFnB,iBAAY,GAAZ,YAAY,CAAkB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAkB;QACnC,YAAO,GAAP,OAAO,CAAY;;QA3BvB,cAAS,GAAG,KAAK,CAAC;;QAGlB,YAAO,GAAG,KAAK,CAAC;;QA2BpB,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KAChE;;;;;IAtBD,IAAI,MAAM,CAAC,KAAc;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;YACxB,OAAO;SACV;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAG,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;SACzB;aAAM,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;KACJ;;8HA1BQ,iCAAiC;kHAAjC,iCAAiC;2FAAjC,iCAAiC;kBAH7C,SAAS;mBAAC;oBACP,QAAQ,EAAE,8BAA8B;iBAC3C;;;MCDY,oCAAoC;;IAY7C,YAAmB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;;QATxB,kBAAa,GAAG,0BAA0B,CAAC;KASf;;iIAZpC,oCAAoC;qHAApC,oCAAoC,0KAQ/B,iCAAiC;2FARtC,oCAAoC;kBAHhD,SAAS;mBAAC;oBACP,QAAQ,EAAE,iCAAiC;iBAC9C;iGAIoB,aAAa;sBAD7B,WAAW;uBAAC,OAAO;gBAOpB,YAAY;sBADX,YAAY;uBAAC,iCAAiC;;;ACX5C,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAAoB,qBAAqB,CAAC;;MCApF,kBAAkB,GAAG,IAAI,cAAc,CAAiB,wBAAwB;;MCAhF,oBAAoB,GAAG,IAAI,cAAc,CAAkB,uBAAuB;;MCAlF,gBAAgB,GAAG,IAAI,cAAc,CAAe,gBAAgB;;ACOjF;;;;MAOa,qCAAqC;;IAyB9C,YAAmD,kBAAqC;QAArC,uBAAkB,GAAlB,kBAAkB,CAAmB;;QAHvE,kBAAa,GAAG,uCAAuC,CAAC;QAIrE,IAAI,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;KACzD;;;;IAvBD,IACI,KAAK,CAAC,KAAwB;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,sBAAsB,GAAG,IAAI,eAAe,CAC7C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,CAC7F;aACI,QAAQ,EAAE;aACV,yBAAyB,CAAC,KAAK,CAAC,CAAC;KACzC;;IAmBD,YAAY,CAAC,KAAoB;QAC7B,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9F,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACpD;SACJ;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YAC3E,KAAK,CAAC,cAAc,EAAE,CAAC;;YAGvB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAChD;KACJ;;;;IAKD,yBAAyB;QACrB,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KAChD;;kIApDQ,qCAAqC,kBAyB1B,qBAAqB;sHAzBhC,qCAAqC;2FAArC,qCAAqC;kBAHjD,SAAS;mBAAC;oBACP,QAAQ,EAAE,kCAAkC;iBAC/C;;0BA0BgB,MAAM;2BAAC,qBAAqB;4CApBrC,KAAK;sBADR,KAAK;gBAkBW,aAAa;sBAD7B,WAAW;uBAAC,OAAO;gBAUpB,YAAY;sBADX,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;MCGxB,uBAAuB;;IAiHhC,YACY,IAAuB,EACvB,KAAa,EACb,MAAkB,EACN,WAAuB;QAHnC,SAAI,GAAJ,IAAI,CAAmB;QACvB,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAY;QACN,gBAAW,GAAX,WAAW,CAAY;;;;QAhG/C,sBAAiB,GAAG,IAAI,YAAY,EAAU,CAAC;;;;QAM/C,qBAAgB,GAAG,IAAI,YAAY,EAAU,CAAC;;QAoD9C,cAAS,GAAsB,EAAE,CAAC;;QAGlC,iBAAY,GAAsB,EAAE,CAAC;;QAGrC,cAAS,GAAG,KAAK,CAAC;;QAID,kBAAa,GAAG,oBAAoB,CAAC;;QAM9C,wBAAmB,GAAG,IAAI,CAAC;;QAGlB,kBAAa,GAAG,IAAI,YAAY,EAAE,CAAC;;QAM5C,kBAAa,GAAG,IAAI,OAAO,EAAQ,CAAC;;QAGpC,SAAI,GAAkB,KAAK,CAAC;;QAG5B,qBAAgB,GAAG,QAAQ,CAAC;QAShC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;KAC9G;;;;IApHD,IACI,eAAe,CAAC,KAAa;QAC7B,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;YACjC,OAAO;SACV;QACD,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC/B;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;;;;IA8GD,oBAAoB;QAChB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC7B;;IAGD,WAAW;QACP,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KACpC;;IAIO,aAAa,CAAC,KAAoB;QACtC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAClC,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,CAC3F,CAAC;YACF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;aACpD;SACJ;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,EAAE;YAC3E,KAAK,CAAC,cAAc,EAAE,CAAC;;YAGvB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAChD;KACJ;;;;;IAMD,iBAAiB,CAAC,OAAqB;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,OAAO,CAAC,CAAC;QAElF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD;KACJ;;;;;IAMD,sBAAsB,CAAC,OAA+B;QAClD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC;KAC1C;;IAGD,aAAa,CAAC,CAAS,EAAE,IAAqB;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;IAGD,qBAAqB,CAAC,MAAe;QACjC,IAAI,MAAM,EAAE;YACR,IAAI,CAAC,uBAAuB,EAAE,yBAAyB,EAAE,CAAC;SAC7D;KACJ;;IAGD,eAAe;QACX,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;;IAGO,gBAAgB;QACpB,IAAI,CAAC,aAAa,CAAC,GAAG,CAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAC1B,UAAU,CAAC;gBACP,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B,CAAC,CAAC;SACN,CAAC,CACL,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;KAC1F;;IAGO,oBAAoB,CAAC,GAAG,QAAuB;QACnD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAClB,gBAAgB,CAAC,OAAO,CAAC;aACpB,IAAI,CACD,IAAI,CAAC,CAAC,CAAC,EACP,MAAM,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,EACtC,oBAAoB,EAAE,EACtB,YAAY,CAAC,EAAE,CAAC,CACnB;aACA,SAAS,CAAC;YACP,UAAU,CAAC;gBACP,IAAI,CAAC,gBAAgB,EAAE,CAAC;aAC3B,CAAC,CAAC;SACN,CAAC,CACT,CACJ,CAAC;KACL;;IAGO,gBAAgB;QACpB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK;YAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACtB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAC/E,MAAM,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAE3F,IACI,cAAc,IAAI,mBAAmB;YACrC,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe;YACjD,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAChC;YACE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,OAAO;SACV;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1B,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QACnG,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;;QAGpF,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEzD,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,CAAC,SAAS,EAAE;gBACZ,OAAO;aACV;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAE9E,WAAW,IAAI,WAAW,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,WAAW,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;YAClD,OAAO,CAAC,IAAI,CACR,0HAA0H,CAC7H,CAAC;SACL;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,eAAe,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE;gBAC1D,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;gBAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;gBACtB,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,gBAAgB,GAAG,WAAW,CAAC;YAErD,IACI,CAAC,aAAa,IAAI,WAAW;iBACxB,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,aAAa,IAAI,WAAW,GAAG,sBAAsB,CAAC;gBAC/F,eAAe,GAAG,IAAI,CAAC,eAAe,EACxC;gBACE,gBAAgB,IAAI,WAAW,CAAC;gBAChC,eAAe,EAAE,CAAC;aACrB;iBAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE;gBAC9C,eAAe,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;gBAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;aACzB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;KACnC;;IAGO,mBAAmB;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;QACxD,IAAI,CAAC,sBAAsB,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;aACjE,QAAQ,EAAE;aACV,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;aACpC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;KAChE;;IAGO,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,OAAO;SACV;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK;YAChD,IAAI,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;YAElC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,yBAAyB,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;SAC9G,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KAClC;;IAGO,sBAAsB;QAC1B,OAAO,IAAI,CAAC,SAAS;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;aACtE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC9B;;;;;;IAOO,gBAAgB,CAAC,OAAoB;QACzC,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAC3D,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAE9G,OAAO,WAAW,CAAC;KACtB;;oHApWQ,uBAAuB;wGAAvB,uBAAuB,kSAPrB;QACP;YACI,OAAO,EAAE,qBAAqB;YAC9B,WAAW,EAAE,uBAAuB;SACvC;KACJ,mEA0Ca,kBAAkB,4DAPf,oBAAoB,iDAcpB,gBAAgB,+WAOnB,oCAAoC,gDCxGtD,ioEAmDA;2FDDa,uBAAuB;kBAbnC,SAAS;+BACI,oBAAoB,iBAGf,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,aACpC;wBACP;4BACI,OAAO,EAAE,qBAAqB;4BAC9B,WAAW,yBAAyB;yBACvC;qBACJ;;0BAuHI,QAAQ;4CAhHT,eAAe;sBADlB,KAAK;gBAiBN,iBAAiB;sBADhB,MAAM;gBAOP,gBAAgB;sBADf,MAAM;gBAQP,MAAM;sBADL,eAAe;uBAAC,oBAAoB;gBAQrC,WAAW;sBADV,YAAY;uBAAC,kBAAkB;gBAQhC,cAAc;sBADb,eAAe;uBAAC,gBAAgB;gBAQjC,aAAa;sBADZ,YAAY;uBAAC,oCAAoC;gBAQlD,aAAa;sBADZ,SAAS;uBAAC,cAAc;gBAQzB,gBAAgB;sBADf,SAAS;uBAAC,iBAAiB;gBAQ5B,kBAAkB;sBADjB,SAAS;uBAAC,mBAAmB;gBAcb,aAAa;sBAD7B,WAAW;uBAAC,OAAO;gBAgDZ,aAAa;sBADpB,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;;;AEpLrC;;;MAYa,wBAAwB;;IA2BjC,YAAmB,WAAsD;QAAtD,gBAAW,GAAX,WAAW,CAA2C;;;;QAfzE,WAAM,GAAG,KAAK,CAAC;KAe8D;;IAR7E,OAAO,sBAAsB,CACzB,GAA6B,EAC7B,GAAiC;QAEjC,OAAO,IAAI,CAAC;KACf;;;;;IASD,aAAa,CAAC,MAAkB;QAC5B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,OAAO;SACV;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;KAC5B;;;;;IAMD,eAAe,CAAC,IAAkB;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;KAC5B;;qHA9CQ,wBAAwB;yGAAxB,wBAAwB,8CAPtB;QACP;YACI,OAAO,EAAE,oBAAoB;YAC7B,WAAW,EAAE,wBAAwB;SACxC;KACJ;2FAEQ,wBAAwB;kBATpC,SAAS;mBAAC;oBACP,QAAQ,EAAE,qBAAqB;oBAC/B,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,oBAAoB;4BAC7B,WAAW,0BAA0B;yBACxC;qBACJ;iBACJ;;;ACZD;;;MAYa,uBAAuB;;IAUhC,YAAmB,WAAwD;QAAxD,gBAAW,GAAX,WAAW,CAA6C;KAAI;;IAR/E,OAAO,sBAAsB,CACzB,GAA4B,EAC5B,GAAmC;QAEnC,OAAO,IAAI,CAAC;KACf;;oHAPQ,uBAAuB;wGAAvB,uBAAuB,6CAPrB;QACP;YACI,OAAO,EAAE,kBAAkB;YAC3B,WAAW,EAAE,uBAAuB;SACvC;KACJ;2FAEQ,uBAAuB;kBATnC,SAAS;mBAAC;oBACP,QAAQ,EAAE,oBAAoB;oBAC9B,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,kBAAkB;4BAC3B,WAAW,yBAAyB;yBACvC;qBACJ;iBACJ;;;ACED;;;MAYa,2BAA2B;;IA0CpC,YACY,kBAA2C,EAC5C,MAAkB,EACqC,gBAAwC;QAF9F,uBAAkB,GAAlB,kBAAkB,CAAyB;QAC5C,WAAM,GAAN,MAAM,CAAY;QACqC,qBAAgB,GAAhB,gBAAgB,CAAwB;;QA1C1G,cAAS,GAAG,KAAK,CAAC;;QA8BV,qBAAgB,GAAG,KAAK,CAAC;KAa7B;;IAxCJ,IACI,eAAe,CAAC,KAAc;QAC9B,IAAI,KAAK,KAAK,IAAI,CAAC,gBAAgB,EAAE;YACjC,OAAO;SACV;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAC;KAClD;IAED,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;;;;IAID,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;KACjD;;IAGD,IACY,SAAS;QACjB,OAAO,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;KAClC;;IAOD,OAAO;QACH,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KACnD;;IAUD,QAAQ;QACJ,IAAI,CAAC,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC;KAChD;;;;IAKD,KAAK;;;QAGD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW;cAC/B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE;cACjC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,aAAa,CAAC,WAAW;kBAC3D,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE;kBACvD,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC1E;;wHAjEQ,2BAA2B,gFA6CA,oBAAoB;4GA7C/C,2BAA2B,2NAPzB;QACP;YACI,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,2BAA2B;SAC3C;KACJ;2FAEQ,2BAA2B;kBATvC,SAAS;mBAAC;oBACP,QAAQ,EAAE,wBAAwB;oBAClC,SAAS,EAAE;wBACP;4BACI,OAAO,EAAE,gBAAgB;4BACzB,WAAW,6BAA6B;yBAC3C;qBACJ;iBACJ;;0BA8CQ,QAAQ;;0BAAI,QAAQ;;0BAAI,MAAM;2BAAC,oBAAoB;4CA1CxD,SAAS;sBADR,KAAK;gBAKF,eAAe;sBADlB,KAAK;gBAsBM,SAAS;sBADpB,WAAW;uBAAC,eAAe;gBAU5B,OAAO;sBADN,YAAY;uBAAC,OAAO;;;MCjCZ,oBAAoB;;iHAApB,oBAAoB;kHAApB,oBAAoB,iBATzB,uBAAuB;QACvB,wBAAwB;QACxB,uBAAuB;QACvB,2BAA2B;QAC3B,iCAAiC;QACjC,qCAAqC;QACrC,oCAAoC,aAhB9B,YAAY,EAAE,aAAa,EAAE,YAAY,aAE/C,uBAAuB;QACvB,wBAAwB;QACxB,uBAAuB;QACvB,2BAA2B;QAC3B,iCAAiC;QACjC,qCAAqC;kHAYhC,oBAAoB,YAnBpB,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;2FAmB3C,oBAAoB;kBApBhC,QAAQ;mBAAC;oBACN,OAAO,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC;oBACpD,OAAO,EAAE;wBACL,uBAAuB;wBACvB,wBAAwB;wBACxB,uBAAuB;wBACvB,2BAA2B;wBAC3B,iCAAiC;wBACjC,qCAAqC;qBACxC;oBACD,YAAY,EAAE;wBACV,uBAAuB;wBACvB,wBAAwB;wBACxB,uBAAuB;wBACvB,2BAA2B;wBAC3B,iCAAiC;wBACjC,qCAAqC;wBACrC,oCAAoC;qBACvC;iBACJ;;;AC/BD;;;;;;"}
1
+ {"version":3,"file":"fundamental-ngx-core-overflow-layout.mjs","sources":["../../../../../libs/core/src/lib/overflow-layout/directives/overflow-item-container-ref.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-item-container.directive.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.service.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-container.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-expand.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-item-ref.token.ts","../../../../../libs/core/src/lib/overflow-layout/tokens/overflow-item.token.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-popover-content.directive.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.component.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.component.html","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-item-ref.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-expand.directive.ts","../../../../../libs/core/src/lib/overflow-layout/directives/overflow-layout-item.directive.ts","../../../../../libs/core/src/lib/overflow-layout/overflow-layout.module.ts","../../../../../libs/core/src/lib/overflow-layout/fundamental-ngx-core-overflow-layout.ts"],"sourcesContent":["import { Directive, ElementRef, TemplateRef, ViewContainerRef, ViewRef } from '@angular/core';\n\n/**\n * Directive to hide component without actual destroying of the component instance.\n */\n@Directive({\n selector: '[fdOverflowItemContainerRef]'\n})\nexport class OverflowItemContainerRefDirective {\n /** @hidden */\n private _viewRef: ViewRef;\n\n /** @hidden */\n private _detached = false;\n\n /** @hidden */\n private _hidden = false;\n\n /**\n * Shows or hides element without destroying the view itself.\n * @param value\n */\n set hidden(value: boolean) {\n if (this._hidden === value) {\n return;\n }\n this._hidden = value;\n if (value && !this._detached) {\n this._viewRef = this._viewContainerRef.detach()!;\n this._detached = true;\n } else if (!value && this._viewRef && !this._viewRef.destroyed && this._detached) {\n this._viewRef = this._viewContainerRef.insert(this._viewRef);\n this._detached = false;\n }\n }\n\n /** @hidden */\n constructor(\n private _templateRef: TemplateRef<any>,\n private _viewContainerRef: ViewContainerRef,\n private _elmRef: ElementRef\n ) {\n // Create embedded view right away and manipulate its visibility later.\n this._viewContainerRef.createEmbeddedView(this._templateRef);\n }\n}\n","import { ContentChild, Directive, ElementRef, HostBinding, Input } from '@angular/core';\nimport { OverflowItemContainerRefDirective } from './overflow-item-container-ref.directive';\n\n@Directive({\n selector: '[fdOverflowLayoutItemContainer]'\n})\nexport class OverflowLayoutItemContainerDirective {\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout__item';\n\n /**\n * Whether this item is the first one in the array.\n */\n @Input()\n @HostBinding('class.fd-overflow-layout__item--last')\n last = false;\n\n /**\n * Whether this item is the last one in the array.\n */\n @Input()\n @HostBinding('class.fd-overflow-layout__item--first')\n first = false;\n\n /**\n * Whether this item is softly hidden. Used during free space calculation without flickering of the items.\n */\n @Input()\n @HostBinding('class.fd-overflow-layout__item--soft-hidden')\n softHidden = true;\n\n /**\n * Container reference.\n */\n @ContentChild(OverflowItemContainerRefDirective)\n containerRef: OverflowItemContainerRefDirective;\n\n /** @hidden */\n constructor(public elementRef: ElementRef) {}\n}\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { ElementRef, Injectable, OnDestroy, Optional, QueryList } from '@angular/core';\nimport { resizeObservable, RtlService } from '@fundamental-ngx/core/utils';\nimport { debounceTime, distinctUntilChanged, filter, Observable, skip, Subject, Subscription } from 'rxjs';\nimport { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';\nimport { OverflowItemRef } from './interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from './interfaces/overflow-item.interface';\n\nexport interface OverflowLayoutConfig {\n items: QueryList<OverflowItemRef>;\n visibleItems: QueryList<OverflowLayoutItemContainerDirective>;\n itemsWrapper: HTMLElement;\n showMoreContainer: HTMLElement;\n layoutContainerElement: HTMLElement;\n maxVisibleItems: number;\n direction: 'left' | 'right';\n enableKeyboardNavigation: boolean;\n reverseHiddenItems: boolean;\n}\n\nexport class OverflowLayoutListeningResult {\n showMore = false;\n items: OverflowItemRef[] = [];\n hiddenItems: OverflowItemRef[] = [];\n visibleItems: OverflowItemRef[] = [];\n}\n\n@Injectable()\nexport class OverflowLayoutService implements OnDestroy {\n /**\n * Overflow Layout config.\n */\n config: OverflowLayoutConfig;\n\n /**\n * Overflow Layout calculation result.\n */\n result = new OverflowLayoutListeningResult();\n\n /** @hidden */\n _keyboardEventsManager: FocusKeyManager<OverflowItem>;\n\n /** @hidden */\n private _listenToItemResize = true;\n\n /** @hidden */\n private readonly _subscription = new Subscription();\n\n /** @hidden */\n private _allItems: OverflowItemRef[] = [];\n\n /** @hidden */\n private _hiddenItems: OverflowItemRef[] = [];\n\n /** @hidden */\n private _overflowItems: OverflowItem[] = [];\n\n /** @hidden */\n private _detectChanges$ = new Subject<void>();\n\n /** @hidden */\n private _result$ = new Subject<OverflowLayoutListeningResult>();\n\n /** @hidden */\n private _dir: 'rtl' | 'ltr' = 'ltr';\n\n /**\n * Observable which emits when changes detection is required.\n */\n get detectChanges(): Observable<void> {\n return this._detectChanges$.asObservable();\n }\n\n /**\n * Observable which emits when new calculation result is available.\n */\n get onResult(): Observable<OverflowLayoutListeningResult> {\n return this._result$.asObservable();\n }\n\n /** @hidden */\n constructor(private _elRef: ElementRef<HTMLElement>, @Optional() private _rtlService: RtlService | null) {}\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n startListening(config: OverflowLayoutConfig): void {\n this.setConfig(config);\n this.fitVisibleItems();\n this._setFocusKeyManager();\n this._listenToChanges();\n this._subscribeToRtl();\n }\n\n setConfig(config: OverflowLayoutConfig): void {\n this.config = config;\n }\n\n private _emitResult(): void {\n this._result$.next(this.result);\n }\n\n /** @hidden */\n private _listenToChanges(): void {\n this._subscription.add(\n this.config.items.changes.subscribe(() => {\n setTimeout(() => {\n this.fitVisibleItems();\n });\n })\n );\n\n this._listenToSizeChanges(this._elRef.nativeElement, this.config.itemsWrapper);\n }\n\n /** @hidden */\n private _listenToSizeChanges(...elements: HTMLElement[]): void {\n elements.forEach((element) =>\n this._subscription.add(\n resizeObservable(element)\n .pipe(\n skip(1),\n filter(() => this._listenToItemResize),\n distinctUntilChanged(),\n debounceTime(30)\n )\n .subscribe(() => {\n setTimeout(() => {\n this.fitVisibleItems();\n });\n })\n )\n );\n }\n\n /** @hidden */\n fitVisibleItems(): void {\n this._listenToItemResize = false;\n this._allItems = this.config.items.toArray();\n\n let allItems = this.config.items.toArray();\n\n allItems.forEach((item, index) => {\n // Softly hide previously completely hidden item in order to correctly calculate it's size.\n item.softHidden = true;\n item.hidden = false;\n item.index = index;\n item.first = index === 0;\n item.last = index === allItems.length - 1;\n });\n\n this._detectChanges$.next();\n\n allItems = this.config.direction === 'right' ? allItems : allItems.reverse();\n const visibleContainerItems =\n this.config.direction === 'right'\n ? this.config.visibleItems.toArray()\n : this.config.visibleItems.toArray().reverse();\n visibleContainerItems.forEach((i) => (i.containerRef.hidden = false));\n\n this.result.showMore = false;\n this._emitResult();\n const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;\n const itemsContainerWidth = this.config.itemsWrapper.getBoundingClientRect().width;\n\n if (\n containerWidth >= itemsContainerWidth &&\n this.config.visibleItems.length <= this.config.maxVisibleItems &&\n this._hiddenItems.length === 0\n ) {\n // Make all items fully visible.\n allItems.forEach((item) => {\n item.softHidden = false;\n });\n this.result.showMore = false;\n this.result.hiddenItems = this._hiddenItems;\n this._emitResult();\n this._listenToItemResize = true;\n return;\n }\n this.result.showMore = true;\n this._emitResult();\n let fittingElmCount = 0;\n let fittingElmsWidth = 0;\n let shouldHideItems = false;\n\n const showMoreContainerWidth = Math.ceil(this.config.showMoreContainer.getBoundingClientRect().width);\n let layoutWidth = Math.ceil(this.config.layoutContainerElement.getBoundingClientRect().width);\n\n // Try to find all forced visible items\n const forcedItemsIndexes = this._getForcedItemsIndexes();\n\n forcedItemsIndexes.forEach((itemIndex) => {\n const container = this.config.visibleItems.get(itemIndex);\n if (!container) {\n return;\n }\n const elementSize = this._getElementWidth(container.elementRef.nativeElement);\n\n layoutWidth -= elementSize;\n });\n\n if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {\n console.warn(\n 'There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.'\n );\n }\n\n this._detectChanges$.next();\n\n visibleContainerItems.forEach((item, index) => {\n const itemRef = allItems[index];\n if (shouldHideItems && !itemRef.overflowItem.forceVisibility) {\n item.containerRef.hidden = true;\n item.softHidden = false;\n itemRef.hidden = true;\n return;\n }\n\n const elementSize = this._getElementWidth(item.elementRef.nativeElement);\n const combinedWidth = fittingElmsWidth + elementSize;\n\n const condition =\n (combinedWidth <= layoutWidth ||\n (item === this.config.visibleItems.last &&\n combinedWidth <= layoutWidth + showMoreContainerWidth)) &&\n fittingElmCount < this.config.maxVisibleItems;\n\n if (condition) {\n fittingElmsWidth += elementSize;\n fittingElmCount++;\n } else if (!itemRef.overflowItem.forceVisibility) {\n shouldHideItems = true;\n item.softHidden = false;\n item.containerRef.hidden = true;\n itemRef.hidden = true;\n }\n });\n\n // Reverse original order back.\n allItems = this.config.direction === 'right' ? allItems : allItems.reverse();\n\n allItems.forEach((item) => {\n item.softHidden = false;\n });\n\n let hiddenItems = allItems.filter((i) => i.hidden);\n hiddenItems = !this.config.reverseHiddenItems ? hiddenItems.reverse() : hiddenItems;\n const visibleItems = allItems.filter((i) => !i.hidden);\n\n visibleItems.forEach((item, index) => {\n item.index = index;\n item.first = index === 0;\n item.last = index === visibleItems.length - 1;\n });\n\n this._hiddenItems = hiddenItems.map((item, index) => {\n item.first = index === 0;\n item.last = index === hiddenItems.length - 1;\n item.index = index;\n return item;\n });\n\n this.result.showMore = this._hiddenItems.length > 0;\n this.result.hiddenItems = this._hiddenItems;\n this._emitResult();\n\n this._listenToItemResize = true;\n }\n\n /** @hidden */\n private _setFocusKeyManager(): void {\n if (!this.config.enableKeyboardNavigation) {\n return;\n }\n this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';\n this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)\n .withWrap()\n .withHorizontalOrientation(this._dir)\n .skipPredicate((item) => !item.focusable || item.hidden);\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n if (!this._rtlService || !this.config.enableKeyboardNavigation) {\n return;\n }\n\n this._subscription.add(\n this._rtlService.rtl.subscribe((isRtl) => {\n this._dir = isRtl ? 'rtl' : 'ltr';\n\n this._keyboardEventsManager = this._keyboardEventsManager.withHorizontalOrientation(this._dir);\n })\n );\n }\n\n /** @hidden */\n private _getForcedItemsIndexes(): number[] {\n return this._allItems\n .map((item, index) => (item.overflowItem.forceVisibility ? index : -1))\n .filter((i) => i > -1);\n }\n\n /**\n * @hidden\n * Returns combined width of the element including margins.\n * @param element Element to calculate width of.\n */\n private _getElementWidth(element: HTMLElement): number {\n const elementStyle = getComputedStyle(element);\n const elementWidth = element.getBoundingClientRect().width;\n const elementSize = elementWidth + parseFloat(elementStyle.marginLeft) + parseFloat(elementStyle.marginRight);\n\n return Math.ceil(elementSize);\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { OverflowContainer } from '../interfaces/overflow-container.interface';\n\nexport const FD_OVERFLOW_CONTAINER = new InjectionToken<OverflowContainer>('FdOverflowContainer');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowExpand } from '../interfaces/overflow-expand.interface';\n\nexport const FD_OVERFLOW_EXPAND = new InjectionToken<OverflowExpand>('FdOverflowLayoutExpand');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\n\nexport const FD_OVERFLOW_ITEM_REF = new InjectionToken<OverflowItemRef>('OverflowLayoutItemRef');\n","import { InjectionToken } from '@angular/core';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\n\nexport const FD_OVERFLOW_ITEM = new InjectionToken<OverflowItem>('FdOverflowItem');\n","import { FocusKeyManager } from '@angular/cdk/a11y';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { Directive, HostBinding, HostListener, Inject, Input } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/core/utils';\nimport { OverflowContainer } from '../interfaces/overflow-container.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { OverflowPopoverContent } from '../interfaces/overflow-popover-content.interface';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { FD_OVERFLOW_CONTAINER } from '../tokens/overflow-container.token';\n\n/**\n * Directive to wrap Overlay Layout \"More\" popover content.\n * Used to apply keyboard navigation through the items.\n */\n@Directive({\n selector: '[fdOverflowLayoutPopoverContent]'\n})\nexport class OverflowLayoutPopoverContentDirective implements OverflowPopoverContent {\n /**\n * Array of hidden items.\n */\n @Input()\n set items(value: OverflowItemRef[]) {\n this._items = value;\n this._keyboardEventsManager = new FocusKeyManager(\n this._items.filter((item) => item.overflowItem.focusable).map((item) => item.overflowItem)\n )\n .withWrap()\n .withHorizontalOrientation('ltr');\n }\n\n /** @hidden */\n private _keyboardEventsManager: FocusKeyManager<OverflowItem>;\n\n /** @hidden */\n private _items: OverflowItemRef[];\n\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout__popover-container';\n\n /** @hidden */\n constructor(@Inject(FD_OVERFLOW_CONTAINER) private _overflowContainer: OverflowContainer) {\n this._overflowContainer?.registerPopoverContent(this);\n }\n\n /** @hidden */\n @HostListener('keyup', ['$event'])\n keyUpHandler(event: KeyboardEvent): void {\n if (KeyUtil.isKeyCode(event, TAB)) {\n const index = this._items.findIndex((item) => item.elementRef.nativeElement === event.target);\n if (index !== -1) {\n this._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n event.preventDefault();\n\n // passing the event to key manager, so we get a change fired\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /**\n * Focuses on the first tabbable element inside directive's element.\n */\n focusFirstTabbableElement(): void {\n this._keyboardEventsManager.setActiveItem(0);\n }\n}\n","import { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n Component,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n ContentChildren,\n QueryList,\n ChangeDetectorRef,\n ContentChild,\n HostBinding,\n ViewChild,\n ElementRef,\n NgZone,\n Output,\n EventEmitter,\n HostListener,\n Optional,\n TemplateRef,\n ViewChildren,\n AfterViewInit,\n OnDestroy,\n Input\n} from '@angular/core';\nimport { KeyUtil, RtlService } from '@fundamental-ngx/core/utils';\nimport { debounceTime, Subject, Subscription } from 'rxjs';\nimport { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';\nimport { OverflowContainer } from './interfaces/overflow-container.interface';\nimport { OverflowExpand } from './interfaces/overflow-expand.interface';\nimport { OverflowItemRef } from './interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from './interfaces/overflow-item.interface';\nimport { OverflowPopoverContent } from './interfaces/overflow-popover-content.interface';\nimport { OverflowLayoutConfig, OverflowLayoutService } from './overflow-layout.service';\nimport { FD_OVERFLOW_CONTAINER } from './tokens/overflow-container.token';\nimport { FD_OVERFLOW_EXPAND } from './tokens/overflow-expand.token';\nimport { FD_OVERFLOW_ITEM_REF } from './tokens/overflow-item-ref.token';\nimport { FD_OVERFLOW_ITEM } from './tokens/overflow-item.token';\n\n@Component({\n selector: 'fd-overflow-layout',\n templateUrl: './overflow-layout.component.html',\n styleUrls: ['./overflow-layout.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: FD_OVERFLOW_CONTAINER,\n useExisting: OverflowLayoutComponent\n },\n OverflowLayoutService\n ]\n})\nexport class OverflowLayoutComponent implements AfterViewInit, OnDestroy, OverflowContainer {\n /**\n * Maximum amount of visible items.\n */\n @Input()\n set maxVisibleItems(value: number) {\n if (value === this._maxVisibleItems) {\n return;\n }\n this._maxVisibleItems = value;\n this.triggerRecalculation();\n }\n\n get maxVisibleItems(): number {\n return this._maxVisibleItems;\n }\n\n /** Direction of the fitting items calculation. */\n @Input()\n showMorePosition: 'left' | 'right' = 'right';\n\n /** Whether to render hidden items in reverse order. */\n @Input()\n reverseHiddenItems = false;\n\n /** Whether to enable keyboard navigation. */\n @Input()\n enableKeyboardNavigation = true;\n\n /**\n * Event, triggered when amount of visible items has been changed.\n */\n @Output()\n visibleItemsCount = new EventEmitter<number>();\n\n /**\n * Event, triggered when amount of hidden items has been changed.\n */\n @Output()\n hiddenItemsCount = new EventEmitter<number>();\n\n /**\n * @hidden\n * List of items to display.\n */\n @ContentChildren(FD_OVERFLOW_ITEM_REF, { descendants: true })\n _items: QueryList<OverflowItemRef>;\n\n /**\n * @hidden\n * Template for the custom \"More\" button.\n */\n @ContentChild(FD_OVERFLOW_EXPAND)\n _moreButton: OverflowExpand;\n\n /**\n * @hidden\n * List of items that can be focused.\n */\n @ContentChildren(FD_OVERFLOW_ITEM, { descendants: true })\n _overflowItems: QueryList<OverflowItem>;\n\n /**\n * @hidden\n * List of rendered items.\n */\n @ViewChildren(OverflowLayoutItemContainerDirective)\n _visibleItems: QueryList<OverflowLayoutItemContainerDirective>;\n\n /**\n * @hidden\n * Items wrapper directive.\n */\n @ViewChild('itemsWrapper')\n _itemsWrapper: ElementRef<HTMLElement>;\n\n /**\n * @hidden\n * Layout container element.\n */\n @ViewChild('layoutContainer')\n _layoutContainer: ElementRef<HTMLDivElement>;\n\n /**\n * @hidden\n * \"More\" button container element.\n */\n @ViewChild('showMoreContainer')\n _showMoreContainer: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n _allItems: OverflowItemRef[] = [];\n\n /** @hidden */\n _hiddenItems: OverflowItemRef[] = [];\n\n /** @hidden */\n _showMore = false;\n\n /** @hidden */\n @HostBinding('class')\n private readonly _initialClass = 'fd-overflow-layout';\n\n /** @hidden */\n private readonly _subscription = new Subscription();\n\n /** @hidden */\n private _overflowPopoverContent: OverflowPopoverContent;\n\n /** @hidden */\n private _fillTrigger$ = new Subject<void>();\n\n /** @hidden */\n private _maxVisibleItems = Infinity;\n\n /** @hidden */\n private _canListenToResize = false;\n\n /** @hidden */\n constructor(\n protected _cdr: ChangeDetectorRef,\n protected _zone: NgZone,\n protected _elRef: ElementRef,\n protected _overflowLayoutService: OverflowLayoutService,\n @Optional() protected _rtlService: RtlService\n ) {\n this._subscription.add(\n this._fillTrigger$.pipe(debounceTime(30)).subscribe(() => this._overflowLayoutService.fitVisibleItems())\n );\n }\n\n /**\n * Triggers layout recalculation of the items.\n */\n triggerRecalculation(): void {\n if (!this._canListenToResize) {\n return;\n }\n this._overflowLayoutService.setConfig(this._getConfig());\n this._fillTrigger$.next();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscription.unsubscribe();\n }\n\n /**\n * Sets current focused element.\n * @param element Element that needs to be focused.\n */\n setFocusedElement(element: OverflowItem): void {\n const index = this._overflowItems.toArray().findIndex((item) => item === element);\n\n if (index !== -1) {\n this._overflowLayoutService._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n /**\n * Registers popover content directive for main component.\n * @param content {OverflowPopoverContent} directive\n */\n registerPopoverContent(content: OverflowPopoverContent): void {\n this._overflowPopoverContent = content;\n }\n\n /** @hidden */\n _itemsTrackFn(_: number, item: OverflowItemRef): TemplateRef<any> {\n return item.templateRef;\n }\n\n /** @hidden */\n _onPopoverStateChange(opened: boolean): void {\n if (opened) {\n this._overflowPopoverContent?.focusFirstTabbableElement();\n }\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._subscription.add(\n this._overflowLayoutService.detectChanges.subscribe(() => {\n this._cdr.detectChanges();\n })\n );\n\n this._subscription.add(\n this._overflowLayoutService.onResult.subscribe((result) => {\n this._hiddenItems = result.hiddenItems;\n this._showMore = result.showMore;\n this.hiddenItemsCount.emit(result.hiddenItems.length);\n this.visibleItemsCount.emit(this._allItems.filter((i) => !i.hidden).length);\n this._cdr.detectChanges();\n })\n );\n\n this._subscription.add(\n this._items.changes.subscribe(() => {\n this._allItems = this._items.toArray();\n this._cdr.detectChanges();\n })\n );\n\n this._allItems = this._items.toArray();\n this._cdr.detectChanges();\n\n this._overflowLayoutService.startListening(this._getConfig());\n\n this._canListenToResize = true;\n }\n\n /** @hidden */\n private _getConfig(): OverflowLayoutConfig {\n return {\n visibleItems: this._visibleItems,\n items: this._items,\n itemsWrapper: this._itemsWrapper.nativeElement,\n showMoreContainer: this._showMoreContainer.nativeElement,\n layoutContainerElement: this._layoutContainer.nativeElement,\n maxVisibleItems: this.maxVisibleItems,\n direction: this.showMorePosition,\n enableKeyboardNavigation: this.enableKeyboardNavigation,\n reverseHiddenItems: this.reverseHiddenItems\n };\n }\n\n /** @hidden */\n @HostListener('keyup', ['$event'])\n private _keyUpHandler(event: KeyboardEvent): void {\n if (!this.enableKeyboardNavigation) {\n return;\n }\n if (KeyUtil.isKeyCode(event, TAB)) {\n const index = this._allItems.findIndex(\n (item) => item.overflowItem?.focusable && item.elementRef.nativeElement === event.target\n );\n if (index !== -1) {\n this._overflowLayoutService._keyboardEventsManager.setActiveItem(index);\n }\n }\n\n if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {\n event.preventDefault();\n\n // passing the event to key manager so, we get a change fired\n this._overflowLayoutService._keyboardEventsManager.onKeydown(event);\n }\n }\n}\n","<ng-template [ngIf]=\"showMorePosition === 'left'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<div class=\"fd-overflow-layout__items-container\" #layoutContainer>\n <div class=\"fd-overflow-layout__items\" #itemsWrapper>\n <ng-container *ngFor=\"let item of _allItems; trackBy: _itemsTrackFn\">\n <div fdOverflowLayoutItemContainer [first]=\"item.first\" [last]=\"item.last\" [softHidden]=\"item.softHidden\">\n <ng-container *fdOverflowItemContainerRef>\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n\n<ng-template [ngIf]=\"showMorePosition === 'right'\">\n <ng-template [ngTemplateOutlet]=\"showMore\"></ng-template>\n</ng-template>\n\n<ng-template #showMore>\n <div class=\"fd-overflow-layout__more\" [style.display]=\"_showMore ? 'block' : 'none'\" #showMoreContainer>\n <ng-template #defaultShowMore>\n <fd-popover\n (isOpenChange)=\"_onPopoverStateChange($event)\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [maxWidth]=\"312\"\n >\n <fd-popover-control>\n <button\n fd-button\n [fdMenu]=\"true\"\n i18n=\"@overflowLayout.moreItemsButton|Overflow Layout more button text\"\n fdType=\"transparent\"\n >\n {{ _hiddenItems.length }} more\n </button>\n </fd-popover-control>\n <fd-popover-body>\n <div fdOverflowLayoutPopoverContent [items]=\"_hiddenItems\">\n <ng-container *ngFor=\"let item of _hiddenItems\">\n <ng-template\n [ngTemplateOutlet]=\"item.templateRef\"\n [ngTemplateOutletContext]=\"{\n $implicit: item.hidden,\n index: item.index,\n first: item.first,\n last: item.last\n }\"\n ></ng-template>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"_moreButton?.templateRef || defaultShowMore\"\n [ngTemplateOutletContext]=\"{ $implicit: _hiddenItems }\"\n ></ng-template>\n </div>\n</ng-template>\n","import { Directive, ElementRef, Input, TemplateRef } from '@angular/core';\nimport { OverflowItemDirectiveContext, OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { FD_OVERFLOW_ITEM_REF } from '../tokens/overflow-item-ref.token';\n\n/**\n * Structural directive which is used to pass the context of the item to the template engine.\n */\n@Directive({\n selector: '[fdOverflowItemRef]',\n providers: [\n {\n provide: FD_OVERFLOW_ITEM_REF,\n useExisting: OverflowItemRefDirective\n }\n ]\n})\nexport class OverflowItemRefDirective<T = any> implements OverflowItemRef<T> {\n /**\n * Element ref of the `fdOverflowLayoutItem` directive.\n */\n elementRef: ElementRef<HTMLElement>;\n /**\n * `fdOverflowLayoutItem` directive.\n */\n overflowItem: OverflowItem;\n /**\n * Whether the item is hidden.\n */\n get hidden(): boolean {\n return this._hidden;\n }\n\n set hidden(value: boolean) {\n this._hidden = value;\n this.overflowItem.hiddenChange.emit(value);\n }\n _hidden = false;\n /**\n * Index of the item in the array of Overflow Layout Component's items.\n */\n index: number;\n\n /** Whether this item is last in the array. */\n first: boolean;\n\n /** Whether this item is first in the array. */\n last: boolean;\n\n /** Whether the item is softly hidden. */\n softHidden = true;\n\n /** Item instance. Used for correct autocomplete. */\n @Input('fdOverflowItemRef')\n item: T;\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: OverflowItemRefDirective,\n ctx: OverflowItemDirectiveContext\n ): ctx is OverflowItemDirectiveContext {\n return true;\n }\n\n /** @hidden */\n constructor(public templateRef: TemplateRef<OverflowItemDirectiveContext<T>>) {}\n\n /**\n * Sets the element reference of the `fdOverflowLayoutItem` directive.`\n * @param elmRef\n */\n setElementRef(elmRef: ElementRef): void {\n if (this.elementRef) {\n return;\n }\n this.elementRef = elmRef;\n }\n\n /**\n * Sets the `fdOverflowLayoutItem` directive.\n * @param item\n */\n setOverflowItem(item: OverflowItem): void {\n this.overflowItem = item;\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { OverflowExpand, OverflowExpandDirectiveContext } from '../interfaces/overflow-expand.interface';\nimport { FD_OVERFLOW_EXPAND } from '../tokens/overflow-expand.token';\n\n/**\n * Structural directive which is responsible for rendering the \"More\" button and handling further logic.\n */\n@Directive({\n selector: '[fdOverflowExpand]',\n providers: [\n {\n provide: FD_OVERFLOW_EXPAND,\n useExisting: OverflowExpandDirective\n }\n ]\n})\nexport class OverflowExpandDirective<T extends any[] = any[]> implements OverflowExpand<T> {\n @Input()\n fdOverflowExpandItems: T;\n\n /** @hidden */\n static ngTemplateContextGuard(\n dir: OverflowExpandDirective,\n ctx: OverflowExpandDirectiveContext\n ): ctx is OverflowExpandDirectiveContext {\n return true;\n }\n\n /** @hidden */\n constructor(public templateRef: TemplateRef<OverflowExpandDirectiveContext<T>>) {}\n}\n","import {\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnInit,\n Optional,\n Output,\n SkipSelf\n} from '@angular/core';\nimport { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';\nimport { OverflowItem } from '../interfaces/overflow-item.interface';\nimport { OverflowLayoutComponent } from '../overflow-layout.component';\nimport { FD_OVERFLOW_ITEM_REF } from '../tokens/overflow-item-ref.token';\nimport { FD_OVERFLOW_ITEM } from '../tokens/overflow-item.token';\n\n/**\n * Directive to mark element as part of for Overflow Layout Component items.\n */\n@Directive({\n selector: '[fdOverflowLayoutItem]',\n providers: [\n {\n provide: FD_OVERFLOW_ITEM,\n useExisting: OverflowLayoutItemDirective\n }\n ]\n})\nexport class OverflowLayoutItemDirective implements OverflowItem, OnInit {\n /** Whether the item should be focusable. */\n @Input()\n focusable = false;\n\n /** Whether to force the visibility of the item. */\n @Input()\n set forceVisibility(value: boolean) {\n if (value === this._forceVisibility) {\n return;\n }\n\n this._forceVisibility = value;\n this._overflowContainer.triggerRecalculation();\n }\n\n get forceVisibility(): boolean {\n return this._forceVisibility;\n }\n\n /**\n * Event emitted when `hidden` property has been changed.\n */\n @Output()\n hiddenChange = new EventEmitter<boolean>();\n\n /**\n * Whether the item is hidden.\n */\n get hidden(): boolean {\n return this._overflowItemRef?.hidden === true;\n }\n\n set hidden(value: boolean) {\n this.hiddenChange.emit(value);\n }\n\n /** @hidden */\n @HostBinding('attr.tabindex')\n private get _tabindex(): number {\n return this.focusable ? 0 : -1;\n }\n\n /** @hidden */\n private _forceVisibility = false;\n\n /** @hidden */\n @HostListener('focus')\n onFocus(): void {\n this._overflowContainer.setFocusedElement(this);\n }\n\n /** @hidden */\n constructor(\n private _overflowContainer: OverflowLayoutComponent,\n public elmRef: ElementRef,\n @Optional() @SkipSelf() @Inject(FD_OVERFLOW_ITEM_REF) private _overflowItemRef: OverflowItemRef | null\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._overflowItemRef?.setElementRef(this.elmRef);\n this._overflowItemRef?.setOverflowItem(this);\n }\n\n /**\n * Focuses connected to the DOM element.\n */\n focus(): void {\n // Since we use detach() method of ViewContainerRef to remove elements from the visible list,\n // we need to check that element is connected to the DOM.\n this.elmRef.nativeElement.isConnected\n ? this.elmRef.nativeElement.focus()\n : this._overflowItemRef?.elementRef.nativeElement.isConnected\n ? this._overflowItemRef?.elementRef.nativeElement.focus()\n : this._overflowItemRef?.overflowItem.elmRef.nativeElement.focus();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PopoverModule } from '@fundamental-ngx/core/popover';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { OverflowLayoutComponent } from './overflow-layout.component';\nimport { OverflowItemRefDirective } from './directives/overflow-item-ref.directive';\nimport { OverflowExpandDirective } from './directives/overflow-expand.directive';\nimport { OverflowLayoutItemDirective } from './directives/overflow-layout-item.directive';\nimport { OverflowItemContainerRefDirective } from './directives/overflow-item-container-ref.directive';\nimport { OverflowLayoutPopoverContentDirective } from './directives/overflow-layout-popover-content.directive';\nimport { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';\n\n@NgModule({\n imports: [CommonModule, PopoverModule, ButtonModule],\n exports: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowExpandDirective,\n OverflowLayoutItemDirective,\n OverflowItemContainerRefDirective,\n OverflowLayoutPopoverContentDirective\n ],\n declarations: [\n OverflowLayoutComponent,\n OverflowItemRefDirective,\n OverflowExpandDirective,\n OverflowLayoutItemDirective,\n OverflowItemContainerRefDirective,\n OverflowLayoutPopoverContentDirective,\n OverflowLayoutItemContainerDirective\n ]\n})\nexport class OverflowLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -12,3 +12,5 @@ export * from './interfaces/overflow-popover-content.interface';
12
12
  export * from './tokens/overflow-expand.token';
13
13
  export * from './tokens/overflow-item-ref.token';
14
14
  export * from './tokens/overflow-item.token';
15
+ export * from './tokens/overflow-container.token';
16
+ export * from './overflow-layout.service';
@@ -1,11 +1,11 @@
1
1
  import { TemplateRef } from '@angular/core';
2
2
  import { OverflowItemRef } from './overflow-item-ref.interface';
3
- export declare type OverflowExpandDirectiveContext = {
4
- $implicit: OverflowItemRef[];
3
+ export declare type OverflowExpandDirectiveContext<T extends any[] = any[]> = {
4
+ $implicit: OverflowItemRef<T[number]>[];
5
5
  };
6
- export interface OverflowExpand {
6
+ export interface OverflowExpand<T extends any[] = any[]> {
7
7
  /**
8
8
  * Template reference of the directive.
9
9
  */
10
- templateRef: TemplateRef<OverflowExpandDirectiveContext>;
10
+ templateRef: TemplateRef<OverflowExpandDirectiveContext<T>>;
11
11
  }
@@ -1,10 +1,13 @@
1
1
  import { ElementRef, TemplateRef } from '@angular/core';
2
2
  import { OverflowItem } from './overflow-item.interface';
3
- export declare type OverflowItemDirectiveContext = {
3
+ export declare type OverflowItemDirectiveContext<T = any> = {
4
4
  $implicit: boolean;
5
5
  index: number;
6
+ first: boolean;
7
+ last: boolean;
8
+ item: T;
6
9
  };
7
- export interface OverflowItemRef {
10
+ export interface OverflowItemRef<T = any> {
8
11
  /**
9
12
  * Element reference.
10
13
  */
@@ -21,10 +24,18 @@ export interface OverflowItemRef {
21
24
  * The index of the item in the array of items.
22
25
  */
23
26
  index: number;
27
+ /** Whether this item is last in the array. */
28
+ first: boolean;
29
+ /** Whether this item is first in the array. */
30
+ last: boolean;
31
+ /** Whether the item is softly hidden. */
32
+ softHidden: boolean;
24
33
  /**
25
34
  * Template reference of the directive.
26
35
  */
27
- templateRef: TemplateRef<OverflowItemDirectiveContext>;
36
+ templateRef: TemplateRef<OverflowItemDirectiveContext<T>>;
37
+ /** Item instance. Used for correct autocomplete. */
38
+ item: T;
28
39
  /**
29
40
  * Sets the element reference of the directive.
30
41
  * @param elmRef Element reference.
@@ -1,5 +1,5 @@
1
1
  import { FocusableOption } from '@angular/cdk/a11y';
2
- import { ElementRef } from '@angular/core';
2
+ import { ElementRef, EventEmitter } from '@angular/core';
3
3
  export interface OverflowItem extends FocusableOption {
4
4
  /**
5
5
  * Whether the item is focusable.
@@ -17,4 +17,5 @@ export interface OverflowItem extends FocusableOption {
17
17
  * Whether the item is hidden.
18
18
  */
19
19
  hidden: boolean;
20
+ hiddenChange: EventEmitter<boolean>;
20
21
  }
@@ -6,17 +6,25 @@ import { OverflowExpand } from './interfaces/overflow-expand.interface';
6
6
  import { OverflowItemRef } from './interfaces/overflow-item-ref.interface';
7
7
  import { OverflowItem } from './interfaces/overflow-item.interface';
8
8
  import { OverflowPopoverContent } from './interfaces/overflow-popover-content.interface';
9
+ import { OverflowLayoutService } from './overflow-layout.service';
9
10
  import * as i0 from "@angular/core";
10
11
  export declare class OverflowLayoutComponent implements AfterViewInit, OnDestroy, OverflowContainer {
11
- private _cdr;
12
- private _zone;
13
- private _elRef;
14
- private _rtlService;
12
+ protected _cdr: ChangeDetectorRef;
13
+ protected _zone: NgZone;
14
+ protected _elRef: ElementRef;
15
+ protected _overflowLayoutService: OverflowLayoutService;
16
+ protected _rtlService: RtlService;
15
17
  /**
16
18
  * Maximum amount of visible items.
17
19
  */
18
20
  set maxVisibleItems(value: number);
19
21
  get maxVisibleItems(): number;
22
+ /** Direction of the fitting items calculation. */
23
+ showMorePosition: 'left' | 'right';
24
+ /** Whether to render hidden items in reverse order. */
25
+ reverseHiddenItems: boolean;
26
+ /** Whether to enable keyboard navigation. */
27
+ enableKeyboardNavigation: boolean;
20
28
  /**
21
29
  * Event, triggered when amount of visible items has been changed.
22
30
  */
@@ -69,29 +77,23 @@ export declare class OverflowLayoutComponent implements AfterViewInit, OnDestroy
69
77
  /** @hidden */
70
78
  private readonly _initialClass;
71
79
  /** @hidden */
72
- private _keyboardEventsManager;
73
- /** @hidden */
74
- private _listenToItemResize;
75
- /** @hidden */
76
80
  private readonly _subscription;
77
81
  /** @hidden */
78
82
  private _overflowPopoverContent;
79
83
  /** @hidden */
80
84
  private _fillTrigger$;
81
85
  /** @hidden */
82
- private _dir;
83
- /** @hidden */
84
86
  private _maxVisibleItems;
85
87
  /** @hidden */
86
- constructor(_cdr: ChangeDetectorRef, _zone: NgZone, _elRef: ElementRef, _rtlService: RtlService);
88
+ private _canListenToResize;
89
+ /** @hidden */
90
+ constructor(_cdr: ChangeDetectorRef, _zone: NgZone, _elRef: ElementRef, _overflowLayoutService: OverflowLayoutService, _rtlService: RtlService);
87
91
  /**
88
92
  * Triggers layout recalculation of the items.
89
93
  */
90
94
  triggerRecalculation(): void;
91
95
  /** @hidden */
92
96
  ngOnDestroy(): void;
93
- /** @hidden */
94
- private _keyUpHandler;
95
97
  /**
96
98
  * Sets current focused element.
97
99
  * @param element Element that needs to be focused.
@@ -109,23 +111,9 @@ export declare class OverflowLayoutComponent implements AfterViewInit, OnDestroy
109
111
  /** @hidden */
110
112
  ngAfterViewInit(): void;
111
113
  /** @hidden */
112
- private _listenToChanges;
113
- /** @hidden */
114
- private _listenToSizeChanges;
114
+ private _getConfig;
115
115
  /** @hidden */
116
- private _fitVisibleItems;
117
- /** @hidden */
118
- private _setFocusKeyManager;
119
- /** @hidden Rtl change subscription */
120
- private _subscribeToRtl;
121
- /** @hidden */
122
- private _getForcedItemsIndexes;
123
- /**
124
- * @hidden
125
- * Returns combined width of the element including margins.
126
- * @param element Element to calculate width of.
127
- */
128
- private _getElementWidth;
129
- static ɵfac: i0.ɵɵFactoryDeclaration<OverflowLayoutComponent, [null, null, null, { optional: true; }]>;
130
- static ɵcmp: i0.ɵɵComponentDeclaration<OverflowLayoutComponent, "fd-overflow-layout", never, { "maxVisibleItems": "maxVisibleItems"; }, { "visibleItemsCount": "visibleItemsCount"; "hiddenItemsCount": "hiddenItemsCount"; }, ["_moreButton", "_items", "_overflowItems"], never>;
116
+ private _keyUpHandler;
117
+ static ɵfac: i0.ɵɵFactoryDeclaration<OverflowLayoutComponent, [null, null, null, null, { optional: true; }]>;
118
+ static ɵcmp: i0.ɵɵComponentDeclaration<OverflowLayoutComponent, "fd-overflow-layout", never, { "maxVisibleItems": "maxVisibleItems"; "showMorePosition": "showMorePosition"; "reverseHiddenItems": "reverseHiddenItems"; "enableKeyboardNavigation": "enableKeyboardNavigation"; }, { "visibleItemsCount": "visibleItemsCount"; "hiddenItemsCount": "hiddenItemsCount"; }, ["_moreButton", "_items", "_overflowItems"], never>;
131
119
  }
@@ -0,0 +1,90 @@
1
+ import { FocusKeyManager } from '@angular/cdk/a11y';
2
+ import { ElementRef, OnDestroy, QueryList } from '@angular/core';
3
+ import { RtlService } from '@fundamental-ngx/core/utils';
4
+ import { Observable } from 'rxjs';
5
+ import { OverflowLayoutItemContainerDirective } from './directives/overflow-layout-item-container.directive';
6
+ import { OverflowItemRef } from './interfaces/overflow-item-ref.interface';
7
+ import { OverflowItem } from './interfaces/overflow-item.interface';
8
+ import * as i0 from "@angular/core";
9
+ export interface OverflowLayoutConfig {
10
+ items: QueryList<OverflowItemRef>;
11
+ visibleItems: QueryList<OverflowLayoutItemContainerDirective>;
12
+ itemsWrapper: HTMLElement;
13
+ showMoreContainer: HTMLElement;
14
+ layoutContainerElement: HTMLElement;
15
+ maxVisibleItems: number;
16
+ direction: 'left' | 'right';
17
+ enableKeyboardNavigation: boolean;
18
+ reverseHiddenItems: boolean;
19
+ }
20
+ export declare class OverflowLayoutListeningResult {
21
+ showMore: boolean;
22
+ items: OverflowItemRef[];
23
+ hiddenItems: OverflowItemRef[];
24
+ visibleItems: OverflowItemRef[];
25
+ }
26
+ export declare class OverflowLayoutService implements OnDestroy {
27
+ private _elRef;
28
+ private _rtlService;
29
+ /**
30
+ * Overflow Layout config.
31
+ */
32
+ config: OverflowLayoutConfig;
33
+ /**
34
+ * Overflow Layout calculation result.
35
+ */
36
+ result: OverflowLayoutListeningResult;
37
+ /** @hidden */
38
+ _keyboardEventsManager: FocusKeyManager<OverflowItem>;
39
+ /** @hidden */
40
+ private _listenToItemResize;
41
+ /** @hidden */
42
+ private readonly _subscription;
43
+ /** @hidden */
44
+ private _allItems;
45
+ /** @hidden */
46
+ private _hiddenItems;
47
+ /** @hidden */
48
+ private _overflowItems;
49
+ /** @hidden */
50
+ private _detectChanges$;
51
+ /** @hidden */
52
+ private _result$;
53
+ /** @hidden */
54
+ private _dir;
55
+ /**
56
+ * Observable which emits when changes detection is required.
57
+ */
58
+ get detectChanges(): Observable<void>;
59
+ /**
60
+ * Observable which emits when new calculation result is available.
61
+ */
62
+ get onResult(): Observable<OverflowLayoutListeningResult>;
63
+ /** @hidden */
64
+ constructor(_elRef: ElementRef<HTMLElement>, _rtlService: RtlService | null);
65
+ /** @hidden */
66
+ ngOnDestroy(): void;
67
+ startListening(config: OverflowLayoutConfig): void;
68
+ setConfig(config: OverflowLayoutConfig): void;
69
+ private _emitResult;
70
+ /** @hidden */
71
+ private _listenToChanges;
72
+ /** @hidden */
73
+ private _listenToSizeChanges;
74
+ /** @hidden */
75
+ fitVisibleItems(): void;
76
+ /** @hidden */
77
+ private _setFocusKeyManager;
78
+ /** @hidden Rtl change subscription */
79
+ private _subscribeToRtl;
80
+ /** @hidden */
81
+ private _getForcedItemsIndexes;
82
+ /**
83
+ * @hidden
84
+ * Returns combined width of the element including margins.
85
+ * @param element Element to calculate width of.
86
+ */
87
+ private _getElementWidth;
88
+ static ɵfac: i0.ɵɵFactoryDeclaration<OverflowLayoutService, [null, { optional: true; }]>;
89
+ static ɵprov: i0.ɵɵInjectableDeclaration<OverflowLayoutService>;
90
+ }
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/overflow-layout",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0",
7
7
  "@angular/cdk": "~13.2.4",
8
- "@fundamental-ngx/core/utils": "0.35.3",
8
+ "@fundamental-ngx/core/utils": "0.35.4-rc.2",
9
9
  "rxjs": "7.5.4",
10
- "@fundamental-ngx/core/shared": "0.35.3",
10
+ "@fundamental-ngx/core/shared": "0.35.4-rc.2",
11
11
  "core-js": "3.21.1",
12
12
  "zone.js": "0.11.4",
13
13
  "@angular/platform-browser-dynamic": "~13.2.4",
@@ -17,16 +17,17 @@
17
17
  "@angular/platform-browser": "~13.2.4",
18
18
  "lodash-es": "4.17.21",
19
19
  "focus-trap": "6.7.3",
20
- "@fundamental-ngx/core/popover": "0.35.3",
21
- "@fundamental-ngx/core/notification": "0.35.3",
22
- "@fundamental-ngx/core/button": "0.35.3",
23
- "@fundamental-ngx/core/content-density": "0.35.3",
24
- "@fundamental-ngx/core/icon": "0.35.3",
25
- "@fundamental-ngx/core/mobile-mode": "0.35.3",
26
- "@fundamental-ngx/core/dialog": "0.35.3",
27
- "@fundamental-ngx/core/bar": "0.35.3",
28
- "@fundamental-ngx/core/title": "0.35.3",
29
- "@fundamental-ngx/core/busy-indicator": "0.35.3"
20
+ "@fundamental-ngx/core/popover": "0.35.4-rc.2",
21
+ "@fundamental-ngx/core/notification": "0.35.4-rc.2",
22
+ "@fundamental-ngx/core/button": "0.35.4-rc.2",
23
+ "@fundamental-ngx/core/content-density": "0.35.4-rc.2",
24
+ "@fundamental-ngx/core/icon": "0.35.4-rc.2",
25
+ "@fundamental-ngx/core/mobile-mode": "0.35.4-rc.2",
26
+ "@fundamental-ngx/core/dialog": "0.35.4-rc.2",
27
+ "@fundamental-ngx/core/bar": "0.35.4-rc.2",
28
+ "@fundamental-ngx/core/title": "0.35.4-rc.2",
29
+ "@fundamental-ngx/core/busy-indicator": "0.35.4-rc.2",
30
+ "@angular/localize": "~13.2.4"
30
31
  },
31
32
  "dependencies": {
32
33
  "tslib": "^2.0.0"
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { OverflowExpand } from '../interfaces/overflow-expand.interface';
3
- export declare const FD_OVERFLOW_EXPAND: InjectionToken<OverflowExpand>;
3
+ export declare const FD_OVERFLOW_EXPAND: InjectionToken<OverflowExpand<any[]>>;
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { OverflowItemRef } from '../interfaces/overflow-item-ref.interface';
3
- export declare const FD_OVERFLOW_ITEM_REF: InjectionToken<OverflowItemRef>;
3
+ export declare const FD_OVERFLOW_ITEM_REF: InjectionToken<OverflowItemRef<any>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "schematics": "./schematics/collection.json",
5
5
  "description": "Fundamental Library for Angular - core",
6
6
  "license": "Apache-2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/pagination",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/panel",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/popover",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/product-switch",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/progress-indicator",
3
- "version": "0.35.3",
3
+ "version": "0.35.4-rc.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "~12.0.5",
6
6
  "@angular/core": "~12.0.5"