primevue 3.7.0 → 3.8.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 (229) hide show
  1. package/autocomplete/AutoComplete.d.ts +1 -0
  2. package/autocomplete/AutoComplete.vue +8 -1
  3. package/autocomplete/autocomplete.cjs.js +8 -1
  4. package/autocomplete/autocomplete.cjs.min.js +1 -1
  5. package/autocomplete/autocomplete.esm.js +8 -1
  6. package/autocomplete/autocomplete.esm.min.js +1 -1
  7. package/autocomplete/autocomplete.js +8 -1
  8. package/autocomplete/autocomplete.min.js +1 -1
  9. package/blockui/BlockUI.vue +1 -1
  10. package/blockui/blockui.cjs.js +1 -1
  11. package/blockui/blockui.cjs.min.js +1 -1
  12. package/blockui/blockui.esm.js +1 -1
  13. package/blockui/blockui.esm.min.js +1 -1
  14. package/blockui/blockui.js +1 -1
  15. package/blockui/blockui.min.js +1 -1
  16. package/breadcrumb/Breadcrumb.vue +4 -0
  17. package/breadcrumb/breadcrumb.cjs.js +1 -1
  18. package/breadcrumb/breadcrumb.cjs.min.js +1 -1
  19. package/breadcrumb/breadcrumb.esm.js +1 -1
  20. package/breadcrumb/breadcrumb.esm.min.js +1 -1
  21. package/breadcrumb/breadcrumb.js +1 -1
  22. package/breadcrumb/breadcrumb.min.js +1 -1
  23. package/confirmationservice/ConfirmationService.d.ts +3 -2
  24. package/core/core.js +7574 -0
  25. package/core/core.min.js +47 -0
  26. package/datatable/BodyCell.vue +36 -17
  27. package/datatable/ColumnFilter.vue +3 -3
  28. package/datatable/DataTable.d.ts +1 -1
  29. package/datatable/DataTable.vue +109 -69
  30. package/datatable/FooterCell.vue +2 -2
  31. package/datatable/HeaderCell.vue +2 -2
  32. package/datatable/TableBody.vue +10 -5
  33. package/datatable/TableFooter.vue +2 -1
  34. package/datatable/TableHeader.vue +3 -2
  35. package/datatable/datatable.cjs.js +192 -122
  36. package/datatable/datatable.cjs.min.js +1 -1
  37. package/datatable/datatable.esm.js +192 -122
  38. package/datatable/datatable.esm.min.js +1 -1
  39. package/datatable/datatable.js +192 -122
  40. package/datatable/datatable.min.js +1 -1
  41. package/dock/Dock.d.ts +1 -0
  42. package/dock/Dock.vue +1 -1
  43. package/dock/DockSub.vue +13 -8
  44. package/dock/dock.cjs.js +24 -10
  45. package/dock/dock.cjs.min.js +1 -1
  46. package/dock/dock.esm.js +20 -10
  47. package/dock/dock.esm.min.js +1 -1
  48. package/dock/dock.js +25 -12
  49. package/dock/dock.min.js +1 -1
  50. package/dropdown/Dropdown.vue +9 -8
  51. package/dropdown/dropdown.cjs.js +13 -11
  52. package/dropdown/dropdown.cjs.min.js +1 -1
  53. package/dropdown/dropdown.esm.js +13 -11
  54. package/dropdown/dropdown.esm.min.js +1 -1
  55. package/dropdown/dropdown.js +13 -11
  56. package/dropdown/dropdown.min.js +1 -1
  57. package/galleria/Galleria.vue +1 -0
  58. package/galleria/GalleriaContent.vue +10 -1
  59. package/galleria/galleria.cjs.js +11 -2
  60. package/galleria/galleria.cjs.min.js +1 -1
  61. package/galleria/galleria.esm.js +11 -2
  62. package/galleria/galleria.esm.min.js +1 -1
  63. package/galleria/galleria.js +11 -2
  64. package/galleria/galleria.min.js +1 -1
  65. package/inplace/Inplace.d.ts +1 -0
  66. package/inplace/Inplace.vue +12 -1
  67. package/inplace/inplace.cjs.js +13 -2
  68. package/inplace/inplace.cjs.min.js +1 -1
  69. package/inplace/inplace.esm.js +13 -2
  70. package/inplace/inplace.esm.min.js +1 -1
  71. package/inplace/inplace.js +13 -2
  72. package/inplace/inplace.min.js +1 -1
  73. package/inputnumber/InputNumber.d.ts +2 -0
  74. package/inputnumber/InputNumber.vue +84 -35
  75. package/inputnumber/inputnumber.cjs.js +84 -35
  76. package/inputnumber/inputnumber.cjs.min.js +1 -1
  77. package/inputnumber/inputnumber.esm.js +84 -35
  78. package/inputnumber/inputnumber.esm.min.js +1 -1
  79. package/inputnumber/inputnumber.js +84 -35
  80. package/inputnumber/inputnumber.min.js +1 -1
  81. package/inputswitch/InputSwitch.vue +6 -3
  82. package/inputswitch/inputswitch.cjs.js +6 -3
  83. package/inputswitch/inputswitch.cjs.min.js +1 -1
  84. package/inputswitch/inputswitch.esm.js +6 -3
  85. package/inputswitch/inputswitch.esm.min.js +1 -1
  86. package/inputswitch/inputswitch.js +6 -3
  87. package/inputswitch/inputswitch.min.js +1 -1
  88. package/knob/Knob.vue +1 -1
  89. package/knob/knob.cjs.js +1 -1
  90. package/knob/knob.esm.js +1 -1
  91. package/knob/knob.js +1 -1
  92. package/overlaypanel/OverlayPanel.d.ts +2 -0
  93. package/overlaypanel/OverlayPanel.vue +4 -1
  94. package/overlaypanel/overlaypanel.cjs.js +7 -3
  95. package/overlaypanel/overlaypanel.cjs.min.js +1 -1
  96. package/overlaypanel/overlaypanel.esm.js +7 -3
  97. package/overlaypanel/overlaypanel.esm.min.js +1 -1
  98. package/overlaypanel/overlaypanel.js +7 -3
  99. package/overlaypanel/overlaypanel.min.js +1 -1
  100. package/package.json +1 -1
  101. package/paginator/CurrentPageReport.vue +5 -1
  102. package/paginator/JumpToPageInput.vue +1 -1
  103. package/paginator/Paginator.vue +6 -3
  104. package/paginator/paginator.cjs.js +12 -4
  105. package/paginator/paginator.cjs.min.js +1 -1
  106. package/paginator/paginator.esm.js +12 -4
  107. package/paginator/paginator.esm.min.js +1 -1
  108. package/paginator/paginator.js +12 -4
  109. package/paginator/paginator.min.js +1 -1
  110. package/panelmenu/PanelMenuSub.vue +4 -4
  111. package/panelmenu/panelmenu.cjs.js +4 -4
  112. package/panelmenu/panelmenu.cjs.min.js +1 -1
  113. package/panelmenu/panelmenu.esm.js +4 -4
  114. package/panelmenu/panelmenu.esm.min.js +1 -1
  115. package/panelmenu/panelmenu.js +4 -4
  116. package/panelmenu/panelmenu.min.js +1 -1
  117. package/resources/primevue.css +3 -0
  118. package/resources/primevue.min.css +1 -1
  119. package/resources/themes/arya-blue/theme.css +6 -1
  120. package/resources/themes/arya-green/theme.css +6 -1
  121. package/resources/themes/arya-orange/theme.css +6 -1
  122. package/resources/themes/arya-purple/theme.css +6 -1
  123. package/resources/themes/bootstrap4-dark-blue/theme.css +6 -1
  124. package/resources/themes/bootstrap4-dark-purple/theme.css +6 -1
  125. package/resources/themes/bootstrap4-light-blue/theme.css +6 -1
  126. package/resources/themes/bootstrap4-light-purple/theme.css +6 -1
  127. package/resources/themes/fluent-light/theme.css +6 -1
  128. package/resources/themes/luna-amber/theme.css +6 -1
  129. package/resources/themes/luna-blue/theme.css +6 -1
  130. package/resources/themes/luna-green/theme.css +6 -1
  131. package/resources/themes/luna-pink/theme.css +6 -1
  132. package/resources/themes/md-dark-deeppurple/theme.css +6 -1
  133. package/resources/themes/md-dark-indigo/theme.css +6 -1
  134. package/resources/themes/md-light-deeppurple/theme.css +6 -1
  135. package/resources/themes/md-light-indigo/theme.css +6 -1
  136. package/resources/themes/mdc-dark-deeppurple/theme.css +6 -1
  137. package/resources/themes/mdc-dark-indigo/theme.css +6 -1
  138. package/resources/themes/mdc-light-deeppurple/theme.css +6 -1
  139. package/resources/themes/mdc-light-indigo/theme.css +6 -1
  140. package/resources/themes/nova/theme.css +6 -1
  141. package/resources/themes/nova-accent/theme.css +6 -1
  142. package/resources/themes/nova-alt/theme.css +6 -1
  143. package/resources/themes/nova-vue/theme.css +6 -1
  144. package/resources/themes/rhea/theme.css +6 -1
  145. package/resources/themes/saga-blue/theme.css +6 -1
  146. package/resources/themes/saga-green/theme.css +6 -1
  147. package/resources/themes/saga-orange/theme.css +6 -1
  148. package/resources/themes/saga-purple/theme.css +6 -1
  149. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff +0 -0
  150. package/resources/themes/tailwind-light/fonts/Inter-Bold.woff2 +0 -0
  151. package/resources/themes/tailwind-light/fonts/Inter-Light.woff +0 -0
  152. package/resources/themes/tailwind-light/fonts/Inter-Light.woff2 +0 -0
  153. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff +0 -0
  154. package/resources/themes/tailwind-light/fonts/Inter-Medium.woff2 +0 -0
  155. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff +0 -0
  156. package/resources/themes/tailwind-light/fonts/Inter-Regular.woff2 +0 -0
  157. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff +0 -0
  158. package/resources/themes/tailwind-light/fonts/Inter-SemiBold.woff2 +0 -0
  159. package/resources/themes/tailwind-light/theme.css +5440 -0
  160. package/resources/themes/vela-blue/theme.css +6 -1
  161. package/resources/themes/vela-green/theme.css +6 -1
  162. package/resources/themes/vela-orange/theme.css +6 -1
  163. package/resources/themes/vela-purple/theme.css +6 -1
  164. package/speeddial/SpeedDial.vue +2 -1
  165. package/speeddial/speeddial.cjs.js +2 -1
  166. package/speeddial/speeddial.cjs.min.js +1 -1
  167. package/speeddial/speeddial.esm.js +2 -1
  168. package/speeddial/speeddial.esm.min.js +1 -1
  169. package/speeddial/speeddial.js +2 -1
  170. package/speeddial/speeddial.min.js +1 -1
  171. package/splitter/Splitter.vue +5 -3
  172. package/splitter/splitter.cjs.js +4 -2
  173. package/splitter/splitter.cjs.min.js +1 -1
  174. package/splitter/splitter.esm.js +5 -3
  175. package/splitter/splitter.esm.min.js +1 -1
  176. package/splitter/splitter.js +4 -2
  177. package/splitter/splitter.min.js +1 -1
  178. package/tabmenu/TabMenu.vue +4 -0
  179. package/tabmenu/tabmenu.cjs.js +1 -1
  180. package/tabmenu/tabmenu.cjs.min.js +1 -1
  181. package/tabmenu/tabmenu.esm.js +1 -1
  182. package/tabmenu/tabmenu.esm.min.js +1 -1
  183. package/tabmenu/tabmenu.js +1 -1
  184. package/tabmenu/tabmenu.min.js +1 -1
  185. package/terminal/terminal.js +1 -1
  186. package/terminal/terminal.min.js +1 -1
  187. package/tieredmenu/TieredMenuSub.vue +1 -1
  188. package/tieredmenu/tieredmenu.cjs.js +1 -1
  189. package/tieredmenu/tieredmenu.cjs.min.js +1 -1
  190. package/tieredmenu/tieredmenu.esm.js +1 -1
  191. package/tieredmenu/tieredmenu.esm.min.js +1 -1
  192. package/tieredmenu/tieredmenu.js +1 -1
  193. package/tieredmenu/tieredmenu.min.js +1 -1
  194. package/toastservice/ToastService.d.ts +3 -2
  195. package/tooltip/tooltip.cjs.js +10 -3
  196. package/tooltip/tooltip.cjs.min.js +1 -1
  197. package/tooltip/tooltip.esm.js +10 -3
  198. package/tooltip/tooltip.esm.min.js +1 -1
  199. package/tooltip/tooltip.js +10 -3
  200. package/tooltip/tooltip.min.js +1 -1
  201. package/treetable/BodyCell.vue +2 -3
  202. package/treetable/FooterCell.vue +2 -2
  203. package/treetable/HeaderCell.vue +2 -2
  204. package/treetable/TreeTable.vue +2 -2
  205. package/treetable/TreeTableRow.vue +2 -2
  206. package/treetable/treetable.cjs.js +6 -6
  207. package/treetable/treetable.cjs.min.js +1 -1
  208. package/treetable/treetable.esm.js +7 -7
  209. package/treetable/treetable.esm.min.js +1 -1
  210. package/treetable/treetable.js +6 -6
  211. package/treetable/treetable.min.js +1 -1
  212. package/utils/Utils.d.ts +80 -0
  213. package/utils/package.json +3 -2
  214. package/utils/utils.cjs.js +126 -108
  215. package/utils/utils.cjs.min.js +1 -1
  216. package/utils/utils.esm.js +126 -108
  217. package/utils/utils.esm.min.js +1 -1
  218. package/utils/utils.js +126 -108
  219. package/utils/utils.min.js +1 -1
  220. package/vetur-attributes.json +12 -0
  221. package/vetur-tags.json +4 -1
  222. package/virtualscroller/VirtualScroller.vue +1 -1
  223. package/virtualscroller/virtualscroller.cjs.js +1 -1
  224. package/virtualscroller/virtualscroller.cjs.min.js +1 -1
  225. package/virtualscroller/virtualscroller.esm.js +1 -1
  226. package/virtualscroller/virtualscroller.esm.min.js +1 -1
  227. package/virtualscroller/virtualscroller.js +1 -1
  228. package/virtualscroller/virtualscroller.min.js +1 -1
  229. package/web-types.json +88 -5
