primevue 3.15.0 → 3.16.2

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 (387) hide show
  1. package/autocomplete/AutoComplete.d.ts +182 -38
  2. package/autocomplete/AutoComplete.vue +636 -342
  3. package/autocomplete/autocomplete.cjs.js +745 -416
  4. package/autocomplete/autocomplete.cjs.min.js +1 -1
  5. package/autocomplete/autocomplete.esm.js +747 -418
  6. package/autocomplete/autocomplete.esm.min.js +1 -1
  7. package/autocomplete/autocomplete.js +745 -416
  8. package/autocomplete/autocomplete.min.js +1 -1
  9. package/button/Button.vue +4 -1
  10. package/button/button.cjs.js +5 -1
  11. package/button/button.cjs.min.js +1 -1
  12. package/button/button.esm.js +5 -1
  13. package/button/button.esm.min.js +1 -1
  14. package/button/button.js +5 -1
  15. package/button/button.min.js +1 -1
  16. package/calendar/Calendar.d.ts +51 -12
  17. package/calendar/Calendar.vue +259 -114
  18. package/calendar/calendar.cjs.js +414 -220
  19. package/calendar/calendar.cjs.min.js +1 -1
  20. package/calendar/calendar.esm.js +415 -221
  21. package/calendar/calendar.esm.min.js +1 -1
  22. package/calendar/calendar.js +414 -220
  23. package/calendar/calendar.min.js +1 -1
  24. package/carousel/Carousel.vue +25 -0
  25. package/carousel/carousel.cjs.js +25 -0
  26. package/carousel/carousel.cjs.min.js +1 -1
  27. package/carousel/carousel.esm.js +25 -0
  28. package/carousel/carousel.esm.min.js +1 -1
  29. package/carousel/carousel.js +25 -0
  30. package/carousel/carousel.min.js +1 -1
  31. package/cascadeselect/CascadeSelect.d.ts +97 -17
  32. package/cascadeselect/CascadeSelect.vue +560 -135
  33. package/cascadeselect/CascadeSelectSub.vue +48 -129
  34. package/cascadeselect/cascadeselect.cjs.js +670 -306
  35. package/cascadeselect/cascadeselect.cjs.min.js +1 -1
  36. package/cascadeselect/cascadeselect.esm.js +672 -308
  37. package/cascadeselect/cascadeselect.esm.min.js +1 -1
  38. package/cascadeselect/cascadeselect.js +670 -306
  39. package/cascadeselect/cascadeselect.min.js +1 -1
  40. package/checkbox/Checkbox.d.ts +40 -4
  41. package/checkbox/Checkbox.vue +50 -13
  42. package/checkbox/checkbox.cjs.js +64 -23
  43. package/checkbox/checkbox.cjs.min.js +1 -1
  44. package/checkbox/checkbox.esm.js +65 -24
  45. package/checkbox/checkbox.esm.min.js +1 -1
  46. package/checkbox/checkbox.js +64 -23
  47. package/checkbox/checkbox.min.js +1 -1
  48. package/chips/Chips.d.ts +36 -12
  49. package/chips/Chips.vue +116 -22
  50. package/chips/chips.cjs.js +149 -37
  51. package/chips/chips.cjs.min.js +1 -1
  52. package/chips/chips.esm.js +150 -38
  53. package/chips/chips.esm.min.js +1 -1
  54. package/chips/chips.js +150 -39
  55. package/chips/chips.min.js +1 -1
  56. package/colorpicker/ColorPicker.d.ts +3 -6
  57. package/colorpicker/ColorPicker.vue +1 -5
  58. package/colorpicker/colorpicker.cjs.js +2 -7
  59. package/colorpicker/colorpicker.cjs.min.js +1 -1
  60. package/colorpicker/colorpicker.esm.js +2 -7
  61. package/colorpicker/colorpicker.esm.min.js +1 -1
  62. package/colorpicker/colorpicker.js +2 -7
  63. package/colorpicker/colorpicker.min.js +1 -1
  64. package/column/Column.d.ts +4 -0
  65. package/column/Column.vue +4 -0
  66. package/column/column.cjs.js +4 -0
  67. package/column/column.cjs.min.js +1 -1
  68. package/column/column.esm.js +4 -0
  69. package/column/column.esm.min.js +1 -1
  70. package/column/column.js +4 -0
  71. package/column/column.min.js +1 -1
  72. package/config/PrimeVue.d.ts +42 -0
  73. package/config/config.cjs.js +35 -4
  74. package/config/config.cjs.min.js +1 -1
  75. package/config/config.esm.js +35 -4
  76. package/config/config.esm.min.js +1 -1
  77. package/config/config.js +35 -4
  78. package/config/config.min.js +1 -1
  79. package/confirmdialog/ConfirmDialog.vue +4 -1
  80. package/confirmdialog/confirmdialog.cjs.js +6 -2
  81. package/confirmdialog/confirmdialog.cjs.min.js +1 -1
  82. package/confirmdialog/confirmdialog.esm.js +6 -2
  83. package/confirmdialog/confirmdialog.esm.min.js +1 -1
  84. package/confirmdialog/confirmdialog.js +6 -2
  85. package/confirmdialog/confirmdialog.min.js +1 -1
  86. package/contextmenu/ContextMenu.d.ts +1 -1
  87. package/contextmenu/ContextMenuSub.vue +3 -3
  88. package/contextmenu/contextmenu.cjs.js +14 -8
  89. package/contextmenu/contextmenu.cjs.min.js +1 -1
  90. package/contextmenu/contextmenu.esm.js +15 -9
  91. package/contextmenu/contextmenu.esm.min.js +1 -1
  92. package/contextmenu/contextmenu.js +14 -8
  93. package/contextmenu/contextmenu.min.js +1 -1
  94. package/core/core.js +1128 -772
  95. package/core/core.min.js +12 -12
  96. package/datatable/BodyCell.vue +11 -2
  97. package/datatable/DataTable.vue +23 -2
  98. package/datatable/datatable.cjs.js +34 -4
  99. package/datatable/datatable.cjs.min.js +1 -1
  100. package/datatable/datatable.esm.js +34 -4
  101. package/datatable/datatable.esm.min.js +1 -1
  102. package/datatable/datatable.js +34 -4
  103. package/datatable/datatable.min.js +1 -1
  104. package/dialog/Dialog.d.ts +5 -1
  105. package/dropdown/Dropdown.d.ts +92 -38
  106. package/dropdown/Dropdown.vue +538 -399
  107. package/dropdown/dropdown.cjs.js +657 -486
  108. package/dropdown/dropdown.cjs.min.js +1 -1
  109. package/dropdown/dropdown.esm.js +659 -488
  110. package/dropdown/dropdown.esm.min.js +1 -1
  111. package/dropdown/dropdown.js +657 -486
  112. package/dropdown/dropdown.min.js +1 -1
  113. package/editor/Editor.d.ts +32 -0
  114. package/editor/Editor.vue +15 -1
  115. package/editor/editor.cjs.js +15 -1
  116. package/editor/editor.cjs.min.js +1 -1
  117. package/editor/editor.esm.js +15 -1
  118. package/editor/editor.esm.min.js +1 -1
  119. package/editor/editor.js +15 -1
  120. package/editor/editor.min.js +1 -1
  121. package/inputmask/InputMask.vue +9 -6
  122. package/inputmask/inputmask.cjs.js +14 -6
  123. package/inputmask/inputmask.cjs.min.js +1 -1
  124. package/inputmask/inputmask.esm.js +15 -7
  125. package/inputmask/inputmask.esm.min.js +1 -1
  126. package/inputmask/inputmask.js +14 -6
  127. package/inputmask/inputmask.min.js +1 -1
  128. package/inputnumber/InputNumber.d.ts +31 -7
  129. package/inputnumber/InputNumber.vue +53 -20
  130. package/inputnumber/inputnumber.cjs.js +75 -29
  131. package/inputnumber/inputnumber.cjs.min.js +1 -1
  132. package/inputnumber/inputnumber.esm.js +76 -30
  133. package/inputnumber/inputnumber.esm.min.js +1 -1
  134. package/inputnumber/inputnumber.js +75 -29
  135. package/inputnumber/inputnumber.min.js +1 -1
  136. package/inputswitch/InputSwitch.d.ts +24 -8
  137. package/inputswitch/InputSwitch.vue +27 -12
  138. package/inputswitch/inputswitch.cjs.js +38 -20
  139. package/inputswitch/inputswitch.cjs.min.js +1 -1
  140. package/inputswitch/inputswitch.esm.js +39 -21
  141. package/inputswitch/inputswitch.esm.min.js +1 -1
  142. package/inputswitch/inputswitch.js +38 -20
  143. package/inputswitch/inputswitch.min.js +1 -1
  144. package/inputtext/InputText.vue +1 -2
  145. package/inputtext/inputtext.cjs.js +3 -4
  146. package/inputtext/inputtext.cjs.min.js +1 -1
  147. package/inputtext/inputtext.esm.js +4 -5
  148. package/inputtext/inputtext.esm.min.js +1 -1
  149. package/inputtext/inputtext.js +3 -4
  150. package/inputtext/inputtext.min.js +1 -1
  151. package/knob/Knob.d.ts +12 -0
  152. package/knob/Knob.vue +62 -2
  153. package/knob/knob.cjs.js +73 -5
  154. package/knob/knob.cjs.min.js +1 -1
  155. package/knob/knob.esm.js +73 -5
  156. package/knob/knob.esm.min.js +1 -1
  157. package/knob/knob.js +73 -5
  158. package/knob/knob.min.js +1 -1
  159. package/listbox/Listbox.d.ts +53 -7
  160. package/listbox/Listbox.vue +500 -135
  161. package/listbox/listbox.cjs.js +597 -193
  162. package/listbox/listbox.cjs.min.js +1 -1
  163. package/listbox/listbox.esm.js +599 -195
  164. package/listbox/listbox.esm.min.js +1 -1
  165. package/listbox/listbox.js +597 -193
  166. package/listbox/listbox.min.js +1 -1
  167. package/menu/Menu.d.ts +1 -1
  168. package/menu/Menuitem.vue +2 -2
  169. package/menu/menu.cjs.js +12 -6
  170. package/menu/menu.cjs.min.js +1 -1
  171. package/menu/menu.esm.js +13 -7
  172. package/menu/menu.esm.min.js +1 -1
  173. package/menu/menu.js +12 -6
  174. package/menu/menu.min.js +1 -1
  175. package/menubar/MenubarSub.vue +3 -3
  176. package/menubar/menubar.cjs.js +14 -8
  177. package/menubar/menubar.cjs.min.js +1 -1
  178. package/menubar/menubar.esm.js +15 -9
  179. package/menubar/menubar.esm.min.js +1 -1
  180. package/menubar/menubar.js +14 -8
  181. package/menubar/menubar.min.js +1 -1
  182. package/menuitem/MenuItem.d.ts +1 -1
  183. package/multiselect/MultiSelect.d.ts +111 -51
  184. package/multiselect/MultiSelect.vue +629 -338
  185. package/multiselect/multiselect.cjs.js +748 -428
  186. package/multiselect/multiselect.cjs.min.js +1 -1
  187. package/multiselect/multiselect.esm.js +750 -430
  188. package/multiselect/multiselect.esm.min.js +1 -1
  189. package/multiselect/multiselect.js +748 -428
  190. package/multiselect/multiselect.min.js +1 -1
  191. package/overlaypanel/OverlayPanel.d.ts +1 -1
  192. package/overlaypanel/OverlayPanel.vue +14 -2
  193. package/overlaypanel/overlaypanel.cjs.js +14 -2
  194. package/overlaypanel/overlaypanel.cjs.min.js +1 -1
  195. package/overlaypanel/overlaypanel.esm.js +14 -2
  196. package/overlaypanel/overlaypanel.esm.min.js +1 -1
  197. package/overlaypanel/overlaypanel.js +14 -2
  198. package/overlaypanel/overlaypanel.min.js +1 -1
  199. package/package.json +2 -2
  200. package/paginator/Paginator.d.ts +2 -2
  201. package/password/Password.d.ts +36 -8
  202. package/password/Password.vue +50 -14
  203. package/password/password.cjs.js +69 -24
  204. package/password/password.cjs.min.js +1 -1
  205. package/password/password.esm.js +71 -26
  206. package/password/password.esm.min.js +1 -1
  207. package/password/password.js +69 -24
  208. package/password/password.min.js +1 -1
  209. package/picklist/PickList.d.ts +8 -0
  210. package/picklist/PickList.vue +10 -2
  211. package/picklist/picklist.cjs.js +68 -50
  212. package/picklist/picklist.cjs.min.js +1 -1
  213. package/picklist/picklist.esm.js +69 -51
  214. package/picklist/picklist.esm.min.js +1 -1
  215. package/picklist/picklist.js +68 -50
  216. package/picklist/picklist.min.js +1 -1
  217. package/portal/Portal.d.ts +1 -1
  218. package/radiobutton/RadioButton.d.ts +28 -4
  219. package/radiobutton/RadioButton.vue +36 -11
  220. package/radiobutton/radiobutton.cjs.js +49 -23
  221. package/radiobutton/radiobutton.cjs.min.js +1 -1
  222. package/radiobutton/radiobutton.esm.js +50 -24
  223. package/radiobutton/radiobutton.esm.min.js +1 -1
  224. package/radiobutton/radiobutton.js +49 -23
  225. package/radiobutton/radiobutton.min.js +1 -1
  226. package/rating/Rating.d.ts +4 -0
  227. package/rating/Rating.vue +61 -7
  228. package/rating/rating.cjs.js +90 -16
  229. package/rating/rating.cjs.min.js +1 -1
  230. package/rating/rating.esm.js +91 -17
  231. package/rating/rating.esm.min.js +1 -1
  232. package/rating/rating.js +90 -16
  233. package/rating/rating.min.js +1 -1
  234. package/resources/primevue.css +8 -0
  235. package/resources/primevue.min.css +1 -1
  236. package/resources/themes/arya-blue/theme.css +82 -40
  237. package/resources/themes/arya-green/theme.css +82 -40
  238. package/resources/themes/arya-orange/theme.css +82 -40
  239. package/resources/themes/arya-purple/theme.css +82 -40
  240. package/resources/themes/bootstrap4-dark-blue/theme.css +82 -40
  241. package/resources/themes/bootstrap4-dark-purple/theme.css +82 -40
  242. package/resources/themes/bootstrap4-light-blue/theme.css +82 -40
  243. package/resources/themes/bootstrap4-light-purple/theme.css +82 -40
  244. package/resources/themes/fluent-light/theme.css +82 -40
  245. package/resources/themes/lara-dark-blue/theme.css +82 -40
  246. package/resources/themes/lara-dark-indigo/theme.css +82 -40
  247. package/resources/themes/lara-dark-purple/theme.css +82 -40
  248. package/resources/themes/lara-dark-teal/theme.css +82 -40
  249. package/resources/themes/lara-light-blue/theme.css +82 -40
  250. package/resources/themes/lara-light-indigo/theme.css +82 -40
  251. package/resources/themes/lara-light-purple/theme.css +82 -40
  252. package/resources/themes/lara-light-teal/theme.css +82 -40
  253. package/resources/themes/luna-amber/theme.css +82 -40
  254. package/resources/themes/luna-blue/theme.css +82 -40
  255. package/resources/themes/luna-green/theme.css +82 -40
  256. package/resources/themes/luna-pink/theme.css +82 -40
  257. package/resources/themes/md-dark-deeppurple/theme.css +82 -40
  258. package/resources/themes/md-dark-indigo/theme.css +82 -40
  259. package/resources/themes/md-light-deeppurple/theme.css +82 -40
  260. package/resources/themes/md-light-indigo/theme.css +82 -40
  261. package/resources/themes/mdc-dark-deeppurple/theme.css +82 -40
  262. package/resources/themes/mdc-dark-indigo/theme.css +82 -40
  263. package/resources/themes/mdc-light-deeppurple/theme.css +82 -40
  264. package/resources/themes/mdc-light-indigo/theme.css +82 -40
  265. package/resources/themes/nova/theme.css +82 -40
  266. package/resources/themes/nova-accent/theme.css +82 -40
  267. package/resources/themes/nova-alt/theme.css +82 -40
  268. package/resources/themes/nova-vue/theme.css +82 -40
  269. package/resources/themes/rhea/theme.css +82 -40
  270. package/resources/themes/saga-blue/theme.css +82 -40
  271. package/resources/themes/saga-green/theme.css +82 -40
  272. package/resources/themes/saga-orange/theme.css +82 -40
  273. package/resources/themes/saga-purple/theme.css +82 -40
  274. package/resources/themes/tailwind-light/theme.css +82 -40
  275. package/resources/themes/vela-blue/theme.css +82 -40
  276. package/resources/themes/vela-green/theme.css +82 -40
  277. package/resources/themes/vela-orange/theme.css +82 -40
  278. package/resources/themes/vela-purple/theme.css +82 -40
  279. package/ripple/ripple.cjs.js +1 -0
  280. package/ripple/ripple.cjs.min.js +1 -1
  281. package/ripple/ripple.esm.js +1 -0
  282. package/ripple/ripple.esm.min.js +1 -1
  283. package/ripple/ripple.js +1 -0
  284. package/ripple/ripple.min.js +1 -1
  285. package/selectbutton/SelectButton.d.ts +6 -2
  286. package/selectbutton/SelectButton.vue +89 -12
  287. package/selectbutton/selectbutton.cjs.js +97 -22
  288. package/selectbutton/selectbutton.cjs.min.js +1 -1
  289. package/selectbutton/selectbutton.esm.js +99 -24
  290. package/selectbutton/selectbutton.esm.min.js +1 -1
  291. package/selectbutton/selectbutton.js +97 -22
  292. package/selectbutton/selectbutton.min.js +1 -1
  293. package/slider/Slider.d.ts +9 -1
  294. package/slider/Slider.vue +50 -34
  295. package/slider/slider.cjs.js +59 -38
  296. package/slider/slider.cjs.min.js +1 -1
  297. package/slider/slider.esm.js +59 -38
  298. package/slider/slider.esm.min.js +1 -1
  299. package/slider/slider.js +59 -38
  300. package/slider/slider.min.js +1 -1
  301. package/splitbutton/SplitButton.d.ts +1 -1
  302. package/splitter/Splitter.vue +30 -1
  303. package/splitter/splitter.cjs.js +30 -1
  304. package/splitter/splitter.cjs.min.js +1 -1
  305. package/splitter/splitter.esm.js +30 -1
  306. package/splitter/splitter.esm.min.js +1 -1
  307. package/splitter/splitter.js +30 -1
  308. package/splitter/splitter.min.js +1 -1
  309. package/textarea/Textarea.vue +1 -2
  310. package/textarea/textarea.cjs.js +3 -5
  311. package/textarea/textarea.cjs.min.js +1 -1
  312. package/textarea/textarea.esm.js +4 -6
  313. package/textarea/textarea.esm.min.js +1 -1
  314. package/textarea/textarea.js +3 -5
  315. package/textarea/textarea.min.js +1 -1
  316. package/tieredmenu/TieredMenu.d.ts +1 -1
  317. package/tieredmenu/TieredMenuSub.vue +3 -3
  318. package/tieredmenu/tieredmenu.cjs.js +14 -8
  319. package/tieredmenu/tieredmenu.cjs.min.js +1 -1
  320. package/tieredmenu/tieredmenu.esm.js +15 -9
  321. package/tieredmenu/tieredmenu.esm.min.js +1 -1
  322. package/tieredmenu/tieredmenu.js +14 -8
  323. package/tieredmenu/tieredmenu.min.js +1 -1
  324. package/timeline/Timeline.d.ts +10 -1
  325. package/timeline/Timeline.vue +1 -1
  326. package/timeline/timeline.cjs.js +5 -1
  327. package/timeline/timeline.cjs.min.js +1 -1
  328. package/timeline/timeline.esm.js +5 -1
  329. package/timeline/timeline.esm.min.js +1 -1
  330. package/timeline/timeline.js +5 -1
  331. package/timeline/timeline.min.js +1 -1
  332. package/togglebutton/ToggleButton.d.ts +42 -0
  333. package/togglebutton/ToggleButton.vue +44 -7
  334. package/togglebutton/togglebutton.cjs.js +59 -13
  335. package/togglebutton/togglebutton.cjs.min.js +1 -1
  336. package/togglebutton/togglebutton.esm.js +60 -14
  337. package/togglebutton/togglebutton.esm.min.js +1 -1
  338. package/togglebutton/togglebutton.js +59 -13
  339. package/togglebutton/togglebutton.min.js +1 -1
  340. package/tooltip/tooltip.cjs.js +20 -11
  341. package/tooltip/tooltip.cjs.min.js +1 -1
  342. package/tooltip/tooltip.esm.js +21 -12
  343. package/tooltip/tooltip.esm.min.js +1 -1
  344. package/tooltip/tooltip.js +20 -11
  345. package/tooltip/tooltip.min.js +1 -1
  346. package/tree/Tree.vue +5 -1
  347. package/tree/TreeNode.vue +20 -19
  348. package/tree/tree.cjs.js +47 -32
  349. package/tree/tree.cjs.min.js +1 -1
  350. package/tree/tree.esm.js +47 -32
  351. package/tree/tree.esm.min.js +1 -1
  352. package/tree/tree.js +47 -32
  353. package/tree/tree.min.js +1 -1
  354. package/treeselect/TreeSelect.d.ts +26 -10
  355. package/treeselect/TreeSelect.vue +52 -29
  356. package/treeselect/treeselect.cjs.js +74 -41
  357. package/treeselect/treeselect.cjs.min.js +1 -1
  358. package/treeselect/treeselect.esm.js +76 -43
  359. package/treeselect/treeselect.esm.min.js +1 -1
  360. package/treeselect/treeselect.js +74 -41
  361. package/treeselect/treeselect.min.js +1 -1
  362. package/tristatecheckbox/TriStateCheckbox.d.ts +20 -4
  363. package/tristatecheckbox/TriStateCheckbox.vue +52 -15
  364. package/tristatecheckbox/tristatecheckbox.cjs.js +67 -26
  365. package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
  366. package/tristatecheckbox/tristatecheckbox.esm.js +68 -27
  367. package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
  368. package/tristatecheckbox/tristatecheckbox.js +67 -26
  369. package/tristatecheckbox/tristatecheckbox.min.js +1 -1
  370. package/utils/Utils.d.ts +3 -2
  371. package/utils/utils.cjs.js +239 -173
  372. package/utils/utils.cjs.min.js +1 -1
  373. package/utils/utils.esm.js +239 -173
  374. package/utils/utils.esm.min.js +1 -1
  375. package/utils/utils.js +239 -173
  376. package/utils/utils.min.js +1 -1
  377. package/vetur-attributes.json +612 -136
  378. package/vetur-tags.json +180 -59
  379. package/virtualscroller/VirtualScroller.d.ts +10 -0
  380. package/virtualscroller/VirtualScroller.vue +18 -17
  381. package/virtualscroller/virtualscroller.cjs.js +22 -20
  382. package/virtualscroller/virtualscroller.cjs.min.js +1 -1
  383. package/virtualscroller/virtualscroller.esm.js +22 -20
  384. package/virtualscroller/virtualscroller.esm.min.js +1 -1
  385. package/virtualscroller/virtualscroller.js +22 -20
  386. package/virtualscroller/virtualscroller.min.js +1 -1
  387. package/web-types.json +1745 -338
