primeng 11.1.0 → 11.2.3

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 (234) hide show
  1. package/README.md +1 -0
  2. package/api/confirmaeventtype.d.ts +5 -0
  3. package/api/filtermatchmode.d.ts +4 -0
  4. package/api/filterservice.d.ts +4 -0
  5. package/api/primeng-api.metadata.json +1 -1
  6. package/api/public_api.d.ts +1 -0
  7. package/api/translation.d.ts +4 -0
  8. package/autocomplete/autocomplete.d.ts +8 -1
  9. package/autocomplete/primeng-autocomplete.metadata.json +1 -1
  10. package/avatar/primeng-avatar.metadata.json +1 -1
  11. package/bundles/primeng-api.umd.js +56 -6
  12. package/bundles/primeng-api.umd.js.map +1 -1
  13. package/bundles/primeng-api.umd.min.js +1 -1
  14. package/bundles/primeng-api.umd.min.js.map +1 -1
  15. package/bundles/primeng-autocomplete.umd.js +86 -17
  16. package/bundles/primeng-autocomplete.umd.js.map +1 -1
  17. package/bundles/primeng-autocomplete.umd.min.js +1 -1
  18. package/bundles/primeng-autocomplete.umd.min.js.map +1 -1
  19. package/bundles/primeng-avatar.umd.js +1 -1
  20. package/bundles/primeng-avatar.umd.min.js +1 -1
  21. package/bundles/primeng-avatar.umd.min.js.map +1 -1
  22. package/bundles/primeng-calendar.umd.js +6 -0
  23. package/bundles/primeng-calendar.umd.js.map +1 -1
  24. package/bundles/primeng-calendar.umd.min.js +1 -1
  25. package/bundles/primeng-calendar.umd.min.js.map +1 -1
  26. package/bundles/primeng-cascadeselect.umd.js +8 -5
  27. package/bundles/primeng-cascadeselect.umd.js.map +1 -1
  28. package/bundles/primeng-cascadeselect.umd.min.js +2 -2
  29. package/bundles/primeng-cascadeselect.umd.min.js.map +1 -1
  30. package/bundles/primeng-colorpicker.umd.js.map +1 -1
  31. package/bundles/primeng-colorpicker.umd.min.js.map +1 -1
  32. package/bundles/primeng-confirmdialog.umd.js +11 -8
  33. package/bundles/primeng-confirmdialog.umd.js.map +1 -1
  34. package/bundles/primeng-confirmdialog.umd.min.js +1 -1
  35. package/bundles/primeng-confirmdialog.umd.min.js.map +1 -1
  36. package/bundles/primeng-contextmenu.umd.js +2 -2
  37. package/bundles/primeng-contextmenu.umd.js.map +1 -1
  38. package/bundles/primeng-contextmenu.umd.min.js +1 -1
  39. package/bundles/primeng-contextmenu.umd.min.js.map +1 -1
  40. package/bundles/primeng-dialog.umd.js +1 -1
  41. package/bundles/primeng-dialog.umd.min.js +1 -1
  42. package/bundles/primeng-dialog.umd.min.js.map +1 -1
  43. package/bundles/primeng-dom.umd.js +3 -0
  44. package/bundles/primeng-dom.umd.js.map +1 -1
  45. package/bundles/primeng-dom.umd.min.js +1 -1
  46. package/bundles/primeng-dom.umd.min.js.map +1 -1
  47. package/bundles/primeng-dropdown.umd.js +1 -1
  48. package/bundles/primeng-dropdown.umd.js.map +1 -1
  49. package/bundles/primeng-dropdown.umd.min.js +1 -1
  50. package/bundles/primeng-dropdown.umd.min.js.map +1 -1
  51. package/bundles/primeng-dynamicdialog.umd.js +1 -1
  52. package/bundles/primeng-dynamicdialog.umd.min.js +1 -1
  53. package/bundles/primeng-dynamicdialog.umd.min.js.map +1 -1
  54. package/bundles/primeng-inputmask.umd.js +5 -2
  55. package/bundles/primeng-inputmask.umd.js.map +1 -1
  56. package/bundles/primeng-inputmask.umd.min.js +1 -1
  57. package/bundles/primeng-inputmask.umd.min.js.map +1 -1
  58. package/bundles/primeng-inputnumber.umd.js +16 -2
  59. package/bundles/primeng-inputnumber.umd.js.map +1 -1
  60. package/bundles/primeng-inputnumber.umd.min.js +1 -1
  61. package/bundles/primeng-inputnumber.umd.min.js.map +1 -1
  62. package/bundles/primeng-knob.umd.js +1 -1
  63. package/bundles/primeng-knob.umd.js.map +1 -1
  64. package/bundles/primeng-knob.umd.min.js +1 -1
  65. package/bundles/primeng-knob.umd.min.js.map +1 -1
  66. package/bundles/primeng-lightbox.umd.js +1 -1
  67. package/bundles/primeng-lightbox.umd.min.js +1 -1
  68. package/bundles/primeng-lightbox.umd.min.js.map +1 -1
  69. package/bundles/primeng-listbox.umd.js +133 -34
  70. package/bundles/primeng-listbox.umd.js.map +1 -1
  71. package/bundles/primeng-listbox.umd.min.js +1 -1
  72. package/bundles/primeng-listbox.umd.min.js.map +1 -1
  73. package/bundles/primeng-multiselect.umd.js +146 -32
  74. package/bundles/primeng-multiselect.umd.js.map +1 -1
  75. package/bundles/primeng-multiselect.umd.min.js +2 -2
  76. package/bundles/primeng-multiselect.umd.min.js.map +1 -1
  77. package/bundles/primeng-sidebar.umd.js.map +1 -1
  78. package/bundles/primeng-sidebar.umd.min.js.map +1 -1
  79. package/bundles/primeng-slider.umd.js +1 -0
  80. package/bundles/primeng-slider.umd.js.map +1 -1
  81. package/bundles/primeng-slider.umd.min.js +1 -1
  82. package/bundles/primeng-slider.umd.min.js.map +1 -1
  83. package/bundles/primeng-table.umd.js +117 -16
  84. package/bundles/primeng-table.umd.js.map +1 -1
  85. package/bundles/primeng-table.umd.min.js +1 -1
  86. package/bundles/primeng-table.umd.min.js.map +1 -1
  87. package/bundles/primeng-tabview.umd.js +25 -3
  88. package/bundles/primeng-tabview.umd.js.map +1 -1
  89. package/bundles/primeng-tabview.umd.min.js +1 -1
  90. package/bundles/primeng-tabview.umd.min.js.map +1 -1
  91. package/bundles/primeng-treetable.umd.js +1 -1
  92. package/bundles/primeng-treetable.umd.js.map +1 -1
  93. package/bundles/primeng-treetable.umd.min.js +1 -1
  94. package/bundles/primeng-treetable.umd.min.js.map +1 -1
  95. package/bundles/primeng-virtualscroller.umd.js +3 -2
  96. package/bundles/primeng-virtualscroller.umd.js.map +1 -1
  97. package/bundles/primeng-virtualscroller.umd.min.js +1 -1
  98. package/bundles/primeng-virtualscroller.umd.min.js.map +1 -1
  99. package/calendar/primeng-calendar.metadata.json +1 -1
  100. package/cascadeselect/cascadeselect.d.ts +3 -3
  101. package/cascadeselect/primeng-cascadeselect.metadata.json +1 -1
  102. package/colorpicker/colorpicker.d.ts +1 -1
  103. package/confirmdialog/confirmdialog.d.ts +3 -2
  104. package/confirmdialog/primeng-confirmdialog.metadata.json +1 -1
  105. package/dialog/primeng-dialog.metadata.json +1 -1
  106. package/dom/primeng-dom.metadata.json +1 -1
  107. package/dropdown/primeng-dropdown.metadata.json +1 -1
  108. package/dynamicdialog/primeng-dynamicdialog.metadata.json +1 -1
  109. package/esm2015/api/confirmaeventtype.js +7 -0
  110. package/esm2015/api/filtermatchmode.js +5 -1
  111. package/esm2015/api/filterservice.js +39 -3
  112. package/esm2015/api/primengconfig.js +9 -5
  113. package/esm2015/api/public_api.js +2 -1
  114. package/esm2015/api/translation.js +1 -1
  115. package/esm2015/autocomplete/autocomplete.js +105 -22
  116. package/esm2015/avatar/avatar.js +1 -1
  117. package/esm2015/calendar/calendar.js +7 -1
  118. package/esm2015/cascadeselect/cascadeselect.js +9 -6
  119. package/esm2015/colorpicker/colorpicker.js +1 -1
  120. package/esm2015/confirmdialog/confirmdialog.js +14 -11
  121. package/esm2015/contextmenu/contextmenu.js +3 -3
  122. package/esm2015/dialog/dialog.js +1 -1
  123. package/esm2015/dom/domhandler.js +4 -1
  124. package/esm2015/dropdown/dropdown.js +2 -2
  125. package/esm2015/dynamicdialog/dynamicdialog.js +1 -1
  126. package/esm2015/inputmask/inputmask.js +6 -3
  127. package/esm2015/inputnumber/inputnumber.js +13 -3
  128. package/esm2015/knob/knob.js +2 -2
  129. package/esm2015/lightbox/lightbox.js +1 -1
  130. package/esm2015/listbox/listbox.js +134 -42
  131. package/esm2015/multiselect/multiselect.js +149 -42
  132. package/esm2015/sidebar/sidebar.js +1 -1
  133. package/esm2015/slider/slider.js +2 -1
  134. package/esm2015/table/table.js +127 -17
  135. package/esm2015/tabview/tabview.js +18 -4
  136. package/esm2015/treetable/treetable.js +2 -2
  137. package/esm2015/virtualscroller/virtualscroller.js +4 -3
  138. package/fesm2015/primeng-api.js +58 -7
  139. package/fesm2015/primeng-api.js.map +1 -1
  140. package/fesm2015/primeng-autocomplete.js +104 -21
  141. package/fesm2015/primeng-autocomplete.js.map +1 -1
  142. package/fesm2015/primeng-avatar.js +1 -1
  143. package/fesm2015/primeng-calendar.js +6 -0
  144. package/fesm2015/primeng-calendar.js.map +1 -1
  145. package/fesm2015/primeng-cascadeselect.js +8 -5
  146. package/fesm2015/primeng-cascadeselect.js.map +1 -1
  147. package/fesm2015/primeng-colorpicker.js.map +1 -1
  148. package/fesm2015/primeng-confirmdialog.js +13 -10
  149. package/fesm2015/primeng-confirmdialog.js.map +1 -1
  150. package/fesm2015/primeng-contextmenu.js +2 -2
  151. package/fesm2015/primeng-contextmenu.js.map +1 -1
  152. package/fesm2015/primeng-dialog.js +1 -1
  153. package/fesm2015/primeng-dom.js +3 -0
  154. package/fesm2015/primeng-dom.js.map +1 -1
  155. package/fesm2015/primeng-dropdown.js +1 -1
  156. package/fesm2015/primeng-dropdown.js.map +1 -1
  157. package/fesm2015/primeng-dynamicdialog.js +1 -1
  158. package/fesm2015/primeng-inputmask.js +5 -2
  159. package/fesm2015/primeng-inputmask.js.map +1 -1
  160. package/fesm2015/primeng-inputnumber.js +12 -2
  161. package/fesm2015/primeng-inputnumber.js.map +1 -1
  162. package/fesm2015/primeng-knob.js +1 -1
  163. package/fesm2015/primeng-knob.js.map +1 -1
  164. package/fesm2015/primeng-lightbox.js +1 -1
  165. package/fesm2015/primeng-listbox.js +133 -41
  166. package/fesm2015/primeng-listbox.js.map +1 -1
  167. package/fesm2015/primeng-multiselect.js +148 -41
  168. package/fesm2015/primeng-multiselect.js.map +1 -1
  169. package/fesm2015/primeng-sidebar.js.map +1 -1
  170. package/fesm2015/primeng-slider.js +1 -0
  171. package/fesm2015/primeng-slider.js.map +1 -1
  172. package/fesm2015/primeng-table.js +126 -16
  173. package/fesm2015/primeng-table.js.map +1 -1
  174. package/fesm2015/primeng-tabview.js +17 -3
  175. package/fesm2015/primeng-tabview.js.map +1 -1
  176. package/fesm2015/primeng-treetable.js +1 -1
  177. package/fesm2015/primeng-treetable.js.map +1 -1
  178. package/fesm2015/primeng-virtualscroller.js +3 -2
  179. package/fesm2015/primeng-virtualscroller.js.map +1 -1
  180. package/inputmask/inputmask.d.ts +2 -1
  181. package/inputmask/primeng-inputmask.metadata.json +1 -1
  182. package/inputnumber/inputnumber.d.ts +3 -1
  183. package/inputnumber/primeng-inputnumber.metadata.json +1 -1
  184. package/knob/primeng-knob.metadata.json +1 -1
  185. package/lightbox/primeng-lightbox.metadata.json +1 -1
  186. package/listbox/listbox.d.ts +7 -1
  187. package/listbox/primeng-listbox.metadata.json +1 -1
  188. package/multiselect/multiselect.d.ts +8 -1
  189. package/multiselect/primeng-multiselect.metadata.json +1 -1
  190. package/package.json +1 -1
  191. package/resources/components/avatar/avatar.css +3 -2
  192. package/resources/components/dialog/dialog.css +2 -0
  193. package/resources/components/virtualscroller/virtualscroller.css +2 -16
  194. package/resources/themes/arya-blue/theme.css +26 -38
  195. package/resources/themes/arya-green/theme.css +26 -38
  196. package/resources/themes/arya-orange/theme.css +26 -38
  197. package/resources/themes/arya-purple/theme.css +26 -38
  198. package/resources/themes/bootstrap4-dark-blue/theme.css +26 -38
  199. package/resources/themes/bootstrap4-dark-purple/theme.css +26 -38
  200. package/resources/themes/bootstrap4-light-blue/theme.css +26 -38
  201. package/resources/themes/bootstrap4-light-purple/theme.css +26 -38
  202. package/resources/themes/fluent-light/theme.css +26 -38
  203. package/resources/themes/luna-amber/theme.css +26 -38
  204. package/resources/themes/luna-blue/theme.css +26 -38
  205. package/resources/themes/luna-green/theme.css +26 -38
  206. package/resources/themes/luna-pink/theme.css +26 -38
  207. package/resources/themes/md-dark-deeppurple/theme.css +89 -69
  208. package/resources/themes/md-dark-indigo/theme.css +89 -69
  209. package/resources/themes/md-light-deeppurple/theme.css +293 -273
  210. package/resources/themes/md-light-indigo/theme.css +293 -273
  211. package/resources/themes/mdc-dark-deeppurple/theme.css +89 -69
  212. package/resources/themes/mdc-dark-indigo/theme.css +89 -69
  213. package/resources/themes/mdc-light-deeppurple/theme.css +293 -273
  214. package/resources/themes/mdc-light-indigo/theme.css +293 -273
  215. package/resources/themes/nova/theme.css +26 -38
  216. package/resources/themes/nova-accent/theme.css +26 -38
  217. package/resources/themes/nova-alt/theme.css +26 -38
  218. package/resources/themes/rhea/theme.css +26 -38
  219. package/resources/themes/saga-blue/theme.css +26 -38
  220. package/resources/themes/saga-green/theme.css +26 -38
  221. package/resources/themes/saga-orange/theme.css +26 -38
  222. package/resources/themes/saga-purple/theme.css +26 -38
  223. package/resources/themes/vela-blue/theme.css +26 -38
  224. package/resources/themes/vela-green/theme.css +26 -38
  225. package/resources/themes/vela-orange/theme.css +26 -38
  226. package/resources/themes/vela-purple/theme.css +26 -38
  227. package/sidebar/sidebar.d.ts +1 -1
  228. package/slider/primeng-slider.metadata.json +1 -1
  229. package/table/primeng-table.metadata.json +1 -1
  230. package/table/table.d.ts +12 -0
  231. package/tabview/primeng-tabview.metadata.json +1 -1
  232. package/tabview/tabview.d.ts +6 -2
  233. package/treetable/primeng-treetable.metadata.json +1 -1
  234. package/virtualscroller/primeng-virtualscroller.metadata.json +1 -1
