@fundamental-ngx/core 0.35.1 → 0.35.2-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 (208) 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/directives/avatar-group-overflow-button.directive.d.ts +4 -2
  6. package/avatar-group/esm2020/directives/avatar-group-overflow-button.directive.mjs +5 -1
  7. package/avatar-group/fesm2015/fundamental-ngx-core-avatar-group.mjs +4 -0
  8. package/avatar-group/fesm2015/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  9. package/avatar-group/fesm2020/fundamental-ngx-core-avatar-group.mjs +4 -0
  10. package/avatar-group/fesm2020/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  11. package/avatar-group/package.json +1 -1
  12. package/bar/package.json +1 -1
  13. package/breadcrumb/package.json +1 -1
  14. package/busy-indicator/package.json +1 -1
  15. package/button/package.json +1 -1
  16. package/calendar/package.json +1 -1
  17. package/card/package.json +1 -1
  18. package/carousel/package.json +1 -1
  19. package/checkbox/package.json +1 -1
  20. package/combobox/package.json +1 -1
  21. package/date-picker/package.json +1 -1
  22. package/datetime/package.json +1 -1
  23. package/datetime-picker/package.json +1 -1
  24. package/dialog/package.json +1 -1
  25. package/dynamic-page/package.json +1 -1
  26. package/dynamic-side-content/package.json +1 -1
  27. package/esm2020/avatar-group/directives/avatar-group-overflow-button.directive.mjs +5 -1
  28. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +17 -26
  29. package/esm2020/fundamental-ngx.module.mjs +8 -4
  30. package/esm2020/input-group/input-group.component.mjs +3 -3
  31. package/esm2020/overflow-layout/directives/overflow-expand.directive.mjs +36 -0
  32. package/esm2020/overflow-layout/directives/overflow-item-container-ref.directive.mjs +46 -0
  33. package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +57 -0
  34. package/esm2020/overflow-layout/directives/overflow-layout-item-container.directive.mjs +26 -0
  35. package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +100 -0
  36. package/esm2020/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +68 -0
  37. package/esm2020/overflow-layout/fundamental-ngx-core-overflow-layout.mjs +5 -0
  38. package/esm2020/overflow-layout/index.mjs +15 -0
  39. package/esm2020/overflow-layout/interfaces/overflow-container.interface.mjs +2 -0
  40. package/esm2020/overflow-layout/interfaces/overflow-expand.interface.mjs +2 -0
  41. package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +2 -0
  42. package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +2 -0
  43. package/esm2020/overflow-layout/interfaces/overflow-popover-content.interface.mjs +2 -0
  44. package/esm2020/overflow-layout/overflow-layout.component.mjs +300 -0
  45. package/esm2020/overflow-layout/overflow-layout.module.mjs +52 -0
  46. package/esm2020/overflow-layout/tokens/overflow-container.token.mjs +3 -0
  47. package/esm2020/overflow-layout/tokens/overflow-expand.token.mjs +3 -0
  48. package/esm2020/overflow-layout/tokens/overflow-item-ref.token.mjs +3 -0
  49. package/esm2020/overflow-layout/tokens/overflow-item.token.mjs +3 -0
  50. package/esm2020/public_api.mjs +2 -1
  51. package/esm2020/select/select.component.mjs +1 -2
  52. package/facets/package.json +1 -1
  53. package/feed-input/package.json +1 -1
  54. package/feed-list-item/package.json +1 -1
  55. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +4 -0
  56. package/fesm2015/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  57. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +16 -25
  58. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  59. package/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  60. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  61. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +672 -0
  62. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -0
  63. package/fesm2015/fundamental-ngx-core-select.mjs +0 -1
  64. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  65. package/fesm2015/fundamental-ngx-core.mjs +8 -3
  66. package/fesm2015/fundamental-ngx-core.mjs.map +1 -1
  67. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +4 -0
  68. package/fesm2020/fundamental-ngx-core-avatar-group.mjs.map +1 -1
  69. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +16 -25
  70. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  71. package/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  72. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  73. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +660 -0
  74. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -0
  75. package/fesm2020/fundamental-ngx-core-select.mjs +0 -1
  76. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  77. package/fesm2020/fundamental-ngx-core.mjs +8 -3
  78. package/fesm2020/fundamental-ngx-core.mjs.map +1 -1
  79. package/file-uploader/package.json +1 -1
  80. package/fixed-card-layout/esm2020/fixed-card-layout.component.mjs +17 -26
  81. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +16 -25
  82. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  83. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +16 -25
  84. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  85. package/fixed-card-layout/fixed-card-layout.component.d.ts +4 -6
  86. package/fixed-card-layout/package.json +1 -1
  87. package/flexible-column-layout/package.json +1 -1
  88. package/form/package.json +1 -1
  89. package/formatted-text/package.json +1 -1
  90. package/fundamental-ngx.module.d.ts +2 -1
  91. package/grid-list/package.json +1 -1
  92. package/icon/package.json +1 -1
  93. package/illustrated-message/package.json +1 -1
  94. package/infinite-scroll/package.json +1 -1
  95. package/info-label/package.json +1 -1
  96. package/inline-help/package.json +1 -1
  97. package/input-group/esm2020/input-group.component.mjs +3 -3
  98. package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  99. package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  100. package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  101. package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  102. package/input-group/package.json +1 -1
  103. package/layout-grid/package.json +1 -1
  104. package/layout-panel/package.json +1 -1
  105. package/link/package.json +1 -1
  106. package/list/package.json +1 -1
  107. package/menu/package.json +1 -1
  108. package/message-box/package.json +1 -1
  109. package/message-strip/package.json +1 -1
  110. package/message-toast/package.json +1 -1
  111. package/micro-process-flow/package.json +1 -1
  112. package/mobile-mode/package.json +1 -1
  113. package/multi-input/package.json +1 -1
  114. package/nested-list/package.json +1 -1
  115. package/notification/package.json +1 -1
  116. package/object-identifier/package.json +1 -1
  117. package/object-marker/package.json +1 -1
  118. package/object-number/package.json +1 -1
  119. package/object-status/package.json +1 -1
  120. package/overflow-layout/README.md +7 -0
  121. package/overflow-layout/directives/overflow-expand.directive.d.ts +15 -0
  122. package/overflow-layout/directives/overflow-item-container-ref.directive.d.ts +25 -0
  123. package/overflow-layout/directives/overflow-item-ref.directive.d.ts +42 -0
  124. package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +16 -0
  125. package/overflow-layout/directives/overflow-layout-item.directive.d.ts +38 -0
  126. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +31 -0
  127. package/overflow-layout/esm2020/directives/overflow-expand.directive.mjs +36 -0
  128. package/overflow-layout/esm2020/directives/overflow-item-container-ref.directive.mjs +46 -0
  129. package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +57 -0
  130. package/overflow-layout/esm2020/directives/overflow-layout-item-container.directive.mjs +26 -0
  131. package/overflow-layout/esm2020/directives/overflow-layout-item.directive.mjs +100 -0
  132. package/overflow-layout/esm2020/directives/overflow-layout-popover-content.directive.mjs +68 -0
  133. package/overflow-layout/esm2020/fundamental-ngx-core-overflow-layout.mjs +5 -0
  134. package/overflow-layout/esm2020/index.mjs +15 -0
  135. package/overflow-layout/esm2020/interfaces/overflow-container.interface.mjs +2 -0
  136. package/overflow-layout/esm2020/interfaces/overflow-expand.interface.mjs +2 -0
  137. package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +2 -0
  138. package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +2 -0
  139. package/overflow-layout/esm2020/interfaces/overflow-popover-content.interface.mjs +2 -0
  140. package/overflow-layout/esm2020/overflow-layout.component.mjs +300 -0
  141. package/overflow-layout/esm2020/overflow-layout.module.mjs +52 -0
  142. package/overflow-layout/esm2020/tokens/overflow-container.token.mjs +3 -0
  143. package/overflow-layout/esm2020/tokens/overflow-expand.token.mjs +3 -0
  144. package/overflow-layout/esm2020/tokens/overflow-item-ref.token.mjs +3 -0
  145. package/overflow-layout/esm2020/tokens/overflow-item.token.mjs +3 -0
  146. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +672 -0
  147. package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -0
  148. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +660 -0
  149. package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -0
  150. package/overflow-layout/fundamental-ngx-core-overflow-layout.d.ts +5 -0
  151. package/overflow-layout/index.d.ts +14 -0
  152. package/overflow-layout/interfaces/overflow-container.interface.d.ts +4 -0
  153. package/overflow-layout/interfaces/overflow-expand.interface.d.ts +11 -0
  154. package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +38 -0
  155. package/overflow-layout/interfaces/overflow-item.interface.d.ts +20 -0
  156. package/overflow-layout/interfaces/overflow-popover-content.interface.d.ts +11 -0
  157. package/overflow-layout/overflow-layout.component.d.ts +131 -0
  158. package/overflow-layout/overflow-layout.module.d.ts +16 -0
  159. package/overflow-layout/package.json +53 -0
  160. package/overflow-layout/tokens/overflow-container.token.d.ts +3 -0
  161. package/overflow-layout/tokens/overflow-expand.token.d.ts +3 -0
  162. package/overflow-layout/tokens/overflow-item-ref.token.d.ts +3 -0
  163. package/overflow-layout/tokens/overflow-item.token.d.ts +3 -0
  164. package/package.json +9 -1
  165. package/pagination/package.json +1 -1
  166. package/panel/package.json +1 -1
  167. package/popover/package.json +1 -1
  168. package/product-switch/package.json +1 -1
  169. package/progress-indicator/package.json +1 -1
  170. package/public_api.d.ts +1 -0
  171. package/quick-view/package.json +1 -1
  172. package/radio/package.json +1 -1
  173. package/rating-indicator/package.json +1 -1
  174. package/resizable-card-layout/package.json +1 -1
  175. package/scroll-spy/package.json +1 -1
  176. package/scrollbar/package.json +1 -1
  177. package/segmented-button/package.json +1 -1
  178. package/select/esm2020/select.component.mjs +1 -2
  179. package/select/fesm2015/fundamental-ngx-core-select.mjs +0 -1
  180. package/select/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  181. package/select/fesm2020/fundamental-ngx-core-select.mjs +0 -1
  182. package/select/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  183. package/select/package.json +1 -1
  184. package/shared/package.json +1 -1
  185. package/shellbar/package.json +1 -1
  186. package/side-navigation/package.json +1 -1
  187. package/slider/package.json +1 -1
  188. package/split-button/package.json +1 -1
  189. package/splitter/package.json +1 -1
  190. package/status-indicator/package.json +1 -1
  191. package/step-input/package.json +1 -1
  192. package/switch/package.json +1 -1
  193. package/table/package.json +1 -1
  194. package/tabs/package.json +1 -1
  195. package/text/package.json +1 -1
  196. package/theming/package.json +1 -1
  197. package/tile/package.json +1 -1
  198. package/time/package.json +1 -1
  199. package/time-picker/package.json +1 -1
  200. package/timeline/package.json +1 -1
  201. package/title/package.json +1 -1
  202. package/token/package.json +1 -1
  203. package/toolbar/package.json +1 -1
  204. package/tree/package.json +1 -1
  205. package/upload-collection/package.json +1 -1
  206. package/utils/package.json +1 -1
  207. package/vertical-navigation/package.json +1 -1
  208. package/wizard/package.json +1 -1