@@ -101,7 +101,6 @@ declare class DataTable {
101
101
  $emit(eventName: 'row-edit-init', event: Event): this;
102
102
  $emit(eventName: 'row-edit-save', event: Event): this;
103
103
  $emit(eventName: 'row-edit-cancel', event: Event): this;
104
- $emit(eventName: 'editing-cell-change', event: Event): this;
105
104
  $emit(eventName: 'state-restore', value: any[]): this;
106
105
  $emit(eventName: 'state-save', value: any[]): this;
107
106
 
@@ -114,6 +113,7 @@ declare class DataTable {
114
113
  groupheader: VNode[];
115
114
  groupfooter: VNode[];
116
115
  loading: VNode[];
116
+ expansion: VNode[];
117
117
  };
118
118
  }
119
119
 
@@ -32,7 +32,8 @@
32
32
  @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
33
33
  @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
34
34
  @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
35
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)" @editing-cell-change="onEditingCellChange($event)"/>
35
+ @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"
36
+ :editingMeta="d_editingMeta" @editing-meta-change="onEditingMetaChange" />
36
37
  <DTTableBody :value="dataToRender" :columns="columns" :empty="empty" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
37
38
  :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :editMode="editMode" :compareSelectionBy="compareSelectionBy" :scrollable="scrollable"
