@firestitch/list 15.0.0 → 17.0.0

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 (156) hide show
  1. package/app/components/body/body.component.d.ts +1 -1
  2. package/app/components/body/row/actions/actions.component.d.ts +1 -1
  3. package/app/components/body/row/cell/cell.component.d.ts +1 -1
  4. package/app/components/body/row/inline-action/inline-action.component.d.ts +1 -1
  5. package/app/components/body/row/menu-action/menu-action.component.d.ts +1 -1
  6. package/app/components/body/row/row.component.d.ts +1 -1
  7. package/app/components/footer/footer-row/footer-row.component.d.ts +1 -7
  8. package/app/components/footer/footer.component.d.ts +1 -1
  9. package/app/components/head/head.component.d.ts +1 -1
  10. package/app/components/list/list.component.d.ts +1 -1
  11. package/app/components/loader/loader.component.d.ts +1 -1
  12. package/app/components/pagination/pagination.component.d.ts +1 -1
  13. package/app/components/status/status.component.d.ts +1 -1
  14. package/app/directives/cell/cell.directive.d.ts +1 -1
  15. package/app/directives/column/column.directive.d.ts +1 -1
  16. package/app/directives/content-init/content-init.directive.d.ts +1 -1
  17. package/app/directives/draggable-list/draggable-list.directive.d.ts +1 -1
  18. package/app/directives/draggable-row/draggable-row.directive.d.ts +1 -1
  19. package/app/directives/footer/footer.directive.d.ts +1 -1
  20. package/app/directives/group-expand-trigger/group-expand-trigger.directive.d.ts +1 -1
  21. package/app/directives/header/header.directive.d.ts +1 -1
  22. package/app/models/column.model.d.ts +1 -1
  23. package/esm2022/app/classes/actions-controller.mjs +57 -0
  24. package/esm2022/app/classes/columns-controller.mjs +211 -0
  25. package/esm2022/app/classes/data-controller.mjs +348 -0
  26. package/esm2022/app/classes/external-params-controller.mjs +153 -0
  27. package/{esm2020 → esm2022}/app/classes/index.mjs +1 -1
  28. package/esm2022/app/classes/list-controller.mjs +712 -0
  29. package/esm2022/app/classes/pagination-controller.mjs +491 -0
  30. package/esm2022/app/classes/persistance-controller.mjs +19 -0
  31. package/esm2022/app/classes/reorder-controller.mjs +191 -0
  32. package/esm2022/app/classes/selection-controller.mjs +473 -0
  33. package/esm2022/app/classes/sorting-controller.mjs +207 -0
  34. package/esm2022/app/components/body/body.component.mjs +73 -0
  35. package/esm2022/app/components/body/row/actions/actions.component.mjs +102 -0
  36. package/esm2022/app/components/body/row/cell/cell.component.mjs +109 -0
  37. package/esm2022/app/components/body/row/inline-action/inline-action.component.mjs +32 -0
  38. package/esm2022/app/components/body/row/menu-action/menu-action.component.mjs +51 -0
  39. package/esm2022/app/components/body/row/row.component.mjs +341 -0
  40. package/esm2022/app/components/customize-cols/customize-cols.component.mjs +70 -0
  41. package/esm2022/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +16 -0
  42. package/esm2022/app/components/footer/footer-row/footer-row.component.mjs +17 -0
  43. package/esm2022/app/components/footer/footer.component.mjs +35 -0
  44. package/esm2022/app/components/head/head-cell/head-cell.component.mjs +32 -0
  45. package/esm2022/app/components/head/head.component.mjs +113 -0
  46. package/esm2022/app/components/list/list.component.mjs +407 -0
  47. package/esm2022/app/components/loader/loader.component.mjs +40 -0
  48. package/esm2022/app/components/manage-saved-filters/manage-saved-filters.component.mjs +78 -0
  49. package/esm2022/app/components/pagination/pagination.component.mjs +40 -0
  50. package/esm2022/app/components/saved-filters/saved-filters.component.mjs +32 -0
  51. package/esm2022/app/components/status/status.component.mjs +69 -0
  52. package/esm2022/app/directives/cell/cell.directive.mjs +21 -0
  53. package/esm2022/app/directives/column/column.directive.mjs +137 -0
  54. package/{esm2020 → esm2022}/app/directives/content/content.directive.mjs +4 -4
  55. package/esm2022/app/directives/content-init/content-init.directive.mjs +23 -0
  56. package/esm2022/app/directives/draggable-list/draggable-list.directive.mjs +344 -0
  57. package/esm2022/app/directives/draggable-row/draggable-row.directive.mjs +83 -0
  58. package/esm2022/app/directives/empty-state/empty-state.directive.mjs +13 -0
  59. package/esm2022/app/directives/footer/footer.directive.mjs +21 -0
  60. package/esm2022/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +28 -0
  61. package/{esm2020 → esm2022}/app/directives/group-footer/group-footer.directive.mjs +4 -4
  62. package/{esm2020 → esm2022}/app/directives/group-header/group-header.directive.mjs +4 -4
  63. package/esm2022/app/directives/header/header.directive.mjs +21 -0
  64. package/esm2022/app/directives/heading/heading.directive.mjs +13 -0
  65. package/{esm2020 → esm2022}/app/directives/heading-container/heading-container.directive.mjs +4 -4
  66. package/{esm2020 → esm2022}/app/directives/index.mjs +1 -1
  67. package/esm2022/app/directives/subheading/subheading.directive.mjs +13 -0
  68. package/{esm2020 → esm2022}/app/enums/page-change-type.enum.mjs +1 -1
  69. package/{esm2020 → esm2022}/app/enums/pagination-strategy.enum.mjs +1 -1
  70. package/{esm2020 → esm2022}/app/enums/state.enum.mjs +1 -1
  71. package/{esm2020 → esm2022}/app/fs-list.module.mjs +89 -89
  72. package/{esm2020 → esm2022}/app/fs-list.providers.mjs +1 -1
  73. package/{esm2020 → esm2022}/app/interfaces/cellconfig.interface.mjs +1 -1
  74. package/{esm2020 → esm2022}/app/interfaces/draggable-list.interface.mjs +1 -1
  75. package/esm2022/app/interfaces/external-params.interface.mjs +2 -0
  76. package/{esm2020 → esm2022}/app/interfaces/index.mjs +1 -1
  77. package/esm2022/app/interfaces/pagination.interface.mjs +2 -0
  78. package/{esm2020 → esm2022}/app/interfaces/sorting-change-event.interface.mjs +1 -1
  79. package/{esm2020 → esm2022}/app/models/column-async-attribute.mjs +1 -1
  80. package/esm2022/app/models/column-attributes.mjs +139 -0
  81. package/esm2022/app/models/column.model.mjs +173 -0
  82. package/esm2022/app/models/row/base-row.mjs +25 -0
  83. package/esm2022/app/models/row/child-row.mjs +29 -0
  84. package/esm2022/app/models/row/group-footer-row.mjs +22 -0
  85. package/esm2022/app/models/row/group-row.mjs +45 -0
  86. package/{esm2020 → esm2022}/app/models/row/simple-row.mjs +1 -1
  87. package/esm2022/app/models/row-action.model.mjs +102 -0
  88. package/esm2022/app/models/row.mjs +90 -0
  89. package/esm2022/app/models/styleConfig.model.mjs +78 -0
  90. package/esm2022/app/pipes/action-label.mjs +17 -0
  91. package/{esm2020 → esm2022}/app/services/group-expand-notifier.service.mjs +7 -9
  92. package/{fesm2020 → fesm2022}/firestitch-list.mjs +731 -497
  93. package/fesm2022/firestitch-list.mjs.map +1 -0
  94. package/package.json +5 -11
  95. package/esm2020/app/classes/actions-controller.mjs +0 -55
  96. package/esm2020/app/classes/columns-controller.mjs +0 -206
  97. package/esm2020/app/classes/data-controller.mjs +0 -345
  98. package/esm2020/app/classes/external-params-controller.mjs +0 -147
  99. package/esm2020/app/classes/list-controller.mjs +0 -674
  100. package/esm2020/app/classes/pagination-controller.mjs +0 -491
  101. package/esm2020/app/classes/persistance-controller.mjs +0 -19
  102. package/esm2020/app/classes/reorder-controller.mjs +0 -182
  103. package/esm2020/app/classes/selection-controller.mjs +0 -466
  104. package/esm2020/app/classes/sorting-controller.mjs +0 -206
  105. package/esm2020/app/components/body/body.component.mjs +0 -64
  106. package/esm2020/app/components/body/row/actions/actions.component.mjs +0 -97
  107. package/esm2020/app/components/body/row/cell/cell.component.mjs +0 -107
  108. package/esm2020/app/components/body/row/inline-action/inline-action.component.mjs +0 -33
  109. package/esm2020/app/components/body/row/menu-action/menu-action.component.mjs +0 -46
  110. package/esm2020/app/components/body/row/row.component.mjs +0 -322
  111. package/esm2020/app/components/customize-cols/customize-cols.component.mjs +0 -68
  112. package/esm2020/app/components/footer/footer-row/footer-cell/footer-cell.component.mjs +0 -16
  113. package/esm2020/app/components/footer/footer-row/footer-row.component.mjs +0 -28
  114. package/esm2020/app/components/footer/footer.component.mjs +0 -31
  115. package/esm2020/app/components/head/head-cell/head-cell.component.mjs +0 -29
  116. package/esm2020/app/components/head/head.component.mjs +0 -103
  117. package/esm2020/app/components/list/list.component.mjs +0 -385
  118. package/esm2020/app/components/loader/loader.component.mjs +0 -40
  119. package/esm2020/app/components/manage-saved-filters/manage-saved-filters.component.mjs +0 -76
  120. package/esm2020/app/components/pagination/pagination.component.mjs +0 -37
  121. package/esm2020/app/components/saved-filters/saved-filters.component.mjs +0 -29
  122. package/esm2020/app/components/status/status.component.mjs +0 -64
  123. package/esm2020/app/directives/cell/cell.directive.mjs +0 -18
  124. package/esm2020/app/directives/column/column.directive.mjs +0 -121
  125. package/esm2020/app/directives/content-init/content-init.directive.mjs +0 -22
  126. package/esm2020/app/directives/draggable-list/draggable-list.directive.mjs +0 -330
  127. package/esm2020/app/directives/draggable-row/draggable-row.directive.mjs +0 -78
  128. package/esm2020/app/directives/empty-state/empty-state.directive.mjs +0 -13
  129. package/esm2020/app/directives/footer/footer.directive.mjs +0 -18
  130. package/esm2020/app/directives/group-expand-trigger/group-expand-trigger.directive.mjs +0 -26
  131. package/esm2020/app/directives/header/header.directive.mjs +0 -18
  132. package/esm2020/app/directives/heading/heading.directive.mjs +0 -13
  133. package/esm2020/app/directives/subheading/subheading.directive.mjs +0 -13
  134. package/esm2020/app/interfaces/external-params.interface.mjs +0 -2
  135. package/esm2020/app/interfaces/pagination.interface.mjs +0 -2
  136. package/esm2020/app/models/column-attributes.mjs +0 -132
  137. package/esm2020/app/models/column.model.mjs +0 -164
  138. package/esm2020/app/models/row/base-row.mjs +0 -23
  139. package/esm2020/app/models/row/child-row.mjs +0 -28
  140. package/esm2020/app/models/row/group-footer-row.mjs +0 -21
  141. package/esm2020/app/models/row/group-row.mjs +0 -45
  142. package/esm2020/app/models/row-action.model.mjs +0 -90
  143. package/esm2020/app/models/row.mjs +0 -89
  144. package/esm2020/app/models/styleConfig.model.mjs +0 -76
  145. package/esm2020/app/pipes/action-label.mjs +0 -17
  146. package/fesm2015/firestitch-list.mjs +0 -5802
  147. package/fesm2015/firestitch-list.mjs.map +0 -1
  148. package/fesm2020/firestitch-list.mjs.map +0 -1
  149. /package/{esm2020 → esm2022}/app/enums/action-type.enum.mjs +0 -0
  150. /package/{esm2020 → esm2022}/app/enums/row-type.enum.mjs +0 -0
  151. /package/{esm2020 → esm2022}/app/interfaces/column-config.interface.mjs +0 -0
  152. /package/{esm2020 → esm2022}/app/interfaces/listconfig.interface.mjs +0 -0
  153. /package/{esm2020 → esm2022}/app/interfaces/pagination-state.interface.mjs +0 -0
  154. /package/{esm2020 → esm2022}/app/pipes/index.mjs +0 -0
  155. /package/{esm2020 → esm2022}/firestitch-list.mjs +0 -0
  156. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -0,0 +1,344 @@