@@ -1 +1 @@
1
- "use strict";var t=require("vue"),s={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=this.getContentPosition(),a=(t=0,s)=>t<=s?0:t,h=(t,s,e)=>t*s+e,c=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:a(t[0],l[0]),cols:a(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||(c(h(s.cols,n[1],r.left),h(s.rows,n[0],r.top)),this.first=s)}else{const s=a(t,l);s!==o&&(i?c(h(s,n,r.left),0):c(0,h(s,n,r.top)),this.first=s)}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=0,u=this.last,p=!1;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},p=d.rows!==this.first.rows&&u.rows!==this.last.rows||d.cols!==this.first.cols&&u.cols!==this.last.cols,this.lastScrollPos={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),p=d!==this.first&&u!==this.last,this.lastScrollPos=t}return{first:d,last:u,isRangeChanged:p}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const e={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};!function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),s.render=function(s,i,o,l,n,r){return o.disabled?(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.renderSlot(s.$slots,"default"),t.renderSlot(s.$slots,"content",{items:o.items,rows:o.items,columns:r.loadedColumns})],64)):(t.openBlock(),t.createElementBlock("div",{key:0,ref:r.elementRef,class:t.normalizeClass(r.containerClass),tabindex:0,style:t.normalizeStyle(o.style),onScroll:i[0]||(i[0]=(...t)=>r.onScroll&&r.onScroll(...t))},[t.renderSlot(s.$slots,"content",{styleClass:r.contentClass,items:r.loadedItems,getItemOptions:r.getOptions,loading:n.d_loading,getLoaderOptions:r.getLoaderOptions,itemSize:o.itemSize,rows:r.loadedRows,columns:r.loadedColumns,contentRef:r.contentRef,spacerStyle:n.spacerStyle,contentStyle:n.contentStyle,vertical:r.isVertical(),horizontal:r.isHorizontal(),both:r.isBoth()},(()=>[t.createElementVNode("div",{ref:r.contentRef,class:t.normalizeClass(r.contentClass),style:t.normalizeStyle(n.contentStyle)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(r.loadedItems,((e,i)=>t.renderSlot(s.$slots,"item",{key:i,item:e,options:r.getOptions(i)}))),128))],6)])),o.showSpacer?(t.openBlock(),t.createElementBlock("div",{key:0,class:"p-virtualscroller-spacer",style:t.normalizeStyle(n.spacerStyle)},null,4)):t.createCommentVNode("",!0),!o.loaderDisabled&&o.showLoader&&n.d_loading?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(r.loaderClass)},[s.$slots&&s.$slots.loader?(t.openBlock(!0),t.createElementBlock(t.Fragment,{key:0},t.renderList(n.loaderArr,((e,i)=>t.renderSlot(s.$slots,"loader",{key:i,options:r.getLoaderOptions(i,r.isBoth()&&{numCols:s.d_numItemsInViewport.cols})}))),128)):(t.openBlock(),t.createElementBlock("i",e))],2)):t.createCommentVNode("",!0)],38))},module.exports=s;
1
+ "use strict";var t=require("vue"),s={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1},tabindex:{type:Number,default:0}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=(t=0,s)=>t<=s?0:t,a=(t,s)=>t*s,h=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:r(t[0],l[0]),cols:r(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||h(a(s.cols,n[1]),a(s.rows,n[0]))}else{const s=r(t,l);s!==o&&(i?h(a(s,n),0):h(0,a(s,n)))}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=e?{rows:0,cols:0}:0,u=this.last,p=!1,f=this.lastScrollPos;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},p=d.rows!==this.first.rows||u.rows!==this.last.rows||d.cols!==this.first.cols||u.cols!==this.last.cols,f={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),p=d!==this.first||u!==this.last,f=t}return{first:d,last:u,isRangeChanged:p,scrollPos:f}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i,scrollPos:o}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.lastScrollPos=o,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const e=["tabindex"],i={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};!function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),s.render=function(s,o,l,n,r,a){return l.disabled?(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.renderSlot(s.$slots,"default"),t.renderSlot(s.$slots,"content",{items:l.items,rows:l.items,columns:a.loadedColumns})],64)):(t.openBlock(),t.createElementBlock("div",{key:0,ref:a.elementRef,class:t.normalizeClass(a.containerClass),tabindex:l.tabindex,style:t.normalizeStyle(l.style),onScroll:o[0]||(o[0]=(...t)=>a.onScroll&&a.onScroll(...t))},[t.renderSlot(s.$slots,"content",{styleClass:a.contentClass,items:a.loadedItems,getItemOptions:a.getOptions,loading:r.d_loading,getLoaderOptions:a.getLoaderOptions,itemSize:l.itemSize,rows:a.loadedRows,columns:a.loadedColumns,contentRef:a.contentRef,spacerStyle:r.spacerStyle,contentStyle:r.contentStyle,vertical:a.isVertical(),horizontal:a.isHorizontal(),both:a.isBoth()},(()=>[t.createElementVNode("div",{ref:a.contentRef,class:t.normalizeClass(a.contentClass),style:t.normalizeStyle(r.contentStyle)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(a.loadedItems,((e,i)=>t.renderSlot(s.$slots,"item",{key:i,item:e,options:a.getOptions(i)}))),128))],6)])),l.showSpacer?(t.openBlock(),t.createElementBlock("div",{key:0,class:"p-virtualscroller-spacer",style:t.normalizeStyle(r.spacerStyle)},null,4)):t.createCommentVNode("",!0),!l.loaderDisabled&&l.showLoader&&r.d_loading?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(a.loaderClass)},[s.$slots&&s.$slots.loader?(t.openBlock(!0),t.createElementBlock(t.Fragment,{key:0},t.renderList(r.loaderArr,((e,i)=>t.renderSlot(s.$slots,"loader",{key:i,options:a.getLoaderOptions(i,a.isBoth()&&{numCols:s.d_numItemsInViewport.cols})}))),128)):(t.openBlock(),t.createElementBlock("i",i))],2)):t.createCommentVNode("",!0)],46,e))},module.exports=s;
@@ -59,6 +59,10 @@ var script = {
59
59
  showLoader: {
60
60
  type: Boolean,
61
61
  default: false
62
+ },
63
+ tabindex: {
64
+ type: Number,
65
+ default: 0
62
66
  }
63
67
  },
