primevue 2.7.0 → 2.9.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 (597) hide show
  1. package/accordion/accordion.common.js +1 -1
  2. package/accordion/accordion.umd.js +1 -1
  3. package/accordiontab/accordiontab.common.js +23 -1
  4. package/accordiontab/accordiontab.umd.js +23 -1
  5. package/accordiontab/accordiontab.umd.min.js +1 -1
  6. package/api/Api.d.ts +296 -0
  7. package/api/Api.js +47 -0
  8. package/api/FilterMatchMode.js +26 -0
  9. package/api/FilterOperator.js +12 -0
  10. package/api/FilterService.js +260 -0
  11. package/api/PrimeIcons.js +246 -0
  12. package/api/ToastSeverity.js +14 -0
  13. package/api/api.common.js +4893 -0
  14. package/api/api.umd.js +4903 -0
  15. package/api/api.umd.min.js +1 -0
  16. package/api/demo.html +8 -0
  17. package/api/filtermatchmode.common.js +186 -0
  18. package/api/filtermatchmode.umd.js +196 -0
  19. package/api/filtermatchmode.umd.min.js +1 -0
  20. package/api/filteroperator.common.js +172 -0
  21. package/api/filteroperator.umd.js +182 -0
  22. package/api/filteroperator.umd.min.js +1 -0
  23. package/{utils/filterutils.common.js → api/filterservice.common.js} +207 -106
  24. package/{utils/filterutils.umd.js → api/filterservice.umd.js} +209 -108
  25. package/api/filterservice.umd.min.js +1 -0
  26. package/api/index.d.ts +1 -0
  27. package/api/index.js +2 -0
  28. package/api/primeicons.common.js +406 -0
  29. package/api/primeicons.umd.js +416 -0
  30. package/api/primeicons.umd.min.js +1 -0
  31. package/api/toastseverity.common.js +174 -0
  32. package/api/toastseverity.umd.js +184 -0
  33. package/api/toastseverity.umd.min.js +1 -0
  34. package/autocomplete/autocomplete.common.js +50 -22
  35. package/autocomplete/autocomplete.umd.js +50 -22
  36. package/autocomplete/autocomplete.umd.min.js +1 -1
  37. package/avatar/avatar.common.js +1 -1
  38. package/avatar/avatar.umd.js +1 -1
  39. package/avatargroup/avatargroup.common.js +1 -1
  40. package/avatargroup/avatargroup.umd.js +1 -1
  41. package/badge/badge.common.js +1 -1
  42. package/badge/badge.umd.js +1 -1
  43. package/badgedirective/badgedirective.common.js +22 -0
  44. package/badgedirective/badgedirective.umd.js +22 -0
  45. package/badgedirective/badgedirective.umd.min.js +1 -1
  46. package/blockui/blockui.common.js +23 -1
  47. package/blockui/blockui.umd.js +23 -1
  48. package/blockui/blockui.umd.min.js +1 -1
  49. package/breadcrumb/breadcrumb.common.js +2 -2
  50. package/breadcrumb/breadcrumb.umd.js +2 -2
  51. package/breadcrumb/breadcrumbitem.common.js +1 -1
  52. package/breadcrumb/breadcrumbitem.umd.js +1 -1
  53. package/button/button.common.js +23 -1
  54. package/button/button.umd.js +23 -1
  55. package/button/button.umd.min.js +1 -1
  56. package/calendar/Calendar.vue +28 -8
  57. package/calendar/calendar.common.js +76 -39
  58. package/calendar/calendar.umd.js +76 -39
  59. package/calendar/calendar.umd.min.js +1 -1
  60. package/card/card.common.js +1 -1
  61. package/card/card.umd.js +1 -1
  62. package/carousel/carousel.common.js +23 -1
  63. package/carousel/carousel.umd.js +23 -1
  64. package/carousel/carousel.umd.min.js +1 -1
  65. package/cascadeselect/cascadeselect.common.js +44 -15
  66. package/cascadeselect/cascadeselect.umd.js +44 -15
  67. package/cascadeselect/cascadeselect.umd.min.js +1 -1
  68. package/cascadeselect/cascadeselectsub.common.js +43 -14
  69. package/cascadeselect/cascadeselectsub.umd.js +43 -14
  70. package/cascadeselect/cascadeselectsub.umd.min.js +1 -1
  71. package/chart/Chart.vue +16 -5
  72. package/chart/chart.common.js +18 -6
  73. package/chart/chart.umd.js +18 -6
  74. package/chart/chart.umd.min.js +1 -1
  75. package/checkbox/checkbox.common.js +26 -14
  76. package/checkbox/checkbox.umd.js +26 -14
  77. package/checkbox/checkbox.umd.min.js +1 -1
  78. package/chip/chip.common.js +1 -1
  79. package/chip/chip.umd.js +1 -1
  80. package/chips/chips.common.js +1 -1
  81. package/chips/chips.umd.js +1 -1
  82. package/colorpicker/colorpicker.common.js +23 -1
  83. package/colorpicker/colorpicker.umd.js +23 -1
  84. package/colorpicker/colorpicker.umd.min.js +1 -1
  85. package/column/Column.d.ts +2 -0
  86. package/column/Column.vue +72 -12
  87. package/column/column.common.js +71 -11
  88. package/column/column.umd.js +71 -11
  89. package/column/column.umd.min.js +1 -1
  90. package/columngroup/columngroup.common.js +1 -1
  91. package/columngroup/columngroup.umd.js +1 -1
  92. package/config/PrimeVue.d.ts +24 -2
  93. package/config/PrimeVue.js +34 -4
  94. package/config/primevue.common.js +3589 -130
  95. package/config/primevue.umd.js +3589 -130
  96. package/config/primevue.umd.min.js +1 -1
  97. package/confirmdialog/confirmdialog.common.js +38 -14
  98. package/confirmdialog/confirmdialog.umd.js +38 -14
  99. package/confirmdialog/confirmdialog.umd.min.js +1 -1
  100. package/confirmpopup/confirmpopup.common.js +24 -2
  101. package/confirmpopup/confirmpopup.umd.js +24 -2
  102. package/confirmpopup/confirmpopup.umd.min.js +1 -1
  103. package/contextmenu/contextmenu.common.js +24 -2
  104. package/contextmenu/contextmenu.umd.js +24 -2
  105. package/contextmenu/contextmenu.umd.min.js +1 -1
  106. package/contextmenu/contextmenusub.common.js +23 -1
  107. package/contextmenu/contextmenusub.umd.js +23 -1
  108. package/contextmenu/contextmenusub.umd.min.js +1 -1
  109. package/contextmenu/demo.html +3 -4
  110. package/datatable/BodyCell.vue +129 -40
  111. package/datatable/ColumnFilter.vue +558 -0
  112. package/datatable/ColumnSlot.vue +36 -1
  113. package/datatable/DataTable.d.ts +36 -8
  114. package/datatable/DataTable.vue +605 -395
  115. package/datatable/FooterCell.vue +82 -0
  116. package/datatable/HeaderCell.vue +246 -0
  117. package/datatable/HeaderCheckbox.vue +7 -4
  118. package/datatable/RowCheckbox.vue +2 -2
  119. package/datatable/RowRadioButton.vue +1 -1
  120. package/datatable/TableBody.vue +79 -19
  121. package/datatable/TableFooter.vue +34 -18
  122. package/datatable/TableHeader.vue +79 -134
  123. package/datatable/bodycell.common.js +640 -71
  124. package/datatable/bodycell.umd.js +640 -71
  125. package/datatable/bodycell.umd.min.js +1 -1
  126. package/datatable/columnfilter.common.js +7616 -0
  127. package/datatable/columnfilter.umd.js +7626 -0
  128. package/datatable/columnfilter.umd.min.js +1 -0
  129. package/datatable/columnslot.common.js +36 -1
  130. package/datatable/columnslot.umd.js +36 -1
  131. package/datatable/columnslot.umd.min.js +1 -1
  132. package/datatable/datatable.common.js +3014 -1849
  133. package/datatable/datatable.umd.js +3014 -1849
  134. package/datatable/datatable.umd.min.js +1 -1
  135. package/datatable/demo.html +3 -3
  136. package/datatable/{scrollableview.common.js → footercell.common.js} +1880 -411
  137. package/datatable/{scrollableview.umd.js → footercell.umd.js} +1882 -413
  138. package/datatable/footercell.umd.min.js +1 -0
  139. package/datatable/headercell.common.js +8082 -0
  140. package/datatable/headercell.umd.js +8092 -0
  141. package/datatable/headercell.umd.min.js +1 -0
  142. package/datatable/headercheckbox.common.js +8 -5
  143. package/datatable/headercheckbox.umd.js +8 -5
  144. package/datatable/headercheckbox.umd.min.js +1 -1
  145. package/datatable/rowcheckbox.common.js +3 -3
  146. package/datatable/rowcheckbox.umd.js +3 -3
  147. package/datatable/rowcheckbox.umd.min.js +1 -1
  148. package/datatable/rowradiobutton.common.js +3 -3
  149. package/datatable/rowradiobutton.umd.js +3 -3
  150. package/datatable/rowradiobutton.umd.min.js +1 -1
  151. package/datatable/tablebody.common.js +1089 -458
  152. package/datatable/tablebody.umd.js +1089 -458
  153. package/datatable/tablebody.umd.min.js +1 -1
  154. package/datatable/tablefooter.common.js +3804 -105
  155. package/datatable/tablefooter.umd.js +3804 -105
  156. package/datatable/tablefooter.umd.min.js +1 -1
  157. package/datatable/tableheader.common.js +6658 -2144
  158. package/datatable/tableheader.umd.js +6658 -2144
  159. package/datatable/tableheader.umd.min.js +1 -1
  160. package/datatable/tableloadingbody.common.js +37 -2
  161. package/datatable/tableloadingbody.umd.js +37 -2
  162. package/datatable/tableloadingbody.umd.min.js +1 -1
  163. package/dataview/dataview.common.js +77 -47
  164. package/dataview/dataview.umd.js +77 -47
  165. package/dataview/dataview.umd.min.js +1 -1
  166. package/dataviewlayoutoptions/dataviewlayoutoptions.common.js +1 -1
  167. package/dataviewlayoutoptions/dataviewlayoutoptions.umd.js +1 -1
  168. package/deferredcontent/deferredcontent.common.js +1 -1
  169. package/deferredcontent/deferredcontent.umd.js +1 -1
  170. package/dialog/Dialog.d.ts +1 -0
  171. package/dialog/Dialog.vue +7 -4
  172. package/dialog/dialog.common.js +33 -12
  173. package/dialog/dialog.umd.js +33 -12
  174. package/dialog/dialog.umd.min.js +1 -1
  175. package/divider/divider.common.js +1 -1
  176. package/divider/divider.umd.js +1 -1
  177. package/dock/dock.common.js +2 -2
  178. package/dock/dock.umd.js +2 -2
  179. package/dock/docksub.common.js +1 -1
  180. package/dock/docksub.umd.js +1 -1
  181. package/dropdown/Dropdown.vue +6 -3
  182. package/dropdown/dropdown.common.js +48 -18
  183. package/dropdown/dropdown.umd.js +48 -18
  184. package/dropdown/dropdown.umd.min.js +1 -1
  185. package/editor/editor.common.js +1 -1
  186. package/editor/editor.umd.js +1 -1
  187. package/fieldset/fieldset.common.js +23 -1
  188. package/fieldset/fieldset.umd.js +23 -1
  189. package/fieldset/fieldset.umd.min.js +1 -1
  190. package/fileupload/fileupload.common.js +26 -4
  191. package/fileupload/fileupload.umd.js +26 -4
  192. package/fileupload/fileupload.umd.min.js +1 -1
  193. package/fullcalendar/fullcalendar.common.js +6 -10
  194. package/fullcalendar/fullcalendar.umd.js +6 -10
  195. package/fullcalendar/fullcalendar.umd.min.js +2 -2
  196. package/galleria/galleria.common.js +26 -8
  197. package/galleria/galleria.umd.js +26 -8
  198. package/galleria/galleria.umd.min.js +1 -1
  199. package/galleria/galleriacontent.common.js +25 -3
  200. package/galleria/galleriacontent.umd.js +25 -3
  201. package/galleria/galleriacontent.umd.min.js +1 -1
  202. package/galleria/galleriaitem.common.js +23 -1
  203. package/galleria/galleriaitem.umd.js +23 -1
  204. package/galleria/galleriaitem.umd.min.js +1 -1
  205. package/galleria/galleriathumbnails.common.js +23 -1
  206. package/galleria/galleriathumbnails.umd.js +23 -1
  207. package/galleria/galleriathumbnails.umd.min.js +1 -1
  208. package/imagepreview/imagepreview.common.js +23 -1
  209. package/imagepreview/imagepreview.umd.js +23 -1
  210. package/imagepreview/imagepreview.umd.min.js +1 -1
  211. package/inlinemessage/inlinemessage.common.js +1 -1
  212. package/inlinemessage/inlinemessage.umd.js +1 -1
  213. package/inplace/inplace.common.js +24 -2
  214. package/inplace/inplace.umd.js +24 -2
  215. package/inplace/inplace.umd.min.js +1 -1
  216. package/inputmask/inputmask.common.js +25 -7
  217. package/inputmask/inputmask.umd.js +25 -7
  218. package/inputmask/inputmask.umd.min.js +1 -1
  219. package/inputnumber/InputNumber.vue +3 -1
  220. package/inputnumber/inputnumber.common.js +33 -14
  221. package/inputnumber/inputnumber.umd.js +33 -14
  222. package/inputnumber/inputnumber.umd.min.js +1 -1
  223. package/inputswitch/inputswitch.common.js +1 -1
  224. package/inputswitch/inputswitch.umd.js +1 -1
  225. package/inputtext/inputtext.common.js +3 -7
  226. package/inputtext/inputtext.umd.js +3 -7
  227. package/inputtext/inputtext.umd.min.js +1 -1
  228. package/knob/Knob.vue +1 -1
  229. package/knob/knob.common.js +3 -3
  230. package/knob/knob.umd.js +3 -3
  231. package/knob/knob.umd.min.js +1 -1
  232. package/listbox/listbox.common.js +43 -14
  233. package/listbox/listbox.umd.js +43 -14
  234. package/listbox/listbox.umd.min.js +1 -1
  235. package/megamenu/megamenu.common.js +23 -1
  236. package/megamenu/megamenu.umd.js +23 -1
  237. package/megamenu/megamenu.umd.min.js +1 -1
  238. package/menu/menu.common.js +24 -2
  239. package/menu/menu.umd.js +24 -2
  240. package/menu/menu.umd.min.js +1 -1
  241. package/menu/menuitem.common.js +23 -1
  242. package/menu/menuitem.umd.js +23 -1
  243. package/menu/menuitem.umd.min.js +1 -1
  244. package/menubar/menubar.common.js +24 -2
  245. package/menubar/menubar.umd.js +24 -2
  246. package/menubar/menubar.umd.min.js +1 -1
  247. package/menubar/menubarsub.common.js +23 -1
  248. package/menubar/menubarsub.umd.js +23 -1
  249. package/menubar/menubarsub.umd.min.js +1 -1
  250. package/message/message.common.js +23 -1
  251. package/message/message.umd.js +23 -1
  252. package/message/message.umd.min.js +1 -1
  253. package/multiselect/MultiSelect.vue +2 -2
  254. package/multiselect/multiselect.common.js +45 -16
  255. package/multiselect/multiselect.umd.js +45 -16
  256. package/multiselect/multiselect.umd.min.js +1 -1
  257. package/orderlist/OrderList.d.ts +1 -0
  258. package/orderlist/OrderList.vue +12 -1
  259. package/orderlist/orderlist.common.js +57 -17
  260. package/orderlist/orderlist.umd.js +57 -17
  261. package/orderlist/orderlist.umd.min.js +1 -1
  262. package/organizationchart/organizationchart.common.js +26 -8
  263. package/organizationchart/organizationchart.umd.js +26 -8
  264. package/organizationchart/organizationchart.umd.min.js +1 -1
  265. package/organizationchart/organizationchartnode.common.js +23 -1
  266. package/organizationchart/organizationchartnode.umd.js +23 -1
  267. package/organizationchart/organizationchartnode.umd.min.js +1 -1
  268. package/overlayeventbus/OverlayEventBus.js +14 -0
  269. package/overlayeventbus/demo.html +8 -0
  270. package/overlayeventbus/index.d.ts +1 -0
  271. package/overlayeventbus/index.js +2 -0
  272. package/overlayeventbus/overlayeventbus.common.js +1777 -0
  273. package/overlayeventbus/overlayeventbus.umd.js +1787 -0
  274. package/overlayeventbus/overlayeventbus.umd.min.js +1 -0
  275. package/overlaypanel/overlaypanel.common.js +23 -1
  276. package/overlaypanel/overlaypanel.umd.js +23 -1
  277. package/overlaypanel/overlaypanel.umd.min.js +1 -1
  278. package/package.json +1 -1
  279. package/paginator/currentpagereport.common.js +1 -1
  280. package/paginator/currentpagereport.umd.js +1 -1
  281. package/paginator/firstpagelink.common.js +23 -1
  282. package/paginator/firstpagelink.umd.js +23 -1
  283. package/paginator/firstpagelink.umd.min.js +1 -1
  284. package/paginator/jumptopagedropdown.common.js +52 -22
  285. package/paginator/jumptopagedropdown.umd.js +52 -22
  286. package/paginator/jumptopagedropdown.umd.min.js +1 -1
  287. package/paginator/jumptopageinput.common.js +38 -19
  288. package/paginator/jumptopageinput.umd.js +38 -19
  289. package/paginator/jumptopageinput.umd.min.js +1 -1
  290. package/paginator/lastpagelink.common.js +23 -1
  291. package/paginator/lastpagelink.umd.js +23 -1
  292. package/paginator/lastpagelink.umd.min.js +1 -1
  293. package/paginator/nextpagelink.common.js +23 -1
  294. package/paginator/nextpagelink.umd.js +23 -1
  295. package/paginator/nextpagelink.umd.min.js +1 -1
  296. package/paginator/pagelinks.common.js +23 -1
  297. package/paginator/pagelinks.umd.js +23 -1
  298. package/paginator/pagelinks.umd.min.js +1 -1
  299. package/paginator/paginator.common.js +76 -46
  300. package/paginator/paginator.umd.js +76 -46
  301. package/paginator/paginator.umd.min.js +1 -1
  302. package/paginator/prevpagelink.common.js +23 -1
  303. package/paginator/prevpagelink.umd.js +23 -1
  304. package/paginator/prevpagelink.umd.min.js +1 -1
  305. package/paginator/rowsperpagedropdown.common.js +52 -22
  306. package/paginator/rowsperpagedropdown.umd.js +52 -22
  307. package/paginator/rowsperpagedropdown.umd.min.js +1 -1
  308. package/panel/panel.common.js +23 -1
  309. package/panel/panel.umd.js +23 -1
  310. package/panel/panel.umd.min.js +1 -1
  311. package/panelmenu/PanelMenuSub.vue +2 -2
  312. package/panelmenu/panelmenu.common.js +9 -9
  313. package/panelmenu/panelmenu.umd.js +9 -9
  314. package/panelmenu/panelmenu.umd.min.js +1 -1
  315. package/panelmenu/panelmenusub.common.js +4 -4
  316. package/panelmenu/panelmenusub.umd.js +4 -4
  317. package/panelmenu/panelmenusub.umd.min.js +1 -1
  318. package/password/password.common.js +26 -8
  319. package/password/password.umd.js +26 -8
  320. package/password/password.umd.min.js +1 -1
  321. package/picklist/PickList.d.ts +1 -0
  322. package/picklist/PickList.vue +10 -4
  323. package/picklist/picklist.common.js +55 -20
  324. package/picklist/picklist.umd.js +55 -20
  325. package/picklist/picklist.umd.min.js +1 -1
  326. package/progressbar/progressbar.common.js +1 -1
  327. package/progressbar/progressbar.umd.js +1 -1
  328. package/progressspinner/progressspinner.common.js +1 -1
  329. package/progressspinner/progressspinner.umd.js +1 -1
  330. package/radiobutton/radiobutton.common.js +26 -14
  331. package/radiobutton/radiobutton.umd.js +26 -14
  332. package/radiobutton/radiobutton.umd.min.js +1 -1
  333. package/rating/rating.common.js +1 -1
  334. package/rating/rating.umd.js +1 -1
  335. package/resources/themes/arya-blue/theme.css +299 -22
  336. package/resources/themes/arya-green/theme.css +299 -22
  337. package/resources/themes/arya-orange/theme.css +299 -22
  338. package/resources/themes/arya-purple/theme.css +299 -22
  339. package/resources/themes/bootstrap4-dark-blue/theme.css +287 -6
  340. package/resources/themes/bootstrap4-dark-purple/theme.css +287 -6
  341. package/resources/themes/bootstrap4-light-blue/theme.css +286 -5
  342. package/resources/themes/bootstrap4-light-purple/theme.css +286 -5
  343. package/resources/themes/fluent-light/theme.css +298 -21
  344. package/resources/themes/lara-dark-blue/theme.css +638 -405
  345. package/resources/themes/lara-dark-indigo/theme.css +638 -405
  346. package/resources/themes/lara-dark-purple/theme.css +638 -405
  347. package/resources/themes/lara-dark-teal/theme.css +638 -405
  348. package/resources/themes/lara-light-blue/theme.css +398 -165
  349. package/resources/themes/lara-light-indigo/theme.css +305 -72
  350. package/resources/themes/lara-light-purple/theme.css +305 -72
  351. package/resources/themes/lara-light-teal/theme.css +305 -72
  352. package/resources/themes/luna-amber/theme.css +298 -21
  353. package/resources/themes/luna-blue/theme.css +298 -21
  354. package/resources/themes/luna-green/theme.css +298 -21
  355. package/resources/themes/luna-pink/theme.css +298 -21
  356. package/resources/themes/md-dark-deeppurple/theme.css +372 -12
  357. package/resources/themes/md-dark-indigo/theme.css +372 -12
  358. package/resources/themes/md-light-deeppurple/theme.css +369 -9
  359. package/resources/themes/md-light-indigo/theme.css +369 -9
  360. package/resources/themes/mdc-dark-deeppurple/theme.css +372 -12
  361. package/resources/themes/mdc-dark-indigo/theme.css +372 -12
  362. package/resources/themes/mdc-light-deeppurple/theme.css +369 -9
  363. package/resources/themes/mdc-light-indigo/theme.css +369 -9
  364. package/resources/themes/nova/theme.css +298 -21
  365. package/resources/themes/nova-accent/theme.css +298 -21
  366. package/resources/themes/nova-alt/theme.css +298 -21
  367. package/resources/themes/nova-vue/theme.css +298 -21
  368. package/resources/themes/rhea/theme.css +298 -21
  369. package/resources/themes/saga-blue/theme.css +282 -5
  370. package/resources/themes/saga-green/theme.css +282 -5
  371. package/resources/themes/saga-orange/theme.css +282 -5
  372. package/resources/themes/saga-purple/theme.css +282 -5
  373. package/resources/themes/tailwind-light/theme.css +301 -24
  374. package/resources/themes/vela-blue/theme.css +299 -22
  375. package/resources/themes/vela-green/theme.css +299 -22
  376. package/resources/themes/vela-orange/theme.css +299 -22
  377. package/resources/themes/vela-purple/theme.css +299 -22
  378. package/ripple/ripple.common.js +22 -0
  379. package/ripple/ripple.umd.js +22 -0
  380. package/ripple/ripple.umd.min.js +1 -1
  381. package/row/row.common.js +1 -1
  382. package/row/row.umd.js +1 -1
  383. package/scrollpanel/scrollpanel.common.js +23 -1
  384. package/scrollpanel/scrollpanel.umd.js +23 -1
  385. package/scrollpanel/scrollpanel.umd.min.js +1 -1
  386. package/scrolltop/scrolltop.common.js +23 -1
  387. package/scrolltop/scrolltop.umd.js +23 -1
  388. package/scrolltop/scrolltop.umd.min.js +1 -1
  389. package/selectbutton/selectbutton.common.js +43 -14
  390. package/selectbutton/selectbutton.umd.js +43 -14
  391. package/selectbutton/selectbutton.umd.min.js +1 -1
  392. package/sidebar/Sidebar.vue +2 -0
  393. package/sidebar/sidebar.common.js +25 -3
  394. package/sidebar/sidebar.umd.js +25 -3
  395. package/sidebar/sidebar.umd.min.js +1 -1
  396. package/skeleton/skeleton.common.js +1 -1
  397. package/skeleton/skeleton.umd.js +1 -1
  398. package/slider/Slider.vue +20 -12
  399. package/slider/slider.common.js +36 -9
  400. package/slider/slider.umd.js +36 -9
  401. package/slider/slider.umd.min.js +1 -1
  402. package/speeddial/speeddial.common.js +26 -8
  403. package/speeddial/speeddial.umd.js +26 -8
  404. package/speeddial/speeddial.umd.min.js +1 -1
  405. package/splitbutton/SplitButton.vue +7 -3
  406. package/splitbutton/splitbutton.common.js +66 -44
  407. package/splitbutton/splitbutton.umd.js +66 -44
  408. package/splitbutton/splitbutton.umd.min.js +1 -1
  409. package/splitter/splitter.common.js +22 -0
  410. package/splitter/splitter.umd.js +22 -0
  411. package/splitter/splitter.umd.min.js +1 -1
  412. package/steps/Steps.vue +1 -1
  413. package/steps/steps.common.js +3 -3
  414. package/steps/steps.umd.js +3 -3
  415. package/steps/steps.umd.min.js +1 -1
  416. package/styleclass/styleclass.common.js +22 -0
  417. package/styleclass/styleclass.umd.js +22 -0
  418. package/styleclass/styleclass.umd.min.js +1 -1
  419. package/tabmenu/tabmenu.common.js +23 -1
  420. package/tabmenu/tabmenu.umd.js +23 -1
  421. package/tabmenu/tabmenu.umd.min.js +1 -1
  422. package/tabpanel/tabpanel.common.js +1 -1
  423. package/tabpanel/tabpanel.umd.js +1 -1
  424. package/tabview/TabView.vue +1 -1
  425. package/tabview/tabview.common.js +45 -16
  426. package/tabview/tabview.umd.js +45 -16
  427. package/tabview/tabview.umd.min.js +1 -1
  428. package/tag/Tag.vue +1 -1
  429. package/tag/tag.common.js +3 -3
  430. package/tag/tag.umd.js +3 -3
  431. package/tag/tag.umd.min.js +1 -1
  432. package/terminal/terminal.common.js +1 -1
  433. package/terminal/terminal.umd.js +1 -1
  434. package/textarea/textarea.common.js +3 -7
  435. package/textarea/textarea.umd.js +3 -7
  436. package/textarea/textarea.umd.min.js +1 -1
  437. package/tieredmenu/demo.html +3 -4
  438. package/tieredmenu/tieredmenu.common.js +24 -2
  439. package/tieredmenu/tieredmenu.umd.js +24 -2
  440. package/tieredmenu/tieredmenu.umd.min.js +1 -1
  441. package/tieredmenu/tieredmenusub.common.js +23 -1
  442. package/tieredmenu/tieredmenusub.umd.js +23 -1
  443. package/tieredmenu/tieredmenusub.umd.min.js +1 -1
  444. package/timeline/timeline.common.js +26 -14
  445. package/timeline/timeline.umd.js +26 -14
  446. package/timeline/timeline.umd.min.js +1 -1
  447. package/toast/toast.common.js +24 -2
  448. package/toast/toast.umd.js +24 -2
  449. package/toast/toast.umd.min.js +1 -1
  450. package/toast/toastmessage.common.js +23 -1
  451. package/toast/toastmessage.umd.js +23 -1
  452. package/toast/toastmessage.umd.min.js +1 -1
  453. package/togglebutton/togglebutton.common.js +23 -1
  454. package/togglebutton/togglebutton.umd.js +23 -1
  455. package/togglebutton/togglebutton.umd.min.js +1 -1
  456. package/toolbar/toolbar.common.js +1 -1
  457. package/toolbar/toolbar.umd.js +1 -1
  458. package/tooltip/Tooltip.js +1 -1
  459. package/tooltip/tooltip.common.js +29 -13
  460. package/tooltip/tooltip.umd.js +29 -13
  461. package/tooltip/tooltip.umd.min.js +1 -1
  462. package/tree/Tree.vue +1 -0
  463. package/tree/tree.common.js +53 -26
  464. package/tree/tree.umd.js +53 -26
  465. package/tree/tree.umd.min.js +1 -1
  466. package/tree/treenode.common.js +25 -7
  467. package/tree/treenode.umd.js +25 -7
  468. package/tree/treenode.umd.min.js +1 -1
  469. package/treetable/FooterCell.vue +81 -0
  470. package/treetable/HeaderCell.vue +183 -0
  471. package/treetable/TreeTable.d.ts +1 -0
  472. package/treetable/TreeTable.vue +65 -106
  473. package/treetable/TreeTableRow.vue +7 -4
  474. package/treetable/footercell.common.js +5304 -0
  475. package/treetable/footercell.umd.js +5314 -0
  476. package/treetable/footercell.umd.min.js +1 -0
  477. package/treetable/headercell.common.js +5533 -0
  478. package/treetable/headercell.umd.js +5543 -0
  479. package/treetable/headercell.umd.min.js +1 -0
  480. package/treetable/treetable.common.js +944 -507
  481. package/treetable/treetable.umd.js +944 -507
  482. package/treetable/treetable.umd.min.js +1 -1
  483. package/treetable/treetablerow.common.js +53 -22
  484. package/treetable/treetablerow.umd.js +53 -22
  485. package/treetable/treetablerow.umd.min.js +1 -1
  486. package/treetable/treetablerowloader.common.js +56 -26
  487. package/treetable/treetablerowloader.umd.js +56 -26
  488. package/treetable/treetablerowloader.umd.min.js +1 -1
  489. package/tristatecheckbox/tristatecheckbox.common.js +1 -1
  490. package/tristatecheckbox/tristatecheckbox.umd.js +1 -1
  491. package/utils/ConnectedOverlayScrollHandler.js +1 -1
  492. package/utils/DomHandler.js +18 -1
  493. package/utils/ObjectUtils.js +15 -2
  494. package/utils/Utils.d.ts +73 -0
  495. package/utils/Utils.js +47 -0
  496. package/utils/connectedoverlayscrollhandler.common.js +22 -0
  497. package/utils/connectedoverlayscrollhandler.umd.js +22 -0
  498. package/utils/connectedoverlayscrollhandler.umd.min.js +1 -1
  499. package/utils/demo.html +3 -3
  500. package/utils/domhandler.common.js +22 -0
  501. package/utils/domhandler.umd.js +22 -0
  502. package/utils/domhandler.umd.min.js +1 -1
  503. package/utils/index.d.ts +1 -0
  504. package/utils/index.js +2 -0
  505. package/utils/objectutils.common.js +25 -13
  506. package/utils/objectutils.umd.js +25 -13
  507. package/utils/objectutils.umd.min.js +1 -1
  508. package/utils/utils.common.js +5486 -0
  509. package/utils/utils.umd.js +5496 -0
  510. package/utils/utils.umd.min.js +1 -0
  511. package/vetur-attributes.json +28 -0
  512. package/vetur-tags.json +11 -4
  513. package/web-types.json +84 -1
  514. package/datatable/ScrollableView.vue +0 -223
  515. package/datatable/scrollableview.umd.min.js +0 -1
  516. package/resources/themes/lara-dark-blue/fonts/Inter-Bold.woff +0 -0
  517. package/resources/themes/lara-dark-blue/fonts/Inter-Bold.woff2 +0 -0
  518. package/resources/themes/lara-dark-blue/fonts/Inter-Light.woff +0 -0
  519. package/resources/themes/lara-dark-blue/fonts/Inter-Light.woff2 +0 -0
  520. package/resources/themes/lara-dark-blue/fonts/Inter-Medium.woff +0 -0
  521. package/resources/themes/lara-dark-blue/fonts/Inter-Medium.woff2 +0 -0
  522. package/resources/themes/lara-dark-blue/fonts/Inter-Regular.woff +0 -0
  523. package/resources/themes/lara-dark-blue/fonts/Inter-Regular.woff2 +0 -0
  524. package/resources/themes/lara-dark-blue/fonts/Inter-SemiBold.woff +0 -0
  525. package/resources/themes/lara-dark-blue/fonts/Inter-SemiBold.woff2 +0 -0
  526. package/resources/themes/lara-dark-indigo/fonts/Inter-Bold.woff +0 -0
  527. package/resources/themes/lara-dark-indigo/fonts/Inter-Bold.woff2 +0 -0
  528. package/resources/themes/lara-dark-indigo/fonts/Inter-Light.woff +0 -0
  529. package/resources/themes/lara-dark-indigo/fonts/Inter-Light.woff2 +0 -0
  530. package/resources/themes/lara-dark-indigo/fonts/Inter-Medium.woff +0 -0
  531. package/resources/themes/lara-dark-indigo/fonts/Inter-Medium.woff2 +0 -0
  532. package/resources/themes/lara-dark-indigo/fonts/Inter-Regular.woff +0 -0
  533. package/resources/themes/lara-dark-indigo/fonts/Inter-Regular.woff2 +0 -0
  534. package/resources/themes/lara-dark-indigo/fonts/Inter-SemiBold.woff +0 -0
  535. package/resources/themes/lara-dark-indigo/fonts/Inter-SemiBold.woff2 +0 -0
  536. package/resources/themes/lara-dark-purple/fonts/Inter-Bold.woff +0 -0
  537. package/resources/themes/lara-dark-purple/fonts/Inter-Bold.woff2 +0 -0
  538. package/resources/themes/lara-dark-purple/fonts/Inter-Light.woff +0 -0
  539. package/resources/themes/lara-dark-purple/fonts/Inter-Light.woff2 +0 -0
  540. package/resources/themes/lara-dark-purple/fonts/Inter-Medium.woff +0 -0
  541. package/resources/themes/lara-dark-purple/fonts/Inter-Medium.woff2 +0 -0
  542. package/resources/themes/lara-dark-purple/fonts/Inter-Regular.woff +0 -0
  543. package/resources/themes/lara-dark-purple/fonts/Inter-Regular.woff2 +0 -0
  544. package/resources/themes/lara-dark-purple/fonts/Inter-SemiBold.woff +0 -0
  545. package/resources/themes/lara-dark-purple/fonts/Inter-SemiBold.woff2 +0 -0
  546. package/resources/themes/lara-dark-teal/fonts/Inter-Bold.woff +0 -0
  547. package/resources/themes/lara-dark-teal/fonts/Inter-Bold.woff2 +0 -0
  548. package/resources/themes/lara-dark-teal/fonts/Inter-Light.woff +0 -0
  549. package/resources/themes/lara-dark-teal/fonts/Inter-Light.woff2 +0 -0
  550. package/resources/themes/lara-dark-teal/fonts/Inter-Medium.woff +0 -0
  551. package/resources/themes/lara-dark-teal/fonts/Inter-Medium.woff2 +0 -0
  552. package/resources/themes/lara-dark-teal/fonts/Inter-Regular.woff +0 -0
  553. package/resources/themes/lara-dark-teal/fonts/Inter-Regular.woff2 +0 -0
  554. package/resources/themes/lara-dark-teal/fonts/Inter-SemiBold.woff +0 -0
  555. package/resources/themes/lara-dark-teal/fonts/Inter-SemiBold.woff2 +0 -0
  556. package/resources/themes/lara-light-blue/fonts/Inter-Bold.woff +0 -0
  557. package/resources/themes/lara-light-blue/fonts/Inter-Bold.woff2 +0 -0
  558. package/resources/themes/lara-light-blue/fonts/Inter-Light.woff +0 -0
  559. package/resources/themes/lara-light-blue/fonts/Inter-Light.woff2 +0 -0
  560. package/resources/themes/lara-light-blue/fonts/Inter-Medium.woff +0 -0
  561. package/resources/themes/lara-light-blue/fonts/Inter-Medium.woff2 +0 -0
  562. package/resources/themes/lara-light-blue/fonts/Inter-Regular.woff +0 -0
  563. package/resources/themes/lara-light-blue/fonts/Inter-Regular.woff2 +0 -0
  564. package/resources/themes/lara-light-blue/fonts/Inter-SemiBold.woff +0 -0
  565. package/resources/themes/lara-light-blue/fonts/Inter-SemiBold.woff2 +0 -0
  566. package/resources/themes/lara-light-indigo/fonts/Inter-Bold.woff +0 -0
  567. package/resources/themes/lara-light-indigo/fonts/Inter-Bold.woff2 +0 -0
  568. package/resources/themes/lara-light-indigo/fonts/Inter-Light.woff +0 -0
  569. package/resources/themes/lara-light-indigo/fonts/Inter-Light.woff2 +0 -0
  570. package/resources/themes/lara-light-indigo/fonts/Inter-Medium.woff +0 -0
  571. package/resources/themes/lara-light-indigo/fonts/Inter-Medium.woff2 +0 -0
  572. package/resources/themes/lara-light-indigo/fonts/Inter-Regular.woff +0 -0
  573. package/resources/themes/lara-light-indigo/fonts/Inter-Regular.woff2 +0 -0
  574. package/resources/themes/lara-light-indigo/fonts/Inter-SemiBold.woff +0 -0
  575. package/resources/themes/lara-light-indigo/fonts/Inter-SemiBold.woff2 +0 -0
  576. package/resources/themes/lara-light-purple/fonts/Inter-Bold.woff +0 -0
  577. package/resources/themes/lara-light-purple/fonts/Inter-Bold.woff2 +0 -0
  578. package/resources/themes/lara-light-purple/fonts/Inter-Light.woff +0 -0
  579. package/resources/themes/lara-light-purple/fonts/Inter-Light.woff2 +0 -0
  580. package/resources/themes/lara-light-purple/fonts/Inter-Medium.woff +0 -0
  581. package/resources/themes/lara-light-purple/fonts/Inter-Medium.woff2 +0 -0
  582. package/resources/themes/lara-light-purple/fonts/Inter-Regular.woff +0 -0
  583. package/resources/themes/lara-light-purple/fonts/Inter-Regular.woff2 +0 -0
  584. package/resources/themes/lara-light-purple/fonts/Inter-SemiBold.woff +0 -0
  585. package/resources/themes/lara-light-purple/fonts/Inter-SemiBold.woff2 +0 -0
  586. package/resources/themes/lara-light-teal/fonts/Inter-Bold.woff +0 -0
  587. package/resources/themes/lara-light-teal/fonts/Inter-Bold.woff2 +0 -0
  588. package/resources/themes/lara-light-teal/fonts/Inter-Light.woff +0 -0
  589. package/resources/themes/lara-light-teal/fonts/Inter-Light.woff2 +0 -0
  590. package/resources/themes/lara-light-teal/fonts/Inter-Medium.woff +0 -0
  591. package/resources/themes/lara-light-teal/fonts/Inter-Medium.woff2 +0 -0
  592. package/resources/themes/lara-light-teal/fonts/Inter-Regular.woff +0 -0
  593. package/resources/themes/lara-light-teal/fonts/Inter-Regular.woff2 +0 -0
  594. package/resources/themes/lara-light-teal/fonts/Inter-SemiBold.woff +0 -0
  595. package/resources/themes/lara-light-teal/fonts/Inter-SemiBold.woff2 +0 -0
  596. package/utils/FilterUtils.js +0 -176
  597. package/utils/filterutils.umd.min.js +0 -1
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div :class="containerClass">
2
+ <div :class="containerClass" data-scrollselectors=".p-datatable-wrapper">
3
3
  <slot></slot>