@@ -321,12 +321,14 @@
321
321
  this.valueSource = new rxjs.Subject();
322
322
  this.totalRecordsSource = new rxjs.Subject();
323
323
  this.columnsSource = new rxjs.Subject();
324
+ this.resetSource = new rxjs.Subject();
324
325
  this.sortSource$ = this.sortSource.asObservable();
325
326
  this.selectionSource$ = this.selectionSource.asObservable();
326
327
  this.contextMenuSource$ = this.contextMenuSource.asObservable();
327
328
  this.valueSource$ = this.valueSource.asObservable();
328
329
  this.totalRecordsSource$ = this.totalRecordsSource.asObservable();
329
330
  this.columnsSource$ = this.columnsSource.asObservable();
331
+ this.resetSource$ = this.resetSource.asObservable();
330
332
  }
331
333
  TableService.prototype.onSort = function (sortMeta) {
332
334
  this.sortSource.next(sortMeta);
@@ -334,6 +336,9 @@
334
336
  TableService.prototype.onSelectionChange = function () {
335
337
  this.selectionSource.next();
336
338
  };
339
+ TableService.prototype.onResetChange = function () {
340
+ this.resetSource.next();
341
+ };
337
342
  TableService.prototype.onContextMenu = function (data) {
338
343
  this.contextMenuSource.next(data);
339
344
  };
@@ -470,6 +475,9 @@
470
475
  case 'frozencolgroup':
471
476
  _this.frozenColGroupTemplate = item.template;
472
477
  break;
478
+ case 'frozenrowexpansion':
479
+ _this.frozenExpandedRowTemplate = item.template;
480
+ break;
473
481
  case 'emptymessage':
474
482
  _this.emptyMessageTemplate = item.template;
475
483
  break;
@@ -534,7 +542,7 @@
534
542
  }