64
68
  data() {
@@ -123,24 +127,20 @@ var script = {
123
127
  const first = this.first;
124
128
  const { numToleratedItems } = this.calculateNumItems();
125
129
  const itemSize = this.itemSize;
126
- const contentPos = this.getContentPosition();
127
130
  const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index);
128
- const calculateCoord = (_first, _size, _cpos) => (_first * _size) + _cpos;
131
+ const calculateCoord = (_first, _size) => (_first * _size);
129
132
  const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });
130
133
 
131
134
  if (both) {
132
135
  const newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };
133
136
  if (newFirst.rows !== first.rows || newFirst.cols !== first.cols) {
134
- scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));
135
- this.first = newFirst;
137
+ scrollTo(calculateCoord(newFirst.cols, itemSize[1]), calculateCoord(newFirst.rows, itemSize[0]));
136
138
  }
137
139
  }
138
140
  else {
139
141
  const newFirst = calculateFirst(index, numToleratedItems);
140
-
141
142
  if (newFirst !== first) {
142
- horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), 0) : scrollTo(0, calculateCoord(newFirst, itemSize, contentPos.top));
143
- this.first = newFirst;
143
+ horizontal ? scrollTo(calculateCoord(newFirst, itemSize), 0) : scrollTo(0, calculateCoord(newFirst, itemSize));
144
144
  }