@@ -0,0 +1,660 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Directive, HostBinding, ContentChild, InjectionToken, Inject, Input, HostListener, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Output, ContentChildren, ViewChildren, ViewChild, SkipSelf, NgModule } from '@angular/core';
3
+ import * as i4 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i2 from '@fundamental-ngx/core/popover';
6
+ import { PopoverModule } from '@fundamental-ngx/core/popover';
7
+ import * as i3 from '@fundamental-ngx/core/button';
8
+ import { ButtonModule } from '@fundamental-ngx/core/button';
9
+ import { FocusKeyManager } from '@angular/cdk/a11y';
10
+ import { TAB, DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@angular/cdk/keycodes';
11
+ import * as i1 from '@fundamental-ngx/core/utils';
12
+ import { KeyUtil, resizeObservable } from '@fundamental-ngx/core/utils';
13
+ import { Subscription, Subject, debounceTime, skip, filter, distinctUntilChanged } from 'rxjs';
14
+
15
+ /**
16
+ * Directive to hide component without actual destroying of the component instance.
17
+ */
18
+ class OverflowItemContainerRefDirective {
19
+ /** @hidden */
20
+ constructor(_templateRef, _viewContainerRef, _elmRef) {
21
+ this._templateRef = _templateRef;
22
+ this._viewContainerRef = _viewContainerRef;
23
+ this._elmRef = _elmRef;
24
+ /** @hidden */
25
+ this._detached = false;
26
+ /** @hidden */
27
+ this._hidden = false;
28
+ // Create embedded view right away and manipulate its visibility later.
29
+ this._viewContainerRef.createEmbeddedView(this._templateRef);
30
+ }
31
+ /**
32
+ * Shows or hides element without destroying the view itself.
33
+ * @param value
34
+ */
35
+ set hidden(value) {
36
+ if (this._hidden === value) {
37
+ return;
38
+ }
39
+ this._hidden = value;
40
+ if (value && !this._detached) {
41
+ this._viewRef = this._viewContainerRef.detach();
42
+ this._detached = true;
43
+ }
44
+ else if (!value && this._viewRef && this._detached) {
45
+ this._viewRef = this._viewContainerRef.insert(this._viewRef);
46
+ this._detached = false;
47
+ }
48
+ }
49
+ }
50
+ OverflowItemContainerRefDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowItemContainerRefDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
51
+ OverflowItemContainerRefDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowItemContainerRefDirective, selector: "[fdOverflowItemContainerRef]", ngImport: i0 });
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowItemContainerRefDirective, decorators: [{
53
+ type: Directive,
54
+ args: [{
55
+ selector: '[fdOverflowItemContainerRef]'
56
+ }]
57
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }]; } });
58
+
59
+ class OverflowLayoutItemContainerDirective {
60
+ /** @hidden */
61
+ constructor(elementRef) {
62
+ this.elementRef = elementRef;
63
+ /** @hidden */
64
+ this._initialClass = 'fd-overflow-layout__item';
65
+ }
66
+ }
67
+ OverflowLayoutItemContainerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutItemContainerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
68
+ OverflowLayoutItemContainerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutItemContainerDirective, selector: "[fdOverflowLayoutItemContainer]", host: { properties: { "class": "this._initialClass" } }, queries: [{ propertyName: "containerRef", first: true, predicate: OverflowItemContainerRefDirective, descendants: true }], ngImport: i0 });
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutItemContainerDirective, decorators: [{
70
+ type: Directive,
71
+ args: [{
72
+ selector: '[fdOverflowLayoutItemContainer]'
73
+ }]
74
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { _initialClass: [{
75
+ type: HostBinding,
76
+ args: ['class']
77
+ }], containerRef: [{
78
+ type: ContentChild,
79
+ args: [OverflowItemContainerRefDirective]
80
+ }] } });
81
+
82
+ const FD_OVERFLOW_CONTAINER = new InjectionToken('FdOverflowContainer');
83
+
84
+ const FD_OVERFLOW_EXPAND = new InjectionToken('FdOverflowLayoutExpand');
85
+
86
+ const FD_OVERFLOW_ITEM_REF = new InjectionToken('OverflowLayoutItemRef');
87
+
88
+ const FD_OVERFLOW_ITEM = new InjectionToken('FdOverflowItem');
89
+
90
+ /**
91
+ * Directive to wrap Overlay Layout "More" popover content.
92
+ * Used to apply keyboard navigation through the items.
93
+ */
94
+ class OverflowLayoutPopoverContentDirective {
95
+ /** @hidden */
96
+ constructor(_overflowContainer) {
97
+ this._overflowContainer = _overflowContainer;
98
+ /** @hidden */
99
+ this._initialClass = 'fd-overflow-layout__popover-container';
100
+ this._overflowContainer?.registerPopoverContent(this);
101
+ }
102
+ /**
103
+ * Array of hidden items.
104
+ */
105
+ set items(value) {
106
+ this._items = value;
107
+ this._keyboardEventsManager = new FocusKeyManager(this._items.filter((item) => item.overflowItem.focusable).map((item) => item.overflowItem))
108
+ .withWrap()
109
+ .withHorizontalOrientation('ltr');
110
+ }
111
+ /** @hidden */
112
+ keyUpHandler(event) {
113
+ if (KeyUtil.isKeyCode(event, TAB)) {
114
+ const index = this._items.findIndex((item) => item.elementRef.nativeElement === event.target);
115
+ if (index !== -1) {
116
+ this._keyboardEventsManager.setActiveItem(index);
117
+ }
118
+ }
119
+ if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {
120
+ event.preventDefault();
121
+ // passing the event to key manager, so we get a change fired
122
+ this._keyboardEventsManager.onKeydown(event);
123
+ }
124
+ }
125
+ /**
126
+ * Focuses on the first tabbable element inside directive's element.
127
+ */
128
+ focusFirstTabbableElement() {
129
+ this._keyboardEventsManager.setActiveItem(0);
130
+ }
131
+ }
132
+ OverflowLayoutPopoverContentDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutPopoverContentDirective, deps: [{ token: FD_OVERFLOW_CONTAINER }], target: i0.ɵɵFactoryTarget.Directive });
133
+ OverflowLayoutPopoverContentDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutPopoverContentDirective, selector: "[fdOverflowLayoutPopoverContent]", inputs: { items: "items" }, host: { listeners: { "keyup": "keyUpHandler($event)" }, properties: { "class": "this._initialClass" } }, ngImport: i0 });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutPopoverContentDirective, decorators: [{
135
+ type: Directive,
136
+ args: [{
137
+ selector: '[fdOverflowLayoutPopoverContent]'
138
+ }]
139
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
140
+ type: Inject,
141
+ args: [FD_OVERFLOW_CONTAINER]
142
+ }] }]; }, propDecorators: { items: [{
143
+ type: Input
144
+ }], _initialClass: [{
145
+ type: HostBinding,
146
+ args: ['class']
147
+ }], keyUpHandler: [{
148
+ type: HostListener,
149
+ args: ['keyup', ['$event']]
150
+ }] } });
151
+
152
+ class OverflowLayoutComponent {
153
+ /** @hidden */
154
+ constructor(_cdr, _zone, _elRef, _rtlService) {
155
+ this._cdr = _cdr;
156
+ this._zone = _zone;
157
+ this._elRef = _elRef;
158
+ this._rtlService = _rtlService;
159
+ /**
160
+ * Event, triggered when amount of visible items has been changed.
161
+ */
162
+ this.visibleItemsCount = new EventEmitter();
163
+ /**
164
+ * Event, triggered when amount of hidden items has been changed.
165
+ */
166
+ this.hiddenItemsCount = new EventEmitter();
167
+ /** @hidden */
168
+ this._allItems = [];
169
+ /** @hidden */
170
+ this._hiddenItems = [];
171
+ /** @hidden */
172
+ this._showMore = false;
173
+ /** @hidden */
174
+ this._initialClass = 'fd-overflow-layout';
175
+ /** @hidden */
176
+ this._listenToItemResize = true;
177
+ /** @hidden */
178
+ this._subscription = new Subscription();
179
+ /** @hidden */
180
+ this._fillTrigger$ = new Subject();
181
+ /** @hidden */
182
+ this._dir = 'ltr';
183
+ /** @hidden */
184
+ this._maxVisibleItems = Infinity;
185
+ this._subscription.add(this._fillTrigger$.pipe(debounceTime(30)).subscribe(() => this._fitVisibleItems()));
186
+ }
187
+ /**
188
+ * Maximum amount of visible items.
189
+ */
190
+ set maxVisibleItems(value) {
191
+ if (value === this._maxVisibleItems) {
192
+ return;
193
+ }
194
+ this._maxVisibleItems = value;
195
+ this.triggerRecalculation();
196
+ }
197
+ get maxVisibleItems() {
198
+ return this._maxVisibleItems;
199
+ }
200
+ /**
201
+ * Triggers layout recalculation of the items.
202
+ */
203
+ triggerRecalculation() {
204
+ this._fillTrigger$.next();
205
+ }
206
+ /** @hidden */
207
+ ngOnDestroy() {
208
+ this._subscription.unsubscribe();
209
+ }
210
+ /** @hidden */
211
+ _keyUpHandler(event) {
212
+ if (KeyUtil.isKeyCode(event, TAB)) {
213
+ const index = this._allItems.findIndex((item) => item.overflowItem?.focusable && item.elementRef.nativeElement === event.target);
214
+ if (index !== -1) {
215
+ this._keyboardEventsManager.setActiveItem(index);
216
+ }
217
+ }
218
+ if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, LEFT_ARROW, RIGHT_ARROW])) {
219
+ event.preventDefault();
220
+ // passing the event to key manager so, we get a change fired
221
+ this._keyboardEventsManager.onKeydown(event);
222
+ }
223
+ }
224
+ /**
225
+ * Sets current focused element.
226
+ * @param element Element that needs to be focused.
227
+ */
228
+ setFocusedElement(element) {
229
+ const index = this._overflowItems.toArray().findIndex((item) => item === element);
230
+ if (index !== -1) {
231
+ this._keyboardEventsManager.setActiveItem(index);
232
+ }
233
+ }
234
+ /**
235
+ * Registers popover content directive for main component.
236
+ * @param content {OverflowPopoverContent} directive
237
+ */
238
+ registerPopoverContent(content) {
239
+ this._overflowPopoverContent = content;
240
+ }
241
+ /** @hidden */
242
+ _itemsTrackFn(_, item) {
243
+ return item.templateRef;
244
+ }
245
+ /** @hidden */
246
+ _onPopoverStateChange(opened) {
247
+ if (opened) {
248
+ this._overflowPopoverContent?.focusFirstTabbableElement();
249
+ }
250
+ }
251
+ /** @hidden */
252
+ ngAfterViewInit() {
253
+ this._fitVisibleItems();
254
+ this._setFocusKeyManager();
255
+ this._listenToChanges();
256
+ this._subscribeToRtl();
257
+ }
258
+ /** @hidden */
259
+ _listenToChanges() {
260
+ this._subscription.add(this._items.changes.subscribe(() => {
261
+ setTimeout(() => {
262
+ this._fitVisibleItems();
263
+ });
264
+ }));
265
+ this._listenToSizeChanges(this._elRef.nativeElement, this._itemsWrapper.nativeElement);
266
+ }
267
+ /** @hidden */
268
+ _listenToSizeChanges(...elements) {
269
+ elements.forEach((element) => this._subscription.add(resizeObservable(element)
270
+ .pipe(skip(1), filter(() => this._listenToItemResize), distinctUntilChanged(), debounceTime(30))
271
+ .subscribe(() => {
272
+ setTimeout(() => {
273
+ this._fitVisibleItems();
274
+ });
275
+ })));
276
+ }
277
+ /** @hidden */
278
+ _fitVisibleItems() {
279
+ this._listenToItemResize = false;
280
+ this._allItems = this._items.toArray();
281
+ this._visibleItems.forEach((i) => (i.containerRef.hidden = false));
282
+ this._allItems.forEach((item, index) => {
283
+ item.hidden = false;
284
+ item.index = index;
285
+ });
286
+ this._cdr.detectChanges();
287
+ const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;
288
+ const itemsContainerWidth = this._itemsWrapper.nativeElement.getBoundingClientRect().width;
289
+ if (containerWidth >= itemsContainerWidth &&
290
+ this._visibleItems.length <= this.maxVisibleItems &&
291
+ this._hiddenItems.length === 0) {
292
+ this._showMore = false;
293
+ this._cdr.detectChanges();
294
+ this._listenToItemResize = true;
295
+ return;
296
+ }
297
+ this._showMore = true;
298
+ let fittingElmCount = 0;
299
+ let fittingElmsWidth = 0;
300
+ let shouldHideItems = false;
301
+ this._cdr.detectChanges();
302
+ const showMoreContainerWidth = this._showMoreContainer.nativeElement.getBoundingClientRect().width;
303
+ let layoutWidth = this._layoutContainer.nativeElement.getBoundingClientRect().width;
304
+ // Try to find all forced visible items
305
+ const forcedItemsIndexes = this._getForcedItemsIndexes();
306
+ forcedItemsIndexes.forEach((itemIndex) => {
307
+ const container = this._visibleItems.get(itemIndex);
308
+ if (!container) {
309
+ return;
310
+ }
311
+ const elementSize = this._getElementWidth(container.elementRef.nativeElement);
312
+ layoutWidth -= elementSize;
313
+ });
314
+ if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {
315
+ console.warn('There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.');
316
+ }
317
+ this._visibleItems.forEach((item, index) => {
318
+ const itemRef = this._allItems[index];
319
+ if (shouldHideItems && !itemRef.overflowItem.forceVisibility) {
320
+ item.containerRef.hidden = true;
321
+ itemRef.hidden = true;
322
+ return;
323
+ }
324
+ const elementSize = this._getElementWidth(item.elementRef.nativeElement);
325
+ const combinedWidth = fittingElmsWidth + elementSize;
326
+ if ((combinedWidth <= layoutWidth ||
327
+ (item === this._visibleItems.last && combinedWidth <= layoutWidth + showMoreContainerWidth)) &&
328
+ fittingElmCount < this.maxVisibleItems) {
329
+ fittingElmsWidth += elementSize;
330
+ fittingElmCount++;
331
+ }
332
+ else if (!itemRef.overflowItem.forceVisibility) {
333
+ shouldHideItems = true;
334
+ item.containerRef.hidden = true;
335
+ itemRef.hidden = true;
336
+ }
337
+ });
338
+ this._hiddenItems = this._allItems.filter((i) => i.hidden);
339
+ this.visibleItemsCount.emit(this._allItems.filter((i) => !i.hidden).length);
340
+ this.hiddenItemsCount.emit(this._hiddenItems.length);
341
+ this._showMore = this._hiddenItems.length > 0;
342
+ this._cdr.detectChanges();
343
+ this._listenToItemResize = true;
344
+ }
345
+ /** @hidden */
346
+ _setFocusKeyManager() {
347
+ this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';
348
+ this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)
349
+ .withWrap()
350
+ .withHorizontalOrientation(this._dir)
351
+ .skipPredicate((item) => !item.focusable || item.hidden);
352
+ }
353
+ /** @hidden Rtl change subscription */
354
+ _subscribeToRtl() {
355
+ if (!this._rtlService) {
356
+ return;
357
+ }
358
+ const rtlSub = this._rtlService.rtl.subscribe((isRtl) => {
359
+ this._dir = isRtl ? 'rtl' : 'ltr';
360
+ this._keyboardEventsManager = this._keyboardEventsManager.withHorizontalOrientation(isRtl ? 'rtl' : 'ltr');
361
+ });
362
+ this._subscription.add(rtlSub);
363
+ }
364
+ /** @hidden */
365
+ _getForcedItemsIndexes() {
366
+ return this._allItems
367
+ .map((item, index) => (item.overflowItem.forceVisibility ? index : -1))
368
+ .filter((i) => i > -1);
369
+ }
370
+ /**
371
+ * @hidden
372
+ * Returns combined width of the element including margins.
373
+ * @param element Element to calculate width of.
374
+ */
375
+ _getElementWidth(element) {
376
+ const elementStyle = getComputedStyle(element);
377
+ const elementWidth = element.getBoundingClientRect().width;
378
+ const elementSize = elementWidth + parseFloat(elementStyle.marginLeft) + parseFloat(elementStyle.marginRight);
379
+ return elementSize;
380
+ }
381
+ }
382
+ OverflowLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
383
+ OverflowLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutComponent, selector: "fd-overflow-layout", inputs: { maxVisibleItems: "maxVisibleItems" }, outputs: { visibleItemsCount: "visibleItemsCount", hiddenItemsCount: "hiddenItemsCount" }, host: { listeners: { "keyup": "_keyUpHandler($event)" }, properties: { "class": "this._initialClass" } }, providers: [
384
+ {
385
+ provide: FD_OVERFLOW_CONTAINER,
386
+ useExisting: OverflowLayoutComponent
387
+ }
388
+ ], queries: [{ propertyName: "_moreButton", first: true, predicate: FD_OVERFLOW_EXPAND, descendants: true }, { propertyName: "_items", predicate: FD_OVERFLOW_ITEM_REF }, { propertyName: "_overflowItems", predicate: FD_OVERFLOW_ITEM }], viewQueries: [{ propertyName: "_itemsWrapper", first: true, predicate: ["itemsWrapper"], descendants: true }, { propertyName: "_layoutContainer", first: true, predicate: ["layoutContainer"], descendants: true }, { propertyName: "_showMoreContainer", first: true, predicate: ["showMoreContainer"], descendants: true }, { propertyName: "_visibleItems", predicate: OverflowLayoutItemContainerDirective, descendants: true }], ngImport: i0, template: "<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", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}\n"], components: [{ type: i2.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { type: i2.PopoverControlComponent, selector: "fd-popover-control" }, { type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i2.PopoverBodyComponent, selector: "fd-popover-body" }], directives: [{ type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: OverflowLayoutItemContainerDirective, selector: "[fdOverflowLayoutItemContainer]" }, { type: OverflowItemContainerRefDirective, selector: "[fdOverflowItemContainerRef]" }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: OverflowLayoutPopoverContentDirective, selector: "[fdOverflowLayoutPopoverContent]", inputs: ["items"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
389
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutComponent, decorators: [{
390
+ type: Component,
391
+ args: [{ selector: 'fd-overflow-layout', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
392
+ {
393
+ provide: FD_OVERFLOW_CONTAINER,
394
+ useExisting: OverflowLayoutComponent
395
+ }
396
+ ], template: "<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", styles: [".fd-overflow-layout{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:100%}.fd-overflow-layout:before,.fd-overflow-layout:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__items:before,.fd-overflow-layout__items:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__more{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center}.fd-overflow-layout__more:before,.fd-overflow-layout__more:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__items-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:flex;align-items:center;width:0;flex:1 auto}.fd-overflow-layout__items-container:before,.fd-overflow-layout__items-container:after{box-sizing:inherit;font-size:inherit}.fd-overflow-layout__popover-container{font-size:var(--sapFontSize);line-height:var(--sapContent_LineHeight);color:var(--sapTextColor);font-family:var(--sapFontFamily);font-weight:400;box-sizing:border-box;padding:0;margin:0;border:0;display:block;white-space:normal}.fd-overflow-layout__popover-container:before,.fd-overflow-layout__popover-container:after{box-sizing:inherit;font-size:inherit}\n"] }]
397
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.RtlService, decorators: [{
398
+ type: Optional
399
+ }] }]; }, propDecorators: { maxVisibleItems: [{
400
+ type: Input
401
+ }], visibleItemsCount: [{
402
+ type: Output
403
+ }], hiddenItemsCount: [{
404
+ type: Output
405
+ }], _items: [{
406
+ type: ContentChildren,
407
+ args: [FD_OVERFLOW_ITEM_REF]
408
+ }], _moreButton: [{
409
+ type: ContentChild,
410
+ args: [FD_OVERFLOW_EXPAND]
411
+ }], _overflowItems: [{
412
+ type: ContentChildren,
413
+ args: [FD_OVERFLOW_ITEM]
414
+ }], _visibleItems: [{
415
+ type: ViewChildren,
416
+ args: [OverflowLayoutItemContainerDirective]
417
+ }], _itemsWrapper: [{
418
+ type: ViewChild,
419
+ args: ['itemsWrapper']
420
+ }], _layoutContainer: [{
421
+ type: ViewChild,
422
+ args: ['layoutContainer']
423
+ }], _showMoreContainer: [{
424
+ type: ViewChild,
425
+ args: ['showMoreContainer']
426
+ }], _initialClass: [{
427
+ type: HostBinding,
428
+ args: ['class']
429
+ }], _keyUpHandler: [{
430
+ type: HostListener,
431
+ args: ['keyup', ['$event']]
432
+ }] } });
433
+
434
+ /**
435
+ * Structural directive which is used to pass the context of the item to the template engine.
436
+ */
437
+ class OverflowItemRefDirective {
438
+ /** @hidden */
439
+ constructor(templateRef) {
440
+ this.templateRef = templateRef;
441
+ /**
442
+ * Whether the item is hidden.
443
+ */
444
+ this.hidden = false;
445
+ }
446
+ /** @hidden */
447
+ static ngTemplateContextGuard(dir, ctx) {
448
+ return true;
449
+ }
450
+ /**
451
+ * Sets the element reference of the `fdOverflowLayoutItem` directive.`
452
+ * @param elmRef
453
+ */
454
+ setElementRef(elmRef) {
455
+ if (this.elementRef) {
456
+ return;
457
+ }
458
+ this.elementRef = elmRef;
459
+ }
460
+ /**
461
+ * Sets the `fdOverflowLayoutItem` directive.
462
+ * @param item
463
+ */
464
+ setOverflowItem(item) {
465
+ this.overflowItem = item;
466
+ }
467
+ }
468
+ OverflowItemRefDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowItemRefDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
469
+ OverflowItemRefDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowItemRefDirective, selector: "[fdOverflowItemRef]", providers: [
470
+ {
471
+ provide: FD_OVERFLOW_ITEM_REF,
472
+ useExisting: OverflowItemRefDirective
473
+ }
474
+ ], ngImport: i0 });
475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowItemRefDirective, decorators: [{
476
+ type: Directive,
477
+ args: [{
478
+ selector: '[fdOverflowItemRef]',
479
+ providers: [
480
+ {
481
+ provide: FD_OVERFLOW_ITEM_REF,
482
+ useExisting: OverflowItemRefDirective
483
+ }
484
+ ]
485
+ }]
486
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
487
+
488
+ /**
489
+ * Structural directive which is responsible for rendering the "More" button and handling further logic.
490
+ */
491
+ class OverflowExpandDirective {
492
+ /** @hidden */
493
+ constructor(templateRef) {
494
+ this.templateRef = templateRef;
495
+ }
496
+ /** @hidden */
497
+ static ngTemplateContextGuard(dir, ctx) {
498
+ return true;
499
+ }
500
+ }
501
+ OverflowExpandDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowExpandDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
502
+ OverflowExpandDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowExpandDirective, selector: "[fdOverflowExpand]", providers: [
503
+ {
504
+ provide: FD_OVERFLOW_EXPAND,
505
+ useExisting: OverflowExpandDirective
506
+ }
507
+ ], ngImport: i0 });
508
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowExpandDirective, decorators: [{
509
+ type: Directive,
510
+ args: [{
511
+ selector: '[fdOverflowExpand]',
512
+ providers: [
513
+ {
514
+ provide: FD_OVERFLOW_EXPAND,
515
+ useExisting: OverflowExpandDirective
516
+ }
517
+ ]
518
+ }]
519
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
520
+
521
+ /**
522
+ * Directive to mark element as part of for Overflow Layout Component items.
523
+ */
524
+ class OverflowLayoutItemDirective {
525
+ /** @hidden */
526
+ constructor(_overflowContainer, elmRef, _overflowItemRef) {
527
+ this._overflowContainer = _overflowContainer;
528
+ this.elmRef = elmRef;
529
+ this._overflowItemRef = _overflowItemRef;
530
+ /** Whether the item should be focusable. */
531
+ this.focusable = false;
532
+ /** @hidden */
533
+ this._forceVisibility = false;
534
+ }
535
+ /** Whether to force the visibility of the item. */
536
+ set forceVisibility(value) {
537
+ if (value === this._forceVisibility) {
538
+ return;
539
+ }
540
+ this._forceVisibility = value;
541
+ this._overflowContainer.triggerRecalculation();
542
+ }
543
+ get forceVisibility() {
544
+ return this._forceVisibility;
545
+ }
546
+ /**
547
+ * Whether the item is hidden.
548
+ */
549
+ get hidden() {
550
+ return this._overflowItemRef?.hidden === true;
551
+ }
552
+ /** @hidden */
553
+ get _tabindex() {
554
+ return this.focusable ? 0 : -1;
555
+ }
556
+ /** @hidden */
557
+ onFocus() {
558
+ this._overflowContainer.setFocusedElement(this);
559
+ }
560
+ /** @hidden */
561
+ ngOnInit() {
562
+ this._overflowItemRef?.setElementRef(this.elmRef);
563
+ this._overflowItemRef?.setOverflowItem(this);
564
+ }
565
+ /**
566
+ * Focuses connected to the DOM element.
567
+ */
568
+ focus() {
569
+ // Since we use detach() method of ViewContainerRef to remove elements from the visible list,
570
+ // we need to check that element is connected to the DOM.
571
+ this.elmRef.nativeElement.isConnected
572
+ ? this.elmRef.nativeElement.focus()
573
+ : this._overflowItemRef?.elementRef.nativeElement.isConnected
574
+ ? this._overflowItemRef?.elementRef.nativeElement.focus()
575
+ : this._overflowItemRef?.overflowItem.elmRef.nativeElement.focus();
576
+ }
577
+ }
578
+ OverflowLayoutItemDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutItemDirective, deps: [{ token: OverflowLayoutComponent }, { token: i0.ElementRef }, { token: FD_OVERFLOW_ITEM_REF, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
579
+ OverflowLayoutItemDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: OverflowLayoutItemDirective, selector: "[fdOverflowLayoutItem]", inputs: { focusable: "focusable", forceVisibility: "forceVisibility" }, host: { listeners: { "focus": "onFocus()" }, properties: { "attr.tabindex": "this._tabindex" } }, providers: [
580
+ {
581
+ provide: FD_OVERFLOW_ITEM,
582
+ useExisting: OverflowLayoutItemDirective
583
+ }
584
+ ], ngImport: i0 });
585
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutItemDirective, decorators: [{
586
+ type: Directive,
587
+ args: [{
588
+ selector: '[fdOverflowLayoutItem]',
589
+ providers: [
590
+ {
591
+ provide: FD_OVERFLOW_ITEM,
592
+ useExisting: OverflowLayoutItemDirective
593
+ }
594
+ ]
595
+ }]
596
+ }], ctorParameters: function () { return [{ type: OverflowLayoutComponent }, { type: i0.ElementRef }, { type: undefined, decorators: [{
597
+ type: Optional
598
+ }, {
599
+ type: SkipSelf
600
+ }, {
601
+ type: Inject,
602
+ args: [FD_OVERFLOW_ITEM_REF]
603
+ }] }]; }, propDecorators: { focusable: [{
604
+ type: Input
605
+ }], forceVisibility: [{
606
+ type: Input
607
+ }], _tabindex: [{
608
+ type: HostBinding,
609
+ args: ['attr.tabindex']
610
+ }], onFocus: [{
611
+ type: HostListener,
612
+ args: ['focus']
613
+ }] } });
614
+
615
+ class OverflowLayoutModule {
616
+ }
617
+ OverflowLayoutModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
618
+ OverflowLayoutModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutModule, declarations: [OverflowLayoutComponent,
619
+ OverflowItemRefDirective,
620
+ OverflowExpandDirective,
621
+ OverflowLayoutItemDirective,
622
+ OverflowItemContainerRefDirective,
623
+ OverflowLayoutPopoverContentDirective,
624
+ OverflowLayoutItemContainerDirective], imports: [CommonModule, PopoverModule, ButtonModule], exports: [OverflowLayoutComponent,
625
+ OverflowItemRefDirective,
626
+ OverflowExpandDirective,
627
+ OverflowLayoutItemDirective,
628
+ OverflowItemContainerRefDirective,
629
+ OverflowLayoutPopoverContentDirective] });
630
+ OverflowLayoutModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutModule, imports: [[CommonModule, PopoverModule, ButtonModule]] });
631
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutModule, decorators: [{
632
+ type: NgModule,
633
+ args: [{
634
+ imports: [CommonModule, PopoverModule, ButtonModule],
635
+ exports: [
636
+ OverflowLayoutComponent,
637
+ OverflowItemRefDirective,
638
+ OverflowExpandDirective,
639
+ OverflowLayoutItemDirective,
640
+ OverflowItemContainerRefDirective,
641
+ OverflowLayoutPopoverContentDirective
642
+ ],
643
+ declarations: [
644
+ OverflowLayoutComponent,
645
+ OverflowItemRefDirective,
646
+ OverflowExpandDirective,
647
+ OverflowLayoutItemDirective,
648
+ OverflowItemContainerRefDirective,
649
+ OverflowLayoutPopoverContentDirective,
650
+ OverflowLayoutItemContainerDirective
651
+ ]
652
+ }]
653
+ }] });
654
+
655
+ /**
656
+ * Generated bundle index. Do not edit.
657
+ */
658
+
659
+ export { FD_OVERFLOW_EXPAND, FD_OVERFLOW_ITEM, FD_OVERFLOW_ITEM_REF, OverflowExpandDirective, OverflowItemContainerRefDirective, OverflowItemRefDirective, OverflowLayoutComponent, OverflowLayoutItemDirective, OverflowLayoutModule, OverflowLayoutPopoverContentDirective };
660
+ //# sourceMappingURL=fundamental-ngx-core-overflow-layout.mjs.map