1
+ import { ChangeDetectorRef, Directive, ElementRef, Input, NgZone, Renderer2 } from '@angular/core';
2
+ import { Observable, Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { ReorderController, ReorderStrategy } from '../../classes/reorder-controller';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../classes/reorder-controller";
7
+ export class FsListDraggableListDirective {
8
+ _cdRef;
9
+ _zone;
10
+ _containerElement;
11
+ _reorderController;
12
+ _renderer;
13
+ // Draggable Element
14
+ _draggableElement;
15
+ _draggableElementPreview;
16
+ _multipleDraggableElementPreview;
17
+ _draggableElementHeight;
18
+ _draggableElementIndex;
19
+ _draggableElementStartIndex;
20
+ // Handlers
21
+ _dragToHandler = this.dragTo.bind(this);
22
+ _dragEndHandler = this.dragEnd.bind(this);
23
+ _dragInProgress = false;
24
+ _childRowElements;
25
+ _dragStart$ = new Subject();
26
+ _dragEnd$ = new Subject();
27
+ _rows;
28
+ _draggableChildrenDirectives = [];
29
+ _selectedRowsDirectives = [];
30
+ _destroy$ = new Subject();
31
+ constructor(_cdRef, _zone, _containerElement, _reorderController, _renderer) {
32
+ this._cdRef = _cdRef;
33
+ this._zone = _zone;
34
+ this._containerElement = _containerElement;
35
+ this._reorderController = _reorderController;
36
+ this._renderer = _renderer;
37
+ }
38
+ _windowTouchMoveHandler = () => {
39
+ //
40
+ };
41
+ get dragStart$() {
42
+ return this._dragStart$.pipe(takeUntil(this._destroy$));
43
+ }
44
+ get dragEnd$() {
45
+ return this._dragEnd$.pipe(takeUntil(this._destroy$));
46
+ }
47
+ get draggableItem() {
48
+ return this._rows[this._draggableElementIndex];
49
+ }
50
+ addDraggableDirective(dir) {
51
+ this._draggableChildrenDirectives.push(dir);
52
+ }
53
+ removeDraggableDirective(dir) {
54
+ const idx = this._draggableChildrenDirectives.indexOf(dir);
55
+ if (idx !== -1) {
56
+ this._draggableChildrenDirectives.splice(idx, 1);
57
+ }
58
+ }
59
+ /**
60
+ * Prepare draggable elements and add events
61
+ *
62
+ * @param draggableElement
63
+ */
64
+ dragStart(draggableElement) {
65
+ if (this._dragInProgress) {
66
+ return;
67
+ }
68
+ if (this._reorderController.startCallback
69
+ && this._reorderController.strategy === ReorderStrategy.Always) {
70
+ this._reorderController.startCallback();
71
+ }
72
+ this._dragInProgress = true;
73
+ window.document.body.classList.add('reorder-in-progress');
74
+ this._draggableElement = draggableElement;
75
+ this._detectSelectedRows();
76
+ this.prepareElements();
77
+ this.initDraggableElement();
78
+ this._draggableElementStartIndex = this._draggableElementIndex;
79
+ this._draggableElement.classList.add('draggable-elem');
80
+ this._zone.runOutsideAngular(() => {
81
+ window.addEventListener('touchmove', this._windowTouchMoveHandler, { passive: true });
82
+ window.document.addEventListener('mousemove', this._dragToHandler, { passive: true });
83
+ window.document.addEventListener('touchmove', this._dragToHandler, { passive: false });
84
+ });
85
+ window.document.addEventListener('mouseup', this._dragEndHandler);
86
+ window.document.addEventListener('touchend', this._dragEndHandler);
87
+ window.document.addEventListener('touchcancel', this._dragEndHandler);
88
+ this._dragStart$.next(null);
89
+ }
90
+ /**
91
+ * Move draggable elements and swap items
92
+ *
93
+ * @param event
94
+ */
95
+ dragTo(event) {
96
+ this.touchFix(event);
97
+ const elemIndex = this.lookupElementUnder(event);
98
+ const targetRow = this._rows[elemIndex];
99
+ if (this._multipleDraggableElementPreview) {
100
+ this._multipleDraggableElementPreview.style.left = `${event.clientX}px`;
101
+ this._multipleDraggableElementPreview.style.top = `${event.clientY}px`;
102
+ }
103
+ // Can not drag before first group and after last group
104
+ const swapWithBoundaryGroupElement = (elemIndex === 0 || elemIndex === this._rows.length - 1)
105
+ && targetRow.isGroup
106
+ // TODO fix isChild & all
107
+ && this.draggableItem.isChild;
108
+ if (!swapWithBoundaryGroupElement) {
109
+ if (elemIndex !== null) {
110
+ if (targetRow.readyToSwap) {
111
+ this.swapWithIndex(elemIndex);
112
+ if (this._draggableElementPreview) {
113
+ this._draggableElementPreview.classList.remove('fs-list-no-drop');
114
+ }
115
+ }
116
+ else {
117
+ if (this._draggableElementPreview) {
118
+ this._draggableElementPreview.classList.add('fs-list-no-drop');
119
+ }
120
+ }
121
+ }
122
+ // FIXME
123
+ if (this._draggableElementPreview) {
124
+ const topOffset = (event.y || event.clientY) - (this._draggableElementHeight / 2);
125
+ this._draggableElementPreview.style.top = `${topOffset}px`;
126
+ }
127
+ }
128
+ }
129
+ /**
130
+ * Remove events and classes after drag finish
131
+ */
132
+ dragEnd() {
133
+ this._dragInProgress = false;
134
+ this._reorderController.dataController.finishReorder();
135
+ if (this._reorderController.movedCallback
136
+ && this._draggableElementStartIndex !== this._draggableElementIndex) {
137
+ this._reorderController.movedCallback(this._reorderController.dataController.reorderData);
138
+ }
139
+ if (this._reorderController.strategy === ReorderStrategy.Always) {
140
+ this._zone.run(() => {
141
+ if (this._reorderController.doneCallback) {
142
+ const result = this._reorderController.doneCallback(this._reorderController.dataController.reorderData);
143
+ this._waitUntilIsNotDone(result);
144
+ }
145
+ });
146
+ }
147
+ // this._reorderController.dataController.updateOrderByRows(this._rows);
148
+ ///
149
+ this._containerElement.nativeElement.classList.remove('drag-hidden');
150
+ this._draggableElement.classList.remove('draggable-elem');
151
+ window.document.body.classList.remove('reorder-in-progress');
152
+ this._draggableElement = null;
153
+ if (this._draggableElementPreview) {
154
+ this._draggableElementPreview.remove();
155
+ this._draggableElementPreview = null;
156
+ }
157
+ else {
158
+ this._renderer.removeChild(document.body, this._multipleDraggableElementPreview);
159
+ this._multipleDraggableElementPreview = null;
160
+ }
161
+ this._draggableElementHeight = null;
162
+ this._draggableElementIndex = null;
163
+ this._draggableElementStartIndex = null;
164
+ this._selectedRowsDirectives = [];
165
+ window.removeEventListener('touchmove', this._windowTouchMoveHandler);
166
+ window.document.removeEventListener('mousemove', this._dragToHandler);
167
+ window.document.removeEventListener('touchmove', this._dragToHandler);
168
+ window.document.removeEventListener('mouseup', this._dragEndHandler);
169
+ window.document.removeEventListener('touchend', this._dragEndHandler);
170
+ window.document.removeEventListener('touchcancel', this._dragEndHandler);
171
+ this._dragEnd$.next(null);
172
+ }
173
+ get _isMultipleDrag() {
174
+ return this._reorderController.multiple && this._selectedRowsDirectives.length > 1;
175
+ }
176
+ /**
177
+ * looking row elements and save their dims
178
+ */
179
+ prepareElements() {
180
+ this.lookupChildElements();
181
+ this.calcElementsDimensions();
182
+ }
183
+ /**
184
+ * Store child rows
185
+ */
186
+ lookupChildElements() {
187
+ this._childRowElements = Array.from(this._containerElement.nativeElement.querySelectorAll('tr:not(.drag-hidden)'))
188
+ .reduce((acc, rowElement, index) => {
189
+ const element = { target: rowElement };
190
+ if (rowElement === this._draggableElement) {
191
+ this._draggableElementIndex = index;
192
+ element.active = true;
193
+ }
194
+ acc.push(element);
195
+ return acc;
196
+ }, []);
197
+ }
198
+ /**
199
+ * Calc child rows sizes/offsets
200
+ */
201
+ calcElementsDimensions() {
202
+ this._childRowElements.forEach((el, index) => {
203
+ const dims = el.target.getBoundingClientRect();
204
+ el.top = dims.top;
205
+ el.height = dims.height;
206
+ el.center = dims.top + (dims.height / 2);
207
+ el.index = index;
208
+ });
209
+ }
210
+ /**
211
+ * Init draggable element
212
+ */
213
+ initDraggableElement() {
214
+ const el = this._draggableElement.cloneNode(true);
215
+ const data = this._draggableElement.getBoundingClientRect();
216
+ if (!(this._isMultipleDrag)) {
217
+ el.style.width = `${data.width}px`;
218
+ el.style.left = `${data.left}px`;
219
+ el.style.top = `${data.top}px`;
220
+ el.classList.add('draggable');
221
+ this._containerElement.nativeElement.append(el);
222
+ this._draggableElementPreview = el;
223
+ this._draggableElementHeight = data.height;
224
+ this.updateDraggableDims();
225
+ }
226
+ else {
227
+ // Create preview DIV
228
+ this._containerElement.nativeElement.classList.add('drag-hidden');
229
+ const selectedCount = this._selectedRowsDirectives?.length;
230
+ const previewBlock = this._renderer.createElement('div');
231
+ previewBlock.style.left = `${data.left}px`;
232
+ previewBlock.style.top = `${data.top}px`;
233
+ const text = this._renderer.createText(`${selectedCount} selected items`);
234
+ this._renderer.appendChild(previewBlock, text);
235
+ this._renderer.addClass(previewBlock, 'fs-list-preview-block');
236
+ this._renderer.appendChild(document.body, previewBlock);
237
+ this._multipleDraggableElementPreview = previewBlock;
238
+ }
239
+ }
240
+ /**
241
+ * Looking by stored row elements for overlapped row
242
+ *
243
+ * @param event
244
+ */
245
+ lookupElementUnder(event) {
246
+ const top = event.y || event.clientY;
247
+ const bottom = event.y || event.clientY;
248
+ let elemIndex = null;
249
+ for (let i = 0; i < this._childRowElements.length; i++) {
250
+ const el = this._childRowElements[i];
251
+ if (!el.active) {
252
+ if (top < el.center + (el.height / 2) && el.index < this._draggableElementIndex
253
+ || bottom > el.center - (el.height / 2) && el.index > this._draggableElementIndex) {
254
+ elemIndex = i;
255
+ }
256
+ }
257
+ }
258
+ return elemIndex;
259
+ }
260
+ /**
261
+ * Swap rows
262
+ *
263
+ * @param index
264
+ */
265
+ swapWithIndex(index) {
266
+ const activeIndex = this._draggableElementIndex;
267
+ const selectedRows = this._selectedRowsDirectives
268
+ .map((d) => d.row)
269
+ .filter((d) => d.readyToSwap);
270
+ // Swap rows in global rows stack
271
+ this._reorderController
272
+ .dataController
273
+ .swapRows(this._rows[activeIndex], this._rows[index], selectedRows, this._isMultipleDrag);
274
+ // Swap visible rows
275
+ if (!this._isMultipleDrag) {
276
+ const activeRow = this._rows[activeIndex];
277
+ this._rows[activeIndex] = this._rows[index];
278
+ this._rows[index] = activeRow;
279
+ const activeElement = this._childRowElements[activeIndex].target;
280
+ this._childRowElements[activeIndex].active = false;
281
+ this._childRowElements[activeIndex].target = this._childRowElements[index].target;
282
+ this._childRowElements[index].target = activeElement;
283
+ this._childRowElements[index].active = true;
284
+ }
285
+ this._draggableElementIndex = index;
286
+ this._cdRef.detectChanges();
287
+ }
288
+ /**
289
+ * Update cell width for draggable elem
290
+ */
291
+ updateDraggableDims() {
292
+ const draggableCells = Array.from(this._draggableElementPreview.querySelectorAll('td'));
293
+ Array.from(this._draggableElementPreview.querySelectorAll('td')).forEach((elem, index) => {
294
+ const dims = elem.getBoundingClientRect();
295
+ draggableCells[index].style.width = `${dims.width}px`;
296
+ });
297
+ }
298
+ _waitUntilIsNotDone(doneResult) {
299
+ if (doneResult instanceof Observable) {
300
+ this._reorderController.disableReorderAction();
301
+ doneResult
302
+ .pipe(takeUntil(this._destroy$))
303
+ .subscribe(() => {
304
+ this._reorderController.enableReorderAction();
305
+ });
306
+ }
307
+ }
308
+ _detectSelectedRows() {
309
+ this._draggableChildrenDirectives
310
+ .forEach((dir) => {
311
+ const isRowSelected = this._reorderController.selectionController?.isRowSelected(dir.row.data);
312
+ if (isRowSelected && !dir.row.isGroup) {
313
+ this._selectedRowsDirectives.push(dir);
314
+ }
315
+ });
316
+ }
317
+ /**
318
+ * Fix background when mobile
319
+ *
320
+ * @param e
321
+ */
322
+ touchFix(e) {
323
+ if (!('clientX' in e) && !('clientY' in e)) {
324
+ const touches = e.touches || e.originalEvent.touches;
325
+ if (touches && touches.length) {
326
+ e.clientX = touches[0].clientX;
327
+ e.clientY = touches[0].clientY;
328
+ }
329
+ e.preventDefault();
330
+ }
331
+ }
332
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListDraggableListDirective, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i0.ElementRef }, { token: i1.ReorderController }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive });
333
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListDraggableListDirective, selector: "[fsListDraggableList]", inputs: { _rows: ["rows", "_rows"] }, ngImport: i0 });
334
+ }
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListDraggableListDirective, decorators: [{
336
+ type: Directive,
337
+ args: [{
338
+ selector: '[fsListDraggableList]',
339
+ }]
340
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i0.ElementRef }, { type: i1.ReorderController }, { type: i0.Renderer2 }], propDecorators: { _rows: [{
341
+ type: Input,
342
+ args: ['rows']
343
+ }] } });
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLWxpc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2RyYWdnYWJsZS1saXN0L2RyYWdnYWJsZS1saXN0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFTdEYsTUFBTSxPQUFPLDRCQUE0QjtJQTBCN0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQTdCVixvQkFBb0I7SUFDWixpQkFBaUIsQ0FBYztJQUMvQix3QkFBd0IsQ0FBYztJQUN0QyxnQ0FBZ0MsQ0FBYztJQUM5Qyx1QkFBdUIsQ0FBUztJQUNoQyxzQkFBc0IsQ0FBUztJQUMvQiwyQkFBMkIsQ0FBUztJQUU1QyxXQUFXO0lBQ0gsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUxQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRXhCLGlCQUFpQixDQUE4QjtJQUMvQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNsQyxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUdoQyxLQUFLLENBQVE7SUFDYiw0QkFBNEIsR0FBa0MsRUFBRSxDQUFDO0lBQ2pFLHVCQUF1QixH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QkFDL0IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2pDLENBQUM7WUFFRCxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7d0dBclpVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUh4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7aUJBQ2xDOzRMQXFCUyxLQUFLO3NCQURaLEtBQUs7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBOZ1pvbmUsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFJlb3JkZXJDb250cm9sbGVyLCBSZW9yZGVyU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlcic7XG5pbXBvcnQgeyBGc0xpc3REcmFnQ2hpbGRSb3dFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kcmFnZ2FibGUtbGlzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUm93IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jvdyc7XG5pbXBvcnQgeyBGc0xpc3REcmFnZ2FibGVSb3dEaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnZ2FibGUtcm93L2RyYWdnYWJsZS1yb3cuZGlyZWN0aXZlJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZnNMaXN0RHJhZ2dhYmxlTGlzdF0nLFxufSlcbmV4cG9ydCBjbGFzcyBGc0xpc3REcmFnZ2FibGVMaXN0RGlyZWN0aXZlIHtcbiAgLy8gRHJhZ2dhYmxlIEVsZW1lbnRcbiAgcHJpdmF0ZSBfZHJhZ2dhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfbXVsdGlwbGVEcmFnZ2FibGVFbGVtZW50UHJldmlldzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2RyYWdnYWJsZUVsZW1lbnRIZWlnaHQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfZHJhZ2dhYmxlRWxlbWVudEluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX2RyYWdnYWJsZUVsZW1lbnRTdGFydEluZGV4OiBudW1iZXI7XG5cbiAgLy8gSGFuZGxlcnNcbiAgcHJpdmF0ZSBfZHJhZ1RvSGFuZGxlciA9IHRoaXMuZHJhZ1RvLmJpbmQodGhpcyk7XG4gIHByaXZhdGUgX2RyYWdFbmRIYW5kbGVyID0gdGhpcy5kcmFnRW5kLmJpbmQodGhpcyk7XG5cbiAgcHJpdmF0ZSBfZHJhZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICBwcml2YXRlIF9jaGlsZFJvd0VsZW1lbnRzOiBGc0xpc3REcmFnQ2hpbGRSb3dFbGVtZW50W107XG4gIHByaXZhdGUgX2RyYWdTdGFydCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kcmFnRW5kJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCdyb3dzJylcbiAgcHJpdmF0ZSBfcm93czogUm93W107XG4gIHByaXZhdGUgX2RyYWdnYWJsZUNoaWxkcmVuRGlyZWN0aXZlczogRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlW10gPSBbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSb3dzRGlyZWN0aXZlczogRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlW10gPSBbXTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF96b25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBfY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9yZW9yZGVyQ29udHJvbGxlcjogUmVvcmRlckNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgKSB7IH1cbiAgXG4gIHByaXZhdGUgX3dpbmRvd1RvdWNoTW92ZUhhbmRsZXIgPSAoKSA9PiB7IFxuICAgIC8vXG4gIH07XG5cbiAgcHVibGljIGdldCBkcmFnU3RhcnQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnU3RhcnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRyYWdFbmQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9kcmFnRW5kJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBkcmFnZ2FibGVJdGVtKCk6IFJvdyB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NbdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEluZGV4XTtcbiAgfVxuICBwdWJsaWMgYWRkRHJhZ2dhYmxlRGlyZWN0aXZlKGRpcjogRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhZ2dhYmxlQ2hpbGRyZW5EaXJlY3RpdmVzLnB1c2goZGlyKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVEcmFnZ2FibGVEaXJlY3RpdmUoZGlyOiBGc0xpc3REcmFnZ2FibGVSb3dEaXJlY3RpdmUpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLl9kcmFnZ2FibGVDaGlsZHJlbkRpcmVjdGl2ZXMuaW5kZXhPZihkaXIpO1xuXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2RyYWdnYWJsZUNoaWxkcmVuRGlyZWN0aXZlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBkcmFnZ2FibGUgZWxlbWVudHMgYW5kIGFkZCBldmVudHNcbiAgICpcbiAgICogQHBhcmFtIGRyYWdnYWJsZUVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyBkcmFnU3RhcnQoZHJhZ2dhYmxlRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fZHJhZ0luUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5zdGFydENhbGxiYWNrXG4gICAgICAmJiB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5zdHJhdGVneSA9PT0gUmVvcmRlclN0cmF0ZWd5LkFsd2F5c1xuICAgICkge1xuICAgICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuc3RhcnRDYWxsYmFjaygpO1xuICAgIH1cblxuICAgIHRoaXMuX2RyYWdJblByb2dyZXNzID0gdHJ1ZTtcblxuICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3Jlb3JkZXItaW4tcHJvZ3Jlc3MnKTtcblxuICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnQgPSBkcmFnZ2FibGVFbGVtZW50O1xuXG4gICAgdGhpcy5fZGV0ZWN0U2VsZWN0ZWRSb3dzKCk7XG4gICAgdGhpcy5wcmVwYXJlRWxlbWVudHMoKTtcbiAgICB0aGlzLmluaXREcmFnZ2FibGVFbGVtZW50KCk7XG5cbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50U3RhcnRJbmRleCA9IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRJbmRleDtcbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2RyYWdnYWJsZS1lbGVtJyk7XG5cbiAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLl93aW5kb3dUb3VjaE1vdmVIYW5kbGVyLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5fZHJhZ1RvSGFuZGxlciwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuICAgICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX2RyYWdUb0hhbmRsZXIsIHsgcGFzc2l2ZTogZmFsc2UgfSk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuX2RyYWdFbmRIYW5kbGVyKTtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLl9kcmFnRW5kSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgdGhpcy5fZHJhZ0VuZEhhbmRsZXIpO1xuXG4gICAgdGhpcy5fZHJhZ1N0YXJ0JC5uZXh0KG51bGwpO1xuICB9XG5cblxuICAvKipcbiAgICogTW92ZSBkcmFnZ2FibGUgZWxlbWVudHMgYW5kIHN3YXAgaXRlbXNcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgZHJhZ1RvKGV2ZW50KSB7XG4gICAgdGhpcy50b3VjaEZpeChldmVudCk7XG4gICAgY29uc3QgZWxlbUluZGV4ID0gdGhpcy5sb29rdXBFbGVtZW50VW5kZXIoZXZlbnQpO1xuICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMuX3Jvd3NbZWxlbUluZGV4XTtcblxuICAgIGlmICh0aGlzLl9tdWx0aXBsZURyYWdnYWJsZUVsZW1lbnRQcmV2aWV3KSB7XG4gICAgICB0aGlzLl9tdWx0aXBsZURyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYfXB4YDtcbiAgICAgIHRoaXMuX211bHRpcGxlRHJhZ2dhYmxlRWxlbWVudFByZXZpZXcuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WX1weGA7XG4gICAgfVxuXG4gICAgLy8gQ2FuIG5vdCBkcmFnIGJlZm9yZSBmaXJzdCBncm91cCBhbmQgYWZ0ZXIgbGFzdCBncm91cFxuICAgIGNvbnN0IHN3YXBXaXRoQm91bmRhcnlHcm91cEVsZW1lbnQgPVxuICAgICAgKGVsZW1JbmRleCA9PT0gMCB8fCBlbGVtSW5kZXggPT09IHRoaXMuX3Jvd3MubGVuZ3RoIC0gMSlcbiAgICAgICYmIHRhcmdldFJvdy5pc0dyb3VwXG4gICAgICAvLyBUT0RPIGZpeCBpc0NoaWxkICYgYWxsXG4gICAgICAmJiAodGhpcy5kcmFnZ2FibGVJdGVtIGFzIGFueSkuaXNDaGlsZDtcblxuXG4gICAgaWYgKCFzd2FwV2l0aEJvdW5kYXJ5R3JvdXBFbGVtZW50KSB7XG4gICAgICBpZiAoZWxlbUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0YXJnZXRSb3cucmVhZHlUb1N3YXApIHtcbiAgICAgICAgICB0aGlzLnN3YXBXaXRoSW5kZXgoZWxlbUluZGV4KTtcbiAgICAgICAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ2ZzLWxpc3Qtbm8tZHJvcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LmNsYXNzTGlzdC5hZGQoJ2ZzLWxpc3Qtbm8tZHJvcCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGSVhNRVxuICAgICAgaWYgKHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3KSB7XG4gICAgICAgIGNvbnN0IHRvcE9mZnNldCA9IChldmVudC55IHx8IGV2ZW50LmNsaWVudFkpIC0gKHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRIZWlnaHQgLyAyKTtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcuc3R5bGUudG9wID0gYCR7dG9wT2Zmc2V0fXB4YDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGV2ZW50cyBhbmQgY2xhc3NlcyBhZnRlciBkcmFnIGZpbmlzaFxuICAgKi9cbiAgcHVibGljIGRyYWdFbmQoKSB7XG4gICAgdGhpcy5fZHJhZ0luUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5maW5pc2hSZW9yZGVyKCk7XG5cbiAgICBpZiAodGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubW92ZWRDYWxsYmFja1xuICAgICAgJiYgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFN0YXJ0SW5kZXggIT09IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRJbmRleCkge1xuXG4gICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5tb3ZlZENhbGxiYWNrKFxuICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5yZW9yZGVyRGF0YSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLnN0cmF0ZWd5ID09PSBSZW9yZGVyU3RyYXRlZ3kuQWx3YXlzKSB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kb25lQ2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kb25lQ2FsbGJhY2soXG4gICAgICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5kYXRhQ29udHJvbGxlci5yZW9yZGVyRGF0YSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5fd2FpdFVudGlsSXNOb3REb25lKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLmRhdGFDb250cm9sbGVyLnVwZGF0ZU9yZGVyQnlSb3dzKHRoaXMuX3Jvd3MpO1xuICAgIC8vL1xuICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnLWhpZGRlbicpO1xuICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dhYmxlLWVsZW0nKTtcbiAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdyZW9yZGVyLWluLXByb2dyZXNzJyk7XG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpIHtcbiAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3LnJlbW92ZSgpO1xuXG4gICAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIHRoaXMuX211bHRpcGxlRHJhZ2dhYmxlRWxlbWVudFByZXZpZXcpO1xuICAgICAgdGhpcy5fbXVsdGlwbGVEcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEhlaWdodCA9IG51bGw7XG4gICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50U3RhcnRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzRGlyZWN0aXZlcyA9IFtdO1xuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMuX3dpbmRvd1RvdWNoTW92ZUhhbmRsZXIpO1xuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLl9kcmFnVG9IYW5kbGVyKTtcbiAgICB3aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5fZHJhZ1RvSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLl9kcmFnRW5kSGFuZGxlcik7XG4gICAgd2luZG93LmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5fZHJhZ0VuZEhhbmRsZXIpO1xuICAgIHdpbmRvdy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIHRoaXMuX2RyYWdFbmRIYW5kbGVyKTtcblxuICAgIHRoaXMuX2RyYWdFbmQkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfaXNNdWx0aXBsZURyYWcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlb3JkZXJDb250cm9sbGVyLm11bHRpcGxlICYmIHRoaXMuX3NlbGVjdGVkUm93c0RpcmVjdGl2ZXMubGVuZ3RoID4gMTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIGxvb2tpbmcgcm93IGVsZW1lbnRzIGFuZCBzYXZlIHRoZWlyIGRpbXNcbiAgICovXG4gIHByaXZhdGUgcHJlcGFyZUVsZW1lbnRzKCkge1xuICAgIHRoaXMubG9va3VwQ2hpbGRFbGVtZW50cygpO1xuICAgIHRoaXMuY2FsY0VsZW1lbnRzRGltZW5zaW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIGNoaWxkIHJvd3NcbiAgICovXG4gIHByaXZhdGUgbG9va3VwQ2hpbGRFbGVtZW50cygpIHtcbiAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLl9jb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHI6bm90KC5kcmFnLWhpZGRlbiknKSlcbiAgICAgIC5yZWR1Y2UoKGFjYzogYW55W10sIHJvd0VsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQ6IGFueSA9IHsgdGFyZ2V0OiByb3dFbGVtZW50IH07XG5cbiAgICAgICAgaWYgKHJvd0VsZW1lbnQgPT09IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgICBlbGVtZW50LmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBhY2MucHVzaChlbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwgW10pIGFzIEZzTGlzdERyYWdDaGlsZFJvd0VsZW1lbnRbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjIGNoaWxkIHJvd3Mgc2l6ZXMvb2Zmc2V0c1xuICAgKi9cbiAgcHJpdmF0ZSBjYWxjRWxlbWVudHNEaW1lbnNpb25zKCkge1xuICAgIHRoaXMuX2NoaWxkUm93RWxlbWVudHMuZm9yRWFjaCgoZWw6IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRpbXMgPSBlbC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBlbC50b3AgPSBkaW1zLnRvcDtcbiAgICAgIGVsLmhlaWdodCA9IGRpbXMuaGVpZ2h0O1xuICAgICAgZWwuY2VudGVyID0gZGltcy50b3AgKyAoZGltcy5oZWlnaHQgLyAyKTtcbiAgICAgIGVsLmluZGV4ID0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBkcmFnZ2FibGUgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBpbml0RHJhZ2dhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnQuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9kcmFnZ2FibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgaWYgKCEodGhpcy5faXNNdWx0aXBsZURyYWcpKSB7XG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGAke2RhdGEud2lkdGh9cHhgO1xuICAgICAgZWwuc3R5bGUubGVmdCA9IGAke2RhdGEubGVmdH1weGA7XG4gICAgICBlbC5zdHlsZS50b3AgPSBgJHtkYXRhLnRvcH1weGA7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2FibGUnKTtcblxuICAgICAgdGhpcy5fY29udGFpbmVyRWxlbWVudC5uYXRpdmVFbGVtZW50LmFwcGVuZChlbCk7XG5cbiAgICAgIHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRQcmV2aWV3ID0gZWw7XG4gICAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SGVpZ2h0ID0gZGF0YS5oZWlnaHQ7XG5cbiAgICAgIHRoaXMudXBkYXRlRHJhZ2dhYmxlRGltcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgcHJldmlldyBESVZcbiAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnLWhpZGRlbicpO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5fc2VsZWN0ZWRSb3dzRGlyZWN0aXZlcz8ubGVuZ3RoO1xuICAgICAgY29uc3QgcHJldmlld0Jsb2NrID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBwcmV2aWV3QmxvY2suc3R5bGUubGVmdCA9IGAke2RhdGEubGVmdH1weGA7XG4gICAgICBwcmV2aWV3QmxvY2suc3R5bGUudG9wID0gYCR7ZGF0YS50b3B9cHhgO1xuXG4gICAgICBjb25zdCB0ZXh0ID0gdGhpcy5fcmVuZGVyZXIuY3JlYXRlVGV4dChgJHtzZWxlY3RlZENvdW50fSBzZWxlY3RlZCBpdGVtc2ApO1xuXG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChwcmV2aWV3QmxvY2ssIHRleHQpO1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3MocHJldmlld0Jsb2NrLCAnZnMtbGlzdC1wcmV2aWV3LWJsb2NrJyk7XG4gICAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCBwcmV2aWV3QmxvY2spO1xuICAgICAgdGhpcy5fbXVsdGlwbGVEcmFnZ2FibGVFbGVtZW50UHJldmlldyA9IHByZXZpZXdCbG9jaztcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBMb29raW5nIGJ5IHN0b3JlZCByb3cgZWxlbWVudHMgZm9yIG92ZXJsYXBwZWQgcm93XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBsb29rdXBFbGVtZW50VW5kZXIoZXZlbnQpIHtcbiAgICBjb25zdCB0b3AgPSBldmVudC55IHx8IGV2ZW50LmNsaWVudFk7XG4gICAgY29uc3QgYm90dG9tID0gZXZlbnQueSB8fCBldmVudC5jbGllbnRZO1xuICAgIGxldCBlbGVtSW5kZXggPSBudWxsO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXMuX2NoaWxkUm93RWxlbWVudHNbaV07XG5cbiAgICAgIGlmICghZWwuYWN0aXZlKSB7XG4gICAgICAgIGlmICh0b3AgPCBlbC5jZW50ZXIgKyAoZWwuaGVpZ2h0IC8gMikgJiYgZWwuaW5kZXggPCB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXhcbiAgICAgICAgICB8fCBib3R0b20gPiBlbC5jZW50ZXIgLSAoZWwuaGVpZ2h0IC8gMikgJiYgZWwuaW5kZXggPiB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXgpIHtcbiAgICAgICAgICBlbGVtSW5kZXggPSBpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1JbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2FwIHJvd3NcbiAgICpcbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBwcml2YXRlIHN3YXBXaXRoSW5kZXgoaW5kZXgpIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2RyYWdnYWJsZUVsZW1lbnRJbmRleDtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLl9zZWxlY3RlZFJvd3NEaXJlY3RpdmVzXG4gICAgICAubWFwKChkKSA9PiBkLnJvdylcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQucmVhZHlUb1N3YXApO1xuXG4gICAgLy8gU3dhcCByb3dzIGluIGdsb2JhbCByb3dzIHN0YWNrXG4gICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXJcbiAgICAgIC5kYXRhQ29udHJvbGxlclxuICAgICAgLnN3YXBSb3dzKFxuICAgICAgICB0aGlzLl9yb3dzW2FjdGl2ZUluZGV4XSxcbiAgICAgICAgdGhpcy5fcm93c1tpbmRleF0sXG4gICAgICAgIHNlbGVjdGVkUm93cyxcbiAgICAgICAgdGhpcy5faXNNdWx0aXBsZURyYWcsXG4gICAgICApO1xuXG4gICAgLy8gU3dhcCB2aXNpYmxlIHJvd3NcbiAgICBpZiAoIXRoaXMuX2lzTXVsdGlwbGVEcmFnKSB7XG4gICAgICBjb25zdCBhY3RpdmVSb3cgPSB0aGlzLl9yb3dzW2FjdGl2ZUluZGV4XTtcbiAgICAgIHRoaXMuX3Jvd3NbYWN0aXZlSW5kZXhdID0gdGhpcy5fcm93c1tpbmRleF07XG4gICAgICB0aGlzLl9yb3dzW2luZGV4XSA9IGFjdGl2ZVJvdztcblxuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuX2NoaWxkUm93RWxlbWVudHNbYWN0aXZlSW5kZXhdLnRhcmdldDtcbiAgICAgIHRoaXMuX2NoaWxkUm93RWxlbWVudHNbYWN0aXZlSW5kZXhdLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2FjdGl2ZUluZGV4XS50YXJnZXQgPSB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2luZGV4XS50YXJnZXQ7XG4gICAgICB0aGlzLl9jaGlsZFJvd0VsZW1lbnRzW2luZGV4XS50YXJnZXQgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgdGhpcy5fY2hpbGRSb3dFbGVtZW50c1tpbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9kcmFnZ2FibGVFbGVtZW50SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNlbGwgd2lkdGggZm9yIGRyYWdnYWJsZSBlbGVtXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURyYWdnYWJsZURpbXMoKSB7XG4gICAgY29uc3QgZHJhZ2dhYmxlQ2VsbHM6IGFueSA9IEFycmF5LmZyb20odGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcucXVlcnlTZWxlY3RvckFsbCgndGQnKSk7XG5cbiAgICBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5fZHJhZ2dhYmxlRWxlbWVudFByZXZpZXcucXVlcnlTZWxlY3RvckFsbCgndGQnKSxcbiAgICApLmZvckVhY2goKGVsZW06IGFueSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGRpbXMgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgZHJhZ2dhYmxlQ2VsbHNbaW5kZXhdLnN0eWxlLndpZHRoID0gYCR7ZGltcy53aWR0aH1weGA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YWl0VW50aWxJc05vdERvbmUoZG9uZVJlc3VsdDogdW5rbm93bik6IHZvaWQge1xuICAgIGlmIChkb25lUmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuZGlzYWJsZVJlb3JkZXJBY3Rpb24oKTtcblxuICAgICAgZG9uZVJlc3VsdFxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW9yZGVyQ29udHJvbGxlci5lbmFibGVSZW9yZGVyQWN0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2RldGVjdFNlbGVjdGVkUm93cygpOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnZ2FibGVDaGlsZHJlbkRpcmVjdGl2ZXNcbiAgICAgIC5mb3JFYWNoKChkaXI6IEZzTGlzdERyYWdnYWJsZVJvd0RpcmVjdGl2ZSkgPT4ge1xuICAgICAgICBjb25zdCBpc1Jvd1NlbGVjdGVkID0gdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIuc2VsZWN0aW9uQ29udHJvbGxlcj8uaXNSb3dTZWxlY3RlZChkaXIucm93LmRhdGEpO1xuXG4gICAgICAgIGlmIChpc1Jvd1NlbGVjdGVkICYmICFkaXIucm93LmlzR3JvdXApIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3NEaXJlY3RpdmVzLnB1c2goZGlyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRml4IGJhY2tncm91bmQgd2hlbiBtb2JpbGVcbiAgICpcbiAgICogQHBhcmFtIGVcbiAgICovXG4gIHByaXZhdGUgdG91Y2hGaXgoZSkge1xuICAgIGlmICghKCdjbGllbnRYJyBpbiBlKSAmJiAhKCdjbGllbnRZJyBpbiBlKSkge1xuICAgICAgY29uc3QgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcbiAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGUuY2xpZW50WCA9IHRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgICAgZS5jbGllbnRZID0gdG91Y2hlc1swXS5jbGllbnRZO1xuICAgICAgfVxuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,83 @@
1
+ import { Directive, ElementRef, Input, Renderer2 } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { ReorderController } from '../../classes/reorder-controller';
5
+ import { Row } from '../../models/row';
6
+ import { FsListDraggableListDirective } from '../draggable-list/draggable-list.directive';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../classes/reorder-controller";
9
+ import * as i2 from "../draggable-list/draggable-list.directive";
10
+ export class FsListDraggableRowDirective {
11
+ _el;
12
+ _renderer;
13
+ _reorderController;
14
+ _draggableList;
15
+ row;
16
+ _destroy$ = new Subject();
17
+ constructor(_el, _renderer, _reorderController, _draggableList) {
18
+ this._el = _el;
19
+ this._renderer = _renderer;
20
+ this._reorderController = _reorderController;
21
+ this._draggableList = _draggableList;
22
+ }
23
+ get elRef() {
24
+ return this._el;
25
+ }
26
+ ngOnInit() {
27
+ if (this._reorderController.moveDropCallback) {
28
+ this._listenDragEvents();
29
+ }
30
+ this._draggableList.addDraggableDirective(this);
31
+ }
32
+ ngOnDestroy() {
33
+ this._draggableList.removeDraggableDirective(this);
34
+ this._destroy$.next(null);
35
+ this._destroy$.complete();
36
+ }
37
+ dragHide() {
38
+ this._el.nativeElement.classList.add('drag-hidden');
39
+ }
40
+ _listenDragEvents() {
41
+ this._draggableList
42
+ .dragStart$
43
+ .pipe(takeUntil(this._destroy$))
44
+ .subscribe(() => {
45
+ this._markReadyToSwapRows();
46
+ });
47
+ this._draggableList
48
+ .dragEnd$
49
+ .pipe(takeUntil(this._destroy$))
50
+ .subscribe(() => {
51
+ this._unmarkRows();
52
+ });
53
+ }
54
+ _markReadyToSwapRows() {
55
+ const currentEl = this.row;
56
+ const targetEl = this._draggableList.draggableItem;
57
+ this.row.readyToSwap = this._reorderController.moveDropCallback({
58
+ row1: currentEl?.data,
59
+ row2: targetEl?.data,
60
+ group1: currentEl?.parent?.data,
61
+ group2: targetEl?.parent?.data,
62
+ });
63
+ if (!this.row.readyToSwap) {
64
+ this._renderer.addClass(this._el.nativeElement, 'fs-list-swap-restricted');
65
+ }
66
+ }
67
+ _unmarkRows() {
68
+ if (!this.row.readyToSwap) {
69
+ this._renderer.removeClass(this._el.nativeElement, 'fs-list-swap-restricted');
70
+ }
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListDraggableRowDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ReorderController }, { token: i2.FsListDraggableListDirective }], target: i0.ɵɵFactoryTarget.Directive });
73
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListDraggableRowDirective, selector: "[fsListDraggableRow]", inputs: { row: "row" }, ngImport: i0 });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListDraggableRowDirective, decorators: [{
76
+ type: Directive,
77
+ args: [{
78
+ selector: '[fsListDraggableRow]',
79
+ }]
80
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ReorderController }, { type: i2.FsListDraggableListDirective }], propDecorators: { row: [{
81
+ type: Input
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXJvdy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZHJhZ2dhYmxlLXJvdy9kcmFnZ2FibGUtcm93LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7QUFNMUYsTUFBTSxPQUFPLDJCQUEyQjtJQVE1QjtJQUNBO0lBQ0E7SUFDQTtJQVJILEdBQUcsQ0FBTTtJQUVSLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXhDLFlBQ1UsR0FBZSxFQUNmLFNBQW9CLEVBQ3BCLGtCQUFxQyxFQUNyQyxjQUE0QztRQUg1QyxRQUFHLEdBQUgsR0FBRyxDQUFZO1FBQ2YsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ3JDLG1CQUFjLEdBQWQsY0FBYyxDQUE4QjtJQUNsRCxDQUFDO0lBRUwsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLGNBQWM7YUFDaEIsVUFBVTthQUNWLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjO2FBQ2hCLFFBQVE7YUFDUixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDMUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBRW5ELElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FDN0Q7WUFDRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJO1lBQ3BCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUk7WUFDL0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSTtTQUMvQixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7SUFDSCxDQUFDO3dHQTdFVSwyQkFBMkI7NEZBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFIdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2lCQUNqQztrTEFJUSxHQUFHO3NCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUmVvcmRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3Jlb3JkZXItY29udHJvbGxlcic7XG5pbXBvcnQgeyBSb3cgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm93JztcbmltcG9ydCB7IEZzTGlzdERyYWdnYWJsZUxpc3REaXJlY3RpdmUgfSBmcm9tICcuLi9kcmFnZ2FibGUtbGlzdC9kcmFnZ2FibGUtbGlzdC5kaXJlY3RpdmUnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0xpc3REcmFnZ2FibGVSb3ddJyxcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0RHJhZ2dhYmxlUm93RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3c6IFJvdztcblxuICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIF9yZW9yZGVyQ29udHJvbGxlcjogUmVvcmRlckNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBfZHJhZ2dhYmxlTGlzdDogRnNMaXN0RHJhZ2dhYmxlTGlzdERpcmVjdGl2ZSxcbiAgKSB7IH1cblxuICBwdWJsaWMgZ2V0IGVsUmVmKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLl9lbDtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubW92ZURyb3BDYWxsYmFjaykge1xuICAgICAgdGhpcy5fbGlzdGVuRHJhZ0V2ZW50cygpO1xuICAgIH1cbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0LmFkZERyYWdnYWJsZURpcmVjdGl2ZSh0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0LnJlbW92ZURyYWdnYWJsZURpcmVjdGl2ZSh0aGlzKTtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZHJhZ0hpZGUoKTogdm9pZCB7XG4gICAgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnLWhpZGRlbicpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuRHJhZ0V2ZW50cygpIHtcbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0XG4gICAgICAuZHJhZ1N0YXJ0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWFya1JlYWR5VG9Td2FwUm93cygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9kcmFnZ2FibGVMaXN0XG4gICAgICAuZHJhZ0VuZCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3VubWFya1Jvd3MoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFya1JlYWR5VG9Td2FwUm93cygpIHtcbiAgICBjb25zdCBjdXJyZW50RWwgPSB0aGlzLnJvdztcbiAgICBjb25zdCB0YXJnZXRFbCA9IHRoaXMuX2RyYWdnYWJsZUxpc3QuZHJhZ2dhYmxlSXRlbTtcblxuICAgIHRoaXMucm93LnJlYWR5VG9Td2FwID0gdGhpcy5fcmVvcmRlckNvbnRyb2xsZXIubW92ZURyb3BDYWxsYmFjayhcbiAgICAgIHtcbiAgICAgICAgcm93MTogY3VycmVudEVsPy5kYXRhLFxuICAgICAgICByb3cyOiB0YXJnZXRFbD8uZGF0YSxcbiAgICAgICAgZ3JvdXAxOiBjdXJyZW50RWw/LnBhcmVudD8uZGF0YSxcbiAgICAgICAgZ3JvdXAyOiB0YXJnZXRFbD8ucGFyZW50Py5kYXRhLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgaWYgKCF0aGlzLnJvdy5yZWFkeVRvU3dhcCkge1xuICAgICAgdGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ2ZzLWxpc3Qtc3dhcC1yZXN0cmljdGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdW5tYXJrUm93cygpIHtcbiAgICBpZiAoIXRoaXMucm93LnJlYWR5VG9Td2FwKSB7XG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAnZnMtbGlzdC1zd2FwLXJlc3RyaWN0ZWQnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,13 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FsListEmptyStateDirective {
4
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListEmptyStateDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
5
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListEmptyStateDirective, selector: "[fs-list-empty-state]", ngImport: i0 });
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListEmptyStateDirective, decorators: [{
8
+ type: Directive,
9
+ args: [{
10
+ selector: '[fs-list-empty-state]',
11
+ }]
12
+ }] });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2VtcHR5LXN0YXRlL2VtcHR5LXN0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUsxQyxNQUFNLE9BQU8seUJBQXlCO3dHQUF6Qix5QkFBeUI7NEZBQXpCLHlCQUF5Qjs7NEZBQXpCLHlCQUF5QjtrQkFIckMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2lCQUNsQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZnMtbGlzdC1lbXB0eS1zdGF0ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnNMaXN0RW1wdHlTdGF0ZURpcmVjdGl2ZSB7fVxyXG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FsListFooterDirective {
4
+ colspan;
5
+ align;
6
+ className;
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
8
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListFooterDirective, selector: "[fs-list-footer]", inputs: { colspan: "colspan", align: "align", className: ["class", "className"] }, ngImport: i0 });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListFooterDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{ selector: '[fs-list-footer]' }]
13
+ }], propDecorators: { colspan: [{
14
+ type: Input
15
+ }], align: [{
16
+ type: Input
17
+ }], className: [{
18
+ type: Input,
19
+ args: ['class']
20
+ }] } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9vdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9mb290ZXIvZm9vdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHakQsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQixPQUFPLENBQUM7SUFDUixLQUFLLENBQVM7SUFDUCxTQUFTLENBQW9CO3dHQUh6QyxxQkFBcUI7NEZBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRTs4QkFFekIsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNpQixTQUFTO3NCQUEvQixLQUFLO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZnMtbGlzdC1mb290ZXJdJyB9KVxyXG5leHBvcnQgY2xhc3MgRnNMaXN0Rm9vdGVyRGlyZWN0aXZlIHtcclxuICBASW5wdXQoKSBwdWJsaWMgY29sc3BhbjtcclxuICBASW5wdXQoKSBwdWJsaWMgYWxpZ246IHN0cmluZztcclxuICBASW5wdXQoJ2NsYXNzJykgcHVibGljIGNsYXNzTmFtZTogc3RyaW5nIHwgc3RyaW5nW107XHJcbn1cclxuIl19
@@ -0,0 +1,28 @@
1
+ import { Directive, HostListener, Input } from '@angular/core';
2
+ import { GroupExpandNotifierService } from '../../services/group-expand-notifier.service';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/group-expand-notifier.service";
5
+ export class FsListGroupExpandTriggerDirective {
6
+ _expandNotifier;
7
+ click(event) {
8
+ event.preventDefault();
9
+ event.stopPropagation();
10
+ this._expandNotifier.toggleExpandStatus(this.row);
11
+ }
12
+ row;
13
+ constructor(_expandNotifier) {
14
+ this._expandNotifier = _expandNotifier;
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupExpandTriggerDirective, deps: [{ token: i1.GroupExpandNotifierService }], target: i0.ɵɵFactoryTarget.Directive });
17
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListGroupExpandTriggerDirective, selector: "[fsListGroupExpandTrigger]", inputs: { row: "row" }, host: { listeners: { "click": "click($event)" } }, ngImport: i0 });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupExpandTriggerDirective, decorators: [{
20
+ type: Directive,
21
+ args: [{ selector: '[fsListGroupExpandTrigger]' }]
22
+ }], ctorParameters: () => [{ type: i1.GroupExpandNotifierService }], propDecorators: { click: [{
23
+ type: HostListener,
24
+ args: ['click', ['$event']]
25
+ }], row: [{
26
+ type: Input
27
+ }] } });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtZXhwYW5kLXRyaWdnZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9kaXJlY3RpdmVzL2dyb3VwLWV4cGFuZC10cmlnZ2VyL2dyb3VwLWV4cGFuZC10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOENBQThDLENBQUM7OztBQUkxRixNQUFNLE9BQU8saUNBQWlDO0lBWXhCO0lBVGIsS0FBSyxDQUFDLEtBQUs7UUFDaEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBR00sR0FBRyxDQUFDO0lBRVgsWUFBb0IsZUFBMkM7UUFBM0Msb0JBQWUsR0FBZixlQUFlLENBQTRCO0lBQUcsQ0FBQzt3R0FaeEQsaUNBQWlDOzRGQUFqQyxpQ0FBaUM7OzRGQUFqQyxpQ0FBaUM7a0JBRDdDLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7K0ZBSTVDLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUTFCLEdBQUc7c0JBRFQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3VwLWV4cGFuZC1ub3RpZmllci5zZXJ2aWNlJztcclxuXHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZnNMaXN0R3JvdXBFeHBhbmRUcmlnZ2VyXScgfSlcclxuZXhwb3J0IGNsYXNzIEZzTGlzdEdyb3VwRXhwYW5kVHJpZ2dlckRpcmVjdGl2ZSB7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBwdWJsaWMgY2xpY2soZXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX2V4cGFuZE5vdGlmaWVyLnRvZ2dsZUV4cGFuZFN0YXR1cyh0aGlzLnJvdyk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3c7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2V4cGFuZE5vdGlmaWVyOiBHcm91cEV4cGFuZE5vdGlmaWVyU2VydmljZSkge31cclxufVxyXG4iXX0=
@@ -2,13 +2,13 @@ import { Directive } from '@angular/core';
2
2
  import { FsListCellDirective } from '../cell/cell.directive';
