@fundamental-ngx/core 0.35.2-rc.30 → 0.35.2-rc.31

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 (104) 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/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/content-density/package.json +3 -3
  16. package/date-picker/package.json +1 -1
  17. package/datetime/package.json +1 -1
  18. package/datetime-picker/package.json +1 -1
  19. package/dialog/package.json +1 -1
  20. package/dynamic-page/package.json +1 -1
  21. package/dynamic-side-content/package.json +1 -1
  22. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +22 -33
  23. package/facets/package.json +1 -1
  24. package/feed-input/package.json +1 -1
  25. package/feed-list-item/package.json +1 -1
  26. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +21 -32
  27. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  28. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +21 -32
  29. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  30. package/file-uploader/package.json +1 -1
  31. package/fixed-card-layout/esm2020/fixed-card-layout.component.mjs +22 -33
  32. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +21 -32
  33. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  34. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +21 -32
  35. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  36. package/fixed-card-layout/fixed-card-layout.component.d.ts +4 -6
  37. package/fixed-card-layout/package.json +1 -1
  38. package/flexible-column-layout/package.json +1 -1
  39. package/form/package.json +1 -1
  40. package/formatted-text/package.json +1 -1
  41. package/grid-list/package.json +1 -1
  42. package/icon/package.json +1 -1
  43. package/illustrated-message/package.json +1 -1
  44. package/infinite-scroll/package.json +1 -1
  45. package/info-label/package.json +1 -1
  46. package/inline-help/package.json +1 -1
  47. package/input-group/package.json +1 -1
  48. package/layout-grid/package.json +1 -1
  49. package/layout-panel/package.json +1 -1
  50. package/link/package.json +1 -1
  51. package/list/package.json +1 -1
  52. package/menu/package.json +1 -1
  53. package/message-box/package.json +1 -1
  54. package/message-strip/package.json +1 -1
  55. package/message-toast/package.json +1 -1
  56. package/micro-process-flow/package.json +1 -1
  57. package/mobile-mode/package.json +1 -1
  58. package/multi-input/package.json +1 -1
  59. package/nested-list/package.json +1 -1
  60. package/notification/package.json +1 -1
  61. package/object-identifier/package.json +1 -1
  62. package/object-marker/package.json +1 -1
  63. package/object-number/package.json +1 -1
  64. package/object-status/package.json +1 -1
  65. package/overflow-layout/package.json +13 -13
  66. package/package.json +1 -1
  67. package/pagination/package.json +1 -1
  68. package/panel/package.json +1 -1
  69. package/popover/package.json +1 -1
  70. package/product-switch/package.json +1 -1
  71. package/progress-indicator/package.json +1 -1
  72. package/quick-view/package.json +1 -1
  73. package/radio/package.json +1 -1
  74. package/rating-indicator/package.json +1 -1
  75. package/resizable-card-layout/package.json +1 -1
  76. package/scroll-spy/package.json +1 -1
  77. package/scrollbar/package.json +1 -1
  78. package/segmented-button/package.json +1 -1
  79. package/select/package.json +1 -1
  80. package/shared/package.json +1 -1
  81. package/shellbar/package.json +1 -1
  82. package/side-navigation/package.json +1 -1
  83. package/slider/package.json +1 -1
  84. package/split-button/package.json +1 -1
  85. package/splitter/package.json +1 -1
  86. package/status-indicator/package.json +1 -1
  87. package/step-input/package.json +1 -1
  88. package/switch/package.json +1 -1
  89. package/table/package.json +1 -1
  90. package/tabs/package.json +1 -1
  91. package/text/package.json +1 -1
  92. package/theming/package.json +1 -1
  93. package/tile/package.json +1 -1
  94. package/time/package.json +1 -1
  95. package/time-picker/package.json +1 -1
  96. package/timeline/package.json +1 -1
  97. package/title/package.json +1 -1
  98. package/token/package.json +1 -1
  99. package/toolbar/package.json +1 -1
  100. package/tree/package.json +1 -1
  101. package/upload-collection/package.json +1 -1
  102. package/utils/package.json +1 -1
  103. package/vertical-navigation/package.json +1 -1
  104. package/wizard/package.json +1 -1
@@ -8,7 +8,7 @@ import * as i1 from '@fundamental-ngx/core/utils';
8
8
  import { getDocumentFontSize, resizeObservable, DragAndDropModule } from '@fundamental-ngx/core/utils';
9
9
  import { FocusKeyManager } from '@angular/cdk/a11y';
10
10
  import { Subscription, Subject } from 'rxjs';
11
- import { takeUntil, debounceTime, delay, distinct } from 'rxjs/operators';
11
+ import { takeUntil, debounceTime, filter, distinct } from 'rxjs/operators';
12
12
  import { coerceNumberProperty } from '@angular/cdk/coercion';
13
13
 