4
4
  <div class="p-datatable-loading-overlay p-component-overlay" v-if="loading">
5
5
  <i :class="loadingIconClass"></i>
@@ -16,101 +16,37 @@
16
16
  <slot name="paginatorend"></slot>
17
17
  </template>
18
18
  </DTPaginator>
19
- <div class="p-datatable-wrapper" v-if="!scrollable">
20
- <table ref="table" role="grid">
19
+ <div class="p-datatable-wrapper" :style="{maxHeight: scrollHeight}">
20
+ <table ref="table" role="table" :class="[tableClass, 'p-datatable-table']" :style="tableStyle">
21
21
  <DTTableHeader :columnGroup="headerColumnGroup" :columns="columns" :rowGroupMode="rowGroupMode"
22
- :groupRowsBy="groupRowsBy" :resizableColumns="resizableColumns" :allRowsSelected="allRowsSelected" :empty="empty"
23
- :sortMode="sortMode" :sortField="d_sortField" :sortOrder="d_sortOrder" :multiSortMeta="d_multiSortMeta"
24
- @column-click="onColumnHeaderClick($event)" @column-mousedown="onColumnHeaderMouseDown($event)"
22
+ :groupRowsBy="groupRowsBy" :groupRowSortField="groupRowSortField" :resizableColumns="resizableColumns" :allRowsSelected="allRowsSelected" :empty="empty"
23
+ :sortMode="sortMode" :sortField="d_sortField" :sortOrder="d_sortOrder" :multiSortMeta="d_multiSortMeta" :filters="d_filters" :filtersStore="filters" :filterDisplay="filterDisplay"
24
+ @column-click="onColumnHeaderClick($event)" @column-mousedown="onColumnHeaderMouseDown($event)" @filter-change="onFilterChange" @filter-apply="onFilterApply"
25
25
  @column-dragstart="onColumnHeaderDragStart($event)" @column-dragover="onColumnHeaderDragOver($event)" @column-dragleave="onColumnHeaderDragLeave($event)" @column-drop="onColumnHeaderDrop($event)"
