@swimlane/ngx-datatable 19.0.0 → 20.0.0-alpha-1

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 (159) hide show
  1. package/README.md +0 -1
  2. package/esm2020/lib/components/body/body-cell.component.mjs +432 -0
  3. package/esm2020/lib/components/body/body-group-header-template.directive.mjs +16 -0
  4. package/esm2020/lib/components/body/body-group-header.directive.mjs +62 -0
  5. package/esm2020/lib/components/body/body-row-wrapper.component.mjs +140 -0
  6. package/esm2020/lib/components/body/body-row.component.mjs +262 -0
  7. package/esm2020/lib/components/body/body.component.mjs +863 -0
  8. package/esm2020/lib/components/body/progress-bar.component.mjs +27 -0
  9. package/esm2020/lib/components/body/scroller.component.mjs +91 -0
  10. package/esm2020/lib/components/body/selection.component.mjs +150 -0
  11. package/esm2020/lib/components/body/summary/summary-row.component.mjs +105 -0
  12. package/esm2020/lib/components/columns/column-cell.directive.mjs +14 -0
  13. package/esm2020/lib/components/columns/column-header.directive.mjs +14 -0
  14. package/esm2020/lib/components/columns/column.directive.mjs +98 -0
  15. package/esm2020/lib/components/columns/tree.directive.mjs +14 -0
  16. package/esm2020/lib/components/datatable.component.mjs +1008 -0
  17. package/esm2020/lib/components/footer/footer-template.directive.mjs +14 -0
  18. package/esm2020/lib/components/footer/footer.component.mjs +128 -0
  19. package/esm2020/lib/components/footer/footer.directive.mjs +35 -0
  20. package/esm2020/lib/components/footer/pager.component.mjs +181 -0
  21. package/esm2020/lib/components/header/header-cell.component.mjs +243 -0
  22. package/esm2020/lib/components/header/header.component.mjs +376 -0
  23. package/esm2020/lib/components/row-detail/row-detail-template.directive.mjs +16 -0
  24. package/esm2020/lib/components/row-detail/row-detail.directive.mjs +63 -0
  25. package/esm2020/lib/directives/draggable.directive.mjs +108 -0
  26. package/esm2020/lib/directives/long-press.directive.mjs +117 -0
  27. package/esm2020/lib/directives/orderable.directive.mjs +136 -0
  28. package/esm2020/lib/directives/resizeable.directive.mjs +93 -0
  29. package/esm2020/lib/directives/visibility.directive.mjs +63 -0
  30. package/esm2020/lib/events.mjs +7 -0
  31. package/esm2020/lib/ngx-datatable.module.mjs +139 -0
  32. package/esm2020/lib/services/column-changes.service.mjs +24 -0
  33. package/esm2020/lib/services/dimensions-helper.service.mjs +17 -0
  34. package/esm2020/lib/services/scrollbar-helper.service.mjs +37 -0
  35. package/esm2020/lib/types/click.type.mjs +6 -0
  36. package/esm2020/lib/types/column-mode.type.mjs +7 -0
  37. package/esm2020/lib/types/contextmenu.type.mjs +6 -0
  38. package/esm2020/lib/types/selection.type.mjs +9 -0
  39. package/esm2020/lib/types/sort-direction.type.mjs +6 -0
  40. package/esm2020/lib/types/sort-prop-dir.type.mjs +2 -0
  41. package/esm2020/lib/types/sort.type.mjs +6 -0
  42. package/esm2020/lib/types/table-column.type.mjs +2 -0
  43. package/esm2020/lib/utils/camel-case.mjs +28 -0
  44. package/esm2020/lib/utils/column-helper.mjs +95 -0
  45. package/esm2020/lib/utils/column-prop-getters.mjs +96 -0
  46. package/esm2020/lib/utils/column.mjs +69 -0
  47. package/esm2020/lib/utils/elm-from-point.mjs +38 -0
  48. package/esm2020/lib/utils/id.mjs +8 -0
  49. package/esm2020/lib/utils/keys.mjs +10 -0
  50. package/esm2020/lib/utils/math.mjs +146 -0
  51. package/esm2020/lib/utils/prefixes.mjs +38 -0
  52. package/esm2020/lib/utils/row-height-cache.mjs +138 -0
  53. package/esm2020/lib/utils/selection.mjs +40 -0
  54. package/esm2020/lib/utils/sort.mjs +127 -0
  55. package/esm2020/lib/utils/throttle.mjs +60 -0
  56. package/esm2020/lib/utils/translate.mjs +25 -0
  57. package/esm2020/lib/utils/tree.mjs +103 -0
  58. package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
  59. package/{esm2015/swimlane-ngx-datatable.js → esm2020/swimlane-ngx-datatable.mjs} +1 -1
  60. package/fesm2015/{swimlane-ngx-datatable.js → swimlane-ngx-datatable.mjs} +4104 -3337
  61. package/fesm2015/swimlane-ngx-datatable.mjs.map +1 -0
  62. package/fesm2020/swimlane-ngx-datatable.mjs +5974 -0
  63. package/fesm2020/swimlane-ngx-datatable.mjs.map +1 -0
  64. package/lib/components/body/body-cell.component.d.ts +3 -0
  65. package/lib/components/body/body-group-header-template.directive.d.ts +3 -0
  66. package/lib/components/body/body-group-header.directive.d.ts +3 -0
  67. package/lib/components/body/body-row-wrapper.component.d.ts +3 -0
  68. package/lib/components/body/body-row.component.d.ts +3 -0
  69. package/lib/components/body/body.component.d.ts +3 -0
  70. package/lib/components/body/progress-bar.component.d.ts +3 -0
  71. package/lib/components/body/scroller.component.d.ts +3 -0
  72. package/lib/components/body/selection.component.d.ts +3 -0
  73. package/lib/components/body/summary/summary-row.component.d.ts +3 -0
  74. package/lib/components/columns/column-cell.directive.d.ts +3 -0
  75. package/lib/components/columns/column-header.directive.d.ts +3 -0
  76. package/lib/components/columns/column.directive.d.ts +3 -0
  77. package/lib/components/columns/tree.directive.d.ts +3 -0
  78. package/lib/components/datatable.component.d.ts +3 -0
  79. package/lib/components/footer/footer-template.directive.d.ts +3 -0
  80. package/lib/components/footer/footer.component.d.ts +3 -0
  81. package/lib/components/footer/footer.directive.d.ts +3 -0
  82. package/lib/components/footer/pager.component.d.ts +3 -0
  83. package/lib/components/header/header-cell.component.d.ts +3 -0
  84. package/lib/components/header/header.component.d.ts +3 -0
  85. package/lib/components/row-detail/row-detail-template.directive.d.ts +3 -0
  86. package/lib/components/row-detail/row-detail.directive.d.ts +3 -0
  87. package/lib/directives/draggable.directive.d.ts +3 -0
  88. package/lib/directives/long-press.directive.d.ts +3 -0
  89. package/lib/directives/orderable.directive.d.ts +3 -0
  90. package/lib/directives/resizeable.directive.d.ts +3 -0
  91. package/lib/directives/visibility.directive.d.ts +3 -0
  92. package/lib/ngx-datatable.module.d.ts +33 -0
  93. package/lib/services/column-changes.service.d.ts +3 -0
  94. package/lib/services/dimensions-helper.service.d.ts +3 -0
  95. package/lib/services/scrollbar-helper.service.d.ts +3 -0
  96. package/package.json +24 -12
  97. package/swimlane-ngx-datatable.d.ts +1 -0
  98. package/bundles/swimlane-ngx-datatable.umd.js +0 -5876
  99. package/bundles/swimlane-ngx-datatable.umd.js.map +0 -1
  100. package/bundles/swimlane-ngx-datatable.umd.min.js +0 -2
  101. package/bundles/swimlane-ngx-datatable.umd.min.js.map +0 -1
  102. package/esm2015/lib/components/body/body-cell.component.js +0 -361
  103. package/esm2015/lib/components/body/body-group-header-template.directive.js +0 -15
  104. package/esm2015/lib/components/body/body-group-header.directive.js +0 -54
  105. package/esm2015/lib/components/body/body-row-wrapper.component.js +0 -106
  106. package/esm2015/lib/components/body/body-row.component.js +0 -212
  107. package/esm2015/lib/components/body/body.component.js +0 -713
  108. package/esm2015/lib/components/body/progress-bar.component.js +0 -17
  109. package/esm2015/lib/components/body/scroller.component.js +0 -83
  110. package/esm2015/lib/components/body/selection.component.js +0 -140
  111. package/esm2015/lib/components/body/summary/summary-row.component.js +0 -81
  112. package/esm2015/lib/components/columns/column-cell.directive.js +0 -13
  113. package/esm2015/lib/components/columns/column-header.directive.js +0 -13
  114. package/esm2015/lib/components/columns/column.directive.js +0 -65
  115. package/esm2015/lib/components/columns/tree.directive.js +0 -13
  116. package/esm2015/lib/components/datatable.component.js +0 -925
  117. package/esm2015/lib/components/footer/footer-template.directive.js +0 -13
  118. package/esm2015/lib/components/footer/footer.component.js +0 -75
  119. package/esm2015/lib/components/footer/footer.directive.js +0 -22
  120. package/esm2015/lib/components/footer/pager.component.js +0 -136
  121. package/esm2015/lib/components/header/header-cell.component.js +0 -191
  122. package/esm2015/lib/components/header/header.component.js +0 -295
  123. package/esm2015/lib/components/row-detail/row-detail-template.directive.js +0 -15
  124. package/esm2015/lib/components/row-detail/row-detail.directive.js +0 -55
  125. package/esm2015/lib/directives/draggable.directive.js +0 -102
  126. package/esm2015/lib/directives/long-press.directive.js +0 -103
  127. package/esm2015/lib/directives/orderable.directive.js +0 -131
  128. package/esm2015/lib/directives/resizeable.directive.js +0 -89
  129. package/esm2015/lib/directives/visibility.directive.js +0 -62
  130. package/esm2015/lib/events.js +0 -7
  131. package/esm2015/lib/ngx-datatable.module.js +0 -96
  132. package/esm2015/lib/services/column-changes.service.js +0 -21
  133. package/esm2015/lib/services/dimensions-helper.service.js +0 -14
  134. package/esm2015/lib/services/scrollbar-helper.service.js +0 -34
  135. package/esm2015/lib/types/click.type.js +0 -6
  136. package/esm2015/lib/types/column-mode.type.js +0 -7
  137. package/esm2015/lib/types/contextmenu.type.js +0 -6
  138. package/esm2015/lib/types/selection.type.js +0 -9
  139. package/esm2015/lib/types/sort-direction.type.js +0 -6
  140. package/esm2015/lib/types/sort-prop-dir.type.js +0 -2
  141. package/esm2015/lib/types/sort.type.js +0 -6
  142. package/esm2015/lib/types/table-column.type.js +0 -2
  143. package/esm2015/lib/utils/camel-case.js +0 -28
  144. package/esm2015/lib/utils/column-helper.js +0 -95
  145. package/esm2015/lib/utils/column-prop-getters.js +0 -96
  146. package/esm2015/lib/utils/column.js +0 -69
  147. package/esm2015/lib/utils/elm-from-point.js +0 -38
  148. package/esm2015/lib/utils/id.js +0 -8
  149. package/esm2015/lib/utils/keys.js +0 -10
  150. package/esm2015/lib/utils/math.js +0 -146
  151. package/esm2015/lib/utils/prefixes.js +0 -40
  152. package/esm2015/lib/utils/row-height-cache.js +0 -138
  153. package/esm2015/lib/utils/selection.js +0 -40
  154. package/esm2015/lib/utils/sort.js +0 -127
  155. package/esm2015/lib/utils/throttle.js +0 -60
  156. package/esm2015/lib/utils/translate.js +0 -25
  157. package/esm2015/lib/utils/tree.js +0 -103
  158. package/fesm2015/swimlane-ngx-datatable.js.map +0 -1
  159. package/swimlane-ngx-datatable.metadata.json +0 -1