535
543
  if (simpleChange.multiSortMeta) {
536
544
  this._multiSortMeta = simpleChange.multiSortMeta.currentValue;
537
- if (this.sortMode === 'multiple') {
545
+ if (this.sortMode === 'multiple' && (this.initialized || (!this.lazy && !this.virtualScroll))) {
538
546
  this.sortMultiple();
539
547
  }
540
548
  }
@@ -688,7 +696,6 @@
688
696
  if (this.sortMode === 'single') {
689
697
  this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;
690
698
  this._sortField = event.field;
691
- this.sortSingle();
692
699
  if (this.resetPageOnSort) {
693
700
  this._first = 0;
694
701
  this.firstChange.emit(this._first);
@@ -696,6 +703,7 @@
696
703
  this.resetScrollTop();
697
704
  }
698
705
  }
706
+ this.sortSingle();
699
707
  }
700
708
  if (this.sortMode === 'multiple') {
701
709
  var metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
@@ -937,7 +945,7 @@
937
945
  this._selection = null;
938
946
  this.selectionKeys = {};
939
947
  this.selectionChange.emit(this.selection);
940
- this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });
948
+ this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
941
949
  }
942
950
  else {
943
951
  this._selection = rowData;
@@ -954,7 +962,7 @@
954
962
  var selectionIndex_2 = this.findIndexInSelection(rowData);
955
963
  this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_2; });
