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.
- package/autocomplete/AutoComplete.d.ts +182 -38
- package/autocomplete/AutoComplete.vue +636 -342
- package/autocomplete/autocomplete.cjs.js +745 -416
- package/autocomplete/autocomplete.cjs.min.js +1 -1
- package/autocomplete/autocomplete.esm.js +747 -418
- package/autocomplete/autocomplete.esm.min.js +1 -1
- package/autocomplete/autocomplete.js +745 -416
- package/autocomplete/autocomplete.min.js +1 -1
- package/button/Button.vue +4 -1
- package/button/button.cjs.js +5 -1
- package/button/button.cjs.min.js +1 -1
- package/button/button.esm.js +5 -1
- package/button/button.esm.min.js +1 -1
- package/button/button.js +5 -1
- package/button/button.min.js +1 -1
- package/calendar/Calendar.d.ts +51 -12
- package/calendar/Calendar.vue +259 -114
- package/calendar/calendar.cjs.js +414 -220
- package/calendar/calendar.cjs.min.js +1 -1
- package/calendar/calendar.esm.js +415 -221
- package/calendar/calendar.esm.min.js +1 -1
- package/calendar/calendar.js +414 -220
- package/calendar/calendar.min.js +1 -1
- package/carousel/Carousel.vue +25 -0
- package/carousel/carousel.cjs.js +25 -0
- package/carousel/carousel.cjs.min.js +1 -1
- package/carousel/carousel.esm.js +25 -0
- package/carousel/carousel.esm.min.js +1 -1
- package/carousel/carousel.js +25 -0
- package/carousel/carousel.min.js +1 -1
- package/cascadeselect/CascadeSelect.d.ts +97 -17
- package/cascadeselect/CascadeSelect.vue +560 -135
- package/cascadeselect/CascadeSelectSub.vue +48 -129
- package/cascadeselect/cascadeselect.cjs.js +670 -306
- package/cascadeselect/cascadeselect.cjs.min.js +1 -1
- package/cascadeselect/cascadeselect.esm.js +672 -308
- package/cascadeselect/cascadeselect.esm.min.js +1 -1
- package/cascadeselect/cascadeselect.js +670 -306
- package/cascadeselect/cascadeselect.min.js +1 -1
- package/checkbox/Checkbox.d.ts +40 -4
- package/checkbox/Checkbox.vue +50 -13
- package/checkbox/checkbox.cjs.js +64 -23
- package/checkbox/checkbox.cjs.min.js +1 -1
- package/checkbox/checkbox.esm.js +65 -24
- package/checkbox/checkbox.esm.min.js +1 -1
- package/checkbox/checkbox.js +64 -23
- package/checkbox/checkbox.min.js +1 -1
- package/chips/Chips.d.ts +36 -12
- package/chips/Chips.vue +116 -22
- package/chips/chips.cjs.js +149 -37
- package/chips/chips.cjs.min.js +1 -1
- package/chips/chips.esm.js +150 -38
- package/chips/chips.esm.min.js +1 -1
- package/chips/chips.js +150 -39
- package/chips/chips.min.js +1 -1
- package/colorpicker/ColorPicker.d.ts +3 -6
- package/colorpicker/ColorPicker.vue +1 -5
- package/colorpicker/colorpicker.cjs.js +2 -7
- package/colorpicker/colorpicker.cjs.min.js +1 -1
- package/colorpicker/colorpicker.esm.js +2 -7
- package/colorpicker/colorpicker.esm.min.js +1 -1
- package/colorpicker/colorpicker.js +2 -7
- package/colorpicker/colorpicker.min.js +1 -1
- package/column/Column.d.ts +4 -0
- package/column/Column.vue +4 -0
- package/column/column.cjs.js +4 -0
- package/column/column.cjs.min.js +1 -1
- package/column/column.esm.js +4 -0
- package/column/column.esm.min.js +1 -1
- package/column/column.js +4 -0
- package/column/column.min.js +1 -1
- package/config/PrimeVue.d.ts +42 -0
- package/config/config.cjs.js +35 -4
- package/config/config.cjs.min.js +1 -1
- package/config/config.esm.js +35 -4
- package/config/config.esm.min.js +1 -1
- package/config/config.js +35 -4
- package/config/config.min.js +1 -1
- package/confirmdialog/ConfirmDialog.vue +4 -1
- package/confirmdialog/confirmdialog.cjs.js +6 -2
- package/confirmdialog/confirmdialog.cjs.min.js +1 -1
- package/confirmdialog/confirmdialog.esm.js +6 -2
- package/confirmdialog/confirmdialog.esm.min.js +1 -1
- package/confirmdialog/confirmdialog.js +6 -2
- package/confirmdialog/confirmdialog.min.js +1 -1
- package/contextmenu/ContextMenu.d.ts +1 -1
- package/contextmenu/ContextMenuSub.vue +3 -3
- package/contextmenu/contextmenu.cjs.js +14 -8
- package/contextmenu/contextmenu.cjs.min.js +1 -1
- package/contextmenu/contextmenu.esm.js +15 -9
- package/contextmenu/contextmenu.esm.min.js +1 -1
- package/contextmenu/contextmenu.js +14 -8
- package/contextmenu/contextmenu.min.js +1 -1
- package/core/core.js +1128 -772
- package/core/core.min.js +12 -12
- package/datatable/BodyCell.vue +11 -2
- package/datatable/DataTable.vue +23 -2
- package/datatable/datatable.cjs.js +34 -4
- package/datatable/datatable.cjs.min.js +1 -1
- package/datatable/datatable.esm.js +34 -4
- package/datatable/datatable.esm.min.js +1 -1
- package/datatable/datatable.js +34 -4
- package/datatable/datatable.min.js +1 -1
- package/dialog/Dialog.d.ts +5 -1
- package/dropdown/Dropdown.d.ts +92 -38
- package/dropdown/Dropdown.vue +538 -399
- package/dropdown/dropdown.cjs.js +657 -486
- package/dropdown/dropdown.cjs.min.js +1 -1
- package/dropdown/dropdown.esm.js +659 -488
- package/dropdown/dropdown.esm.min.js +1 -1
- package/dropdown/dropdown.js +657 -486
- package/dropdown/dropdown.min.js +1 -1
- package/editor/Editor.d.ts +32 -0
- package/editor/Editor.vue +15 -1
- package/editor/editor.cjs.js +15 -1
- package/editor/editor.cjs.min.js +1 -1
- package/editor/editor.esm.js +15 -1
- package/editor/editor.esm.min.js +1 -1
- package/editor/editor.js +15 -1
- package/editor/editor.min.js +1 -1
- package/inputmask/InputMask.vue +9 -6
- package/inputmask/inputmask.cjs.js +14 -6
- package/inputmask/inputmask.cjs.min.js +1 -1
- package/inputmask/inputmask.esm.js +15 -7
- package/inputmask/inputmask.esm.min.js +1 -1
- package/inputmask/inputmask.js +14 -6
- package/inputmask/inputmask.min.js +1 -1
- package/inputnumber/InputNumber.d.ts +31 -7
- package/inputnumber/InputNumber.vue +53 -20
- package/inputnumber/inputnumber.cjs.js +75 -29
- package/inputnumber/inputnumber.cjs.min.js +1 -1
- package/inputnumber/inputnumber.esm.js +76 -30
- package/inputnumber/inputnumber.esm.min.js +1 -1
- package/inputnumber/inputnumber.js +75 -29
- package/inputnumber/inputnumber.min.js +1 -1
- package/inputswitch/InputSwitch.d.ts +24 -8
- package/inputswitch/InputSwitch.vue +27 -12
- package/inputswitch/inputswitch.cjs.js +38 -20
- package/inputswitch/inputswitch.cjs.min.js +1 -1
- package/inputswitch/inputswitch.esm.js +39 -21
- package/inputswitch/inputswitch.esm.min.js +1 -1
- package/inputswitch/inputswitch.js +38 -20
- package/inputswitch/inputswitch.min.js +1 -1
- package/inputtext/InputText.vue +1 -2
- package/inputtext/inputtext.cjs.js +3 -4
- package/inputtext/inputtext.cjs.min.js +1 -1
- package/inputtext/inputtext.esm.js +4 -5
- package/inputtext/inputtext.esm.min.js +1 -1
- package/inputtext/inputtext.js +3 -4
- package/inputtext/inputtext.min.js +1 -1
- package/knob/Knob.d.ts +12 -0
- package/knob/Knob.vue +62 -2
- package/knob/knob.cjs.js +73 -5
- package/knob/knob.cjs.min.js +1 -1
- package/knob/knob.esm.js +73 -5
- package/knob/knob.esm.min.js +1 -1
- package/knob/knob.js +73 -5
- package/knob/knob.min.js +1 -1
- package/listbox/Listbox.d.ts +53 -7
- package/listbox/Listbox.vue +500 -135
- package/listbox/listbox.cjs.js +597 -193
- package/listbox/listbox.cjs.min.js +1 -1
- package/listbox/listbox.esm.js +599 -195
- package/listbox/listbox.esm.min.js +1 -1
- package/listbox/listbox.js +597 -193
- package/listbox/listbox.min.js +1 -1
- package/menu/Menu.d.ts +1 -1
- package/menu/Menuitem.vue +2 -2
- package/menu/menu.cjs.js +12 -6
- package/menu/menu.cjs.min.js +1 -1
- package/menu/menu.esm.js +13 -7
- package/menu/menu.esm.min.js +1 -1
- package/menu/menu.js +12 -6
- package/menu/menu.min.js +1 -1
- package/menubar/MenubarSub.vue +3 -3
- package/menubar/menubar.cjs.js +14 -8
- package/menubar/menubar.cjs.min.js +1 -1
- package/menubar/menubar.esm.js +15 -9
- package/menubar/menubar.esm.min.js +1 -1
- package/menubar/menubar.js +14 -8
- package/menubar/menubar.min.js +1 -1
- package/menuitem/MenuItem.d.ts +1 -1
- package/multiselect/MultiSelect.d.ts +111 -51
- package/multiselect/MultiSelect.vue +629 -338
- package/multiselect/multiselect.cjs.js +748 -428
- package/multiselect/multiselect.cjs.min.js +1 -1
- package/multiselect/multiselect.esm.js +750 -430
- package/multiselect/multiselect.esm.min.js +1 -1
- package/multiselect/multiselect.js +748 -428
- package/multiselect/multiselect.min.js +1 -1
- package/overlaypanel/OverlayPanel.d.ts +1 -1
- package/overlaypanel/OverlayPanel.vue +14 -2
- package/overlaypanel/overlaypanel.cjs.js +14 -2
- package/overlaypanel/overlaypanel.cjs.min.js +1 -1
- package/overlaypanel/overlaypanel.esm.js +14 -2
- package/overlaypanel/overlaypanel.esm.min.js +1 -1
- package/overlaypanel/overlaypanel.js +14 -2
- package/overlaypanel/overlaypanel.min.js +1 -1
- package/package.json +2 -2
- package/paginator/Paginator.d.ts +2 -2
- package/password/Password.d.ts +36 -8
- package/password/Password.vue +50 -14
- package/password/password.cjs.js +69 -24
- package/password/password.cjs.min.js +1 -1
- package/password/password.esm.js +71 -26
- package/password/password.esm.min.js +1 -1
- package/password/password.js +69 -24
- package/password/password.min.js +1 -1
- package/picklist/PickList.d.ts +8 -0
- package/picklist/PickList.vue +10 -2
- package/picklist/picklist.cjs.js +68 -50
- package/picklist/picklist.cjs.min.js +1 -1
- package/picklist/picklist.esm.js +69 -51
- package/picklist/picklist.esm.min.js +1 -1
- package/picklist/picklist.js +68 -50
- package/picklist/picklist.min.js +1 -1
- package/portal/Portal.d.ts +1 -1
- package/radiobutton/RadioButton.d.ts +28 -4
- package/radiobutton/RadioButton.vue +36 -11
- package/radiobutton/radiobutton.cjs.js +49 -23
- package/radiobutton/radiobutton.cjs.min.js +1 -1
- package/radiobutton/radiobutton.esm.js +50 -24
- package/radiobutton/radiobutton.esm.min.js +1 -1
- package/radiobutton/radiobutton.js +49 -23
- package/radiobutton/radiobutton.min.js +1 -1
- package/rating/Rating.d.ts +4 -0
- package/rating/Rating.vue +61 -7
- package/rating/rating.cjs.js +90 -16
- package/rating/rating.cjs.min.js +1 -1
- package/rating/rating.esm.js +91 -17
- package/rating/rating.esm.min.js +1 -1
- package/rating/rating.js +90 -16
- package/rating/rating.min.js +1 -1
- package/resources/primevue.css +8 -0
- package/resources/primevue.min.css +1 -1
- package/resources/themes/arya-blue/theme.css +82 -40
- package/resources/themes/arya-green/theme.css +82 -40
- package/resources/themes/arya-orange/theme.css +82 -40
- package/resources/themes/arya-purple/theme.css +82 -40
- package/resources/themes/bootstrap4-dark-blue/theme.css +82 -40
- package/resources/themes/bootstrap4-dark-purple/theme.css +82 -40
- package/resources/themes/bootstrap4-light-blue/theme.css +82 -40
- package/resources/themes/bootstrap4-light-purple/theme.css +82 -40
- package/resources/themes/fluent-light/theme.css +82 -40
- package/resources/themes/lara-dark-blue/theme.css +82 -40
- package/resources/themes/lara-dark-indigo/theme.css +82 -40
- package/resources/themes/lara-dark-purple/theme.css +82 -40
- package/resources/themes/lara-dark-teal/theme.css +82 -40
- package/resources/themes/lara-light-blue/theme.css +82 -40
- package/resources/themes/lara-light-indigo/theme.css +82 -40
- package/resources/themes/lara-light-purple/theme.css +82 -40
- package/resources/themes/lara-light-teal/theme.css +82 -40
- package/resources/themes/luna-amber/theme.css +82 -40
- package/resources/themes/luna-blue/theme.css +82 -40
- package/resources/themes/luna-green/theme.css +82 -40
- package/resources/themes/luna-pink/theme.css +82 -40
- package/resources/themes/md-dark-deeppurple/theme.css +82 -40
- package/resources/themes/md-dark-indigo/theme.css +82 -40
- package/resources/themes/md-light-deeppurple/theme.css +82 -40
- package/resources/themes/md-light-indigo/theme.css +82 -40
- package/resources/themes/mdc-dark-deeppurple/theme.css +82 -40
- package/resources/themes/mdc-dark-indigo/theme.css +82 -40
- package/resources/themes/mdc-light-deeppurple/theme.css +82 -40
- package/resources/themes/mdc-light-indigo/theme.css +82 -40
- package/resources/themes/nova/theme.css +82 -40
- package/resources/themes/nova-accent/theme.css +82 -40
- package/resources/themes/nova-alt/theme.css +82 -40
- package/resources/themes/nova-vue/theme.css +82 -40
- package/resources/themes/rhea/theme.css +82 -40
- package/resources/themes/saga-blue/theme.css +82 -40
- package/resources/themes/saga-green/theme.css +82 -40
- package/resources/themes/saga-orange/theme.css +82 -40
- package/resources/themes/saga-purple/theme.css +82 -40
- package/resources/themes/tailwind-light/theme.css +82 -40
- package/resources/themes/vela-blue/theme.css +82 -40
- package/resources/themes/vela-green/theme.css +82 -40
- package/resources/themes/vela-orange/theme.css +82 -40
- package/resources/themes/vela-purple/theme.css +82 -40
- package/ripple/ripple.cjs.js +1 -0
- package/ripple/ripple.cjs.min.js +1 -1
- package/ripple/ripple.esm.js +1 -0
- package/ripple/ripple.esm.min.js +1 -1
- package/ripple/ripple.js +1 -0
- package/ripple/ripple.min.js +1 -1
- package/selectbutton/SelectButton.d.ts +6 -2
- package/selectbutton/SelectButton.vue +89 -12
- package/selectbutton/selectbutton.cjs.js +97 -22
- package/selectbutton/selectbutton.cjs.min.js +1 -1
- package/selectbutton/selectbutton.esm.js +99 -24
- package/selectbutton/selectbutton.esm.min.js +1 -1
- package/selectbutton/selectbutton.js +97 -22
- package/selectbutton/selectbutton.min.js +1 -1
- package/slider/Slider.d.ts +9 -1
- package/slider/Slider.vue +50 -34
- package/slider/slider.cjs.js +59 -38
- package/slider/slider.cjs.min.js +1 -1
- package/slider/slider.esm.js +59 -38
- package/slider/slider.esm.min.js +1 -1
- package/slider/slider.js +59 -38
- package/slider/slider.min.js +1 -1
- package/splitbutton/SplitButton.d.ts +1 -1
- package/splitter/Splitter.vue +30 -1
- package/splitter/splitter.cjs.js +30 -1
- package/splitter/splitter.cjs.min.js +1 -1
- package/splitter/splitter.esm.js +30 -1
- package/splitter/splitter.esm.min.js +1 -1
- package/splitter/splitter.js +30 -1
- package/splitter/splitter.min.js +1 -1
- package/textarea/Textarea.vue +1 -2
- package/textarea/textarea.cjs.js +3 -5
- package/textarea/textarea.cjs.min.js +1 -1
- package/textarea/textarea.esm.js +4 -6
- package/textarea/textarea.esm.min.js +1 -1
- package/textarea/textarea.js +3 -5
- package/textarea/textarea.min.js +1 -1
- package/tieredmenu/TieredMenu.d.ts +1 -1
- package/tieredmenu/TieredMenuSub.vue +3 -3
- package/tieredmenu/tieredmenu.cjs.js +14 -8
- package/tieredmenu/tieredmenu.cjs.min.js +1 -1
- package/tieredmenu/tieredmenu.esm.js +15 -9
- package/tieredmenu/tieredmenu.esm.min.js +1 -1
- package/tieredmenu/tieredmenu.js +14 -8
- package/tieredmenu/tieredmenu.min.js +1 -1
- package/timeline/Timeline.d.ts +10 -1
- package/timeline/Timeline.vue +1 -1
- package/timeline/timeline.cjs.js +5 -1
- package/timeline/timeline.cjs.min.js +1 -1
- package/timeline/timeline.esm.js +5 -1
- package/timeline/timeline.esm.min.js +1 -1
- package/timeline/timeline.js +5 -1
- package/timeline/timeline.min.js +1 -1
- package/togglebutton/ToggleButton.d.ts +42 -0
- package/togglebutton/ToggleButton.vue +44 -7
- package/togglebutton/togglebutton.cjs.js +59 -13
- package/togglebutton/togglebutton.cjs.min.js +1 -1
- package/togglebutton/togglebutton.esm.js +60 -14
- package/togglebutton/togglebutton.esm.min.js +1 -1
- package/togglebutton/togglebutton.js +59 -13
- package/togglebutton/togglebutton.min.js +1 -1
- package/tooltip/tooltip.cjs.js +20 -11
- package/tooltip/tooltip.cjs.min.js +1 -1
- package/tooltip/tooltip.esm.js +21 -12
- package/tooltip/tooltip.esm.min.js +1 -1
- package/tooltip/tooltip.js +20 -11
- package/tooltip/tooltip.min.js +1 -1
- package/tree/Tree.vue +5 -1
- package/tree/TreeNode.vue +20 -19
- package/tree/tree.cjs.js +47 -32
- package/tree/tree.cjs.min.js +1 -1
- package/tree/tree.esm.js +47 -32
- package/tree/tree.esm.min.js +1 -1
- package/tree/tree.js +47 -32
- package/tree/tree.min.js +1 -1
- package/treeselect/TreeSelect.d.ts +26 -10
- package/treeselect/TreeSelect.vue +52 -29
- package/treeselect/treeselect.cjs.js +74 -41
- package/treeselect/treeselect.cjs.min.js +1 -1
- package/treeselect/treeselect.esm.js +76 -43
- package/treeselect/treeselect.esm.min.js +1 -1
- package/treeselect/treeselect.js +74 -41
- package/treeselect/treeselect.min.js +1 -1
- package/tristatecheckbox/TriStateCheckbox.d.ts +20 -4
- package/tristatecheckbox/TriStateCheckbox.vue +52 -15
- package/tristatecheckbox/tristatecheckbox.cjs.js +67 -26
- package/tristatecheckbox/tristatecheckbox.cjs.min.js +1 -1
- package/tristatecheckbox/tristatecheckbox.esm.js +68 -27
- package/tristatecheckbox/tristatecheckbox.esm.min.js +1 -1
- package/tristatecheckbox/tristatecheckbox.js +67 -26
- package/tristatecheckbox/tristatecheckbox.min.js +1 -1
- package/utils/Utils.d.ts +3 -2
- package/utils/utils.cjs.js +239 -173
- package/utils/utils.cjs.min.js +1 -1
- package/utils/utils.esm.js +239 -173
- package/utils/utils.esm.min.js +1 -1
- package/utils/utils.js +239 -173
- package/utils/utils.min.js +1 -1
- package/vetur-attributes.json +612 -136
- package/vetur-tags.json +180 -59
- package/virtualscroller/VirtualScroller.d.ts +10 -0
- package/virtualscroller/VirtualScroller.vue +18 -17
- package/virtualscroller/virtualscroller.cjs.js +22 -20
- package/virtualscroller/virtualscroller.cjs.min.js +1 -1
- package/virtualscroller/virtualscroller.esm.js +22 -20
- package/virtualscroller/virtualscroller.esm.min.js +1 -1
- package/virtualscroller/virtualscroller.js +22 -20
- package/virtualscroller/virtualscroller.min.js +1 -1
- 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
|
|
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]
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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",
|
|
610
|
+
: (openBlock(), createElementBlock("i", _hoisted_2))
|
|
609
611
|
], 2))
|
|
610
612
|
: createCommentVNode("", true)
|
|
611
|
-
],
|
|
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
|
|
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]
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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",
|
|
612
|
+
: (vue.openBlock(), vue.createElementBlock("i", _hoisted_2))
|
|
611
613
|
], 2))
|
|
612
614
|
: vue.createCommentVNode("", true)
|
|
613
|
-
],
|
|
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);
|