145
145
  }
146
146
  },
@@ -371,9 +371,10 @@ var script = {
371
371
  const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top);
372
372
  const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left);
373
373
 
374
- let newFirst = 0;
374
+ let newFirst = both ? { rows: 0, cols: 0 } : 0;
375
375
  let newLast = this.last;
376
376
  let isRangeChanged = false;
377
+ let newScrollPos = this.lastScrollPos;
377
378
 
378
379
  if (both) {
379
380
  const isScrollDown = this.lastScrollPos.top <= scrollTop;
@@ -393,9 +394,8 @@ var script = {
393
394
  cols: calculateLast(currentIndex.cols, newFirst.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], true)
394
395
  };
395
396
 
396
- isRangeChanged = (newFirst.rows !== this.first.rows && newLast.rows !== this.last.rows) || (newFirst.cols !== this.first.cols && newLast.cols !== this.last.cols);
397
-
398
- this.lastScrollPos = { top: scrollTop, left: scrollLeft };
397
+ isRangeChanged = (newFirst.rows !== this.first.rows || newLast.rows !== this.last.rows) || (newFirst.cols !== this.first.cols || newLast.cols !== this.last.cols);
398
+ newScrollPos = { top: scrollTop, left: scrollLeft };
399
399
  }
400
400
  else {
401
401
  const scrollPos = horizontal ? scrollLeft : scrollTop;
@@ -405,19 +405,19 @@ var script = {
405
405
 
406
406
  newFirst = calculateFirst(currentIndex, triggerIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);
407
407
  newLast = calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);
408
- isRangeChanged = newFirst !== this.first && newLast !== this.last;
409
-
410
- this.lastScrollPos = scrollPos;
408
+ isRangeChanged = newFirst !== this.first || newLast !== this.last;
409
+ newScrollPos = scrollPos;
411
410
  }