956
964
  this.selectionChange.emit(this.selection);
957
- this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });
965
+ this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });
958
966
  if (dataKeyValue) {
959
967
  delete this.selectionKeys[dataKeyValue];
960
968
  }
@@ -998,15 +1006,20 @@
998
1006
  if (this.isSingleSelectionMode()) {
999
1007
  this.selection = rowData;
1000
1008
  this.selectionChange.emit(rowData);
1009
+ if (dataKeyValue) {
1010
+ this.selectionKeys = {};
1011
+ this.selectionKeys[dataKeyValue] = 1;
1012
+ }
1001
1013
  }
1002
1014
  else if (this.isMultipleSelectionMode()) {
1003
- this.selection = [rowData];
1015
+ this._selection = this.selection ? __spread(this.selection, [rowData]) : [rowData];
1004
1016
  this.selectionChange.emit(this.selection);
1005
- }
1006
- if (dataKeyValue) {
1007
- this.selectionKeys[dataKeyValue] = 1;
1017
+ if (dataKeyValue) {
1018
+ this.selectionKeys[dataKeyValue] = 1;
1019
+ }
1008
1020
  }
1009
1021
  }
1022
+ this.tableService.onSelectionChange();
1010
1023
  this.contextMenu.show(event.originalEvent);
1011
1024
  this.onContextMenuSelect.emit({ originalEvent: event, data: rowData, index: event.rowIndex });