38
39
  :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
@@ -41,7 +42,8 @@
41
42
  @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
42
43
  @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
43
44
  @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
44
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)" @editing-cell-change="onEditingCellChange($event)"/>
45
+ @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"
46
+ :editingMeta="d_editingMeta" @editing-meta-change="onEditingMetaChange" />
45
47
  <DTTableFooter :columnGroup="footerColumnGroup" :columns="columns" />
46
48
  </table>
47
49
  </div>
@@ -77,7 +79,7 @@ export default {
77
79
  'update:selection', 'row-select', 'row-unselect', 'update:contextMenuSelection', 'row-contextmenu', 'row-unselect-all', 'row-select-all',
78
80
  'column-resize-end', 'column-reorder', 'row-reorder', 'update:expandedRows', 'row-collapse', 'row-expand',
79
81
  'update:expandedRowGroups', 'rowgroup-collapse', 'rowgroup-expand', 'update:filters', 'state-restore', 'state-save',
80
- 'cell-edit-init', 'cell-edit-complete', 'cell-edit-cancel', 'update:editingRows', 'row-edit-init', 'row-edit-save', 'row-edit-cancel', 'editing-cell-change'],
82
+ 'cell-edit-init', 'cell-edit-complete', 'cell-edit-cancel', 'update:editingRows', 'row-edit-init', 'row-edit-save', 'row-edit-cancel'],
81
83
  props: {
82
84
  value: {
83
85
  type: Array,
@@ -328,8 +330,8 @@ export default {
328
330
  d_expandedRowKeys: null,
329
331
  d_columnOrder: null,
330
332
  d_editingRowKeys: null,
331
- d_filters: this.cloneFilters(this.filters),
332
- d_editingCells: []
333
+ d_editingMeta: {},
334
+ d_filters: this.cloneFilters(this.filters)
333
335
  };
334
336
  },
335
337
  rowTouched: false,
@@ -396,9 +398,7 @@ export default {
396
398
  }
397
399
  },
