primeng 11.0.0-rc.1 → 11.1.0
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/api/confirmation.d.ts +2 -0
- package/api/filterservice.d.ts +22 -0
- package/api/primeicons.d.ts +19 -0
- package/api/primeng-api.metadata.json +1 -1
- package/api/public_api.d.ts +1 -0
- package/api/translation.d.ts +1 -0
- package/api/translationkeys.d.ts +1 -0
- package/autocomplete/autocomplete.d.ts +0 -1
- package/autocomplete/primeng-autocomplete.metadata.json +1 -1
- package/avatar/avatar.d.ts +18 -0
- package/avatar/package.json +11 -0
- package/avatar/primeng-avatar.d.ts +4 -0
- package/avatar/primeng-avatar.metadata.json +1 -0
- package/avatar/public_api.d.ts +1 -0
- package/avatargroup/avatargroup.d.ts +6 -0
- package/avatargroup/package.json +11 -0
- package/avatargroup/primeng-avatargroup.d.ts +4 -0
- package/avatargroup/primeng-avatargroup.metadata.json +1 -0
- package/avatargroup/public_api.d.ts +1 -0
- package/badge/badge.d.ts +33 -0
- package/badge/package.json +11 -0
- package/badge/primeng-badge.d.ts +4 -0
- package/badge/primeng-badge.metadata.json +1 -0
- package/badge/public_api.d.ts +1 -0
- package/bundles/primeng-accordion.umd.js.map +1 -1
- package/bundles/primeng-accordion.umd.min.js.map +1 -1
- package/bundles/primeng-api.umd.js +539 -5
- package/bundles/primeng-api.umd.js.map +1 -1
- package/bundles/primeng-api.umd.min.js +1 -1
- package/bundles/primeng-api.umd.min.js.map +1 -1
- package/bundles/primeng-autocomplete.umd.js +12 -9
- package/bundles/primeng-autocomplete.umd.js.map +1 -1
- package/bundles/primeng-autocomplete.umd.min.js +1 -1
- package/bundles/primeng-autocomplete.umd.min.js.map +1 -1
- package/bundles/primeng-avatar.umd.js +64 -0
- package/bundles/primeng-avatar.umd.js.map +1 -0
- package/bundles/primeng-avatar.umd.min.js +2 -0
- package/bundles/primeng-avatar.umd.min.js.map +1 -0
- package/bundles/primeng-avatargroup.umd.js +48 -0
- package/bundles/primeng-avatargroup.umd.js.map +1 -0
- package/bundles/primeng-avatargroup.umd.min.js +2 -0
- package/bundles/primeng-avatargroup.umd.min.js.map +1 -0
- package/bundles/primeng-badge.umd.js +139 -0
- package/bundles/primeng-badge.umd.js.map +1 -0
- package/bundles/primeng-badge.umd.min.js +2 -0
- package/bundles/primeng-badge.umd.min.js.map +1 -0
- package/bundles/primeng-blockui.umd.js.map +1 -1
- package/bundles/primeng-blockui.umd.min.js.map +1 -1
- package/bundles/primeng-breadcrumb.umd.js.map +1 -1
- package/bundles/primeng-breadcrumb.umd.min.js.map +1 -1
- package/bundles/primeng-button.umd.js +7 -1
- package/bundles/primeng-button.umd.js.map +1 -1
- package/bundles/primeng-button.umd.min.js +1 -1
- package/bundles/primeng-button.umd.min.js.map +1 -1
- package/bundles/primeng-calendar.umd.js +10 -2
- package/bundles/primeng-calendar.umd.js.map +1 -1
- package/bundles/primeng-calendar.umd.min.js +1 -1
- package/bundles/primeng-calendar.umd.min.js.map +1 -1
- package/bundles/primeng-captcha.umd.js.map +1 -1
- package/bundles/primeng-captcha.umd.min.js.map +1 -1
- package/bundles/primeng-card.umd.js.map +1 -1
- package/bundles/primeng-card.umd.min.js.map +1 -1
- package/bundles/primeng-carousel.umd.js +36 -7
- package/bundles/primeng-carousel.umd.js.map +1 -1
- package/bundles/primeng-carousel.umd.min.js +1 -1
- package/bundles/primeng-carousel.umd.min.js.map +1 -1
- package/bundles/primeng-cascadeselect.umd.js +896 -0
- package/bundles/primeng-cascadeselect.umd.js.map +1 -0
- package/bundles/primeng-cascadeselect.umd.min.js +16 -0
- package/bundles/primeng-cascadeselect.umd.min.js.map +1 -0
- package/bundles/primeng-chart.umd.js.map +1 -1
- package/bundles/primeng-chart.umd.min.js.map +1 -1
- package/bundles/primeng-checkbox.umd.js +9 -1
- package/bundles/primeng-checkbox.umd.js.map +1 -1
- package/bundles/primeng-checkbox.umd.min.js.map +1 -1
- package/bundles/primeng-chip.umd.js +67 -0
- package/bundles/primeng-chip.umd.js.map +1 -0
- package/bundles/primeng-chip.umd.min.js +2 -0
- package/bundles/primeng-chip.umd.min.js.map +1 -0
- package/bundles/primeng-chips.umd.js +10 -2
- package/bundles/primeng-chips.umd.js.map +1 -1
- package/bundles/primeng-chips.umd.min.js +2 -2
- package/bundles/primeng-chips.umd.min.js.map +1 -1
- package/bundles/primeng-codehighlighter.umd.js.map +1 -1
- package/bundles/primeng-codehighlighter.umd.min.js.map +1 -1
- package/bundles/primeng-colorpicker.umd.js +18 -1
- package/bundles/primeng-colorpicker.umd.js.map +1 -1
- package/bundles/primeng-colorpicker.umd.min.js +1 -1
- package/bundles/primeng-colorpicker.umd.min.js.map +1 -1
- package/bundles/primeng-confirmdialog.umd.js +30 -10
- package/bundles/primeng-confirmdialog.umd.js.map +1 -1
- package/bundles/primeng-confirmdialog.umd.min.js +1 -1
- package/bundles/primeng-confirmdialog.umd.min.js.map +1 -1
- package/bundles/primeng-confirmpopup.umd.js +17 -8
- package/bundles/primeng-confirmpopup.umd.js.map +1 -1
- package/bundles/primeng-confirmpopup.umd.min.js +1 -1
- package/bundles/primeng-confirmpopup.umd.min.js.map +1 -1
- package/bundles/primeng-contextmenu.umd.js +9 -1
- package/bundles/primeng-contextmenu.umd.js.map +1 -1
- package/bundles/primeng-contextmenu.umd.min.js.map +1 -1
- package/bundles/primeng-dataview.umd.js +5 -3
- package/bundles/primeng-dataview.umd.js.map +1 -1
- package/bundles/primeng-dataview.umd.min.js +1 -1
- package/bundles/primeng-dataview.umd.min.js.map +1 -1
- package/bundles/primeng-defer.umd.js.map +1 -1
- package/bundles/primeng-defer.umd.min.js.map +1 -1
- package/bundles/primeng-dialog.umd.js +6 -1
- package/bundles/primeng-dialog.umd.js.map +1 -1
- package/bundles/primeng-dialog.umd.min.js +1 -1
- package/bundles/primeng-dialog.umd.min.js.map +1 -1
- package/bundles/primeng-divider.umd.js +68 -0
- package/bundles/primeng-divider.umd.js.map +1 -0
- package/bundles/primeng-divider.umd.min.js +2 -0
- package/bundles/primeng-divider.umd.min.js.map +1 -0
- package/bundles/primeng-dom.umd.js +9 -1
- package/bundles/primeng-dom.umd.js.map +1 -1
- package/bundles/primeng-dom.umd.min.js.map +1 -1
- package/bundles/primeng-dragdrop.umd.js.map +1 -1
- package/bundles/primeng-dragdrop.umd.min.js.map +1 -1
- package/bundles/primeng-dropdown.umd.js +16 -6
- package/bundles/primeng-dropdown.umd.js.map +1 -1
- package/bundles/primeng-dropdown.umd.min.js +1 -1
- package/bundles/primeng-dropdown.umd.min.js.map +1 -1
- package/bundles/primeng-dynamicdialog.umd.js.map +1 -1
- package/bundles/primeng-dynamicdialog.umd.min.js.map +1 -1
- package/bundles/primeng-editor.umd.js +7 -3
- package/bundles/primeng-editor.umd.js.map +1 -1
- package/bundles/primeng-editor.umd.min.js +1 -1
- package/bundles/primeng-editor.umd.min.js.map +1 -1
- package/bundles/primeng-fieldset.umd.js.map +1 -1
- package/bundles/primeng-fieldset.umd.min.js.map +1 -1
- package/bundles/primeng-fileupload.umd.js +10 -2
- package/bundles/primeng-fileupload.umd.js.map +1 -1
- package/bundles/primeng-fileupload.umd.min.js +1 -1
- package/bundles/primeng-fileupload.umd.min.js.map +1 -1
- package/bundles/primeng-focustrap.umd.js.map +1 -1
- package/bundles/primeng-focustrap.umd.min.js.map +1 -1
- package/bundles/primeng-fullcalendar.umd.js.map +1 -1
- package/bundles/primeng-fullcalendar.umd.min.js.map +1 -1
- package/bundles/primeng-galleria.umd.js +9 -1
- package/bundles/primeng-galleria.umd.js.map +1 -1
- package/bundles/primeng-galleria.umd.min.js.map +1 -1
- package/bundles/primeng-gmap.umd.js +9 -1
- package/bundles/primeng-gmap.umd.js.map +1 -1
- package/bundles/primeng-gmap.umd.min.js.map +1 -1
- package/bundles/primeng-inplace.umd.js.map +1 -1
- package/bundles/primeng-inplace.umd.min.js.map +1 -1
- package/bundles/primeng-inputmask.umd.js.map +1 -1
- package/bundles/primeng-inputmask.umd.min.js.map +1 -1
- package/bundles/primeng-inputnumber.umd.js +9 -1
- package/bundles/primeng-inputnumber.umd.js.map +1 -1
- package/bundles/primeng-inputnumber.umd.min.js.map +1 -1
- package/bundles/primeng-inputswitch.umd.js.map +1 -1
- package/bundles/primeng-inputswitch.umd.min.js.map +1 -1
- package/bundles/primeng-inputtext.umd.js.map +1 -1
- package/bundles/primeng-inputtext.umd.min.js.map +1 -1
- package/bundles/primeng-inputtextarea.umd.js +7 -3
- package/bundles/primeng-inputtextarea.umd.js.map +1 -1
- package/bundles/primeng-inputtextarea.umd.min.js +1 -1
- package/bundles/primeng-inputtextarea.umd.min.js.map +1 -1
- package/bundles/primeng-keyfilter.umd.js +9 -1
- package/bundles/primeng-keyfilter.umd.js.map +1 -1
- package/bundles/primeng-keyfilter.umd.min.js.map +1 -1
- package/bundles/primeng-knob.umd.js +250 -0
- package/bundles/primeng-knob.umd.js.map +1 -0
- package/bundles/primeng-knob.umd.min.js +2 -0
- package/bundles/primeng-knob.umd.min.js.map +1 -0
- package/bundles/primeng-lightbox.umd.js.map +1 -1
- package/bundles/primeng-lightbox.umd.min.js.map +1 -1
- package/bundles/primeng-listbox.umd.js +15 -5
- package/bundles/primeng-listbox.umd.js.map +1 -1
- package/bundles/primeng-listbox.umd.min.js +1 -1
- package/bundles/primeng-listbox.umd.min.js.map +1 -1
- package/bundles/primeng-megamenu.umd.js.map +1 -1
- package/bundles/primeng-megamenu.umd.min.js.map +1 -1
- package/bundles/primeng-menu.umd.js +9 -1
- package/bundles/primeng-menu.umd.js.map +1 -1
- package/bundles/primeng-menu.umd.min.js.map +1 -1
- package/bundles/primeng-menubar.umd.js.map +1 -1
- package/bundles/primeng-menubar.umd.min.js.map +1 -1
- package/bundles/primeng-message.umd.js.map +1 -1
- package/bundles/primeng-message.umd.min.js.map +1 -1
- package/bundles/primeng-messages.umd.js +10 -1
- package/bundles/primeng-messages.umd.js.map +1 -1
- package/bundles/primeng-messages.umd.min.js +1 -1
- package/bundles/primeng-messages.umd.min.js.map +1 -1
- package/bundles/primeng-multiselect.umd.js +22 -9
- package/bundles/primeng-multiselect.umd.js.map +1 -1
- package/bundles/primeng-multiselect.umd.min.js +1 -1
- package/bundles/primeng-multiselect.umd.min.js.map +1 -1
- package/bundles/primeng-orderlist.umd.js +15 -5
- package/bundles/primeng-orderlist.umd.js.map +1 -1
- package/bundles/primeng-orderlist.umd.min.js +1 -1
- package/bundles/primeng-orderlist.umd.min.js.map +1 -1
- package/bundles/primeng-organizationchart.umd.js +9 -1
- package/bundles/primeng-organizationchart.umd.js.map +1 -1
- package/bundles/primeng-organizationchart.umd.min.js.map +1 -1
- package/bundles/primeng-overlaypanel.umd.js +9 -6
- package/bundles/primeng-overlaypanel.umd.js.map +1 -1
- package/bundles/primeng-overlaypanel.umd.min.js +1 -1
- package/bundles/primeng-overlaypanel.umd.min.js.map +1 -1
- package/bundles/primeng-paginator.umd.js +9 -1
- package/bundles/primeng-paginator.umd.js.map +1 -1
- package/bundles/primeng-paginator.umd.min.js.map +1 -1
- package/bundles/primeng-panel.umd.js.map +1 -1
- package/bundles/primeng-panel.umd.min.js.map +1 -1
- package/bundles/primeng-panelmenu.umd.js +9 -1
- package/bundles/primeng-panelmenu.umd.js.map +1 -1
- package/bundles/primeng-panelmenu.umd.min.js +1 -1
- package/bundles/primeng-panelmenu.umd.min.js.map +1 -1
- package/bundles/primeng-password.umd.js.map +1 -1
- package/bundles/primeng-password.umd.min.js.map +1 -1
- package/bundles/primeng-picklist.umd.js +7 -11
- package/bundles/primeng-picklist.umd.js.map +1 -1
- package/bundles/primeng-picklist.umd.min.js +1 -1
- package/bundles/primeng-picklist.umd.min.js.map +1 -1
- package/bundles/primeng-progressbar.umd.js.map +1 -1
- package/bundles/primeng-progressbar.umd.min.js.map +1 -1
- package/bundles/primeng-progressspinner.umd.js.map +1 -1
- package/bundles/primeng-progressspinner.umd.min.js.map +1 -1
- package/bundles/primeng-radiobutton.umd.js.map +1 -1
- package/bundles/primeng-radiobutton.umd.min.js.map +1 -1
- package/bundles/primeng-rating.umd.js.map +1 -1
- package/bundles/primeng-rating.umd.min.js.map +1 -1
- package/bundles/primeng-ripple.umd.js.map +1 -1
- package/bundles/primeng-ripple.umd.min.js.map +1 -1
- package/bundles/primeng-scrollpanel.umd.js.map +1 -1
- package/bundles/primeng-scrollpanel.umd.min.js.map +1 -1
- package/bundles/primeng-scrolltop.umd.js +140 -0
- package/bundles/primeng-scrolltop.umd.js.map +1 -0
- package/bundles/primeng-scrolltop.umd.min.js +2 -0
- package/bundles/primeng-scrolltop.umd.min.js.map +1 -0
- package/bundles/primeng-selectbutton.umd.js +11 -3
- package/bundles/primeng-selectbutton.umd.js.map +1 -1
- package/bundles/primeng-selectbutton.umd.min.js +1 -1
- package/bundles/primeng-selectbutton.umd.min.js.map +1 -1
- package/bundles/primeng-sidebar.umd.js.map +1 -1
- package/bundles/primeng-sidebar.umd.min.js.map +1 -1
- package/bundles/primeng-skeleton.umd.js +73 -0
- package/bundles/primeng-skeleton.umd.js.map +1 -0
- package/bundles/primeng-skeleton.umd.min.js +2 -0
- package/bundles/primeng-skeleton.umd.min.js.map +1 -0
- package/bundles/primeng-slidemenu.umd.js.map +1 -1
- package/bundles/primeng-slidemenu.umd.min.js.map +1 -1
- package/bundles/primeng-slider.umd.js +12 -2
- package/bundles/primeng-slider.umd.js.map +1 -1
- package/bundles/primeng-slider.umd.min.js +1 -1
- package/bundles/primeng-slider.umd.min.js.map +1 -1
- package/bundles/primeng-spinner.umd.js.map +1 -1
- package/bundles/primeng-spinner.umd.min.js.map +1 -1
- package/bundles/primeng-splitbutton.umd.js.map +1 -1
- package/bundles/primeng-splitbutton.umd.min.js.map +1 -1
- package/bundles/primeng-splitter.umd.js +580 -0
- package/bundles/primeng-splitter.umd.js.map +1 -0
- package/bundles/primeng-splitter.umd.min.js +16 -0
- package/bundles/primeng-splitter.umd.min.js.map +1 -0
- package/bundles/primeng-steps.umd.js.map +1 -1
- package/bundles/primeng-steps.umd.min.js.map +1 -1
- package/bundles/primeng-table.umd.js +33 -18
- package/bundles/primeng-table.umd.js.map +1 -1
- package/bundles/primeng-table.umd.min.js +1 -1
- package/bundles/primeng-table.umd.min.js.map +1 -1
- package/bundles/primeng-tabmenu.umd.js.map +1 -1
- package/bundles/primeng-tabmenu.umd.min.js.map +1 -1
- package/bundles/primeng-tabview.umd.js +15 -3
- package/bundles/primeng-tabview.umd.js.map +1 -1
- package/bundles/primeng-tabview.umd.min.js +1 -1
- package/bundles/primeng-tabview.umd.min.js.map +1 -1
- package/bundles/primeng-tag.umd.js +62 -0
- package/bundles/primeng-tag.umd.js.map +1 -0
- package/bundles/primeng-tag.umd.min.js +2 -0
- package/bundles/primeng-tag.umd.min.js.map +1 -0
- package/bundles/primeng-terminal.umd.js.map +1 -1
- package/bundles/primeng-terminal.umd.min.js.map +1 -1
- package/bundles/primeng-tieredmenu.umd.js.map +1 -1
- package/bundles/primeng-tieredmenu.umd.min.js.map +1 -1
- package/bundles/primeng-timeline.umd.js.map +1 -1
- package/bundles/primeng-timeline.umd.min.js.map +1 -1
- package/bundles/primeng-toast.umd.js +10 -2
- package/bundles/primeng-toast.umd.js.map +1 -1
- package/bundles/primeng-toast.umd.min.js +1 -1
- package/bundles/primeng-toast.umd.min.js.map +1 -1
- package/bundles/primeng-togglebutton.umd.js.map +1 -1
- package/bundles/primeng-togglebutton.umd.min.js.map +1 -1
- package/bundles/primeng-toolbar.umd.js.map +1 -1
- package/bundles/primeng-toolbar.umd.min.js.map +1 -1
- package/bundles/primeng-tooltip.umd.js.map +1 -1
- package/bundles/primeng-tooltip.umd.min.js.map +1 -1
- package/bundles/primeng-tree.umd.js +10 -2
- package/bundles/primeng-tree.umd.js.map +1 -1
- package/bundles/primeng-tree.umd.min.js +1 -1
- package/bundles/primeng-tree.umd.min.js.map +1 -1
- package/bundles/primeng-treetable.umd.js +19 -9
- package/bundles/primeng-treetable.umd.js.map +1 -1
- package/bundles/primeng-treetable.umd.min.js +1 -1
- package/bundles/primeng-treetable.umd.min.js.map +1 -1
- package/bundles/primeng-tristatecheckbox.umd.js.map +1 -1
- package/bundles/primeng-tristatecheckbox.umd.min.js.map +1 -1
- package/bundles/primeng-utils.umd.js +0 -517
- package/bundles/primeng-utils.umd.js.map +1 -1
- package/bundles/primeng-utils.umd.min.js +1 -15
- package/bundles/primeng-utils.umd.min.js.map +1 -1
- package/bundles/primeng-virtualscroller.umd.js.map +1 -1
- package/bundles/primeng-virtualscroller.umd.min.js.map +1 -1
- package/bundles/primeng.umd.js.map +1 -1
- package/button/button.d.ts +4 -0
- package/button/primeng-button.metadata.json +1 -1
- package/calendar/primeng-calendar.metadata.json +1 -1
- package/carousel/carousel.d.ts +2 -1
- package/carousel/primeng-carousel.metadata.json +1 -1
- package/cascadeselect/cascadeselect.d.ts +134 -0
- package/cascadeselect/package.json +11 -0
- package/cascadeselect/primeng-cascadeselect.d.ts +4 -0
- package/cascadeselect/primeng-cascadeselect.metadata.json +1 -0
- package/cascadeselect/public_api.d.ts +1 -0
- package/chip/chip.d.ts +19 -0
- package/chip/package.json +11 -0
- package/chip/primeng-chip.d.ts +4 -0
- package/chip/primeng-chip.metadata.json +1 -0
- package/chip/public_api.d.ts +1 -0
- package/chips/primeng-chips.metadata.json +1 -1
- package/colorpicker/colorpicker.d.ts +3 -0
- package/colorpicker/primeng-colorpicker.metadata.json +1 -1
- package/confirmdialog/confirmdialog.d.ts +3 -0
- package/confirmdialog/primeng-confirmdialog.metadata.json +1 -1
- package/confirmpopup/confirmpopup.d.ts +1 -0
- package/confirmpopup/primeng-confirmpopup.metadata.json +1 -1
- package/dataview/dataview.d.ts +3 -1
- package/dataview/primeng-dataview.metadata.json +1 -1
- package/dialog/dialog.d.ts +1 -0
- package/dialog/primeng-dialog.metadata.json +1 -1
- package/divider/divider.d.ts +22 -0
- package/divider/package.json +11 -0
- package/divider/primeng-divider.d.ts +4 -0
- package/divider/primeng-divider.metadata.json +1 -0
- package/divider/public_api.d.ts +1 -0
- package/dropdown/dropdown.d.ts +3 -1
- package/dropdown/primeng-dropdown.metadata.json +1 -1
- package/editor/editor.d.ts +1 -0
- package/editor/primeng-editor.metadata.json +1 -1
- package/esm2015/accordion/accordion.js +1 -1
- package/esm2015/accordion/primeng-accordion.js +1 -1
- package/esm2015/accordion/public_api.js +1 -1
- package/esm2015/api/blockableui.js +1 -1
- package/esm2015/api/confirmation.js +1 -1
- package/esm2015/api/confirmationservice.js +1 -1
- package/esm2015/api/contextmenuservice.js +1 -1
- package/esm2015/api/filtermatchmode.js +1 -1
- package/esm2015/api/filtermetadata.js +1 -1
- package/esm2015/api/filteroperator.js +1 -1
- package/esm2015/api/filterservice.js +183 -0
- package/esm2015/api/lazyloadevent.js +1 -1
- package/esm2015/api/megamenuitem.js +1 -1
- package/esm2015/api/menuitem.js +1 -1
- package/esm2015/api/message.js +1 -1
- package/esm2015/api/messageservice.js +1 -1
- package/esm2015/api/primeicons.js +20 -1
- package/esm2015/api/primeng-api.js +1 -1
- package/esm2015/api/primengconfig.js +3 -2
- package/esm2015/api/public_api.js +2 -1
- package/esm2015/api/selectitem.js +1 -1
- package/esm2015/api/selectitemgroup.js +1 -1
- package/esm2015/api/shared.js +1 -1
- package/esm2015/api/sortevent.js +1 -1
- package/esm2015/api/sortmeta.js +1 -1
- package/esm2015/api/tablestate.js +1 -1
- package/esm2015/api/translation.js +1 -1
- package/esm2015/api/translationkeys.js +2 -1
- package/esm2015/api/treedragdropservice.js +1 -1
- package/esm2015/api/treenode.js +1 -1
- package/esm2015/api/treenodedragevent.js +1 -1
- package/esm2015/autocomplete/autocomplete.js +4 -9
- package/esm2015/autocomplete/primeng-autocomplete.js +1 -1
- package/esm2015/autocomplete/public_api.js +1 -1
- package/esm2015/avatar/avatar.js +52 -0
- package/esm2015/avatar/primeng-avatar.js +5 -0
- package/esm2015/avatar/public_api.js +2 -0
- package/esm2015/avatargroup/avatargroup.js +31 -0
- package/esm2015/avatargroup/primeng-avatargroup.js +5 -0
- package/esm2015/avatargroup/public_api.js +2 -0
- package/esm2015/badge/badge.js +119 -0
- package/esm2015/badge/primeng-badge.js +5 -0
- package/esm2015/badge/public_api.js +2 -0
- package/esm2015/blockui/blockui.js +1 -1
- package/esm2015/blockui/primeng-blockui.js +1 -1
- package/esm2015/blockui/public_api.js +1 -1
- package/esm2015/breadcrumb/breadcrumb.js +1 -1
- package/esm2015/breadcrumb/primeng-breadcrumb.js +1 -1
- package/esm2015/breadcrumb/public_api.js +1 -1
- package/esm2015/button/button.js +8 -2
- package/esm2015/button/primeng-button.js +1 -1
- package/esm2015/button/public_api.js +1 -1
- package/esm2015/calendar/calendar.js +4 -4
- package/esm2015/calendar/primeng-calendar.js +1 -1
- package/esm2015/calendar/public_api.js +1 -1
- package/esm2015/captcha/captcha.js +1 -1
- package/esm2015/captcha/primeng-captcha.js +1 -1
- package/esm2015/captcha/public_api.js +1 -1
- package/esm2015/card/card.js +1 -1
- package/esm2015/card/primeng-card.js +1 -1
- package/esm2015/card/public_api.js +1 -1
- package/esm2015/carousel/carousel.js +27 -6
- package/esm2015/carousel/primeng-carousel.js +1 -1
- package/esm2015/carousel/public_api.js +1 -1
- package/esm2015/cascadeselect/cascadeselect.js +579 -0
- package/esm2015/cascadeselect/primeng-cascadeselect.js +5 -0
- package/esm2015/cascadeselect/public_api.js +2 -0
- package/esm2015/chart/chart.js +1 -1
- package/esm2015/chart/primeng-chart.js +1 -1
- package/esm2015/chart/public_api.js +1 -1
- package/esm2015/checkbox/checkbox.js +1 -1
- package/esm2015/checkbox/primeng-checkbox.js +1 -1
- package/esm2015/checkbox/public_api.js +1 -1
- package/esm2015/chip/chip.js +56 -0
- package/esm2015/chip/primeng-chip.js +5 -0
- package/esm2015/chip/public_api.js +2 -0
- package/esm2015/chips/chips.js +2 -2
- package/esm2015/chips/primeng-chips.js +1 -1
- package/esm2015/chips/public_api.js +1 -1
- package/esm2015/codehighlighter/codehighlighter.js +1 -1
- package/esm2015/codehighlighter/primeng-codehighlighter.js +1 -1
- package/esm2015/codehighlighter/public_api.js +1 -1
- package/esm2015/colorpicker/colorpicker.js +20 -2
- package/esm2015/colorpicker/primeng-colorpicker.js +1 -1
- package/esm2015/colorpicker/public_api.js +1 -1
- package/esm2015/confirmdialog/confirmdialog.js +30 -11
- package/esm2015/confirmdialog/primeng-confirmdialog.js +1 -1
- package/esm2015/confirmdialog/public_api.js +1 -1
- package/esm2015/confirmpopup/confirmpopup.js +19 -10
- package/esm2015/confirmpopup/primeng-confirmpopup.js +1 -1
- package/esm2015/confirmpopup/public_api.js +1 -1
- package/esm2015/contextmenu/contextmenu.js +1 -1
- package/esm2015/contextmenu/primeng-contextmenu.js +1 -1
- package/esm2015/contextmenu/public_api.js +1 -1
- package/esm2015/dataview/dataview.js +7 -6
- package/esm2015/dataview/primeng-dataview.js +1 -1
- package/esm2015/dataview/public_api.js +1 -1
- package/esm2015/defer/defer.js +1 -1
- package/esm2015/defer/primeng-defer.js +1 -1
- package/esm2015/defer/public_api.js +1 -1
- package/esm2015/dialog/dialog.js +7 -2
- package/esm2015/dialog/primeng-dialog.js +1 -1
- package/esm2015/dialog/public_api.js +1 -1
- package/esm2015/divider/divider.js +55 -0
- package/esm2015/divider/primeng-divider.js +5 -0
- package/esm2015/divider/public_api.js +2 -0
- package/esm2015/dom/connectedoverlayscrollhandler.js +1 -1
- package/esm2015/dom/domhandler.js +1 -1
- package/esm2015/dom/primeng-dom.js +1 -1
- package/esm2015/dom/public_api.js +1 -1
- package/esm2015/dragdrop/dragdrop.js +1 -1
- package/esm2015/dragdrop/primeng-dragdrop.js +1 -1
- package/esm2015/dragdrop/public_api.js +1 -1
- package/esm2015/dropdown/dropdown.js +9 -8
- package/esm2015/dropdown/primeng-dropdown.js +1 -1
- package/esm2015/dropdown/public_api.js +1 -1
- package/esm2015/dynamicdialog/dialogservice.js +1 -1
- package/esm2015/dynamicdialog/dynamicdialog-config.js +1 -1
- package/esm2015/dynamicdialog/dynamicdialog-injector.js +1 -1
- package/esm2015/dynamicdialog/dynamicdialog-ref.js +1 -1
- package/esm2015/dynamicdialog/dynamicdialog.js +1 -1
- package/esm2015/dynamicdialog/dynamicdialogcontent.js +1 -1
- package/esm2015/dynamicdialog/primeng-dynamicdialog.js +1 -1
- package/esm2015/dynamicdialog/public_api.js +1 -1
- package/esm2015/editor/editor.js +8 -4
- package/esm2015/editor/primeng-editor.js +1 -1
- package/esm2015/editor/public_api.js +1 -1
- package/esm2015/fieldset/fieldset.js +1 -1
- package/esm2015/fieldset/primeng-fieldset.js +1 -1
- package/esm2015/fieldset/public_api.js +1 -1
- package/esm2015/fileupload/fileupload.js +3 -3
- package/esm2015/fileupload/primeng-fileupload.js +1 -1
- package/esm2015/fileupload/public_api.js +1 -1
- package/esm2015/focustrap/focustrap.js +1 -1
- package/esm2015/focustrap/primeng-focustrap.js +1 -1
- package/esm2015/focustrap/public_api.js +1 -1
- package/esm2015/fullcalendar/fullcalendar.js +1 -1
- package/esm2015/fullcalendar/primeng-fullcalendar.js +1 -1
- package/esm2015/fullcalendar/public_api.js +1 -1
- package/esm2015/galleria/galleria.js +1 -1
- package/esm2015/galleria/primeng-galleria.js +1 -1
- package/esm2015/galleria/public_api.js +1 -1
- package/esm2015/gmap/gmap.js +1 -1
- package/esm2015/gmap/primeng-gmap.js +1 -1
- package/esm2015/gmap/public_api.js +1 -1
- package/esm2015/inplace/inplace.js +1 -1
- package/esm2015/inplace/primeng-inplace.js +1 -1
- package/esm2015/inplace/public_api.js +1 -1
- package/esm2015/inputmask/inputmask.js +1 -1
- package/esm2015/inputmask/primeng-inputmask.js +1 -1
- package/esm2015/inputmask/public_api.js +1 -1
- package/esm2015/inputnumber/inputnumber.js +1 -1
- package/esm2015/inputnumber/primeng-inputnumber.js +1 -1
- package/esm2015/inputnumber/public_api.js +1 -1
- package/esm2015/inputswitch/inputswitch.js +1 -1
- package/esm2015/inputswitch/primeng-inputswitch.js +1 -1
- package/esm2015/inputswitch/public_api.js +1 -1
- package/esm2015/inputtext/inputtext.js +1 -1
- package/esm2015/inputtext/primeng-inputtext.js +1 -1
- package/esm2015/inputtext/public_api.js +1 -1
- package/esm2015/inputtextarea/inputtextarea.js +9 -5
- package/esm2015/inputtextarea/primeng-inputtextarea.js +1 -1
- package/esm2015/inputtextarea/public_api.js +1 -1
- package/esm2015/keyfilter/keyfilter.js +1 -1
- package/esm2015/keyfilter/primeng-keyfilter.js +1 -1
- package/esm2015/keyfilter/public_api.js +1 -1
- package/esm2015/knob/knob.js +236 -0
- package/esm2015/knob/primeng-knob.js +5 -0
- package/esm2015/knob/public_api.js +2 -0
- package/esm2015/lightbox/lightbox.js +1 -1
- package/esm2015/lightbox/primeng-lightbox.js +1 -1
- package/esm2015/lightbox/public_api.js +1 -1
- package/esm2015/listbox/listbox.js +8 -7
- package/esm2015/listbox/primeng-listbox.js +1 -1
- package/esm2015/listbox/public_api.js +1 -1
- package/esm2015/megamenu/megamenu.js +1 -1
- package/esm2015/megamenu/primeng-megamenu.js +1 -1
- package/esm2015/megamenu/public_api.js +1 -1
- package/esm2015/menu/menu.js +1 -1
- package/esm2015/menu/primeng-menu.js +1 -1
- package/esm2015/menu/public_api.js +1 -1
- package/esm2015/menubar/menubar.js +1 -1
- package/esm2015/menubar/primeng-menubar.js +1 -1
- package/esm2015/menubar/public_api.js +1 -1
- package/esm2015/message/message.js +1 -1
- package/esm2015/message/primeng-message.js +1 -1
- package/esm2015/message/public_api.js +1 -1
- package/esm2015/messages/messages.js +2 -1
- package/esm2015/messages/primeng-messages.js +1 -1
- package/esm2015/messages/public_api.js +1 -1
- package/esm2015/multiselect/multiselect.js +15 -11
- package/esm2015/multiselect/primeng-multiselect.js +1 -1
- package/esm2015/multiselect/public_api.js +1 -1
- package/esm2015/orderlist/orderlist.js +8 -7
- package/esm2015/orderlist/primeng-orderlist.js +1 -1
- package/esm2015/orderlist/public_api.js +1 -1
- package/esm2015/organizationchart/organizationchart.js +1 -1
- package/esm2015/organizationchart/primeng-organizationchart.js +1 -1
- package/esm2015/organizationchart/public_api.js +1 -1
- package/esm2015/overlaypanel/overlaypanel.js +10 -7
- package/esm2015/overlaypanel/primeng-overlaypanel.js +1 -1
- package/esm2015/overlaypanel/public_api.js +1 -1
- package/esm2015/paginator/paginator.js +1 -1
- package/esm2015/paginator/primeng-paginator.js +1 -1
- package/esm2015/paginator/public_api.js +1 -1
- package/esm2015/panel/panel.js +1 -1
- package/esm2015/panel/primeng-panel.js +1 -1
- package/esm2015/panel/public_api.js +1 -1
- package/esm2015/panelmenu/panelmenu.js +1 -1
- package/esm2015/panelmenu/primeng-panelmenu.js +1 -1
- package/esm2015/panelmenu/public_api.js +1 -1
- package/esm2015/password/password.js +1 -1
- package/esm2015/password/primeng-password.js +1 -1
- package/esm2015/password/public_api.js +1 -1
- package/esm2015/picklist/picklist.js +9 -14
- package/esm2015/picklist/primeng-picklist.js +1 -1
- package/esm2015/picklist/public_api.js +1 -1
- package/esm2015/primeng.js +1 -1
- package/esm2015/progressbar/primeng-progressbar.js +1 -1
- package/esm2015/progressbar/progressbar.js +1 -1
- package/esm2015/progressbar/public_api.js +1 -1
- package/esm2015/progressspinner/primeng-progressspinner.js +1 -1
- package/esm2015/progressspinner/progressspinner.js +1 -1
- package/esm2015/progressspinner/public_api.js +1 -1
- package/esm2015/public_api.js +1 -1
- package/esm2015/radiobutton/primeng-radiobutton.js +1 -1
- package/esm2015/radiobutton/public_api.js +1 -1
- package/esm2015/radiobutton/radiobutton.js +1 -1
- package/esm2015/rating/primeng-rating.js +1 -1
- package/esm2015/rating/public_api.js +1 -1
- package/esm2015/rating/rating.js +1 -1
- package/esm2015/ripple/primeng-ripple.js +1 -1
- package/esm2015/ripple/public_api.js +1 -1
- package/esm2015/ripple/ripple.js +1 -1
- package/esm2015/scrollpanel/primeng-scrollpanel.js +1 -1
- package/esm2015/scrollpanel/public_api.js +1 -1
- package/esm2015/scrollpanel/scrollpanel.js +1 -1
- package/esm2015/scrolltop/primeng-scrolltop.js +5 -0
- package/esm2015/scrolltop/public_api.js +2 -0
- package/esm2015/scrolltop/scrolltop.js +126 -0
- package/esm2015/selectbutton/primeng-selectbutton.js +1 -1
- package/esm2015/selectbutton/public_api.js +1 -1
- package/esm2015/selectbutton/selectbutton.js +3 -3
- package/esm2015/sidebar/primeng-sidebar.js +1 -1
- package/esm2015/sidebar/public_api.js +1 -1
- package/esm2015/sidebar/sidebar.js +1 -1
- package/esm2015/skeleton/primeng-skeleton.js +5 -0
- package/esm2015/skeleton/public_api.js +2 -0
- package/esm2015/skeleton/skeleton.js +57 -0
- package/esm2015/slidemenu/primeng-slidemenu.js +1 -1
- package/esm2015/slidemenu/public_api.js +1 -1
- package/esm2015/slidemenu/slidemenu.js +1 -1
- package/esm2015/slider/primeng-slider.js +1 -1
- package/esm2015/slider/public_api.js +1 -1
- package/esm2015/slider/slider.js +13 -3
- package/esm2015/spinner/primeng-spinner.js +1 -1
- package/esm2015/spinner/public_api.js +1 -1
- package/esm2015/spinner/spinner.js +1 -1
- package/esm2015/splitbutton/primeng-splitbutton.js +1 -1
- package/esm2015/splitbutton/public_api.js +1 -1
- package/esm2015/splitbutton/splitbutton.js +1 -1
- package/esm2015/splitter/primeng-splitter.js +5 -0
- package/esm2015/splitter/public_api.js +2 -0
- package/esm2015/splitter/splitter.js +262 -0
- package/esm2015/steps/primeng-steps.js +1 -1
- package/esm2015/steps/public_api.js +1 -1
- package/esm2015/steps/steps.js +1 -1
- package/esm2015/table/primeng-table.js +1 -1
- package/esm2015/table/public_api.js +1 -1
- package/esm2015/table/table.js +23 -21
- package/esm2015/tabmenu/primeng-tabmenu.js +1 -1
- package/esm2015/tabmenu/public_api.js +1 -1
- package/esm2015/tabmenu/tabmenu.js +1 -1
- package/esm2015/tabview/primeng-tabview.js +1 -1
- package/esm2015/tabview/public_api.js +1 -1
- package/esm2015/tabview/tabview.js +12 -4
- package/esm2015/tag/primeng-tag.js +5 -0
- package/esm2015/tag/public_api.js +2 -0
- package/esm2015/tag/tag.js +47 -0
- package/esm2015/terminal/primeng-terminal.js +1 -1
- package/esm2015/terminal/public_api.js +1 -1
- package/esm2015/terminal/terminal.js +1 -1
- package/esm2015/terminal/terminalservice.js +1 -1
- package/esm2015/tieredmenu/primeng-tieredmenu.js +1 -1
- package/esm2015/tieredmenu/public_api.js +1 -1
- package/esm2015/tieredmenu/tieredmenu.js +1 -1
- package/esm2015/timeline/primeng-timeline.js +1 -1
- package/esm2015/timeline/public_api.js +1 -1
- package/esm2015/timeline/timeline.js +1 -1
- package/esm2015/toast/primeng-toast.js +1 -1
- package/esm2015/toast/public_api.js +1 -1
- package/esm2015/toast/toast.js +2 -2
- package/esm2015/togglebutton/primeng-togglebutton.js +1 -1
- package/esm2015/togglebutton/public_api.js +1 -1
- package/esm2015/togglebutton/togglebutton.js +1 -1
- package/esm2015/toolbar/primeng-toolbar.js +1 -1
- package/esm2015/toolbar/public_api.js +1 -1
- package/esm2015/toolbar/toolbar.js +1 -1
- package/esm2015/tooltip/primeng-tooltip.js +1 -1
- package/esm2015/tooltip/public_api.js +1 -1
- package/esm2015/tooltip/tooltip.js +1 -1
- package/esm2015/tree/primeng-tree.js +1 -1
- package/esm2015/tree/public_api.js +1 -1
- package/esm2015/tree/tree.js +5 -5
- package/esm2015/treetable/primeng-treetable.js +1 -1
- package/esm2015/treetable/public_api.js +1 -1
- package/esm2015/treetable/treetable.js +12 -11
- package/esm2015/tristatecheckbox/primeng-tristatecheckbox.js +1 -1
- package/esm2015/tristatecheckbox/public_api.js +1 -1
- package/esm2015/tristatecheckbox/tristatecheckbox.js +1 -1
- package/esm2015/utils/objectutils.js +1 -11
- package/esm2015/utils/primeng-utils.js +1 -1
- package/esm2015/utils/public_api.js +1 -2
- package/esm2015/utils/uniquecomponentid.js +1 -1
- package/esm2015/virtualscroller/primeng-virtualscroller.js +1 -1
- package/esm2015/virtualscroller/public_api.js +1 -1
- package/esm2015/virtualscroller/virtualscroller.js +1 -1
- package/fesm2015/primeng-accordion.js.map +1 -1
- package/fesm2015/primeng-api.js +204 -2
- package/fesm2015/primeng-api.js.map +1 -1
- package/fesm2015/primeng-autocomplete.js +3 -8
- package/fesm2015/primeng-autocomplete.js.map +1 -1
- package/fesm2015/primeng-avatar.js +59 -0
- package/fesm2015/primeng-avatar.js.map +1 -0
- package/fesm2015/primeng-avatargroup.js +38 -0
- package/fesm2015/primeng-avatargroup.js.map +1 -0
- package/fesm2015/primeng-badge.js +126 -0
- package/fesm2015/primeng-badge.js.map +1 -0
- package/fesm2015/primeng-blockui.js.map +1 -1
- package/fesm2015/primeng-breadcrumb.js.map +1 -1
- package/fesm2015/primeng-button.js +7 -1
- package/fesm2015/primeng-button.js.map +1 -1
- package/fesm2015/primeng-calendar.js +3 -3
- package/fesm2015/primeng-calendar.js.map +1 -1
- package/fesm2015/primeng-captcha.js.map +1 -1
- package/fesm2015/primeng-card.js.map +1 -1
- package/fesm2015/primeng-carousel.js +26 -5
- package/fesm2015/primeng-carousel.js.map +1 -1
- package/fesm2015/primeng-cascadeselect.js +585 -0
- package/fesm2015/primeng-cascadeselect.js.map +1 -0
- package/fesm2015/primeng-chart.js.map +1 -1
- package/fesm2015/primeng-checkbox.js.map +1 -1
- package/fesm2015/primeng-chip.js +63 -0
- package/fesm2015/primeng-chip.js.map +1 -0
- package/fesm2015/primeng-chips.js +1 -1
- package/fesm2015/primeng-chips.js.map +1 -1
- package/fesm2015/primeng-codehighlighter.js.map +1 -1
- package/fesm2015/primeng-colorpicker.js +19 -1
- package/fesm2015/primeng-colorpicker.js.map +1 -1
- package/fesm2015/primeng-confirmdialog.js +29 -10
- package/fesm2015/primeng-confirmdialog.js.map +1 -1
- package/fesm2015/primeng-confirmpopup.js +18 -9
- package/fesm2015/primeng-confirmpopup.js.map +1 -1
- package/fesm2015/primeng-contextmenu.js.map +1 -1
- package/fesm2015/primeng-dataview.js +7 -5
- package/fesm2015/primeng-dataview.js.map +1 -1
- package/fesm2015/primeng-defer.js.map +1 -1
- package/fesm2015/primeng-dialog.js +6 -1
- package/fesm2015/primeng-dialog.js.map +1 -1
- package/fesm2015/primeng-divider.js +62 -0
- package/fesm2015/primeng-divider.js.map +1 -0
- package/fesm2015/primeng-dom.js.map +1 -1
- package/fesm2015/primeng-dragdrop.js.map +1 -1
- package/fesm2015/primeng-dropdown.js +9 -7
- package/fesm2015/primeng-dropdown.js.map +1 -1
- package/fesm2015/primeng-dynamicdialog.js.map +1 -1
- package/fesm2015/primeng-editor.js +7 -3
- package/fesm2015/primeng-editor.js.map +1 -1
- package/fesm2015/primeng-fieldset.js.map +1 -1
- package/fesm2015/primeng-fileupload.js +2 -2
- package/fesm2015/primeng-fileupload.js.map +1 -1
- package/fesm2015/primeng-focustrap.js.map +1 -1
- package/fesm2015/primeng-fullcalendar.js.map +1 -1
- package/fesm2015/primeng-galleria.js.map +1 -1
- package/fesm2015/primeng-gmap.js.map +1 -1
- package/fesm2015/primeng-inplace.js.map +1 -1
- package/fesm2015/primeng-inputmask.js.map +1 -1
- package/fesm2015/primeng-inputnumber.js.map +1 -1
- package/fesm2015/primeng-inputswitch.js.map +1 -1
- package/fesm2015/primeng-inputtext.js.map +1 -1
- package/fesm2015/primeng-inputtextarea.js +8 -4
- package/fesm2015/primeng-inputtextarea.js.map +1 -1
- package/fesm2015/primeng-keyfilter.js.map +1 -1
- package/fesm2015/primeng-knob.js +243 -0
- package/fesm2015/primeng-knob.js.map +1 -0
- package/fesm2015/primeng-lightbox.js.map +1 -1
- package/fesm2015/primeng-listbox.js +8 -6
- package/fesm2015/primeng-listbox.js.map +1 -1
- package/fesm2015/primeng-megamenu.js.map +1 -1
- package/fesm2015/primeng-menu.js.map +1 -1
- package/fesm2015/primeng-menubar.js.map +1 -1
- package/fesm2015/primeng-message.js.map +1 -1
- package/fesm2015/primeng-messages.js +1 -0
- package/fesm2015/primeng-messages.js.map +1 -1
- package/fesm2015/primeng-multiselect.js +15 -10
- package/fesm2015/primeng-multiselect.js.map +1 -1
- package/fesm2015/primeng-orderlist.js +8 -6
- package/fesm2015/primeng-orderlist.js.map +1 -1
- package/fesm2015/primeng-organizationchart.js.map +1 -1
- package/fesm2015/primeng-overlaypanel.js +9 -6
- package/fesm2015/primeng-overlaypanel.js.map +1 -1
- package/fesm2015/primeng-paginator.js.map +1 -1
- package/fesm2015/primeng-panel.js.map +1 -1
- package/fesm2015/primeng-panelmenu.js.map +1 -1
- package/fesm2015/primeng-password.js.map +1 -1
- package/fesm2015/primeng-picklist.js +9 -13
- package/fesm2015/primeng-picklist.js.map +1 -1
- package/fesm2015/primeng-progressbar.js.map +1 -1
- package/fesm2015/primeng-progressspinner.js.map +1 -1
- package/fesm2015/primeng-radiobutton.js.map +1 -1
- package/fesm2015/primeng-rating.js.map +1 -1
- package/fesm2015/primeng-ripple.js.map +1 -1
- package/fesm2015/primeng-scrollpanel.js.map +1 -1
- package/fesm2015/primeng-scrolltop.js +133 -0
- package/fesm2015/primeng-scrolltop.js.map +1 -0
- package/fesm2015/primeng-selectbutton.js +2 -2
- package/fesm2015/primeng-selectbutton.js.map +1 -1
- package/fesm2015/primeng-sidebar.js.map +1 -1
- package/fesm2015/primeng-skeleton.js +64 -0
- package/fesm2015/primeng-skeleton.js.map +1 -0
- package/fesm2015/primeng-slidemenu.js.map +1 -1
- package/fesm2015/primeng-slider.js +12 -2
- package/fesm2015/primeng-slider.js.map +1 -1
- package/fesm2015/primeng-spinner.js.map +1 -1
- package/fesm2015/primeng-splitbutton.js.map +1 -1
- package/fesm2015/primeng-splitter.js +269 -0
- package/fesm2015/primeng-splitter.js.map +1 -0
- package/fesm2015/primeng-steps.js.map +1 -1
- package/fesm2015/primeng-table.js +23 -20
- package/fesm2015/primeng-table.js.map +1 -1
- package/fesm2015/primeng-tabmenu.js.map +1 -1
- package/fesm2015/primeng-tabview.js +11 -3
- package/fesm2015/primeng-tabview.js.map +1 -1
- package/fesm2015/primeng-tag.js +54 -0
- package/fesm2015/primeng-tag.js.map +1 -0
- package/fesm2015/primeng-terminal.js.map +1 -1
- package/fesm2015/primeng-tieredmenu.js.map +1 -1
- package/fesm2015/primeng-timeline.js.map +1 -1
- package/fesm2015/primeng-toast.js +1 -1
- package/fesm2015/primeng-toast.js.map +1 -1
- package/fesm2015/primeng-togglebutton.js.map +1 -1
- package/fesm2015/primeng-toolbar.js.map +1 -1
- package/fesm2015/primeng-tooltip.js.map +1 -1
- package/fesm2015/primeng-tree.js +4 -4
- package/fesm2015/primeng-tree.js.map +1 -1
- package/fesm2015/primeng-treetable.js +12 -10
- package/fesm2015/primeng-treetable.js.map +1 -1
- package/fesm2015/primeng-tristatecheckbox.js.map +1 -1
- package/fesm2015/primeng-utils.js +1 -181
- package/fesm2015/primeng-utils.js.map +1 -1
- package/fesm2015/primeng-virtualscroller.js.map +1 -1
- package/fesm2015/primeng.js.map +1 -1
- package/fileupload/primeng-fileupload.metadata.json +1 -1
- package/inputtextarea/inputtextarea.d.ts +3 -2
- package/inputtextarea/primeng-inputtextarea.metadata.json +1 -1
- package/knob/knob.d.ts +72 -0
- package/knob/package.json +11 -0
- package/knob/primeng-knob.d.ts +4 -0
- package/knob/primeng-knob.metadata.json +1 -0
- package/knob/public_api.d.ts +1 -0
- package/listbox/listbox.d.ts +3 -1
- package/listbox/primeng-listbox.metadata.json +1 -1
- package/messages/primeng-messages.metadata.json +1 -1
- package/multiselect/multiselect.d.ts +5 -3
- package/multiselect/primeng-multiselect.metadata.json +1 -1
- package/orderlist/orderlist.d.ts +3 -1
- package/orderlist/primeng-orderlist.metadata.json +1 -1
- package/overlaypanel/primeng-overlaypanel.metadata.json +1 -1
- package/package.json +4 -4
- package/picklist/picklist.d.ts +3 -1
- package/picklist/primeng-picklist.metadata.json +1 -1
- package/resources/components/autocomplete/autocomplete.css +1 -0
- package/resources/components/avatar/avatar.css +25 -0
- package/resources/components/avatargroup/avatargroup.css +8 -0
- package/resources/components/badge/badge.css +17 -13
- package/resources/components/cascadeselect/cascadeselect.css +84 -0
- package/resources/components/chip/chip.css +21 -0
- package/resources/components/chips/chips.css +1 -0
- package/resources/components/confirmpopup/confirmpopup.css +3 -3
- package/resources/components/divider/divider.css +84 -0
- package/resources/components/editor/editor.css +4 -0
- package/resources/components/knob/knob.css +18 -0
- package/resources/components/orderlist/orderlist.css +4 -0
- package/resources/components/overlaypanel/overlaypanel.css +2 -2
- package/resources/components/picklist/picklist.css +4 -0
- package/resources/components/scrolltop/scrolltop.css +16 -0
- package/resources/components/skeleton/skeleton.css +33 -0
- package/resources/components/splitter/splitter.css +62 -0
- package/resources/components/table/table.css +8 -0
- package/resources/components/tag/tag.css +15 -0
- package/resources/components/treetable/treetable.css +4 -0
- package/resources/primeng.css +17 -13
- package/resources/primeng.min.css +1 -1
- package/resources/themes/arya-blue/theme.css +309 -47
- package/resources/themes/arya-green/theme.css +309 -47
- package/resources/themes/arya-orange/theme.css +309 -47
- package/resources/themes/arya-purple/theme.css +309 -47
- package/resources/themes/bootstrap4-dark-blue/theme.css +309 -47
- package/resources/themes/bootstrap4-dark-purple/theme.css +309 -47
- package/resources/themes/bootstrap4-light-blue/theme.css +309 -47
- package/resources/themes/bootstrap4-light-purple/theme.css +309 -47
- package/resources/themes/fluent-light/theme.css +309 -47
- package/resources/themes/luna-amber/theme.css +309 -47
- package/resources/themes/luna-blue/theme.css +309 -47
- package/resources/themes/luna-green/theme.css +309 -47
- package/resources/themes/luna-pink/theme.css +309 -47
- package/resources/themes/md-dark-deeppurple/theme.css +522 -86
- package/resources/themes/md-dark-indigo/theme.css +522 -86
- package/resources/themes/md-light-deeppurple/theme.css +528 -92
- package/resources/themes/md-light-indigo/theme.css +528 -92
- package/resources/themes/mdc-dark-deeppurple/theme.css +535 -99
- package/resources/themes/mdc-dark-indigo/theme.css +535 -99
- package/resources/themes/mdc-light-deeppurple/theme.css +537 -101
- package/resources/themes/mdc-light-indigo/theme.css +537 -101
- package/resources/themes/nova/theme.css +309 -47
- package/resources/themes/nova-accent/theme.css +309 -47
- package/resources/themes/nova-alt/theme.css +309 -47
- package/resources/themes/rhea/theme.css +309 -47
- package/resources/themes/saga-blue/theme.css +309 -47
- package/resources/themes/saga-green/theme.css +309 -47
- package/resources/themes/saga-orange/theme.css +309 -47
- package/resources/themes/saga-purple/theme.css +309 -47
- package/resources/themes/vela-blue/theme.css +309 -47
- package/resources/themes/vela-green/theme.css +309 -47
- package/resources/themes/vela-orange/theme.css +309 -47
- package/resources/themes/vela-purple/theme.css +309 -47
- package/scrolltop/package.json +11 -0
- package/scrolltop/primeng-scrolltop.d.ts +4 -0
- package/scrolltop/primeng-scrolltop.metadata.json +1 -0
- package/scrolltop/public_api.d.ts +1 -0
- package/scrolltop/scrolltop.d.ts +31 -0
- package/selectbutton/primeng-selectbutton.metadata.json +1 -1
- package/skeleton/package.json +11 -0
- package/skeleton/primeng-skeleton.d.ts +4 -0
- package/skeleton/primeng-skeleton.metadata.json +1 -0
- package/skeleton/public_api.d.ts +1 -0
- package/skeleton/skeleton.d.ts +18 -0
- package/slider/primeng-slider.metadata.json +1 -1
- package/splitter/package.json +11 -0
- package/splitter/primeng-splitter.d.ts +4 -0
- package/splitter/primeng-splitter.metadata.json +1 -0
- package/splitter/public_api.d.ts +1 -0
- package/splitter/splitter.d.ts +68 -0
- package/table/primeng-table.metadata.json +1 -1
- package/table/table.d.ts +5 -3
- package/tabview/primeng-tabview.metadata.json +1 -1
- package/tabview/tabview.d.ts +3 -1
- package/tag/package.json +11 -0
- package/tag/primeng-tag.d.ts +4 -0
- package/tag/primeng-tag.metadata.json +1 -0
- package/tag/public_api.d.ts +1 -0
- package/tag/tag.d.ts +18 -0
- package/toast/primeng-toast.metadata.json +1 -1
- package/tree/primeng-tree.metadata.json +1 -1
- package/treetable/primeng-treetable.metadata.json +1 -1
- package/treetable/treetable.d.ts +3 -2
- package/utils/objectutils.d.ts +0 -2
- package/utils/primeng-utils.metadata.json +1 -1
- package/utils/public_api.d.ts +0 -1
- package/esm2015/utils/filterutils.js +0 -171
- package/resources/components/selectbutton/selectbutton.css +0 -11
- package/utils/filterutils.d.ts +0 -19
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../../src/app/components/table/table.ts"],"names":["Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","TableService","this","sortSource","Subject","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","prototype","onSort","sortMeta","onSelectionChange","onContextMenu","data","onValueChange","onTotalRecordsChange","onColumnsChange","columns","Injectable","Table","el","zone","tableService","cd","pageLinks","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","currentPageReportTemplate","showFirstLastIcon","showPageLinks","defaultSortOrder","sortMode","resetPageOnSort","selectionChange","EventEmitter","contextMenuSelectionChange","contextMenuSelectionMode","rowTrackBy","index","item","lazy","lazyLoadOnInit","compareSelectionBy","csvSeparator","exportFilename","filters","filterDelay","expandedRowKeys","editingRowKeys","rowExpandMode","virtualScrollDelay","virtualRowHeight","columnResizeMode","loadingIcon","showLoader","stateStorage","editMode","onRowSelect","onRowUnselect","onPage","onFilter","onLazyLoad","onRowExpand","onRowCollapse","onContextMenuSelect","onColResize","onColReorder","onRowReorder","onEditInit","onEditComplete","onEditCancel","onHeaderCheckboxToggle","sortFunction","firstChange","rowsChange","onStateSave","onStateRestore","_value","_totalRecords","_first","selectionKeys","_sortOrder","ngOnInit","virtualScroll","emit","createLazyLoadMetadata","restoringFilter","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","paginatorDropdownItemTemplate","ngAfterViewInit","isStateful","resizableColumns","restoreColumnWidths","ngOnChanges","simpleChange","stateRestored","restoreState","currentValue","totalRecords","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","_columns","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","defineProperty","val","cols","_rows","dataKey","Array","isArray","_c","_d","String","ObjectUtils","resolveFieldData","onPageChange","event","first","rows","saveState","anchorRowIndex","scrollable","resetScrollTop","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","restoringSort","customSort","mode","data1","data2","value1","value2","result","localeCompare","multisortField","multisortmeta","isSorted","sorted","handleRowClick","target","targetNode","nodeName","parentNode","parentElement","DomHandler","hasClass","selectionMode","isMultipleSelectionMode","shiftKey","clearSelection","rangeRowIndex","clearSelectionRange","rowIndex","selectRange","rowData","selected","isSelected","metaSelection","rowTouched","metaKeySelection","dataKeyValue","isSingleSelectionMode","selectionIndex_1","findIndexInSelection","filter","type","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","rangeStart","rangeEnd","paginator","rangeRowData","filteredValue","this_1","selectionIndex","undefined","equals","toggleRowWithRadio","toggleRowWithCheckbox","selectionIndex_3","toggleRowsWithCheckbox","check","slice","checked","matchMode","filterTimeout","clearTimeout","isFilterBlank","setTimeout","filterGlobal","trim","globalFilterFieldsArray","globalFilterFields","Error","localMatch","globalMatch","localFiltered","prop","hasOwnProperty","filterField","filterMeta","filterMeta_1","e_2","filterMeta_1_1","meta","executeLocalFilter","operator","FilterOperator","OR","AND","j","globalFilterField","FilterUtils","filterLocale","markForCheck","filterValue","filterMatchMode","FilterMatchMode","STARTS_WITH","dataFieldValue","filterConstraint","empty","globalFilter","clear","reset","exportCSV","options","csv","frozenColumns","selectionOnly","frozenValue","column","exportable","header","record","i_1","cellData","exportFunction","replace","blob","Blob","window","navigator","msSaveOrOpenBlob","link","document","createElement","style","display","body","appendChild","download","setAttribute","URL","createObjectURL","click","open","encodeURI","removeChild","scrollToVirtualIndex","scrollTo","top","scrollableViewChild","scrollableFrozenViewChild","updateEditingCell","cell","editingCell","editingCellData","editingCellField","editingCellRowIndex","bindDocumentEditListener","isEditingCellValid","find","documentEditListener","editingCellClick","removeClass","unbindDocumentEditListener","addEventListener","removeEventListener","initRowEdit","saveRowEdit","rowElement","cancelRowEdit","toggleRow","preventDefault","isRowExpanded","isRowEditing","onColumnResizeBegin","containerLeft","getOffset","containerViewChild","nativeElement","left","lastResizerHelperX","pageX","scrollLeft","onColumnResize","addClass","resizeHelperViewChild","height","offsetHeight","onColumnResizeEnd","delta","offsetLeft","columnWidth","offsetWidth","minWidth","parseInt","newColumnWidth","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","setScrollableItemsWidthOnExpandResize","tableViewChild","containerWidth","element","scrollableBody","scrollableHeader","scrollableFooter","scrollableBodyTableWidth","scrollableHeaderTableWidth","isContainerInViewport","setWidth","container","table","calculateScrollbarWidth","parent","colGroup","children","col","nextCol","onColumnDragStart","columnElement","reorderIconWidth","getHiddenElementOuterWidth","reorderIndicatorUpViewChild","reorderIconHeight","getHiddenElementOuterHeight","reorderIndicatorDownViewChild","draggedColumn","dataTransfer","setData","onColumnDragEnter","dropHeader","containerOffset","dropHeaderOffset","dragIndex","indexWithinGroup","dropIndex","targetLeft","columnCenter","Math","ceil","dropPosition","dropEffect","onColumnDragLeave","onColumnDrop","dropColumn","allowDrop","reorderArray","runOutsideAngular","draggable","onRowDragStart","rowDragging","draggedRowIndex","onRowDragOver","rowY","getWindowScrollTop","pageY","rowMidY","getOuterHeight","prevRowElement","previousElementSibling","droppedRowIndex","onRowDragLeave","onRowDragEnd","onRowDrop","isEmpty","getBlockableElement","getStorage","localStorage","sessionStorage","stateKey","storage","state","saveColumnWidths","saveColumnOrder","keys","setItem","JSON","stringify","clearState","removeItem","stateString","getItem","state_1","parse","columnWidthsState","columnWidths","tableWidthState","tableWidth","Promise","resolve","then","widths","map","getOuterWidth","join","widths_1","split","headerCols","bodyCols","columnOrder_1","key","columnOrder","reorderedColumns_1","findColumnByKey","ngOnDestroy","Component","args","selector","providers","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","ElementRef","NgZone","ChangeDetectorRef","Input","Output","ViewChild","ContentChildren","PrimeTemplate","TableBody","dt","subscription","subscribe","detectChanges","unsubscribe","ScrollableView","_scrollHeight","includes","console","log","virtualScrollBody","frozen","scrollableAlignerViewChild","calculateScrollbarHeight","frozenView","frozenSiblingBody","scrollBarWidth","scrollHeaderBoxViewChild","paddingRight","scrollFooterBoxViewChild","bindEvents","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","getElementRef","scrollBodyViewChild","unbindEvents","preventBodyScrollPropagation","marginLeft","scrollTop","onScrollIndexChange","virtualScrollTimeout","page","floor","virtualScrollOffset","virtualScrollChunkSize","virtualPage","getPageCount","dataToRender","dataLength","scrollToIndex","CdkVirtualScrollViewport","SortableColumn","isEnabled","updateSortState","onClick","isFilterElement","onEnterKey","pSortableColumnDisabled","Directive","host","[class.p-sortable-column]","[class.p-highlight]","[attr.tabindex]","[attr.role]","[attr.aria-sort]","HostListener","SortIcon","OnPush","SelectableRow","onTouchEnd","onArrowDownKeyDown","row","currentTarget","nextRow","findNextSelectableRow","focus","onArrowUpKeyDown","prevRow","findPrevSelectableRow","onEnterKeyDown","pSelectableRowDisabled","[class.p-selectable-row]","SelectableRowDblClick","ContextMenuRow","pContextMenuRowDisabled","[class.p-highlight-contextmenu]","RowToggler","pRowTogglerDisabled","ResizableColumn","resizer","className","resizerMouseDownListener","onMouseDown","bindDocumentEvents","documentMouseMoveListener","onDocumentMouseMove","documentMouseUpListener","onDocumentMouseUp","unbindDocumentEvents","which","pResizableColumnDisabled","ReorderableColumn","mouseDownListener","dragStartListener","onDragStart","dragOverListener","onDragEnter","dragEnterListener","dragLeaveListener","onDragLeave","onDragOver","onDrop","pReorderableColumnDisabled","EditableColumn","closeEditingCell","openCell","focusCellSelector","pFocusCellSelector","focusableElement","completed","onEscapeKeyDown","onShiftKeyDown","moveToPreviousCell","moveToNextCell","findCell","currentCell","targetCell","findPreviousEditableColumn","invokeElementMethod","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","firstElementChild","pEditableColumnDisabled","EditableRow","pEditableRowDisabled","InitEditableRow","editableRow","SaveEditableRow","CancelEditableRow","CellEditor","editableColumn","inputTemplate","outputTemplate","decorators","Optional","TableRadioButton","disabled","onFocus","boxViewChild","onBlur","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","isDisabled","isAllFilteredValuesChecked","ReorderableRowHandle","ReorderableRow","droppable","dragEndListener","onDragEnd","pReorderableRowDisabled","ColumnFilterFormElement","useGrouping","filterCallback","onModelChange","onTextInputEnterKeyDown","onNumericInputKeyDown","ColumnFilter","renderer","config","showMenu","showOperator","showClearButton","showApplyButton","showMatchModes","showAddButton","maxConstraints","initFieldFilterConstraint","translationSubscription","translationObserver","generateMatchModeOptions","generateOperatorOptions","matchModes","matchModeOptions","_a","filterMatchModeOptions","label","getTranslation","operatorOptions","TranslationKeys","MATCH_ALL","MATCH_ANY","filterTemplate","defaultMatchMode","getDefaultMatchMode","onMenuMatchModeChange","onRowMatchModeChange","hide","onRowMatchModeKeyDown","nextItem","findNextItem","removeAttribute","tabIndex","prevItem","findPrevItem","onRowClearItemClick","clearFilter","isRowMatchModeSelected","addConstraint","getDefaultOperator","removeConstraint","onOperatorChange","toggleMenu","overlayVisible","onToggleButtonKeyDown","focusable","getFocusableElements","overlay","altKey","onEscape","icon","onOverlayAnimationStart","toState","zIndex","zindex","absolutePosition","bindDocumentClickListener","bindDocumentResizeListener","bindScrollListener","onOverlayHide","EQUALS","CONTAINS","hasRowFilter","fieldConstraints","APPLY","CLEAR","ADD_RULE","REMOVE_RULE","fieldFilter","isOutsideClicked","isSameNode","contains","documentClickListener","documentTarget","ownerDocument","listen","unbindDocumentClickListener","documentResizeListener","unbindDocumentResizeListener","scrollHandler","ConnectedOverlayScrollHandler","unbindScrollListener","applyFilter","animations","trigger","transition","opacity","transform","animate","Renderer2","PrimeNGConfig","NgModule","imports","CommonModule","PaginatorModule","InputTextModule","DropdownModule","ScrollingModule","FormsModule","ButtonModule","SelectButtonModule","CalendarModule","InputNumberModule","TriStateCheckboxModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, Directive, Optional, AfterContentInit,\n Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, Query, ViewEncapsulation, Renderer2} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimeTemplate, SharedModule, FilterMatchMode, FilterOperator, SelectItem, PrimeNGConfig, TranslationKeys } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { SortMeta } from 'primeng/api';\nimport { TableState } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { Injectable } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { FilterUtils } from 'primeng/utils';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\n\n@Injectable()\nexport class TableService {\n\n private sortSource = new Subject<SortMeta|SortMeta[]>();\n private selectionSource = new Subject();\n private contextMenuSource = new Subject<any>();\n private valueSource = new Subject<any>();\n private totalRecordsSource = new Subject<any>();\n private columnsSource = new Subject();\n\n sortSource$ = this.sortSource.asObservable();\n selectionSource$ = this.selectionSource.asObservable();\n contextMenuSource$ = this.contextMenuSource.asObservable();\n valueSource$ = this.valueSource.asObservable();\n totalRecordsSource$ = this.totalRecordsSource.asObservable();\n columnsSource$ = this.columnsSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onContextMenu(data: any) {\n this.contextMenuSource.next(data);\n }\n\n onValueChange(value: any) {\n this.valueSource.next(value);\n }\n\n onTotalRecordsChange(value: number) {\n this.totalRecordsSource.next(value);\n }\n\n onColumnsChange(columns: any[]) {\n this.columnsSource.next(columns);\n }\n}\n\n@Component({\n selector: 'p-table',\n template: `\n <div #container [ngStyle]=\"style\" [class]=\"styleClass\" data-scrollselectors=\".p-datatable-scrollable-body, .p-datatable-unfrozen-view .p-datatable-scrollable-body\"\n [ngClass]=\"{'p-datatable p-component': true,\n 'p-datatable-hoverable-rows': (rowHover||selectionMode),\n 'p-datatable-auto-layout': autoLayout,\n 'p-datatable-resizable': resizableColumns,\n 'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n 'p-datatable-scrollable': scrollable,\n 'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),\n 'p-datatable-responsive': responsive}\">\n <div class=\"p-datatable-loading-overlay p-component-overlay\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'p-datatable-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"p-datatable-header\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div class=\"p-datatable-wrapper\" *ngIf=\"!scrollable\">\n <table role=\"grid\" #table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n <tfoot *ngIf=\"footerTemplate\" class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n\n <div class=\"p-datatable-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"p-datatable-scrollable-view p-datatable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" #scrollableFrozenView [pScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"p-datatable-scrollable-view\" #scrollableView [pScrollableView]=\"columns\" [frozen]=\"false\" [scrollHeight]=\"scrollHeight\" [ngStyle]=\"{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}\"></div>\n </div>\n\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div *ngIf=\"summaryTemplate\" class=\"p-datatable-footer\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n </div>\n\n <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n <span #reorderIndicatorUp class=\"pi pi-arrow-down p-datatable-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up p-datatable-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TableService],\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./table.css']\n})\nexport class Table implements OnInit, AfterViewInit, AfterContentInit, BlockableUI, OnChanges {\n\n @Input() frozenColumns: any[];\n\n @Input() frozenValue: any[];\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() tableStyle: any;\n\n @Input() tableStyleClass: string;\n\n @Input() paginator: boolean;\n\n @Input() pageLinks: number = 5;\n\n @Input() rowsPerPageOptions: any[];\n\n @Input() alwaysShowPaginator: boolean = true;\n\n @Input() paginatorPosition: string = 'bottom';\n\n @Input() paginatorDropdownAppendTo: any;\n\n @Input() paginatorDropdownScrollHeight: string = '200px';\n\n @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n @Input() showCurrentPageReport: boolean;\n\n @Input() showJumpToPageDropdown: boolean;\n\n @Input() showFirstLastIcon: boolean = true;\n\n @Input() showPageLinks: boolean = true;\n\n @Input() defaultSortOrder: number = 1;\n\n @Input() sortMode: string = 'single';\n\n @Input() resetPageOnSort: boolean = true;\n\n @Input() selectionMode: string;\n\n @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelection: any;\n\n @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelectionMode: string = \"separate\";\n\n @Input() dataKey: string;\n\n @Input() metaKeySelection: boolean;\n\n @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n @Input() lazy: boolean = false;\n\n @Input() lazyLoadOnInit: boolean = true;\n\n @Input() compareSelectionBy: string = 'deepEquals';\n\n @Input() csvSeparator: string = ',';\n\n @Input() exportFilename: string = 'download';\n\n @Input() filters: { [s: string]: FilterMetadata | FilterMetadata[] } = {};\n\n @Input() globalFilterFields: string[];\n\n @Input() filterDelay: number = 300;\n\n @Input() filterLocale: string;\n\n @Input() expandedRowKeys: { [s: string]: boolean; } = {};\n\n @Input() editingRowKeys: { [s: string]: boolean; } = {};\n\n @Input() rowExpandMode: string = 'multiple';\n\n @Input() scrollable: boolean;\n\n @Input() scrollHeight: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() virtualScrollDelay: number = 250;\n\n @Input() virtualRowHeight: number = 28;\n\n @Input() frozenWidth: string;\n\n @Input() responsive: boolean;\n\n @Input() contextMenu: any;\n\n @Input() resizableColumns: boolean;\n\n @Input() columnResizeMode: string = 'fit';\n\n @Input() reorderableColumns: boolean;\n\n @Input() loading: boolean;\n\n @Input() loadingIcon: string = 'pi pi-spinner';\n\n @Input() showLoader: boolean = true;\n\n @Input() rowHover: boolean;\n\n @Input() customSort: boolean;\n\n @Input() autoLayout: boolean;\n\n @Input() exportFunction;\n\n @Input() stateKey: string;\n\n @Input() stateStorage: string = 'session';\n\n @Input() editMode: string = 'cell';\n\n @Input() minBufferPx: number;\n\n @Input() maxBufferPx: number;\n\n @Output() onRowSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowUnselect: EventEmitter<any> = new EventEmitter();\n\n @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowExpand: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowCollapse: EventEmitter<any> = new EventEmitter();\n\n @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n @Output() firstChange: EventEmitter<number> = new EventEmitter();\n\n @Output() rowsChange: EventEmitter<number> = new EventEmitter();\n\n @Output() onStateSave: EventEmitter<any> = new EventEmitter();\n\n @Output() onStateRestore: EventEmitter<any> = new EventEmitter();\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n @ViewChild('table') tableViewChild: ElementRef;\n\n @ViewChild('scrollableView') scrollableViewChild;\n\n @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n _value: any[] = [];\n\n _columns: any[];\n\n _totalRecords: number = 0;\n\n _first: number = 0;\n\n _rows: number;\n\n filteredValue: any[];\n\n headerTemplate: TemplateRef<any>;\n\n bodyTemplate: TemplateRef<any>;\n\n loadingBodyTemplate: TemplateRef<any>;\n\n captionTemplate: TemplateRef<any>;\n\n frozenRowsTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n summaryTemplate: TemplateRef<any>;\n\n colGroupTemplate: TemplateRef<any>;\n\n expandedRowTemplate: TemplateRef<any>;\n\n frozenHeaderTemplate: TemplateRef<any>;\n\n frozenBodyTemplate: TemplateRef<any>;\n\n frozenFooterTemplate: TemplateRef<any>;\n\n frozenColGroupTemplate: TemplateRef<any>;\n\n emptyMessageTemplate: TemplateRef<any>;\n\n paginatorLeftTemplate: TemplateRef<any>;\n\n paginatorRightTemplate: TemplateRef<any>;\n\n paginatorDropdownItemTemplate: TemplateRef<any>;\n\n selectionKeys: any = {};\n\n lastResizerHelperX: number;\n\n reorderIconWidth: number;\n\n reorderIconHeight: number;\n\n draggedColumn: any;\n\n draggedRowIndex: number;\n\n droppedRowIndex: number;\n\n rowDragging: boolean;\n\n dropPosition: number;\n\n editingCell: Element;\n\n editingCellData: any;\n\n editingCellField: any;\n\n editingCellRowIndex: number;\n\n editingCellClick: boolean;\n\n documentEditListener: any;\n\n _multiSortMeta: SortMeta[];\n\n _sortField: string;\n\n _sortOrder: number = 1;\n\n preventSelectionSetterPropagation: boolean;\n\n _selection: any;\n\n anchorRowIndex: number;\n\n rangeRowIndex: number;\n\n filterTimeout: any;\n\n initialized: boolean;\n\n rowTouched: boolean;\n\n restoringSort: boolean;\n\n restoringFilter: boolean;\n\n stateRestored: boolean;\n\n columnOrderStateRestored: boolean;\n\n columnWidthsState: string;\n\n tableWidthState: string;\n\n constructor(public el: ElementRef, public zone: NgZone, public tableService: TableService, public cd: ChangeDetectorRef) {}\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n if (!this.virtualScroll) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n }\n\n this.initialized = true;\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'caption':\n this.captionTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'body':\n this.bodyTemplate = item.template;\n break;\n\n case 'loadingbody':\n this.loadingBodyTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n case 'summary':\n this.summaryTemplate = item.template;\n break;\n\n case 'colgroup':\n this.colGroupTemplate = item.template;\n break;\n\n case 'rowexpansion':\n this.expandedRowTemplate = item.template;\n break;\n\n case 'frozenrows':\n this.frozenRowsTemplate = item.template;\n break;\n\n case 'frozenheader':\n this.frozenHeaderTemplate = item.template;\n break;\n\n case 'frozenbody':\n this.frozenBodyTemplate = item.template;\n break;\n\n case 'frozenfooter':\n this.frozenFooterTemplate = item.template;\n break;\n\n case 'frozencolgroup':\n this.frozenColGroupTemplate = item.template;\n break;\n\n case 'emptymessage':\n this.emptyMessageTemplate = item.template;\n break;\n\n case 'paginatorleft':\n this.paginatorLeftTemplate = item.template;\n break;\n\n case 'paginatorright':\n this.paginatorRightTemplate = item.template;\n break;\n\n case 'paginatordropdownitem':\n this.paginatorDropdownItemTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.isStateful() && this.resizableColumns) {\n this.restoreColumnWidths();\n }\n }\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange.value) {\n if (this.isStateful() && !this.stateRestored) {\n this.restoreState();\n }\n\n this._value = simpleChange.value.currentValue;\n\n if (!this.lazy) {\n this.totalRecords = (this._value ? this._value.length : 0);\n\n if (this.sortMode == 'single' && this.sortField)\n this.sortSingle();\n else if (this.sortMode == 'multiple' && this.multiSortMeta)\n this.sortMultiple();\n else if (this.hasFilter()) //sort already filters\n this._filter();\n }\n\n this.tableService.onValueChange(simpleChange.value.currentValue);\n }\n\n if (simpleChange.columns) {\n this._columns = simpleChange.columns.currentValue;\n this.tableService.onColumnsChange(simpleChange.columns.currentValue);\n\n if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored ) {\n this.restoreColumnOrder();\n }\n }\n\n if (simpleChange.sortField) {\n this._sortField = simpleChange.sortField.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.sortOrder) {\n this._sortOrder = simpleChange.sortOrder.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.multiSortMeta) {\n this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n if (this.sortMode === 'multiple') {\n this.sortMultiple();\n }\n }\n\n if (simpleChange.selection) {\n this._selection = simpleChange.selection.currentValue;\n\n if (!this.preventSelectionSetterPropagation) {\n this.updateSelectionKeys();\n this.tableService.onSelectionChange();\n }\n this.preventSelectionSetterPropagation = false;\n }\n }\n\n @Input() get value(): any[] {\n return this._value;\n }\n set value(val: any[]) {\n this._value = val;\n }\n\n @Input() get columns(): any[] {\n return this._columns;\n }\n set columns(cols: any[]) {\n this._columns = cols;\n }\n\n @Input() get first(): number {\n return this._first;\n }\n set first(val: number) {\n this._first = val;\n }\n\n @Input() get rows(): number {\n return this._rows;\n }\n set rows(val: number) {\n this._rows = val;\n }\n\n @Input() get totalRecords(): number {\n return this._totalRecords;\n }\n set totalRecords(val: number) {\n this._totalRecords = val;\n this.tableService.onTotalRecordsChange(this._totalRecords);\n }\n\n @Input() get sortField(): string {\n return this._sortField;\n }\n\n set sortField(val: string) {\n this._sortField = val;\n }\n\n @Input() get sortOrder(): number {\n return this._sortOrder;\n }\n set sortOrder(val: number) {\n this._sortOrder = val;\n }\n\n @Input() get multiSortMeta(): SortMeta[] {\n return this._multiSortMeta;\n }\n\n set multiSortMeta(val: SortMeta[]) {\n this._multiSortMeta = val;\n }\n\n @Input() get selection(): any {\n return this._selection;\n }\n\n set selection(val: any) {\n this._selection = val;\n }\n\n updateSelectionKeys() {\n if (this.dataKey && this._selection) {\n this.selectionKeys = {};\n if (Array.isArray(this._selection)) {\n for(let data of this._selection) {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;\n }\n }\n else {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n }\n }\n }\n\n onPageChange(event) {\n this.first = event.first;\n this.rows = event.rows;\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\n this.onPage.emit({\n first: this.first,\n rows: this.rows\n });\n\n this.firstChange.emit(this.first);\n this.rowsChange.emit(this.rows);\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n sort(event) {\n let originalEvent = event.originalEvent;\n\n if (this.sortMode === 'single') {\n this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n this._sortField = event.field;\n this.sortSingle();\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n }\n if (this.sortMode === 'multiple') {\n let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n let sortMeta = this.getSortMeta(event.field);\n\n if (sortMeta) {\n if (!metaKey) {\n this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n }\n else {\n sortMeta.order = sortMeta.order * -1;\n }\n }\n else {\n if (!metaKey || !this.multiSortMeta) {\n this._multiSortMeta = [];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n }\n }\n this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n }\n\n this.sortMultiple();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n }\n\n sortSingle() {\n if (this.sortField && this.sortOrder) {\n if (this.restoringSort) {\n this.restoringSort = false;\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n field: this.sortField,\n order: this.sortOrder\n });\n }\n else {\n this.value.sort((data1, data2) => {\n let value1 = ObjectUtils.resolveFieldData(data1, this.sortField);\n let value2 = ObjectUtils.resolveFieldData(data2, this.sortField);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2);\n else\n result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n return (this.sortOrder * result);\n });\n\n this._value = [...this.value];\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n let sortMeta: SortMeta = {\n field: this.sortField,\n order: this.sortOrder\n };\n\n this.onSort.emit(sortMeta);\n this.tableService.onSort(sortMeta);\n }\n }\n\n sortMultiple() {\n if (this.multiSortMeta) {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n multiSortMeta: this.multiSortMeta\n });\n }\n else {\n this.value.sort((data1, data2) => {\n return this.multisortField(data1, data2, this.multiSortMeta, 0);\n });\n\n this._value = [...this.value];\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n this.onSort.emit({\n multisortmeta: this.multiSortMeta\n });\n this.tableService.onSort(this.multiSortMeta);\n }\n }\n\n multisortField(data1, data2, multiSortMeta, index) {\n let value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);\n let value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && (value1 != value2)) {\n return (multiSortMeta[index].order * value1.localeCompare(value2));\n }\n }\n else {\n result = (value1 < value2) ? -1 : 1;\n }\n\n if (value1 == value2) {\n return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n }\n\n return (multiSortMeta[index].order * result);\n }\n\n getSortMeta(field: string) {\n if (this.multiSortMeta && this.multiSortMeta.length) {\n for (let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field === field) {\n return this.multiSortMeta[i];\n }\n }\n }\n\n return null;\n }\n\n isSorted(field: string) {\n if (this.sortMode === 'single') {\n return (this.sortField && this.sortField === field);\n }\n else if (this.sortMode === 'multiple') {\n let sorted = false;\n if (this.multiSortMeta) {\n for(let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field == field) {\n sorted = true;\n break;\n }\n }\n }\n return sorted;\n }\n }\n\n handleRowClick(event) {\n let target = (<HTMLElement> event.originalEvent.target);\n let targetNode = target.nodeName;\n let parentNode = target.parentElement && target.parentElement.nodeName;\n if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' ||\n parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' ||\n (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {\n return;\n }\n\n if (this.selectionMode) {\n this.preventSelectionSetterPropagation = true;\n if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {\n DomHandler.clearSelection();\n if (this.rangeRowIndex != null) {\n this.clearSelectionRange(event.originalEvent);\n }\n\n this.rangeRowIndex = event.rowIndex;\n this.selectRange(event.originalEvent, event.rowIndex);\n }\n else {\n let rowData = event.rowData;\n let selected = this.isSelected(rowData);\n let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.anchorRowIndex = event.rowIndex;\n this.rangeRowIndex = event.rowIndex;\n\n if (metaSelection) {\n let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n if (selected && metaKey) {\n if (this.isSingleSelectionMode()) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(null);\n }\n else {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n\n this.onRowUnselect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row'});\n }\n else {\n if (this.isSingleSelectionMode()) {\n this._selection = rowData;\n this.selectionChange.emit(rowData);\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n if (metaKey) {\n this._selection = this.selection||[];\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this._selection = [...this.selection,rowData];\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.onRowSelect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex});\n }\n }\n else {\n if (this.selectionMode === 'single') {\n if (selected) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n }\n else {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n else if (this.selectionMode === 'multiple') {\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.rowTouched = false;\n }\n\n handleRowTouchEnd(event) {\n this.rowTouched = true;\n }\n\n handleRowRightClick(event) {\n if (this.contextMenu) {\n const rowData = event.rowData;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = rowData;\n this.contextMenuSelectionChange.emit(rowData);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, data: rowData, index: event.rowIndex});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(rowData);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = rowData;\n this.selectionChange.emit(rowData);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [rowData];\n this.selectionChange.emit(this.selection);\n }\n\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.contextMenu.show(event.originalEvent);\n this.onContextMenuSelect.emit({originalEvent: event, data: rowData, index: event.rowIndex});\n }\n }\n }\n\n selectRange(event: MouseEvent, rowIndex: number) {\n let rangeStart, rangeEnd;\n\n if (this.anchorRowIndex > rowIndex) {\n rangeStart = rowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else if (this.anchorRowIndex < rowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = rowIndex;\n }\n else {\n rangeStart = rowIndex;\n rangeEnd = rowIndex;\n }\n\n if (this.lazy && this.paginator) {\n rangeStart -= this.first;\n rangeEnd -= this.first;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];\n if (!this.isSelected(rangeRowData)) {\n this._selection = [...this.selection, rangeRowData];\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n this.onRowSelect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n this.selectionChange.emit(this.selection);\n }\n\n clearSelectionRange(event: MouseEvent) {\n let rangeStart, rangeEnd;\n\n if (this.rangeRowIndex > this.anchorRowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n else if (this.rangeRowIndex < this.anchorRowIndex) {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.value[i];\n let selectionIndex = this.findIndexInSelection(rangeRowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n this.onRowUnselect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n isSelected(rowData) {\n if (rowData && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(rowData) > -1;\n else\n return this.equals(rowData, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(rowData: any) {\n let index: number = -1;\n if (this.selection && this.selection.length) {\n for (let i = 0; i < this.selection.length; i++) {\n if (this.equals(rowData, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n toggleRowWithRadio(event: any, rowData:any) {\n this.preventSelectionSetterPropagation = true;\n\n if (this.selection != rowData) {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n\n if (this.dataKey) {\n this.selectionKeys = {};\n this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;\n }\n }\n else {\n this._selection = null;\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowWithCheckbox(event, rowData: any) {\n this.selection = this.selection||[];\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.preventSelectionSetterPropagation = true;\n\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowsWithCheckbox(event: Event, check: boolean) {\n this._selection = check ? this.filteredValue ? this.filteredValue.slice(): this.value.slice() : [];\n this.preventSelectionSetterPropagation = true;\n this.updateSelectionKeys();\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n equals(data1, data2) {\n return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);\n }\n\n /* Legacy Filtering for custom elements */\n filter(value: any, field: string, matchMode: string) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n if (!this.isFilterBlank(value)) {\n this.filters[field] = { value: value, matchMode: matchMode };\n } else if (this.filters[field]) {\n delete this.filters[field];\n }\n\n this.filterTimeout = setTimeout(() => {\n this._filter();\n this.filterTimeout = null;\n }, this.filterDelay);\n\n this.anchorRowIndex = null;\n }\n\n filterGlobal(value, matchMode) {\n this.filter(value, 'global', matchMode);\n }\n\n isFilterBlank(filter: any): boolean {\n if (filter !== null && filter !== undefined) {\n if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n return true;\n else\n return false;\n }\n return true;\n }\n\n _filter() {\n if (!this.restoringFilter) {\n this.first = 0;\n this.firstChange.emit(this.first);\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n if (!this.value) {\n return;\n }\n\n if (!this.hasFilter()) {\n this.filteredValue = null;\n if (this.paginator) {\n this.totalRecords = this.value ? this.value.length : 0;\n }\n }\n else {\n let globalFilterFieldsArray;\n if (this.filters['global']) {\n if (!this.columns && !this.globalFilterFields)\n throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n else\n globalFilterFieldsArray = this.globalFilterFields||this.columns;\n }\n\n this.filteredValue = [];\n\n for (let i = 0; i < this.value.length; i++) {\n let localMatch = true;\n let globalMatch = false;\n let localFiltered = false;\n\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n localFiltered = true;\n let filterField = prop;\n let filterMeta = this.filters[filterField];\n\n if (Array.isArray(filterMeta)) {\n for (let meta of filterMeta) {\n localMatch = this.executeLocalFilter(filterField, this.value[i], meta);\n\n if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {\n break;\n }\n }\n }\n else {\n localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);\n }\n \n if (!localMatch) {\n break;\n }\n }\n }\n\n if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n let globalFilterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n globalMatch = FilterUtils[(<FilterMetadata> this.filters['global']).matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), (<FilterMetadata> this.filters['global']).value, this.filterLocale);\n\n if (globalMatch) {\n break;\n }\n }\n }\n\n let matches: boolean;\n if (this.filters['global']) {\n matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;\n }\n else {\n matches = localFiltered && localMatch;\n }\n\n if (matches) {\n this.filteredValue.push(this.value[i]);\n }\n }\n\n if (this.filteredValue.length === this.value.length) {\n this.filteredValue = null;\n }\n\n if (this.paginator) {\n this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n }\n }\n }\n\n this.onFilter.emit({\n filters: this.filters,\n filteredValue: this.filteredValue || this.value\n });\n\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful() && !this.restoringFilter) {\n this.saveState();\n }\n\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n\n this.cd.markForCheck();\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n executeLocalFilter(field: string, rowData: any, filterMeta: FilterMetadata): boolean {\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;\n let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);\n let filterConstraint = FilterUtils[filterMatchMode];\n\n return filterConstraint(dataFieldValue, filterValue, this.filterLocale);\n }\n\n hasFilter() {\n let empty = true;\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n empty = false;\n break;\n }\n }\n\n return !empty;\n }\n\n createLazyLoadMetadata(): any {\n return {\n first: this.first,\n rows: this.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n public clear() {\n this._sortField = null;\n this._sortOrder = this.defaultSortOrder;\n this._multiSortMeta = null;\n this.tableService.onSort(null);\n\n this.filteredValue = null;\n this.filters = {};\n\n this.first = 0;\n this.firstChange.emit(this.first);\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n this.totalRecords = (this._value ? this._value.length : 0);\n }\n }\n\n public reset() {\n this.clear();\n }\n\n public exportCSV(options?: any) {\n let data;\n let csv = '';\n let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;\n\n if (options && options.selectionOnly) {\n data = this.selection || [];\n }\n else {\n data = this.filteredValue || this.value;\n\n if (this.frozenValue) {\n data = data ? [...this.frozenValue, ...data] : this.frozenValue;\n }\n }\n\n //headers\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n csv += '\"' + (column.header || column.field) + '\"';\n\n if (i < (columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n\n //body\n data.forEach((record, i) => {\n csv += '\\n';\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n let cellData = ObjectUtils.resolveFieldData(record, column.field);\n\n if (cellData != null) {\n if (this.exportFunction) {\n cellData = this.exportFunction({\n data: cellData,\n field: column.field\n });\n }\n else\n cellData = String(cellData).replace(/\"/g, '\"\"');\n }\n else\n cellData = '';\n\n csv += '\"' + cellData + '\"';\n\n if (i < (columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n });\n\n let blob = new Blob([csv], {\n type: 'text/csv;charset=utf-8;'\n });\n\n if (window.navigator.msSaveOrOpenBlob) {\n navigator.msSaveOrOpenBlob(blob, this.exportFilename + '.csv');\n }\n else {\n let link = document.createElement(\"a\");\n link.style.display = 'none';\n document.body.appendChild(link);\n if (link.download !== undefined) {\n link.setAttribute('href', URL.createObjectURL(blob));\n link.setAttribute('download', this.exportFilename + '.csv');\n link.click();\n }\n else {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n window.open(encodeURI(csv));\n }\n document.body.removeChild(link);\n }\n }\n\n public resetScrollTop() {\n if (this.virtualScroll)\n this.scrollToVirtualIndex(0);\n else\n this.scrollTo({top: 0});\n }\n\n public scrollToVirtualIndex(index: number) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollToVirtualIndex(index);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n }\n }\n\n public scrollTo(options) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollTo(options);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollTo(options);\n }\n }\n\n updateEditingCell(cell, data, field, index) {\n this.editingCell = cell;\n this.editingCellData = data;\n this.editingCellField = field;\n this.editingCellRowIndex = index;\n this.bindDocumentEditListener();\n }\n\n isEditingCellValid() {\n return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n }\n\n bindDocumentEditListener() {\n if (!this.documentEditListener) {\n this.documentEditListener = (event) => {\n if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n DomHandler.removeClass(this.editingCell, 'p-cell-editing');\n this.editingCell = null;\n this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });\n this.editingCellField = null;\n this.editingCellData = null;\n this.editingCellRowIndex = null;\n this.unbindDocumentEditListener();\n this.cd.markForCheck();\n }\n\n this.editingCellClick = false;\n };\n\n document.addEventListener('click', this.documentEditListener);\n }\n }\n\n unbindDocumentEditListener() {\n if (this.documentEditListener) {\n document.removeEventListener('click', this.documentEditListener);\n this.documentEditListener = null;\n }\n }\n\n initRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n this.editingRowKeys[dataKeyValue] = true;\n }\n\n saveRowEdit(rowData: any, rowElement: HTMLTableRowElement) {\n if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n }\n\n cancelRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n\n toggleRow(rowData: any, event?: Event) {\n if (!this.dataKey) {\n throw new Error('dataKey must be defined to use row expansion');\n }\n\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n\n if (this.expandedRowKeys[dataKeyValue] != null) {\n delete this.expandedRowKeys[dataKeyValue];\n this.onRowCollapse.emit({\n originalEvent: event,\n data: rowData\n });\n }\n else {\n if (this.rowExpandMode === 'single') {\n this.expandedRowKeys = {};\n }\n\n this.expandedRowKeys[dataKeyValue] = true;\n this.onRowExpand.emit({\n originalEvent: event,\n data: rowData\n });\n }\n\n if (event) {\n event.preventDefault();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n isRowExpanded(rowData: any): boolean {\n return this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isRowEditing(rowData: any): boolean {\n return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isSingleSelectionMode() {\n return this.selectionMode === 'single';\n }\n\n isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n }\n\n onColumnResizeBegin(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n this.onColumnResize(event);\n event.preventDefault();\n }\n\n onColumnResize(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n this.resizeHelperViewChild.nativeElement.style.display = 'block';\n }\n\n onColumnResizeEnd(event, column) {\n let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n let columnWidth = column.offsetWidth;\n let minWidth = parseInt(column.style.minWidth || 15);\n\n if (columnWidth + delta < minWidth) {\n delta = minWidth - columnWidth;\n }\n\n const newColumnWidth = columnWidth + delta;\n\n if (newColumnWidth >= minWidth) {\n if (this.columnResizeMode === 'fit') {\n let nextColumn = column.nextElementSibling;\n while (!nextColumn.offsetParent) {\n nextColumn = nextColumn.nextElementSibling;\n }\n\n if (nextColumn) {\n let nextColumnWidth = nextColumn.offsetWidth - delta;\n let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n if (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-footer-table');\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n }\n else {\n column.style.width = newColumnWidth + 'px';\n if (nextColumn) {\n nextColumn.style.width = nextColumnWidth + 'px';\n }\n }\n }\n }\n }\n else if (this.columnResizeMode === 'expand') {\n if (newColumnWidth >= minWidth) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n column.style.width = newColumnWidth + 'px';\n let containerWidth = this.tableViewChild.nativeElement.style.width;\n this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n }\n }\n }\n\n this.onColResize.emit({\n element: column,\n delta: delta\n });\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.resizeHelperViewChild.nativeElement.style.display = 'none';\n DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n }\n\n setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta) {\n let scrollableView = column ? this.findParentScrollableView(column) : this.containerViewChild.nativeElement;\n let scrollableBody = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');\n let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-header');\n let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-footer');\n let scrollableBodyTable = DomHandler.findSingle(scrollableBody, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.p-datatable-scrollable-footer-table');\n\n const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;\n const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;\n const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;\n\n let setWidth = (container, table, width, isContainerInViewport) => {\n if (container && table) {\n container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto'\n table.style.width = width + 'px';\n }\n };\n\n setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);\n setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);\n setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);\n\n if (column) {\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n }\n }\n\n findParentScrollableView(column) {\n if (column) {\n let parent = column.parentElement;\n while (parent && !DomHandler.hasClass(parent, 'p-datatable-scrollable-view')) {\n parent = parent.parentElement;\n }\n\n return parent;\n }\n else {\n return null;\n }\n }\n\n resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n if (table) {\n let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n if (colGroup) {\n let col = colGroup.children[resizeColumnIndex];\n let nextCol = col.nextElementSibling;\n col.style.width = newColumnWidth + 'px';\n\n if (nextCol && nextColumnWidth) {\n nextCol.style.width = nextColumnWidth + 'px';\n }\n }\n else {\n throw \"Scrollable tables require a colgroup to support resizable columns\";\n }\n }\n }\n\n onColumnDragStart(event, columnElement) {\n this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n this.draggedColumn = columnElement;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onColumnDragEnter(event, dropHeader) {\n if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n event.preventDefault();\n let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n if (this.draggedColumn != dropHeader) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'preorderablecolumn');\n let targetLeft = dropHeaderOffset.left - containerOffset.left;\n let targetTop = containerOffset.top - dropHeaderOffset.top;\n let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n if (event.pageX > columnCenter) {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = 1;\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = -1;\n }\n\n if ((dropIndex - dragIndex === 1 && this.dropPosition === -1) || (dropIndex - dragIndex === -1 && this.dropPosition === 1)) {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n }\n }\n else {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n }\n\n onColumnDragLeave(event) {\n if (this.reorderableColumns && this.draggedColumn) {\n event.preventDefault();\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n }\n\n onColumnDrop(event, dropColumn) {\n event.preventDefault();\n if (this.draggedColumn) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'preorderablecolumn');\n let allowDrop = (dragIndex != dropIndex);\n if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n allowDrop = false;\n }\n\n if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n dropIndex = dropIndex + 1;\n }\n\n if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n dropIndex = dropIndex - 1;\n }\n\n if (allowDrop) {\n ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n this.onColReorder.emit({\n dragIndex: dragIndex,\n dropIndex: dropIndex,\n columns: this.columns\n });\n\n if (this.isStateful()) {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.saveState();\n });\n });\n }\n }\n\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n this.draggedColumn.draggable = false;\n this.draggedColumn = null;\n this.dropPosition = null;\n }\n }\n\n onRowDragStart(event, index) {\n this.rowDragging = true;\n this.draggedRowIndex = index;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onRowDragOver(event, index, rowElement) {\n if (this.rowDragging && this.draggedRowIndex !== index) {\n let rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();\n let pageY = event.pageY;\n let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;\n let prevRowElement = rowElement.previousElementSibling;\n\n if (pageY < rowMidY) {\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n\n this.droppedRowIndex = index;\n if (prevRowElement)\n DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n }\n else {\n if (prevRowElement)\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n\n this.droppedRowIndex = index + 1;\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');\n }\n }\n }\n\n onRowDragLeave(event, rowElement) {\n let prevRowElement = rowElement.previousElementSibling;\n if (prevRowElement) {\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n }\n\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top');\n }\n\n onRowDragEnd(event) {\n this.rowDragging = false;\n this.draggedRowIndex = null;\n this.droppedRowIndex = null;\n }\n\n onRowDrop(event, rowElement) {\n if (this.droppedRowIndex != null) {\n let dropIndex = (this.draggedRowIndex > this.droppedRowIndex) ? this.droppedRowIndex : (this.droppedRowIndex === 0) ? 0 : this.droppedRowIndex - 1;\n ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);\n\n this.onRowReorder.emit({\n dragIndex: this.draggedRowIndex,\n dropIndex: dropIndex\n });\n }\n //cleanup\n this.onRowDragLeave(event, rowElement);\n this.onRowDragEnd(event);\n }\n\n isEmpty() {\n let data = this.filteredValue||this.value;\n return data == null || data.length == 0;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n getStorage() {\n switch(this.stateStorage) {\n case 'local':\n return window.localStorage;\n\n case 'session':\n return window.sessionStorage;\n\n default:\n throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n }\n }\n\n isStateful() {\n return this.stateKey != null;\n }\n\n saveState() {\n const storage = this.getStorage();\n let state: TableState = {};\n\n if (this.paginator) {\n state.first = this.first;\n state.rows = this.rows;\n }\n\n if (this.sortField) {\n state.sortField = this.sortField;\n state.sortOrder = this.sortOrder;\n }\n\n if (this.multiSortMeta) {\n state.multiSortMeta = this.multiSortMeta;\n }\n\n if (this.hasFilter()) {\n state.filters = this.filters;\n }\n\n if (this.resizableColumns) {\n this.saveColumnWidths(state);\n }\n\n if (this.reorderableColumns) {\n this.saveColumnOrder(state);\n }\n\n if (this.selection) {\n state.selection = this.selection;\n }\n\n if (Object.keys(this.expandedRowKeys).length) {\n state.expandedRowKeys = this.expandedRowKeys;\n }\n\n if (Object.keys(state).length) {\n storage.setItem(this.stateKey, JSON.stringify(state));\n }\n\n this.onStateSave.emit(state);\n }\n\n clearState() {\n const storage = this.getStorage();\n\n if (this.stateKey) {\n storage.removeItem(this.stateKey);\n }\n }\n\n restoreState() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n\n if (this.paginator) {\n if (this.first !== undefined) {\n this.first = state.first;\n this.firstChange.emit(this.first);\n }\n\n if (this.rows !== undefined) {\n this.rows = state.rows;\n this.rowsChange.emit(this.rows);\n }\n }\n\n if (state.sortField) {\n this.restoringSort = true;\n this._sortField = state.sortField;\n this._sortOrder = state.sortOrder;\n }\n\n if (state.multiSortMeta) {\n this.restoringSort = true;\n this._multiSortMeta = state.multiSortMeta;\n }\n\n if (state.filters) {\n this.restoringFilter = true;\n this.filters = state.filters;\n }\n\n if (this.resizableColumns) {\n this.columnWidthsState = state.columnWidths;\n this.tableWidthState = state.tableWidth;\n }\n\n if (state.expandedRowKeys) {\n this.expandedRowKeys = state.expandedRowKeys;\n }\n\n if (state.selection) {\n Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));\n }\n\n this.stateRestored = true;\n\n this.onStateRestore.emit(state);\n }\n }\n\n saveColumnWidths(state) {\n let widths = [];\n let headers = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-thead > tr:first-child > th');\n headers.map(header => widths.push(DomHandler.getOuterWidth(header)));\n state.columnWidths = widths.join(',');\n\n if (this.columnResizeMode === 'expand') {\n state.tableWidth = this.scrollable ? DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-datatable-scrollable-header-table').style.width :\n DomHandler.getOuterWidth(this.tableViewChild.nativeElement) + 'px';\n }\n }\n\n restoreColumnWidths() {\n if (this.columnWidthsState) {\n let widths = this.columnWidthsState.split(',');\n\n if (this.columnResizeMode === 'expand' && this.tableWidthState) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(null, this.tableWidthState, 0);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableWidthState;\n this.containerViewChild.nativeElement.style.width = this.tableWidthState;\n }\n }\n\n if (this.scrollable) {\n let headerCols = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-scrollable-header-table > colgroup > col');\n let bodyCols = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-scrollable-body table > colgroup > col');\n\n headerCols.map((col, index) => col.style.width = widths[index] + 'px');\n bodyCols.map((col, index) => col.style.width = widths[index] + 'px');\n }\n else {\n let headers = DomHandler.find(this.tableViewChild.nativeElement, '.p-datatable-thead > tr:first-child > th');\n headers.map((header, index) => header.style.width = widths[index] + 'px');\n }\n }\n }\n\n saveColumnOrder(state) {\n if (this.columns) {\n let columnOrder: string[] = [];\n this.columns.map(column => {\n columnOrder.push(column.field||column.key)\n });\n\n state.columnOrder = columnOrder;\n }\n }\n\n restoreColumnOrder() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n let columnOrder = state.columnOrder;\n if (columnOrder) {\n let reorderedColumns = [];\n\n columnOrder.map(key => {\n let col = this.findColumnByKey(key);\n if (col) {\n reorderedColumns.push(col)\n }\n });\n this.columnOrderStateRestored = true;\n this.columns = reorderedColumns;\n }\n }\n }\n\n findColumnByKey(key) {\n if (this.columns) {\n for (let col of this.columns) {\n if (col.key === key || col.field === key)\n return col;\n else\n continue;\n }\n }\n else {\n return null;\n }\n }\n\n ngOnDestroy() {\n this.unbindDocumentEditListener();\n this.editingCell = null;\n this.initialized = null;\n }\n}\n\n@Component({\n selector: '[pTableBody]',\n template: `\n <ng-container *ngIf=\"!dt.expandedRowTemplate && !dt.virtualScroll\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!dt.expandedRowTemplate && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.expandedRowTemplate\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableBody implements OnDestroy {\n\n @Input(\"pTableBody\") columns: any[];\n\n @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n @Input() frozen: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n if (this.dt.virtualScroll) {\n this.cd.detectChanges();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: '[pScrollableView]',\n template: `\n <div #scrollHeader class=\"p-datatable-scrollable-header\">\n <div #scrollHeaderBox class=\"p-datatable-scrollable-header-box\">\n <table class=\"p-datatable-scrollable-header-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenHeaderTemplate||dt.headerTemplate : dt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"dt.frozenValue\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"dt.frozenRowsTemplate; context: {$implicit: rowData, rowIndex: rowIndex, columns: columns}\"></ng-container>\n </ng-template>\n </tbody>\n </table>\n </div>\n </div>\n <ng-container *ngIf=\"!dt.virtualScroll; else virtualScrollTemplate\">\n <div #scrollBody class=\"p-datatable-scrollable-body\" [ngStyle]=\"{'max-height': dt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && dt.scrollHeight ? 'scroll' : undefined}\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </div>\n </ng-container>\n <ng-template #virtualScrollTemplate>\n <cdk-virtual-scroll-viewport [itemSize]=\"dt.virtualRowHeight\" tabindex=\"0\" [style.height]=\"dt.scrollHeight !== 'flex' ? scrollHeight : undefined\"\n [minBufferPx]=\"dt.minBufferPx\" [maxBufferPx]=\"dt.maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\" class=\"p-datatable-virtual-scrollable-body\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <div #scrollFooter class=\"p-datatable-scrollable-footer\">\n <div #scrollFooterBox class=\"p-datatable-scrollable-footer-box\">\n <table class=\"p-datatable-scrollable-footer-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tfoot class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenFooterTemplate||dt.footerTemplate : dt.footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class ScrollableView implements AfterViewInit,OnDestroy {\n\n @Input(\"pScrollableView\") columns: any[];\n\n @Input() frozen: boolean;\n\n @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n headerScrollListener: any;\n\n bodyScrollListener: any;\n\n footerScrollListener: any;\n\n frozenSiblingBody: HTMLDivElement;\n\n preventBodyScrollPropagation: boolean;\n\n _scrollHeight: string;\n\n virtualScrollTimeout: any;\n\n virtualPage: number;\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n if (val != null && (val.includes('%') || val.includes('calc'))) {\n console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.')\n }\n\n if (this.dt.virtualScroll && this.virtualScrollBody) {\n this.virtualScrollBody.ngOnInit();\n }\n }\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (!this.frozen) {\n if (this.dt.frozenColumns || this.dt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-unfrozen-view');\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n if (this.dt.virtualScroll)\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-virtual-scrollable-body');\n else\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-scrollable-body');\n }\n\n let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n }\n }\n else {\n if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n }\n }\n\n this.bindEvents();\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.headerScrollListener = this.onHeaderScroll.bind(this);\n this.scrollHeaderViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.footerScrollListener = this.onFooterScroll.bind(this);\n this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n }\n\n if (!this.frozen) {\n this.bodyScrollListener = this.onBodyScroll.bind(this);\n\n if (this.dt.virtualScroll)\n this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n else\n this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n }\n });\n }\n\n unbindEvents() {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n }\n\n if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n\n if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {\n this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n }\n\n onHeaderScroll() {\n const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;\n\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onFooterScroll() {\n const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onBodyScroll(event) {\n if (this.preventBodyScrollPropagation) {\n this.preventBodyScrollPropagation = false;\n return;\n }\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n }\n }\n\n onScrollIndexChange(index: number) {\n if (this.dt.lazy) {\n if (this.virtualScrollTimeout) {\n clearTimeout(this.virtualScrollTimeout);\n }\n\n this.virtualScrollTimeout = setTimeout(() => {\n let page = Math.floor(index / this.dt.rows);\n let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.dt.rows;\n let virtualScrollChunkSize = page === 0 ? this.dt.rows * 2 : this.dt.rows * 3;\n \n if (page !== this.virtualPage) {\n this.virtualPage = page;\n this.dt.onLazyLoad.emit({\n first: virtualScrollOffset,\n rows: virtualScrollChunkSize,\n sortField: this.dt.sortField,\n sortOrder: this.dt.sortOrder,\n filters: this.dt.filters,\n globalFilter: this.dt.filters && this.dt.filters['global'] ? (<FilterMetadata> this.dt.filters['global']).value : null,\n multiSortMeta: this.dt.multiSortMeta\n });\n }\n }, this.dt.virtualScrollDelay);\n }\n }\n\n getPageCount() {\n let dataToRender = this.dt.filteredValue || this.dt.value;\n let dataLength = dataToRender ? dataToRender.length: 0;\n return Math.ceil(dataLength / this.dt.rows);\n }\n\n scrollToVirtualIndex(index: number): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollToIndex(index);\n }\n }\n\n scrollTo(options): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollTo(options);\n }\n else {\n if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n this.scrollBodyViewChild.nativeElement.scrollTo(options);\n }\n else {\n this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n }\n }\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n this.frozenSiblingBody = null;\n }\n}\n\n@Directive({\n selector: '[pSortableColumn]',\n host: {\n '[class.p-sortable-column]': 'isEnabled()',\n '[class.p-highlight]': 'sorted',\n '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n '[attr.role]': '\"columnheader\"',\n '[attr.aria-sort]': 'sortOrder'\n }\n})\nexport class SortableColumn implements OnInit, OnDestroy {\n\n @Input(\"pSortableColumn\") field: string;\n\n @Input() pSortableColumnDisabled: boolean;\n\n sorted: boolean;\n\n sortOrder: string;\n\n subscription: Subscription;\n\n constructor(public dt: Table) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.updateSortState();\n }\n }\n\n updateSortState() {\n this.sorted = this.dt.isSorted(this.field);\n this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled() && !this.isFilterElement(<HTMLElement> event.target)) {\n this.updateSortState();\n this.dt.sort({\n originalEvent: event,\n field: this.field\n });\n\n DomHandler.clearSelection();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKey(event: MouseEvent) {\n this.onClick(event);\n }\n\n isEnabled() {\n return this.pSortableColumnDisabled !== true;\n }\n\n isFilterElement(element: HTMLElement) {\n return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n\n@Component({\n selector: 'p-sortIcon',\n template: `\n <i class=\"p-sortable-column-icon pi pi-fw\" [ngClass]=\"{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}\"></i>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class SortIcon implements OnInit, OnDestroy {\n\n @Input() field: string;\n\n subscription: Subscription;\n\n sortOrder: number;\n\n constructor(public dt: Table, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n\n ngOnInit() {\n this.updateSortState();\n }\n\n onClick(event){\n event.preventDefault();\n }\n\n updateSortState() {\n if (this.dt.sortMode === 'single') {\n this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;\n }\n else if (this.dt.sortMode === 'multiple') {\n let sortMeta = this.dt.getSortMeta(this.field);\n this.sortOrder = sortMeta ? sortMeta.order: 0;\n }\n\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Directive({\n selector: '[pSelectableRow]',\n host: {\n '[class.p-selectable-row]': 'isEnabled()',\n '[class.p-highlight]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class SelectableRow implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRow\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowTouchEnd(event);\n }\n }\n\n @HostListener('keydown.arrowdown', ['$event'])\n onArrowDownKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const nextRow = this.findNextSelectableRow(row);\n\n if (nextRow) {\n nextRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n onArrowUpKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const prevRow = this.findPrevSelectableRow(row);\n\n if (prevRow) {\n prevRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.shift.enter', ['$event'])\n @HostListener('keydown.meta.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n\n findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n if (nextRow) {\n if (DomHandler.hasClass(nextRow, 'p-selectable-row'))\n return nextRow;\n else\n return this.findNextSelectableRow(nextRow);\n }\n else {\n return null;\n }\n }\n\n findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let prevRow = <HTMLTableRowElement> row.previousElementSibling;\n if (prevRow) {\n if (DomHandler.hasClass(prevRow, 'p-selectable-row'))\n return prevRow;\n else\n return this.findPrevSelectableRow(prevRow);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pSelectableRowDblClick]',\n host: {\n '[class.p-selectable-row]': 'isEnabled()',\n '[class.p-highlight]': 'selected'\n }\n})\nexport class SelectableRowDblClick implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRowDblClick\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('dblclick', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pContextMenuRow]',\n host: {\n '[class.p-highlight-contextmenu]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class ContextMenuRow {\n\n @Input(\"pContextMenuRow\") data: any;\n\n @Input(\"pContextMenuRowIndex\") index: number;\n\n @Input() pContextMenuRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, private el: ElementRef) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.contextMenuSource$.subscribe((data) => {\n this.selected = this.dt.equals(this.data, data);\n });\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowRightClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n\n this.el.nativeElement.focus();\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pContextMenuRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pRowToggler]'\n})\nexport class RowToggler {\n\n @Input('pRowToggler') data: any;\n\n @Input() pRowTogglerDisabled: boolean;\n\n constructor(public dt: Table) { }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.toggleRow(this.data, event);\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pRowTogglerDisabled !== true;\n }\n}\n\n@Directive({\n selector: '[pResizableColumn]'\n})\nexport class ResizableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pResizableColumnDisabled: boolean;\n\n resizer: HTMLSpanElement;\n\n resizerMouseDownListener: any;\n\n documentMouseMoveListener: any;\n\n documentMouseUpListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'p-column-resizer';\n this.el.nativeElement.appendChild(this.resizer);\n\n this.zone.runOutsideAngular(() => {\n this.resizerMouseDownListener = this.onMouseDown.bind(this);\n this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n });\n }\n }\n\n bindDocumentEvents() {\n this.zone.runOutsideAngular(() => {\n this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n document.addEventListener('mouseup', this.documentMouseUpListener);\n });\n }\n\n unbindDocumentEvents() {\n if (this.documentMouseMoveListener) {\n document.removeEventListener('mousemove', this.documentMouseMoveListener);\n this.documentMouseMoveListener = null;\n }\n\n if (this.documentMouseUpListener) {\n document.removeEventListener('mouseup', this.documentMouseUpListener);\n this.documentMouseUpListener = null;\n }\n }\n\n onMouseDown(event: MouseEvent) {\n if (event.which === 1) {\n this.dt.onColumnResizeBegin(event);\n this.bindDocumentEvents();\n }\n }\n\n onDocumentMouseMove(event: MouseEvent) {\n this.dt.onColumnResize(event);\n }\n\n onDocumentMouseUp(event: MouseEvent) {\n this.dt.onColumnResizeEnd(event, this.el.nativeElement);\n this.unbindDocumentEvents();\n }\n\n isEnabled() {\n return this.pResizableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.resizerMouseDownListener) {\n this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n }\n\n this.unbindDocumentEvents();\n }\n}\n\n@Directive({\n selector: '[pReorderableColumn]'\n})\nexport class ReorderableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pReorderableColumnDisabled: boolean;\n\n dragStartListener: any;\n\n dragOverListener: any;\n\n dragEnterListener: any;\n\n dragLeaveListener: any;\n\n mouseDownListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragOverListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragEnterListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))\n this.el.nativeElement.draggable = false;\n else\n this.el.nativeElement.draggable = true;\n }\n\n onDragStart(event) {\n this.dt.onColumnDragStart(event, this.el.nativeElement);\n }\n\n onDragOver(event) {\n event.preventDefault();\n }\n\n onDragEnter(event) {\n this.dt.onColumnDragEnter(event, this.el.nativeElement);\n }\n\n onDragLeave(event) {\n this.dt.onColumnDragLeave(event);\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled()) {\n this.dt.onColumnDrop(event, this.el.nativeElement);\n }\n }\n\n isEnabled() {\n return this.pReorderableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n }\n\n}\n\n@Directive({\n selector: '[pEditableColumn]'\n})\nexport class EditableColumn implements AfterViewInit {\n\n @Input(\"pEditableColumn\") data: any;\n\n @Input(\"pEditableColumnField\") field: any;\n\n @Input(\"pEditableColumnRowIndex\") rowIndex: number;\n\n @Input() pEditableColumnDisabled: boolean;\n\n @Input() pFocusCellSelector: string;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'p-editable-column');\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.dt.editingCellClick = true;\n\n if (this.dt.editingCell) {\n if (this.dt.editingCell !== this.el.nativeElement) {\n if (!this.dt.isEditingCellValid()) {\n return;\n }\n\n this.closeEditingCell(true, event);\n this.openCell();\n }\n }\n else {\n this.openCell();\n }\n }\n }\n\n openCell() {\n this.dt.updateEditingCell(this.el.nativeElement, this.data, this.field, this.rowIndex);\n DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');\n this.dt.onEditInit.emit({field: this.field, data: this.data, index: this.rowIndex});\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let focusCellSelector = this.pFocusCellSelector || 'input, textarea, select';\n let focusableElement = DomHandler.findSingle(this.el.nativeElement, focusCellSelector);\n\n if (focusableElement) {\n focusableElement.focus();\n }\n }, 50);\n });\n }\n\n closeEditingCell(completed, event) {\n if (completed)\n this.dt.onEditComplete.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.rowIndex});\n else\n this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.rowIndex});\n\n DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');\n this.dt.editingCell = null;\n this.dt.editingCellData = null;\n this.dt.editingCellField = null;\n this.dt.unbindDocumentEditListener();\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.escape', ['$event'])\n onEscapeKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(false, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n @HostListener('keydown.shift.tab', ['$event'])\n @HostListener('keydown.meta.tab', ['$event'])\n onShiftKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (event.shiftKey)\n this.moveToPreviousCell(event);\n else{\n this.moveToNextCell(event);\n }\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\n cell = cell.parentElement;\n }\n\n return cell;\n }\n else {\n return null;\n }\n }\n\n moveToPreviousCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findPreviousEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n moveToNextCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findNextEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n findPreviousEditableColumn(cell: Element) {\n let prevCell = cell.previousElementSibling;\n\n if (!prevCell) {\n let previousRow = cell.parentElement.previousElementSibling;\n if (previousRow) {\n prevCell = previousRow.lastElementChild;\n }\n }\n\n if (prevCell) {\n if (DomHandler.hasClass(prevCell, 'p-editable-column'))\n return prevCell;\n else\n return this.findPreviousEditableColumn(prevCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumn(cell: Element) {\n let nextCell = cell.nextElementSibling;\n\n if (!nextCell) {\n let nextRow = cell.parentElement.nextElementSibling;\n if (nextRow) {\n nextCell = nextRow.firstElementChild;\n }\n }\n\n if (nextCell) {\n if (DomHandler.hasClass(nextCell, 'p-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pEditableColumnDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pEditableRow]'\n})\nexport class EditableRow {\n\n @Input(\"pEditableRow\") data: any;\n\n @Input() pEditableRowDisabled: boolean;\n\n constructor(public el: ElementRef) {}\n\n isEnabled() {\n return this.pEditableRowDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pInitEditableRow]'\n})\nexport class InitEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.initRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n\n}\n\n@Directive({\n selector: '[pSaveEditableRow]'\n})\nexport class SaveEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.saveRowEdit(this.editableRow.data, this.editableRow.el.nativeElement);\n event.preventDefault();\n }\n}\n\n@Directive({\n selector: '[pCancelEditableRow]'\n})\nexport class CancelEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.cancelRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n}\n\n@Component({\n selector: 'p-cellEditor',\n template: `\n <ng-container *ngIf=\"editing\">\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!editing\">\n <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class CellEditor implements AfterContentInit {\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n inputTemplate: TemplateRef<any>;\n\n outputTemplate: TemplateRef<any>;\n\n constructor(public dt: Table, @Optional() public editableColumn: EditableColumn, @Optional() public editableRow: EditableRow) { }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'input':\n this.inputTemplate = item.template;\n break;\n\n case 'output':\n this.outputTemplate = item.template;\n break;\n }\n });\n }\n\n get editing(): boolean {\n return (this.dt.editingCell && this.editableColumn && this.dt.editingCell === this.editableColumn.el.nativeElement) ||\n (this.editableRow && this.dt.editMode === 'row' && this.dt.isRowEditing(this.editableRow.data));\n }\n\n}\n\n@Component({\n selector: 'p-tableRadioButton',\n template: `\n <div class=\"p-radiobutton p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input type=\"radio\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-radiobutton-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n <div class=\"p-radiobutton-icon\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableRadioButton {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithRadio({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableCheckbox',\n template: `\n <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"disabled\"\n [attr.required]=\"required\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-checkbox-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableCheckbox {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() required: boolean;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithCheckbox({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableHeaderCheckbox',\n template: `\n <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"isDisabled()\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-checkbox-box':true,\n 'p-highlight':checked, 'p-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableHeaderCheckbox {\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n @Input() disabled: boolean;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n checked: boolean;\n\n selectionChangeSubscription: Subscription;\n\n valueChangeSubscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.valueChangeSubscription = this.dt.tableService.valueSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.selectionChangeSubscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n ngOnInit() {\n this.checked = this.updateCheckedState();\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n if (this.dt.value && this.dt.value.length > 0) {\n this.dt.toggleRowsWithCheckbox(event, !this.checked);\n }\n }\n\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n isDisabled() {\n return this.disabled || !this.dt.value || !this.dt.value.length;\n }\n\n ngOnDestroy() {\n if (this.selectionChangeSubscription) {\n this.selectionChangeSubscription.unsubscribe();\n }\n\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n\n updateCheckedState() {\n this.cd.markForCheck();\n\n if (this.dt.filteredValue) {\n const val = this.dt.filteredValue;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.isAllFilteredValuesChecked());\n }\n else {\n const val = this.dt.value;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.dt.selection.length === val.length);\n }\n }\n\n isAllFilteredValuesChecked() {\n if (!this.dt.filteredValue) {\n return false;\n }\n else {\n for (let rowData of this.dt.filteredValue) {\n if (!this.dt.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n\n}\n\n@Directive({\n selector: '[pReorderableRowHandle]'\n})\nexport class ReorderableRowHandle implements AfterViewInit {\n\n @Input(\"pReorderableRowHandle\") index: number;\n\n constructor(public el: ElementRef) {}\n\n ngAfterViewInit() {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-reorderablerow-handle');\n }\n}\n\n@Directive({\n selector: '[pReorderableRow]'\n})\nexport class ReorderableRow implements AfterViewInit {\n\n @Input(\"pReorderableRow\") index: number;\n\n @Input() pReorderableRowDisabled: boolean;\n\n mouseDownListener: any;\n\n dragStartListener: any;\n\n dragEndListener: any;\n\n dragOverListener: any;\n\n dragLeaveListener: any;\n\n dropListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.el.nativeElement.droppable = true;\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragEndListener = this.onDragEnd.bind(this);\n this.el.nativeElement.addEventListener('dragend', this.dragEndListener);\n\n this.dragOverListener = this.onDragOver.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragStartListener) {\n document.removeEventListener('dragstart', this.dragStartListener);\n this.dragStartListener = null;\n }\n\n if (this.dragEndListener) {\n document.removeEventListener('dragend', this.dragEndListener);\n this.dragEndListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle'))\n this.el.nativeElement.draggable = true;\n else\n this.el.nativeElement.draggable = false;\n }\n\n onDragStart(event) {\n this.dt.onRowDragStart(event, this.index);\n }\n\n onDragEnd(event) {\n this.dt.onRowDragEnd(event);\n this.el.nativeElement.draggable = false;\n }\n\n onDragOver(event) {\n this.dt.onRowDragOver(event, this.index, this.el.nativeElement);\n event.preventDefault();\n }\n\n onDragLeave(event) {\n this.dt.onRowDragLeave(event, this.el.nativeElement);\n }\n\n isEnabled() {\n return this.pReorderableRowDisabled !== true;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled() && this.dt.rowDragging) {\n this.dt.onRowDrop(event, this.el.nativeElement);\n }\n\n event.preventDefault()\n }\n}\n\n@Component({\n selector: 'p-columnFilterFormElement',\n template: `\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilterFormElement implements OnInit {\n \n @Input() field: string;\n\n @Input() type: string;\n\n @Input() filterConstraint: FilterMetadata;\n\n @Input() filterTemplate: TemplateRef<any>;\n\n @Input() placeholder: string;\n\n @Input() minFractionDigits: number\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n filterCallback: Function;\n\n constructor(public dt: Table) {}\n\n ngOnInit() {\n this.filterCallback = value => {\n this.filterConstraint.value = value;\n this.dt._filter();\n };\n }\n\n onModelChange(value: any) {\n this.filterConstraint.value = value;\n\n if (this.type === 'boolean' || value === '') {\n this.dt._filter();\n }\n }\n\n onTextInputEnterKeyDown(event: KeyboardEvent) {\n this.dt._filter();\n event.preventDefault();\n }\n\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.dt._filter();\n event.preventDefault();\n }\n }\n}\n\n@Component({\n selector: 'p-columnFilter',\n template: `\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event, matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\">No filter</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('.12s cubic-bezier(0, 0, 0.2, 1)')\n ]),\n transition(':leave', [\n animate('.1s linear', style({ opacity: 0 }))\n ])\n ])\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilter implements AfterContentInit {\n\n @Input() field: string;\n\n @Input() type: string = 'text';\n\n @Input() display: string = 'row';\n\n @Input() showMenu: boolean = true;\n\n @Input() matchMode: string;\n\n @Input() operator: string = FilterOperator.AND;\n\n @Input() showOperator: boolean = true;\n\n @Input() showClearButton: boolean = true;\n\n @Input() showApplyButton: boolean = true;\n\n @Input() showMatchModes: boolean = true;\n\n @Input() showAddButton: boolean = true;\n\n @Input() placeholder: string;\n\n @Input() matchModeOptions: SelectItem[];\n\n @Input() maxConstraints: number = 2;\n\n @Input() minFractionDigits: number;\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n @ViewChild('icon') icon: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n constructor(public el: ElementRef, public dt: Table, public renderer: Renderer2, public config: PrimeNGConfig) {}\n\n headerTemplate: TemplateRef<any>;\n\n filterTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n operatorOptions: any[];\n\n overlayVisible: boolean;\n\n overlay: HTMLElement;\n\n scrollHandler: any;\n\n documentClickListener: any;\n\n documentResizeListener: any;\n\n matchModes: SelectItem[];\n\n translationSubscription: Subscription;\n\n ngOnInit() {\n if (!this.dt.filters[this.field]) {\n this.initFieldFilterConstraint();\n }\n\n this.translationSubscription = this.config.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n });\n\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n }\n\n generateMatchModeOptions() {\n this.matchModes = this.matchModeOptions || \n this.config.filterMatchModeOptions[this.type]?.map(key => {\n return {label: this.config.getTranslation(key), value: key}\n });\n }\n\n generateOperatorOptions() {\n this.operatorOptions = [\n {label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND},\n {label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR}\n ];\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'filter':\n this.filterTemplate = item.template;\n break;\n \n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.filterTemplate = item.template;\n break;\n }\n });\n }\n\n initFieldFilterConstraint() {\n let defaultMatchMode = this.getDefaultMatchMode();\n this.dt.filters[this.field] = this.display == 'row' ? {value: null, matchMode: defaultMatchMode} : [{value: null, matchMode: defaultMatchMode, operator: this.operator}];\n }\n\n onMenuMatchModeChange(value: any, filterMeta: FilterMetadata) {\n filterMeta.matchMode = value;\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n onRowMatchModeChange(matchMode: string) {\n (<FilterMetadata> this.dt.filters[this.field]).matchMode = matchMode;\n this.dt._filter();\n this.hide();\n }\n \n onRowMatchModeKeyDown(event: KeyboardEvent, matchMode: string) {\n let item = <HTMLLIElement> event.target;\n\n switch(event.key) { \n case 'ArrowDown':\n var nextItem = this.findNextItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n var prevItem = this.findPrevItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'Enter':\n this.onRowMatchModeChange(matchMode);\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hide();\n }\n\n isRowMatchModeSelected(matchMode: string) {\n return (<FilterMetadata> this.dt.filters[this.field]).matchMode === matchMode;\n }\n\n addConstraint() {\n (<FilterMetadata[]> this.dt.filters[this.field]).push({value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator()});\n this.dt._filter();\n }\n\n removeConstraint(filterMeta: FilterMetadata) {\n this.dt.filters[this.field] = (<FilterMetadata[]> this.dt.filters[this.field]).filter(meta => meta !== filterMeta);\n this.dt._filter();\n }\n\n onOperatorChange(value) {\n (<FilterMetadata[]> this.dt.filters[this.field]).forEach(filterMeta => {\n filterMeta.operator = value;\n });\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n toggleMenu() {\n this.overlayVisible = !this.overlayVisible;\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch(event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible = false;\n break;\n \n case 'ArrowDown':\n if (this.overlayVisible) {\n let focusable = DomHandler.getFocusableElements(this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible = true;\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible = false;\n this.icon.nativeElement.focus();\n }\n\n findNextItem(item: HTMLLIElement) {\n let nextItem = <HTMLLIElement> item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;\n else\n return item.parentElement.firstElementChild;\n }\n\n findPrevItem(item: HTMLLIElement) {\n let prevItem = <HTMLLIElement> item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;\n else\n return item.parentElement.lastElementChild;\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n \n document.body.appendChild(this.overlay);\n this.overlay.style.zIndex = String(++DomHandler.zindex);\n DomHandler.absolutePosition(this.overlay, this.icon.nativeElement)\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n getDefaultMatchMode(): string {\n if (this.matchMode) {\n return this.matchMode;\n }\n else {\n if (this.type === 'text')\n return FilterMatchMode.STARTS_WITH;\n else if (this.type === 'numeric')\n return FilterMatchMode.EQUALS;\n else if (this.type === 'date')\n return FilterMatchMode.EQUALS;\n else\n return FilterMatchMode.CONTAINS;\n }\n }\n\n getDefaultOperator(): string {\n return this.dt.filters ? (<FilterMetadata[]> this.dt.filters[this.field])[0].operator: this.operator;\n }\n\n hasRowFilter() {\n return this.dt.filters[this.field] && !this.dt.isFilterBlank((<FilterMetadata>this.dt.filters[this.field]).value);\n }\n\n get fieldConstraints(): FilterMetadata[] {\n return this.dt.filters ? <FilterMetadata[]> this.dt.filters[this.field] : null;\n }\n\n get showRemoveIcon(): boolean {\n return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;\n }\n\n get showMenuButton(): boolean {\n return this.showMenu && (this.display === 'row' ? this.type !== 'boolean': true);\n }\n\n get isShowOperator(): boolean {\n return this.showOperator && this.type !== 'boolean';\n }\n\n get isShowAddConstraint(): boolean {\n return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);\n }\n\n get applyButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.APPLY);\n }\n\n get clearButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.CLEAR);\n }\n\n get addRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.ADD_RULE);\n }\n\n get removeRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.REMOVE_RULE);\n }\n\n hasFilter(): boolean {\n let fieldFilter = this.dt.filters[this.field];\n if (fieldFilter) {\n if (Array.isArray(fieldFilter))\n return !this.dt.isFilterBlank((<FilterMetadata[]> fieldFilter)[0].value); \n else\n return !this.dt.isFilterBlank(fieldFilter.value);\n }\n\n return false;\n }\n\n isOutsideClicked(event): boolean {\n return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target) \n || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)\n || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')\n || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', event => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = () => this.hide();\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n hide() {\n this.overlayVisible = false;\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n clearFilter() {\n this.initFieldFilterConstraint();\n this.dt._filter();\n }\n\n applyFilter() {\n this.dt._filter();\n this.hide();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.el.nativeElement.appendChild(this.overlay);\n this.onOverlayHide();\n }\n\n if (this.translationSubscription) {\n this.translationSubscription.unsubscribe();\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule,InputTextModule,DropdownModule,ScrollingModule,FormsModule,ButtonModule,SelectButtonModule,CalendarModule,InputNumberModule,TriStateCheckboxModule],\n exports: [Table,SharedModule,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ScrollingModule,ColumnFilter],\n declarations: [Table,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,ScrollableView,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ColumnFilter,ColumnFilterFormElement]\n})\nexport class TableModule { }"]}
|
1
|
+
{"version":3,"sources":["../../node_modules/tslib/tslib.es6.js","../../src/app/components/table/table.ts"],"names":["Object","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","__spread","arguments","concat","TableService","this","sortSource","Subject","selectionSource","contextMenuSource","valueSource","totalRecordsSource","columnsSource","sortSource$","asObservable","selectionSource$","contextMenuSource$","valueSource$","totalRecordsSource$","columnsSource$","prototype","onSort","sortMeta","onSelectionChange","onContextMenu","data","onValueChange","onTotalRecordsChange","onColumnsChange","columns","Injectable","Table","el","zone","tableService","cd","filterService","pageLinks","alwaysShowPaginator","paginatorPosition","paginatorDropdownScrollHeight","currentPageReportTemplate","showFirstLastIcon","showPageLinks","defaultSortOrder","sortMode","resetPageOnSort","selectionChange","EventEmitter","contextMenuSelectionChange","contextMenuSelectionMode","rowTrackBy","index","item","lazy","lazyLoadOnInit","compareSelectionBy","csvSeparator","exportFilename","filters","filterDelay","expandedRowKeys","editingRowKeys","rowExpandMode","virtualScrollDelay","virtualRowHeight","columnResizeMode","loadingIcon","showLoader","stateStorage","editMode","onRowSelect","onRowUnselect","onPage","onFilter","onLazyLoad","onRowExpand","onRowCollapse","onContextMenuSelect","onColResize","onColReorder","onRowReorder","onEditInit","onEditComplete","onEditCancel","onHeaderCheckboxToggle","sortFunction","firstChange","rowsChange","onStateSave","onStateRestore","_value","_totalRecords","_first","selectionKeys","_sortOrder","ngOnInit","virtualScroll","emit","createLazyLoadMetadata","restoringFilter","initialized","ngAfterContentInit","_this","templates","forEach","getType","captionTemplate","template","headerTemplate","bodyTemplate","loadingBodyTemplate","footerTemplate","summaryTemplate","colGroupTemplate","expandedRowTemplate","frozenRowsTemplate","frozenHeaderTemplate","frozenBodyTemplate","frozenFooterTemplate","frozenColGroupTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","paginatorDropdownItemTemplate","ngAfterViewInit","isStateful","resizableColumns","restoreColumnWidths","ngOnChanges","simpleChange","stateRestored","restoreState","currentValue","totalRecords","sortField","sortSingle","multiSortMeta","sortMultiple","hasFilter","_filter","_columns","reorderableColumns","columnOrderStateRestored","restoreColumnOrder","_sortField","sortOrder","_multiSortMeta","selection","_selection","preventSelectionSetterPropagation","updateSelectionKeys","defineProperty","val","cols","_rows","dataKey","Array","isArray","_c","_d","String","ObjectUtils","resolveFieldData","onPageChange","event","first","rows","saveState","anchorRowIndex","scrollable","resetScrollTop","sort","originalEvent","field","metaKey","ctrlKey","getSortMeta","order","restoringSort","customSort","mode","data1","data2","value1","value2","result","localeCompare","multisortField","multisortmeta","isSorted","sorted","handleRowClick","target","targetNode","nodeName","parentNode","parentElement","DomHandler","hasClass","selectionMode","isMultipleSelectionMode","shiftKey","clearSelection","rangeRowIndex","clearSelectionRange","rowIndex","selectRange","rowData","selected","isSelected","metaSelection","rowTouched","metaKeySelection","dataKeyValue","isSingleSelectionMode","selectionIndex_1","findIndexInSelection","filter","type","selectionIndex_2","handleRowTouchEnd","handleRowRightClick","contextMenu","contextMenuSelection","show","rangeStart","rangeEnd","paginator","rangeRowsData","rangeRowData","filteredValue","this_1","selectionIndex","undefined","equals","toggleRowWithRadio","toggleRowWithCheckbox","selectionIndex_3","toggleRowsWithCheckbox","check","slice","checked","matchMode","filterTimeout","clearTimeout","isFilterBlank","setTimeout","filterGlobal","trim","globalFilterFieldsArray","globalFilterFields","Error","localMatch","globalMatch","localFiltered","prop","hasOwnProperty","filterField","filterMeta","filterMeta_1","e_2","filterMeta_1_1","meta","executeLocalFilter","operator","FilterOperator","OR","AND","j","globalFilterField","filterLocale","markForCheck","filterValue","filterMatchMode","FilterMatchMode","STARTS_WITH","dataFieldValue","filterConstraint","empty","globalFilter","clear","reset","exportCSV","options","csv","frozenColumns","selectionOnly","frozenValue","column","exportable","header","record","i_1","cellData","exportFunction","replace","blob","Blob","window","navigator","msSaveOrOpenBlob","link","document","createElement","style","display","body","appendChild","download","setAttribute","URL","createObjectURL","click","open","encodeURI","removeChild","scrollToVirtualIndex","scrollTo","top","scrollableViewChild","scrollableFrozenViewChild","updateEditingCell","cell","editingCell","editingCellData","editingCellField","editingCellRowIndex","bindDocumentEditListener","isEditingCellValid","find","documentEditListener","editingCellClick","removeClass","unbindDocumentEditListener","addEventListener","removeEventListener","initRowEdit","saveRowEdit","rowElement","cancelRowEdit","toggleRow","preventDefault","isRowExpanded","isRowEditing","onColumnResizeBegin","containerLeft","getOffset","containerViewChild","nativeElement","left","lastResizerHelperX","pageX","scrollLeft","onColumnResize","addClass","resizeHelperViewChild","height","offsetHeight","onColumnResizeEnd","delta","offsetLeft","columnWidth","offsetWidth","minWidth","parseInt","newColumnWidth","nextColumn","nextElementSibling","offsetParent","nextColumnWidth","nextColumnMinWidth","scrollableView","findParentScrollableView","scrollableBodyTable","findSingle","scrollableHeaderTable","scrollableFooterTable","resizeColumnIndex","resizeColGroup","width","setScrollableItemsWidthOnExpandResize","tableViewChild","containerWidth","element","scrollableBody","scrollableHeader","scrollableFooter","scrollableBodyTableWidth","scrollableHeaderTableWidth","isContainerInViewport","setWidth","container","table","calculateScrollbarWidth","parent","colGroup","children","col","nextCol","onColumnDragStart","columnElement","reorderIconWidth","getHiddenElementOuterWidth","reorderIndicatorUpViewChild","reorderIconHeight","getHiddenElementOuterHeight","reorderIndicatorDownViewChild","draggedColumn","dataTransfer","setData","onColumnDragEnter","dropHeader","containerOffset","dropHeaderOffset","dragIndex","indexWithinGroup","dropIndex","targetLeft","columnCenter","Math","ceil","dropPosition","dropEffect","onColumnDragLeave","onColumnDrop","dropColumn","allowDrop","reorderArray","runOutsideAngular","draggable","onRowDragStart","rowDragging","draggedRowIndex","onRowDragOver","rowY","getWindowScrollTop","pageY","rowMidY","getOuterHeight","prevRowElement","previousElementSibling","droppedRowIndex","onRowDragLeave","onRowDragEnd","onRowDrop","isEmpty","getBlockableElement","getStorage","localStorage","sessionStorage","stateKey","storage","state","saveColumnWidths","saveColumnOrder","keys","setItem","JSON","stringify","clearState","removeItem","stateString","getItem","state_1","parse","columnWidthsState","columnWidths","tableWidthState","tableWidth","Promise","resolve","then","widths","map","getOuterWidth","join","widths_1","split","headerCols","bodyCols","columnOrder_1","key","columnOrder","reorderedColumns_1","findColumnByKey","ngOnDestroy","Component","args","selector","providers","changeDetection","ChangeDetectionStrategy","Default","encapsulation","ViewEncapsulation","None","ElementRef","NgZone","ChangeDetectorRef","FilterService","Input","Output","ViewChild","ContentChildren","PrimeTemplate","TableBody","dt","subscription","subscribe","detectChanges","unsubscribe","ScrollableView","_scrollHeight","includes","console","log","virtualScrollBody","frozen","scrollableAlignerViewChild","calculateScrollbarHeight","frozenView","frozenSiblingBody","scrollBarWidth","scrollHeaderBoxViewChild","paddingRight","scrollFooterBoxViewChild","bindEvents","scrollHeaderViewChild","headerScrollListener","onHeaderScroll","bind","scrollFooterViewChild","footerScrollListener","onFooterScroll","bodyScrollListener","onBodyScroll","getElementRef","scrollBodyViewChild","unbindEvents","preventBodyScrollPropagation","marginLeft","scrollTop","onScrollIndexChange","virtualScrollTimeout","page","floor","virtualScrollOffset","virtualScrollChunkSize","virtualPage","getPageCount","dataToRender","dataLength","scrollToIndex","CdkVirtualScrollViewport","SortableColumn","isEnabled","updateSortState","onClick","isFilterElement","onEnterKey","pSortableColumnDisabled","Directive","host","[class.p-sortable-column]","[class.p-highlight]","[attr.tabindex]","[attr.role]","[attr.aria-sort]","HostListener","SortIcon","OnPush","SelectableRow","onTouchEnd","onArrowDownKeyDown","row","currentTarget","nextRow","findNextSelectableRow","focus","onArrowUpKeyDown","prevRow","findPrevSelectableRow","onEnterKeyDown","pSelectableRowDisabled","[class.p-selectable-row]","SelectableRowDblClick","ContextMenuRow","pContextMenuRowDisabled","[class.p-highlight-contextmenu]","RowToggler","pRowTogglerDisabled","ResizableColumn","resizer","className","resizerMouseDownListener","onMouseDown","bindDocumentEvents","documentMouseMoveListener","onDocumentMouseMove","documentMouseUpListener","onDocumentMouseUp","unbindDocumentEvents","which","pResizableColumnDisabled","ReorderableColumn","mouseDownListener","dragStartListener","onDragStart","dragOverListener","onDragEnter","dragEnterListener","dragLeaveListener","onDragLeave","onDragOver","onDrop","pReorderableColumnDisabled","EditableColumn","closeEditingCell","openCell","focusCellSelector","pFocusCellSelector","focusableElement","completed","onEscapeKeyDown","onShiftKeyDown","moveToPreviousCell","moveToNextCell","findCell","currentCell","targetCell","findPreviousEditableColumn","invokeElementMethod","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","firstElementChild","pEditableColumnDisabled","EditableRow","pEditableRowDisabled","InitEditableRow","editableRow","SaveEditableRow","CancelEditableRow","CellEditor","editableColumn","inputTemplate","outputTemplate","decorators","Optional","TableRadioButton","disabled","onFocus","boxViewChild","onBlur","TableCheckbox","TableHeaderCheckbox","valueChangeSubscription","updateCheckedState","selectionChangeSubscription","isDisabled","isAllFilteredValuesChecked","ReorderableRowHandle","ReorderableRow","droppable","dragEndListener","onDragEnd","pReorderableRowDisabled","ColumnFilterFormElement","useGrouping","filterCallback","onModelChange","onTextInputEnterKeyDown","onNumericInputKeyDown","ColumnFilter","renderer","config","showMenu","showOperator","showClearButton","showApplyButton","showMatchModes","showAddButton","maxConstraints","initFieldFilterConstraint","translationSubscription","translationObserver","generateMatchModeOptions","generateOperatorOptions","matchModes","matchModeOptions","_a","filterMatchModeOptions","label","getTranslation","operatorOptions","TranslationKeys","MATCH_ALL","MATCH_ANY","filterTemplate","defaultMatchMode","getDefaultMatchMode","onMenuMatchModeChange","onRowMatchModeChange","hide","onRowMatchModeKeyDown","nextItem","findNextItem","removeAttribute","tabIndex","prevItem","findPrevItem","onRowClearItemClick","clearFilter","isRowMatchModeSelected","addConstraint","getDefaultOperator","removeConstraint","onOperatorChange","toggleMenu","overlayVisible","onToggleButtonKeyDown","focusable","getFocusableElements","overlay","altKey","onEscape","icon","onOverlayAnimationStart","toState","zIndex","zindex","absolutePosition","bindDocumentClickListener","bindDocumentResizeListener","bindScrollListener","onOverlayHide","EQUALS","CONTAINS","hasRowFilter","fieldConstraints","APPLY","CLEAR","ADD_RULE","REMOVE_RULE","NO_FILTER","fieldFilter","isOutsideClicked","isSameNode","contains","documentClickListener","documentTarget","ownerDocument","listen","unbindDocumentClickListener","documentResizeListener","unbindDocumentResizeListener","scrollHandler","ConnectedOverlayScrollHandler","unbindScrollListener","applyFilter","animations","trigger","transition","opacity","transform","animate","Renderer2","PrimeNGConfig","NgModule","imports","CommonModule","PaginatorModule","InputTextModule","DropdownModule","ScrollingModule","FormsModule","ButtonModule","SelectButtonModule","CalendarModule","InputNumberModule","TriStateCheckboxModule","exports","SharedModule","declarations"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { NgModule, Component, HostListener, OnInit, OnDestroy, AfterViewInit, Directive, Optional, AfterContentInit,\n Input, Output, EventEmitter, ElementRef, ContentChildren, TemplateRef, QueryList, ViewChild, NgZone, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy, Query, ViewEncapsulation, Renderer2} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PrimeTemplate, SharedModule, FilterMatchMode, FilterOperator, SelectItem, PrimeNGConfig, TranslationKeys, FilterService } from 'primeng/api';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { SelectButtonModule } from 'primeng/selectbutton';\nimport { TriStateCheckboxModule } from 'primeng/tristatecheckbox';\nimport { CalendarModule } from 'primeng/calendar';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { DomHandler, ConnectedOverlayScrollHandler } from 'primeng/dom';\nimport { ObjectUtils } from 'primeng/utils';\nimport { SortMeta } from 'primeng/api';\nimport { TableState } from 'primeng/api';\nimport { FilterMetadata } from 'primeng/api';\nimport { Injectable } from '@angular/core';\nimport { BlockableUI } from 'primeng/api';\nimport { Subject, Subscription } from 'rxjs';\nimport { ScrollingModule, CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\n\n@Injectable()\nexport class TableService {\n\n private sortSource = new Subject<SortMeta|SortMeta[]>();\n private selectionSource = new Subject();\n private contextMenuSource = new Subject<any>();\n private valueSource = new Subject<any>();\n private totalRecordsSource = new Subject<any>();\n private columnsSource = new Subject();\n\n sortSource$ = this.sortSource.asObservable();\n selectionSource$ = this.selectionSource.asObservable();\n contextMenuSource$ = this.contextMenuSource.asObservable();\n valueSource$ = this.valueSource.asObservable();\n totalRecordsSource$ = this.totalRecordsSource.asObservable();\n columnsSource$ = this.columnsSource.asObservable();\n\n onSort(sortMeta: SortMeta|SortMeta[]) {\n this.sortSource.next(sortMeta);\n }\n\n onSelectionChange() {\n this.selectionSource.next();\n }\n\n onContextMenu(data: any) {\n this.contextMenuSource.next(data);\n }\n\n onValueChange(value: any) {\n this.valueSource.next(value);\n }\n\n onTotalRecordsChange(value: number) {\n this.totalRecordsSource.next(value);\n }\n\n onColumnsChange(columns: any[]) {\n this.columnsSource.next(columns);\n }\n}\n\n@Component({\n selector: 'p-table',\n template: `\n <div #container [ngStyle]=\"style\" [class]=\"styleClass\" data-scrollselectors=\".p-datatable-scrollable-body, .p-datatable-unfrozen-view .p-datatable-scrollable-body\"\n [ngClass]=\"{'p-datatable p-component': true,\n 'p-datatable-hoverable-rows': (rowHover||selectionMode),\n 'p-datatable-auto-layout': autoLayout,\n 'p-datatable-resizable': resizableColumns,\n 'p-datatable-resizable-fit': (resizableColumns && columnResizeMode === 'fit'),\n 'p-datatable-scrollable': scrollable,\n 'p-datatable-flex-scrollable': (scrollable && scrollHeight === 'flex'),\n 'p-datatable-responsive': responsive}\">\n <div class=\"p-datatable-loading-overlay p-component-overlay\" *ngIf=\"loading && showLoader\">\n <i [class]=\"'p-datatable-loading-icon pi-spin ' + loadingIcon\"></i>\n </div>\n <div *ngIf=\"captionTemplate\" class=\"p-datatable-header\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </div>\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-top\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div class=\"p-datatable-wrapper\" *ngIf=\"!scrollable\">\n <table role=\"grid\" #table [ngClass]=\"tableStyleClass\" [ngStyle]=\"tableStyle\">\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"bodyTemplate\"></tbody>\n <tfoot *ngIf=\"footerTemplate\" class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n\n <div class=\"p-datatable-scrollable-wrapper\" *ngIf=\"scrollable\">\n <div class=\"p-datatable-scrollable-view p-datatable-frozen-view\" *ngIf=\"frozenColumns||frozenBodyTemplate\" #scrollableFrozenView [pScrollableView]=\"frozenColumns\" [frozen]=\"true\" [ngStyle]=\"{width: frozenWidth}\" [scrollHeight]=\"scrollHeight\"></div>\n <div class=\"p-datatable-scrollable-view\" #scrollableView [pScrollableView]=\"columns\" [frozen]=\"false\" [scrollHeight]=\"scrollHeight\" [ngStyle]=\"{left: frozenWidth, width: 'calc(100% - '+frozenWidth+')'}\"></div>\n </div>\n\n <p-paginator [rows]=\"rows\" [first]=\"first\" [totalRecords]=\"totalRecords\" [pageLinkSize]=\"pageLinks\" styleClass=\"p-paginator-bottom\" [alwaysShow]=\"alwaysShowPaginator\"\n (onPageChange)=\"onPageChange($event)\" [rowsPerPageOptions]=\"rowsPerPageOptions\" *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\"\n [templateLeft]=\"paginatorLeftTemplate\" [templateRight]=\"paginatorRightTemplate\" [dropdownAppendTo]=\"paginatorDropdownAppendTo\" [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\n [currentPageReportTemplate]=\"currentPageReportTemplate\" [showFirstLastIcon]=\"showFirstLastIcon\" [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\" [showCurrentPageReport]=\"showCurrentPageReport\" [showJumpToPageDropdown]=\"showJumpToPageDropdown\" [showPageLinks]=\"showPageLinks\"></p-paginator>\n\n <div *ngIf=\"summaryTemplate\" class=\"p-datatable-footer\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\n </div>\n\n <div #resizeHelper class=\"p-column-resizer-helper\" style=\"display:none\" *ngIf=\"resizableColumns\"></div>\n <span #reorderIndicatorUp class=\"pi pi-arrow-down p-datatable-reorder-indicator-up\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n <span #reorderIndicatorDown class=\"pi pi-arrow-up p-datatable-reorder-indicator-down\" style=\"display:none\" *ngIf=\"reorderableColumns\"></span>\n </div>\n `,\n providers: [TableService],\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./table.css']\n})\nexport class Table implements OnInit, AfterViewInit, AfterContentInit, BlockableUI, OnChanges {\n\n @Input() frozenColumns: any[];\n\n @Input() frozenValue: any[];\n\n @Input() style: any;\n\n @Input() styleClass: string;\n\n @Input() tableStyle: any;\n\n @Input() tableStyleClass: string;\n\n @Input() paginator: boolean;\n\n @Input() pageLinks: number = 5;\n\n @Input() rowsPerPageOptions: any[];\n\n @Input() alwaysShowPaginator: boolean = true;\n\n @Input() paginatorPosition: string = 'bottom';\n\n @Input() paginatorDropdownAppendTo: any;\n\n @Input() paginatorDropdownScrollHeight: string = '200px';\n\n @Input() currentPageReportTemplate: string = '{currentPage} of {totalPages}';\n\n @Input() showCurrentPageReport: boolean;\n\n @Input() showJumpToPageDropdown: boolean;\n\n @Input() showFirstLastIcon: boolean = true;\n\n @Input() showPageLinks: boolean = true;\n\n @Input() defaultSortOrder: number = 1;\n\n @Input() sortMode: string = 'single';\n\n @Input() resetPageOnSort: boolean = true;\n\n @Input() selectionMode: string;\n\n @Output() selectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelection: any;\n\n @Output() contextMenuSelectionChange: EventEmitter<any> = new EventEmitter();\n\n @Input() contextMenuSelectionMode: string = \"separate\";\n\n @Input() dataKey: string;\n\n @Input() metaKeySelection: boolean;\n\n @Input() rowTrackBy: Function = (index: number, item: any) => item;\n\n @Input() lazy: boolean = false;\n\n @Input() lazyLoadOnInit: boolean = true;\n\n @Input() compareSelectionBy: string = 'deepEquals';\n\n @Input() csvSeparator: string = ',';\n\n @Input() exportFilename: string = 'download';\n\n @Input() filters: { [s: string]: FilterMetadata | FilterMetadata[] } = {};\n\n @Input() globalFilterFields: string[];\n\n @Input() filterDelay: number = 300;\n\n @Input() filterLocale: string;\n\n @Input() expandedRowKeys: { [s: string]: boolean; } = {};\n\n @Input() editingRowKeys: { [s: string]: boolean; } = {};\n\n @Input() rowExpandMode: string = 'multiple';\n\n @Input() scrollable: boolean;\n\n @Input() scrollHeight: string;\n\n @Input() virtualScroll: boolean;\n\n @Input() virtualScrollDelay: number = 250;\n\n @Input() virtualRowHeight: number = 28;\n\n @Input() frozenWidth: string;\n\n @Input() responsive: boolean;\n\n @Input() contextMenu: any;\n\n @Input() resizableColumns: boolean;\n\n @Input() columnResizeMode: string = 'fit';\n\n @Input() reorderableColumns: boolean;\n\n @Input() loading: boolean;\n\n @Input() loadingIcon: string = 'pi pi-spinner';\n\n @Input() showLoader: boolean = true;\n\n @Input() rowHover: boolean;\n\n @Input() customSort: boolean;\n\n @Input() autoLayout: boolean;\n\n @Input() exportFunction;\n\n @Input() stateKey: string;\n\n @Input() stateStorage: string = 'session';\n\n @Input() editMode: string = 'cell';\n\n @Input() minBufferPx: number;\n\n @Input() maxBufferPx: number;\n\n @Output() onRowSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowUnselect: EventEmitter<any> = new EventEmitter();\n\n @Output() onPage: EventEmitter<any> = new EventEmitter();\n\n @Output() onSort: EventEmitter<any> = new EventEmitter();\n\n @Output() onFilter: EventEmitter<any> = new EventEmitter();\n\n @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowExpand: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowCollapse: EventEmitter<any> = new EventEmitter();\n\n @Output() onContextMenuSelect: EventEmitter<any> = new EventEmitter();\n\n @Output() onColResize: EventEmitter<any> = new EventEmitter();\n\n @Output() onColReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onRowReorder: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditInit: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditComplete: EventEmitter<any> = new EventEmitter();\n\n @Output() onEditCancel: EventEmitter<any> = new EventEmitter();\n\n @Output() onHeaderCheckboxToggle: EventEmitter<any> = new EventEmitter();\n\n @Output() sortFunction: EventEmitter<any> = new EventEmitter();\n\n @Output() firstChange: EventEmitter<number> = new EventEmitter();\n\n @Output() rowsChange: EventEmitter<number> = new EventEmitter();\n\n @Output() onStateSave: EventEmitter<any> = new EventEmitter();\n\n @Output() onStateRestore: EventEmitter<any> = new EventEmitter();\n\n @ViewChild('container') containerViewChild: ElementRef;\n\n @ViewChild('resizeHelper') resizeHelperViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorUp') reorderIndicatorUpViewChild: ElementRef;\n\n @ViewChild('reorderIndicatorDown') reorderIndicatorDownViewChild: ElementRef;\n\n @ViewChild('table') tableViewChild: ElementRef;\n\n @ViewChild('scrollableView') scrollableViewChild;\n\n @ViewChild('scrollableFrozenView') scrollableFrozenViewChild;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n _value: any[] = [];\n\n _columns: any[];\n\n _totalRecords: number = 0;\n\n _first: number = 0;\n\n _rows: number;\n\n filteredValue: any[];\n\n headerTemplate: TemplateRef<any>;\n\n bodyTemplate: TemplateRef<any>;\n\n loadingBodyTemplate: TemplateRef<any>;\n\n captionTemplate: TemplateRef<any>;\n\n frozenRowsTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n summaryTemplate: TemplateRef<any>;\n\n colGroupTemplate: TemplateRef<any>;\n\n expandedRowTemplate: TemplateRef<any>;\n\n frozenHeaderTemplate: TemplateRef<any>;\n\n frozenBodyTemplate: TemplateRef<any>;\n\n frozenFooterTemplate: TemplateRef<any>;\n\n frozenColGroupTemplate: TemplateRef<any>;\n\n emptyMessageTemplate: TemplateRef<any>;\n\n paginatorLeftTemplate: TemplateRef<any>;\n\n paginatorRightTemplate: TemplateRef<any>;\n\n paginatorDropdownItemTemplate: TemplateRef<any>;\n\n selectionKeys: any = {};\n\n lastResizerHelperX: number;\n\n reorderIconWidth: number;\n\n reorderIconHeight: number;\n\n draggedColumn: any;\n\n draggedRowIndex: number;\n\n droppedRowIndex: number;\n\n rowDragging: boolean;\n\n dropPosition: number;\n\n editingCell: Element;\n\n editingCellData: any;\n\n editingCellField: any;\n\n editingCellRowIndex: number;\n\n editingCellClick: boolean;\n\n documentEditListener: any;\n\n _multiSortMeta: SortMeta[];\n\n _sortField: string;\n\n _sortOrder: number = 1;\n\n preventSelectionSetterPropagation: boolean;\n\n _selection: any;\n\n anchorRowIndex: number;\n\n rangeRowIndex: number;\n\n filterTimeout: any;\n\n initialized: boolean;\n\n rowTouched: boolean;\n\n restoringSort: boolean;\n\n restoringFilter: boolean;\n\n stateRestored: boolean;\n\n columnOrderStateRestored: boolean;\n\n columnWidthsState: string;\n\n tableWidthState: string;\n\n constructor(public el: ElementRef, public zone: NgZone, public tableService: TableService, public cd: ChangeDetectorRef, public filterService: FilterService) {}\n\n ngOnInit() {\n if (this.lazy && this.lazyLoadOnInit) {\n if (!this.virtualScroll) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n }\n\n this.initialized = true;\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'caption':\n this.captionTemplate = item.template;\n break;\n\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'body':\n this.bodyTemplate = item.template;\n break;\n\n case 'loadingbody':\n this.loadingBodyTemplate = item.template;\n break;\n\n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n case 'summary':\n this.summaryTemplate = item.template;\n break;\n\n case 'colgroup':\n this.colGroupTemplate = item.template;\n break;\n\n case 'rowexpansion':\n this.expandedRowTemplate = item.template;\n break;\n\n case 'frozenrows':\n this.frozenRowsTemplate = item.template;\n break;\n\n case 'frozenheader':\n this.frozenHeaderTemplate = item.template;\n break;\n\n case 'frozenbody':\n this.frozenBodyTemplate = item.template;\n break;\n\n case 'frozenfooter':\n this.frozenFooterTemplate = item.template;\n break;\n\n case 'frozencolgroup':\n this.frozenColGroupTemplate = item.template;\n break;\n\n case 'emptymessage':\n this.emptyMessageTemplate = item.template;\n break;\n\n case 'paginatorleft':\n this.paginatorLeftTemplate = item.template;\n break;\n\n case 'paginatorright':\n this.paginatorRightTemplate = item.template;\n break;\n\n case 'paginatordropdownitem':\n this.paginatorDropdownItemTemplate = item.template;\n break;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.isStateful() && this.resizableColumns) {\n this.restoreColumnWidths();\n }\n }\n\n ngOnChanges(simpleChange: SimpleChanges) {\n if (simpleChange.value) {\n if (this.isStateful() && !this.stateRestored) {\n this.restoreState();\n }\n\n this._value = simpleChange.value.currentValue;\n\n if (!this.lazy) {\n this.totalRecords = (this._value ? this._value.length : 0);\n\n if (this.sortMode == 'single' && this.sortField)\n this.sortSingle();\n else if (this.sortMode == 'multiple' && this.multiSortMeta)\n this.sortMultiple();\n else if (this.hasFilter()) //sort already filters\n this._filter();\n }\n\n this.tableService.onValueChange(simpleChange.value.currentValue);\n }\n\n if (simpleChange.columns) {\n this._columns = simpleChange.columns.currentValue;\n this.tableService.onColumnsChange(simpleChange.columns.currentValue);\n\n if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored ) {\n this.restoreColumnOrder();\n }\n }\n\n if (simpleChange.sortField) {\n this._sortField = simpleChange.sortField.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.sortOrder) {\n this._sortOrder = simpleChange.sortOrder.currentValue;\n\n //avoid triggering lazy load prior to lazy initialization at onInit\n if ( !this.lazy || this.initialized ) {\n if (this.sortMode === 'single') {\n this.sortSingle();\n }\n }\n }\n\n if (simpleChange.multiSortMeta) {\n this._multiSortMeta = simpleChange.multiSortMeta.currentValue;\n if (this.sortMode === 'multiple') {\n this.sortMultiple();\n }\n }\n\n if (simpleChange.selection) {\n this._selection = simpleChange.selection.currentValue;\n\n if (!this.preventSelectionSetterPropagation) {\n this.updateSelectionKeys();\n this.tableService.onSelectionChange();\n }\n this.preventSelectionSetterPropagation = false;\n }\n }\n\n @Input() get value(): any[] {\n return this._value;\n }\n set value(val: any[]) {\n this._value = val;\n }\n\n @Input() get columns(): any[] {\n return this._columns;\n }\n set columns(cols: any[]) {\n this._columns = cols;\n }\n\n @Input() get first(): number {\n return this._first;\n }\n set first(val: number) {\n this._first = val;\n }\n\n @Input() get rows(): number {\n return this._rows;\n }\n set rows(val: number) {\n this._rows = val;\n }\n\n @Input() get totalRecords(): number {\n return this._totalRecords;\n }\n set totalRecords(val: number) {\n this._totalRecords = val;\n this.tableService.onTotalRecordsChange(this._totalRecords);\n }\n\n @Input() get sortField(): string {\n return this._sortField;\n }\n\n set sortField(val: string) {\n this._sortField = val;\n }\n\n @Input() get sortOrder(): number {\n return this._sortOrder;\n }\n set sortOrder(val: number) {\n this._sortOrder = val;\n }\n\n @Input() get multiSortMeta(): SortMeta[] {\n return this._multiSortMeta;\n }\n\n set multiSortMeta(val: SortMeta[]) {\n this._multiSortMeta = val;\n }\n\n @Input() get selection(): any {\n return this._selection;\n }\n\n set selection(val: any) {\n this._selection = val;\n }\n\n updateSelectionKeys() {\n if (this.dataKey && this._selection) {\n this.selectionKeys = {};\n if (Array.isArray(this._selection)) {\n for(let data of this._selection) {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;\n }\n }\n else {\n this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n }\n }\n }\n\n onPageChange(event) {\n this.first = event.first;\n this.rows = event.rows;\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n\n this.onPage.emit({\n first: this.first,\n rows: this.rows\n });\n\n this.firstChange.emit(this.first);\n this.rowsChange.emit(this.rows);\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n sort(event) {\n let originalEvent = event.originalEvent;\n\n if (this.sortMode === 'single') {\n this._sortOrder = (this.sortField === event.field) ? this.sortOrder * -1 : this.defaultSortOrder;\n this._sortField = event.field;\n this.sortSingle();\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n }\n if (this.sortMode === 'multiple') {\n let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;\n let sortMeta = this.getSortMeta(event.field);\n\n if (sortMeta) {\n if (!metaKey) {\n this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n }\n else {\n sortMeta.order = sortMeta.order * -1;\n }\n }\n else {\n if (!metaKey || !this.multiSortMeta) {\n this._multiSortMeta = [];\n\n if (this.resetPageOnSort) {\n this._first = 0;\n this.firstChange.emit(this._first);\n }\n }\n this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });\n }\n\n this.sortMultiple();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.anchorRowIndex = null;\n }\n\n sortSingle() {\n if (this.sortField && this.sortOrder) {\n if (this.restoringSort) {\n this.restoringSort = false;\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n field: this.sortField,\n order: this.sortOrder\n });\n }\n else {\n this.value.sort((data1, data2) => {\n let value1 = ObjectUtils.resolveFieldData(data1, this.sortField);\n let value2 = ObjectUtils.resolveFieldData(data2, this.sortField);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 === 'string' && typeof value2 === 'string')\n result = value1.localeCompare(value2);\n else\n result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n\n return (this.sortOrder * result);\n });\n\n this._value = [...this.value];\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n let sortMeta: SortMeta = {\n field: this.sortField,\n order: this.sortOrder\n };\n\n this.onSort.emit(sortMeta);\n this.tableService.onSort(sortMeta);\n }\n }\n\n sortMultiple() {\n if (this.multiSortMeta) {\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else if (this.value) {\n if (this.customSort) {\n this.sortFunction.emit({\n data: this.value,\n mode: this.sortMode,\n multiSortMeta: this.multiSortMeta\n });\n }\n else {\n this.value.sort((data1, data2) => {\n return this.multisortField(data1, data2, this.multiSortMeta, 0);\n });\n\n this._value = [...this.value];\n }\n\n if (this.hasFilter()) {\n this._filter();\n }\n }\n\n this.onSort.emit({\n multisortmeta: this.multiSortMeta\n });\n this.tableService.onSort(this.multiSortMeta);\n }\n }\n\n multisortField(data1, data2, multiSortMeta, index) {\n let value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);\n let value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);\n let result = null;\n\n if (value1 == null && value2 != null)\n result = -1;\n else if (value1 != null && value2 == null)\n result = 1;\n else if (value1 == null && value2 == null)\n result = 0;\n else if (typeof value1 == 'string' || value1 instanceof String) {\n if (value1.localeCompare && (value1 != value2)) {\n return (multiSortMeta[index].order * value1.localeCompare(value2));\n }\n }\n else {\n result = (value1 < value2) ? -1 : 1;\n }\n\n if (value1 == value2) {\n return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n }\n\n return (multiSortMeta[index].order * result);\n }\n\n getSortMeta(field: string) {\n if (this.multiSortMeta && this.multiSortMeta.length) {\n for (let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field === field) {\n return this.multiSortMeta[i];\n }\n }\n }\n\n return null;\n }\n\n isSorted(field: string) {\n if (this.sortMode === 'single') {\n return (this.sortField && this.sortField === field);\n }\n else if (this.sortMode === 'multiple') {\n let sorted = false;\n if (this.multiSortMeta) {\n for(let i = 0; i < this.multiSortMeta.length; i++) {\n if (this.multiSortMeta[i].field == field) {\n sorted = true;\n break;\n }\n }\n }\n return sorted;\n }\n }\n\n handleRowClick(event) {\n let target = (<HTMLElement> event.originalEvent.target);\n let targetNode = target.nodeName;\n let parentNode = target.parentElement && target.parentElement.nodeName;\n if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' ||\n parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' ||\n (DomHandler.hasClass(event.originalEvent.target, 'p-clickable'))) {\n return;\n }\n\n if (this.selectionMode) {\n this.preventSelectionSetterPropagation = true;\n if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {\n DomHandler.clearSelection();\n if (this.rangeRowIndex != null) {\n this.clearSelectionRange(event.originalEvent);\n }\n\n this.rangeRowIndex = event.rowIndex;\n this.selectRange(event.originalEvent, event.rowIndex);\n }\n else {\n let rowData = event.rowData;\n let selected = this.isSelected(rowData);\n let metaSelection = this.rowTouched ? false : this.metaKeySelection;\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.anchorRowIndex = event.rowIndex;\n this.rangeRowIndex = event.rowIndex;\n\n if (metaSelection) {\n let metaKey = event.originalEvent.metaKey||event.originalEvent.ctrlKey;\n\n if (selected && metaKey) {\n if (this.isSingleSelectionMode()) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(null);\n }\n else {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n\n this.onRowUnselect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row'});\n }\n else {\n if (this.isSingleSelectionMode()) {\n this._selection = rowData;\n this.selectionChange.emit(rowData);\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n else if (this.isMultipleSelectionMode()) {\n if (metaKey) {\n this._selection = this.selection||[];\n }\n else {\n this._selection = [];\n this.selectionKeys = {};\n }\n\n this._selection = [...this.selection,rowData];\n this.selectionChange.emit(this.selection);\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.onRowSelect.emit({originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex});\n }\n }\n else {\n if (this.selectionMode === 'single') {\n if (selected) {\n this._selection = null;\n this.selectionKeys = {};\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n }\n else {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys = {};\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n else if (this.selectionMode === 'multiple') {\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: event.rowIndex });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.rowTouched = false;\n }\n\n handleRowTouchEnd(event) {\n this.rowTouched = true;\n }\n\n handleRowRightClick(event) {\n if (this.contextMenu) {\n const rowData = event.rowData;\n\n if (this.contextMenuSelectionMode === 'separate') {\n this.contextMenuSelection = rowData;\n this.contextMenuSelectionChange.emit(rowData);\n this.onContextMenuSelect.emit({originalEvent: event.originalEvent, data: rowData, index: event.rowIndex});\n this.contextMenu.show(event.originalEvent);\n this.tableService.onContextMenu(rowData);\n }\n else if (this.contextMenuSelectionMode === 'joint') {\n this.preventSelectionSetterPropagation = true;\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n\n if (!selected) {\n if (this.isSingleSelectionMode()) {\n this.selection = rowData;\n this.selectionChange.emit(rowData);\n }\n else if (this.isMultipleSelectionMode()) {\n this.selection = [rowData];\n this.selectionChange.emit(this.selection);\n }\n\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.contextMenu.show(event.originalEvent);\n this.onContextMenuSelect.emit({originalEvent: event, data: rowData, index: event.rowIndex});\n }\n }\n }\n\n selectRange(event: MouseEvent, rowIndex: number) {\n let rangeStart, rangeEnd;\n\n if (this.anchorRowIndex > rowIndex) {\n rangeStart = rowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else if (this.anchorRowIndex < rowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = rowIndex;\n }\n else {\n rangeStart = rowIndex;\n rangeEnd = rowIndex;\n }\n\n if (this.lazy && this.paginator) {\n rangeStart -= this.first;\n rangeEnd -= this.first;\n }\n\n let rangeRowsData = [];\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];\n if (!this.isSelected(rangeRowData)) {\n rangeRowsData.push(rangeRowData);\n this._selection = [...this.selection, rangeRowData];\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n }\n this.onRowSelect.emit({originalEvent: event, data: rangeRowsData, type: 'row'});\n this.selectionChange.emit(this.selection);\n }\n\n clearSelectionRange(event: MouseEvent) {\n let rangeStart, rangeEnd;\n\n if (this.rangeRowIndex > this.anchorRowIndex) {\n rangeStart = this.anchorRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n else if (this.rangeRowIndex < this.anchorRowIndex) {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.anchorRowIndex;\n }\n else {\n rangeStart = this.rangeRowIndex;\n rangeEnd = this.rangeRowIndex;\n }\n\n for(let i = rangeStart; i <= rangeEnd; i++) {\n let rangeRowData = this.value[i];\n let selectionIndex = this.findIndexInSelection(rangeRowData);\n this._selection = this.selection.filter((val,i) => i!=selectionIndex);\n let dataKeyValue: string = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n this.onRowUnselect.emit({originalEvent: event, data: rangeRowData, type: 'row'});\n }\n }\n\n isSelected(rowData) {\n if (rowData && this.selection) {\n if (this.dataKey) {\n return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n }\n else {\n if (this.selection instanceof Array)\n return this.findIndexInSelection(rowData) > -1;\n else\n return this.equals(rowData, this.selection);\n }\n }\n\n return false;\n }\n\n findIndexInSelection(rowData: any) {\n let index: number = -1;\n if (this.selection && this.selection.length) {\n for (let i = 0; i < this.selection.length; i++) {\n if (this.equals(rowData, this.selection[i])) {\n index = i;\n break;\n }\n }\n }\n\n return index;\n }\n\n toggleRowWithRadio(event: any, rowData:any) {\n this.preventSelectionSetterPropagation = true;\n\n if (this.selection != rowData) {\n this._selection = rowData;\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n\n if (this.dataKey) {\n this.selectionKeys = {};\n this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;\n }\n }\n else {\n this._selection = null;\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton'});\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowWithCheckbox(event, rowData: any) {\n this.selection = this.selection||[];\n let selected = this.isSelected(rowData);\n let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;\n this.preventSelectionSetterPropagation = true;\n\n if (selected) {\n let selectionIndex = this.findIndexInSelection(rowData);\n this._selection = this.selection.filter((val, i) => i != selectionIndex);\n this.selectionChange.emit(this.selection);\n this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n delete this.selectionKeys[dataKeyValue];\n }\n }\n else {\n this._selection = this.selection ? [...this.selection, rowData] : [rowData];\n this.selectionChange.emit(this.selection);\n this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });\n if (dataKeyValue) {\n this.selectionKeys[dataKeyValue] = 1;\n }\n }\n\n this.tableService.onSelectionChange();\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n toggleRowsWithCheckbox(event: Event, check: boolean) {\n this._selection = check ? this.filteredValue ? this.filteredValue.slice(): this.value.slice() : [];\n this.preventSelectionSetterPropagation = true;\n this.updateSelectionKeys();\n this.selectionChange.emit(this._selection);\n this.tableService.onSelectionChange();\n this.onHeaderCheckboxToggle.emit({originalEvent: event, checked: check});\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n equals(data1, data2) {\n return this.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, this.dataKey);\n }\n\n /* Legacy Filtering for custom elements */\n filter(value: any, field: string, matchMode: string) {\n if (this.filterTimeout) {\n clearTimeout(this.filterTimeout);\n }\n if (!this.isFilterBlank(value)) {\n this.filters[field] = { value: value, matchMode: matchMode };\n } else if (this.filters[field]) {\n delete this.filters[field];\n }\n\n this.filterTimeout = setTimeout(() => {\n this._filter();\n this.filterTimeout = null;\n }, this.filterDelay);\n\n this.anchorRowIndex = null;\n }\n\n filterGlobal(value, matchMode) {\n this.filter(value, 'global', matchMode);\n }\n\n isFilterBlank(filter: any): boolean {\n if (filter !== null && filter !== undefined) {\n if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n return true;\n else\n return false;\n }\n return true;\n }\n\n _filter() {\n if (!this.restoringFilter) {\n this.first = 0;\n this.firstChange.emit(this.first);\n }\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n if (!this.value) {\n return;\n }\n\n if (!this.hasFilter()) {\n this.filteredValue = null;\n if (this.paginator) {\n this.totalRecords = this.value ? this.value.length : 0;\n }\n }\n else {\n let globalFilterFieldsArray;\n if (this.filters['global']) {\n if (!this.columns && !this.globalFilterFields)\n throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');\n else\n globalFilterFieldsArray = this.globalFilterFields||this.columns;\n }\n\n this.filteredValue = [];\n\n for (let i = 0; i < this.value.length; i++) {\n let localMatch = true;\n let globalMatch = false;\n let localFiltered = false;\n\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop) && prop !== 'global') {\n localFiltered = true;\n let filterField = prop;\n let filterMeta = this.filters[filterField];\n\n if (Array.isArray(filterMeta)) {\n for (let meta of filterMeta) {\n localMatch = this.executeLocalFilter(filterField, this.value[i], meta);\n\n if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {\n break;\n }\n }\n }\n else {\n localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);\n }\n \n if (!localMatch) {\n break;\n }\n }\n }\n\n if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {\n for(let j = 0; j < globalFilterFieldsArray.length; j++) {\n let globalFilterField = globalFilterFieldsArray[j].field||globalFilterFieldsArray[j];\n globalMatch = this.filterService.filters[(<FilterMetadata> this.filters['global']).matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), (<FilterMetadata> this.filters['global']).value, this.filterLocale);\n\n if (globalMatch) {\n break;\n }\n }\n }\n\n let matches: boolean;\n if (this.filters['global']) {\n matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch;\n }\n else {\n matches = localFiltered && localMatch;\n }\n\n if (matches) {\n this.filteredValue.push(this.value[i]);\n }\n }\n\n if (this.filteredValue.length === this.value.length) {\n this.filteredValue = null;\n }\n\n if (this.paginator) {\n this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n }\n }\n }\n\n this.onFilter.emit({\n filters: this.filters,\n filteredValue: this.filteredValue || this.value\n });\n\n this.tableService.onValueChange(this.value);\n\n if (this.isStateful() && !this.restoringFilter) {\n this.saveState();\n }\n\n if (this.restoringFilter) {\n this.restoringFilter = false;\n }\n\n this.cd.markForCheck();\n\n if (this.scrollable) {\n this.resetScrollTop();\n }\n }\n\n executeLocalFilter(field: string, rowData: any, filterMeta: FilterMetadata): boolean {\n let filterValue = filterMeta.value;\n let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;\n let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);\n let filterConstraint = this.filterService.filters[filterMatchMode];\n\n return filterConstraint(dataFieldValue, filterValue, this.filterLocale);\n }\n\n hasFilter() {\n let empty = true;\n for (let prop in this.filters) {\n if (this.filters.hasOwnProperty(prop)) {\n empty = false;\n break;\n }\n }\n\n return !empty;\n }\n\n createLazyLoadMetadata(): any {\n return {\n first: this.first,\n rows: this.rows,\n sortField: this.sortField,\n sortOrder: this.sortOrder,\n filters: this.filters,\n globalFilter: this.filters && this.filters['global'] ? (<FilterMetadata> this.filters['global']).value : null,\n multiSortMeta: this.multiSortMeta\n };\n }\n\n public clear() {\n this._sortField = null;\n this._sortOrder = this.defaultSortOrder;\n this._multiSortMeta = null;\n this.tableService.onSort(null);\n\n this.filteredValue = null;\n this.filters = {};\n\n this.first = 0;\n this.firstChange.emit(this.first);\n\n if (this.lazy) {\n this.onLazyLoad.emit(this.createLazyLoadMetadata());\n }\n else {\n this.totalRecords = (this._value ? this._value.length : 0);\n }\n }\n\n public reset() {\n this.clear();\n }\n\n public exportCSV(options?: any) {\n let data;\n let csv = '';\n let columns = this.frozenColumns ? [...this.frozenColumns, ...this.columns] : this.columns;\n\n if (options && options.selectionOnly) {\n data = this.selection || [];\n }\n else {\n data = this.filteredValue || this.value;\n\n if (this.frozenValue) {\n data = data ? [...this.frozenValue, ...data] : this.frozenValue;\n }\n }\n\n //headers\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n csv += '\"' + (column.header || column.field) + '\"';\n\n if (i < (columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n\n //body\n data.forEach((record, i) => {\n csv += '\\n';\n for (let i = 0; i < columns.length; i++) {\n let column = columns[i];\n if (column.exportable !== false && column.field) {\n let cellData = ObjectUtils.resolveFieldData(record, column.field);\n\n if (cellData != null) {\n if (this.exportFunction) {\n cellData = this.exportFunction({\n data: cellData,\n field: column.field\n });\n }\n else\n cellData = String(cellData).replace(/\"/g, '\"\"');\n }\n else\n cellData = '';\n\n csv += '\"' + cellData + '\"';\n\n if (i < (columns.length - 1)) {\n csv += this.csvSeparator;\n }\n }\n }\n });\n\n let blob = new Blob([csv], {\n type: 'text/csv;charset=utf-8;'\n });\n\n if (window.navigator.msSaveOrOpenBlob) {\n navigator.msSaveOrOpenBlob(blob, this.exportFilename + '.csv');\n }\n else {\n let link = document.createElement(\"a\");\n link.style.display = 'none';\n document.body.appendChild(link);\n if (link.download !== undefined) {\n link.setAttribute('href', URL.createObjectURL(blob));\n link.setAttribute('download', this.exportFilename + '.csv');\n link.click();\n }\n else {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n window.open(encodeURI(csv));\n }\n document.body.removeChild(link);\n }\n }\n\n public resetScrollTop() {\n if (this.virtualScroll)\n this.scrollToVirtualIndex(0);\n else\n this.scrollTo({top: 0});\n }\n\n public scrollToVirtualIndex(index: number) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollToVirtualIndex(index);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollToVirtualIndex(index);\n }\n }\n\n public scrollTo(options) {\n if (this.scrollableViewChild) {\n this.scrollableViewChild.scrollTo(options);\n }\n\n if (this.scrollableFrozenViewChild) {\n this.scrollableFrozenViewChild.scrollTo(options);\n }\n }\n\n updateEditingCell(cell, data, field, index) {\n this.editingCell = cell;\n this.editingCellData = data;\n this.editingCellField = field;\n this.editingCellRowIndex = index;\n this.bindDocumentEditListener();\n }\n\n isEditingCellValid() {\n return (this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0);\n }\n\n bindDocumentEditListener() {\n if (!this.documentEditListener) {\n this.documentEditListener = (event) => {\n if (this.editingCell && !this.editingCellClick && this.isEditingCellValid()) {\n DomHandler.removeClass(this.editingCell, 'p-cell-editing');\n this.editingCell = null;\n this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });\n this.editingCellField = null;\n this.editingCellData = null;\n this.editingCellRowIndex = null;\n this.unbindDocumentEditListener();\n this.cd.markForCheck();\n }\n\n this.editingCellClick = false;\n };\n\n document.addEventListener('click', this.documentEditListener);\n }\n }\n\n unbindDocumentEditListener() {\n if (this.documentEditListener) {\n document.removeEventListener('click', this.documentEditListener);\n this.documentEditListener = null;\n }\n }\n\n initRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n this.editingRowKeys[dataKeyValue] = true;\n }\n\n saveRowEdit(rowData: any, rowElement: HTMLTableRowElement) {\n if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n }\n\n cancelRowEdit(rowData: any) {\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n delete this.editingRowKeys[dataKeyValue];\n }\n\n toggleRow(rowData: any, event?: Event) {\n if (!this.dataKey) {\n throw new Error('dataKey must be defined to use row expansion');\n }\n\n let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));\n\n if (this.expandedRowKeys[dataKeyValue] != null) {\n delete this.expandedRowKeys[dataKeyValue];\n this.onRowCollapse.emit({\n originalEvent: event,\n data: rowData\n });\n }\n else {\n if (this.rowExpandMode === 'single') {\n this.expandedRowKeys = {};\n }\n\n this.expandedRowKeys[dataKeyValue] = true;\n this.onRowExpand.emit({\n originalEvent: event,\n data: rowData\n });\n }\n\n if (event) {\n event.preventDefault();\n }\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n isRowExpanded(rowData: any): boolean {\n return this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isRowEditing(rowData: any): boolean {\n return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;\n }\n\n isSingleSelectionMode() {\n return this.selectionMode === 'single';\n }\n\n isMultipleSelectionMode() {\n return this.selectionMode === 'multiple';\n }\n\n onColumnResizeBegin(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n this.lastResizerHelperX = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft);\n this.onColumnResize(event);\n event.preventDefault();\n }\n\n onColumnResize(event) {\n let containerLeft = DomHandler.getOffset(this.containerViewChild.nativeElement).left;\n DomHandler.addClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild.nativeElement.offsetHeight + 'px';\n this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';\n this.resizeHelperViewChild.nativeElement.style.left = (event.pageX - containerLeft + this.containerViewChild.nativeElement.scrollLeft) + 'px';\n\n this.resizeHelperViewChild.nativeElement.style.display = 'block';\n }\n\n onColumnResizeEnd(event, column) {\n let delta = this.resizeHelperViewChild.nativeElement.offsetLeft - this.lastResizerHelperX;\n let columnWidth = column.offsetWidth;\n let minWidth = parseInt(column.style.minWidth || 15);\n\n if (columnWidth + delta < minWidth) {\n delta = minWidth - columnWidth;\n }\n\n const newColumnWidth = columnWidth + delta;\n\n if (newColumnWidth >= minWidth) {\n if (this.columnResizeMode === 'fit') {\n let nextColumn = column.nextElementSibling;\n while (!nextColumn.offsetParent) {\n nextColumn = nextColumn.nextElementSibling;\n }\n\n if (nextColumn) {\n let nextColumnWidth = nextColumn.offsetWidth - delta;\n let nextColumnMinWidth = nextColumn.style.minWidth || 15;\n\n if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n if (this.scrollable) {\n let scrollableView = this.findParentScrollableView(column);\n let scrollableBodyTable = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, '.p-datatable-virtual-scrollable-body table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableView, 'table.p-datatable-scrollable-footer-table');\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, nextColumnWidth);\n }\n else {\n column.style.width = newColumnWidth + 'px';\n if (nextColumn) {\n nextColumn.style.width = nextColumnWidth + 'px';\n }\n }\n }\n }\n }\n else if (this.columnResizeMode === 'expand') {\n if (newColumnWidth >= minWidth) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableViewChild.nativeElement.offsetWidth + delta + 'px';\n column.style.width = newColumnWidth + 'px';\n let containerWidth = this.tableViewChild.nativeElement.style.width;\n this.containerViewChild.nativeElement.style.width = containerWidth + 'px';\n }\n }\n }\n\n this.onColResize.emit({\n element: column,\n delta: delta\n });\n\n if (this.isStateful()) {\n this.saveState();\n }\n }\n\n this.resizeHelperViewChild.nativeElement.style.display = 'none';\n DomHandler.removeClass(this.containerViewChild.nativeElement, 'p-unselectable-text');\n }\n\n setScrollableItemsWidthOnExpandResize(column, newColumnWidth, delta) {\n let scrollableView = column ? this.findParentScrollableView(column) : this.containerViewChild.nativeElement;\n let scrollableBody = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-body') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport');\n let scrollableHeader = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-header');\n let scrollableFooter = DomHandler.findSingle(scrollableView, '.p-datatable-scrollable-footer');\n let scrollableBodyTable = DomHandler.findSingle(scrollableBody, '.p-datatable-scrollable-body table') || DomHandler.findSingle(scrollableView, 'cdk-virtual-scroll-viewport table');\n let scrollableHeaderTable = DomHandler.findSingle(scrollableHeader, 'table.p-datatable-scrollable-header-table');\n let scrollableFooterTable = DomHandler.findSingle(scrollableFooter, 'table.p-datatable-scrollable-footer-table');\n\n const scrollableBodyTableWidth = column ? scrollableBodyTable.offsetWidth + delta : newColumnWidth;\n const scrollableHeaderTableWidth = column ? scrollableHeaderTable.offsetWidth + delta : newColumnWidth;\n const isContainerInViewport = this.containerViewChild.nativeElement.offsetWidth >= scrollableBodyTableWidth;\n\n let setWidth = (container, table, width, isContainerInViewport) => {\n if (container && table) {\n container.style.width = isContainerInViewport ? width + DomHandler.calculateScrollbarWidth(scrollableBody) + 'px' : 'auto'\n table.style.width = width + 'px';\n }\n };\n\n setWidth(scrollableBody, scrollableBodyTable, scrollableBodyTableWidth, isContainerInViewport);\n setWidth(scrollableHeader, scrollableHeaderTable, scrollableHeaderTableWidth, isContainerInViewport);\n setWidth(scrollableFooter, scrollableFooterTable, scrollableHeaderTableWidth, isContainerInViewport);\n\n if (column) {\n let resizeColumnIndex = DomHandler.index(column);\n\n this.resizeColGroup(scrollableHeaderTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableBodyTable, resizeColumnIndex, newColumnWidth, null);\n this.resizeColGroup(scrollableFooterTable, resizeColumnIndex, newColumnWidth, null);\n }\n }\n\n findParentScrollableView(column) {\n if (column) {\n let parent = column.parentElement;\n while (parent && !DomHandler.hasClass(parent, 'p-datatable-scrollable-view')) {\n parent = parent.parentElement;\n }\n\n return parent;\n }\n else {\n return null;\n }\n }\n\n resizeColGroup(table, resizeColumnIndex, newColumnWidth, nextColumnWidth) {\n if (table) {\n let colGroup = table.children[0].nodeName === 'COLGROUP' ? table.children[0] : null;\n\n if (colGroup) {\n let col = colGroup.children[resizeColumnIndex];\n let nextCol = col.nextElementSibling;\n col.style.width = newColumnWidth + 'px';\n\n if (nextCol && nextColumnWidth) {\n nextCol.style.width = nextColumnWidth + 'px';\n }\n }\n else {\n throw \"Scrollable tables require a colgroup to support resizable columns\";\n }\n }\n }\n\n onColumnDragStart(event, columnElement) {\n this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild.nativeElement);\n this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild.nativeElement);\n this.draggedColumn = columnElement;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onColumnDragEnter(event, dropHeader) {\n if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n event.preventDefault();\n let containerOffset = DomHandler.getOffset(this.containerViewChild.nativeElement);\n let dropHeaderOffset = DomHandler.getOffset(dropHeader);\n\n if (this.draggedColumn != dropHeader) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'preorderablecolumn');\n let targetLeft = dropHeaderOffset.left - containerOffset.left;\n let targetTop = containerOffset.top - dropHeaderOffset.top;\n let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n\n this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n\n if (event.pageX > columnCenter) {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = 1;\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.reorderIndicatorDownViewChild.nativeElement.style.left = (targetLeft - Math.ceil(this.reorderIconWidth / 2)) + 'px';\n this.dropPosition = -1;\n }\n\n if ((dropIndex - dragIndex === 1 && this.dropPosition === -1) || (dropIndex - dragIndex === -1 && this.dropPosition === 1)) {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n else {\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';\n }\n }\n else {\n event.dataTransfer.dropEffect = 'none';\n }\n }\n }\n\n onColumnDragLeave(event) {\n if (this.reorderableColumns && this.draggedColumn) {\n event.preventDefault();\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n }\n }\n\n onColumnDrop(event, dropColumn) {\n event.preventDefault();\n if (this.draggedColumn) {\n let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'preorderablecolumn');\n let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'preorderablecolumn');\n let allowDrop = (dragIndex != dropIndex);\n if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n allowDrop = false;\n }\n\n if (allowDrop && ((dropIndex < dragIndex && this.dropPosition === 1))) {\n dropIndex = dropIndex + 1;\n }\n\n if (allowDrop && ((dropIndex > dragIndex && this.dropPosition === -1))) {\n dropIndex = dropIndex - 1;\n }\n\n if (allowDrop) {\n ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n\n this.onColReorder.emit({\n dragIndex: dragIndex,\n dropIndex: dropIndex,\n columns: this.columns\n });\n\n if (this.isStateful()) {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.saveState();\n });\n });\n }\n }\n\n this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';\n this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';\n this.draggedColumn.draggable = false;\n this.draggedColumn = null;\n this.dropPosition = null;\n }\n }\n\n onRowDragStart(event, index) {\n this.rowDragging = true;\n this.draggedRowIndex = index;\n event.dataTransfer.setData('text', 'b'); // For firefox\n }\n\n onRowDragOver(event, index, rowElement) {\n if (this.rowDragging && this.draggedRowIndex !== index) {\n let rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop();\n let pageY = event.pageY;\n let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;\n let prevRowElement = rowElement.previousElementSibling;\n\n if (pageY < rowMidY) {\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n\n this.droppedRowIndex = index;\n if (prevRowElement)\n DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n }\n else {\n if (prevRowElement)\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n else\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top');\n\n this.droppedRowIndex = index + 1;\n DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom');\n }\n }\n }\n\n onRowDragLeave(event, rowElement) {\n let prevRowElement = rowElement.previousElementSibling;\n if (prevRowElement) {\n DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom');\n }\n\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom');\n DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top');\n }\n\n onRowDragEnd(event) {\n this.rowDragging = false;\n this.draggedRowIndex = null;\n this.droppedRowIndex = null;\n }\n\n onRowDrop(event, rowElement) {\n if (this.droppedRowIndex != null) {\n let dropIndex = (this.draggedRowIndex > this.droppedRowIndex) ? this.droppedRowIndex : (this.droppedRowIndex === 0) ? 0 : this.droppedRowIndex - 1;\n ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);\n\n this.onRowReorder.emit({\n dragIndex: this.draggedRowIndex,\n dropIndex: dropIndex\n });\n }\n //cleanup\n this.onRowDragLeave(event, rowElement);\n this.onRowDragEnd(event);\n }\n\n isEmpty() {\n let data = this.filteredValue||this.value;\n return data == null || data.length == 0;\n }\n\n getBlockableElement(): HTMLElement {\n return this.el.nativeElement.children[0];\n }\n\n getStorage() {\n switch(this.stateStorage) {\n case 'local':\n return window.localStorage;\n\n case 'session':\n return window.sessionStorage;\n\n default:\n throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n }\n }\n\n isStateful() {\n return this.stateKey != null;\n }\n\n saveState() {\n const storage = this.getStorage();\n let state: TableState = {};\n\n if (this.paginator) {\n state.first = this.first;\n state.rows = this.rows;\n }\n\n if (this.sortField) {\n state.sortField = this.sortField;\n state.sortOrder = this.sortOrder;\n }\n\n if (this.multiSortMeta) {\n state.multiSortMeta = this.multiSortMeta;\n }\n\n if (this.hasFilter()) {\n state.filters = this.filters;\n }\n\n if (this.resizableColumns) {\n this.saveColumnWidths(state);\n }\n\n if (this.reorderableColumns) {\n this.saveColumnOrder(state);\n }\n\n if (this.selection) {\n state.selection = this.selection;\n }\n\n if (Object.keys(this.expandedRowKeys).length) {\n state.expandedRowKeys = this.expandedRowKeys;\n }\n\n if (Object.keys(state).length) {\n storage.setItem(this.stateKey, JSON.stringify(state));\n }\n\n this.onStateSave.emit(state);\n }\n\n clearState() {\n const storage = this.getStorage();\n\n if (this.stateKey) {\n storage.removeItem(this.stateKey);\n }\n }\n\n restoreState() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n\n if (this.paginator) {\n if (this.first !== undefined) {\n this.first = state.first;\n this.firstChange.emit(this.first);\n }\n\n if (this.rows !== undefined) {\n this.rows = state.rows;\n this.rowsChange.emit(this.rows);\n }\n }\n\n if (state.sortField) {\n this.restoringSort = true;\n this._sortField = state.sortField;\n this._sortOrder = state.sortOrder;\n }\n\n if (state.multiSortMeta) {\n this.restoringSort = true;\n this._multiSortMeta = state.multiSortMeta;\n }\n\n if (state.filters) {\n this.restoringFilter = true;\n this.filters = state.filters;\n }\n\n if (this.resizableColumns) {\n this.columnWidthsState = state.columnWidths;\n this.tableWidthState = state.tableWidth;\n }\n\n if (state.expandedRowKeys) {\n this.expandedRowKeys = state.expandedRowKeys;\n }\n\n if (state.selection) {\n Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));\n }\n\n this.stateRestored = true;\n\n this.onStateRestore.emit(state);\n }\n }\n\n saveColumnWidths(state) {\n let widths = [];\n let headers = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-thead > tr:first-child > th');\n headers.map(header => widths.push(DomHandler.getOuterWidth(header)));\n state.columnWidths = widths.join(',');\n\n if (this.columnResizeMode === 'expand') {\n state.tableWidth = this.scrollable ? DomHandler.findSingle(this.containerViewChild.nativeElement, '.p-datatable-scrollable-header-table').style.width :\n DomHandler.getOuterWidth(this.tableViewChild.nativeElement) + 'px';\n }\n }\n\n restoreColumnWidths() {\n if (this.columnWidthsState) {\n let widths = this.columnWidthsState.split(',');\n\n if (this.columnResizeMode === 'expand' && this.tableWidthState) {\n if (this.scrollable) {\n this.setScrollableItemsWidthOnExpandResize(null, this.tableWidthState, 0);\n }\n else {\n this.tableViewChild.nativeElement.style.width = this.tableWidthState;\n this.containerViewChild.nativeElement.style.width = this.tableWidthState;\n }\n }\n\n if (this.scrollable) {\n let headerCols = DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-scrollable-header-table > colgroup > col');\n let bodyCols = this.virtualScroll ? DomHandler.find(this.containerViewChild.nativeElement, 'cdk-virtual-scroll-viewport table > colgroup > col') : DomHandler.find(this.containerViewChild.nativeElement, '.p-datatable-scrollable-body table > colgroup > col');\n\n headerCols.map((col, index) => col.style.width = widths[index] + 'px');\n bodyCols.map((col, index) => col.style.width = widths[index] + 'px');\n }\n else {\n let headers = DomHandler.find(this.tableViewChild.nativeElement, '.p-datatable-thead > tr:first-child > th');\n headers.map((header, index) => header.style.width = widths[index] + 'px');\n }\n }\n }\n\n saveColumnOrder(state) {\n if (this.columns) {\n let columnOrder: string[] = [];\n this.columns.map(column => {\n columnOrder.push(column.field||column.key)\n });\n\n state.columnOrder = columnOrder;\n }\n }\n\n restoreColumnOrder() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey);\n if (stateString) {\n let state: TableState = JSON.parse(stateString);\n let columnOrder = state.columnOrder;\n if (columnOrder) {\n let reorderedColumns = [];\n\n columnOrder.map(key => {\n let col = this.findColumnByKey(key);\n if (col) {\n reorderedColumns.push(col)\n }\n });\n this.columnOrderStateRestored = true;\n this.columns = reorderedColumns;\n }\n }\n }\n\n findColumnByKey(key) {\n if (this.columns) {\n for (let col of this.columns) {\n if (col.key === key || col.field === key)\n return col;\n else\n continue;\n }\n }\n else {\n return null;\n }\n }\n\n ngOnDestroy() {\n this.unbindDocumentEditListener();\n this.editingCell = null;\n this.initialized = null;\n }\n}\n\n@Component({\n selector: '[pTableBody]',\n template: `\n <ng-container *ngIf=\"!dt.expandedRowTemplate && !dt.virtualScroll\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"!dt.expandedRowTemplate && dt.virtualScroll\">\n <ng-template cdkVirtualFor let-rowData let-rowIndex=\"index\" [cdkVirtualForOf]=\"dt.filteredValue||dt.value\" [cdkVirtualForTrackBy]=\"dt.rowTrackBy\" [cdkVirtualForTemplateCacheSize]=\"0\">\n <ng-container *ngTemplateOutlet=\"rowData ? template: dt.loadingBodyTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.expandedRowTemplate\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"(dt.paginator && !dt.lazy) ? ((dt.filteredValue||dt.value) | slice:dt.first:(dt.first + dt.rows)) : (dt.filteredValue||dt.value)\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"template; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns, expanded: dt.isRowExpanded(rowData), editing: (dt.editMode === 'row' && dt.isRowEditing(rowData))}\"></ng-container>\n <ng-container *ngIf=\"dt.isRowExpanded(rowData)\">\n <ng-container *ngTemplateOutlet=\"dt.expandedRowTemplate; context: {$implicit: rowData, rowIndex: dt.paginator ? (dt.first + rowIndex) : rowIndex, columns: columns}\"></ng-container>\n </ng-container>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.loadingBodyTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"dt.isEmpty() && !dt.loading\">\n <ng-container *ngTemplateOutlet=\"dt.emptyMessageTemplate; context: {$implicit: columns, frozen: frozen}\"></ng-container>\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableBody implements OnDestroy {\n\n @Input(\"pTableBody\") columns: any[];\n\n @Input(\"pTableBodyTemplate\") template: TemplateRef<any>;\n\n @Input() frozen: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.valueSource$.subscribe(() => {\n if (this.dt.virtualScroll) {\n this.cd.detectChanges();\n }\n });\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Component({\n selector: '[pScrollableView]',\n template: `\n <div #scrollHeader class=\"p-datatable-scrollable-header\">\n <div #scrollHeaderBox class=\"p-datatable-scrollable-header-box\">\n <table class=\"p-datatable-scrollable-header-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <thead class=\"p-datatable-thead\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenHeaderTemplate||dt.headerTemplate : dt.headerTemplate; context {$implicit: columns}\"></ng-container>\n </thead>\n <tbody class=\"p-datatable-tbody\">\n <ng-template ngFor let-rowData let-rowIndex=\"index\" [ngForOf]=\"dt.frozenValue\" [ngForTrackBy]=\"dt.rowTrackBy\">\n <ng-container *ngTemplateOutlet=\"dt.frozenRowsTemplate; context: {$implicit: rowData, rowIndex: rowIndex, columns: columns}\"></ng-container>\n </ng-template>\n </tbody>\n </table>\n </div>\n </div>\n <ng-container *ngIf=\"!dt.virtualScroll; else virtualScrollTemplate\">\n <div #scrollBody class=\"p-datatable-scrollable-body\" [ngStyle]=\"{'max-height': dt.scrollHeight !== 'flex' ? scrollHeight : undefined, 'overflow-y': !frozen && dt.scrollHeight ? 'scroll' : undefined}\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </div>\n </ng-container>\n <ng-template #virtualScrollTemplate>\n <cdk-virtual-scroll-viewport [itemSize]=\"dt.virtualRowHeight\" tabindex=\"0\" [style.height]=\"dt.scrollHeight !== 'flex' ? scrollHeight : undefined\"\n [minBufferPx]=\"dt.minBufferPx\" [maxBufferPx]=\"dt.maxBufferPx\" (scrolledIndexChange)=\"onScrollIndexChange($event)\" class=\"p-datatable-virtual-scrollable-body\">\n <table #scrollTable [class]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tbody class=\"p-datatable-tbody\" [pTableBody]=\"columns\" [pTableBodyTemplate]=\"frozen ? dt.frozenBodyTemplate||dt.bodyTemplate : dt.bodyTemplate\" [frozen]=\"frozen\"></tbody>\n </table>\n <div #scrollableAligner style=\"background-color:transparent\" *ngIf=\"frozen\"></div>\n </cdk-virtual-scroll-viewport>\n </ng-template>\n <div #scrollFooter class=\"p-datatable-scrollable-footer\">\n <div #scrollFooterBox class=\"p-datatable-scrollable-footer-box\">\n <table class=\"p-datatable-scrollable-footer-table\" [ngClass]=\"dt.tableStyleClass\" [ngStyle]=\"dt.tableStyle\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenColGroupTemplate||dt.colGroupTemplate : dt.colGroupTemplate; context {$implicit: columns}\"></ng-container>\n <tfoot class=\"p-datatable-tfoot\">\n <ng-container *ngTemplateOutlet=\"frozen ? dt.frozenFooterTemplate||dt.footerTemplate : dt.footerTemplate; context {$implicit: columns}\"></ng-container>\n </tfoot>\n </table>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.Default,\n encapsulation: ViewEncapsulation.None\n})\nexport class ScrollableView implements AfterViewInit,OnDestroy {\n\n @Input(\"pScrollableView\") columns: any[];\n\n @Input() frozen: boolean;\n\n @ViewChild('scrollHeader') scrollHeaderViewChild: ElementRef;\n\n @ViewChild('scrollHeaderBox') scrollHeaderBoxViewChild: ElementRef;\n\n @ViewChild('scrollBody') scrollBodyViewChild: ElementRef;\n\n @ViewChild('scrollTable') scrollTableViewChild: ElementRef;\n\n @ViewChild('scrollFooter') scrollFooterViewChild: ElementRef;\n\n @ViewChild('scrollFooterBox') scrollFooterBoxViewChild: ElementRef;\n\n @ViewChild('scrollableAligner') scrollableAlignerViewChild: ElementRef;\n\n @ViewChild(CdkVirtualScrollViewport) virtualScrollBody: CdkVirtualScrollViewport;\n\n headerScrollListener: any;\n\n bodyScrollListener: any;\n\n footerScrollListener: any;\n\n frozenSiblingBody: HTMLDivElement;\n\n preventBodyScrollPropagation: boolean;\n\n _scrollHeight: string;\n\n virtualScrollTimeout: any;\n\n virtualPage: number;\n\n @Input() get scrollHeight(): string {\n return this._scrollHeight;\n }\n set scrollHeight(val: string) {\n this._scrollHeight = val;\n if (val != null && (val.includes('%') || val.includes('calc'))) {\n console.log('Percentage scroll height calculation is removed in favor of the more performant CSS based flex mode, use scrollHeight=\"flex\" instead.')\n }\n\n if (this.dt.virtualScroll && this.virtualScrollBody) {\n this.virtualScrollBody.ngOnInit();\n }\n }\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (!this.frozen) {\n if (this.dt.frozenColumns || this.dt.frozenBodyTemplate) {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-unfrozen-view');\n }\n\n let frozenView = this.el.nativeElement.previousElementSibling;\n if (frozenView) {\n if (this.dt.virtualScroll)\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-virtual-scrollable-body');\n else\n this.frozenSiblingBody = DomHandler.findSingle(frozenView, '.p-datatable-scrollable-body');\n }\n\n let scrollBarWidth = DomHandler.calculateScrollbarWidth();\n this.scrollHeaderBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n\n if (this.scrollFooterBoxViewChild && this.scrollFooterBoxViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.paddingRight = scrollBarWidth + 'px';\n }\n }\n else {\n if (this.scrollableAlignerViewChild && this.scrollableAlignerViewChild.nativeElement) {\n this.scrollableAlignerViewChild.nativeElement.style.height = DomHandler.calculateScrollbarHeight() + 'px';\n }\n }\n\n this.bindEvents();\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.headerScrollListener = this.onHeaderScroll.bind(this);\n this.scrollHeaderViewChild.nativeElement.addEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.footerScrollListener = this.onFooterScroll.bind(this);\n this.scrollFooterViewChild.nativeElement.addEventListener('scroll', this.footerScrollListener);\n }\n\n if (!this.frozen) {\n this.bodyScrollListener = this.onBodyScroll.bind(this);\n\n if (this.dt.virtualScroll)\n this.virtualScrollBody.getElementRef().nativeElement.addEventListener('scroll', this.bodyScrollListener);\n else\n this.scrollBodyViewChild.nativeElement.addEventListener('scroll', this.bodyScrollListener);\n }\n });\n }\n\n unbindEvents() {\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.removeEventListener('scroll', this.headerScrollListener);\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.removeEventListener('scroll', this.footerScrollListener);\n }\n\n if (this.scrollBodyViewChild && this.scrollBodyViewChild.nativeElement) {\n this.scrollBodyViewChild.nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n\n if (this.virtualScrollBody && this.virtualScrollBody.getElementRef()) {\n this.virtualScrollBody.getElementRef().nativeElement.removeEventListener('scroll', this.bodyScrollListener);\n }\n }\n\n onHeaderScroll() {\n const scrollLeft = this.scrollHeaderViewChild.nativeElement.scrollLeft;\n\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onFooterScroll() {\n const scrollLeft = this.scrollFooterViewChild.nativeElement.scrollLeft;\n this.scrollBodyViewChild.nativeElement.scrollLeft = scrollLeft;\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderViewChild.nativeElement.scrollLeft = scrollLeft;\n }\n\n this.preventBodyScrollPropagation = true;\n }\n\n onBodyScroll(event) {\n if (this.preventBodyScrollPropagation) {\n this.preventBodyScrollPropagation = false;\n return;\n }\n\n if (this.scrollHeaderViewChild && this.scrollHeaderViewChild.nativeElement) {\n this.scrollHeaderBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.scrollFooterViewChild && this.scrollFooterViewChild.nativeElement) {\n this.scrollFooterBoxViewChild.nativeElement.style.marginLeft = -1 * event.target.scrollLeft + 'px';\n }\n\n if (this.frozenSiblingBody) {\n this.frozenSiblingBody.scrollTop = event.target.scrollTop;\n }\n }\n\n onScrollIndexChange(index: number) {\n if (this.dt.lazy) {\n if (this.virtualScrollTimeout) {\n clearTimeout(this.virtualScrollTimeout);\n }\n\n this.virtualScrollTimeout = setTimeout(() => {\n let page = Math.floor(index / this.dt.rows);\n let virtualScrollOffset = page === 0 ? 0 : (page - 1) * this.dt.rows;\n let virtualScrollChunkSize = page === 0 ? this.dt.rows * 2 : this.dt.rows * 3;\n \n if (page !== this.virtualPage) {\n this.virtualPage = page;\n this.dt.onLazyLoad.emit({\n first: virtualScrollOffset,\n rows: virtualScrollChunkSize,\n sortField: this.dt.sortField,\n sortOrder: this.dt.sortOrder,\n filters: this.dt.filters,\n globalFilter: this.dt.filters && this.dt.filters['global'] ? (<FilterMetadata> this.dt.filters['global']).value : null,\n multiSortMeta: this.dt.multiSortMeta\n });\n }\n }, this.dt.virtualScrollDelay);\n }\n }\n\n getPageCount() {\n let dataToRender = this.dt.filteredValue || this.dt.value;\n let dataLength = dataToRender ? dataToRender.length: 0;\n return Math.ceil(dataLength / this.dt.rows);\n }\n\n scrollToVirtualIndex(index: number): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollToIndex(index);\n }\n }\n\n scrollTo(options): void {\n if (this.virtualScrollBody) {\n this.virtualScrollBody.scrollTo(options);\n }\n else {\n if (this.scrollBodyViewChild.nativeElement.scrollTo) {\n this.scrollBodyViewChild.nativeElement.scrollTo(options);\n }\n else {\n this.scrollBodyViewChild.nativeElement.scrollLeft = options.left;\n this.scrollBodyViewChild.nativeElement.scrollTop = options.top;\n }\n }\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n this.frozenSiblingBody = null;\n }\n}\n\n@Directive({\n selector: '[pSortableColumn]',\n host: {\n '[class.p-sortable-column]': 'isEnabled()',\n '[class.p-highlight]': 'sorted',\n '[attr.tabindex]': 'isEnabled() ? \"0\" : null',\n '[attr.role]': '\"columnheader\"',\n '[attr.aria-sort]': 'sortOrder'\n }\n})\nexport class SortableColumn implements OnInit, OnDestroy {\n\n @Input(\"pSortableColumn\") field: string;\n\n @Input() pSortableColumnDisabled: boolean;\n\n sorted: boolean;\n\n sortOrder: string;\n\n subscription: Subscription;\n\n constructor(public dt: Table) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.updateSortState();\n }\n }\n\n updateSortState() {\n this.sorted = this.dt.isSorted(this.field);\n this.sortOrder = this.sorted ? (this.dt.sortOrder === 1 ? 'ascending' : 'descending') : 'none';\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled() && !this.isFilterElement(<HTMLElement> event.target)) {\n this.updateSortState();\n this.dt.sort({\n originalEvent: event,\n field: this.field\n });\n\n DomHandler.clearSelection();\n }\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKey(event: MouseEvent) {\n this.onClick(event);\n }\n\n isEnabled() {\n return this.pSortableColumnDisabled !== true;\n }\n\n isFilterElement(element: HTMLElement) {\n return DomHandler.hasClass(element, 'pi-filter-icon') || DomHandler.hasClass(element, 'p-column-filter-menu-button');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n\n@Component({\n selector: 'p-sortIcon',\n template: `\n <i class=\"p-sortable-column-icon pi pi-fw\" [ngClass]=\"{'pi-sort-amount-up-alt': sortOrder === 1, 'pi-sort-amount-down': sortOrder === -1, 'pi-sort-alt': sortOrder === 0}\"></i>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class SortIcon implements OnInit, OnDestroy {\n\n @Input() field: string;\n\n subscription: Subscription;\n\n sortOrder: number;\n\n constructor(public dt: Table, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.sortSource$.subscribe(sortMeta => {\n this.updateSortState();\n });\n }\n\n ngOnInit() {\n this.updateSortState();\n }\n\n onClick(event){\n event.preventDefault();\n }\n\n updateSortState() {\n if (this.dt.sortMode === 'single') {\n this.sortOrder = this.dt.isSorted(this.field) ? this.dt.sortOrder : 0;\n }\n else if (this.dt.sortMode === 'multiple') {\n let sortMeta = this.dt.getSortMeta(this.field);\n this.sortOrder = sortMeta ? sortMeta.order: 0;\n }\n\n this.cd.markForCheck();\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n\n@Directive({\n selector: '[pSelectableRow]',\n host: {\n '[class.p-selectable-row]': 'isEnabled()',\n '[class.p-highlight]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class SelectableRow implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRow\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n @HostListener('touchend', ['$event'])\n onTouchEnd(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowTouchEnd(event);\n }\n }\n\n @HostListener('keydown.arrowdown', ['$event'])\n onArrowDownKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const nextRow = this.findNextSelectableRow(row);\n\n if (nextRow) {\n nextRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.arrowup', ['$event'])\n onArrowUpKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n const row = <HTMLTableRowElement>event.currentTarget;\n const prevRow = this.findPrevSelectableRow(row);\n\n if (prevRow) {\n prevRow.focus();\n }\n\n event.preventDefault();\n }\n\n @HostListener('keydown.enter', ['$event'])\n @HostListener('keydown.shift.enter', ['$event'])\n @HostListener('keydown.meta.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (!this.isEnabled()) {\n return;\n }\n\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n\n findNextSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let nextRow = <HTMLTableRowElement> row.nextElementSibling;\n if (nextRow) {\n if (DomHandler.hasClass(nextRow, 'p-selectable-row'))\n return nextRow;\n else\n return this.findNextSelectableRow(nextRow);\n }\n else {\n return null;\n }\n }\n\n findPrevSelectableRow(row: HTMLTableRowElement): HTMLTableRowElement {\n let prevRow = <HTMLTableRowElement> row.previousElementSibling;\n if (prevRow) {\n if (DomHandler.hasClass(prevRow, 'p-selectable-row'))\n return prevRow;\n else\n return this.findPrevSelectableRow(prevRow);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pSelectableRowDblClick]',\n host: {\n '[class.p-selectable-row]': 'isEnabled()',\n '[class.p-highlight]': 'selected'\n }\n})\nexport class SelectableRowDblClick implements OnInit, OnDestroy {\n\n @Input(\"pSelectableRowDblClick\") data: any;\n\n @Input(\"pSelectableRowIndex\") index: number;\n\n @Input() pSelectableRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.selected = this.dt.isSelected(this.data);\n });\n }\n }\n\n ngOnInit() {\n if (this.isEnabled()) {\n this.selected = this.dt.isSelected(this.data);\n }\n }\n\n @HostListener('dblclick', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n }\n }\n\n isEnabled() {\n return this.pSelectableRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pContextMenuRow]',\n host: {\n '[class.p-highlight-contextmenu]': 'selected',\n '[attr.tabindex]': 'isEnabled() ? 0 : undefined'\n }\n})\nexport class ContextMenuRow {\n\n @Input(\"pContextMenuRow\") data: any;\n\n @Input(\"pContextMenuRowIndex\") index: number;\n\n @Input() pContextMenuRowDisabled: boolean;\n\n selected: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, private el: ElementRef) {\n if (this.isEnabled()) {\n this.subscription = this.dt.tableService.contextMenuSource$.subscribe((data) => {\n this.selected = this.dt.equals(this.data, data);\n });\n }\n }\n\n @HostListener('contextmenu', ['$event'])\n onContextMenu(event: Event) {\n if (this.isEnabled()) {\n this.dt.handleRowRightClick({\n originalEvent: event,\n rowData: this.data,\n rowIndex: this.index\n });\n\n this.el.nativeElement.focus();\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pContextMenuRowDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Directive({\n selector: '[pRowToggler]'\n})\nexport class RowToggler {\n\n @Input('pRowToggler') data: any;\n\n @Input() pRowTogglerDisabled: boolean;\n\n constructor(public dt: Table) { }\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n if (this.isEnabled()) {\n this.dt.toggleRow(this.data, event);\n event.preventDefault();\n }\n }\n\n isEnabled() {\n return this.pRowTogglerDisabled !== true;\n }\n}\n\n@Directive({\n selector: '[pResizableColumn]'\n})\nexport class ResizableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pResizableColumnDisabled: boolean;\n\n resizer: HTMLSpanElement;\n\n resizerMouseDownListener: any;\n\n documentMouseMoveListener: any;\n\n documentMouseUpListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'p-resizable-column');\n this.resizer = document.createElement('span');\n this.resizer.className = 'p-column-resizer';\n this.el.nativeElement.appendChild(this.resizer);\n\n this.zone.runOutsideAngular(() => {\n this.resizerMouseDownListener = this.onMouseDown.bind(this);\n this.resizer.addEventListener('mousedown', this.resizerMouseDownListener);\n });\n }\n }\n\n bindDocumentEvents() {\n this.zone.runOutsideAngular(() => {\n this.documentMouseMoveListener = this.onDocumentMouseMove.bind(this);\n document.addEventListener('mousemove', this.documentMouseMoveListener);\n\n this.documentMouseUpListener = this.onDocumentMouseUp.bind(this);\n document.addEventListener('mouseup', this.documentMouseUpListener);\n });\n }\n\n unbindDocumentEvents() {\n if (this.documentMouseMoveListener) {\n document.removeEventListener('mousemove', this.documentMouseMoveListener);\n this.documentMouseMoveListener = null;\n }\n\n if (this.documentMouseUpListener) {\n document.removeEventListener('mouseup', this.documentMouseUpListener);\n this.documentMouseUpListener = null;\n }\n }\n\n onMouseDown(event: MouseEvent) {\n if (event.which === 1) {\n this.dt.onColumnResizeBegin(event);\n this.bindDocumentEvents();\n }\n }\n\n onDocumentMouseMove(event: MouseEvent) {\n this.dt.onColumnResize(event);\n }\n\n onDocumentMouseUp(event: MouseEvent) {\n this.dt.onColumnResizeEnd(event, this.el.nativeElement);\n this.unbindDocumentEvents();\n }\n\n isEnabled() {\n return this.pResizableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n if (this.resizerMouseDownListener) {\n this.resizer.removeEventListener('mousedown', this.resizerMouseDownListener);\n }\n\n this.unbindDocumentEvents();\n }\n}\n\n@Directive({\n selector: '[pReorderableColumn]'\n})\nexport class ReorderableColumn implements AfterViewInit, OnDestroy {\n\n @Input() pReorderableColumnDisabled: boolean;\n\n dragStartListener: any;\n\n dragOverListener: any;\n\n dragEnterListener: any;\n\n dragLeaveListener: any;\n\n mouseDownListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) { }\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragOverListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragEnterListener = this.onDragEnter.bind(this);\n this.el.nativeElement.addEventListener('dragenter', this.dragEnterListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragEnterListener) {\n document.removeEventListener('dragenter', this.dragEnterListener);\n this.dragEnterListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer'))\n this.el.nativeElement.draggable = false;\n else\n this.el.nativeElement.draggable = true;\n }\n\n onDragStart(event) {\n this.dt.onColumnDragStart(event, this.el.nativeElement);\n }\n\n onDragOver(event) {\n event.preventDefault();\n }\n\n onDragEnter(event) {\n this.dt.onColumnDragEnter(event, this.el.nativeElement);\n }\n\n onDragLeave(event) {\n this.dt.onColumnDragLeave(event);\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled()) {\n this.dt.onColumnDrop(event, this.el.nativeElement);\n }\n }\n\n isEnabled() {\n return this.pReorderableColumnDisabled !== true;\n }\n\n ngOnDestroy() {\n this.unbindEvents();\n }\n\n}\n\n@Directive({\n selector: '[pEditableColumn]'\n})\nexport class EditableColumn implements AfterViewInit {\n\n @Input(\"pEditableColumn\") data: any;\n\n @Input(\"pEditableColumnField\") field: any;\n\n @Input(\"pEditableColumnRowIndex\") rowIndex: number;\n\n @Input() pEditableColumnDisabled: boolean;\n\n @Input() pFocusCellSelector: string;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n DomHandler.addClass(this.el.nativeElement, 'p-editable-column');\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent) {\n if (this.isEnabled()) {\n this.dt.editingCellClick = true;\n\n if (this.dt.editingCell) {\n if (this.dt.editingCell !== this.el.nativeElement) {\n if (!this.dt.isEditingCellValid()) {\n return;\n }\n\n this.closeEditingCell(true, event);\n this.openCell();\n }\n }\n else {\n this.openCell();\n }\n }\n }\n\n openCell() {\n this.dt.updateEditingCell(this.el.nativeElement, this.data, this.field, this.rowIndex);\n DomHandler.addClass(this.el.nativeElement, 'p-cell-editing');\n this.dt.onEditInit.emit({field: this.field, data: this.data, index: this.rowIndex});\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n let focusCellSelector = this.pFocusCellSelector || 'input, textarea, select';\n let focusableElement = DomHandler.findSingle(this.el.nativeElement, focusCellSelector);\n\n if (focusableElement) {\n focusableElement.focus();\n }\n }, 50);\n });\n }\n\n closeEditingCell(completed, event) {\n if (completed)\n this.dt.onEditComplete.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n else\n this.dt.onEditCancel.emit({field: this.dt.editingCellField, data: this.dt.editingCellData, originalEvent: event, index: this.dt.editingCellRowIndex});\n\n DomHandler.removeClass(this.dt.editingCell, 'p-cell-editing');\n this.dt.editingCell = null;\n this.dt.editingCellData = null;\n this.dt.editingCellField = null;\n this.dt.unbindDocumentEditListener();\n }\n\n @HostListener('keydown.enter', ['$event'])\n onEnterKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.escape', ['$event'])\n onEscapeKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(false, event);\n }\n\n event.preventDefault();\n }\n }\n\n @HostListener('keydown.tab', ['$event'])\n @HostListener('keydown.shift.tab', ['$event'])\n @HostListener('keydown.meta.tab', ['$event'])\n onShiftKeyDown(event: KeyboardEvent) {\n if (this.isEnabled()) {\n if (event.shiftKey)\n this.moveToPreviousCell(event);\n else{\n this.moveToNextCell(event);\n }\n }\n }\n\n findCell(element) {\n if (element) {\n let cell = element;\n while (cell && !DomHandler.hasClass(cell, 'p-cell-editing')) {\n cell = cell.parentElement;\n }\n\n return cell;\n }\n else {\n return null;\n }\n }\n\n moveToPreviousCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findPreviousEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n moveToNextCell(event: KeyboardEvent) {\n let currentCell = this.findCell(event.target);\n if (currentCell) {\n let targetCell = this.findNextEditableColumn(currentCell);\n\n if (targetCell) {\n if (this.dt.isEditingCellValid()) {\n this.closeEditingCell(true, event);\n }\n\n DomHandler.invokeElementMethod(event.target, 'blur');\n DomHandler.invokeElementMethod(targetCell, 'click');\n event.preventDefault();\n }\n }\n }\n\n findPreviousEditableColumn(cell: Element) {\n let prevCell = cell.previousElementSibling;\n\n if (!prevCell) {\n let previousRow = cell.parentElement.previousElementSibling;\n if (previousRow) {\n prevCell = previousRow.lastElementChild;\n }\n }\n\n if (prevCell) {\n if (DomHandler.hasClass(prevCell, 'p-editable-column'))\n return prevCell;\n else\n return this.findPreviousEditableColumn(prevCell);\n }\n else {\n return null;\n }\n }\n\n findNextEditableColumn(cell: Element) {\n let nextCell = cell.nextElementSibling;\n\n if (!nextCell) {\n let nextRow = cell.parentElement.nextElementSibling;\n if (nextRow) {\n nextCell = nextRow.firstElementChild;\n }\n }\n\n if (nextCell) {\n if (DomHandler.hasClass(nextCell, 'p-editable-column'))\n return nextCell;\n else\n return this.findNextEditableColumn(nextCell);\n }\n else {\n return null;\n }\n }\n\n isEnabled() {\n return this.pEditableColumnDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pEditableRow]'\n})\nexport class EditableRow {\n\n @Input(\"pEditableRow\") data: any;\n\n @Input() pEditableRowDisabled: boolean;\n\n constructor(public el: ElementRef) {}\n\n isEnabled() {\n return this.pEditableRowDisabled !== true;\n }\n\n}\n\n@Directive({\n selector: '[pInitEditableRow]'\n})\nexport class InitEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.initRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n\n}\n\n@Directive({\n selector: '[pSaveEditableRow]'\n})\nexport class SaveEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.saveRowEdit(this.editableRow.data, this.editableRow.el.nativeElement);\n event.preventDefault();\n }\n}\n\n@Directive({\n selector: '[pCancelEditableRow]'\n})\nexport class CancelEditableRow {\n\n constructor(public dt: Table, public editableRow: EditableRow) {}\n\n @HostListener('click', ['$event'])\n onClick(event: Event) {\n this.dt.cancelRowEdit(this.editableRow.data);\n event.preventDefault();\n }\n}\n\n@Component({\n selector: 'p-cellEditor',\n template: `\n <ng-container *ngIf=\"editing\">\n <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!editing\">\n <ng-container *ngTemplateOutlet=\"outputTemplate\"></ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class CellEditor implements AfterContentInit {\n\n @ContentChildren(PrimeTemplate) templates: QueryList<PrimeTemplate>;\n\n inputTemplate: TemplateRef<any>;\n\n outputTemplate: TemplateRef<any>;\n\n constructor(public dt: Table, @Optional() public editableColumn: EditableColumn, @Optional() public editableRow: EditableRow) { }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'input':\n this.inputTemplate = item.template;\n break;\n\n case 'output':\n this.outputTemplate = item.template;\n break;\n }\n });\n }\n\n get editing(): boolean {\n return (this.dt.editingCell && this.editableColumn && this.dt.editingCell === this.editableColumn.el.nativeElement) ||\n (this.editableRow && this.dt.editMode === 'row' && this.dt.isRowEditing(this.editableRow.data));\n }\n\n}\n\n@Component({\n selector: 'p-tableRadioButton',\n template: `\n <div class=\"p-radiobutton p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input type=\"radio\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-radiobutton-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"radio\" [attr.aria-checked]=\"checked\">\n <div class=\"p-radiobutton-icon\"></div>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableRadioButton {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithRadio({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableCheckbox',\n template: `\n <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\" [disabled]=\"disabled\"\n [attr.required]=\"required\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-checkbox-box p-component':true,\n 'p-highlight':checked, 'p-disabled':disabled}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableCheckbox {\n\n @Input() disabled: boolean;\n\n @Input() value: any;\n\n @Input() index: number;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() required: boolean;\n\n @Input() ariaLabel: string;\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n checked: boolean;\n\n subscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.subscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.dt.isSelected(this.value);\n this.cd.markForCheck();\n });\n }\n\n ngOnInit() {\n this.checked = this.dt.isSelected(this.value);\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n this.dt.toggleRowWithCheckbox({\n originalEvent: event,\n rowIndex: this.index\n }, this.value);\n }\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n}\n\n@Component({\n selector: 'p-tableHeaderCheckbox',\n template: `\n <div class=\"p-checkbox p-component\" (click)=\"onClick($event)\">\n <div class=\"p-hidden-accessible\">\n <input #cb type=\"checkbox\" [attr.id]=\"inputId\" [attr.name]=\"name\" [checked]=\"checked\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\n [disabled]=\"isDisabled()\" [attr.aria-label]=\"ariaLabel\">\n </div>\n <div #box [ngClass]=\"{'p-checkbox-box':true,\n 'p-highlight':checked, 'p-disabled': isDisabled()}\" role=\"checkbox\" [attr.aria-checked]=\"checked\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check':checked}\"></span>\n </div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class TableHeaderCheckbox {\n\n @ViewChild('box') boxViewChild: ElementRef;\n\n @Input() disabled: boolean;\n\n @Input() inputId: string;\n\n @Input() name: string;\n\n @Input() ariaLabel: string;\n\n checked: boolean;\n\n selectionChangeSubscription: Subscription;\n\n valueChangeSubscription: Subscription;\n\n constructor(public dt: Table, public tableService: TableService, public cd: ChangeDetectorRef) {\n this.valueChangeSubscription = this.dt.tableService.valueSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n\n this.selectionChangeSubscription = this.dt.tableService.selectionSource$.subscribe(() => {\n this.checked = this.updateCheckedState();\n });\n }\n\n ngOnInit() {\n this.checked = this.updateCheckedState();\n }\n\n onClick(event: Event) {\n if (!this.disabled) {\n if (this.dt.value && this.dt.value.length > 0) {\n this.dt.toggleRowsWithCheckbox(event, !this.checked);\n }\n }\n\n DomHandler.clearSelection();\n }\n\n onFocus() {\n DomHandler.addClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n onBlur() {\n DomHandler.removeClass(this.boxViewChild.nativeElement, 'p-focus');\n }\n\n isDisabled() {\n return this.disabled || !this.dt.value || !this.dt.value.length;\n }\n\n ngOnDestroy() {\n if (this.selectionChangeSubscription) {\n this.selectionChangeSubscription.unsubscribe();\n }\n\n if (this.valueChangeSubscription) {\n this.valueChangeSubscription.unsubscribe();\n }\n }\n\n updateCheckedState() {\n this.cd.markForCheck();\n\n if (this.dt.filteredValue) {\n const val = this.dt.filteredValue;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.isAllFilteredValuesChecked());\n }\n else {\n const val = this.dt.value;\n return (val && val.length > 0 && this.dt.selection && this.dt.selection.length > 0 && this.dt.selection.length === val.length);\n }\n }\n\n isAllFilteredValuesChecked() {\n if (!this.dt.filteredValue) {\n return false;\n }\n else {\n for (let rowData of this.dt.filteredValue) {\n if (!this.dt.isSelected(rowData)) {\n return false;\n }\n }\n return true;\n }\n }\n\n}\n\n@Directive({\n selector: '[pReorderableRowHandle]'\n})\nexport class ReorderableRowHandle implements AfterViewInit {\n\n @Input(\"pReorderableRowHandle\") index: number;\n\n constructor(public el: ElementRef) {}\n\n ngAfterViewInit() {\n DomHandler.addClass(this.el.nativeElement, 'p-datatable-reorderablerow-handle');\n }\n}\n\n@Directive({\n selector: '[pReorderableRow]'\n})\nexport class ReorderableRow implements AfterViewInit {\n\n @Input(\"pReorderableRow\") index: number;\n\n @Input() pReorderableRowDisabled: boolean;\n\n mouseDownListener: any;\n\n dragStartListener: any;\n\n dragEndListener: any;\n\n dragOverListener: any;\n\n dragLeaveListener: any;\n\n dropListener: any;\n\n constructor(public dt: Table, public el: ElementRef, public zone: NgZone) {}\n\n ngAfterViewInit() {\n if (this.isEnabled()) {\n this.el.nativeElement.droppable = true;\n this.bindEvents();\n }\n }\n\n bindEvents() {\n this.zone.runOutsideAngular(() => {\n this.mouseDownListener = this.onMouseDown.bind(this);\n this.el.nativeElement.addEventListener('mousedown', this.mouseDownListener);\n\n this.dragStartListener = this.onDragStart.bind(this);\n this.el.nativeElement.addEventListener('dragstart', this.dragStartListener);\n\n this.dragEndListener = this.onDragEnd.bind(this);\n this.el.nativeElement.addEventListener('dragend', this.dragEndListener);\n\n this.dragOverListener = this.onDragOver.bind(this);\n this.el.nativeElement.addEventListener('dragover', this.dragOverListener);\n\n this.dragLeaveListener = this.onDragLeave.bind(this);\n this.el.nativeElement.addEventListener('dragleave', this.dragLeaveListener);\n });\n }\n\n unbindEvents() {\n if (this.mouseDownListener) {\n document.removeEventListener('mousedown', this.mouseDownListener);\n this.mouseDownListener = null;\n }\n\n if (this.dragStartListener) {\n document.removeEventListener('dragstart', this.dragStartListener);\n this.dragStartListener = null;\n }\n\n if (this.dragEndListener) {\n document.removeEventListener('dragend', this.dragEndListener);\n this.dragEndListener = null;\n }\n\n if (this.dragOverListener) {\n document.removeEventListener('dragover', this.dragOverListener);\n this.dragOverListener = null;\n }\n\n if (this.dragLeaveListener) {\n document.removeEventListener('dragleave', this.dragLeaveListener);\n this.dragLeaveListener = null;\n }\n }\n\n onMouseDown(event) {\n if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle'))\n this.el.nativeElement.draggable = true;\n else\n this.el.nativeElement.draggable = false;\n }\n\n onDragStart(event) {\n this.dt.onRowDragStart(event, this.index);\n }\n\n onDragEnd(event) {\n this.dt.onRowDragEnd(event);\n this.el.nativeElement.draggable = false;\n }\n\n onDragOver(event) {\n this.dt.onRowDragOver(event, this.index, this.el.nativeElement);\n event.preventDefault();\n }\n\n onDragLeave(event) {\n this.dt.onRowDragLeave(event, this.el.nativeElement);\n }\n\n isEnabled() {\n return this.pReorderableRowDisabled !== true;\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event) {\n if (this.isEnabled() && this.dt.rowDragging) {\n this.dt.onRowDrop(event, this.el.nativeElement);\n }\n\n event.preventDefault()\n }\n}\n\n@Component({\n selector: 'p-columnFilterFormElement',\n template: `\n <ng-container *ngIf=\"filterTemplate; else builtInElement\">\n <ng-container *ngTemplateOutlet=\"filterTemplate; context: {$implicit: filterConstraint.value, filterCallback: filterCallback}\"></ng-container>\n </ng-container>\n <ng-template #builtInElement>\n <ng-container [ngSwitch]=\"type\">\n <input *ngSwitchCase=\"'text'\" type=\"text\" pInputText [value]=\"filterConstraint?.value\" (input)=\"onModelChange($event.target.value)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\" [attr.placeholder]=\"placeholder\">\n <p-inputNumber *ngSwitchCase=\"'numeric'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\" (onKeyDown)=\"onNumericInputKeyDown($event)\" [showButtons]=\"true\" [attr.placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [mode]=\"currency ? 'currency' : 'decimal'\" [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-inputNumber>\n <p-triStateCheckbox *ngSwitchCase=\"'boolean'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-triStateCheckbox>\n <p-calendar *ngSwitchCase=\"'date'\" [ngModel]=\"filterConstraint?.value\" (ngModelChange)=\"onModelChange($event)\"></p-calendar>\n </ng-container>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilterFormElement implements OnInit {\n \n @Input() field: string;\n\n @Input() type: string;\n\n @Input() filterConstraint: FilterMetadata;\n\n @Input() filterTemplate: TemplateRef<any>;\n\n @Input() placeholder: string;\n\n @Input() minFractionDigits: number\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n filterCallback: Function;\n\n constructor(public dt: Table) {}\n\n ngOnInit() {\n this.filterCallback = value => {\n this.filterConstraint.value = value;\n this.dt._filter();\n };\n }\n\n onModelChange(value: any) {\n this.filterConstraint.value = value;\n\n if (this.type === 'boolean' || value === '') {\n this.dt._filter();\n }\n }\n\n onTextInputEnterKeyDown(event: KeyboardEvent) {\n this.dt._filter();\n event.preventDefault();\n }\n\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n this.dt._filter();\n event.preventDefault();\n }\n }\n}\n\n@Component({\n selector: 'p-columnFilter',\n template: `\n <div class=\"p-column-filter\" [ngClass]=\"{'p-column-filter-row': display === 'row', 'p-column-filter-menu': display === 'menu'}\">\n <p-columnFilterFormElement *ngIf=\"display === 'row'\" class=\"p-fluid\" [type]=\"type\" [field]=\"field\" [filterConstraint]=\"dt.filters[field]\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\" [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button #icon *ngIf=\"showMenuButton\" type=\"button\" class=\"p-column-filter-menu-button p-link\" aria-haspopup=\"true\" [attr.aria-expanded]=\"overlayVisible\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible, 'p-column-filter-menu-button-active': hasFilter()}\" \n (click)=\"toggleMenu()\" (keydown)=\"onToggleButtonKeyDown($event)\"><span class=\"pi pi-filter-icon pi-filter\"></span></button>\n <button #icon *ngIf=\"showMenuButton && display === 'row'\" [ngClass]=\"{'p-hidden-space': !hasRowFilter()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\"><span class=\"pi pi-filter-slash\"></span></button>\n <div *ngIf=\"showMenu && overlayVisible\" [ngClass]=\"{'p-column-filter-overlay p-component p-fluid': true, 'p-column-filter-overlay-menu': display === 'menu'}\" \n [@overlayAnimation]=\"'visible'\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (keydown.escape)=\"onEscape()\">\n <ng-container *ngTemplateOutlet=\"headerTemplate; context: {$implicit: field}\"></ng-container>\n <ul *ngIf=\"display === 'row'; else menu\" class=\"p-column-filter-row-items\">\n <li class=\"p-column-filter-row-item\" *ngFor=\"let matchMode of matchModes; let i = index;\" (click)=\"onRowMatchModeChange(matchMode.value)\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"this.onRowMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': isRowMatchModeSelected(matchMode.value)}\" [attr.tabindex]=\"i === 0 ? '0' : null\">{{matchMode.label}}</li>\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onRowMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">{{noFilterLabel}}</li>\n </ul>\n <ng-template #menu>\n <div class=\"p-column-filter-operator\" *ngIf=\"isShowOperator\">\n <p-dropdown [options]=\"operatorOptions\" [ngModel]=\"operator\" (ngModelChange)=\"onOperatorChange($event)\" styleClass=\"p-column-filter-operator-dropdown\"></p-dropdown>\n </div>\n <div class=\"p-column-filter-constraints\">\n <div *ngFor=\"let fieldConstraint of fieldConstraints; let i = index\" class=\"p-column-filter-constraint\">\n <p-dropdown *ngIf=\"showMatchModes && matchModes\" [options]=\"matchModes\" [ngModel]=\"fieldConstraint.matchMode\" (ngModelChange)=\"onMenuMatchModeChange($event, fieldConstraint)\" styleClass=\"p-column-filter-matchmode-dropdown\"></p-dropdown>\n <p-columnFilterFormElement [type]=\"type\" [field]=\"field\" [filterConstraint]=\"fieldConstraint\" [filterTemplate]=\"filterTemplate\" [placeholder]=\"placeholder\"\n [minFractionDigits]=\"minFractionDigits\" [maxFractionDigits]=\"maxFractionDigits\" [prefix]=\"prefix\" [suffix]=\"suffix\"\n [locale]=\"locale\" [localeMatcher]=\"localeMatcher\" [currency]=\"currency\" [currencyDisplay]=\"currencyDisplay\" [useGrouping]=\"useGrouping\"></p-columnFilterFormElement>\n <button *ngIf=\"showRemoveIcon\" type=\"button\" pButton icon=\"pi pi-trash\" class=\"p-column-filter-remove-button p-button-text p-button-danger p-button-sm\" (click)=\"removeConstraint(fieldConstraint)\" pRipple [label]=\"removeRuleButtonLabel\"></button>\n </div>\n </div>\n <div class=\"p-column-filter-add-rule\" *ngIf=\"isShowAddConstraint\">\n <button type=\"button\" pButton [label]=\"addRuleButtonLabel\" icon=\"pi pi-plus\" class=\"p-column-filter-add-button p-button-text p-button-sm\" (click)=\"addConstraint()\" pRipple></button>\n </div>\n <div class=\"p-column-filter-buttonbar\">\n <button type=\"button\" pButton class=\"p-button-outlined\" (click)=\"clearFilter()\" [label]=\"clearButtonLabel\" pRipple></button>\n <button type=\"button\" pButton (click)=\"applyFilter()\" [label]=\"applyButtonLabel\" pRipple></button>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"footerTemplate; context: {$implicit: field}\"></ng-container>\n </div>\n </div>\n `,\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'scaleY(0.8)'}),\n animate('.12s cubic-bezier(0, 0, 0.2, 1)')\n ]),\n transition(':leave', [\n animate('.1s linear', style({ opacity: 0 }))\n ])\n ])\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class ColumnFilter implements AfterContentInit {\n\n @Input() field: string;\n\n @Input() type: string = 'text';\n\n @Input() display: string = 'row';\n\n @Input() showMenu: boolean = true;\n\n @Input() matchMode: string;\n\n @Input() operator: string = FilterOperator.AND;\n\n @Input() showOperator: boolean = true;\n\n @Input() showClearButton: boolean = true;\n\n @Input() showApplyButton: boolean = true;\n\n @Input() showMatchModes: boolean = true;\n\n @Input() showAddButton: boolean = true;\n\n @Input() placeholder: string;\n\n @Input() matchModeOptions: SelectItem[];\n\n @Input() maxConstraints: number = 2;\n\n @Input() minFractionDigits: number;\n \n @Input() maxFractionDigits: number;\n\n @Input() prefix: string;\n\n @Input() suffix: string;\n\n @Input() locale: string;\n\n @Input() localeMatcher: string;\n\n @Input() currency: string;\n\n @Input() currencyDisplay: string;\n\n @Input() useGrouping: boolean = true;\n\n @ViewChild('icon') icon: ElementRef;\n\n @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n constructor(public el: ElementRef, public dt: Table, public renderer: Renderer2, public config: PrimeNGConfig) {}\n\n headerTemplate: TemplateRef<any>;\n\n filterTemplate: TemplateRef<any>;\n\n footerTemplate: TemplateRef<any>;\n\n operatorOptions: any[];\n\n overlayVisible: boolean;\n\n overlay: HTMLElement;\n\n scrollHandler: any;\n\n documentClickListener: any;\n\n documentResizeListener: any;\n\n matchModes: SelectItem[];\n\n translationSubscription: Subscription;\n\n ngOnInit() {\n if (!this.dt.filters[this.field]) {\n this.initFieldFilterConstraint();\n }\n\n this.translationSubscription = this.config.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n });\n\n this.generateMatchModeOptions();\n this.generateOperatorOptions();\n }\n\n generateMatchModeOptions() {\n this.matchModes = this.matchModeOptions || \n this.config.filterMatchModeOptions[this.type]?.map(key => {\n return {label: this.config.getTranslation(key), value: key}\n });\n }\n\n generateOperatorOptions() {\n this.operatorOptions = [\n {label: this.config.getTranslation(TranslationKeys.MATCH_ALL), value: FilterOperator.AND},\n {label: this.config.getTranslation(TranslationKeys.MATCH_ANY), value: FilterOperator.OR}\n ];\n }\n\n ngAfterContentInit() {\n this.templates.forEach((item) => {\n switch(item.getType()) {\n case 'header':\n this.headerTemplate = item.template;\n break;\n\n case 'filter':\n this.filterTemplate = item.template;\n break;\n \n case 'footer':\n this.footerTemplate = item.template;\n break;\n\n default:\n this.filterTemplate = item.template;\n break;\n }\n });\n }\n\n initFieldFilterConstraint() {\n let defaultMatchMode = this.getDefaultMatchMode();\n this.dt.filters[this.field] = this.display == 'row' ? {value: null, matchMode: defaultMatchMode} : [{value: null, matchMode: defaultMatchMode, operator: this.operator}];\n }\n\n onMenuMatchModeChange(value: any, filterMeta: FilterMetadata) {\n filterMeta.matchMode = value;\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n onRowMatchModeChange(matchMode: string) {\n (<FilterMetadata> this.dt.filters[this.field]).matchMode = matchMode;\n this.dt._filter();\n this.hide();\n }\n \n onRowMatchModeKeyDown(event: KeyboardEvent) {\n let item = <HTMLLIElement> event.target;\n\n switch(event.key) { \n case 'ArrowDown':\n var nextItem = this.findNextItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n var prevItem = this.findPrevItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hide();\n }\n\n isRowMatchModeSelected(matchMode: string) {\n return (<FilterMetadata> this.dt.filters[this.field]).matchMode === matchMode;\n }\n\n addConstraint() {\n (<FilterMetadata[]> this.dt.filters[this.field]).push({value: null, matchMode: this.getDefaultMatchMode(), operator: this.getDefaultOperator()});\n this.dt._filter();\n }\n\n removeConstraint(filterMeta: FilterMetadata) {\n this.dt.filters[this.field] = (<FilterMetadata[]> this.dt.filters[this.field]).filter(meta => meta !== filterMeta);\n this.dt._filter();\n }\n\n onOperatorChange(value) {\n (<FilterMetadata[]> this.dt.filters[this.field]).forEach(filterMeta => {\n filterMeta.operator = value;\n });\n\n if (!this.showApplyButton) {\n this.dt._filter();\n }\n }\n\n toggleMenu() {\n this.overlayVisible = !this.overlayVisible;\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch(event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible = false;\n break;\n \n case 'ArrowDown':\n if (this.overlayVisible) {\n let focusable = DomHandler.getFocusableElements(this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible = true;\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible = false;\n this.icon.nativeElement.focus();\n }\n\n findNextItem(item: HTMLLIElement) {\n let nextItem = <HTMLLIElement> item.nextElementSibling;\n\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextItem(nextItem) : nextItem;\n else\n return item.parentElement.firstElementChild;\n }\n\n findPrevItem(item: HTMLLIElement) {\n let prevItem = <HTMLLIElement> item.previousElementSibling;\n\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevItem(prevItem) : prevItem;\n else\n return item.parentElement.lastElementChild;\n }\n\n onOverlayAnimationStart(event: AnimationEvent) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n \n document.body.appendChild(this.overlay);\n this.overlay.style.zIndex = String(++DomHandler.zindex);\n DomHandler.absolutePosition(this.overlay, this.icon.nativeElement)\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n break;\n\n case 'void':\n this.onOverlayHide();\n break;\n }\n }\n\n getDefaultMatchMode(): string {\n if (this.matchMode) {\n return this.matchMode;\n }\n else {\n if (this.type === 'text')\n return FilterMatchMode.STARTS_WITH;\n else if (this.type === 'numeric')\n return FilterMatchMode.EQUALS;\n else if (this.type === 'date')\n return FilterMatchMode.EQUALS;\n else\n return FilterMatchMode.CONTAINS;\n }\n }\n\n getDefaultOperator(): string {\n return this.dt.filters ? (<FilterMetadata[]> this.dt.filters[this.field])[0].operator: this.operator;\n }\n\n hasRowFilter() {\n return this.dt.filters[this.field] && !this.dt.isFilterBlank((<FilterMetadata>this.dt.filters[this.field]).value);\n }\n\n get fieldConstraints(): FilterMetadata[] {\n return this.dt.filters ? <FilterMetadata[]> this.dt.filters[this.field] : null;\n }\n\n get showRemoveIcon(): boolean {\n return this.fieldConstraints ? this.fieldConstraints.length > 1 : false;\n }\n\n get showMenuButton(): boolean {\n return this.showMenu && (this.display === 'row' ? this.type !== 'boolean': true);\n }\n\n get isShowOperator(): boolean {\n return this.showOperator && this.type !== 'boolean';\n }\n\n get isShowAddConstraint(): boolean {\n return this.showAddButton && this.type !== 'boolean' && (this.fieldConstraints && this.fieldConstraints.length < this.maxConstraints);\n }\n\n get applyButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.APPLY);\n }\n\n get clearButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.CLEAR);\n }\n\n get addRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.ADD_RULE);\n }\n\n get removeRuleButtonLabel(): string {\n return this.config.getTranslation(TranslationKeys.REMOVE_RULE);\n }\n\n get noFilterLabel(): string {\n return this.config.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n hasFilter(): boolean {\n let fieldFilter = this.dt.filters[this.field];\n if (fieldFilter) {\n if (Array.isArray(fieldFilter))\n return !this.dt.isFilterBlank((<FilterMetadata[]> fieldFilter)[0].value); \n else\n return !this.dt.isFilterBlank(fieldFilter.value);\n }\n\n return false;\n }\n\n isOutsideClicked(event): boolean {\n return !(this.overlay.isSameNode(event.target) || this.overlay.contains(event.target) \n || this.icon.nativeElement.isSameNode(event.target) || this.icon.nativeElement.contains(event.target)\n || DomHandler.hasClass(event.target, 'p-column-filter-add-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button')\n || DomHandler.hasClass(event.target, 'p-column-filter-remove-button') || DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'mousedown', event => {\n if (this.isOutsideClicked(event)) {\n this.hide();\n }\n });\n }\n }\n\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n }\n }\n\n bindDocumentResizeListener() {\n this.documentResizeListener = () => this.hide();\n window.addEventListener('resize', this.documentResizeListener);\n }\n\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n window.removeEventListener('resize', this.documentResizeListener);\n this.documentResizeListener = null;\n }\n }\n\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon.nativeElement, () => {\n if (this.overlayVisible) {\n this.hide();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n hide() {\n this.overlayVisible = false;\n }\n\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n clearFilter() {\n this.initFieldFilterConstraint();\n this.dt._filter();\n }\n\n applyFilter() {\n this.dt._filter();\n this.hide();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.el.nativeElement.appendChild(this.overlay);\n this.onOverlayHide();\n }\n\n if (this.translationSubscription) {\n this.translationSubscription.unsubscribe();\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,PaginatorModule,InputTextModule,DropdownModule,ScrollingModule,FormsModule,ButtonModule,SelectButtonModule,CalendarModule,InputNumberModule,TriStateCheckboxModule],\n exports: [Table,SharedModule,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ScrollingModule,ColumnFilter],\n declarations: [Table,SortableColumn,SelectableRow,RowToggler,ContextMenuRow,ResizableColumn,ReorderableColumn,EditableColumn,CellEditor,TableBody,ScrollableView,SortIcon,\n TableRadioButton,TableCheckbox,TableHeaderCheckbox,ReorderableRowHandle,ReorderableRow,SelectableRowDblClick,EditableRow,InitEditableRow,SaveEditableRow,CancelEditableRow,ColumnFilter,ColumnFilterFormElement]\n})\nexport class TableModule { }"]}
|