1012
1025
  }
@@ -1042,8 +1055,8 @@
1042
1055
  }
1043
1056
  }
1044
1057
  }
1045
- this.onRowSelect.emit({ originalEvent: event, data: rangeRowsData, type: 'row' });
1046
1058
  this.selectionChange.emit(this.selection);
1059
+ this.onRowSelect.emit({ originalEvent: event, data: rangeRowsData, type: 'row' });
1047
1060
  };
1048
1061
  Table.prototype.clearSelectionRange = function (event) {
1049
1062
  var rangeStart, rangeEnd;
@@ -1333,7 +1346,7 @@
1333
1346
  this._multiSortMeta = null;
1334
1347
  this.tableService.onSort(null);
1335
1348
  this.filteredValue = null;
1336
- this.filters = {};
1349
+ this.tableService.onResetChange();
1337
1350
  this.first = 0;
1338
1351
  this.firstChange.emit(this.first);
1339
1352
  if (this.lazy) {
@@ -2143,7 +2156,7 @@
2143
2156
  TableBody.decorators = [
2144
2157
  { type: core.Component, args: [{
2145
2158
  selector: '[pTableBody]',
2146
- template: "\n <ng-container *ngIf=\"!dt.expandedRowTemplate && !dt.virtualScroll\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!dt.expandedRowTemplate && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.expandedRowTemplate\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n ",
2159
+ template: "\n <ng-container *ngIf=\"!dt.expandedRowTemplate && !dt.virtualScroll\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!dt.expandedRowTemplate && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.expandedRowTemplate && !(frozen && dt.frozenExpandedRowTemplate)\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.frozenExpandedRowTemplate && frozen\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.frozenExpandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n ",
2147
2160
  changeDetection: core.ChangeDetectionStrategy.Default,
2148
2161
  encapsulation: core.ViewEncapsulation.None
2149
2162
  },] }
@@ -2526,6 +2539,11 @@
2526
2539
  rowIndex: this.index
2527
2540
  });
2528
2541
  };