26
26
  @column-resizestart="onColumnResizeStart($event)" @checkbox-change="toggleRowsWithCheckbox($event)" />
27
+ <DTTableBody v-if="frozenValue" :value="frozenValue" :frozenRow="true" class="p-datatable-frozen-tbody" :columns="columns" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
28
+ :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy" :scrollable="scrollable"
29
+ :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
30
+ :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading" :responsiveLayout="responsiveLayout"
31
+ @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-dblclick="onRowDblClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
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
+ @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
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)"
36
+ :editingMeta="d_editingMeta" @editing-meta-change="onEditingMetaChange" />
27
37
  <DTTableBody :value="dataToRender" :columns="columns" :empty="empty" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
28
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy"
38
+ :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy" :scrollable="scrollable"
29
39
  :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
30
- :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading"
40
+ :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading" :responsiveLayout="responsiveLayout"
31
41
  @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-dblclick="onRowDblClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
32
42
  @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
33
43
  @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
34
44
  @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)"/>
45
+ @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"
46
+ :editingMeta="d_editingMeta" @editing-meta-change="onEditingMetaChange" />
36
47
  <DTTableFooter :columnGroup="footerColumnGroup" :columns="columns" />
37
48
  </table>
38
49
  </div>
39
- <div class="p-datatable-scrollable-wrapper" v-else>
40
- <DTScrollableView v-if="hasFrozenColumns" :scrollHeight="scrollHeight" :columns="frozenColumns" :frozenWidth="frozenWidth" :frozen="true"
41
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy">
42
- <template #header>
43
- <DTTableHeader :columnGroup="frozenHeaderColumnGroup" :columns="frozenColumns" :rowGroupMode="rowGroupMode"
44
- :groupRowsBy="groupRowsBy" :resizableColumns="resizableColumns" :allRowsSelected="allRowsSelected" :empty="empty"
45
- :sortMode="sortMode" :sortField="d_sortField" :sortOrder="d_sortOrder" :multiSortMeta="d_multiSortMeta"
46
- @column-click="onColumnHeaderClick($event)" @column-mousedown="onColumnHeaderMouseDown($event)"
47
- @column-dragstart="onColumnHeaderDragStart($event)" @column-dragover="onColumnHeaderDragOver($event)" @column-dragleave="onColumnHeaderDragLeave($event)" @column-drop="onColumnHeaderDrop($event)"
48
- @column-resizestart="onColumnResizeStart($event)" @checkbox-change="toggleRowsWithCheckbox($event)" />
49
- </template>
50
- <template #body>
51
- <DTTableBody :value="dataToRender" :columns="frozenColumns" :empty="empty" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
52
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy"
53
- :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
54
- :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading"
55
- @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
56
- @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
57
- @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
58
- @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
59
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"/>
60
- </template>
61
- <template #frozenbody>
62
- <DTTableBody v-if="frozenValue" :value="frozenValue" :columns="frozenColumns" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
63
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy"
64
- :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
65
- :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading"
66
- @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
67
- @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
68
- @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
69
- @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
70
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"/>
71
- </template>
72
- <template #footer>
73
- <DTTableFooter :columnGroup="frozenFooterColumnGroup" :columns="frozenColumns" />
74
- </template>
75
- </DTScrollableView>
76
- <DTScrollableView :scrollHeight="scrollHeight" :columns="scrollableColumns" :frozenWidth="frozenWidth" :rows="rows"
77
- :virtualScroll="virtualScroll" :virtualRowHeight="virtualRowHeight" :totalRecords="totalRecordsLength" @virtual-scroll="onVirtualScroll"
78
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy">
79
- <template #header>
80
- <DTTableHeader :columnGroup="headerColumnGroup" :columns="scrollableColumns" :rowGroupMode="rowGroupMode"
81
- :groupRowsBy="groupRowsBy" :resizableColumns="resizableColumns" :allRowsSelected="allRowsSelected" :empty="empty"
82
- :sortMode="sortMode" :sortField="d_sortField" :sortOrder="d_sortOrder" :multiSortMeta="d_multiSortMeta"
83
- @column-click="onColumnHeaderClick($event)" @column-mousedown="onColumnHeaderMouseDown($event)"
84
- @column-dragstart="onColumnHeaderDragStart($event)" @column-dragover="onColumnHeaderDragOver($event)" @column-dragleave="onColumnHeaderDragLeave($event)" @column-drop="onColumnHeaderDrop($event)"
85
- @column-resizestart="onColumnResizeStart($event)" @checkbox-change="toggleRowsWithCheckbox($event)" />
86
- </template>
87
- <template #body>
88
- <DTTableBody :value="dataToRender" :columns="scrollableColumns" :empty="empty" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
89
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy"
90
- :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
91
- :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading"
92
- @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
93
- @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
94
- @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
95
- @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
96
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"/>
97
- </template>
98
- <template #frozenbody>
99
- <DTTableBody v-if="frozenValue" :value="frozenValue" :columns="scrollableColumns" :dataKey="dataKey" :selection="selection" :selectionKeys="d_selectionKeys" :selectionMode="selectionMode" :contextMenu="contextMenu" :contextMenuSelection="contextMenuSelection"
100
- :rowGroupMode="rowGroupMode" :groupRowsBy="groupRowsBy" :expandableRowGroups="expandableRowGroups" :rowClass="rowClass" :rowStyle="rowStyle" :editMode="editMode" :compareSelectionBy="compareSelectionBy"
101
- :expandedRowIcon="expandedRowIcon" :collapsedRowIcon="collapsedRowIcon" :expandedRows="expandedRows" :expandedRowKeys="d_expandedRowKeys" :expandedRowGroups="expandedRowGroups"
102
- :editingRows="editingRows" :editingRowKeys="d_editingRowKeys" :templates="$scopedSlots" :loading="loading"
103
- @rowgroup-toggle="toggleRowGroup" @row-click="onRowClick($event)" @row-rightclick="onRowRightClick($event)" @row-touchend="onRowTouchEnd" @row-keydown="onRowKeyDown"
104
- @row-mousedown="onRowMouseDown" @row-dragstart="onRowDragStart($event)" @row-dragover="onRowDragOver($event)" @row-dragleave="onRowDragLeave($event)" @row-dragend="onRowDragEnd($event)" @row-drop="onRowDrop($event)"
105
- @row-toggle="toggleRow($event)" @radio-change="toggleRowWithRadio($event)" @checkbox-change="toggleRowWithCheckbox($event)"
106
- @cell-edit-init="onCellEditInit($event)" @cell-edit-complete="onCellEditComplete($event)" @cell-edit-cancel="onCellEditCancel($event)"
107
- @row-edit-init="onRowEditInit($event)" @row-edit-save="onRowEditSave($event)" @row-edit-cancel="onRowEditCancel($event)"/>
108
- </template>
109
- <template #footer>
110
- <DTTableFooter :columnGroup="footerColumnGroup" :columns="scrollableColumns" />
111
- </template>
112
- </DTScrollableView>
113
- </div>
114
50
  <DTPaginator v-if="paginatorBottom" :rows="d_rows" :first="lazy ? 0 : d_first" :totalRecords="totalRecordsLength" :pageLinkSize="pageLinkSize" :template="paginatorTemplate" :rowsPerPageOptions="rowsPerPageOptions"