14
14
  class FixedCardLayoutItemComponent {
@@ -96,6 +96,8 @@ class FixedCardLayoutComponent {
96
96
  /** @hidden */
97
97
  this._columnsWidth = new Map();
98
98
  /** @hidden */
99
+ this._skipListenResize = false;
100
+ /** @hidden */
99
101
  this._cardMinimumWidth = CARD_MINIMUM_WIDTH;
100
102
  /** @hidden */
101
103
  this._cardsSizeChangeSubscription = new Subscription();
@@ -140,7 +142,6 @@ class FixedCardLayoutComponent {
140
142
  /** @hidden */
141
143
  ngAfterViewInit() {
142
144
  this._processCards();
143
- this.updateLayout();
144
145
  this._listenOnResize();
145
146
  this._listenOnCardsChange();
146
147
  this._accessibilitySetup();
@@ -155,7 +156,7 @@ class FixedCardLayoutComponent {
155
156
  this.updateLayout();
156
157
  }
157
158
  else if ('columnsWidthConfig' in changes) {
158
- this._setColumnsWidth();
159
+ this._setCardColumnsWidth();
159
160
  }
160
161
  }
161
162
  /** @hidden */
@@ -173,7 +174,7 @@ class FixedCardLayoutComponent {
173
174
  }
174
175
  /** Distribute cards on window resize */
175
176
  updateLayout() {
176
- if (!this._cards.length || !this._availableWidth) {
177
+ if (!this._cards.length) {
177
178
  return;
178
179
  }
179
180
  const possibleNumberOfColumns = getNumberOfColumns(this._availableWidth, this.cardMinimumWidth);
@@ -182,12 +183,9 @@ class FixedCardLayoutComponent {
182
183
  numberOfColumns: this._numberOfColumns,
183
184
  screenSize: this._availableWidth
184
185
  });
185
- if (this._previousNumberOfColumns !== this._numberOfColumns) {
186
- this._previousNumberOfColumns = this._numberOfColumns;
187
- this._updateColumns();
188
- return;
189
- }
190
- this._setColumnsWidth();
186
+ this._setCardColumns();
187
+ this._setCardColumnsWidth();
188
+ this._setContainerHeight();
191
189
  }
192
190
  /** @hidden */
193
191
  _onDropListEntered(event) {
@@ -198,7 +196,7 @@ class FixedCardLayoutComponent {
198
196
  const spaceToAdd = event.item.element.nativeElement.getBoundingClientRect().height +
199
197
  (event.container.getSortedItems().length ? REM_IN_PX : 0);
200
198
  // When we move the card into a certain column we should increase the height of that column by the card height
201
- this._calculateContainerHeight(columnIndexToAddSpace, spaceToAdd);
199
+ this._setContainerHeight(columnIndexToAddSpace, spaceToAdd);
202
200
  }
203
201
  /** @hidden */
204
202
  _onDragDropped(event) {
@@ -236,7 +234,7 @@ class FixedCardLayoutComponent {
236
234
  layoutColumns: this._numberOfColumns,
237
235
  items: this._cards.toArray()
238
236
  });
239
- this._updateColumns();
237
+ this.updateLayout();
240
238
  }
241
239
  /** @hidden */
242
240
  _accessibilitySetup() {
@@ -253,27 +251,19 @@ class FixedCardLayoutComponent {
253
251
  /** @hidden Listen window resize and distribute cards on column change */
254
252
  _listenOnResize() {
255
253
  resizeObservable(this._layout.nativeElement)
256
- .pipe(debounceTime(60), takeUntil(this._onDestroy$))
254
+ .pipe(debounceTime(60), filter(() => this._skipListenResize), takeUntil(this._onDestroy$))
257
255
  .subscribe(() => this.updateLayout());
258
256
  }
259
257
  /** @hidden Listen card change and distribute cards on column change */
260
258
  _listenOnCardsChange() {
261
- this._cards.changes.pipe(delay(0)).subscribe(() => {
262
- this._processCards();
263
- this._updateColumns();
264
- });
265
- }
266
- /** @hidden Renders layout on column changes */
267
- _updateColumns() {
268
- this._setCardColumns();
269
- this._setColumnsWidth(false);
270
- this._calculateContainerHeight();
259
+ this._cards.changes.subscribe(() => this._processCards());
271
260
  }
272
261
  /** @hidden */
273
262
  _processCards() {
274
263
  this._cardsArray = this._cards
275
264
  .toArray()
276
265
  .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);
266
+ this.updateLayout();
277
267
  }
278
268
  /** @hidden Distribute cards among columns to arrange them in "Z" flow */
279
269
  _setCardColumns() {
@@ -290,14 +280,14 @@ class FixedCardLayoutComponent {
290
280
  });
291
281
  this._cardColumns = columns;
292
282
  this._cardColumns.forEach((column) => {
293
- if (column.length > 0 && column.length < 2) {
283
+ if (column.length === 1) {
294
284
  this._singleItemColumns.add(column[0].fdCardDef);
295
285
  }
296
286
  });
297
- this._listenToCardsSizeChange();
287
+ this._listenOnCardsSizeChange();
298
288
  }
299
289
  /** @hidden */
300
- _setColumnsWidth(detectChanges = true) {
290
+ _setCardColumnsWidth() {
301
291
  this._columnsWidth = new Map();
302
292
  const configPresent = this.columnsWidthConfig &&
303
293
  typeof this.columnsWidthConfig === 'object' &&
@@ -312,16 +302,14 @@ class FixedCardLayoutComponent {
312
302
  const columnWidth = Math.round(this.cardMinimumWidth + (freeSpace / totalWidthModifiers) * fixedWidthModifiers[index]);
313
303
  column.forEach((card) => this._columnsWidth.set(card.fdCardDef, columnWidth));
314
304
  });
315
- if (detectChanges) {
316
- this._changeDetector.detectChanges();
317
- }
318
305
  }
319
306
  /**
320
307
  * @hidden
321
308
  * Calculate container height accordingly to the the card columns height
322
309
  * Parameters used to increase the height of the column where drag'n'drop placeholder currently is
323
310
  */
324
- _calculateContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0) {
311
+ _setContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0) {
312
+ this._skipListenResize = true;
325
313
  this._changeDetector.detectChanges();
326
314
  const cardColumns = this._cardColumns.map((column) => column
327
315
  .map((card) => { var _a; return (_a = this._dragList.find((drag) => !drag._dragRef.isDragging() && drag.data === card)) === null || _a === void 0 ? void 0 : _a.element; })
@@ -333,9 +321,10 @@ class FixedCardLayoutComponent {
333
321
  // +4px because it's the top & bottom borders of card placeholder
334
322
  this._containerHeight = Math.max(...columnsHeights) + 4;
335
323
  this._changeDetector.detectChanges();
324
+ this._skipListenResize = false;
336
325
  }
337
326
  /** @hidden */
338
- _listenToCardsSizeChange() {
327
+ _listenOnCardsSizeChange() {
339
328
  this._cardsSizeChangeSubscription.unsubscribe();
340
329
  this._cardsSizeChangeSubscription = new Subscription();
341
330
  this._changeDetector.detectChanges();
@@ -345,7 +334,7 @@ class FixedCardLayoutComponent {
345
334
  .forEach((card) => {
346
335
  this._cardsSizeChangeSubscription.add(resizeObservable(card.nativeElement)
347
336
  .pipe(distinct((resizeEntry) => resizeEntry[0].contentRect.height))
348
- .subscribe(() => this._calculateContainerHeight()));
337
+ .subscribe(() => this._setContainerHeight()));
349
338
  }));
350
339
  }
351
340
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-fixed-card-layout.mjs","sources":["../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.ts","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.component.ts","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.component.html","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.module.ts","../../../../libs/core/src/lib/fixed-card-layout/fundamental-ngx-core-fixed-card-layout.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef } from '@angular/core';\nimport { FocusableOption } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'fd-fixed-card-layout-item',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: block'\n }\n})\nexport class FixedCardLayoutItemComponent implements FocusableOption {\n constructor(private _elementRef: ElementRef) {}\n\n /** Set focus on the element. */\n focus(): void {\n const header = this._elementRef.nativeElement.querySelector('.fd-card__header');\n if (header) {\n header.focus();\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { CdkDrag, CdkDragDrop, CdkDragEnter } from '@angular/cdk/drag-drop';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, delay, distinct, takeUntil } from 'rxjs/operators';\n\nimport { resizeObservable, RtlService, getDocumentFontSize } from '@fundamental-ngx/core/utils';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\nimport { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\n\nconst REM_IN_PX = getDocumentFontSize();\nconst CARD_MINIMUM_WIDTH = REM_IN_PX * 20; // 20rem\nconst CARD_GAP_WIDTH = REM_IN_PX; // 1rem\nconst DRAG_START_DELAY = 200; // in ms\nconst MAX_COLUMNS = 10;\n\nlet cardRank = 1;\n\n@Directive({ selector: '[fdCardDef]' })\nexport class CardDefinitionDirective {\n /**\n * Behaves like rank of card.\n * Useful in creating layout again after drag and drop.\n */\n @Input()\n set fdCardDef(value: NumberInput) {\n if (!value) {\n return;\n }\n\n this._fdCardDef = coerceNumberProperty(value);\n }\n get fdCardDef(): number {\n return this._fdCardDef;\n }\n\n /** @hidden */\n private _fdCardDef: number = cardRank++;\n\n /** @hidden */\n constructor(public template: TemplateRef<any>) {}\n}\n\nexport interface Layout {\n numberOfColumns?: number;\n screenSize: number;\n}\n\nexport interface CardDropped {\n previousIndex: number;\n currentIndex: number;\n layoutColumns: number;\n items: CardDefinitionDirective[];\n}\n\ntype Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;\n\nexport type ColumnsWidthConfig = { [C in Columns]?: number };\n\ntype CardColumn = CardDefinitionDirective[];\n\n@Component({\n selector: 'fd-fixed-card-layout',\n templateUrl: './fixed-card-layout.component.html',\n styleUrls: ['./fixed-card-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-fixed-card-layout'\n }\n})\nexport class FixedCardLayoutComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n /** Drag drop behavior can be disabled */\n @Input()\n disableDragDrop: boolean;\n\n /** Drag start delay in milliseconds, default to 200ms for safe scrolling on mobile with touchscreen */\n @Input()\n dragStartDelay = DRAG_START_DELAY;\n\n /** Card's minimum width in pixels. */\n @Input()\n set cardMinimumWidth(value: NumberInput) {\n const coercedValue = coerceNumberProperty(value);\n\n if (coercedValue < CARD_MINIMUM_WIDTH) {\n return;\n }\n\n this._cardMinimumWidth = coercedValue;\n }\n get cardMinimumWidth(): number {\n return this._cardMinimumWidth;\n }\n\n /** Config with the width ratios that should take every column. Flex-grow principe. Missed values set to 0. s*/\n @Input()\n columnsWidthConfig: ColumnsWidthConfig;\n\n /** Limit the number of columns. Default is 10. */\n @Input()\n maxColumns = MAX_COLUMNS;\n\n /** Event to emit, when layout changes */\n @Output()\n layoutChange: EventEmitter<Layout> = new EventEmitter<Layout>();\n\n /** Event to emit on Card dragged and dropped */\n @Output()\n cardDraggedDropped: EventEmitter<CardDropped> = new EventEmitter<CardDropped>();\n\n /** @hidden */\n @ContentChildren(CardDefinitionDirective)\n _cards: QueryList<CardDefinitionDirective>;\n\n /** @hidden */\n @ViewChildren(FixedCardLayoutItemComponent)\n _cardContainers: QueryList<FixedCardLayoutItemComponent>;\n\n /** @hidden */\n @ViewChildren(CdkDrag)\n _dragList: QueryList<CdkDrag>;\n\n /** @hidden */\n @ViewChild('layout')\n _layout: ElementRef;\n\n /** @hidden */\n _cardsArray: CardDefinitionDirective[];\n\n /** @hidden Number of Columns in layout */\n _numberOfColumns: number;\n\n /** @hidden */\n _cardColumns: CardColumn[];\n\n /** @hidden*/\n _containerHeight: number;\n\n /** @hidden handles rtl service */\n _dir = 'ltr';\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _groupIndexes = new Map<number, number>();\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _itemIndexes = new Map<number, number>();\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _singleItemColumns = new Set<number>();\n\n /** @hidden */\n _columnsWidth = new Map<number, number>();\n\n /** @hidden Return available width for fixed card layout */\n get _availableWidth(): number {\n return this._layout.nativeElement.getBoundingClientRect().width;\n }\n\n /** @hidden */\n _placeholderMargin: boolean;\n\n /** @hidden */\n private _previousNumberOfColumns: number;\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<FixedCardLayoutItemComponent>;\n\n /** @hidden */\n private _cardMinimumWidth = CARD_MINIMUM_WIDTH;\n\n /** @hidden */\n private _cardsSizeChangeSubscription = new Subscription();\n\n /** @hidden An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _changeDetector: ChangeDetectorRef,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._subscribeToRtl();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._processCards();\n this.updateLayout();\n\n this._listenOnResize();\n this._listenOnCardsChange();\n this._accessibilitySetup();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n // Skip all changes unless we don't have initial layout created\n if (!this._cardsArray) {\n return;\n }\n\n if ('maxColumns' in changes || 'cardMinimumWidth' in changes) {\n this.updateLayout();\n } else if ('columnsWidthConfig' in changes) {\n this._setColumnsWidth();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._cardsSizeChangeSubscription.unsubscribe();\n\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /** Distribute cards on window resize */\n updateLayout(): void {\n if (!this._cards.length || !this._availableWidth) {\n return;\n }\n\n const possibleNumberOfColumns = getNumberOfColumns(this._availableWidth, this.cardMinimumWidth);\n\n this._numberOfColumns = Math.min(\n possibleNumberOfColumns,\n this._cards.length,\n this.maxColumns || MAX_COLUMNS,\n MAX_COLUMNS\n );\n\n this.layoutChange.emit({\n numberOfColumns: this._numberOfColumns,\n screenSize: this._availableWidth\n });\n\n if (this._previousNumberOfColumns !== this._numberOfColumns) {\n this._previousNumberOfColumns = this._numberOfColumns;\n this._updateColumns();\n return;\n }\n\n this._setColumnsWidth();\n }\n\n /** @hidden */\n _onDropListEntered(event: CdkDragEnter): void {\n const containerItemCardDef = (event.container.getSortedItems()[0].data as CardDefinitionDirective).fdCardDef;\n const dragItemCardDef = (event.item.data as CardDefinitionDirective).fdCardDef;\n\n this._placeholderMargin = containerItemCardDef !== dragItemCardDef;\n\n const columnIndexToAddSpace = this._cardColumns.findIndex((column) =>\n column.find((card) => event.container.getSortedItems()[0].data === card)\n );\n const spaceToAdd =\n event.item.element.nativeElement.getBoundingClientRect().height +\n (event.container.getSortedItems().length ? REM_IN_PX : 0);\n\n // When we move the card into a certain column we should increase the height of that column by the card height\n this._calculateContainerHeight(columnIndexToAddSpace, spaceToAdd);\n }\n\n /** @hidden */\n _onDragDropped(event: CdkDragDrop<number, number>): void {\n if (event.container.data === event.previousContainer.data) {\n return;\n }\n\n this._placeholderMargin = false;\n\n const movedCard = event.previousContainer.getSortedItems()[0].data;\n const replacedCard = event.container.getSortedItems()[0].data;\n\n const movedCardColumn = this._cardColumns.find((column) =>\n column.find((card) => card.fdCardDef === movedCard.fdCardDef)\n );\n const replacedCardColumn = this._cardColumns.find((column) =>\n column.find((card) => card.fdCardDef === replacedCard.fdCardDef)\n );\n\n // If we dragged the card from the same column as the column we're dropping into\n // There may be a situation where the order shouldn't change but since there are a different drop lists it will change\n // We should prevent this\n if (movedCardColumn === replacedCardColumn && movedCardColumn?.length === 2) {\n if (movedCard.fdCardDef < replacedCard.fdCardDef && event.previousContainer.data < event.container.data) {\n return;\n }\n\n if (movedCard.fdCardDef > replacedCard.fdCardDef && event.previousContainer.data > event.container.data) {\n return;\n }\n }\n\n this._processDragDrop(event.previousContainer.data, event.container.data, movedCard, replacedCard);\n }\n\n /** @hidden For the keyboard drag&drop directive */\n _customMoveFn = (group: CardColumn, indexFrom: number, indexTo: number): void => {\n const movedCard = group[indexFrom];\n const replacedCard = group[indexTo];\n\n const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n };\n\n /** @hidden For the keyboard drag&drop directive */\n _customTransferFn = (prevGroup: CardColumn, nextGroup: CardColumn, indexFrom: number, indexTo: number): void => {\n const movedCard = prevGroup[indexFrom];\n const replacedCard = nextGroup[indexTo];\n\n const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n };\n\n /** @hidden Arranges cards on drop of dragged card */\n private _processDragDrop(\n prevIndex: number,\n newIndex: number,\n prevCard: CardDefinitionDirective,\n newCard: CardDefinitionDirective\n ): void {\n // moveItemInArray from CDK won't work as it changes order of other cards\n const replacedCard = this._cardsArray[newIndex];\n this._cardsArray[newIndex] = this._cardsArray[prevIndex];\n this._cardsArray[prevIndex] = replacedCard;\n\n adjustCardRank(prevCard, newCard);\n\n this.cardDraggedDropped.emit({\n previousIndex: prevIndex,\n currentIndex: newIndex,\n layoutColumns: this._numberOfColumns,\n items: this._cards.toArray()\n });\n\n this._updateColumns();\n }\n\n /** @hidden */\n private _accessibilitySetup(): void {\n this._keyboardEventsManager = new FocusKeyManager(this._cardContainers).withWrap();\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n this._rtlService?.rtl.pipe(takeUntil(this._onDestroy$)).subscribe((isRtl) => {\n this._dir = isRtl ? 'rtl' : 'ltr';\n this._changeDetector.detectChanges();\n });\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n resizeObservable(this._layout.nativeElement)\n .pipe(debounceTime(60), takeUntil(this._onDestroy$))\n .subscribe(() => this.updateLayout());\n }\n\n /** @hidden Listen card change and distribute cards on column change */\n private _listenOnCardsChange(): void {\n this._cards.changes.pipe(delay(0)).subscribe(() => {\n this._processCards();\n this._updateColumns();\n });\n }\n\n /** @hidden Renders layout on column changes */\n private _updateColumns(): void {\n this._setCardColumns();\n this._setColumnsWidth(false);\n this._calculateContainerHeight();\n }\n\n /** @hidden */\n private _processCards(): void {\n this._cardsArray = this._cards\n .toArray()\n .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);\n }\n\n /** @hidden Distribute cards among columns to arrange them in \"Z\" flow */\n private _setCardColumns(): void {\n this._groupIndexes = new Map<number, number>();\n this._itemIndexes = new Map<number, number>();\n this._singleItemColumns = new Set<number>();\n\n const columns: CardColumn[] = new Array(this._numberOfColumns).fill(0).map(() => new Array(0));\n\n this._cardsArray.forEach((card, i) => {\n const currColumnIndex = i % this._numberOfColumns;\n const itemIndex = columns[currColumnIndex].length;\n\n columns[currColumnIndex].push(card);\n\n this._groupIndexes.set(card.fdCardDef, currColumnIndex);\n this._itemIndexes.set(card.fdCardDef, itemIndex);\n });\n\n this._cardColumns = columns;\n\n this._cardColumns.forEach((column) => {\n if (column.length > 0 && column.length < 2) {\n this._singleItemColumns.add(column[0].fdCardDef);\n }\n });\n\n this._listenToCardsSizeChange();\n }\n\n /** @hidden */\n private _setColumnsWidth(detectChanges = true): void {\n this._columnsWidth = new Map();\n\n const configPresent =\n this.columnsWidthConfig &&\n typeof this.columnsWidthConfig === 'object' &&\n Object.keys(this.columnsWidthConfig).length;\n\n if (!configPresent || this._numberOfColumns === 1) {\n return;\n }\n\n const fixedWidthModifiers = fixWidthModifiers(this.columnsWidthConfig, this._numberOfColumns);\n const totalWidthModifiers = fixedWidthModifiers.reduce((sum, width) => (sum += width), 0);\n const freeSpace = this._availableWidth - this.cardMinimumWidth * this._numberOfColumns;\n\n this._cardColumns.forEach((column, index) => {\n const columnWidth = Math.round(\n this.cardMinimumWidth + (freeSpace / totalWidthModifiers) * fixedWidthModifiers[index]\n );\n\n column.forEach((card) => this._columnsWidth.set(card.fdCardDef, columnWidth));\n });\n\n if (detectChanges) {\n this._changeDetector.detectChanges();\n }\n }\n\n /**\n * @hidden\n * Calculate container height accordingly to the the card columns height\n * Parameters used to increase the height of the column where drag'n'drop placeholder currently is\n */\n private _calculateContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0): void {\n this._changeDetector.detectChanges();\n\n const cardColumns = this._cardColumns.map((column) =>\n column\n .map(\n (card) => this._dragList.find((drag) => !drag._dragRef.isDragging() && drag.data === card)?.element\n )\n .filter((card): card is ElementRef<HTMLElement> => !!card)\n );\n\n const columnsHeights = cardColumns\n .map((column) => column.map((card) => card.nativeElement.getBoundingClientRect().height))\n .map(\n (column, columnIndex) =>\n column.reduce((cardsHeight, height) => (cardsHeight += height + REM_IN_PX), 0) +\n (columnIndex === columnIndexToAddSpace ? spaceToAdd : 0)\n );\n\n // +4px because it's the top & bottom borders of card placeholder\n this._containerHeight = Math.max(...columnsHeights) + 4;\n\n this._changeDetector.detectChanges();\n }\n\n /** @hidden */\n private _listenToCardsSizeChange(): void {\n this._cardsSizeChangeSubscription.unsubscribe();\n this._cardsSizeChangeSubscription = new Subscription();\n\n this._changeDetector.detectChanges();\n\n this._cardColumns.forEach((column) =>\n column\n .map((card) => this._dragList.find((wrapper) => wrapper.data === card)?.element)\n .filter((v): v is ElementRef<HTMLElement> => !!v)\n .forEach((card) => {\n this._cardsSizeChangeSubscription.add(\n resizeObservable(card.nativeElement)\n .pipe(distinct((resizeEntry) => resizeEntry[0].contentRect.height))\n .subscribe(() => this._calculateContainerHeight())\n );\n })\n );\n }\n}\n\n/** @hidden */\nfunction fixWidthModifiers(config: ColumnsWidthConfig, numberOfColumns: number): number[] {\n const modifiers = new Array(numberOfColumns).fill(0);\n\n return modifiers.map((_, index) => {\n const columnWidthModifier = config[index + 1];\n\n if (!columnWidthModifier || columnWidthModifier < 0) {\n return 0;\n }\n\n return columnWidthModifier;\n });\n}\n\n/** @hidden Returns number of columns that can fit in current available width for fd-card-layout */\nfunction getNumberOfColumns(containerWidth: number, cardWidth: number): number {\n containerWidth = containerWidth || 1;\n cardWidth = cardWidth || 1;\n\n const numberOfCardsWithNoGap = Math.max(Math.floor(containerWidth / cardWidth), 1); // Example: 960 / 320 = 3\n const requiredWidthWithGap = numberOfCardsWithNoGap * cardWidth + (numberOfCardsWithNoGap - 1) * CARD_GAP_WIDTH;\n const columnCount = requiredWidthWithGap > containerWidth ? numberOfCardsWithNoGap - 1 : numberOfCardsWithNoGap;\n\n return Math.max(columnCount, 1);\n}\n\n/** @hidden Method to update rank after cards are dragged */\nfunction adjustCardRank(draggedCard: CardDefinitionDirective, replacedCard: CardDefinitionDirective): void {\n const draggedCardRank = draggedCard.fdCardDef;\n draggedCard.fdCardDef = replacedCard.fdCardDef;\n replacedCard.fdCardDef = draggedCardRank;\n}\n","<div\n #layout\n cdkDropListGroup\n fdDndKeyboardGroup\n class=\"fd-fixed-card-layout__card-layout fd-fixed-card-layout__card-layout--columns-{{ this._numberOfColumns }}\"\n [style.height]=\"_containerHeight + 'px'\"\n [groups]=\"_cardColumns\"\n orientation=\"horizontal\"\n [customMoveFn]=\"_customMoveFn\"\n [customTransferFn]=\"_customTransferFn\"\n [disableKeyboardDragDrop]=\"disableDragDrop\"\n [cdkDropListGroupDisabled]=\"disableDragDrop\"\n [attr.dir]=\"_dir\"\n>\n <div\n *ngFor=\"let card of _cardsArray; let cardIndex = index\"\n cdkDropList\n cdkDropListSortingDisabled\n class=\"fd-fixed-card-layout__card\"\n [class.fd-fixed-card-layout__card--single]=\"_singleItemColumns.has(card.fdCardDef)\"\n [style.min-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n [style.max-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n [cdkDropListData]=\"cardIndex\"\n (cdkDropListEntered)=\"_onDropListEntered($event)\"\n >\n <div\n cdkDrag\n fdDndKeyboardItem\n tabindex=\"0\"\n cdkDragPreviewClass=\"fd-fixed-card-layout__card-preview\"\n [cdkDragData]=\"card\"\n [cdkDragStartDelay]=\"dragStartDelay\"\n [itemIndex]=\"_itemIndexes.get(card.fdCardDef)!\"\n [groupIndex]=\"_groupIndexes.get(card.fdCardDef)!\"\n (cdkDragDropped)=\"_onDragDropped($event)\"\n >\n <fd-fixed-card-layout-item>\n <ng-container *ngTemplateOutlet=\"card?.template || null\"> </ng-container>\n </fd-fixed-card-layout-item>\n\n <div\n *cdkDragPlaceholder\n class=\"fd-fixed-card-layout__card-placeholder\"\n [style.margin-bottom.rem]=\"+_placeholderMargin\"\n >\n <ng-container *ngTemplateOutlet=\"card?.template || null\"></ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngFor=\"let column of _cardColumns; let last = last; let index = index\">\n <div *ngIf=\"!last\" class=\"fd-fixed-card-layout__clearfix\" [style.order]=\"index + 1\"></div>\n </ng-container>\n</div>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\nimport { DragAndDropModule } from '@fundamental-ngx/core/utils';\nimport { CardDefinitionDirective, FixedCardLayoutComponent } from './fixed-card-layout.component';\n\n@NgModule({\n declarations: [FixedCardLayoutComponent, CardDefinitionDirective, FixedCardLayoutItemComponent],\n imports: [CommonModule, DragDropModule, DragAndDropModule],\n exports: [FixedCardLayoutComponent, CardDefinitionDirective, FixedCardLayoutItemComponent]\n})\nexport class FixedCardLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-fixed-card-layout.mjs","sources":["../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.ts","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.component.ts","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.component.html","../../../../libs/core/src/lib/fixed-card-layout/fixed-card-layout.module.ts","../../../../libs/core/src/lib/fixed-card-layout/fundamental-ngx-core-fixed-card-layout.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ElementRef } from '@angular/core';\nimport { FocusableOption } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'fd-fixed-card-layout-item',\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n style: 'display: block'\n }\n})\nexport class FixedCardLayoutItemComponent implements FocusableOption {\n constructor(private _elementRef: ElementRef) {}\n\n /** Set focus on the element. */\n focus(): void {\n const header = this._elementRef.nativeElement.querySelector('.fd-card__header');\n if (header) {\n header.focus();\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { CdkDrag, CdkDragDrop, CdkDragEnter } from '@angular/cdk/drag-drop';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinct, filter, takeUntil } from 'rxjs/operators';\n\nimport { resizeObservable, RtlService, getDocumentFontSize } from '@fundamental-ngx/core/utils';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\nimport { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\n\nconst REM_IN_PX = getDocumentFontSize();\nconst CARD_MINIMUM_WIDTH = REM_IN_PX * 20; // 20rem\nconst CARD_GAP_WIDTH = REM_IN_PX; // 1rem\nconst DRAG_START_DELAY = 200; // in ms\nconst MAX_COLUMNS = 10;\n\nlet cardRank = 1;\n\n@Directive({ selector: '[fdCardDef]' })\nexport class CardDefinitionDirective {\n /**\n * Behaves like rank of card.\n * Useful in creating layout again after drag and drop.\n */\n @Input()\n set fdCardDef(value: NumberInput) {\n if (!value) {\n return;\n }\n\n this._fdCardDef = coerceNumberProperty(value);\n }\n get fdCardDef(): number {\n return this._fdCardDef;\n }\n\n /** @hidden */\n private _fdCardDef: number = cardRank++;\n\n /** @hidden */\n constructor(public template: TemplateRef<any>) {}\n}\n\nexport interface Layout {\n numberOfColumns?: number;\n screenSize: number;\n}\n\nexport interface CardDropped {\n previousIndex: number;\n currentIndex: number;\n layoutColumns: number;\n items: CardDefinitionDirective[];\n}\n\ntype Columns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;\n\nexport type ColumnsWidthConfig = { [C in Columns]?: number };\n\ntype CardColumn = CardDefinitionDirective[];\n\n@Component({\n selector: 'fd-fixed-card-layout',\n templateUrl: './fixed-card-layout.component.html',\n styleUrls: ['./fixed-card-layout.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fd-fixed-card-layout'\n }\n})\nexport class FixedCardLayoutComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n /** Drag drop behavior can be disabled */\n @Input()\n disableDragDrop: boolean;\n\n /** Drag start delay in milliseconds, default to 200ms for safe scrolling on mobile with touchscreen */\n @Input()\n dragStartDelay = DRAG_START_DELAY;\n\n /** Card's minimum width in pixels. */\n @Input()\n set cardMinimumWidth(value: NumberInput) {\n const coercedValue = coerceNumberProperty(value);\n\n if (coercedValue < CARD_MINIMUM_WIDTH) {\n return;\n }\n\n this._cardMinimumWidth = coercedValue;\n }\n get cardMinimumWidth(): number {\n return this._cardMinimumWidth;\n }\n\n /** Config with the width ratios that should take every column. Flex-grow principe. Missed values set to 0. s*/\n @Input()\n columnsWidthConfig: ColumnsWidthConfig;\n\n /** Limit the number of columns. Default is 10. */\n @Input()\n maxColumns = MAX_COLUMNS;\n\n /** Event to emit, when layout changes */\n @Output()\n layoutChange: EventEmitter<Layout> = new EventEmitter<Layout>();\n\n /** Event to emit on Card dragged and dropped */\n @Output()\n cardDraggedDropped: EventEmitter<CardDropped> = new EventEmitter<CardDropped>();\n\n /** @hidden */\n @ContentChildren(CardDefinitionDirective)\n _cards: QueryList<CardDefinitionDirective>;\n\n /** @hidden */\n @ViewChildren(FixedCardLayoutItemComponent)\n _cardContainers: QueryList<FixedCardLayoutItemComponent>;\n\n /** @hidden */\n @ViewChildren(CdkDrag)\n _dragList: QueryList<CdkDrag>;\n\n /** @hidden */\n @ViewChild('layout')\n _layout: ElementRef;\n\n /** @hidden */\n _cardsArray: CardDefinitionDirective[];\n\n /** @hidden Number of Columns in layout */\n _numberOfColumns: number;\n\n /** @hidden */\n _cardColumns: CardColumn[];\n\n /** @hidden*/\n _containerHeight: number;\n\n /** @hidden handles rtl service */\n _dir = 'ltr';\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _groupIndexes = new Map<number, number>();\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _itemIndexes = new Map<number, number>();\n\n /** @hidden first number is the CardDefinition rank, i.e. id */\n _singleItemColumns = new Set<number>();\n\n /** @hidden */\n _columnsWidth = new Map<number, number>();\n\n /** @hidden Return available width for fixed card layout */\n get _availableWidth(): number {\n return this._layout.nativeElement.getBoundingClientRect().width;\n }\n\n /** @hidden */\n _placeholderMargin: boolean;\n\n /** @hidden */\n _skipListenResize = false;\n\n /** @hidden FocusKeyManager instance */\n private _keyboardEventsManager: FocusKeyManager<FixedCardLayoutItemComponent>;\n\n /** @hidden */\n private _cardMinimumWidth = CARD_MINIMUM_WIDTH;\n\n /** @hidden */\n private _cardsSizeChangeSubscription = new Subscription();\n\n /** @hidden An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */\n private readonly _onDestroy$: Subject<void> = new Subject<void>();\n\n /** @hidden */\n constructor(\n private readonly _changeDetector: ChangeDetectorRef,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** @hidden */\n ngOnInit(): void {\n this._subscribeToRtl();\n }\n\n /** @hidden */\n ngAfterViewInit(): void {\n this._processCards();\n\n this._listenOnResize();\n this._listenOnCardsChange();\n this._accessibilitySetup();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n // Skip all changes unless we don't have initial layout created\n if (!this._cardsArray) {\n return;\n }\n\n if ('maxColumns' in changes || 'cardMinimumWidth' in changes) {\n this.updateLayout();\n } else if ('columnsWidthConfig' in changes) {\n this._setCardColumnsWidth();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._cardsSizeChangeSubscription.unsubscribe();\n\n this._onDestroy$.next();\n this._onDestroy$.complete();\n }\n\n /** @hidden */\n @HostListener('keydown', ['$event'])\n handleKeydown(event: KeyboardEvent): void {\n event.stopImmediatePropagation();\n\n if (this._keyboardEventsManager) {\n this._keyboardEventsManager.onKeydown(event);\n }\n }\n\n /** Distribute cards on window resize */\n updateLayout(): void {\n if (!this._cards.length) {\n return;\n }\n\n const possibleNumberOfColumns = getNumberOfColumns(this._availableWidth, this.cardMinimumWidth);\n\n this._numberOfColumns = Math.min(\n possibleNumberOfColumns,\n this._cards.length,\n this.maxColumns || MAX_COLUMNS,\n MAX_COLUMNS\n );\n\n this.layoutChange.emit({\n numberOfColumns: this._numberOfColumns,\n screenSize: this._availableWidth\n });\n\n this._setCardColumns();\n this._setCardColumnsWidth();\n this._setContainerHeight();\n }\n\n /** @hidden */\n _onDropListEntered(event: CdkDragEnter): void {\n const containerItemCardDef = (event.container.getSortedItems()[0].data as CardDefinitionDirective).fdCardDef;\n const dragItemCardDef = (event.item.data as CardDefinitionDirective).fdCardDef;\n\n this._placeholderMargin = containerItemCardDef !== dragItemCardDef;\n\n const columnIndexToAddSpace = this._cardColumns.findIndex((column) =>\n column.find((card) => event.container.getSortedItems()[0].data === card)\n );\n const spaceToAdd =\n event.item.element.nativeElement.getBoundingClientRect().height +\n (event.container.getSortedItems().length ? REM_IN_PX : 0);\n\n // When we move the card into a certain column we should increase the height of that column by the card height\n this._setContainerHeight(columnIndexToAddSpace, spaceToAdd);\n }\n\n /** @hidden */\n _onDragDropped(event: CdkDragDrop<number, number>): void {\n if (event.container.data === event.previousContainer.data) {\n return;\n }\n\n this._placeholderMargin = false;\n\n const movedCard = event.previousContainer.getSortedItems()[0].data;\n const replacedCard = event.container.getSortedItems()[0].data;\n\n const movedCardColumn = this._cardColumns.find((column) =>\n column.find((card) => card.fdCardDef === movedCard.fdCardDef)\n );\n const replacedCardColumn = this._cardColumns.find((column) =>\n column.find((card) => card.fdCardDef === replacedCard.fdCardDef)\n );\n\n // If we dragged the card from the same column as the column we're dropping into\n // There may be a situation where the order shouldn't change but since there are a different drop lists it will change\n // We should prevent this\n if (movedCardColumn === replacedCardColumn && movedCardColumn?.length === 2) {\n if (movedCard.fdCardDef < replacedCard.fdCardDef && event.previousContainer.data < event.container.data) {\n return;\n }\n\n if (movedCard.fdCardDef > replacedCard.fdCardDef && event.previousContainer.data > event.container.data) {\n return;\n }\n }\n\n this._processDragDrop(event.previousContainer.data, event.container.data, movedCard, replacedCard);\n }\n\n /** @hidden For the keyboard drag&drop directive */\n _customMoveFn = (group: CardColumn, indexFrom: number, indexTo: number): void => {\n const movedCard = group[indexFrom];\n const replacedCard = group[indexTo];\n\n const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n };\n\n /** @hidden For the keyboard drag&drop directive */\n _customTransferFn = (prevGroup: CardColumn, nextGroup: CardColumn, indexFrom: number, indexTo: number): void => {\n const movedCard = prevGroup[indexFrom];\n const replacedCard = nextGroup[indexTo];\n\n const indexFromArray = this._cardsArray.findIndex((card) => card.fdCardDef === movedCard.fdCardDef);\n const indexToArray = this._cardsArray.findIndex((card) => card.fdCardDef === replacedCard.fdCardDef);\n\n this._processDragDrop(indexFromArray, indexToArray, movedCard, replacedCard);\n };\n\n /** @hidden Arranges cards on drop of dragged card */\n private _processDragDrop(\n prevIndex: number,\n newIndex: number,\n prevCard: CardDefinitionDirective,\n newCard: CardDefinitionDirective\n ): void {\n // moveItemInArray from CDK won't work as it changes order of other cards\n const replacedCard = this._cardsArray[newIndex];\n this._cardsArray[newIndex] = this._cardsArray[prevIndex];\n this._cardsArray[prevIndex] = replacedCard;\n\n adjustCardRank(prevCard, newCard);\n\n this.cardDraggedDropped.emit({\n previousIndex: prevIndex,\n currentIndex: newIndex,\n layoutColumns: this._numberOfColumns,\n items: this._cards.toArray()\n });\n\n this.updateLayout();\n }\n\n /** @hidden */\n private _accessibilitySetup(): void {\n this._keyboardEventsManager = new FocusKeyManager(this._cardContainers).withWrap();\n }\n\n /** @hidden Rtl change subscription */\n private _subscribeToRtl(): void {\n this._rtlService?.rtl.pipe(takeUntil(this._onDestroy$)).subscribe((isRtl) => {\n this._dir = isRtl ? 'rtl' : 'ltr';\n this._changeDetector.detectChanges();\n });\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n resizeObservable(this._layout.nativeElement)\n .pipe(\n debounceTime(60),\n filter(() => this._skipListenResize),\n takeUntil(this._onDestroy$)\n )\n .subscribe(() => this.updateLayout());\n }\n\n /** @hidden Listen card change and distribute cards on column change */\n private _listenOnCardsChange(): void {\n this._cards.changes.subscribe(() => this._processCards());\n }\n\n /** @hidden */\n private _processCards(): void {\n this._cardsArray = this._cards\n .toArray()\n .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);\n\n this.updateLayout();\n }\n\n /** @hidden Distribute cards among columns to arrange them in \"Z\" flow */\n private _setCardColumns(): void {\n this._groupIndexes = new Map<number, number>();\n this._itemIndexes = new Map<number, number>();\n this._singleItemColumns = new Set<number>();\n\n const columns: CardColumn[] = new Array(this._numberOfColumns).fill(0).map(() => new Array(0));\n\n this._cardsArray.forEach((card, i) => {\n const currColumnIndex = i % this._numberOfColumns;\n const itemIndex = columns[currColumnIndex].length;\n\n columns[currColumnIndex].push(card);\n\n this._groupIndexes.set(card.fdCardDef, currColumnIndex);\n this._itemIndexes.set(card.fdCardDef, itemIndex);\n });\n\n this._cardColumns = columns;\n\n this._cardColumns.forEach((column) => {\n if (column.length === 1) {\n this._singleItemColumns.add(column[0].fdCardDef);\n }\n });\n\n this._listenOnCardsSizeChange();\n }\n\n /** @hidden */\n private _setCardColumnsWidth(): void {\n this._columnsWidth = new Map();\n\n const configPresent =\n this.columnsWidthConfig &&\n typeof this.columnsWidthConfig === 'object' &&\n Object.keys(this.columnsWidthConfig).length;\n\n if (!configPresent || this._numberOfColumns === 1) {\n return;\n }\n\n const fixedWidthModifiers = fixWidthModifiers(this.columnsWidthConfig, this._numberOfColumns);\n const totalWidthModifiers = fixedWidthModifiers.reduce((sum, width) => (sum += width), 0);\n const freeSpace = this._availableWidth - this.cardMinimumWidth * this._numberOfColumns;\n\n this._cardColumns.forEach((column, index) => {\n const columnWidth = Math.round(\n this.cardMinimumWidth + (freeSpace / totalWidthModifiers) * fixedWidthModifiers[index]\n );\n\n column.forEach((card) => this._columnsWidth.set(card.fdCardDef, columnWidth));\n });\n }\n\n /**\n * @hidden\n * Calculate container height accordingly to the the card columns height\n * Parameters used to increase the height of the column where drag'n'drop placeholder currently is\n */\n private _setContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0): void {\n this._skipListenResize = true;\n\n this._changeDetector.detectChanges();\n\n const cardColumns = this._cardColumns.map((column) =>\n column\n .map(\n (card) => this._dragList.find((drag) => !drag._dragRef.isDragging() && drag.data === card)?.element\n )\n .filter((card): card is ElementRef<HTMLElement> => !!card)\n );\n\n const columnsHeights = cardColumns\n .map((column) => column.map((card) => card.nativeElement.getBoundingClientRect().height))\n .map(\n (column, columnIndex) =>\n column.reduce((cardsHeight, height) => (cardsHeight += height + REM_IN_PX), 0) +\n (columnIndex === columnIndexToAddSpace ? spaceToAdd : 0)\n );\n\n // +4px because it's the top & bottom borders of card placeholder\n this._containerHeight = Math.max(...columnsHeights) + 4;\n\n this._changeDetector.detectChanges();\n\n this._skipListenResize = false;\n }\n\n /** @hidden */\n private _listenOnCardsSizeChange(): void {\n this._cardsSizeChangeSubscription.unsubscribe();\n this._cardsSizeChangeSubscription = new Subscription();\n\n this._changeDetector.detectChanges();\n\n this._cardColumns.forEach((column) =>\n column\n .map((card) => this._dragList.find((wrapper) => wrapper.data === card)?.element)\n .filter((v): v is ElementRef<HTMLElement> => !!v)\n .forEach((card) => {\n this._cardsSizeChangeSubscription.add(\n resizeObservable(card.nativeElement)\n .pipe(distinct((resizeEntry) => resizeEntry[0].contentRect.height))\n .subscribe(() => this._setContainerHeight())\n );\n })\n );\n }\n}\n\n/** @hidden */\nfunction fixWidthModifiers(config: ColumnsWidthConfig, numberOfColumns: number): number[] {\n const modifiers = new Array(numberOfColumns).fill(0);\n\n return modifiers.map((_, index) => {\n const columnWidthModifier = config[index + 1];\n\n if (!columnWidthModifier || columnWidthModifier < 0) {\n return 0;\n }\n\n return columnWidthModifier;\n });\n}\n\n/** @hidden Returns number of columns that can fit in current available width for fd-card-layout */\nfunction getNumberOfColumns(containerWidth: number, cardWidth: number): number {\n containerWidth = containerWidth || 1;\n cardWidth = cardWidth || 1;\n\n const numberOfCardsWithNoGap = Math.max(Math.floor(containerWidth / cardWidth), 1); // Example: 960 / 320 = 3\n const requiredWidthWithGap = numberOfCardsWithNoGap * cardWidth + (numberOfCardsWithNoGap - 1) * CARD_GAP_WIDTH;\n const columnCount = requiredWidthWithGap > containerWidth ? numberOfCardsWithNoGap - 1 : numberOfCardsWithNoGap;\n\n return Math.max(columnCount, 1);\n}\n\n/** @hidden Method to update rank after cards are dragged */\nfunction adjustCardRank(draggedCard: CardDefinitionDirective, replacedCard: CardDefinitionDirective): void {\n const draggedCardRank = draggedCard.fdCardDef;\n draggedCard.fdCardDef = replacedCard.fdCardDef;\n replacedCard.fdCardDef = draggedCardRank;\n}\n","<div\n #layout\n cdkDropListGroup\n fdDndKeyboardGroup\n class=\"fd-fixed-card-layout__card-layout fd-fixed-card-layout__card-layout--columns-{{ this._numberOfColumns }}\"\n [style.height]=\"_containerHeight + 'px'\"\n [groups]=\"_cardColumns\"\n orientation=\"horizontal\"\n [customMoveFn]=\"_customMoveFn\"\n [customTransferFn]=\"_customTransferFn\"\n [disableKeyboardDragDrop]=\"disableDragDrop\"\n [cdkDropListGroupDisabled]=\"disableDragDrop\"\n [attr.dir]=\"_dir\"\n>\n <div\n *ngFor=\"let card of _cardsArray; let cardIndex = index\"\n cdkDropList\n cdkDropListSortingDisabled\n class=\"fd-fixed-card-layout__card\"\n [class.fd-fixed-card-layout__card--single]=\"_singleItemColumns.has(card.fdCardDef)\"\n [style.min-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n [style.max-width.px]=\"_columnsWidth.get(card.fdCardDef)\"\n [cdkDropListData]=\"cardIndex\"\n (cdkDropListEntered)=\"_onDropListEntered($event)\"\n >\n <div\n cdkDrag\n fdDndKeyboardItem\n tabindex=\"0\"\n cdkDragPreviewClass=\"fd-fixed-card-layout__card-preview\"\n [cdkDragData]=\"card\"\n [cdkDragStartDelay]=\"dragStartDelay\"\n [itemIndex]=\"_itemIndexes.get(card.fdCardDef)!\"\n [groupIndex]=\"_groupIndexes.get(card.fdCardDef)!\"\n (cdkDragDropped)=\"_onDragDropped($event)\"\n >\n <fd-fixed-card-layout-item>\n <ng-container *ngTemplateOutlet=\"card?.template || null\"> </ng-container>\n </fd-fixed-card-layout-item>\n\n <div\n *cdkDragPlaceholder\n class=\"fd-fixed-card-layout__card-placeholder\"\n [style.margin-bottom.rem]=\"+_placeholderMargin\"\n >\n <ng-container *ngTemplateOutlet=\"card?.template || null\"></ng-container>\n </div>\n </div>\n </div>\n\n <ng-container *ngFor=\"let column of _cardColumns; let last = last; let index = index\">\n <div *ngIf=\"!last\" class=\"fd-fixed-card-layout__clearfix\" [style.order]=\"index + 1\"></div>\n </ng-container>\n</div>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';\nimport { DragAndDropModule } from '@fundamental-ngx/core/utils';\nimport { CardDefinitionDirective, FixedCardLayoutComponent } from './fixed-card-layout.component';\n\n@NgModule({\n declarations: [FixedCardLayoutComponent, CardDefinitionDirective, FixedCardLayoutItemComponent],\n imports: [CommonModule, DragDropModule, DragAndDropModule],\n exports: [FixedCardLayoutComponent, CardDefinitionDirective, FixedCardLayoutItemComponent]\n})\nexport class FixedCardLayoutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ import * as i1 from '@fundamental-ngx/core/utils';
8
8
  import { getDocumentFontSize, resizeObservable, DragAndDropModule } from '@fundamental-ngx/core/utils';
9
9
  import { FocusKeyManager } from '@angular/cdk/a11y';
10
10
  import { Subscription, Subject } from 'rxjs';
11
- import { takeUntil, debounceTime, delay, distinct } from 'rxjs/operators';
11
+ import { takeUntil, debounceTime, filter, distinct } from 'rxjs/operators';
12
12
  import { coerceNumberProperty } from '@angular/cdk/coercion';
13
13
 
14
14
  class FixedCardLayoutItemComponent {
@@ -96,6 +96,8 @@ class FixedCardLayoutComponent {
96
96
  /** @hidden */
97
97
  this._columnsWidth = new Map();
98
98
  /** @hidden */
99
+ this._skipListenResize = false;
100
+ /** @hidden */
99
101
  this._cardMinimumWidth = CARD_MINIMUM_WIDTH;
100
102
  /** @hidden */
101
103
  this._cardsSizeChangeSubscription = new Subscription();
@@ -140,7 +142,6 @@ class FixedCardLayoutComponent {
140
142
  /** @hidden */
141
143
  ngAfterViewInit() {
142
144
  this._processCards();
143
- this.updateLayout();
144
145
  this._listenOnResize();
145
146
  this._listenOnCardsChange();
146
147
  this._accessibilitySetup();
@@ -155,7 +156,7 @@ class FixedCardLayoutComponent {
155
156
  this.updateLayout();
156
157
  }
157
158
  else if ('columnsWidthConfig' in changes) {
158
- this._setColumnsWidth();
159
+ this._setCardColumnsWidth();
159
160
  }
160
161
  }
161
162
  /** @hidden */
@@ -173,7 +174,7 @@ class FixedCardLayoutComponent {
173
174
  }
174
175
  /** Distribute cards on window resize */
175
176
  updateLayout() {
176
- if (!this._cards.length || !this._availableWidth) {
177
+ if (!this._cards.length) {
177
178
  return;
178
179
  }
179
180
  const possibleNumberOfColumns = getNumberOfColumns(this._availableWidth, this.cardMinimumWidth);
@@ -182,12 +183,9 @@ class FixedCardLayoutComponent {
182
183
  numberOfColumns: this._numberOfColumns,
183
184
  screenSize: this._availableWidth
184
185
  });
185
- if (this._previousNumberOfColumns !== this._numberOfColumns) {
186
- this._previousNumberOfColumns = this._numberOfColumns;
187
- this._updateColumns();
188
- return;
189
- }
190
- this._setColumnsWidth();
186
+ this._setCardColumns();
187
+ this._setCardColumnsWidth();
188
+ this._setContainerHeight();
191
189
  }
192
190
  /** @hidden */
193
191
  _onDropListEntered(event) {
@@ -198,7 +196,7 @@ class FixedCardLayoutComponent {
198
196
  const spaceToAdd = event.item.element.nativeElement.getBoundingClientRect().height +
199
197
  (event.container.getSortedItems().length ? REM_IN_PX : 0);
200
198
  // When we move the card into a certain column we should increase the height of that column by the card height
201
- this._calculateContainerHeight(columnIndexToAddSpace, spaceToAdd);
199
+ this._setContainerHeight(columnIndexToAddSpace, spaceToAdd);
202
200
  }
203
201
  /** @hidden */
204
202
  _onDragDropped(event) {
@@ -236,7 +234,7 @@ class FixedCardLayoutComponent {
236
234
  layoutColumns: this._numberOfColumns,
237
235
  items: this._cards.toArray()
238
236
  });
239
- this._updateColumns();
237
+ this.updateLayout();
240
238
  }
241
239
  /** @hidden */
242
240
  _accessibilitySetup() {
@@ -252,27 +250,19 @@ class FixedCardLayoutComponent {
252
250
  /** @hidden Listen window resize and distribute cards on column change */
253
251
  _listenOnResize() {
254
252
  resizeObservable(this._layout.nativeElement)
255
- .pipe(debounceTime(60), takeUntil(this._onDestroy$))
253
+ .pipe(debounceTime(60), filter(() => this._skipListenResize), takeUntil(this._onDestroy$))
256
254
  .subscribe(() => this.updateLayout());
257
255
  }
258
256
  /** @hidden Listen card change and distribute cards on column change */
259
257
  _listenOnCardsChange() {
260
- this._cards.changes.pipe(delay(0)).subscribe(() => {
261
- this._processCards();
262
- this._updateColumns();
263
- });
264
- }
265
- /** @hidden Renders layout on column changes */
266
- _updateColumns() {
267
- this._setCardColumns();
268
- this._setColumnsWidth(false);
269
- this._calculateContainerHeight();
258
+ this._cards.changes.subscribe(() => this._processCards());
270
259
  }
271
260
  /** @hidden */
272
261
  _processCards() {
273
262
  this._cardsArray = this._cards
274
263
  .toArray()
275
264
  .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);
265
+ this.updateLayout();
276
266
  }
277
267
  /** @hidden Distribute cards among columns to arrange them in "Z" flow */
278
268
  _setCardColumns() {
@@ -289,14 +279,14 @@ class FixedCardLayoutComponent {
289
279
  });
290
280
  this._cardColumns = columns;
291
281
  this._cardColumns.forEach((column) => {
292
- if (column.length > 0 && column.length < 2) {
282
+ if (column.length === 1) {
293
283
  this._singleItemColumns.add(column[0].fdCardDef);
294
284
  }
295
285
  });
296
- this._listenToCardsSizeChange();
286
+ this._listenOnCardsSizeChange();
297
287
  }
298
288
  /** @hidden */
299
- _setColumnsWidth(detectChanges = true) {
289
+ _setCardColumnsWidth() {
300
290
  this._columnsWidth = new Map();
301
291
  const configPresent = this.columnsWidthConfig &&
302
292
  typeof this.columnsWidthConfig === 'object' &&
@@ -311,16 +301,14 @@ class FixedCardLayoutComponent {
311
301
  const columnWidth = Math.round(this.cardMinimumWidth + (freeSpace / totalWidthModifiers) * fixedWidthModifiers[index]);
312
302
  column.forEach((card) => this._columnsWidth.set(card.fdCardDef, columnWidth));
313
303
  });
314
- if (detectChanges) {
315
- this._changeDetector.detectChanges();
316
- }
317
304
  }
318
305
  /**
319
306
  * @hidden
320
307
  * Calculate container height accordingly to the the card columns height
321
308
  * Parameters used to increase the height of the column where drag'n'drop placeholder currently is
322
309
  */
323
- _calculateContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0) {
310
+ _setContainerHeight(columnIndexToAddSpace = -1, spaceToAdd = 0) {
311
+ this._skipListenResize = true;
324
312
  this._changeDetector.detectChanges();
325
313
  const cardColumns = this._cardColumns.map((column) => column
326
314
  .map((card) => this._dragList.find((drag) => !drag._dragRef.isDragging() && drag.data === card)?.element)
@@ -332,9 +320,10 @@ class FixedCardLayoutComponent {
332
320
  // +4px because it's the top & bottom borders of card placeholder
333
321
  this._containerHeight = Math.max(...columnsHeights) + 4;
334
322
  this._changeDetector.detectChanges();
323
+ this._skipListenResize = false;
335
324
  }
336
325
  /** @hidden */
337
- _listenToCardsSizeChange() {
326
+ _listenOnCardsSizeChange() {
338
327
  this._cardsSizeChangeSubscription.unsubscribe();
339
328
  this._cardsSizeChangeSubscription = new Subscription();
340
329
  this._changeDetector.detectChanges();
@@ -344,7 +333,7 @@ class FixedCardLayoutComponent {
344
333
  .forEach((card) => {
345
334
  this._cardsSizeChangeSubscription.add(resizeObservable(card.nativeElement)
346
335
  .pipe(distinct((resizeEntry) => resizeEntry[0].contentRect.height))
347
- .subscribe(() => this._calculateContainerHeight()));
336
+ .subscribe(() => this._setContainerHeight()));
348
337
  }));
349
338
  }
350
339
  }