412
411
 
413
412
  return {
414
413
  first: newFirst,
415
414
  last: newLast,
416
- isRangeChanged
415
+ isRangeChanged,
416
+ scrollPos: newScrollPos
417
417
  }
418
418
  },
419
419
  onScrollChange(event) {
420
- const { first, last, isRangeChanged } = this.onScrollPositionChange(event);
420
+ const { first, last, isRangeChanged, scrollPos } = this.onScrollPositionChange(event);
421
421
 
422
422
  if (isRangeChanged) {
423
423
  const newState = { first, last };
@@ -426,6 +426,7 @@ var script = {
426
426
 
427
427
  this.first = first;
428
428
  this.last = last;
429
+ this.lastScrollPos = scrollPos;
429
430
 
430
431
  this.$emit('scroll-index-change', newState);
431
432
 
@@ -541,7 +542,8 @@ var script = {
541
542
  }
542
543
  };
543
544
 
544
- const _hoisted_1 = {
545
+ const _hoisted_1 = ["tabindex"];
546
+ const _hoisted_2 = {
545
547
  key: 1,
546
548
  class: "p-virtualscroller-loading-icon pi pi-spinner pi-spin"
547
549
  };
@@ -552,7 +554,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
552
554
  key: 0,
553
555
  ref: $options.elementRef,
554
556
  class: normalizeClass($options.containerClass),
555
- tabindex: 0,
557
+ tabindex: $props.tabindex,
556
558
  style: normalizeStyle($props.style),
557
559
  onScroll: _cache[0] || (_cache[0] = (...args) => ($options.onScroll && $options.onScroll(...args)))
558
560
  }, [
@@ -605,10 +607,10 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
605
607
  options: $options.getLoaderOptions(index, $options.isBoth() && { numCols: _ctx.d_numItemsInViewport.cols })
606
608
  })
607
609
  }), 128))
608
- : (openBlock(), createElementBlock("i", _hoisted_1))
610
+ : (openBlock(), createElementBlock("i", _hoisted_2))
609
611
  ], 2))
610
612
  : createCommentVNode("", true)
611
- ], 38))
613
+ ], 46, _hoisted_1))
612
614
  : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
613
615
  renderSlot(_ctx.$slots, "default"),
614
616
  renderSlot(_ctx.$slots, "content", {
@@ -1 +1 @@
1
- import{openBlock as t,createElementBlock as s,normalizeClass as e,normalizeStyle as i,renderSlot as o,createElementVNode as l,Fragment as n,renderList as r,createCommentVNode as a}from"vue";var h={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=this.getContentPosition(),a=(t=0,s)=>t<=s?0:t,h=(t,s,e)=>t*s+e,c=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:a(t[0],l[0]),cols:a(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||(c(h(s.cols,n[1],r.left),h(s.rows,n[0],r.top)),this.first=s)}else{const s=a(t,l);s!==o&&(i?c(h(s,n,r.left),0):c(0,h(s,n,r.top)),this.first=s)}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=0,u=this.last,f=!1;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},f=d.rows!==this.first.rows&&u.rows!==this.last.rows||d.cols!==this.first.cols&&u.cols!==this.last.cols,this.lastScrollPos={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),f=d!==this.first&&u!==this.last,this.lastScrollPos=t}return{first:d,last:u,isRangeChanged:f}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const c={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};!function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),h.render=function(h,m,d,u,f,p){return d.disabled?(t(),s(n,{key:1},[o(h.$slots,"default"),o(h.$slots,"content",{items:d.items,rows:d.items,columns:p.loadedColumns})],64)):(t(),s("div",{key:0,ref:p.elementRef,class:e(p.containerClass),tabindex:0,style:i(d.style),onScroll:m[0]||(m[0]=(...t)=>p.onScroll&&p.onScroll(...t))},[o(h.$slots,"content",{styleClass:p.contentClass,items:p.loadedItems,getItemOptions:p.getOptions,loading:f.d_loading,getLoaderOptions:p.getLoaderOptions,itemSize:d.itemSize,rows:p.loadedRows,columns:p.loadedColumns,contentRef:p.contentRef,spacerStyle:f.spacerStyle,contentStyle:f.contentStyle,vertical:p.isVertical(),horizontal:p.isHorizontal(),both:p.isBoth()},(()=>[l("div",{ref:p.contentRef,class:e(p.contentClass),style:i(f.contentStyle)},[(t(!0),s(n,null,r(p.loadedItems,((t,s)=>o(h.$slots,"item",{key:s,item:t,options:p.getOptions(s)}))),128))],6)])),d.showSpacer?(t(),s("div",{key:0,class:"p-virtualscroller-spacer",style:i(f.spacerStyle)},null,4)):a("",!0),!d.loaderDisabled&&d.showLoader&&f.d_loading?(t(),s("div",{key:1,class:e(p.loaderClass)},[h.$slots&&h.$slots.loader?(t(!0),s(n,{key:0},r(f.loaderArr,((t,s)=>o(h.$slots,"loader",{key:s,options:p.getLoaderOptions(s,p.isBoth()&&{numCols:h.d_numItemsInViewport.cols})}))),128)):(t(),s("i",c))],2)):a("",!0)],38))};export{h as default};
1
+ import{openBlock as t,createElementBlock as s,normalizeClass as e,normalizeStyle as i,renderSlot as o,createElementVNode as l,Fragment as n,renderList as r,createCommentVNode as a}from"vue";var h={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1},tabindex:{type:Number,default:0}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=(t=0,s)=>t<=s?0:t,a=(t,s)=>t*s,h=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:r(t[0],l[0]),cols:r(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||h(a(s.cols,n[1]),a(s.rows,n[0]))}else{const s=r(t,l);s!==o&&(i?h(a(s,n),0):h(0,a(s,n)))}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=e?{rows:0,cols:0}:0,u=this.last,f=!1,p=this.lastScrollPos;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},f=d.rows!==this.first.rows||u.rows!==this.last.rows||d.cols!==this.first.cols||u.cols!==this.last.cols,p={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),f=d!==this.first||u!==this.last,p=t}return{first:d,last:u,isRangeChanged:f,scrollPos:p}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i,scrollPos:o}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.lastScrollPos=o,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const c=["tabindex"],m={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};!function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),h.render=function(h,d,u,f,p,w){return u.disabled?(t(),s(n,{key:1},[o(h.$slots,"default"),o(h.$slots,"content",{items:u.items,rows:u.items,columns:w.loadedColumns})],64)):(t(),s("div",{key:0,ref:w.elementRef,class:e(w.containerClass),tabindex:u.tabindex,style:i(u.style),onScroll:d[0]||(d[0]=(...t)=>w.onScroll&&w.onScroll(...t))},[o(h.$slots,"content",{styleClass:w.contentClass,items:w.loadedItems,getItemOptions:w.getOptions,loading:p.d_loading,getLoaderOptions:w.getLoaderOptions,itemSize:u.itemSize,rows:w.loadedRows,columns:w.loadedColumns,contentRef:w.contentRef,spacerStyle:p.spacerStyle,contentStyle:p.contentStyle,vertical:w.isVertical(),horizontal:w.isHorizontal(),both:w.isBoth()},(()=>[l("div",{ref:w.contentRef,class:e(w.contentClass),style:i(p.contentStyle)},[(t(!0),s(n,null,r(w.loadedItems,((t,s)=>o(h.$slots,"item",{key:s,item:t,options:w.getOptions(s)}))),128))],6)])),u.showSpacer?(t(),s("div",{key:0,class:"p-virtualscroller-spacer",style:i(p.spacerStyle)},null,4)):a("",!0),!u.loaderDisabled&&u.showLoader&&p.d_loading?(t(),s("div",{key:1,class:e(w.loaderClass)},[h.$slots&&h.$slots.loader?(t(!0),s(n,{key:0},r(p.loaderArr,((t,s)=>o(h.$slots,"loader",{key:s,options:w.getLoaderOptions(s,w.isBoth()&&{numCols:h.d_numItemsInViewport.cols})}))),128)):(t(),s("i",m))],2)):a("",!0)],46,c))};export{h as default};
@@ -61,6 +61,10 @@ this.primevue.virtualscroller = (function (vue) {
61
61
  showLoader: {
62
62
  type: Boolean,
63
63
  default: false
64
+ },
65
+ tabindex: {
66
+ type: Number,
67
+ default: 0
64
68
  }
65
69
  },
66
70
  data() {
@@ -125,24 +129,20 @@ this.primevue.virtualscroller = (function (vue) {
125
129
  const first = this.first;
126
130
  const { numToleratedItems } = this.calculateNumItems();
127
131
  const itemSize = this.itemSize;
128
- const contentPos = this.getContentPosition();
129
132
  const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index);
130
- const calculateCoord = (_first, _size, _cpos) => (_first * _size) + _cpos;
133
+ const calculateCoord = (_first, _size) => (_first * _size);
131
134
  const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });
132
135
 
133
136
  if (both) {
134
137
  const newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };
135
138
  if (newFirst.rows !== first.rows || newFirst.cols !== first.cols) {
136
- scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));
137
- this.first = newFirst;
139
+ scrollTo(calculateCoord(newFirst.cols, itemSize[1]), calculateCoord(newFirst.rows, itemSize[0]));
138
140
  }