115
51
  :currentPageReportTemplate="currentPageReportTemplate" class="p-paginator-bottom" @page="onPage($event)" :alwaysShow="alwaysShowPaginator">
116
52
  <template #start v-if="$scopedSlots.paginatorstart">
@@ -131,10 +67,12 @@
131
67
 
132
68
  <script>
133
69
  import ObjectUtils from '../utils/ObjectUtils';
134
- import FilterUtils from '../utils/FilterUtils';
135
70
  import DomHandler from '../utils/DomHandler';
136
- import Paginator from '../paginator/Paginator';
137
- import ScrollableView from './ScrollableView.vue';
71
+ import UniqueComponentId from '../utils/UniqueComponentId';
72
+ import FilterMatchMode from '../api/FilterMatchMode';
73
+ import FilterOperator from '../api/FilterOperator';
74
+ import FilterService from '../api/FilterService';
75
+ import Paginator from '../paginator/Paginator.vue';
138
76
  import TableHeader from './TableHeader.vue';
139
77
  import TableBody from './TableBody.vue';
140
78
  import TableFooter from './TableFooter.vue';
@@ -229,6 +167,14 @@ export default {
229
167
  type: Object,
230
168
  default: null
231
169
  },
170
+ filterDisplay: {
171
+ type: String,
172
+ default: null
173
+ },
174
+ globalFilterFields: {
175
+ type: Array,
176
+ default: null
177
+ },
232
178
  filterLocale: {
233
179
  type: String,
234
180
  default: undefined
@@ -257,6 +203,10 @@ export default {
257
203
  type: Object,
258
204
  default: null
259
205
  },
206
+ selectAll: {
207
+ type: Boolean,
208
+ default: null
209
+ },
260
210
  rowHover: {
261
211
  type: Boolean,
262
212
  default: false
@@ -269,6 +219,10 @@ export default {
269
219
  type: String,
270
220
  default: 'download'
271
221
  },
222
+ exportFunction: {
223
+ type: Function,
224
+ default: null
225
+ },
272
226
  autoLayout: {
273
227
  type: Boolean,
274
228
  default: false
@@ -341,6 +295,10 @@ export default {
341
295
  type: Boolean,
342
296
  default: false
343
297
  },
298
+ scrollDirection: {
299
+ type: String,
300
+ default: "vertical"
301
+ },
344
302
  scrollHeight: {
345
303
  type: String,
346
304
  default: null
@@ -349,21 +307,29 @@ export default {
349
307
  type: Array,
350
308
  default: null
351
309
  },
352
- frozenWidth: {
310
+ responsiveLayout: {
353
311
  type: String,
354
- default: null
312
+ default: 'stack'
313
+ },
314
+ breakpoint: {
315
+ type: String,
316
+ default: '960px'
355
317
  },
356
- virtualScroll: {
318
+ showGridlines: {
357
319
  type: Boolean,
358
320
  default: false
359
321
  },
360
- virtualRowHeight: {
361
- type: Number,
362
- default: 28
322
+ stripedRows: {
323
+ type: Boolean,
324
+ default: false
363
325
  },
364
- virtualScrollDelay: {
365
- type: Number,
366
- default: 150
326
+ tableStyle: {
327
+ type: null,
328
+ default: null
329
+ },
330
+ tableClass: {
331
+ type: String,
332
+ default: null
367
333
  }
368
334
  },
369
335
  data() {
@@ -374,10 +340,13 @@ export default {
374
340
  d_sortField: this.sortField,
375
341
  d_sortOrder: this.sortOrder,
376
342
  d_multiSortMeta: this.multiSortMeta ? [...this.multiSortMeta] : [],
343
+ d_groupRowsSortMeta: null,
377
344
  d_selectionKeys: null,
378
345
  d_expandedRowKeys: null,
379
346
  d_columnOrder: null,
380
- d_editingRowKeys: null
347
+ d_editingRowKeys: null,
348
+ d_editingMeta: {},
349
+ d_filters: this.cloneFilters(this.filters)
381
350
  };
382
351
  },
383
352
  rowTouched: false,
@@ -397,7 +366,6 @@ export default {
397
366
  columnWidthsState: null,
398
367
  tableWidthState: null,
399
368
  columnWidthsRestored: false,
400
- virtualScrollTimer: null,
401
369
  watch: {
402
370
  first(newValue) {
403
371
  this.d_first = newValue;
@@ -414,9 +382,12 @@ export default {
414
382
  multiSortMeta(newValue) {
415
383
  this.d_multiSortMeta = newValue;
416
384
  },
417
- selection(newValue) {
418
- if (this.dataKey) {
419
- this.updateSelectionKeys(newValue);
385
+ selection: {
386
+ immediate: true,
387
+ handler(newValue) {
388
+ if (this.dataKey) {
389
+ this.updateSelectionKeys(newValue);
390
+ }
420
391
  }
421
392
  },
422
393
  expandedRows(newValue) {
@@ -428,6 +399,12 @@ export default {
428
399
  if (this.dataKey) {
429
400
  this.updateEditingRowKeys(newValue);
430
401
  }
402
+ },
403
+ filters: {
404
+ deep: true,
405
+ handler: function(newValue) {
406
+ this.d_filters = this.cloneFilters(newValue);
407
+ }
431
408
  }
432
409
  },
433
410
  beforeMount() {
@@ -448,25 +425,41 @@ export default {
448
425
  this.d_columnOrder = columnOrder;
449
426
  }
450
427
 
451
- if (this.resizableColumns && !this.columnWidthsRestored) {
428
+ this.$el.setAttribute(this.attributeSelector, '');
429
+
430
+ if (this.responsiveLayout === 'stack' && !this.scrollable) {
431
+ this.createResponsiveStyle();
432
+ }
433
+
434
+ if (this.isStateful() && this.resizableColumns) {
452
435
  this.restoreColumnWidths();
453
436
  }
437
+
438
+ if (this.editMode === 'row' && this.dataKey && !this.d_editingRowKeys) {
439
+ this.updateEditingRowKeys(this.editingRows);
440
+ }
454
441
  },
455
- beforeDestroy() {
442
+ beforeUnmount() {
456
443
  this.unbindColumnResizeEvents();
444
+ this.destroyStyleElement();
445
+ this.destroyResponsiveStyle();
457
446
  },
458
447
  updated() {
459
448
  if (this.isStateful()) {
460
449
  this.saveState();
450
+ }
461
451
 
462
- if (this.resizableColumns && !this.columnWidthsRestored) {
463
- this.restoreColumnWidths();
464
- this.columnWidthsRestored = true;
465
- }
452
+ if (this.editMode === 'row' && this.dataKey && !this.d_editingRowKeys) {
453
+ this.updateEditingRowKeys(this.editingRows);
466
454
  }
467
455
  },
468
456
  methods: {
457
+ columnProp(col, prop) {
458
+ return ObjectUtils.getVNodeProp(col, prop);
459
+ },
469
460
  onPage(event) {
461
+ this.clearEditingMetaData();
462
+
470
463
  this.d_first = event.first;
471
464
  this.d_rows = event.rows;
472
465
 
@@ -477,14 +470,15 @@ export default {
477
470
  this.$emit('update:first', this.d_first);
478
471
  this.$emit('update:rows', this.d_rows);
479
472
  this.$emit('page', pageEvent);
473
+ this.$emit('value-change', this.processedData);
480
474
  },
481
475
  onColumnHeaderClick(e) {
482
476
  const event = e.originalEvent;
483
477
  const column = e.column;
484
478
 
485
- if (column.sortable) {
479
+ if (this.columnProp(column, 'sortable')) {
486
480
  const targetNode = event.target;
487
- const columnField = column.sortField || column.field;
481
+ const columnField = this.columnProp(column, 'sortField') || this.columnProp(column, 'field');
488
482
 
489
483
  if (DomHandler.hasClass(targetNode, 'p-sortable-column') || DomHandler.hasClass(targetNode, 'p-column-title')
490
484
  || DomHandler.hasClass(targetNode, 'p-sortable-column-icon') || DomHandler.hasClass(targetNode.parentElement, 'p-sortable-column-icon')) {
@@ -520,10 +514,22 @@ export default {
520
514
  }
521
515
 
522
516
  this.$emit('sort', this.createLazyLoadEvent(event));
517
+ this.$emit('value-change', this.processedData);
523
518
  }
524
519
  }
525
520
  },
526
521
  sortSingle(value) {
522
+ this.clearEditingMetaData();
523
+
524
+ if (this.groupRowsBy && this.groupRowsBy === this.sortField) {
525
+ this.d_multiSortMeta = [
526
+ {field: this.sortField, order: this.sortOrder || this.defaultSortOrder},
527
+ {field: this.d_sortField, order: this.d_sortOrder}
528
+ ];
529
+
530
+ return this.sortMultiple(value);
531
+ }
532
+
527
533
  let data = [...value];
528
534
 
529
535
  data.sort((data1, data2) => {
@@ -549,6 +555,17 @@ export default {
549
555
  return data;
550
556
  },
551
557
  sortMultiple(value) {
558
+ this.clearEditingMetaData();
559
+
560
+ if (this.groupRowsBy && (this.d_groupRowsSortMeta || (this.d_multiSortMeta.length && this.groupRowsBy === this.d_multiSortMeta[0].field))) {
561
+ const firstSortMeta = this.d_multiSortMeta[0];
562
+ !this.d_groupRowsSortMeta && (this.d_groupRowsSortMeta = firstSortMeta);
563
+
564
+ if (firstSortMeta.field !== this.d_groupRowsSortMeta.field) {
565
+ this.d_multiSortMeta = [this.d_groupRowsSortMeta, ...this.d_multiSortMeta];
566
+ }
567
+ }
568
+
552
569
  let data = [...value];
553
570
 
554
571
  data.sort((data1, data2) => {
@@ -593,55 +610,92 @@ export default {
593
610
  this.d_multiSortMeta = [...this.d_multiSortMeta];
594
611
  },
595
612
  filter(data) {
613
+ if (!data) {
614
+ return;
615
+ }
616
+
617
+ this.clearEditingMetaData();
618
+
619
+ let globalFilterFieldsArray;
620
+ if (this.filters['global']) {
621
+ globalFilterFieldsArray = this.globalFilterFields|| this.columns.map(col => this.columnProp(col, 'filterField') || this.columnProp(col, 'field'));
622
+ }
623
+
596
624
  let filteredValue = [];
597
625
 
598
- for(let i = 0; i < data.length; i++) {
626
+ for (let i = 0; i < data.length; i++) {
599
627
  let localMatch = true;
600
628
  let globalMatch = false;
629
+ let localFiltered = false;
630
+
631
+ for (let prop in this.filters) {
632
+ if (Object.prototype.hasOwnProperty.call(this.filters, prop) && prop !== 'global') {
633
+ localFiltered = true;
634
+ let filterField = prop;
635
+ let filterMeta = this.filters[filterField];
601
636
 
602
- for(let j = 0; j < this.columns.length; j++) {
603
- let col = this.columns[j];
604
- let columnField = col.filterField || col.field;
605
-
606
- //local
607
- if (Object.prototype.hasOwnProperty.call(this.filters, columnField)) {
608
- let filterValue = this.filters[columnField];
609
- let dataFieldValue = ObjectUtils.resolveFieldData(data[i], columnField);
610
- let filterConstraint = col.filterMatchMode === 'custom' ? col.filterFunction : FilterUtils[col.filterMatchMode];
611
- if (!filterConstraint(dataFieldValue, filterValue, this.filterLocale)) {
612
- localMatch = false;
637
+ if (filterMeta.operator) {
638
+ for (let filterConstraint of filterMeta.constraints) {
639
+ localMatch = this.executeLocalFilter(filterField, data[i], filterConstraint);
640
+
641
+ if ((filterMeta.operator === FilterOperator.OR && localMatch) || (filterMeta.operator === FilterOperator.AND && !localMatch)) {
642
+ break;
643
+ }
644
+ }
645
+ }
646
+ else {
647
+ localMatch = this.executeLocalFilter(filterField, data[i], filterMeta);
613
648
  }
614
649
 
615
650
  if (!localMatch) {
616
651
  break;
617
652
  }
618
653
  }
654
+ }
655
+
656
+ if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
657
+ for(let j = 0; j < globalFilterFieldsArray.length; j++) {
658
+ let globalFilterField = globalFilterFieldsArray[j];
659
+ globalMatch = FilterService.filters[this.filters['global'].matchMode || FilterMatchMode.CONTAINS](ObjectUtils.resolveFieldData(data[i], globalFilterField), this.filters['global'].value, this.filterLocale);
619
660
 
620
- if (!col.excludeGlobalFilter && this.hasGlobalFilter() && !globalMatch) {
621
- globalMatch = FilterUtils.contains(ObjectUtils.resolveFieldData(data[i], columnField), this.filters['global'], this.filterLocale);
661
+ if (globalMatch) {
662
+ break;
663
+ }
622
664
  }
623
665
  }
624
666
 
625
- let matches = localMatch;
626
- if(this.hasGlobalFilter()) {
627
- matches = localMatch && globalMatch;
667
+ let matches;
668
+ if (this.filters['global']) {
669
+ matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;
670
+ }
671
+ else {
672
+ matches = localFiltered && localMatch;
628
673
  }
629
674
 
630
- if(matches) {
675
+ if (matches) {
631
676
  filteredValue.push(data[i]);
632
677
  }
633
678
  }
634
679
 
635
- if (filteredValue.length === data.length) {
680
+ if (filteredValue.length === this.value.length) {
636
681
  filteredValue = data;
637
682
  }
638
683
 
639
684
  let filterEvent = this.createLazyLoadEvent();
640
685
  filterEvent.filteredValue = filteredValue;
641
686
  this.$emit('filter', filterEvent);
687
+ this.$emit('value-change', filteredValue);
642
688
 
643
689
  return filteredValue;
644
690
  },
691
+ executeLocalFilter(field, rowData, filterMeta) {
692
+ let filterValue = filterMeta.value;
693
+ let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;
694
+ let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);
695
+ let filterConstraint = FilterService.filters[filterMatchMode];
696
+
697
+ return filterConstraint(dataFieldValue, filterValue, this.filterLocale);
698
+ },
645
699
  onRowClick(e) {
646
700
  const event = e.originalEvent;
647
701
  if (DomHandler.isClickable(event.target)) {
@@ -652,7 +706,7 @@ export default {
652
706
 
653
707
  if (this.selectionMode) {
654
708
  const rowData = e.data;
655
- const rowIndex = e.index + this.d_first;
709
+ const rowIndex = this.d_first + e.index;
656
710
 
657
711
  if (this.isMultipleSelectionMode() && event.shiftKey && this.anchorRowIndex != null) {
658
712
  DomHandler.clearSelection();
@@ -678,7 +732,7 @@ export default {
678
732
  this.$emit('update:selection', _selection);
679
733
  }
680
734
 
681
- this.$emit('row-unselect', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
735
+ this.$emit('row-unselect', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
682
736
  }
683
737
  else {
684
738
  if(this.isSingleSelectionMode()) {
@@ -690,18 +744,18 @@ export default {
690
744
  this.$emit('update:selection', _selection);
691
745
  }
692
746
 
693
- this.$emit('row-select', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
747
+ this.$emit('row-select', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
694
748
  }
695
749
  }
696
750
  else {
697
751
  if (this.selectionMode === 'single') {
698
752
  if (selected) {
699
753
  this.$emit('update:selection', null);
700
- this.$emit('row-unselect', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
754
+ this.$emit('row-unselect', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
701
755
  }
702
756
  else {
703
757
  this.$emit('update:selection', rowData);
704
- this.$emit('row-select', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
758
+ this.$emit('row-select', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
705
759
  }
706
760
  }
707
761
  else if (this.selectionMode === 'multiple') {
@@ -709,12 +763,12 @@ export default {
709
763
  const selectionIndex = this.findIndexInSelection(rowData);
710
764
  const _selection = this.selection.filter((val, i) => i != selectionIndex);
711
765
  this.$emit('update:selection', _selection);
712
- this.$emit('row-unselect', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
766
+ this.$emit('row-unselect', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
713
767
  }
714
768
  else {
715
769
  const _selection = this.selection ? [...this.selection, rowData] : [rowData];
716
770
  this.$emit('update:selection', _selection);
717
- this.$emit('row-select', {originalEvent: event, data: rowData, index: event.index, type: 'row'});
771
+ this.$emit('row-select', {originalEvent: event, data: rowData, index: rowIndex, type: 'row'});
718
772
  }
719
773
  }
720
774
  }
@@ -728,6 +782,7 @@ export default {
728
782
  if (DomHandler.isClickable(event.target)) {
729
783
  return;
730
784
  }
785
+
731
786
  this.$emit('row-dblclick', e);
732
787
  },
733
788
  onRowRightClick(event) {
@@ -809,11 +864,11 @@ export default {
809
864
 
810
865
  if (this.isSelected(rowData)) {
811
866
  this.$emit('update:selection', null);
812
- this.$emit('row-unselect', {originalEvent: event, data: rowData, type: 'radiobutton'});
867
+ this.$emit('row-unselect', { originalEvent: event.originalEvent, data: rowData, index: event.index, type: 'radiobutton' });
813
868
  }
814
869
  else {
815
870
  this.$emit('update:selection', rowData);
816
- this.$emit('row-select', {originalEvent: event, data: rowData, type: 'radiobutton'});
871
+ this.$emit('row-select', { originalEvent: event.originalEvent, data: rowData, index: event.index, type: 'radiobutton' });
817
872
  }
818
873
  },
819
874
  toggleRowWithCheckbox(event) {
@@ -823,25 +878,34 @@ export default {
823
878
  const selectionIndex = this.findIndexInSelection(rowData);
824
879
  const _selection = this.selection.filter((val, i) => i != selectionIndex);
825
880
  this.$emit('update:selection', _selection);
826
- this.$emit('row-unselect', {originalEvent: event, data: rowData, type: 'checkbox'});
881
+ this.$emit('row-unselect', { originalEvent: event.originalEvent, data: rowData, index: event.index, type: 'checkbox' });
827
882
  }
828
883
  else {
829
884
  let _selection = this.selection ? [...this.selection] : [];
830
885
  _selection = [..._selection, rowData];
831
886
  this.$emit('update:selection', _selection);
832
- this.$emit('row-select', {originalEvent: event, data: rowData, type: 'checkbox'});
887
+ this.$emit('row-select', { originalEvent: event.originalEvent, data: rowData, index: event.index, type: 'checkbox' });
833
888
  }
834
889
  },
835
890
  toggleRowsWithCheckbox(event) {
836
- const processedData = this.processedData;
837
- const checked = this.allRowsSelected;
838
- const _selection = checked ? [] : (processedData ? [...processedData] : [...this.value]);
839
- this.$emit('update:selection', _selection);
891
+ if (this.selectAll !== null) {
892
+ this.$emit('select-all-change', event);
893
+ }
894
+ else {
895
+ const { originalEvent, checked } = event;
896
+ let _selection = [];
840
897
 
841
- if (checked)
842
- this.$emit('row-unselect-all', {originalEvent: event});
843
- else
844
- this.$emit('row-select-all', {originalEvent: event, data: _selection});
898
+ if (checked) {
899
+ _selection = this.frozenValue ? [...this.frozenValue, ...this.processedData] : this.processedData;
900
+ this.$emit('row-select-all', {originalEvent, data: _selection});
901
+ }
902
+ else {
903
+ this.$emit('row-unselect-all', {originalEvent});
904
+ }
905
+
906
+ this.$emit('update:selection', _selection);
907
+
908
+ }
845
909
  },
846
910
  isSingleSelectionMode() {
847
911
  return this.selectionMode === 'single';
@@ -938,13 +1002,11 @@ export default {
938
1002
  }
939
1003
 
940
1004
  const value = this.processedData;
941
- let _selection = [...this.selection];
1005
+ let _selection = [];
942
1006
  for(let i = rangeStart; i <= rangeEnd; i++) {
943
1007
  let rangeRowData = value[i];
944
- if (!_selection.includes(rangeRowData)) {
945
- _selection.push(rangeRowData);
946
- this.$emit('row-select', {originalEvent: event, data: rangeRowData, type: 'row'});
947
- }
1008
+ _selection.push(rangeRowData);
1009
+ this.$emit('row-select', {originalEvent: event, data: rangeRowData, type: 'row'});
948
1010
  }
949
1011
 
950
1012
  this.$emit('update:selection', _selection);
@@ -953,19 +1015,23 @@ export default {
953
1015
  let data = this.processedData;
954
1016
  let csv = '\ufeff';
955
1017
 
956
- if (options && options.selectionOnly) {
1018
+ if (options && options.selectionOnly)
957
1019
  data = this.selection || [];
958
- }
1020
+ else if (this.frozenValue)
1021
+ data = data ? [...this.frozenValue, ...data] : this.frozenValue;
959
1022
 
960
1023
  //headers
1024
+ let headerInitiated = false;
961
1025
  for (let i = 0; i < this.columns.length; i++) {
962
1026
  let column = this.columns[i];
963
- if (column.exportable !== false && column.field) {
964
- csv += '"' + (column.header || column.field) + '"';
965
1027
 
966
- if (i < (this.columns.length - 1)) {
1028
+ if (this.columnProp(column, 'exportable') !== false && this.columnProp(column, 'field')) {
1029
+ if (headerInitiated)
967
1030
  csv += this.csvSeparator;
968
- }
1031
+ else
1032
+ headerInitiated = true;
1033
+
1034
+ csv += '"' + (this.columnProp(column, 'exportHeader') || this.columnProp(column, 'header') || this.columnProp(column, 'field')) + '"';
969
1035
  }
970
1036
  }
971
1037
 
@@ -973,16 +1039,22 @@ export default {
973
1039
  if (data) {
974
1040
  data.forEach(record => {
975
1041
  csv += '\n';
1042
+ let rowInitiated = false;
976
1043
  for (let i = 0; i < this.columns.length; i++) {
977
1044
  let column = this.columns[i];
978
- if (column.exportable !== false && column.field) {
979
- let cellData = ObjectUtils.resolveFieldData(record, column.field);
1045
+ if (this.columnProp(column, 'exportable') !== false && this.columnProp(column, 'field')) {
1046
+ if (rowInitiated)
1047
+ csv += this.csvSeparator;
1048
+ else
1049
+ rowInitiated = true;
1050
+
1051
+ let cellData = ObjectUtils.resolveFieldData(record, this.columnProp(column, 'field'));
980
1052
 
981
1053
  if (cellData != null) {
982
1054
  if (this.exportFunction) {
983
1055
  cellData = this.exportFunction({
984
1056
  data: cellData,
985
- field: column.field
1057
+ field: this.columnProp(column, 'field')
986
1058
  });
987
1059
  }
988
1060
  else
@@ -991,12 +1063,7 @@ export default {
991
1063
  else
992
1064
  cellData = '';
993
1065
 
994
-
995
1066
  csv += '"' + cellData + '"';
996
-
997
- if (i < (this.columns.length - 1)) {
998
- csv += this.csvSeparator;
999
- }
1000
1067
  }
1001
1068
  }
1002
1069
  });
@@ -1058,33 +1125,26 @@ export default {
1058
1125
  let nextColumnWidth = nextColumn.offsetWidth - delta;
1059
1126
 
1060
1127
  if (newColumnWidth > 15 && nextColumnWidth > 15) {
1061
- if(this.scrollable) {
1062
- const scrollableView = this.findParentScrollableView(this.resizeColumnElement);
1063
- const scrollableBodyTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-body-table');
1064
- const scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-header-table');
1065
- const scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-footer-table');
1066
- const resizeColumnIndex = DomHandler.index(this.resizeColumnElement);
1067
-
1068
- this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
1069
- this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
1070
- this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);
1071
- }
1072
- else {
1128
+ if (!this.scrollable) {
1073
1129
  this.resizeColumnElement.style.width = newColumnWidth + 'px';
1074
1130
  if(nextColumn) {
1075
1131
  nextColumn.style.width = nextColumnWidth + 'px';
1076
1132
  }
1077
1133
  }
1134
+ else {
1135
+ this.resizeTableCells(newColumnWidth, nextColumnWidth);
1136
+ }
1078
1137
  }
1079
1138
  }
1080
1139
  else if (this.columnResizeMode === 'expand') {
1081
- if (this.scrollable) {
1082
- this.resizeScrollableTable(this.resizeColumnElement, newColumnWidth, delta);
1083
- }
1084
- else {
1085
- this.$refs.table.style.width = this.$refs.table.offsetWidth + delta + 'px';
1140
+ const tableWidth = this.$refs.table.offsetWidth + delta + 'px';
1141
+ this.$refs.table.style.width = tableWidth;
1142
+ this.$refs.table.style.minWidth = tableWidth;
1143
+
1144
+ if (!this.scrollable)
1086
1145
  this.resizeColumnElement.style.width = newColumnWidth + 'px';
1087
- }
1146
+ else
1147
+ this.resizeTableCells(newColumnWidth);
1088
1148
  }
1089
1149
 
1090
1150
  this.$emit('column-resize-end', {
@@ -1103,23 +1163,29 @@ export default {
1103
1163
  this.saveState();
1104
1164
  }
1105
1165
  },
1106
- resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {
1107
- if(table) {
1108
- let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;
1166
+ resizeTableCells(newColumnWidth, nextColumnWidth) {
1167
+ let colIndex = DomHandler.index(this.resizeColumnElement);
1168
+ let widths = [];
1169
+ let headers = DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th');
1170
+ headers.forEach(header => widths.push(DomHandler.getOuterWidth(header)));
1109
1171
 
1110
- if(colGroup) {
1111
- let col = colGroup.children[resizeColumnIndex];
1112
- let nextCol = col.nextElementSibling;
1113
- col.style.width = newColumnWidth + 'px';
1172
+ this.destroyStyleElement();
1173
+ this.createStyleElement();
1114
1174
 
1115
- if (nextCol && nextColumnWidth) {
1116
- nextCol.style.width = nextColumnWidth + 'px';
1175
+ let innerHTML = '';
1176
+ widths.forEach((width,index) => {
1177
+ let colWidth = index === colIndex ? newColumnWidth : (nextColumnWidth && index === colIndex + 1) ? nextColumnWidth : width;
1178
+ innerHTML += `
1179
+ .p-datatable[${this.attributeSelector}] .p-datatable-thead > tr > th:nth-child(${index+1}) {
1180
+ flex: 0 0 ${colWidth}px !important;
1117
1181
  }
1118
- }
1119
- else {
1120
- throw new Error("Scrollable tables require a colgroup to support resizable columns");
1121
- }
1122
- }
1182
+
1183
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td:nth-child(${index+1}) {
1184
+ flex: 0 0 ${colWidth}px !important;
1185
+ }
1186
+ `
1187
+ });
1188
+ this.styleElement.innerHTML = innerHTML;
1123
1189
  },
1124
1190
  bindColumnResizeEvents() {
1125
1191
  if (!this.documentColumnResizeListener) {
@@ -1148,14 +1214,14 @@ export default {
1148
1214
 
1149
1215
  if (this.documentColumnResizeEndListener) {
1150
1216
  document.removeEventListener('document', this.documentColumnResizeEndListener);
1151
- this.documentColumnResizeEndListener = null;
1217
+ this.documentColumnResizeEndListener = null;
1152
1218
  }
1153
1219
  },
1154
1220
  onColumnHeaderMouseDown(e) {
1155
1221
  const event = e.originalEvent;
1156
1222
  const column = e.column;
1157
1223
 
1158
- if (this.reorderableColumns && column.reorderableColumn) {
1224
+ if (this.reorderableColumns && this.columnProp(column, 'reorderableColumn') !== false) {
1159
1225
  if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))
1160
1226
  event.currentTarget.draggable = false;
1161
1227
  else
@@ -1222,7 +1288,8 @@ export default {
1222
1288
  }
1223
1289
 
1224
1290
  if (allowDrop) {
1225
- ObjectUtils.reorderArray(this.d_columnOrder, dragIndex, dropIndex);
1291
+ ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);
1292
+ this.updateReorderableColumns();
1226
1293
 
1227
1294
  this.$emit('column-reorder', {
1228
1295
  originalEvent: event,
@@ -1251,63 +1318,18 @@ export default {
1251
1318
  return parent;
1252
1319
  }
1253
1320
  },
1254
- findParentScrollableView(column) {
1255
- if (column) {
1256
- let parent = column.parentElement;
1257
- while (parent && !DomHandler.hasClass(parent, 'p-datatable-scrollable-view')) {
1258
- parent = parent.parentElement;
1259
- }
1260
-
1261
- return parent;
1262
- }
1263
- else {
1264
- return null;
1265
- }
1266
- },
1267
1321
  findColumnByKey(columns, key) {
1268
- if(columns && columns.length) {
1269
- for(let i = 0; i < columns.length; i++) {
1270
- let child = columns[i];
1271
- if(child.columnKey === key || child.field === key) {
1272
- return child;
1322
+ if (columns && columns.length) {
1323
+ for (let i = 0; i < columns.length; i++) {
1324
+ let column = columns[i];
1325
+ if (this.columnProp(column, 'columnKey') === key || this.columnProp(column, 'field') === key) {
1326
+ return column;
1273
1327
  }
1274
1328
  }
1275
1329
  }
1276
1330
 
1277
1331
  return null;
1278
1332
  },
1279
- resizeScrollableTable(column, newColumnWidth, delta) {
1280
- const scrollableView = column ? this.findParentScrollableView(column) : this.$el;
1281
- const scrollableBody = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body');
1282
- const scrollableHeader = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-header');
1283
- const scrollableFooter = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-footer');
1284
- const scrollableBodyTable = DomHandler.findSingle(scrollableBody, 'table.p-datatable-scrollable-body-table');
1285
- const scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.p-datatable-scrollable-header-table');
1286
- const scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.p-datatable-scrollable-footer-table');
1287
-
1288
- const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;
1289
- const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;
1290
- const isContainerInViewport = this.$el.offsetWidth >= parseFloat(scrollableBodyTableWidth);
1291
-
1292
- let setWidth = (container, table, width, isContainerInViewport) => {
1293
- if (container && table) {
1294
- container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto'
1295
- table.style.width = width + 'px';
1296
- }
1297
- };
1298
-
1299
- setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);
1300
- setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);
1301
- setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);
1302
-
1303
- if (column) {
1304
- let resizeColumnIndex = DomHandler.index(column);
1305
-
1306
- this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);
1307
- this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);
1308
- this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);
1309
- }
1310
- },
1311
1333
  onRowMouseDown(event) {
1312
1334
  if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle'))
1313
1335
  event.currentTarget.draggable = true;
@@ -1474,7 +1496,7 @@ export default {
1474
1496
  state.multiSortMeta = this.d_multiSortMeta;
1475
1497
  }
1476
1498
 
1477
- if (this.hasFilters()) {
1499
+ if (this.hasFilters) {
1478
1500
  state.filters = this.filters;
1479
1501
  }
1480
1502
 
@@ -1509,9 +1531,17 @@ export default {
1509
1531
  restoreState() {
1510
1532
  const storage = this.getStorage();
1511
1533
  const stateString = storage.getItem(this.stateKey);
1534
+ const dateFormat = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
1535
+ const reviver = function(key, value) {
1536
+ if (typeof value === "string" && dateFormat.test(value)) {
1537
+ return new Date(value);
1538
+ }
1539
+
1540
+ return value;
1541
+ }
1512
1542
 
1513
1543
  if (stateString) {
1514
- let restoredState = JSON.parse(stateString);
1544
+ let restoredState = JSON.parse(stateString, reviver);
1515
1545
 
1516
1546
  if (this.paginator) {
1517
1547
  this.d_first = restoredState.first;
@@ -1564,8 +1594,7 @@ export default {
1564
1594
  state.columnWidths = widths.join(',');
1565
1595
 
1566
1596
  if (this.columnResizeMode === 'expand') {
1567
- state.tableWidth = this.scrollable ? DomHandler.findSingle(this.$el, '.p-datatable-scrollable-header-table').style.width :
1568
- DomHandler.getOuterWidth(this.$refs.table) + 'px';
1597
+ state.tableWidth = DomHandler.getOuterWidth(this.$refs.table) + 'px';
1569
1598
  }
1570
1599
  },
1571
1600
  restoreColumnWidths() {
@@ -1573,28 +1602,32 @@ export default {
1573
1602
  let widths = this.columnWidthsState.split(',');
1574
1603
 
1575
1604
  if (this.columnResizeMode === 'expand' && this.tableWidthState) {
1576
- if (this.scrollable) {
1577
- this.resizeScrollableTable(null, this.tableWidthState, 0);
1578
- }
1579
- else {
1580
- this.$refs.table.style.width = this.tableWidthState;
1581
- this.$el.style.width = this.tableWidthState;
1582
- }
1605
+ this.$refs.table.style.width = this.tableWidthState;
1606
+ this.$refs.table.style.minWidth = this.tableWidthState;
1607
+ this.$el.style.width = this.tableWidthState;
1583
1608
  }
1584
1609
 
1585
- if (this.scrollable) {
1586
- let headerCols = DomHandler.find(this.$el, '.p-datatable-scrollable-header-table > colgroup > col');
1587
- let bodyCols = DomHandler.find(this.$el, '.p-datatable-scrollable-body-table > colgroup > col');
1610
+ this.createStyleElement();
1611
+
1612
+ if (this.scrollable && widths && widths.length > 0) {
1613
+ let innerHTML = '';
1614
+ widths.forEach((width,index) => {
1615
+ innerHTML += `
1616
+ .p-datatable[${this.attributeSelector}] .p-datatable-thead > tr > th:nth-child(${index+1}) {
1617
+ flex: 0 0 ${width}px;
1618
+ }
1619
+
1620
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td:nth-child(${index+1}) {
1621
+ flex: 0 0 ${width}px;
1622
+ }
1623
+ `
1624
+ });
1588
1625
 
1589
- headerCols.forEach((col, index) => col.style.width = widths[index] + 'px');
1590
- bodyCols.forEach((col, index) => col.style.width = widths[index] + 'px');
1626
+ this.styleElement.innerHTML = innerHTML;
1591
1627
  }
1592
1628
  else {
1593
- let headers = DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th');
1594
- headers.forEach((header, index) => header.style.width = widths[index] + 'px');
1629
+ DomHandler.find(this.$refs.table, '.p-datatable-thead > tr > th').forEach((header, index) => header.style.width = widths[index] + 'px');
1595
1630
  }
1596
-
1597
-
1598
1631
  }
1599
1632
  },
1600
1633
  onCellEditInit(event) {
@@ -1624,29 +1657,28 @@ export default {
1624
1657
  this.$emit('update:editingRows', _editingRows);
1625
1658
  this.$emit('row-edit-cancel', event);
1626
1659
  },
1627
- onVirtualScroll(event) {
1628
- if(this.virtualScrollTimer) {
1629
- clearTimeout(this.virtualScrollTimer);
1660
+ onEditingMetaChange(event) {
1661
+ let { data, field, index, editing } = event;
1662
+ let editingMeta = {...(this.d_editingMeta || {})};
1663
+ let meta = editingMeta[index];
1664
+
1665
+ if (editing) {
1666
+ !meta && (meta = editingMeta[index] = { data: { ...data }, fields: [] });
1667
+ meta['fields'].push(field);
1668
+ }
1669
+ else if (meta) {
1670
+ const fields = meta['fields'].filter(f => f !== field);
1671
+ !fields.length ? (delete editingMeta[index]) : (meta['fields'] = fields);
1630
1672
  }
1631
1673
 
1632
- this.virtualScrollTimer = setTimeout(() => {
1633
- this.$emit('virtual-scroll', {
1634
- first: (event.page - 1) * this.rows,
1635
- rows: this.rows * 2
1636
- });
1637
- }, this.virtualScrollDelay);
1674
+ this.d_editingMeta = editingMeta;
1638
1675
  },
1639
- createLazyLoadEvent(event) {
1640
- let filterMatchModes;
1641
- if (this.hasFilters()) {
1642
- filterMatchModes = {};
1643
- this.columns.forEach(col => {
1644
- if (col.field) {
1645
- filterMatchModes[col.field] = col.filterMatchMode;
1646
- }
1647
- });
1676
+ clearEditingMetaData() {
1677
+ if (this.editMode) {
1678
+ this.d_editingMeta = {};
1648
1679
  }
1649
-
1680
+ },
1681
+ createLazyLoadEvent(event) {
1650
1682
  return {
1651
1683
  originalEvent: event,
1652
1684
  first: this.d_first,
@@ -1654,16 +1686,113 @@ export default {
1654
1686
  sortField: this.d_sortField,
1655
1687
  sortOrder: this.d_sortOrder,
1656
1688
  multiSortMeta: this.d_multiSortMeta,
1657
- filters: this.filters,
1658
- filterMatchModes: filterMatchModes
1689
+ filters: this.d_filters
1659
1690
  };
1660
1691
  },
1661
- hasFilters() {
1662
- return this.filters && Object.keys(this.filters).length > 0 && this.filters.constructor === Object;
1663
- },
1664
1692
  hasGlobalFilter() {
1665
1693
  return this.filters && Object.prototype.hasOwnProperty.call(this.filters, 'global');
1666
1694
  },
1695
+ getChildren() {
1696
+ return this.$scopedSlots.default ? this.$scopedSlots.default() : null;
1697
+ },
1698
+ onFilterChange(filters) {
1699
+ this.d_filters = filters;
1700
+ },
1701
+ onFilterApply() {
1702
+ this.d_first = 0;
1703
+ this.$emit('update:first', this.d_first);
1704
+ this.$emit('update:filters', this.d_filters);
1705
+
1706
+ if (this.lazy) {
1707
+ this.$emit('filter', this.createLazyLoadEvent());
1708
+ }
1709
+ },
1710
+ cloneFilters() {
1711
+ let cloned = {};
1712
+ if (this.filters) {
1713
+ Object.entries(this.filters).forEach(([prop,value]) => {
1714
+ cloned[prop] = value.operator ? {operator: value.operator, constraints: value.constraints.map(constraint => {return {...constraint}})} : {...value};
1715
+ });
1716
+ }
1717
+
1718
+ return cloned;
1719
+ },
1720
+ updateReorderableColumns() {
1721
+ let columnOrder = [];
1722
+ this.columns.forEach(col => columnOrder.push(this.columnProp(col, 'columnKey')||this.columnProp(col, 'field')));
1723
+ this.d_columnOrder = columnOrder;
1724
+ },
1725
+ createStyleElement() {
1726
+ this.styleElement = document.createElement('style');
1727
+ this.styleElement.type = 'text/css';
1728
+ document.head.appendChild(this.styleElement);
1729
+ },
1730
+ createResponsiveStyle() {
1731
+ if (!this.responsiveStyleElement) {
1732
+ this.responsiveStyleElement = document.createElement('style');
1733
+ this.responsiveStyleElement.type = 'text/css';
1734
+ document.head.appendChild(this.responsiveStyleElement);
1735
+
1736
+ let innerHTML = `
1737
+ @media screen and (max-width: ${this.breakpoint}) {
1738
+ .p-datatable[${this.attributeSelector}] .p-datatable-thead > tr > th,
1739
+ .p-datatable[${this.attributeSelector}] .p-datatable-tfoot > tr > td {
1740
+ display: none !important;
1741
+ }
1742
+
1743
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td {
1744
+ display: flex;
1745
+ width: 100% !important;
1746
+ align-items: center;
1747
+ justify-content: space-between;
1748
+ }
1749
+
1750
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td:not(:last-child) {
1751
+ border: 0 none;
1752
+ }
1753
+
1754
+ .p-datatable[${this.attributeSelector}].p-datatable-gridlines .p-datatable-tbody > tr > td:last-child {
1755
+ border-top: 0;
1756
+ border-right: 0;
1757
+ border-left: 0;
1758
+ }
1759
+
1760
+ .p-datatable[${this.attributeSelector}] .p-datatable-tbody > tr > td > .p-column-title {
1761
+ display: block;
1762
+ }
1763
+ }
1764
+ `;
1765
+
1766
+ this.responsiveStyleElement.innerHTML = innerHTML;
1767
+ }
1768
+ },
1769
+ destroyResponsiveStyle() {
1770
+ if (this.responsiveStyleElement) {
1771
+ document.head.removeChild(this.responsiveStyleElement);
1772
+ this.responsiveStyleElement = null;
1773
+ }
1774
+ },
1775
+ destroyStyleElement() {
1776
+ if (this.styleElement) {
1777
+ document.head.removeChild(this.styleElement);
1778
+ this.styleElement = null;
1779
+ }
1780
+ },
1781
+ recursiveGetChildren(children, results) {
1782
+ if (!results) {
1783
+ results = [];
1784
+ }
1785
+ if (children && children.length) {
1786
+ children.forEach((child) => {
1787
+ if (child.children instanceof Array) {
1788
+ results.concat(this.recursiveGetChildren(child.children, results));
1789
+ } else if (child.type.name == 'Column') {
1790
+ results.push(child);
1791
+ }
1792
+ });
1793
+ }
1794
+ return results;
1795
+ },
1667
1796
  },
1668
1797
  computed: {
1669
1798
  containerClass() {
@@ -1674,8 +1803,16 @@ export default {
1674
1803
  'p-datatable-resizable': this.resizableColumns,
1675
1804
  'p-datatable-resizable-fit': this.resizableColumns && this.columnResizeMode === 'fit',
1676
1805
  'p-datatable-scrollable': this.scrollable,
1677
- 'p-datatable-virtual-scrollable': this.virtualScroll,
1678
- 'p-datatable-flex-scrollable': (this.scrollable && this.scrollHeight === 'flex')
1806
+ 'p-datatable-scrollable-vertical': this.scrollable && this.scrollDirection === 'vertical',
1807
+ 'p-datatable-scrollable-horizontal': this.scrollable && this.scrollDirection === 'horizontal',
1808
+ 'p-datatable-scrollable-both': this.scrollable && this.scrollDirection === 'both',
1809
+ 'p-datatable-flex-scrollable': (this.scrollable && this.scrollHeight === 'flex'),
1810
+ 'p-datatable-responsive-stack': this.responsiveLayout === 'stack',
1811
+ 'p-datatable-responsive-scroll': this.responsiveLayout === 'scroll',
1812
+ 'p-datatable-striped': this.stripedRows,
1813
+ 'p-datatable-gridlines': this.showGridlines,
1814
+ 'p-datatable-grouped-header': this.headerColumnGroup != null,
1815
+ 'p-datatable-grouped-footer': this.footerColumnGroup != null
1679
1816
  }
1680
1817
  ];
1681
1818
  },
@@ -1701,84 +1838,37 @@ export default {
1701
1838
  }
1702
1839
  return columns;
1703
1840
  },
1704
- frozenColumns() {
1705
- let frozenColumns = [];
1706
-
1707
- for(let col of this.columns) {
1708
- if(col.frozen) {
1709
- frozenColumns = frozenColumns||[];
1710
- frozenColumns.push(col);
1711
- }
1712
- }
1713
-
1714
- return frozenColumns;
1715
- },
1716
- scrollableColumns() {
1717
- let scrollableColumns = [];
1718
-
1719
- for(let col of this.columns) {
1720
- if(!col.frozen) {
1721
- scrollableColumns = scrollableColumns||[];
1722
- scrollableColumns.push(col);
1723
- }
1724
- }
1725
-
1726
- return scrollableColumns;
1727
- },
1728
- hasFrozenColumns() {
1729
- return this.frozenColumns.length > 0;
1730
- },
1731
1841
  headerColumnGroup() {
1732
1842
  if (this.allChildren) {
1733
1843
  for (let child of this.allChildren) {
1734
- if (child.$vnode.tag.indexOf('columngroup') !== -1 && child.type === 'header') {
1844
+ if (child.$vnode.tag.indexOf('columngroup') !== -1 && this.columnProp(child, 'type') === 'header') {
1735
1845
  return child;
1736
1846
  }
1737
1847
  }
1738
1848
  }
1739
-
1740
- return null;
1741
- },
1742
- frozenHeaderColumnGroup() {
1743
- if (this.allChildren) {
1744
- for (let child of this.allChildren) {
1745
- if (child.$vnode.tag.indexOf('columngroup') !== -1 && child.type === 'frozenheader') {
1746
- return child;
1747
- }
1748
- }
1749
- }
1750
-
1751
1849
  return null;
1752
1850
  },
1753
1851
  footerColumnGroup() {
1754
1852
  if (this.allChildren) {
1755
1853
  for (let child of this.allChildren) {
1756
- if (child.$vnode.tag.indexOf('columngroup') !== -1 && child.type === 'footer') {
1854
+ if (child.$vnode.tag.indexOf('columngroup') !== -1 && this.columnProp(child, 'type') === 'footer') {
1757
1855
  return child;
1758
1856
  }
1759
1857
  }
1760
1858
  }
1761
-
1762
1859
  return null;
1763
1860
  },
1764
- frozenFooterColumnGroup() {
1765
- if (this.allChildren) {
1766
- for (let child of this.allChildren) {
1767
- if (child.$vnode.tag.indexOf('columngroup') !== -1 && child.type === 'frozenfooter') {
1768
- return child;
1769
- }
1770
- }
1771
- }
1772
-
1773
- return null;
1861
+ hasFilters() {
1862
+ return this.filters && Object.keys(this.filters).length > 0 && this.filters.constructor === Object;
1774
1863
  },
1775
1864
  processedData() {
1776
- if (this.lazy) {
1777
- return this.value;
1778
- }
1779
- else {
1780
- if (this.value && this.value.length) {
1781
- let data = this.value;
1865
+ let data = this.value || [];
1866
+
1867
+ if (!this.lazy) {
1868
+ if (data && data.length) {
1869
+ if (this.hasFilters) {
1870
+ data = this.filter(data);
1871
+ }
1782
1872
 
1783
1873
  if (this.sorted) {
1784
1874
  if(this.sortMode === 'single')
@@ -1786,17 +1876,10 @@ export default {
1786
1876
  else if(this.sortMode === 'multiple')
1787
1877
  data = this.sortMultiple(data);
1788
1878
  }
1789
-
1790
- if (this.hasFilters()) {
1791
- data = this.filter(data);
1792
- }
1793
-
1794
- return data;
1795
- }
1796
- else {
1797
- return null;
1798
1879
  }
1799
1880
  }
1881
+
1882
+ return data;
1800
1883
  },
1801
1884
  dataToRender() {
1802
1885
  const data = this.processedData;
@@ -1835,13 +1918,23 @@ export default {
1835
1918
  return ['p-datatable-loading-icon pi-spin', this.loadingIcon];
1836
1919
  },
1837
1920
  allRowsSelected() {
1838
- const val = this.processedData;
1839
- return (val && val.length > 0 && this.selection && this.selection.length > 0 && this.selection.length === val.length);
1921
+ if (this.selectAll !== null) {
1922
+ return this.selectAll;
1923
+ }
1924
+ else {
1925
+ const val = this.frozenValue ? [...this.frozenValue, ...this.processedData] : this.processedData;
1926
+ return val && this.selection && Array.isArray(this.selection) && val.every(v => this.selection.some(s => this.equals(s, v)));
1927
+ }
1928
+ },
1929
+ attributeSelector() {
1930
+ return UniqueComponentId();
1931
+ },
1932
+ groupRowSortField() {
1933
+ return this.sortMode === 'single' ? this.sortField : (this.d_groupRowsSortMeta ? this.d_groupRowsSortMeta.field : null);
1840
1934
  }
1841
1935
  },
1842
1936
  components: {
1843
1937
  'DTPaginator': Paginator,
1844
- 'DTScrollableView': ScrollableView,
1845
1938
  'DTTableHeader': TableHeader,
1846
1939
  'DTTableBody': TableBody,
1847
1940
  'DTTableFooter': TableFooter,
@@ -1856,7 +1949,7 @@ export default {
1856
1949
 
1857
1950
  .p-datatable table {
1858
1951
  border-collapse: collapse;
1859
- width: 100%;
1952
+ min-width: 100%;
1860
1953
  table-layout: fixed;
1861
1954
  }
1862
1955
 
@@ -1877,10 +1970,11 @@ export default {
1877
1970
  justify-content: center;
1878
1971
  }
1879
1972
 
1880
- .p-datatable-auto-layout > .p-datatable-wrapper {
1973
+ .p-datatable-responsive-scroll > .p-datatable-wrapper {
1881
1974
  overflow-x: auto;
1882
1975
  }
1883
1976
 
1977
+ .p-datatable-responsive-scroll > .p-datatable-wrapper > table,
1884
1978
  .p-datatable-auto-layout > .p-datatable-wrapper > table {
1885
1979
  table-layout: auto;
1886
1980
  }
@@ -1890,60 +1984,102 @@ export default {
1890
1984
  }
1891
1985
 
1892
1986
  /* Scrollable */
1893
- .p-datatable-scrollable-wrapper {
1987
+ .p-datatable-scrollable .p-datatable-wrapper {
1894
1988
  position: relative;
1989
+ overflow: auto;
1895
1990
  }
1896
1991
 
1897
- .p-datatable-scrollable-header,
1898
- .p-datatable-scrollable-footer {
1899
- overflow: hidden;
1992
+ .p-datatable-scrollable .p-datatable-thead,
1993
+ .p-datatable-scrollable .p-datatable-tbody,
1994
+ .p-datatable-scrollable .p-datatable-tfoot {
1995
+ display: block;
1900
1996
  }
1901
1997
 
1902
- .p-datatable-scrollable-body {
1903
- overflow: auto;
1904
- position: relative;
1998
+ .p-datatable-scrollable .p-datatable-thead > tr,
1999
+ .p-datatable-scrollable .p-datatable-tbody > tr,
2000
+ .p-datatable-scrollable .p-datatable-tfoot > tr {
2001
+ display: flex;
2002
+ flex-wrap: nowrap;
2003
+ width: 100%;
1905
2004
  }
1906
2005
 
1907
- .p-datatable-scrollable-body > table > .p-datatable-tbody > tr:first-child > td {
1908
- border-top: 0 none;
2006
+ .p-datatable-scrollable .p-datatable-thead > tr > th,
2007
+ .p-datatable-scrollable .p-datatable-tbody > tr > td,
2008
+ .p-datatable-scrollable .p-datatable-tfoot > tr > td {
2009
+ display: flex;
2010
+ flex: 1 1 0;
2011
+ align-items: center;
1909
2012
  }
1910
2013
 
1911
- .p-datatable-virtual-table {
1912
- position: absolute;
2014
+ .p-datatable-scrollable .p-datatable-thead {
2015
+ position: sticky;
2016
+ top: 0;
2017
+ z-index: 1;
1913
2018
  }
1914
2019
 
1915
- /* Frozen Columns */
1916
- .p-datatable-frozen-view .p-datatable-scrollable-body {
1917
- overflow: hidden;
2020
+ .p-datatable-scrollable .p-datatable-frozen-tbody {
2021
+ position: sticky;
2022
+ z-index: 1;
1918
2023
  }
1919
2024
 
1920
- .p-datatable-frozen-view > .p-datatable-scrollable-body > table > .p-datatable-tbody > tr > td:last-child {
1921
- border-right: 0 none;
2025
+ .p-datatable-scrollable .p-datatable-tfoot {
2026
+ position: sticky;
2027
+ bottom: 0;
2028
+ z-index: 1;
1922
2029
  }
1923
2030
 
1924
- .p-datatable-unfrozen-view {
1925
- position: absolute;
1926
- top: 0;
2031
+ .p-datatable-scrollable .p-frozen-column {
2032
+ position: sticky;
2033
+ background: inherit;
2034
+ }
2035
+
2036
+ .p-datatable-scrollable th.p-frozen-column {
2037
+ z-index: 1;
2038
+ }
2039
+
2040
+ .p-datatable-scrollable-both .p-datatable-thead > tr > th,
2041
+ .p-datatable-scrollable-both .p-datatable-tbody > tr > td,
2042
+ .p-datatable-scrollable-both .p-datatable-tfoot > tr > td,
2043
+ .p-datatable-scrollable-horizontal .p-datatable-thead > tr > th
2044
+ .p-datatable-scrollable-horizontal .p-datatable-tbody > tr > td,
2045
+ .p-datatable-scrollable-horizontal .p-datatable-tfoot > tr > td {
2046
+ flex: 0 0 auto;
1927
2047
  }
1928
2048
 
1929
- /* Flex Scrollable */
1930
2049
  .p-datatable-flex-scrollable {
1931
2050
  display: flex;
1932
2051
  flex-direction: column;
1933
- flex: 1;
1934
2052
  height: 100%;
1935
2053
  }
1936
2054
 
1937
- .p-datatable-flex-scrollable .p-datatable-scrollable-wrapper,
1938
- .p-datatable-flex-scrollable .p-datatable-scrollable-view {
2055
+ .p-datatable-flex-scrollable .p-datatable-wrapper {
1939
2056
  display: flex;
1940
2057
  flex-direction: column;
1941
2058
  flex: 1;
1942
2059
  height: 100%;
1943
2060
  }
1944
2061
 
1945
- .p-datatable-flex-scrollable .p-datatable-scrollable-body {
1946
- flex: 1;
2062
+ .p-datatable-scrollable .p-rowgroup-header {
2063
+ position: sticky;
2064
+ z-index: 1;
2065
+ }
2066
+
2067
+ .p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead,
2068
+ .p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot {
2069
+ display: table;
2070
+ border-collapse: collapse;
2071
+ width: 100%;
2072
+ table-layout: fixed;
2073
+ }
2074
+
2075
+ .p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead > tr,
2076
+ .p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot > tr {
2077
+ display: table-row;
2078
+ }
2079
+
2080
+ .p-datatable-scrollable.p-datatable-grouped-header .p-datatable-thead > tr > th,
2081
+ .p-datatable-scrollable.p-datatable-grouped-footer .p-datatable-tfoot > tr > td {
2082
+ display: table-cell;
1947
2083
  }
1948
2084
 
1949
2085
  /* Resizable */
@@ -1958,7 +2094,7 @@ export default {
1958
2094
  white-space: nowrap;
1959
2095
  }
1960
2096
 
1961
- .p-datatable-resizable .p-resizable-column {
2097
+ .p-datatable-resizable .p-resizable-column:not(.p-frozen-column) {
1962
2098
  background-clip: padding-box;
1963
2099
  position: relative;
1964
2100
  }
@@ -1980,6 +2116,11 @@ export default {
1980
2116
  border: 1px solid transparent;
1981
2117
  }
1982
2118
 
2119
+ .p-datatable .p-column-header-content {
2120
+ display: flex;
2121
+ align-items: center;
2122
+ }
2123
+
1983
2124
  .p-datatable .p-column-resizer-helper {
1984
2125
  width: 1px;
1985
2126
  position: absolute;
@@ -2021,4 +2162,73 @@ export default {
2021
2162
  justify-content: center;
2022
2163
  z-index: 2;
2023
2164
  }
2165
+
2166
+ /* Filter */
2167
+ .p-column-filter-row {
2168
+ display: flex;
2169
+ align-items: center;
2170
+ width: 100%;
2171
+ }
2172
+
2173
+ .p-column-filter-menu {
2174
+ display: inline-flex;
2175
+ margin-left: auto;
2176
+ }
2177
+
2178
+ .p-column-filter-row .p-column-filter-element {
2179
+ flex: 1 1 auto;
2180
+ width: 1%;
2181
+ }
2182
+
2183
+ .p-column-filter-menu-button,
2184
+ .p-column-filter-clear-button {
2185
+ display: inline-flex;
2186
+ justify-content: center;
2187
+ align-items: center;
2188
+ cursor: pointer;
2189
+ text-decoration: none;
2190
+ overflow: hidden;
2191
+ position: relative;
2192
+ }
2193
+
2194
+ .p-column-filter-overlay {
2195
+ position: absolute;
2196
+ top: 0;
2197
+ left: 0;
2198
+ }
2199
+
2200
+ .p-column-filter-row-items {
2201
+ margin: 0;
2202
+ padding: 0;
2203
+ list-style: none;
2204
+ }
2205
+
2206
+ .p-column-filter-row-item {
2207
+ cursor: pointer;
2208
+ }
2209
+
2210
+ .p-column-filter-add-button,
2211
+ .p-column-filter-remove-button {
2212
+ justify-content: center;
2213
+ }
2214
+
2215
+ .p-column-filter-add-button .p-button-label,
2216
+ .p-column-filter-remove-button .p-button-label {
2217
+ flex-grow: 0;
2218
+ }
2219
+
2220
+ .p-column-filter-buttonbar {
2221
+ display: flex;
2222
+ align-items: center;
2223
+ justify-content: space-between;
2224
+ }
2225
+
2226
+ .p-column-filter-buttonbar .p-button:not(.p-button-icon-only) {
2227
+ width: auto;
2228
+ }
2229
+
2230
+ /* Responsive */
2231
+ .p-datatable .p-datatable-tbody > tr > td > .p-column-title {
2232
+ display: none;
2233
+ }
2024
2234
  </style>