398
400
  mounted() {
399
- if (this.scrollable && (this.scrollDirection !== 'vertical' || this.rowGroupMode === 'subheader' || !this.resizableColumns)) {
400
- this.updateScrollWidth();
401
- }
401
+ this.$el.setAttribute(this.attributeSelector, '');
402
402
 
403
403
  if (this.responsiveLayout === 'stack' && !this.scrollable) {
404
404
  this.createResponsiveStyle();
@@ -407,9 +407,14 @@ export default {
407
407
  if (this.isStateful() && this.resizableColumns) {
408
408
  this.restoreColumnWidths();
409
409
  }
410
+
411
+ if (this.editMode === 'row' && this.dataKey && !this.d_editingRowKeys) {
412
+ this.updateEditingRowKeys(this.editingRows);
413
+ }
410
414
  },
411
415
  beforeUnmount() {
412
416
  this.unbindColumnResizeEvents();
417
+ this.destroyStyleElement();
413
418
  this.destroyResponsiveStyle();
414
419
  },
415
420
  updated() {
@@ -417,15 +422,17 @@ export default {
417
422
  this.saveState();
418
423
  }
419
424
 
420
- if (this.scrollable && (this.scrollDirection !== 'vertical' || this.rowGroupMode === 'subheader')) {
421
- this.updateScrollWidth();
425
+ if (this.editMode === 'row' && this.dataKey && !this.d_editingRowKeys) {
426
+ this.updateEditingRowKeys(this.editingRows);
422
427
  }
423
428
  },
424
429
  methods: {
425
430
  columnProp(col, prop) {
426
- return col.props ? ((col.type.props[prop].type === Boolean && col.props[prop] === '') ? true : col.props[prop]) : null;
431
+ return ObjectUtils.getVNodeProp(col, prop);
427
432
  },
428
433
  onPage(event) {
434
+ this.clearEditingMetaData();
435
+
429
436
  this.d_first = event.first;
430
437
  this.d_rows = event.rows;
431
438
 
@@ -485,6 +492,8 @@ export default {
485
492
  }
486
493
  },
487
494
  sortSingle(value) {
495
+ this.clearEditingMetaData();
496
+
488
497
  if (this.groupRowsBy && this.groupRowsBy === this.sortField) {
489
498
  this.d_multiSortMeta = [
490
499
  {field: this.sortField, order: this.sortOrder || this.defaultSortOrder},
@@ -519,6 +528,8 @@ export default {
519
528
  return data;
520
529
  },
521
530
  sortMultiple(value) {
531
+ this.clearEditingMetaData();
532
+
522
533
  if (this.groupRowsBy && (this.d_groupRowsSortMeta || (this.d_multiSortMeta.length && this.groupRowsBy === this.d_multiSortMeta[0].field))) {
523
534
  const firstSortMeta = this.d_multiSortMeta[0];
524
535
  !this.d_groupRowsSortMeta && (this.d_groupRowsSortMeta = firstSortMeta);
@@ -576,6 +587,8 @@ export default {
576
587
  return;
577
588
  }
578
589
 
590
+ this.clearEditingMetaData();
591
+
579
592
  let globalFilterFieldsArray;
580
593
  if (this.filters['global']) {
581
594
  globalFilterFieldsArray = this.globalFilterFields|| this.columns.map(col => this.columnProp(col, 'filterField') || this.columnProp(col, 'field'));
@@ -1088,7 +1101,9 @@ export default {
1088
1101
  }
1089
1102
  }
1090
1103
  else if (this.columnResizeMode === 'expand') {
1091
- this.$refs.table.style.width = this.$refs.table.offsetWidth + delta + 'px';
1104
+ const tableWidth = this.$refs.table.offsetWidth + delta + 'px';
1105
+ this.$refs.table.style.width = tableWidth;
1106
+ this.$refs.table.style.minWidth = tableWidth;
1092
1107
 
1093
1108
  if (!this.scrollable)
1094
1109
  this.resizeColumnElement.style.width = newColumnWidth + 'px';
@@ -1114,22 +1129,27 @@ export default {
1114
1129
  },
1115
1130
  resizeTableCells(newColumnWidth, nextColumnWidth) {
1116
1131
  let colIndex = DomHandler.index(this.resizeColumnElement);
1117
- let children = this.$refs.table.children;
1118
- for (let child of children) {
1119
- for (let row of child.children) {
1120
- let resizeCell = row.children[colIndex];
1121
- if (resizeCell) {
1122
- resizeCell.style.flex = '0 0 ' + newColumnWidth + 'px';
1123
-
1124
- if (this.columnResizeMode === 'fit') {
1125
- let nextCell = resizeCell.nextElementSibling;
1126
- if (nextCell) {
1127
- nextCell.style.flex = '0 0 ' + nextColumnWidth + 'px';
1128
- }
1129
- }
1132
+ let widths = [];
1133
+ let headers = DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th');
1134
+ headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));
1135
+
1136
+ this.destroyStyleElement();
1137
+ this.createStyleElement();
1138
+
1139
+ let innerHTML = '';
1140
+ widths.forEach((width,index) => {
1141
+ let colWidth = index === colIndex ? newColumnWidth : (nextColumnWidth && index === colIndex + 1) ? nextColumnWidth : width;
1142
+ innerHTML += `
1143
+ .p-datatable[${this.attributeSelector}] .p-datatable-thead > tr > th:nth-child(${index+1}) {
1144
+ flex: 0 0 ${colWidth}px !important;
1130
1145
  }
1131
- }
1132
- }
1146
+
1147
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td:nth-child(${index+1}) {
1148
+ flex: 0 0 ${colWidth}px !important;
1149
+ }
1150
+ `
1151
+ });
1152
+ this.styleElement.innerHTML = innerHTML;
1133
1153
  },
1134
1154
  bindColumnResizeEvents() {
1135
1155
  if (!this.documentColumnResizeListener) {
@@ -1538,7 +1558,7 @@ export default {
1538
1558
  state.columnWidths = widths.join(',');
1539
1559
 
1540
1560
  if (this.columnResizeMode === 'expand') {
1541
- state.tableWidth = DomHandler.getOuterWidth(this.$refs.table) + 'px';
1561
+ state.tableWidth = DomHandler.getOuterWidth(this.$refs.table) + 'px';
1542
1562
  }
1543
1563
  },
1544
1564
  restoreColumnWidths() {
@@ -1547,10 +1567,31 @@ export default {
1547
1567
 
1548
1568
  if (this.columnResizeMode === 'expand' && this.tableWidthState) {
1549
1569
  this.$refs.table.style.width = this.tableWidthState;
1570
+ this.$refs.table.style.minWidth = this.tableWidthState;
1550
1571
  this.$el.style.width = this.tableWidthState;
1551
1572
  }
1552
1573
 
1553
- DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th').forEach((header, index) => header.style.width = widths[index] + 'px');
1574
+ this.createStyleElement();
1575
+
1576
+ if (this.scrollable && widths && widths.length > 0) {
1577
+ let innerHTML = '';
1578
+ widths.forEach((width,index) => {
1579
+ innerHTML += `
1580
+ .p-datatable[${this.attributeSelector}] .p-datatable-thead > tr > th:nth-child(${index+1}) {
1581
+ flex: 0 0 ${width}px;
1582
+ }
1583
+
1584
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td:nth-child(${index+1}) {
1585
+ flex: 0 0 ${width}px;
1586
+ }
1587
+ `
1588
+ });
1589
+
1590
+ this.styleElement.innerHTML = innerHTML;
1591
+ }
1592
+ else {
1593
+ DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th').forEach((header, index) => header.style.width = widths[index] + 'px');
1594
+ }
1554
1595
  }
1555
1596
  },
1556
1597
  onCellEditInit(event) {
@@ -1562,18 +1603,6 @@ export default {
1562
1603
  onCellEditCancel(event) {
1563
1604
  this.$emit('cell-edit-cancel', event);
1564
1605
  },
1565
- onEditingCellChange(event) {
1566
- let { rowIndex, cellIndex, editing } = event;
1567
- let _editingCells = [...this.d_editingCells];
1568
-
1569
- if (editing)
1570
- _editingCells.push({ rowIndex, cellIndex });
1571
- else
1572
- _editingCells = _editingCells.filter(cell => !(cell.rowIndex === rowIndex && cell.cellIndex === cellIndex));
1573
-
1574
- this.d_editingCells = _editingCells;
1575
- this.$emit('value-change', this.processedData);
1576
- },
1577
1606
  onRowEditInit(event) {
1578
1607
  let _editingRows = this.editingRows ? [...this.editingRows] : [];
1579
1608
  _editingRows.push(event.data);
@@ -1592,6 +1621,24 @@ export default {
1592
1621
  this.$emit('update:editingRows', _editingRows);
1593
1622
  this.$emit('row-edit-cancel', event);
1594
1623
  },
1624
+ onEditingMetaChange(event) {
1625
+ let { data, field, index, editing } = event;
1626
+ let meta = this.d_editingMeta[index];
1627
+
1628
+ if (editing) {
1629
+ !meta && (meta = this.d_editingMeta[index] = { data: { ...data }, fields: [] });
1630
+ meta['fields'].push(field);
1631
+ }
1632
+ else if (meta) {
1633
+ const fields = meta['fields'].filter(f => f !== field);
1634
+ !fields.length ? (delete this.d_editingMeta[index]) : (meta['fields'] = fields);
1635
+ }
1636
+ },
1637
+ clearEditingMetaData() {
1638
+ if (this.editMode) {
1639
+ this.d_editingMeta = {};
1640
+ }
1641
+ },
1595
1642
  createLazyLoadEvent(event) {
1596
1643
  return {
1597
1644
  originalEvent: event,
@@ -1636,22 +1683,16 @@ export default {
1636
1683
  this.columns.forEach(col => columnOrder.push(this.columnProp(col, 'columnKey')||this.columnProp(col, 'field')));
1637
1684
  this.d_columnOrder = columnOrder;
1638
1685
  },
1639
- updateScrollWidth() {
1640
- let parentElementHeight = DomHandler.width(this.$refs.table.parentElement);
1641
-
1642
- if (this.$refs.table.scrollWidth > parentElementHeight) {
1643
- this.$refs.table.style.width = this.$refs.table.scrollWidth + 'px';
1644
- }
1645
- else {
1646
- this.$refs.table.style.width = parentElementHeight - DomHandler.calculateScrollbarWidth() + 'px';
1647
- }
1686
+ createStyleElement() {
1687
+ this.styleElement = document.createElement('style');
1688
+ this.styleElement.type = 'text/css';
1689
+ document.head.appendChild(this.styleElement);
1648
1690
  },
1649
1691
  createResponsiveStyle() {
1650
- if (!this.styleElement) {
1651
- this.$el.setAttribute(this.attributeSelector, '');
1652
- this.styleElement = document.createElement('style');
1653
- this.styleElement.type = 'text/css';
1654
- document.head.appendChild(this.styleElement);
1692
+ if (!this.responsiveStyleElement) {
1693
+ this.responsiveStyleElement = document.createElement('style');
1694
+ this.responsiveStyleElement.type = 'text/css';
1695
+ document.head.appendChild(this.responsiveStyleElement);
1655
1696
 
1656
1697
  let innerHTML = `
1657
1698
  @media screen and (max-width: ${this.breakpoint}) {
@@ -1683,10 +1724,16 @@ export default {
1683
1724
  }
1684
1725
  `;
1685
1726
 
1686
- this.styleElement.innerHTML = innerHTML;
1727
+ this.responsiveStyleElement.innerHTML = innerHTML;
1687
1728
  }
1688
1729
  },
1689
1730
  destroyResponsiveStyle() {
1731
+ if (this.responsiveStyleElement) {
1732
+ document.head.removeChild(this.responsiveStyleElement);
1733
+ this.responsiveStyleElement = null;
1734
+ }
1735
+ },
1736
+ destroyStyleElement() {
1690
1737
  if (this.styleElement) {
1691
1738
  document.head.removeChild(this.styleElement);
1692
1739
  this.styleElement = null;
@@ -1771,24 +1818,21 @@ export default {
1771
1818
  hasFilters() {
1772
1819
  return this.filters && Object.keys(this.filters).length > 0 && this.filters.constructor === Object;
1773
1820
  },
1774
- hasEditingCell() {
1775
- return this.d_editingCells && this.d_editingCells.length !== 0;
1776
- },
1777
1821
  processedData() {
1778
1822
  let data = this.value || [];
1779
1823
 
1780
- if (!this.lazy && !this.hasEditingCell) {
1824
+ if (!this.lazy) {
1781
1825
  if (data && data.length) {
1826
+ if (this.hasFilters) {
1827
+ data = this.filter(data);
1828
+ }
1829
+
1782
1830
  if (this.sorted) {
1783
1831
  if(this.sortMode === 'single')
1784
1832
  data = this.sortSingle(data);
1785
1833
  else if(this.sortMode === 'multiple')
1786
1834
  data = this.sortMultiple(data);
1787
1835
  }
1788
-
1789
- if (this.hasFilters) {
1790
- data = this.filter(data);
1791
- }
1792
1836
  }
1793
1837
  }
1794
1838
 
@@ -1858,7 +1902,7 @@ export default {
1858
1902
 
1859
1903
  .p-datatable table {
1860
1904
  border-collapse: collapse;
1861
- width: 100%;
1905
+ min-width: 100%;
1862
1906
  table-layout: fixed;
1863
1907
  }
1864
1908
 
@@ -1898,10 +1942,6 @@ export default {
1898
1942
  overflow: auto;
1899
1943
  }
1900
1944
 
1901
- .p-datatable-scrollable .p-datatable-table {
1902
- display: block;
1903
- }
1904
-
1905
1945
  .p-datatable-scrollable .p-datatable-thead,
1906
1946
  .p-datatable-scrollable .p-datatable-tbody,
1907
1947
  .p-datatable-scrollable .p-datatable-tfoot {
@@ -7,7 +7,7 @@
7
7
  </template>
8
8
 
9
9
  <script>
10
- import {DomHandler} from 'primevue/utils';
10
+ import {DomHandler,ObjectUtils} from 'primevue/utils';
11
11
 
12
12
  export default {
13
13
  name: 'FooterCell',
@@ -34,7 +34,7 @@ export default {
34
34
  },
35
35
  methods: {
36
36
  columnProp(prop) {
37
- return this.column.props ? ((this.column.type.props[prop].type === Boolean && this.column.props[prop] === '') ? true : this.column.props[prop]) : null;
37
+ return ObjectUtils.getVNodeProp(this.column, prop);
38
38
  },
39
39
  updateStickyPosition() {
40
40
  if (this.columnProp('frozen')) {
@@ -23,7 +23,7 @@
23
23
  </template>
24
24
 
25
25
  <script>
26
- import {DomHandler} from 'primevue/utils';
26
+ import {DomHandler,ObjectUtils} from 'primevue/utils';
27
27
  import HeaderCheckbox from './HeaderCheckbox.vue';
28
28
  import ColumnFilter from './ColumnFilter.vue';
29
29
 
@@ -107,7 +107,7 @@ export default {
107
107
  },
108
108
  methods: {
109
109
  columnProp(prop) {
110
- return this.column.props ? ((this.column.type.props[prop].type === Boolean && this.column.props[prop] === '') ? true : this.column.props[prop]) : null;
110
+ return ObjectUtils.getVNodeProp(this.column, prop);
111
111
  },
112
112
  onClick(event) {
113
113
  this.$emit('column-click', {originalEvent: event, column: this.column});
@@ -21,7 +21,8 @@
21
21
  :editMode="editMode" :editing="editMode === 'row' && isRowEditing(rowData)" :responsiveLayout="responsiveLayout"
22
22
  @radio-change="onRadioChange($event)" @checkbox-change="onCheckboxChange($event)" @row-toggle="onRowToggle($event)"
23
23
  @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
24
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)" @editing-cell-change="onEditingCellChange($event)"/>
24
+ @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"
25
+ :editingMeta="editingMeta" @editing-meta-change="onEditingMetaChange"/>
25
26
  </template>
26
27
  </tr>
27
28
  <tr class="p-datatable-row-expansion" v-if="templates['expansion'] && expandedRows && isRowExpanded(rowData)" :key="getRowKey(rowData, index) + '_expansion'" role="row">
@@ -52,7 +53,7 @@ export default {
52
53
  emits: ['rowgroup-toggle', 'row-click', 'row-dblclick', 'row-rightclick', 'row-touchend', 'row-keydown', 'row-mousedown',
53
54
  'row-dragstart', 'row-dragover', 'row-dragleave', 'row-dragend', 'row-drop', 'row-toggle',
54
55
  'radio-change', 'checkbox-change', 'cell-edit-init', 'cell-edit-complete', 'cell-edit-cancel',
55
- 'row-edit-init', 'row-edit-save', 'row-edit-cancel', 'editing-cell-change'],
56
+ 'row-edit-init', 'row-edit-save', 'row-edit-cancel', 'editing-meta-change'],
56
57
  props: {
57
58
  value: {
58
59
  type: Array,
@@ -146,6 +147,10 @@ export default {
146
147
  type: null,
147
148
  default: null
148
149
  },
150
+ editingMeta: {
151
+ type: Object,
152
+ default: null
153
+ },
149
154
  loading: {
150
155
  type: Boolean,
151
156
  default: false
@@ -188,7 +193,7 @@ export default {
188
193
  },
189
194
  methods: {
190
195
  columnProp(col, prop) {
191
- return col.props ? ((col.type.props[prop].type === Boolean && col.props[prop] === '') ? true : col.props[prop]) : null;
196
+ return ObjectUtils.getVNodeProp(col, prop);
192
197
  },
193
198
  shouldRenderRowGroupHeader(value, rowData, i) {
194
199
  let currentRowFieldData = ObjectUtils.resolveFieldData(rowData, this.groupRowsBy);
@@ -447,8 +452,8 @@ export default {
447
452
  onRowEditCancel(event) {
448
453
  this.$emit('row-edit-cancel', event);
449
454
  },
450
- onEditingCellChange(event) {
451
- this.$emit('editing-cell-change', event);
455
+ onEditingMetaChange(event) {
456
+ this.$emit('editing-meta-change', event);
452
457
  },
453
458
  updateFrozenRowStickyPosition() {
454
459
  this.$el.style.top = DomHandler.getOuterHeight(this.$el.previousElementSibling) + 'px';
@@ -17,6 +17,7 @@
17
17
 
18
18
  <script>
19
19
  import FooterCell from './FooterCell.vue';
20
+ import {ObjectUtils} from 'primevue/utils';
20
21
 
21
22
  export default {
22
23
  name: 'TableFooter',
@@ -32,7 +33,7 @@ export default {
32
33
  },
33
34
  methods: {
34
35
  columnProp(col, prop) {
35
- return col.props ? ((col.type.props[prop].type === Boolean && col.props[prop] === '') ? true : col.props[prop]) : null;
36
+ return ObjectUtils.getVNodeProp(col, prop);
36
37
  }
37
38
  },
38
39
  computed: {
@@ -16,7 +16,7 @@
16
16
  </tr>
17
17
  <tr v-if="filterDisplay === 'row'" role="row">
18
18
  <template v-for="(col,i) of columns" :key="columnProp(col, 'columnKey')||columnProp(col, 'field')||i">
19
- <th :style="getFilterColumnHeaderStyle(col)" :class="getFilterColumnHeaderClass(col)" v-if="!columnProp(col, 'hidden')">
19
+ <th :style="getFilterColumnHeaderStyle(col)" :class="getFilterColumnHeaderClass(col)" v-if="!columnProp(col, 'hidden') && (rowGroupMode !== 'subheader' || (groupRowsBy !== columnProp(col, 'field')))">
20
20
  <DTHeaderCheckbox :checked="allRowsSelected" @change="$emit('checkbox-change', $event)" :disabled="empty" v-if="columnProp(col, 'selectionMode') ==='multiple'" />
21
21
  <DTColumnFilter v-if="col.children && col.children.filter" :field="columnProp(col,'filterField')||columnProp(col,'field')" :type="columnProp(col,'dataType')" display="row"
22
22
  :showMenu="columnProp(col,'showFilterMenu')" :filterElement="col.children && col.children.filter"
@@ -51,6 +51,7 @@
51
51
  import HeaderCell from './HeaderCell.vue';
52
52
  import HeaderCheckbox from './HeaderCheckbox.vue';
53
53
  import ColumnFilter from './ColumnFilter.vue';
54
+ import {ObjectUtils} from 'primevue/utils';
54
55
 
55
56
  export default {
56
57
  name: 'TableHeader',
@@ -121,7 +122,7 @@ export default {
121
122
  },
122
123
  methods: {
123
124
  columnProp(col, prop) {
124
- return col.props ? ((col.type.props[prop].type === Boolean && col.props[prop] === '') ? true : col.props[prop]) : null;
125
+ return ObjectUtils.getVNodeProp(col, prop);
125
126
  },
126
127
  getFilterColumnHeaderClass(column) {
127
128
  return ['p-filter-column', this.columnProp(column, 'filterHeaderClass'), this.columnProp(column, 'class'), {