2542
+ SelectableRow.prototype.onPageDownKeyDown = function () {
2543
+ if (this.dt.virtualScroll) {
2544
+ dom.DomHandler.findSingle(this.dt.scrollableViewChild.el.nativeElement, 'cdk-virtual-scroll-viewport').focus();
2545
+ }
2546
+ };
2529
2547
  SelectableRow.prototype.findNextSelectableRow = function (row) {
2530
2548
  var nextRow = row.nextElementSibling;
2531
2549
  if (nextRow) {
@@ -2582,7 +2600,8 @@
2582
2600
  onTouchEnd: [{ type: core.HostListener, args: ['touchend', ['$event'],] }],
2583
2601
  onArrowDownKeyDown: [{ type: core.HostListener, args: ['keydown.arrowdown', ['$event'],] }],
2584
2602
  onArrowUpKeyDown: [{ type: core.HostListener, args: ['keydown.arrowup', ['$event'],] }],
2585
- onEnterKeyDown: [{ type: core.HostListener, args: ['keydown.enter', ['$event'],] }, { type: core.HostListener, args: ['keydown.shift.enter', ['$event'],] }, { type: core.HostListener, args: ['keydown.meta.enter', ['$event'],] }]
2603
+ onEnterKeyDown: [{ type: core.HostListener, args: ['keydown.enter', ['$event'],] }, { type: core.HostListener, args: ['keydown.shift.enter', ['$event'],] }, { type: core.HostListener, args: ['keydown.meta.enter', ['$event'],] }],
2604
+ onPageDownKeyDown: [{ type: core.HostListener, args: ['keydown.pagedown', ['$event'],] }, { type: core.HostListener, args: ['keydown.pageup', ['$event'],] }, { type: core.HostListener, args: ['keydown.home', ['$event'],] }, { type: core.HostListener, args: ['keydown.end', ['$event'],] }, { type: core.HostListener, args: ['keydown.space', ['$event'],] }]
2586
2605
  };
2587
2606
  var SelectableRowDblClick = /** @class */ (function () {
2588
2607
  function SelectableRowDblClick(dt, tableService) {
@@ -2966,6 +2985,50 @@
2966
2985
  }
2967
2986
  }
2968
2987
  };
2988
+ EditableColumn.prototype.onArrowDown = function (event) {
2989
+ if (this.isEnabled()) {
2990
+ var currentCell = this.findCell(event.target);
2991
+ if (currentCell) {
2992
+ var cellIndex = dom.DomHandler.index(currentCell);
2993
+ var targetCell = this.findNextEditableColumnByIndex(currentCell, cellIndex);
2994
+ if (targetCell) {
2995
+ if (this.dt.isEditingCellValid()) {
2996
+ this.closeEditingCell(true, event);
2997
+ }
2998
+ dom.DomHandler.invokeElementMethod(event.target, 'blur');
2999
+ dom.DomHandler.invokeElementMethod(targetCell, 'click');
3000
+ }
3001
+ event.preventDefault();
3002
+ }
3003
+ }
3004
+ };
3005
+ EditableColumn.prototype.onArrowUp = function (event) {
3006
+ if (this.isEnabled()) {
3007
+ var currentCell = this.findCell(event.target);
3008
+ if (currentCell) {
3009
+ var cellIndex = dom.DomHandler.index(currentCell);
3010
+ var targetCell = this.findPrevEditableColumnByIndex(currentCell, cellIndex);
3011
+ if (targetCell) {
3012
+ if (this.dt.isEditingCellValid()) {
3013
+ this.closeEditingCell(true, event);
3014
+ }
3015
+ dom.DomHandler.invokeElementMethod(event.target, 'blur');
3016
+ dom.DomHandler.invokeElementMethod(targetCell, 'click');
3017
+ }
3018
+ event.preventDefault();
3019
+ }
3020
+ }
3021
+ };
3022
+ EditableColumn.prototype.onArrowLeft = function (event) {
3023
+ if (this.isEnabled()) {
3024
+ this.moveToPreviousCell(event);
3025
+ }
3026
+ };
3027
+ EditableColumn.prototype.onArrowRight = function (event) {
3028
+ if (this.isEnabled()) {
3029
+ this.moveToNextCell(event);
3030
+ }
3031
+ };
2969
3032
  EditableColumn.prototype.findCell = function (element) {
2970
3033
  if (element) {
2971
3034
  var cell = element;
@@ -3042,6 +3105,32 @@
3042
3105
  return null;
3043
3106
  }
3044
3107
  };
3108
+ EditableColumn.prototype.findNextEditableColumnByIndex = function (cell, index) {
3109
+ var nextRow = cell.parentElement.nextElementSibling;
3110
+ if (nextRow) {
3111
+ var nextCell = nextRow.children[index];
3112
+ if (nextCell && dom.DomHandler.hasClass(nextCell, 'p-editable-column')) {
3113
+ return nextCell;
3114
+ }
3115
+ return null;
3116
+ }
3117
+ else {
3118
+ return null;
3119
+ }
3120
+ };
3121
+ EditableColumn.prototype.findPrevEditableColumnByIndex = function (cell, index) {
3122
+ var prevRow = cell.parentElement.previousElementSibling;
3123
+ if (prevRow) {
3124
+ var prevCell = prevRow.children[index];
3125
+ if (prevCell && dom.DomHandler.hasClass(prevCell, 'p-editable-column')) {
3126
+ return prevCell;
3127
+ }
3128
+ return null;
3129
+ }
3130
+ else {
3131
+ return null;
3132
+ }
3133
+ };
3045
3134
  EditableColumn.prototype.isEnabled = function () {
3046
3135
  return this.pEditableColumnDisabled !== true;
3047
3136
  };
@@ -3066,7 +3155,11 @@
3066
3155
  onClick: [{ type: core.HostListener, args: ['click', ['$event'],] }],
3067
3156
  onEnterKeyDown: [{ type: core.HostListener, args: ['keydown.enter', ['$event'],] }],
3068
3157
  onEscapeKeyDown: [{ type: core.HostListener, args: ['keydown.escape', ['$event'],] }],
3069
- onShiftKeyDown: [{ type: core.HostListener, args: ['keydown.tab', ['$event'],] }, { type: core.HostListener, args: ['keydown.shift.tab', ['$event'],] }, { type: core.HostListener, args: ['keydown.meta.tab', ['$event'],] }]
3158
+ onShiftKeyDown: [{ type: core.HostListener, args: ['keydown.tab', ['$event'],] }, { type: core.HostListener, args: ['keydown.shift.tab', ['$event'],] }, { type: core.HostListener, args: ['keydown.meta.tab', ['$event'],] }],
3159
+ onArrowDown: [{ type: core.HostListener, args: ['keydown.arrowdown', ['$event'],] }],
3160
+ onArrowUp: [{ type: core.HostListener, args: ['keydown.arrowup', ['$event'],] }],
3161
+ onArrowLeft: [{ type: core.HostListener, args: ['keydown.arrowleft', ['$event'],] }],
3162
+ onArrowRight: [{ type: core.HostListener, args: ['keydown.arrowright', ['$event'],] }]
3070
3163
  };