139
141
  }
140
142
  else {
141
143
  const newFirst = calculateFirst(index, numToleratedItems);
142
-
143
144
  if (newFirst !== first) {
144
- horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), 0) : scrollTo(0, calculateCoord(newFirst, itemSize, contentPos.top));
145
- this.first = newFirst;
145
+ horizontal ? scrollTo(calculateCoord(newFirst, itemSize), 0) : scrollTo(0, calculateCoord(newFirst, itemSize));
146
146
  }
147
147
  }
148
148
  },
@@ -373,9 +373,10 @@ this.primevue.virtualscroller = (function (vue) {
373
373
  const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top);
374
374
  const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left);
375
375
 
376
- let newFirst = 0;
376
+ let newFirst = both ? { rows: 0, cols: 0 } : 0;
377
377
  let newLast = this.last;
378
378
  let isRangeChanged = false;
379
+ let newScrollPos = this.lastScrollPos;
379
380
 
380
381
  if (both) {
381
382
  const isScrollDown = this.lastScrollPos.top <= scrollTop;
@@ -395,9 +396,8 @@ this.primevue.virtualscroller = (function (vue) {
395
396
  cols: calculateLast(currentIndex.cols, newFirst.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], true)
396
397
  };
397
398
 
398
- isRangeChanged = (newFirst.rows !== this.first.rows && newLast.rows !== this.last.rows) || (newFirst.cols !== this.first.cols && newLast.cols !== this.last.cols);
399
-
400
- this.lastScrollPos = { top: scrollTop, left: scrollLeft };
399
+ isRangeChanged = (newFirst.rows !== this.first.rows || newLast.rows !== this.last.rows) || (newFirst.cols !== this.first.cols || newLast.cols !== this.last.cols);
400
+ newScrollPos = { top: scrollTop, left: scrollLeft };
401
401
  }
402
402
  else {
403
403
  const scrollPos = horizontal ? scrollLeft : scrollTop;
@@ -407,19 +407,19 @@ this.primevue.virtualscroller = (function (vue) {
407
407
 
408
408
  newFirst = calculateFirst(currentIndex, triggerIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);
409
409
  newLast = calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);
410
- isRangeChanged = newFirst !== this.first && newLast !== this.last;
411
-
412
- this.lastScrollPos = scrollPos;
410
+ isRangeChanged = newFirst !== this.first || newLast !== this.last;
411
+ newScrollPos = scrollPos;
413
412
  }
414
413
 
415
414
  return {
416
415
  first: newFirst,
417
416
  last: newLast,
418
- isRangeChanged
417
+ isRangeChanged,
418
+ scrollPos: newScrollPos
419
419
  }
420
420
  },
421
421
  onScrollChange(event) {
422
- const { first, last, isRangeChanged } = this.onScrollPositionChange(event);
422
+ const { first, last, isRangeChanged, scrollPos } = this.onScrollPositionChange(event);
423
423
 
424
424
  if (isRangeChanged) {
425
425
  const newState = { first, last };
@@ -428,6 +428,7 @@ this.primevue.virtualscroller = (function (vue) {
428
428
 
429
429
  this.first = first;
430
430
  this.last = last;
431
+ this.lastScrollPos = scrollPos;
431
432
 
432
433
  this.$emit('scroll-index-change', newState);
433
434
 
@@ -543,7 +544,8 @@ this.primevue.virtualscroller = (function (vue) {
543
544
  }
544
545
  };
545
546
 
546
- const _hoisted_1 = {
547
+ const _hoisted_1 = ["tabindex"];
548
+ const _hoisted_2 = {
547
549
  key: 1,
548
550
  class: "p-virtualscroller-loading-icon pi pi-spinner pi-spin"
549
551
  };
@@ -554,7 +556,7 @@ this.primevue.virtualscroller = (function (vue) {
554
556
  key: 0,
555
557
  ref: $options.elementRef,
556
558
  class: vue.normalizeClass($options.containerClass),
557
- tabindex: 0,
559
+ tabindex: $props.tabindex,
558
560
  style: vue.normalizeStyle($props.style),
559
561
  onScroll: _cache[0] || (_cache[0] = (...args) => ($options.onScroll && $options.onScroll(...args)))
560
562
  }, [
@@ -607,10 +609,10 @@ this.primevue.virtualscroller = (function (vue) {
607
609
  options: $options.getLoaderOptions(index, $options.isBoth() && { numCols: _ctx.d_numItemsInViewport.cols })
608
610
  })
609
611
  }), 128))
610
- : (vue.openBlock(), vue.createElementBlock("i", _hoisted_1))
612
+ : (vue.openBlock(), vue.createElementBlock("i", _hoisted_2))
611
613
  ], 2))
612
614
  : vue.createCommentVNode("", true)
613
- ], 38))
615
+ ], 46, _hoisted_1))
614
616
  : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
615
617
  vue.renderSlot(_ctx.$slots, "default"),