3
3
  import * as i0 from "@angular/core";
4
4
  export class FsListGroupFooterDirective extends FsListCellDirective {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupFooterDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListGroupFooterDirective, selector: "[fs-list-group-footer]", usesInheritance: true, ngImport: i0 });
5
7
  }
6
- FsListGroupFooterDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsListGroupFooterDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7
- FsListGroupFooterDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FsListGroupFooterDirective, selector: "[fs-list-group-footer]", usesInheritance: true, ngImport: i0 });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsListGroupFooterDirective, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupFooterDirective, decorators: [{
9
9
  type: Directive,
10
10
  args: [{
11
11
  selector: '[fs-list-group-footer]'
12
12
  }]
13
13
  }] });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtZm9vdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9ncm91cC1mb290ZXIvZ3JvdXAtZm9vdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU03RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1COzt3SEFBdEQsMEJBQTBCOzRHQUExQiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0xpc3RDZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2VsbC9jZWxsLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzLWxpc3QtZ3JvdXAtZm9vdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0R3JvdXBGb290ZXJEaXJlY3RpdmUgZXh0ZW5kcyBGc0xpc3RDZWxsRGlyZWN0aXZlIHt9XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtZm9vdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9ncm91cC1mb290ZXIvZ3JvdXAtZm9vdGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU03RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO3dHQUF0RCwwQkFBMEI7NEZBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsd0JBQXdCO2lCQUNuQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0xpc3RDZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2VsbC9jZWxsLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzLWxpc3QtZ3JvdXAtZm9vdGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0R3JvdXBGb290ZXJEaXJlY3RpdmUgZXh0ZW5kcyBGc0xpc3RDZWxsRGlyZWN0aXZlIHt9XG4iXX0=