3071
3164
  var EditableRow = /** @class */ (function () {
3072
3165
  function EditableRow(el) {
@@ -3565,7 +3658,7 @@
3565
3658
  ColumnFilterFormElement.decorators = [
3566
3659
  { type: core.Component, args: [{
3567
3660
  selector: 'p-columnFilterFormElement',
3568
- template: "\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n ",
3661
+ template: "\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\" [placeholder]=\"placeholder\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n ",
3569
3662
  encapsulation: core.ViewEncapsulation.None
3570
3663
  },] }
3571
3664
  ];
@@ -3615,6 +3708,9 @@
3615
3708
  _this.generateMatchModeOptions();
3616
3709
  _this.generateOperatorOptions();
3617
3710
  });
3711
+ this.resetSubscription = this.dt.tableService.resetSource$.subscribe(function () {
3712
+ _this.clearFilter();
3713
+ });
3618
3714
  this.generateMatchModeOptions();
3619
3715
  this.generateOperatorOptions();
3620
3716
  };
@@ -3704,8 +3800,10 @@
3704
3800
  this.dt._filter();
3705
3801
  };
3706
3802
  ColumnFilter.prototype.onOperatorChange = function (value) {
3803
+ var _this = this;
3707
3804
  this.dt.filters[this.field].forEach(function (filterMeta) {
3708
3805
  filterMeta.operator = value;
3806
+ _this.operator = value;
3709
3807
  });
3710
3808
  if (!this.showApplyButton) {
3711
3809
  this.dt._filter();
@@ -3779,7 +3877,7 @@
3779
3877
  else if (this.type === 'numeric')
3780
3878
  return api.FilterMatchMode.EQUALS;
3781
3879
  else if (this.type === 'date')
3782
- return api.FilterMatchMode.EQUALS;
3880
+ return api.FilterMatchMode.DATE_IS;
3783
3881
  else
3784
3882
  return api.FilterMatchMode.CONTAINS;
3785
3883
  }
@@ -3945,13 +4043,16 @@
3945
4043
  if (this.translationSubscription) {
3946
4044
  this.translationSubscription.unsubscribe();
3947
4045
  }
4046
+ if (this.resetSubscription) {
4047
+ this.resetSubscription.unsubscribe();
4048
+ }
3948
4049
  };
3949
4050
  return ColumnFilter;
3950
4051
  }());
3951
4052
  ColumnFilter.decorators = [
3952
4053
  { type: core.Component, args: [{
3953
4054
  selector: 'p-columnFilter',
3954
- template: "\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n ",
4055
+ template: "\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <div>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n ",
3955
4056
  animations: [
3956
4057
  animations.trigger('overlayAnimation', [
3957
4058
  animations.transition(':enter', [