616
618
  vue.renderSlot(_ctx.$slots, "content", {
@@ -1 +1 @@
1
- this.primevue=this.primevue||{},this.primevue.virtualscroller=function(t){"use strict";var s={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=this.getContentPosition(),a=(t=0,s)=>t<=s?0:t,h=(t,s,e)=>t*s+e,c=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:a(t[0],l[0]),cols:a(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||(c(h(s.cols,n[1],r.left),h(s.rows,n[0],r.top)),this.first=s)}else{const s=a(t,l);s!==o&&(i?c(h(s,n,r.left),0):c(0,h(s,n,r.top)),this.first=s)}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=0,u=this.last,p=!1;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},p=d.rows!==this.first.rows&&u.rows!==this.last.rows||d.cols!==this.first.cols&&u.cols!==this.last.cols,this.lastScrollPos={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),p=d!==this.first&&u!==this.last,this.lastScrollPos=t}return{first:d,last:u,isRangeChanged:p}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const e={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};return function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),s.render=function(s,i,o,l,n,r){return o.disabled?(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.renderSlot(s.$slots,"default"),t.renderSlot(s.$slots,"content",{items:o.items,rows:o.items,columns:r.loadedColumns})],64)):(t.openBlock(),t.createElementBlock("div",{key:0,ref:r.elementRef,class:t.normalizeClass(r.containerClass),tabindex:0,style:t.normalizeStyle(o.style),onScroll:i[0]||(i[0]=(...t)=>r.onScroll&&r.onScroll(...t))},[t.renderSlot(s.$slots,"content",{styleClass:r.contentClass,items:r.loadedItems,getItemOptions:r.getOptions,loading:n.d_loading,getLoaderOptions:r.getLoaderOptions,itemSize:o.itemSize,rows:r.loadedRows,columns:r.loadedColumns,contentRef:r.contentRef,spacerStyle:n.spacerStyle,contentStyle:n.contentStyle,vertical:r.isVertical(),horizontal:r.isHorizontal(),both:r.isBoth()},(()=>[t.createElementVNode("div",{ref:r.contentRef,class:t.normalizeClass(r.contentClass),style:t.normalizeStyle(n.contentStyle)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(r.loadedItems,((e,i)=>t.renderSlot(s.$slots,"item",{key:i,item:e,options:r.getOptions(i)}))),128))],6)])),o.showSpacer?(t.openBlock(),t.createElementBlock("div",{key:0,class:"p-virtualscroller-spacer",style:t.normalizeStyle(n.spacerStyle)},null,4)):t.createCommentVNode("",!0),!o.loaderDisabled&&o.showLoader&&n.d_loading?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(r.loaderClass)},[s.$slots&&s.$slots.loader?(t.openBlock(!0),t.createElementBlock(t.Fragment,{key:0},t.renderList(n.loaderArr,((e,i)=>t.renderSlot(s.$slots,"loader",{key:i,options:r.getLoaderOptions(i,r.isBoth()&&{numCols:s.d_numItemsInViewport.cols})}))),128)):(t.openBlock(),t.createElementBlock("i",e))],2)):t.createCommentVNode("",!0)],38))},s}(Vue);
1
+ this.primevue=this.primevue||{},this.primevue.virtualscroller=function(t){"use strict";var s={name:"VirtualScroller",emits:["update:numToleratedItems","scroll","scroll-index-change","lazy-load"],props:{id:{type:String,default:null},style:null,class:null,items:{type:Array,default:null},itemSize:{type:[Number,Array],default:0},scrollHeight:null,scrollWidth:null,orientation:{type:String,default:"vertical"},numToleratedItems:{type:Number,default:null},delay:{type:Number,default:0},lazy:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loaderDisabled:{type:Boolean,default:!1},columns:{type:Array,default:null},loading:{type:Boolean,default:!1},showSpacer:{type:Boolean,default:!0},showLoader:{type:Boolean,default:!1},tabindex:{type:Number,default:0}},data(){return{first:this.isBoth()?{rows:0,cols:0}:0,last:this.isBoth()?{rows:0,cols:0}:0,numItemsInViewport:this.isBoth()?{rows:0,cols:0}:0,lastScrollPos:this.isBoth()?{top:0,left:0}:0,d_numToleratedItems:this.numToleratedItems,d_loading:this.loading,loaderArr:[],spacerStyle:{},contentStyle:{}}},element:null,content:null,lastScrollPos:null,scrollTimeout:null,mounted(){this.init(),this.lastScrollPos=this.isBoth()?{top:0,left:0}:0},watch:{numToleratedItems(t){this.d_numToleratedItems=t},loading(t){this.d_loading=t},items(t,s){s&&s.length===(t||[]).length||this.init()},orientation(){this.lastScrollPos=this.isBoth()?{top:0,left:0}:0}},methods:{init(){this.setSize(),this.calculateOptions(),this.setSpacerSize()},isVertical(){return"vertical"===this.orientation},isHorizontal(){return"horizontal"===this.orientation},isBoth(){return"both"===this.orientation},scrollTo(t){this.element&&this.element.scrollTo(t)},scrollToIndex(t,s="auto"){const e=this.isBoth(),i=this.isHorizontal(),o=this.first,{numToleratedItems:l}=this.calculateNumItems(),n=this.itemSize,r=(t=0,s)=>t<=s?0:t,a=(t,s)=>t*s,h=(t=0,e=0)=>this.scrollTo({left:t,top:e,behavior:s});if(e){const s={rows:r(t[0],l[0]),cols:r(t[1],l[1])};s.rows===o.rows&&s.cols===o.cols||h(a(s.cols,n[1]),a(s.rows,n[0]))}else{const s=r(t,l);s!==o&&(i?h(a(s,n),0):h(0,a(s,n)))}},scrollInView(t,s,e="auto"){if(s){const i=this.isBoth(),o=this.isHorizontal(),{first:l,viewport:n}=this.getRenderedRange(),r=(t=0,s=0)=>this.scrollTo({left:t,top:s,behavior:e}),a="to-end"===s;if("to-start"===s){if(i)n.first.rows-l.rows>t[0]?r(n.first.cols*this.itemSize[1],(n.first.rows-1)*this.itemSize[0]):n.first.cols-l.cols>t[1]&&r((n.first.cols-1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.first-l>t){const t=(n.first-1)*this.itemSize;o?r(t,0):r(0,t)}}else if(a)if(i)n.last.rows-l.rows<=t[0]+1?r(n.first.cols*this.itemSize[1],(n.first.rows+1)*this.itemSize[0]):n.last.cols-l.cols<=t[1]+1&&r((n.first.cols+1)*this.itemSize[1],n.first.rows*this.itemSize[0]);else if(n.last-l<=t+1){const t=(n.first+1)*this.itemSize;o?r(t,0):r(0,t)}}else this.scrollToIndex(t,e)},getRenderedRange(){const t=(t,s)=>Math.floor(t/(s||t));let s=this.first,e=0;if(this.element){const i=this.isBoth(),o=this.isHorizontal(),l=this.element.scrollTop,n=this.element.scrollLeft;if(i)s={rows:t(l,this.itemSize[0]),cols:t(n,this.itemSize[1])},e={rows:s.rows+this.numItemsInViewport.rows,cols:s.cols+this.numItemsInViewport.cols};else{s=t(o?n:l,this.itemSize),e=s+this.numItemsInViewport}}return{first:this.first,last:this.last,viewport:{first:s,last:e}}},calculateNumItems(){const t=this.isBoth(),s=this.isHorizontal(),e=this.itemSize,i=this.getContentPosition(),o=this.element?this.element.offsetWidth-i.left:0,l=this.element?this.element.offsetHeight-i.top:0,n=(t,s)=>Math.ceil(t/(s||t)),r=t=>Math.ceil(t/2),a=t?{rows:n(l,e[0]),cols:n(o,e[1])}:n(s?o:l,e);return{numItemsInViewport:a,numToleratedItems:this.d_numToleratedItems||(t?[r(a.rows),r(a.cols)]:r(a))}},calculateOptions(){const t=this.isBoth(),s=this.first,{numItemsInViewport:e,numToleratedItems:i}=this.calculateNumItems(),o=(t,s,e,i)=>this.getLast(t+s+(t<e?2:3)*e,i),l=t?{rows:o(s.rows,e.rows,i[0]),cols:o(s.cols,e.cols,i[1],!0)}:o(s,e,i);this.last=l,this.numItemsInViewport=e,this.d_numToleratedItems=i,this.$emit("update:numToleratedItems",this.d_numToleratedItems),this.showLoader&&(this.loaderArr=t?Array.from({length:e.rows}).map((()=>Array.from({length:e.cols}))):Array.from({length:e})),this.lazy&&this.$emit("lazy-load",{first:s,last:l})},getLast(t=0,s){return this.items?Math.min(s?(this.columns||this.items[0]).length:this.items.length,t):0},getContentPosition(){if(this.content){const t=getComputedStyle(this.content),s=parseInt(t.paddingLeft,10)+Math.max(parseInt(t.left,10),0),e=parseInt(t.paddingRight,10)+Math.max(parseInt(t.right,10),0),i=parseInt(t.paddingTop,10)+Math.max(parseInt(t.top,10),0),o=parseInt(t.paddingBottom,10)+Math.max(parseInt(t.bottom,10),0);return{left:s,right:e,top:i,bottom:o,x:s+e,y:i+o}}return{left:0,right:0,top:0,bottom:0,x:0,y:0}},setSize(){if(this.element){const t=this.isBoth(),s=this.isHorizontal(),e=this.element.parentElement,i=this.scrollWidth||`${this.element.offsetWidth||e.offsetWidth}px`,o=this.scrollHeight||`${this.element.offsetHeight||e.offsetHeight}px`,l=(t,s)=>this.element.style[t]=s;t||s?(l("height",o),l("width",i)):l("height",o)}},setSpacerSize(){const t=this.items;if(t){const s=this.isBoth(),e=this.isHorizontal(),i=this.getContentPosition(),o=(t,s,e,i=0)=>this.spacerStyle={...this.spacerStyle,[`${t}`]:(s||[]).length*e+i+"px"};s?(o("height",t,this.itemSize[0],i.y),o("width",this.columns||t[1],this.itemSize[1],i.x)):e?o("width",this.columns||t,this.itemSize,i.x):o("height",t,this.itemSize,i.y)}},setContentPosition(t){if(this.content){const s=this.isBoth(),e=this.isHorizontal(),i=t?t.first:this.first,o=(t,s)=>t*s,l=(t=0,s=0)=>{this.contentStyle={...this.contentStyle,transform:`translate3d(${t}px, ${s}px, 0)`}};if(s)l(o(i.cols,this.itemSize[1]),o(i.rows,this.itemSize[0]));else{const t=o(i,this.itemSize);e?l(t,0):l(0,t)}}},onScrollPositionChange(t){const s=t.target,e=this.isBoth(),i=this.isHorizontal(),o=this.getContentPosition(),l=(t,s)=>t?t>s?t-s:t:0,n=(t,s)=>Math.floor(t/(s||t)),r=(t,s,e,i,o,l)=>t<=o?o:l?e-i-o:s+o-1,a=(t,s,e,i,o,l,n)=>t<=l?0:Math.max(0,n?t<s?e:t-l:t>s?e:t-2*l),h=(t,s,e,i,o,l)=>{let n=s+i+2*o;return t>=o&&(n+=o+1),this.getLast(n,l)},c=l(s.scrollTop,o.top),m=l(s.scrollLeft,o.left);let d=e?{rows:0,cols:0}:0,u=this.last,p=!1,f=this.lastScrollPos;if(e){const t=this.lastScrollPos.top<=c,s=this.lastScrollPos.left<=m,e={rows:n(c,this.itemSize[0]),cols:n(m,this.itemSize[1])},i={rows:r(e.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:r(e.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)};d={rows:a(e.rows,i.rows,this.first.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0],t),cols:a(e.cols,i.cols,this.first.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],s)},u={rows:h(e.rows,d.rows,this.last.rows,this.numItemsInViewport.rows,this.d_numToleratedItems[0]),cols:h(e.cols,d.cols,this.last.cols,this.numItemsInViewport.cols,this.d_numToleratedItems[1],!0)},p=d.rows!==this.first.rows||u.rows!==this.last.rows||d.cols!==this.first.cols||u.cols!==this.last.cols,f={top:c,left:m}}else{const t=i?m:c,s=this.lastScrollPos<=t,e=n(t,this.itemSize);d=a(e,r(e,this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),this.first,this.last,this.numItemsInViewport,this.d_numToleratedItems,s),u=h(e,d,this.last,this.numItemsInViewport,this.d_numToleratedItems),p=d!==this.first||u!==this.last,f=t}return{first:d,last:u,isRangeChanged:p,scrollPos:f}},onScrollChange(t){const{first:s,last:e,isRangeChanged:i,scrollPos:o}=this.onScrollPositionChange(t);if(i){const t={first:s,last:e};this.setContentPosition(t),this.first=s,this.last=e,this.lastScrollPos=o,this.$emit("scroll-index-change",t),this.lazy&&this.$emit("lazy-load",t)}},onScroll(t){if(this.$emit("scroll",t),this.delay){if(this.scrollTimeout&&clearTimeout(this.scrollTimeout),!this.d_loading&&this.showLoader){const{isRangeChanged:s}=this.onScrollPositionChange(t);s&&(this.d_loading=!0)}this.scrollTimeout=setTimeout((()=>{this.onScrollChange(t),this.d_loading&&this.showLoader&&!this.lazy&&(this.d_loading=!1)}),this.delay)}else this.onScrollChange(t)},getOptions(t){const s=(this.items||[]).length,e=this.isBoth()?this.first.rows+t:this.first+t;return{index:e,count:s,first:0===e,last:e===s-1,even:e%2==0,odd:e%2!=0}},getLoaderOptions(t,s){let e=this.loaderArr.length;return{index:t,count:e,first:0===t,last:t===e-1,even:t%2==0,odd:t%2!=0,...s}},elementRef(t){this.element=t},contentRef(t){this.content=t}},computed:{containerClass(){return["p-virtualscroller",{"p-both-scroll":this.isBoth(),"p-horizontal-scroll":this.isHorizontal()},this.class]},contentClass(){return["p-virtualscroller-content",{"p-virtualscroller-loading":this.d_loading}]},loaderClass(){return["p-virtualscroller-loader",{"p-component-overlay":!this.$slots.loader}]},loadedItems(){const t=this.items;return t&&!this.d_loading?this.isBoth()?t.slice(this.first.rows,this.last.rows).map((t=>this.columns?t:t.slice(this.first.cols,this.last.cols))):this.isHorizontal()&&this.columns?t:t.slice(this.first,this.last):[]},loadedRows(){return this.d_loading?this.loaderDisabled?this.loaderArr:[]:this.loadedItems},loadedColumns(){if(this.columns){const t=this.isBoth(),s=this.isHorizontal();if(t||s)return this.d_loading&&this.loaderDisabled?t?this.loaderArr[0]:this.loaderArr:this.columns.slice(t?this.first.cols:this.first,t?this.last.cols:this.last)}return this.columns}}};const e=["tabindex"],i={key:1,class:"p-virtualscroller-loading-icon pi pi-spinner pi-spin"};return function(t,s){void 0===s&&(s={});var e=s.insertAt;if(t&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css","top"===e&&i.firstChild?i.insertBefore(o,i.firstChild):i.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}}("\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n contain: content;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n pointer-events: none;\n}\n.p-virtualscroller .p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n.p-virtualscroller-loader.p-component-overlay {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -ms-flex-align: center;\n align-items: center;\n -webkit-box-pack: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n"),s.render=function(s,o,l,n,r,a){return l.disabled?(t.openBlock(),t.createElementBlock(t.Fragment,{key:1},[t.renderSlot(s.$slots,"default"),t.renderSlot(s.$slots,"content",{items:l.items,rows:l.items,columns:a.loadedColumns})],64)):(t.openBlock(),t.createElementBlock("div",{key:0,ref:a.elementRef,class:t.normalizeClass(a.containerClass),tabindex:l.tabindex,style:t.normalizeStyle(l.style),onScroll:o[0]||(o[0]=(...t)=>a.onScroll&&a.onScroll(...t))},[t.renderSlot(s.$slots,"content",{styleClass:a.contentClass,items:a.loadedItems,getItemOptions:a.getOptions,loading:r.d_loading,getLoaderOptions:a.getLoaderOptions,itemSize:l.itemSize,rows:a.loadedRows,columns:a.loadedColumns,contentRef:a.contentRef,spacerStyle:r.spacerStyle,contentStyle:r.contentStyle,vertical:a.isVertical(),horizontal:a.isHorizontal(),both:a.isBoth()},(()=>[t.createElementVNode("div",{ref:a.contentRef,class:t.normalizeClass(a.contentClass),style:t.normalizeStyle(r.contentStyle)},[(t.openBlock(!0),t.createElementBlock(t.Fragment,null,t.renderList(a.loadedItems,((e,i)=>t.renderSlot(s.$slots,"item",{key:i,item:e,options:a.getOptions(i)}))),128))],6)])),l.showSpacer?(t.openBlock(),t.createElementBlock("div",{key:0,class:"p-virtualscroller-spacer",style:t.normalizeStyle(r.spacerStyle)},null,4)):t.createCommentVNode("",!0),!l.loaderDisabled&&l.showLoader&&r.d_loading?(t.openBlock(),t.createElementBlock("div",{key:1,class:t.normalizeClass(a.loaderClass)},[s.$slots&&s.$slots.loader?(t.openBlock(!0),t.createElementBlock(t.Fragment,{key:0},t.renderList(r.loaderArr,((e,i)=>t.renderSlot(s.$slots,"loader",{key:i,options:a.getLoaderOptions(i,a.isBoth()&&{numCols:s.d_numItemsInViewport.cols})}))),128)):(t.openBlock(),t.createElementBlock("i",i))],2)):t.createCommentVNode("",!0)],46,e))},s}(Vue);