@@ -2,13 +2,13 @@ import { Directive } from '@angular/core';
2
2
  import { FsListCellDirective } from '../cell/cell.directive';
3
3
  import * as i0 from "@angular/core";
4
4
  export class FsListGroupHeaderDirective extends FsListCellDirective {
5
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupHeaderDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
6
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: FsListGroupHeaderDirective, selector: "[fs-list-group-cell],[fs-list-group-header]", usesInheritance: true, ngImport: i0 });
5
7
  }
6
- FsListGroupHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsListGroupHeaderDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
7
- FsListGroupHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: FsListGroupHeaderDirective, selector: "[fs-list-group-cell],[fs-list-group-header]", usesInheritance: true, ngImport: i0 });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FsListGroupHeaderDirective, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FsListGroupHeaderDirective, decorators: [{
9
9
  type: Directive,
10
10
  args: [{
11
11
  selector: '[fs-list-group-cell],[fs-list-group-header]'
12
12
  }]
13
13
  }] });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9ncm91cC1oZWFkZXIvZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU03RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1COzt3SEFBdEQsMEJBQTBCOzRHQUExQiwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkNBQTZDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0xpc3RDZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2VsbC9jZWxsLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzLWxpc3QtZ3JvdXAtY2VsbF0sW2ZzLWxpc3QtZ3JvdXAtaGVhZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUgZXh0ZW5kcyBGc0xpc3RDZWxsRGlyZWN0aXZlIHt9XG4iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZGlyZWN0aXZlcy9ncm91cC1oZWFkZXIvZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQU03RCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO3dHQUF0RCwwQkFBMEI7NEZBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFIdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsNkNBQTZDO2lCQUN4RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0xpc3RDZWxsRGlyZWN0aXZlIH0gZnJvbSAnLi4vY2VsbC9jZWxsLmRpcmVjdGl2ZSc7XG5cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ZzLWxpc3QtZ3JvdXAtY2VsbF0sW2ZzLWxpc3QtZ3JvdXAtaGVhZGVyXSdcbn0pXG5leHBvcnQgY2xhc3MgRnNMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUgZXh0ZW5kcyBGc0xpc3RDZWxsRGlyZWN0aXZlIHt9XG4iXX0=