@@ -0,0 +1,376 @@
1
+ import { Component, Output, EventEmitter, Input, HostBinding, ChangeDetectionStrategy } from '@angular/core';
2
+ import { columnsByPin, columnGroupWidths, columnsByPinArr } from '../../utils/column';
3
+ import { SortType } from '../../types/sort.type';
4
+ import { translateXY } from '../../utils/translate';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./header-cell.component";
7
+ import * as i2 from "../../directives/orderable.directive";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "../../directives/resizeable.directive";
10
+ import * as i5 from "../../directives/long-press.directive";
11
+ import * as i6 from "../../directives/draggable.directive";
12
+ export class DataTableHeaderComponent {
13
+ constructor(cd) {
14
+ this.cd = cd;
15
+ this.sort = new EventEmitter();
16
+ this.reorder = new EventEmitter();
17
+ this.resize = new EventEmitter();
18
+ this.select = new EventEmitter();
19
+ this.columnContextmenu = new EventEmitter(false);
20
+ this._columnGroupWidths = {
21
+ total: 100
22
+ };
23
+ this._styleByGroup = {
24
+ left: {},
25
+ center: {},
26
+ right: {}
27
+ };
28
+ this.destroyed = false;
29
+ }
30
+ set innerWidth(val) {
31
+ this._innerWidth = val;
32
+ setTimeout(() => {
33
+ if (this._columns) {
34
+ const colByPin = columnsByPin(this._columns);
35
+ this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);
36
+ this.setStylesByGroup();
37
+ }
38
+ });
39
+ }
40
+ get innerWidth() {
41
+ return this._innerWidth;
42
+ }
43
+ set headerHeight(val) {
44
+ if (val !== 'auto') {
45
+ this._headerHeight = `${val}px`;
46
+ }
47
+ else {
48
+ this._headerHeight = val;
49
+ }
50
+ }
51
+ get headerHeight() {
52
+ return this._headerHeight;
53
+ }
54
+ set columns(val) {
55
+ this._columns = val;
56
+ const colsByPin = columnsByPin(val);
57
+ this._columnsByPin = columnsByPinArr(val);
58
+ setTimeout(() => {
59
+ this._columnGroupWidths = columnGroupWidths(colsByPin, val);
60
+ this.setStylesByGroup();
61
+ });
62
+ }
63
+ get columns() {
64
+ return this._columns;
65
+ }
66
+ set offsetX(val) {
67
+ this._offsetX = val;
68
+ this.setStylesByGroup();
69
+ }
70
+ get offsetX() {
71
+ return this._offsetX;
72
+ }
73
+ ngOnDestroy() {
74
+ this.destroyed = true;
75
+ }
76
+ onLongPressStart({ event, model }) {
77
+ model.dragging = true;
78
+ this.dragEventTarget = event;
79
+ }
80
+ onLongPressEnd({ event, model }) {
81
+ this.dragEventTarget = event;
82
+ // delay resetting so sort can be
83
+ // prevented if we were dragging
84
+ setTimeout(() => {
85
+ // datatable component creates copies from columns on reorder
86
+ // set dragging to false on new objects
87
+ const column = this._columns.find(c => c.$$id === model.$$id);
88
+ if (column) {
89
+ column.dragging = false;
90
+ }
91
+ }, 5);
92
+ }
93
+ get headerWidth() {
94
+ if (this.scrollbarH) {
95
+ return this.innerWidth + 'px';
96
+ }
97
+ return '100%';
98
+ }
99
+ trackByGroups(index, colGroup) {
100
+ return colGroup.type;
101
+ }
102
+ columnTrackingFn(index, column) {
103
+ return column.$$id;
104
+ }
105
+ onColumnResized(width, column) {
106
+ if (width <= column.minWidth) {
107
+ width = column.minWidth;
108
+ }
109
+ else if (width >= column.maxWidth) {
110
+ width = column.maxWidth;
111
+ }
112
+ this.resize.emit({
113
+ column,
114
+ prevValue: column.width,
115
+ newValue: width
116
+ });
117
+ }
118
+ onColumnReordered({ prevIndex, newIndex, model }) {
119
+ const column = this.getColumn(newIndex);
120
+ column.isTarget = false;
121
+ column.targetMarkerContext = undefined;
122
+ this.reorder.emit({
123
+ column: model,
124
+ prevValue: prevIndex,
125
+ newValue: newIndex
126
+ });
127
+ }
128
+ onTargetChanged({ prevIndex, newIndex, initialIndex }) {
129
+ if (prevIndex || prevIndex === 0) {
130
+ const oldColumn = this.getColumn(prevIndex);
131
+ oldColumn.isTarget = false;
132
+ oldColumn.targetMarkerContext = undefined;
133
+ }
134
+ if (newIndex || newIndex === 0) {
135
+ const newColumn = this.getColumn(newIndex);
136
+ newColumn.isTarget = true;
137
+ if (initialIndex !== newIndex) {
138
+ newColumn.targetMarkerContext = {
139
+ class: 'targetMarker '.concat(initialIndex > newIndex ? 'dragFromRight' : 'dragFromLeft')
140
+ };
141
+ }
142
+ }
143
+ }
144
+ getColumn(index) {
145
+ const leftColumnCount = this._columnsByPin[0].columns.length;
146
+ if (index < leftColumnCount) {
147
+ return this._columnsByPin[0].columns[index];
148
+ }
149
+ const centerColumnCount = this._columnsByPin[1].columns.length;
150
+ if (index < leftColumnCount + centerColumnCount) {
151
+ return this._columnsByPin[1].columns[index - leftColumnCount];
152
+ }
153
+ return this._columnsByPin[2].columns[index - leftColumnCount - centerColumnCount];
154
+ }
155
+ onSort({ column, prevValue, newValue }) {
156
+ // if we are dragging don't sort!
157
+ if (column.dragging) {
158
+ return;
159
+ }
160
+ const sorts = this.calcNewSorts(column, prevValue, newValue);
161
+ this.sort.emit({
162
+ sorts,
163
+ column,
164
+ prevValue,
165
+ newValue
166
+ });
167
+ }
168
+ calcNewSorts(column, prevValue, newValue) {
169
+ let idx = 0;
170
+ if (!this.sorts) {
171
+ this.sorts = [];
172
+ }
173
+ const sorts = this.sorts.map((s, i) => {
174
+ s = { ...s };
175
+ if (s.prop === column.prop) {
176
+ idx = i;
177
+ }
178
+ return s;
179
+ });
180
+ if (newValue === undefined) {
181
+ sorts.splice(idx, 1);
182
+ }
183
+ else if (prevValue) {
184
+ sorts[idx].dir = newValue;
185
+ }
186
+ else {
187
+ if (this.sortType === SortType.single) {
188
+ sorts.splice(0, this.sorts.length);
189
+ }
190
+ sorts.push({ dir: newValue, prop: column.prop });
191
+ }
192
+ return sorts;
193
+ }
194
+ setStylesByGroup() {
195
+ this._styleByGroup.left = this.calcStylesByGroup('left');
196
+ this._styleByGroup.center = this.calcStylesByGroup('center');
197
+ this._styleByGroup.right = this.calcStylesByGroup('right');
198
+ if (!this.destroyed) {
199
+ this.cd.detectChanges();
200
+ }
201
+ }
202
+ calcStylesByGroup(group) {
203
+ const widths = this._columnGroupWidths;
204
+ const offsetX = this.offsetX;
205
+ const styles = {
206
+ width: `${widths[group]}px`
207
+ };
208
+ if (group === 'center') {
209
+ translateXY(styles, offsetX * -1, 0);
210
+ }
211
+ else if (group === 'right') {
212
+ const totalDiff = widths.total - this.innerWidth;
213
+ const offset = totalDiff * -1;
214
+ translateXY(styles, offset, 0);
215
+ }
216
+ return styles;
217
+ }
218
+ }
219
+ DataTableHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
220
+ DataTableHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableHeaderComponent, selector: "datatable-header", inputs: { sortAscendingIcon: "sortAscendingIcon", sortDescendingIcon: "sortDescendingIcon", sortUnsetIcon: "sortUnsetIcon", scrollbarH: "scrollbarH", dealsWithGroup: "dealsWithGroup", targetMarkerTemplate: "targetMarkerTemplate", innerWidth: "innerWidth", sorts: "sorts", sortType: "sortType", allRowsSelected: "allRowsSelected", selectionType: "selectionType", reorderable: "reorderable", headerHeight: "headerHeight", columns: "columns", offsetX: "offsetX" }, outputs: { sort: "sort", reorder: "reorder", resize: "resize", select: "select", columnContextmenu: "columnContextmenu" }, host: { properties: { "style.height": "this.headerHeight", "style.width": "this.headerWidth" }, classAttribute: "datatable-header" }, ngImport: i0, template: `
221
+ <div
222
+ role="row"
223
+ orderable
224
+ (reorder)="onColumnReordered($event)"
225
+ (targetChanged)="onTargetChanged($event)"
226
+ [style.width.px]="_columnGroupWidths.total"
227
+ class="datatable-header-inner"
228
+ >
229
+ <div
230
+ *ngFor="let colGroup of _columnsByPin; trackBy: trackByGroups"
231
+ [class]="'datatable-row-' + colGroup.type"
232
+ [ngStyle]="_styleByGroup[colGroup.type]"
233
+ >
234
+ <datatable-header-cell
235
+ role="columnheader"
236
+ *ngFor="let column of colGroup.columns; trackBy: columnTrackingFn"
237
+ resizeable
238
+ [resizeEnabled]="column.resizeable"
239
+ (resize)="onColumnResized($event, column)"
240
+ long-press
241
+ [pressModel]="column"
242
+ [pressEnabled]="reorderable && column.draggable"
243
+ (longPressStart)="onLongPressStart($event)"
244
+ (longPressEnd)="onLongPressEnd($event)"
245
+ draggable
246
+ [dragX]="reorderable && column.draggable && column.dragging"
247
+ [dragY]="false"
248
+ [dragModel]="column"
249
+ [dragEventTarget]="dragEventTarget"
250
+ [headerHeight]="headerHeight"
251
+ [isTarget]="column.isTarget"
252
+ [targetMarkerTemplate]="targetMarkerTemplate"
253
+ [targetMarkerContext]="column.targetMarkerContext"
254
+ [column]="column"
255
+ [sortType]="sortType"
256
+ [sorts]="sorts"
257
+ [selectionType]="selectionType"
258
+ [sortAscendingIcon]="sortAscendingIcon"
259
+ [sortDescendingIcon]="sortDescendingIcon"
260
+ [sortUnsetIcon]="sortUnsetIcon"
261
+ [allRowsSelected]="allRowsSelected"
262
+ (sort)="onSort($event)"
263
+ (select)="select.emit($event)"
264
+ (columnContextmenu)="columnContextmenu.emit($event)"
265
+ >
266
+ </datatable-header-cell>
267
+ </div>
268
+ </div>
269
+ `, isInline: true, components: [{ type: i1.DataTableHeaderCellComponent, selector: "datatable-header-cell", inputs: ["sortType", "sortAscendingIcon", "sortDescendingIcon", "sortUnsetIcon", "isTarget", "targetMarkerTemplate", "targetMarkerContext", "allRowsSelected", "selectionType", "column", "headerHeight", "sorts"], outputs: ["sort", "select", "columnContextmenu"] }], directives: [{ type: i2.OrderableDirective, selector: "[orderable]", outputs: ["reorder", "targetChanged"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.ResizeableDirective, selector: "[resizeable]", inputs: ["resizeEnabled", "minWidth", "maxWidth"], outputs: ["resize"] }, { type: i5.LongPressDirective, selector: "[long-press]", inputs: ["pressEnabled", "pressModel", "duration"], outputs: ["longPressStart", "longPressing", "longPressEnd"] }, { type: i6.DraggableDirective, selector: "[draggable]", inputs: ["dragEventTarget", "dragModel", "dragX", "dragY"], outputs: ["dragStart", "dragging", "dragEnd"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableHeaderComponent, decorators: [{
271
+ type: Component,
272
+ args: [{
273
+ selector: 'datatable-header',
274
+ template: `
275
+ <div
276
+ role="row"
277
+ orderable
278
+ (reorder)="onColumnReordered($event)"
279
+ (targetChanged)="onTargetChanged($event)"
280
+ [style.width.px]="_columnGroupWidths.total"
281
+ class="datatable-header-inner"
282
+ >
283
+ <div
284
+ *ngFor="let colGroup of _columnsByPin; trackBy: trackByGroups"
285
+ [class]="'datatable-row-' + colGroup.type"
286
+ [ngStyle]="_styleByGroup[colGroup.type]"
287
+ >
288
+ <datatable-header-cell
289
+ role="columnheader"
290
+ *ngFor="let column of colGroup.columns; trackBy: columnTrackingFn"
291
+ resizeable
292
+ [resizeEnabled]="column.resizeable"
293
+ (resize)="onColumnResized($event, column)"
294
+ long-press
295
+ [pressModel]="column"
296
+ [pressEnabled]="reorderable && column.draggable"
297
+ (longPressStart)="onLongPressStart($event)"
298
+ (longPressEnd)="onLongPressEnd($event)"
299
+ draggable
300
+ [dragX]="reorderable && column.draggable && column.dragging"
301
+ [dragY]="false"
302
+ [dragModel]="column"
303
+ [dragEventTarget]="dragEventTarget"
304
+ [headerHeight]="headerHeight"
305
+ [isTarget]="column.isTarget"
306
+ [targetMarkerTemplate]="targetMarkerTemplate"
307
+ [targetMarkerContext]="column.targetMarkerContext"
308
+ [column]="column"
309
+ [sortType]="sortType"
310
+ [sorts]="sorts"
311
+ [selectionType]="selectionType"
312
+ [sortAscendingIcon]="sortAscendingIcon"
313
+ [sortDescendingIcon]="sortDescendingIcon"
314
+ [sortUnsetIcon]="sortUnsetIcon"
315
+ [allRowsSelected]="allRowsSelected"
316
+ (sort)="onSort($event)"
317
+ (select)="select.emit($event)"
318
+ (columnContextmenu)="columnContextmenu.emit($event)"
319
+ >
320
+ </datatable-header-cell>
321
+ </div>
322
+ </div>
323
+ `,
324
+ host: {
325
+ class: 'datatable-header'
326
+ },
327
+ changeDetection: ChangeDetectionStrategy.OnPush
328
+ }]
329
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { sortAscendingIcon: [{
330
+ type: Input
331
+ }], sortDescendingIcon: [{
332
+ type: Input
333
+ }], sortUnsetIcon: [{
334
+ type: Input
335
+ }], scrollbarH: [{
336
+ type: Input
337
+ }], dealsWithGroup: [{
338
+ type: Input
339
+ }], targetMarkerTemplate: [{
340
+ type: Input
341
+ }], innerWidth: [{
342
+ type: Input
343
+ }], sorts: [{
344
+ type: Input
345
+ }], sortType: [{
346
+ type: Input
347
+ }], allRowsSelected: [{
348
+ type: Input
349
+ }], selectionType: [{
350
+ type: Input
351
+ }], reorderable: [{
352
+ type: Input
353
+ }], headerHeight: [{
354
+ type: HostBinding,
355
+ args: ['style.height']
356
+ }, {
357
+ type: Input
358
+ }], columns: [{
359
+ type: Input
360
+ }], offsetX: [{
361
+ type: Input
362
+ }], sort: [{
363
+ type: Output
364
+ }], reorder: [{
365
+ type: Output
366
+ }], resize: [{
367
+ type: Output
368
+ }], select: [{
369
+ type: Output
370
+ }], columnContextmenu: [{
371
+ type: Output
372
+ }], headerWidth: [{
373
+ type: HostBinding,
374
+ args: ['style.width']
375
+ }] } });
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFDWixLQUFLLEVBQ0wsV0FBVyxFQUVYLHVCQUF1QixFQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBMkRwRCxNQUFNLE9BQU8sd0JBQXdCO0lBNkZuQyxZQUFvQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXRCL0IsU0FBSSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdDLFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoRCxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLHNCQUFpQixHQUFHLElBQUksWUFBWSxDQUFxQyxLQUFLLENBQUMsQ0FBQztRQUcxRix1QkFBa0IsR0FBUTtZQUN4QixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUM7UUFLRixrQkFBYSxHQUEyQjtZQUN0QyxJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxFQUFFO1lBQ1YsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRU0sY0FBUyxHQUFHLEtBQUssQ0FBQztJQUVrQixDQUFDO0lBbkY3QyxJQUFhLFVB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TTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQTZDSCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBIb3N0QmluZGluZyxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjb2x1bW5zQnlQaW4sIGNvbHVtbkdyb3VwV2lkdGhzLCBjb2x1bW5zQnlQaW5BcnIgfSBmcm9tICcuLi8uLi91dGlscy9jb2x1bW4nO1xuaW1wb3J0IHsgU29ydFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcy9zb3J0LnR5cGUnO1xuaW1wb3J0IHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3NlbGVjdGlvbi50eXBlJztcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGVYWSB9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGF0YWJsZS1oZWFkZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgb3JkZXJhYmxlXG4gICAgICAocmVvcmRlcik9XCJvbkNvbHVtblJlb3JkZXJlZCgkZXZlbnQpXCJcbiAgICAgICh0YXJnZXRDaGFuZ2VkKT1cIm9uVGFyZ2V0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJfY29sdW1uR3JvdXBXaWR0aHMudG90YWxcIlxuICAgICAgY2xhc3M9XCJkYXRhdGFibGUtaGVhZGVyLWlubmVyXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2xHcm91cCBvZiBfY29sdW1uc0J5UGluOyB0cmFja0J5OiB0cmFja0J5R3JvdXBzXCJcbiAgICAgICAgW2NsYXNzXT1cIidkYXRhdGFibGUtcm93LScgKyBjb2xHcm91cC50eXBlXCJcbiAgICAgICAgW25nU3R5bGVdPVwiX3N0eWxlQnlHcm91cFtjb2xHcm91cC50eXBlXVwiXG4gICAgICA+XG4gICAgICAgIDxkYXRhdGFibGUtaGVhZGVyLWNlbGxcbiAgICAgICAgICByb2xlPVwiY29sdW1uaGVhZGVyXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbEdyb3VwLmNvbHVtbnM7IHRyYWNrQnk6IGNvbHVtblRyYWNraW5nRm5cIlxuICAgICAgICAgIHJlc2l6ZWFibGVcbiAgICAgICAgICBbcmVzaXplRW5hYmxlZF09XCJjb2x1bW4ucmVzaXplYWJsZVwiXG4gICAgICAgICAgKHJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZWQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICBsb25nLXByZXNzXG4gICAgICAgICAgW3ByZXNzTW9kZWxdPVwiY29sdW1uXCJcbiAgICAgICAgICBbcHJlc3NFbmFibGVkXT1cInJlb3JkZXJhYmxlICYmIGNvbHVtbi5kcmFnZ2FibGVcIlxuICAgICAgICAgIChsb25nUHJlc3NTdGFydCk9XCJvbkxvbmdQcmVzc1N0YXJ0KCRldmVudClcIlxuICAgICAgICAgIChsb25nUHJlc3NFbmQpPVwib25Mb25nUHJlc3NFbmQoJGV2ZW50KVwiXG4gICAgICAgICAgZHJhZ2dhYmxlXG4gICAgICAgICAgW2RyYWdYXT1cInJlb3JkZXJhYmxlICYmIGNvbHVtbi5kcmFnZ2FibGUgJiYgY29sdW1uLmRyYWdnaW5nXCJcbiAgICAgICAgICBbZHJhZ1ldPVwiZmFsc2VcIlxuICAgICAgICAgIFtkcmFnTW9kZWxdPVwiY29sdW1uXCJcbiAgICAgICAgICBbZHJhZ0V2ZW50VGFyZ2V0XT1cImRyYWdFdmVudFRhcmdldFwiXG4gICAgICAgICAgW2hlYWRlckhlaWdodF09XCJoZWFkZXJIZWlnaHRcIlxuICAgICAgICAgIFtpc1RhcmdldF09XCJjb2x1bW4uaXNUYXJnZXRcIlxuICAgICAgICAgIFt0YXJnZXRNYXJrZXJUZW1wbGF0ZV09XCJ0YXJnZXRNYXJrZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW3RhcmdldE1hcmtlckNvbnRleHRdPVwiY29sdW1uLnRhcmdldE1hcmtlckNvbnRleHRcIlxuICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICBbc29ydFR5cGVdPVwic29ydFR5cGVcIlxuICAgICAgICAgIFtzb3J0c109XCJzb3J0c1wiXG4gICAgICAgICAgW3NlbGVjdGlvblR5cGVdPVwic2VsZWN0aW9uVHlwZVwiXG4gICAgICAgICAgW3NvcnRBc2NlbmRpbmdJY29uXT1cInNvcnRBc2NlbmRpbmdJY29uXCJcbiAgICAgICAgICBbc29ydERlc2NlbmRpbmdJY29uXT1cInNvcnREZXNjZW5kaW5nSWNvblwiXG4gICAgICAgICAgW3NvcnRVbnNldEljb25dPVwic29ydFVuc2V0SWNvblwiXG4gICAgICAgICAgW2FsbFJvd3NTZWxlY3RlZF09XCJhbGxSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgIChzb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5Db250ZXh0bWVudSk9XCJjb2x1bW5Db250ZXh0bWVudS5lbWl0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvZGF0YXRhYmxlLWhlYWRlci1jZWxsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2RhdGF0YWJsZS1oZWFkZXInXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHNvcnRBc2NlbmRpbmdJY29uOiBhbnk7XG4gIEBJbnB1dCgpIHNvcnREZXNjZW5kaW5nSWNvbjogYW55O1xuICBASW5wdXQoKSBzb3J0VW5zZXRJY29uOiBhbnk7XG4gIEBJbnB1dCgpIHNjcm9sbGJhckg6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRlYWxzV2l0aEdyb3VwOiBib29sZWFuO1xuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55O1xuXG4gIHRhcmdldE1hcmtlckNvbnRleHQ6IGFueTtcblxuICBASW5wdXQoKSBzZXQgaW5uZXJXaWR0aCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2lubmVyV2lkdGggPSB2YWw7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29sdW1ucykge1xuICAgICAgICBjb25zdCBjb2xCeVBpbiA9IGNvbHVtbnNCeVBpbih0aGlzLl9jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5fY29sdW1uR3JvdXBXaWR0aHMgPSBjb2x1bW5Hcm91cFdpZHRocyhjb2xCeVBpbiwgdGhpcy5fY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2V0U3R5bGVzQnlHcm91cCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGlubmVyV2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5faW5uZXJXaWR0aDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNvcnRzOiBhbnlbXTtcbiAgQElucHV0KCkgc29ydFR5cGU6IFNvcnRUeXBlO1xuICBASW5wdXQoKSBhbGxSb3dzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGU6IFNlbGVjdGlvblR5cGU7XG4gIEBJbnB1dCgpIHJlb3JkZXJhYmxlOiBib29sZWFuO1xuXG4gIGRyYWdFdmVudFRhcmdldDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuaGVpZ2h0JylcbiAgQElucHV0KClcbiAgc2V0IGhlYWRlckhlaWdodCh2YWw6IGFueSkge1xuICAgIGlmICh2YWwgIT09ICdhdXRvJykge1xuICAgICAgdGhpcy5faGVhZGVySGVpZ2h0ID0gYCR7dmFsfXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGVhZGVySGVpZ2h0ID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVySGVpZ2h0O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsOiBhbnlbXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XG5cbiAgICBjb25zdCBjb2xzQnlQaW4gPSBjb2x1bW5zQnlQaW4odmFsKTtcbiAgICB0aGlzLl9jb2x1bW5zQnlQaW4gPSBjb2x1bW5zQnlQaW5BcnIodmFsKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NvbHVtbkdyb3VwV2lkdGhzID0gY29sdW1uR3JvdXBXaWR0aHMoY29sc0J5UGluLCB2YWwpO1xuICAgICAgdGhpcy5zZXRTdHlsZXNCeUdyb3VwKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29sdW1ucygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgb2Zmc2V0WCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX29mZnNldFggPSB2YWw7XG4gICAgdGhpcy5zZXRTdHlsZXNCeUdyb3VwKCk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldFg7XG4gIH1cblxuICBAT3V0cHV0KCkgc29ydDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZW9yZGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlc2l6ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY29sdW1uQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQ7IGNvbHVtbjogYW55IH0+KGZhbHNlKTtcblxuICBfY29sdW1uc0J5UGluOiBhbnk7XG4gIF9jb2x1bW5Hcm91cFdpZHRoczogYW55ID0ge1xuICAgIHRvdGFsOiAxMDBcbiAgfTtcbiAgX2lubmVyV2lkdGg6IG51bWJlcjtcbiAgX29mZnNldFg6IG51bWJlcjtcbiAgX2NvbHVtbnM6IGFueVtdO1xuICBfaGVhZGVySGVpZ2h0OiBzdHJpbmc7XG4gIF9zdHlsZUJ5R3JvdXA6IHsgW3Byb3A6IHN0cmluZ106IHt9IH0gPSB7XG4gICAgbGVmdDoge30sXG4gICAgY2VudGVyOiB7fSxcbiAgICByaWdodDoge31cbiAgfTtcblxuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTG9uZ1ByZXNzU3RhcnQoeyBldmVudCwgbW9kZWwgfTogeyBldmVudDogYW55OyBtb2RlbDogYW55IH0pIHtcbiAgICBtb2RlbC5kcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kcmFnRXZlbnRUYXJnZXQgPSBldmVudDtcbiAgfVxuXG4gIG9uTG9uZ1ByZXNzRW5kKHsgZXZlbnQsIG1vZGVsIH06IHsgZXZlbnQ6IGFueTsgbW9kZWw6IGFueSB9KSB7XG4gICAgdGhpcy5kcmFnRXZlbnRUYXJnZXQgPSBldmVudDtcblxuICAgIC8vIGRlbGF5IHJlc2V0dGluZyBzbyBzb3J0IGNhbiBiZVxuICAgIC8vIHByZXZlbnRlZCBpZiB3ZSB3ZXJlIGRyYWdnaW5nXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBkYXRhdGFibGUgY29tcG9uZW50IGNyZWF0ZXMgY29waWVzIGZyb20gY29sdW1ucyBvbiByZW9yZGVyXG4gICAgICAvLyBzZXQgZHJhZ2dpbmcgdG8gZmFsc2Ugb24gbmV3IG9iamVjdHNcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZChjID0+IGMuJCRpZCA9PT0gbW9kZWwuJCRpZCk7XG4gICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbi5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sIDUpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXG4gIGdldCBoZWFkZXJXaWR0aCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNjcm9sbGJhckgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlubmVyV2lkdGggKyAncHgnO1xuICAgIH1cblxuICAgIHJldHVybiAnMTAwJSc7XG4gIH1cblxuICB0cmFja0J5R3JvdXBzKGluZGV4OiBudW1iZXIsIGNvbEdyb3VwOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb2xHcm91cC50eXBlO1xuICB9XG5cbiAgY29sdW1uVHJhY2tpbmdGbihpbmRleDogbnVtYmVyLCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGNvbHVtbi4kJGlkO1xuICB9XG5cbiAgb25Db2x1bW5SZXNpemVkKHdpZHRoOiBudW1iZXIsIGNvbHVtbjogRGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgaWYgKHdpZHRoIDw9IGNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgd2lkdGggPSBjb2x1bW4ubWluV2lkdGg7XG4gICAgfSBlbHNlIGlmICh3aWR0aCA+PSBjb2x1bW4ubWF4V2lkdGgpIHtcbiAgICAgIHdpZHRoID0gY29sdW1uLm1heFdpZHRoO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplLmVtaXQoe1xuICAgICAgY29sdW1uLFxuICAgICAgcHJldlZhbHVlOiBjb2x1bW4ud2lkdGgsXG4gICAgICBuZXdWYWx1ZTogd2lkdGhcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ29sdW1uUmVvcmRlcmVkKHsgcHJldkluZGV4LCBuZXdJbmRleCwgbW9kZWwgfTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5nZXRDb2x1bW4obmV3SW5kZXgpO1xuICAgIGNvbHVtbi5pc1RhcmdldCA9IGZhbHNlO1xuICAgIGNvbHVtbi50YXJnZXRNYXJrZXJDb250ZXh0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVvcmRlci5lbWl0KHtcbiAgICAgIGNvbHVtbjogbW9kZWwsXG4gICAgICBwcmV2VmFsdWU6IHByZXZJbmRleCxcbiAgICAgIG5ld1ZhbHVlOiBuZXdJbmRleFxuICAgIH0pO1xuICB9XG5cbiAgb25UYXJnZXRDaGFuZ2VkKHsgcHJldkluZGV4LCBuZXdJbmRleCwgaW5pdGlhbEluZGV4IH06IGFueSk6IHZvaWQge1xuICAgIGlmIChwcmV2SW5kZXggfHwgcHJldkluZGV4ID09PSAwKSB7XG4gICAgICBjb25zdCBvbGRDb2x1bW4gPSB0aGlzLmdldENvbHVtbihwcmV2SW5kZXgpO1xuICAgICAgb2xkQ29sdW1uLmlzVGFyZ2V0ID0gZmFsc2U7XG4gICAgICBvbGRDb2x1bW4udGFyZ2V0TWFya2VyQ29udGV4dCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKG5ld0luZGV4IHx8IG5ld0luZGV4ID09PSAwKSB7XG4gICAgICBjb25zdCBuZXdDb2x1bW4gPSB0aGlzLmdldENvbHVtbihuZXdJbmRleCk7XG4gICAgICBuZXdDb2x1bW4uaXNUYXJnZXQgPSB0cnVlO1xuXG4gICAgICBpZiAoaW5pdGlhbEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICBuZXdDb2x1bW4udGFyZ2V0TWFya2VyQ29udGV4dCA9IHtcbiAgICAgICAgICBjbGFzczogJ3RhcmdldE1hcmtlciAnLmNvbmNhdChpbml0aWFsSW5kZXggPiBuZXdJbmRleCA/ICdkcmFnRnJvbVJpZ2h0JyA6ICdkcmFnRnJvbUxlZnQnKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtbihpbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBsZWZ0Q29sdW1uQ291bnQgPSB0aGlzLl9jb2x1bW5zQnlQaW5bMF0uY29sdW1ucy5sZW5ndGg7XG4gICAgaWYgKGluZGV4IDwgbGVmdENvbHVtbkNvdW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sdW1uc0J5UGluWzBdLmNvbHVtbnNbaW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IGNlbnRlckNvbHVtbkNvdW50ID0gdGhpcy5fY29sdW1uc0J5UGluWzFdLmNvbHVtbnMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IGxlZnRDb2x1bW5Db3VudCArIGNlbnRlckNvbHVtbkNvdW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29sdW1uc0J5UGluWzFdLmNvbHVtbnNbaW5kZXggLSBsZWZ0Q29sdW1uQ291bnRdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zQnlQaW5bMl0uY29sdW1uc1tpbmRleCAtIGxlZnRDb2x1bW5Db3VudCAtIGNlbnRlckNvbHVtbkNvdW50XTtcbiAgfVxuXG4gIG9uU29ydCh7IGNvbHVtbiwgcHJldlZhbHVlLCBuZXdWYWx1ZSB9OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBpZiB3ZSBhcmUgZHJhZ2dpbmcgZG9uJ3Qgc29ydCFcbiAgICBpZiAoY29sdW1uLmRyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydHMgPSB0aGlzLmNhbGNOZXdTb3J0cyhjb2x1bW4sIHByZXZWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMuc29ydC5lbWl0KHtcbiAgICAgIHNvcnRzLFxuICAgICAgY29sdW1uLFxuICAgICAgcHJldlZhbHVlLFxuICAgICAgbmV3VmFsdWVcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGNOZXdTb3J0cyhjb2x1bW46IGFueSwgcHJldlZhbHVlOiBudW1iZXIsIG5ld1ZhbHVlOiBudW1iZXIpOiBhbnlbXSB7XG4gICAgbGV0IGlkeCA9IDA7XG5cbiAgICBpZiAoIXRoaXMuc29ydHMpIHtcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0cyA9IHRoaXMuc29ydHMubWFwKChzLCBpKSA9PiB7XG4gICAgICBzID0geyAuLi5zIH07XG4gICAgICBpZiAocy5wcm9wID09PSBjb2x1bW4ucHJvcCkge1xuICAgICAgICBpZHggPSBpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc29ydHMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSBlbHNlIGlmIChwcmV2VmFsdWUpIHtcbiAgICAgIHNvcnRzW2lkeF0uZGlyID0gbmV3VmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNvcnRUeXBlID09PSBTb3J0VHlwZS5zaW5nbGUpIHtcbiAgICAgICAgc29ydHMuc3BsaWNlKDAsIHRoaXMuc29ydHMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgc29ydHMucHVzaCh7IGRpcjogbmV3VmFsdWUsIHByb3A6IGNvbHVtbi5wcm9wIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0cztcbiAgfVxuXG4gIHNldFN0eWxlc0J5R3JvdXAoKSB7XG4gICAgdGhpcy5fc3R5bGVCeUdyb3VwLmxlZnQgPSB0aGlzLmNhbGNTdHlsZXNCeUdyb3VwKCdsZWZ0Jyk7XG4gICAgdGhpcy5fc3R5bGVCeUdyb3VwLmNlbnRlciA9IHRoaXMuY2FsY1N0eWxlc0J5R3JvdXAoJ2NlbnRlcicpO1xuICAgIHRoaXMuX3N0eWxlQnlHcm91cC5yaWdodCA9IHRoaXMuY2FsY1N0eWxlc0J5R3JvdXAoJ3JpZ2h0Jyk7XG4gICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgY2FsY1N0eWxlc0J5R3JvdXAoZ3JvdXA6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgd2lkdGhzID0gdGhpcy5fY29sdW1uR3JvdXBXaWR0aHM7XG4gICAgY29uc3Qgb2Zmc2V0WCA9IHRoaXMub2Zmc2V0WDtcblxuICAgIGNvbnN0IHN0eWxlcyA9IHtcbiAgICAgIHdpZHRoOiBgJHt3aWR0aHNbZ3JvdXBdfXB4YFxuICAgIH07XG5cbiAgICBpZiAoZ3JvdXAgPT09ICdjZW50ZXInKSB7XG4gICAgICB0cmFuc2xhdGVYWShzdHlsZXMsIG9mZnNldFggKiAtMSwgMCk7XG4gICAgfSBlbHNlIGlmIChncm91cCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29uc3QgdG90YWxEaWZmID0gd2lkdGhzLnRvdGFsIC0gdGhpcy5pbm5lcldpZHRoO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gdG90YWxEaWZmICogLTE7XG4gICAgICB0cmFuc2xhdGVYWShzdHlsZXMsIG9mZnNldCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { Directive } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DatatableRowDetailTemplateDirective {
4
+ constructor(template) {
5
+ this.template = template;
6
+ }
7
+ }
8
+ DatatableRowDetailTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableRowDetailTemplateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
9
+ DatatableRowDetailTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DatatableRowDetailTemplateDirective, selector: "[ngx-datatable-row-detail-template]", ngImport: i0 });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableRowDetailTemplateDirective, decorators: [{
11
+ type: Directive,
12
+ args: [{
13
+ selector: '[ngx-datatable-row-detail-template]'
14
+ }]
15
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWRldGFpbC10ZW1wbGF0ZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy9yb3ctZGV0YWlsL3Jvdy1kZXRhaWwtdGVtcGxhdGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWUsTUFBTSxlQUFlLENBQUM7O0FBS3ZELE1BQU0sT0FBTyxtQ0FBbUM7SUFDOUMsWUFBbUIsUUFBMEI7UUFBMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFBRyxDQUFDOztnSUFEdEMsbUNBQW1DO29IQUFuQyxtQ0FBbUM7MkZBQW5DLG1DQUFtQztrQkFIL0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUNBQXFDO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW25neC1kYXRhdGFibGUtcm93LWRldGFpbC10ZW1wbGF0ZV0nXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZVJvd0RldGFpbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuIl19
@@ -0,0 +1,63 @@
1
+ import { Input, Output, EventEmitter, Directive, TemplateRef, ContentChild } from '@angular/core';
2
+ import { DatatableRowDetailTemplateDirective } from './row-detail-template.directive';
3
+ import * as i0 from "@angular/core";
4
+ export class DatatableRowDetailDirective {
5
+ constructor() {
6
+ /**
7
+ * The detail row height is required especially
8
+ * when virtual scroll is enabled.
9
+ */
10
+ this.rowHeight = 0;
11
+ /**
12
+ * Row detail row visbility was toggled.
13
+ */
14
+ this.toggle = new EventEmitter();
15
+ }
16
+ get template() {
17
+ return this._templateInput || this._templateQuery;
18
+ }
19
+ /**
20
+ * Toggle the expansion of the row
21
+ */
22
+ toggleExpandRow(row) {
23
+ this.toggle.emit({
24
+ type: 'row',
25
+ value: row
26
+ });
27
+ }
28
+ /**
29
+ * API method to expand all the rows.
30
+ */
31
+ expandAllRows() {
32
+ this.toggle.emit({
33
+ type: 'all',
34
+ value: true
35
+ });
36
+ }
37
+ /**
38
+ * API method to collapse all the rows.
39
+ */
40
+ collapseAllRows() {
41
+ this.toggle.emit({
42
+ type: 'all',
43
+ value: false
44
+ });
45
+ }
46
+ }
47
+ DatatableRowDetailDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableRowDetailDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
48
+ DatatableRowDetailDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: { rowHeight: "rowHeight", _templateInput: ["template", "_templateInput"] }, outputs: { toggle: "toggle" }, queries: [{ propertyName: "_templateQuery", first: true, predicate: DatatableRowDetailTemplateDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0 });
49
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableRowDetailDirective, decorators: [{
50
+ type: Directive,
51
+ args: [{ selector: 'ngx-datatable-row-detail' }]
52
+ }], propDecorators: { rowHeight: [{
53
+ type: Input
54
+ }], _templateInput: [{
55
+ type: Input,
56
+ args: ['template']
57
+ }], _templateQuery: [{
58
+ type: ContentChild,
59
+ args: [DatatableRowDetailTemplateDirective, { read: TemplateRef, static: true }]
60
+ }], toggle: [{
61
+ type: Output
62
+ }] } });
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWRldGFpbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy9yb3ctZGV0YWlsL3Jvdy1kZXRhaWwuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHdEYsTUFBTSxPQUFPLDJCQUEyQjtJQUR4QztRQUVFOzs7V0FHRztRQUNNLGNBQVMsR0FBcUQsQ0FBQyxDQUFDO1FBWXpFOztXQUVHO1FBQ08sV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0tBK0IxRDtJQXRDQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUNwRCxDQUFDO0lBT0Q7O09BRUc7SUFDSCxlQUFlLENBQUMsR0FBUTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsSUFBSSxFQUFFLEtBQUs7WUFDWCxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7O3dIQWxEVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwrTkFVeEIsbUNBQW1DLDJCQUFVLFdBQVc7MkZBVjNELDJCQUEyQjtrQkFEdkMsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSwwQkFBMEIsRUFBRTs4QkFNeEMsU0FBUztzQkFBakIsS0FBSztnQkFHTixjQUFjO3NCQURiLEtBQUs7dUJBQUMsVUFBVTtnQkFJakIsY0FBYztzQkFEYixZQUFZO3VCQUFDLG1DQUFtQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVU1RSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93RGV0YWlsVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy1kZXRhaWwtdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmd4LWRhdGF0YWJsZS1yb3ctZGV0YWlsJyB9KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGV0YWlsIHJvdyBoZWlnaHQgaXMgcmVxdWlyZWQgZXNwZWNpYWxseVxuICAgKiB3aGVuIHZpcnR1YWwgc2Nyb2xsIGlzIGVuYWJsZWQuXG4gICAqL1xuICBASW5wdXQoKSByb3dIZWlnaHQ6IG51bWJlciB8ICgocm93PzogYW55LCBpbmRleD86IG51bWJlcikgPT4gbnVtYmVyKSA9IDA7XG5cbiAgQElucHV0KCd0ZW1wbGF0ZScpXG4gIF90ZW1wbGF0ZUlucHV0OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93RGV0YWlsVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBfdGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlSW5wdXQgfHwgdGhpcy5fdGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3cgZGV0YWlsIHJvdyB2aXNiaWxpdHkgd2FzIHRvZ2dsZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBleHBhbnNpb24gb2YgdGhlIHJvd1xuICAgKi9cbiAgdG9nZ2xlRXhwYW5kUm93KHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGUuZW1pdCh7XG4gICAgICB0eXBlOiAncm93JyxcbiAgICAgIHZhbHVlOiByb3dcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBUEkgbWV0aG9kIHRvIGV4cGFuZCBhbGwgdGhlIHJvd3MuXG4gICAqL1xuICBleHBhbmRBbGxSb3dzKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlLmVtaXQoe1xuICAgICAgdHlwZTogJ2FsbCcsXG4gICAgICB2YWx1ZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFQSSBtZXRob2QgdG8gY29sbGFwc2UgYWxsIHRoZSByb3dzLlxuICAgKi9cbiAgY29sbGFwc2VBbGxSb3dzKCk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlLmVtaXQoe1xuICAgICAgdHlwZTogJ2FsbCcsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,108 @@
1
+ import { Directive, Input, Output, EventEmitter } from '@angular/core';
2
+ import { fromEvent } from 'rxjs';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Draggable Directive for Angular2
7
+ *
8
+ * Inspiration:
9
+ * https://github.com/AngularClass/angular2-examples/blob/master/rx-draggable/directives/draggable.ts
10
+ * http://stackoverflow.com/questions/35662530/how-to-implement-drag-and-drop-in-angular2
11
+ *
12
+ */
13
+ export class DraggableDirective {
14
+ constructor(element) {
15
+ this.dragX = true;
16
+ this.dragY = true;
17
+ this.dragStart = new EventEmitter();
18
+ this.dragging = new EventEmitter();
19
+ this.dragEnd = new EventEmitter();
20
+ this.isDragging = false;
21
+ this.element = element.nativeElement;
22
+ }
23
+ ngOnChanges(changes) {
24
+ if (changes['dragEventTarget'] && changes['dragEventTarget'].currentValue && this.dragModel.dragging) {
25
+ this.onMousedown(changes['dragEventTarget'].currentValue);
26
+ }
27
+ }
28
+ ngOnDestroy() {
29
+ this._destroySubscription();
30
+ }
31
+ onMouseup(event) {
32
+ if (!this.isDragging)
33
+ return;
34
+ this.isDragging = false;
35
+ this.element.classList.remove('dragging');
36
+ if (this.subscription) {
37
+ this._destroySubscription();
38
+ this.dragEnd.emit({
39
+ event,
40
+ element: this.element,
41
+ model: this.dragModel
42
+ });
43
+ }
44
+ }
45
+ onMousedown(event) {
46
+ // we only want to drag the inner header text
47
+ const isDragElm = event.target.classList.contains('draggable');
48
+ if (isDragElm && (this.dragX || this.dragY)) {
49
+ event.preventDefault();
50
+ this.isDragging = true;
51
+ const mouseDownPos = { x: event.clientX, y: event.clientY };
52
+ const mouseup = fromEvent(document, 'mouseup');
53
+ this.subscription = mouseup.subscribe((ev) => this.onMouseup(ev));
54
+ const mouseMoveSub = fromEvent(document, 'mousemove')
55
+ .pipe(takeUntil(mouseup))
56
+ .subscribe((ev) => this.move(ev, mouseDownPos));
57
+ this.subscription.add(mouseMoveSub);
58
+ this.dragStart.emit({
59
+ event,
60
+ element: this.element,
61
+ model: this.dragModel
62
+ });
63
+ }
64
+ }
65
+ move(event, mouseDownPos) {
66
+ if (!this.isDragging)
67
+ return;
68
+ const x = event.clientX - mouseDownPos.x;
69
+ const y = event.clientY - mouseDownPos.y;
70
+ if (this.dragX)
71
+ this.element.style.left = `${x}px`;
72
+ if (this.dragY)
73
+ this.element.style.top = `${y}px`;
74
+ this.element.classList.add('dragging');
75
+ this.dragging.emit({
76
+ event,
77
+ element: this.element,
78
+ model: this.dragModel
79
+ });
80
+ }
81
+ _destroySubscription() {
82
+ if (this.subscription) {
83
+ this.subscription.unsubscribe();
84
+ this.subscription = undefined;
85
+ }
86
+ }
87
+ }
88
+ DraggableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DraggableDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
89
+ DraggableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DraggableDirective, selector: "[draggable]", inputs: { dragEventTarget: "dragEventTarget", dragModel: "dragModel", dragX: "dragX", dragY: "dragY" }, outputs: { dragStart: "dragStart", dragging: "dragging", dragEnd: "dragEnd" }, usesOnChanges: true, ngImport: i0 });
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DraggableDirective, decorators: [{
91
+ type: Directive,
92
+ args: [{ selector: '[draggable]' }]
93
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { dragEventTarget: [{
94
+ type: Input
95
+ }], dragModel: [{
96
+ type: Input
97
+ }], dragX: [{
98
+ type: Input
99
+ }], dragY: [{
100
+ type: Input
101
+ }], dragStart: [{
102
+ type: Output
103
+ }], dragging: [{
104
+ type: Output
105
+ }], dragEnd: [{
106
+ type: Output
107
+ }] } });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N3aW1sYW5lL25neC1kYXRhdGFibGUvc3JjL2xpYi9kaXJlY3RpdmVzL2RyYWdnYWJsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUUzQzs7Ozs7OztHQU9HO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUFZLE9BQW1CO1FBWHRCLFVBQUssR0FBWSxJQUFJLENBQUM7UUFDdEIsVUFBSyxHQUFZLElBQUksQ0FBQztRQUVyQixjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUcxRCxlQUFVLEdBQVksS0FBSyxDQUFDO1FBSTFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3BHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFD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QUMsU0FBUztTQUN0QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1NBQy9CO0lBQ0gsQ0FBQzs7K0dBOUZVLGtCQUFrQjttR0FBbEIsa0JBQWtCOzJGQUFsQixrQkFBa0I7a0JBRDlCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO2lHQUUzQixlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBEcmFnZ2FibGUgRGlyZWN0aXZlIGZvciBBbmd1bGFyMlxuICpcbiAqIEluc3BpcmF0aW9uOlxuICogICBodHRwczovL2dpdGh1Yi5jb20vQW5ndWxhckNsYXNzL2FuZ3VsYXIyLWV4YW1wbGVzL2Jsb2IvbWFzdGVyL3J4LWRyYWdnYWJsZS9kaXJlY3RpdmVzL2RyYWdnYWJsZS50c1xuICogICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjYyNTMwL2hvdy10by1pbXBsZW1lbnQtZHJhZy1hbmQtZHJvcC1pbi1hbmd1bGFyMlxuICpcbiAqL1xuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2RyYWdnYWJsZV0nIH0pXG5leHBvcnQgY2xhc3MgRHJhZ2dhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkcmFnRXZlbnRUYXJnZXQ6IGFueTtcbiAgQElucHV0KCkgZHJhZ01vZGVsOiBhbnk7XG4gIEBJbnB1dCgpIGRyYWdYOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJhZ1k6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBkcmFnU3RhcnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJhZ2dpbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJhZ0VuZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGlzRHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZHJhZ0V2ZW50VGFyZ2V0J10gJiYgY2hhbmdlc1snZHJhZ0V2ZW50VGFyZ2V0J10uY3VycmVudFZhbHVlICYmIHRoaXMuZHJhZ01vZGVsLmRyYWdnaW5nKSB7XG4gICAgICB0aGlzLm9uTW91c2Vkb3duKGNoYW5nZXNbJ2RyYWdFdmVudFRhcmdldCddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGVzdHJveVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgb25Nb3VzZXVwKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZycpO1xuXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9kZXN0cm95U3Vic2NyaXB0aW9uKCk7XG4gICAgICB0aGlzLmRyYWdFbmQuZW1pdCh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG1vZGVsOiB0aGlzLmRyYWdNb2RlbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gZHJhZyB0aGUgaW5uZXIgaGVhZGVyIHRleHRcbiAgICBjb25zdCBpc0RyYWdFbG0gPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdkcmFnZ2FibGUnKTtcblxuICAgIGlmIChpc0RyYWdFbG0gJiYgKHRoaXMuZHJhZ1ggfHwgdGhpcy5kcmFnWSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICBjb25zdCBtb3VzZURvd25Qb3MgPSB7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFkgfTtcblxuICAgICAgY29uc3QgbW91c2V1cCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbW91c2V1cC5zdWJzY3JpYmUoKGV2OiBNb3VzZUV2ZW50KSA9PiB0aGlzLm9uTW91c2V1cChldikpO1xuXG4gICAgICBjb25zdCBtb3VzZU1vdmVTdWIgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZW1vdmUnKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwobW91c2V1cCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2OiBNb3VzZUV2ZW50KSA9PiB0aGlzLm1vdmUoZXYsIG1vdXNlRG93blBvcykpO1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQobW91c2VNb3ZlU3ViKTtcblxuICAgICAgdGhpcy5kcmFnU3RhcnQuZW1pdCh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICBlbGVtZW50OiB0aGlzLmVsZW1lbnQsXG4gICAgICAgIG1vZGVsOiB0aGlzLmRyYWdNb2RlbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbW92ZShldmVudDogTW91c2VFdmVudCwgbW91c2VEb3duUG9zOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykgcmV0dXJuO1xuXG4gICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSBtb3VzZURvd25Qb3MueDtcbiAgICBjb25zdCB5ID0gZXZlbnQuY2xpZW50WSAtIG1vdXNlRG93blBvcy55O1xuXG4gICAgaWYgKHRoaXMuZHJhZ1gpIHRoaXMuZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgaWYgKHRoaXMuZHJhZ1kpIHRoaXMuZWxlbWVudC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblxuICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycpO1xuXG4gICAgdGhpcy5kcmFnZ2luZy5lbWl0KHtcbiAgICAgIGV2ZW50LFxuICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgbW9kZWw6IHRoaXMuZHJhZ01vZGVsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19