@pepperi-addons/ngx-lib 0.2.60 → 0.2.61-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/address/address.component.theme.scss +4 -7
- package/address/pepperi-addons-ngx-lib-address.metadata.json +1 -1
- package/attachment/attachment.component.d.ts +1 -0
- package/attachment/attachment.component.theme.scss +3 -2
- package/attachment/pepperi-addons-ngx-lib-attachment.metadata.json +1 -1
- package/bread-crumbs/bread-crumbs.component.theme.scss +7 -7
- package/bread-crumbs/pepperi-addons-ngx-lib-bread-crumbs.metadata.json +1 -1
- package/bundles/pepperi-addons-ngx-lib-address.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-address.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-attachment.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-attachment.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-bread-crumbs.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-bread-crumbs.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-button.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-button.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js +4 -1
- package/bundles/pepperi-addons-ngx-lib-checkbox.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-color.umd.js +8 -3
- package/bundles/pepperi-addons-ngx-lib-color.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-date.umd.js +5 -3
- package/bundles/pepperi-addons-ngx-lib-date.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-dialog.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-dialog.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-field-title.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-field-title.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-files-uploader.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-files-uploader.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-form.umd.js +19 -16
- package/bundles/pepperi-addons-ngx-lib-form.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-group-buttons.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-group-buttons.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-image.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-image.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-images-filmstrip.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-list.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-list.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-quantity-selector.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-query-builder.umd.js +1104 -0
- package/bundles/pepperi-addons-ngx-lib-query-builder.umd.js.map +1 -0
- package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-rich-html-textarea.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-select.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-select.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-separator.umd.js +9 -1
- package/bundles/pepperi-addons-ngx-lib-separator.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-side-bar.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-side-bar.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-signature.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-signature.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-slider.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-slider.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js +306 -39
- package/bundles/pepperi-addons-ngx-lib-smart-filters.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-textarea.umd.js +7 -2
- package/bundles/pepperi-addons-ngx-lib-textarea.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-textbox.umd.js +5 -3
- package/bundles/pepperi-addons-ngx-lib-textbox.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib-top-bar.umd.js +1 -1
- package/bundles/pepperi-addons-ngx-lib-top-bar.umd.js.map +1 -1
- package/bundles/pepperi-addons-ngx-lib.umd.js +38 -36
- package/bundles/pepperi-addons-ngx-lib.umd.js.map +1 -1
- package/button/button.component.theme.scss +0 -2
- package/button/pepperi-addons-ngx-lib-button.metadata.json +1 -1
- package/checkbox/checkbox.component.theme.scss +0 -2
- package/checkbox/pepperi-addons-ngx-lib-checkbox.metadata.json +1 -1
- package/color/color-picker.component.theme.scss +123 -128
- package/color/color.component.d.ts +1 -0
- package/color/color.component.theme.scss +0 -7
- package/color/pepperi-addons-ngx-lib-color.metadata.json +1 -1
- package/core/common/services/addon.service.d.ts +1 -2
- package/core/common/services/file.service.d.ts +4 -4
- package/core/customization/customization.service.d.ts +1 -0
- package/date/date.component.theme.scss +163 -169
- package/date/pepperi-addons-ngx-lib-date.metadata.json +1 -1
- package/dialog/dialog.component.theme.scss +4 -4
- package/dialog/pepperi-addons-ngx-lib-dialog.metadata.json +1 -1
- package/esm2015/address/address.component.js +2 -2
- package/esm2015/attachment/attachment.component.js +8 -3
- package/esm2015/bread-crumbs/bread-crumbs.component.js +2 -2
- package/esm2015/button/button.component.js +2 -2
- package/esm2015/checkbox/checkbox.component.js +5 -2
- package/esm2015/color/color-picker.component.js +2 -2
- package/esm2015/color/color.component.js +8 -3
- package/esm2015/core/common/services/addon.service.js +4 -19
- package/esm2015/core/common/services/file.service.js +9 -9
- package/esm2015/core/common/services/utilities.service.js +25 -4
- package/esm2015/core/customization/customization.service.js +4 -2
- package/esm2015/date/date.component.js +6 -4
- package/esm2015/dialog/dialog.component.js +2 -2
- package/esm2015/field-title/field-title.component.js +2 -2
- package/esm2015/files-uploader/files-uploader.component.js +2 -2
- package/esm2015/form/indicators.component.js +2 -2
- package/esm2015/form/internal-button.component.js +20 -17
- package/esm2015/group-buttons/group-buttons.component.js +2 -2
- package/esm2015/image/image.component.js +8 -3
- package/esm2015/images-filmstrip/images-filmstrip.component.js +8 -3
- package/esm2015/list/list-total.component.js +2 -2
- package/esm2015/quantity-selector/quantity-selector.component.js +8 -3
- package/esm2015/query-builder/common/model/field.js +2 -0
- package/esm2015/query-builder/common/model/filter.js +2 -0
- package/esm2015/query-builder/common/model/legacy.js +2 -0
- package/esm2015/query-builder/common/model/operator-unit.js +42 -0
- package/esm2015/query-builder/common/model/operator.js +207 -0
- package/esm2015/query-builder/common/model/structure.js +2 -0
- package/esm2015/query-builder/common/model/type-map.js +27 -0
- package/esm2015/query-builder/common/model/type.js +6 -0
- package/esm2015/query-builder/common/services/output-query.service.js +111 -0
- package/esm2015/query-builder/common/services/type-convertor.service.js +40 -0
- package/esm2015/query-builder/pepperi-addons-ngx-lib-query-builder.js +9 -0
- package/esm2015/query-builder/public-api.js +8 -0
- package/esm2015/query-builder/query-builder-item/query-builder-item.component.js +116 -0
- package/esm2015/query-builder/query-builder-section/query-builder-section.component.js +64 -0
- package/esm2015/query-builder/query-builder.component.js +104 -0
- package/esm2015/query-builder/query-builder.module.js +35 -0
- package/esm2015/query-builder/query-builder.service.js +282 -0
- package/esm2015/rich-html-textarea/rich-html-textarea.component.js +8 -3
- package/esm2015/select/select.component.js +8 -3
- package/esm2015/separator/separator.component.js +10 -2
- package/esm2015/side-bar/side-bar.component.js +2 -2
- package/esm2015/signature/signature.component.js +8 -3
- package/esm2015/slider/slider.component.js +2 -2
- package/esm2015/smart-filters/boolean-filter/boolean-filter.component.js +23 -3
- package/esm2015/smart-filters/common/model/base-filter-component.js +35 -8
- package/esm2015/smart-filters/common/model/creator.js +8 -2
- package/esm2015/smart-filters/common/model/field.js +12 -1
- package/esm2015/smart-filters/common/model/operator.js +8 -8
- package/esm2015/smart-filters/common/model/type.js +1 -1
- package/esm2015/smart-filters/date-filter/date-filter.component.js +45 -2
- package/esm2015/smart-filters/multi-select-filter/multi-select-filter.component.js +53 -14
- package/esm2015/smart-filters/number-filter/number-filter.component.js +27 -2
- package/esm2015/smart-filters/public-api.js +2 -1
- package/esm2015/smart-filters/smart-filters.component.js +2 -2
- package/esm2015/smart-filters/smart-filters.module.js +16 -3
- package/esm2015/smart-filters/text-filter/text-filter.component.js +79 -0
- package/esm2015/textarea/textarea.component.js +8 -3
- package/esm2015/textbox/textbox.component.js +6 -4
- package/esm2015/top-bar/top-bar.component.js +2 -2
- package/fesm2015/pepperi-addons-ngx-lib-address.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-address.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-attachment.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-attachment.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-bread-crumbs.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-button.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-button.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.js +4 -1
- package/fesm2015/pepperi-addons-ngx-lib-checkbox.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-color.js +8 -3
- package/fesm2015/pepperi-addons-ngx-lib-color.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-date.js +5 -3
- package/fesm2015/pepperi-addons-ngx-lib-date.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-dialog.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-dialog.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-field-title.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-field-title.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-files-uploader.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-files-uploader.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-form.js +19 -16
- package/fesm2015/pepperi-addons-ngx-lib-form.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-group-buttons.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-image.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-image.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-images-filmstrip.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-list.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.js +1014 -0
- package/fesm2015/pepperi-addons-ngx-lib-query-builder.js.map +1 -0
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-rich-html-textarea.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-select.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-select.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-separator.js +9 -1
- package/fesm2015/pepperi-addons-ngx-lib-separator.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-side-bar.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-signature.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-signature.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-slider.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-slider.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js +293 -36
- package/fesm2015/pepperi-addons-ngx-lib-smart-filters.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textarea.js +7 -2
- package/fesm2015/pepperi-addons-ngx-lib-textarea.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-textbox.js +5 -3
- package/fesm2015/pepperi-addons-ngx-lib-textbox.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.js +1 -1
- package/fesm2015/pepperi-addons-ngx-lib-top-bar.js.map +1 -1
- package/fesm2015/pepperi-addons-ngx-lib.js +38 -30
- package/fesm2015/pepperi-addons-ngx-lib.js.map +1 -1
- package/field-title/field-title.component.theme.scss +0 -2
- package/field-title/pepperi-addons-ngx-lib-field-title.metadata.json +1 -1
- package/files-uploader/files-uploader.component.theme.scss +3 -2
- package/files-uploader/pepperi-addons-ngx-lib-files-uploader.metadata.json +1 -1
- package/form/indicators.component.theme.scss +5 -5
- package/form/internal-button.component.d.ts +0 -1
- package/form/pepperi-addons-ngx-lib-form.metadata.json +1 -1
- package/group-buttons/group-buttons.component.theme.scss +11 -11
- package/group-buttons/pepperi-addons-ngx-lib-group-buttons.metadata.json +1 -1
- package/image/image.component.d.ts +1 -0
- package/image/image.component.theme.scss +25 -27
- package/image/pepperi-addons-ngx-lib-image.metadata.json +1 -1
- package/images-filmstrip/images-filmstrip.component.d.ts +1 -0
- package/images-filmstrip/images-filmstrip.component.theme.scss +27 -26
- package/images-filmstrip/pepperi-addons-ngx-lib-images-filmstrip.metadata.json +1 -1
- package/list/list-total.component.theme.scss +6 -6
- package/list/pepperi-addons-ngx-lib-list.metadata.json +1 -1
- package/package.json +5 -5
- package/page-layout/page-layout.component.theme.scss +6 -6
- package/pepperi-addons-ngx-lib.metadata.json +1 -1
- package/quantity-selector/pepperi-addons-ngx-lib-quantity-selector.metadata.json +1 -1
- package/quantity-selector/quantity-selector.component.d.ts +1 -0
- package/quantity-selector/quantity-selector.component.theme.scss +23 -21
- package/query-builder/common/model/field.d.ts +8 -0
- package/query-builder/common/model/filter.d.ts +6 -0
- package/query-builder/common/model/legacy.d.ts +29 -0
- package/query-builder/common/model/operator-unit.d.ts +13 -0
- package/query-builder/common/model/operator.d.ts +21 -0
- package/query-builder/common/model/structure.d.ts +4 -0
- package/query-builder/common/model/type-map.d.ts +12 -0
- package/query-builder/common/model/type.d.ts +4 -0
- package/query-builder/common/services/output-query.service.d.ts +44 -0
- package/query-builder/common/services/type-convertor.service.d.ts +10 -0
- package/query-builder/package.json +14 -0
- package/query-builder/pepperi-addons-ngx-lib-query-builder.d.ts +8 -0
- package/query-builder/pepperi-addons-ngx-lib-query-builder.metadata.json +1 -0
- package/query-builder/public-api.d.ts +4 -0
- package/query-builder/query-builder-item/query-builder-item.component.d.ts +37 -0
- package/query-builder/query-builder-section/query-builder-section.component.d.ts +27 -0
- package/query-builder/query-builder-section/query-builder-section.component.theme.scss +7 -0
- package/query-builder/query-builder.component.d.ts +35 -0
- package/query-builder/query-builder.module.d.ts +2 -0
- package/query-builder/query-builder.service.d.ts +94 -0
- package/rich-html-textarea/pepperi-addons-ngx-lib-rich-html-textarea.metadata.json +1 -1
- package/rich-html-textarea/rich-html-textarea.component.d.ts +1 -0
- package/rich-html-textarea/rich-html-textarea.component.theme.scss +77 -70
- package/select/pepperi-addons-ngx-lib-select.metadata.json +1 -1
- package/select/select.component.d.ts +1 -0
- package/select/select.component.theme.scss +98 -2
- package/separator/pepperi-addons-ngx-lib-separator.metadata.json +1 -1
- package/separator/separator.component.theme.scss +1 -1
- package/side-bar/pepperi-addons-ngx-lib-side-bar.metadata.json +1 -1
- package/side-bar/side-bar.component.theme.scss +17 -16
- package/signature/pepperi-addons-ngx-lib-signature.metadata.json +1 -1
- package/signature/signature.component.d.ts +1 -0
- package/signature/signature.component.theme.scss +5 -21
- package/slider/pepperi-addons-ngx-lib-slider.metadata.json +1 -1
- package/slider/slider.component.theme.scss +55 -53
- package/smart-filters/boolean-filter/boolean-filter.component.d.ts +6 -1
- package/smart-filters/common/model/base-filter-component.d.ts +7 -0
- package/smart-filters/common/model/field.d.ts +4 -0
- package/smart-filters/common/model/operator.d.ts +1 -0
- package/smart-filters/common/model/type.d.ts +2 -2
- package/smart-filters/date-filter/date-filter.component.d.ts +8 -1
- package/smart-filters/multi-select-filter/multi-select-filter.component.d.ts +6 -0
- package/smart-filters/number-filter/number-filter.component.d.ts +5 -0
- package/smart-filters/pepperi-addons-ngx-lib-smart-filters.metadata.json +1 -1
- package/smart-filters/public-api.d.ts +1 -0
- package/smart-filters/smart-filters.component.theme.scss +6 -7
- package/smart-filters/text-filter/text-filter.component.d.ts +17 -0
- package/src/assets/i18n/en.ngx-lib.json +2 -1
- package/src/core/style/abstracts/breakpoints.scss +4 -2
- package/src/core/style/abstracts/functions.scss +233 -216
- package/src/core/style/abstracts/mixins.scss +191 -188
- package/src/core/style/base/base.scss +125 -124
- package/src/core/style/base/grids.scss +1 -1
- package/src/core/style/base/typography.scss +66 -62
- package/src/core/style/components/button.scss +57 -60
- package/src/core/style/components/checkbox.scss +41 -38
- package/src/core/style/components/datetime.scss +182 -22
- package/src/core/style/components/file.scss +28 -18
- package/src/core/style/components/general.scss +180 -278
- package/src/core/style/components/input.scss +21 -24
- package/src/core/style/components/quantity-selector.scss +15 -12
- package/src/core/style/components/radio-button.scss +22 -38
- package/src/core/style/components/select.scss +184 -182
- package/src/core/style/components/signature.scss +14 -12
- package/src/core/style/components/splitter.scss +58 -55
- package/src/core/style/components/textarea.scss +8 -9
- package/textarea/pepperi-addons-ngx-lib-textarea.metadata.json +1 -1
- package/textarea/textarea.component.d.ts +1 -0
- package/textarea/textarea.component.theme.scss +3 -2
- package/textbox/pepperi-addons-ngx-lib-textbox.metadata.json +1 -1
- package/textbox/textbox.component.theme.scss +1 -1
- package/theming.scss +50 -144
- package/top-bar/pepperi-addons-ngx-lib-top-bar.metadata.json +1 -1
- package/top-bar/top-bar.component.theme.scss +7 -7
- package/form/form.component.theme.scss +0 -2
- package/form/internal-button.component.theme.scss +0 -2
- package/form/internal-menu.component.theme.scss +0 -3
- package/list/list-actions.component.theme.scss +0 -3
- package/list/list-carousel.component.theme.scss +0 -9
- package/list/list-chooser.component.theme.scss +0 -3
- package/list/list-pager.component.theme.scss +0 -3
- package/list/list-sorting.component.theme.scss +0 -3
- package/list/list-views.component.theme.scss +0 -3
- package/list/list.component.theme.scss +0 -5
- package/list/list_old.component.theme.scss +0 -5
- package/menu/menu.component.theme.scss +0 -2
- package/search/search.component.theme.scss +0 -3
- package/textbox-icon/textbox-icon.component.theme.scss +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pepperi-addons-ngx-lib-list.js","sources":["../../../projects/ngx-lib/list/virtual-scroller.ts","../../../projects/ngx-lib/list/list.model.ts","../../../projects/ngx-lib/list/list.component.ts","../../../projects/ngx-lib/list/list-actions.component.ts","../../../projects/ngx-lib/list/list-carousel.component.ts","../../../projects/ngx-lib/list/list-chooser.component.ts","../../../projects/ngx-lib/list/list-pager.component.ts","../../../projects/ngx-lib/list/list-sorting.component.ts","../../../projects/ngx-lib/list/list-total.component.ts","../../../projects/ngx-lib/list/list-views.component.ts","../../../projects/ngx-lib/list/list.pipes.ts","../../../projects/ngx-lib/list/list.module.ts","../../../projects/ngx-lib/list/public-api.ts","../../../projects/ngx-lib/list/pepperi-addons-ngx-lib-list.ts"],"sourcesContent":["import {\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tContentChild,\r\n\tElementRef,\r\n\tEventEmitter,\r\n\tInject,\r\n\tInput,\r\n\tNgModule,\r\n\tNgZone,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOptional,\r\n\tOutput,\r\n\tRenderer2,\r\n\tViewChild,\r\n} from '@angular/core';\r\n\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport * as tween from '@tweenjs/tween.js'\r\n\r\nexport interface VirtualScrollerDefaultOptions {\r\n\tcheckResizeInterval: number\r\n\tmodifyOverflowStyleOfParentScroll: boolean,\r\n\tresizeBypassRefreshThreshold: number,\r\n\tscrollAnimationTime: number;\r\n\tscrollDebounceTime: number;\r\n\tscrollThrottlingTime: number;\r\n\tscrollbarHeight?: number;\r\n\tscrollbarWidth?: number;\r\n\tstripedTable: boolean\r\n}\r\n\r\nexport function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY(): VirtualScrollerDefaultOptions {\r\n\treturn {\r\n\t\tcheckResizeInterval: 1000,\r\n\t\tmodifyOverflowStyleOfParentScroll: true,\r\n\t\tresizeBypassRefreshThreshold: 5,\r\n\t\tscrollAnimationTime: 750,\r\n\t\tscrollDebounceTime: 0,\r\n\t\tscrollThrottlingTime: 0,\r\n\t\tstripedTable: false\r\n\t};\r\n}\r\n\r\nexport interface WrapGroupDimensions {\r\n\tmaxChildSizePerWrapGroup: WrapGroupDimension[];\r\n\tnumberOfKnownWrapGroupChildSizes: number;\r\n\tsumOfKnownWrapGroupChildHeights: number;\r\n\tsumOfKnownWrapGroupChildWidths: number;\r\n}\r\n\r\nexport interface WrapGroupDimension {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titems: any[];\r\n}\r\n\r\nexport interface IDimensions {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titemCount: number;\r\n\titemsPerPage: number;\r\n\titemsPerWrapGroup: number;\r\n\tmaxScrollPosition: number;\r\n\tpageCount_fractional: number;\r\n\tscrollLength: number;\r\n\tviewportLength: number;\r\n\twrapGroupsPerPage: number;\r\n}\r\n\r\nexport type ScrollDirectionType = 'backward' | 'forward';\r\n\r\nexport interface IPageInfo {\r\n\tendIndex: number;\r\n\tendIndexWithBuffer: number;\r\n\tmaxScrollPosition: number;\r\n\tscrollEndPosition: number;\r\n\tscrollStartPosition: number;\r\n\tscrollDirection?: ScrollDirectionType;\r\n\tstartIndex: number;\r\n\tstartIndexWithBuffer: number;\r\n}\r\n\r\nexport interface IViewport extends IPageInfo {\r\n\tpadding: number;\r\n\tscrollLength: number;\r\n}\r\n\r\n@Component({\r\n\tselector: 'virtual-scroller,[virtualScroller]',\r\n\texportAs: 'virtualScroller',\r\n\ttemplate: `\r\n <div class=\"total-padding\" #invisiblePadding></div>\r\n <div class=\"scrollable-content\" #content>\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n\thost: {\r\n\t\t'[class.horizontal]': \"horizontal\",\r\n\t\t'[class.vertical]': \"!horizontal\",\r\n\t\t'[class.selfScroll]': \"!parentScroll\",\r\n\t\t'[class.rtl]': \"RTL\"\r\n\t},\r\n\tstyles: [`\r\n :host {\r\n position: relative;\r\n\t \tdisplay: block;\r\n -webkit-overflow-scrolling: touch;\r\n }\r\n\t\t:host.horizontal.selfScroll {\r\n overflow-y: visible;\r\n overflow-x: auto;\r\n\t\t}\r\n\t\t:host.horizontal.selfScroll.rtl {\r\n\t\t\ttransform: scaleX(-1);\r\n\t\t}\r\n\t\t:host.vertical.selfScroll {\r\n overflow-y: auto;\r\n overflow-x: visible;\r\n\t\t}\r\n .scrollable-content {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100vw;\r\n max-height: 100vh;\r\n position: absolute;\r\n }\r\n\t\t.scrollable-content ::ng-deep > * {\r\n\t\t\tbox-sizing: border-box;\r\n\t\t}\r\n\t\t:host.horizontal {\r\n\t\t\twhite-space: nowrap;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content {\r\n\t\t\tdisplay: flex;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content ::ng-deep > * {\r\n\t\t\tflex-shrink: 0;\r\n\t\t\tflex-grow: 0;\r\n\t\t\twhite-space: initial;\r\n\t\t}\r\n\t\t:host.horizontal.rtl .scrollable-content ::ng-deep > * {\r\n\t\t\ttransform:scaleX(-1);\r\n\t\t}\r\n .total-padding {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n height: 1px;\r\n width: 1px;\r\n transform-origin: 0 0;\r\n opacity: 0;\r\n }\r\n :host.horizontal .total-padding {\r\n height: 100%;\r\n }\r\n `]\r\n})\r\nexport class VirtualScrollerComponent implements OnInit, OnChanges, OnDestroy {\r\n\tpublic viewPortItems: any[];\r\n\tpublic window = window;\r\n\r\n\tpublic get viewPortInfo(): IPageInfo {\r\n\t\tconst pageInfo: IViewport = this.previousViewPort || <any>{};\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex || 0,\r\n\t\t\tendIndex: pageInfo.endIndex || 0,\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n\t\t\tscrollDirection: pageInfo.scrollDirection || 'forward',\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer || 0,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected _disable = false;\r\n\t@Input()\r\n\tpublic get disable(): boolean {\r\n\t\treturn this._disable;\r\n\t}\r\n\tpublic set disable(value: boolean) {\r\n\t\tif (this._disable === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._disable = value;\r\n\t\tif (this._disable) {\r\n\t\t\tthis.removeScrollEventHandlers();\r\n\t\t} else {\r\n\t\t\tthis.addScrollEventHandlers();\r\n\t\t}\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic executeRefreshOutsideAngularZone = false;\r\n\r\n\tprotected _enableUnequalChildrenSizes = false;\r\n\t@Input()\r\n\tpublic get enableUnequalChildrenSizes(): boolean {\r\n\t\treturn this._enableUnequalChildrenSizes;\r\n\t}\r\n\tpublic set enableUnequalChildrenSizes(value: boolean) {\r\n\t\tif (this._enableUnequalChildrenSizes === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._enableUnequalChildrenSizes = value;\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic RTL = false;\r\n\r\n\t@Input()\r\n\tpublic useMarginInsteadOfTranslate = false;\r\n\r\n\t@Input()\r\n\tpublic modifyOverflowStyleOfParentScroll: boolean;\r\n\r\n\t@Input()\r\n\tpublic stripedTable: boolean;\r\n\r\n\t@Input()\r\n\tpublic scrollbarWidth: number;\r\n\r\n\t@Input()\r\n\tpublic scrollbarHeight: number;\r\n\r\n\t@Input()\r\n\tpublic childWidth: number;\r\n\r\n\t@Input()\r\n\tpublic childHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildWidth: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportWidth = 1920;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportHeight = 1080;\r\n\r\n\tprotected _bufferAmount: number;\r\n\t@Input()\r\n\tpublic get bufferAmount(): number {\r\n\t\tif (typeof (this._bufferAmount) === 'number' && this._bufferAmount >= 0) {\r\n\t\t\treturn this._bufferAmount;\r\n\t\t} else {\r\n\t\t\treturn this.enableUnequalChildrenSizes ? 5 : 0;\r\n\t\t}\r\n\t}\r\n\tpublic set bufferAmount(value: number) {\r\n\t\tthis._bufferAmount = value;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic scrollAnimationTime: number;\r\n\r\n\t@Input()\r\n\tpublic resizeBypassRefreshThreshold: number;\r\n\r\n\tprotected _scrollThrottlingTime: number;\r\n\t@Input()\r\n\tpublic get scrollThrottlingTime(): number {\r\n\t\treturn this._scrollThrottlingTime;\r\n\t}\r\n\tpublic set scrollThrottlingTime(value: number) {\r\n\t\tthis._scrollThrottlingTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected _scrollDebounceTime: number;\r\n\t@Input()\r\n\tpublic get scrollDebounceTime(): number {\r\n\t\treturn this._scrollDebounceTime;\r\n\t}\r\n\tpublic set scrollDebounceTime(value: number) {\r\n\t\tthis._scrollDebounceTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected onScroll: () => void;\r\n\tprotected updateOnScrollFunction(): void {\r\n\t\tif (this.scrollDebounceTime) {\r\n\t\t\tthis.onScroll = <any>this.debounce(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollDebounceTime);\r\n\t\t}\r\n\t\telse if (this.scrollThrottlingTime) {\r\n\t\t\tthis.onScroll = <any>this.throttleTrailing(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollThrottlingTime);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.onScroll = () => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprotected checkScrollElementResizedTimer: number;\r\n\tprotected _checkResizeInterval: number;\r\n\t@Input()\r\n\tpublic get checkResizeInterval(): number {\r\n\t\treturn this._checkResizeInterval;\r\n\t}\r\n\tpublic set checkResizeInterval(value: number) {\r\n\t\tif (this._checkResizeInterval === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._checkResizeInterval = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tprotected _items: any[] = [];\r\n\t@Input()\r\n\tpublic get items(): any[] {\r\n\t\treturn this._items;\r\n\t}\r\n\tpublic set items(value: any[]) {\r\n\t\tif (value === this._items) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._items = value || [];\r\n\t\tthis.refresh_internal(true);\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic compareItems: (item1: any, item2: any) => boolean = (item1: any, item2: any) => item1 === item2;\r\n\r\n\tprotected _horizontal: boolean;\r\n\t@Input()\r\n\tpublic get horizontal(): boolean {\r\n\t\treturn this._horizontal;\r\n\t}\r\n\tpublic set horizontal(value: boolean) {\r\n\t\tthis._horizontal = value;\r\n\t\tthis.updateDirection();\r\n\t}\r\n\r\n\tprotected revertParentOverscroll(): void {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (scrollElement && this.oldParentScrollOverflow) {\r\n\t\t\tscrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n\t\t\tscrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n\t\t}\r\n\r\n\t\tthis.oldParentScrollOverflow = undefined;\r\n\t}\r\n\r\n\tprotected oldParentScrollOverflow: { x: string, y: string };\r\n\tprotected _parentScroll: Element | Window;\r\n\t@Input()\r\n\tpublic get parentScroll(): Element | Window {\r\n\t\treturn this._parentScroll;\r\n\t}\r\n\tpublic set parentScroll(value: Element | Window) {\r\n\t\tif (this._parentScroll === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.revertParentOverscroll();\r\n\t\tthis._parentScroll = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n\t\t\tthis.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n\t\t\tscrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n\t\t\tscrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _lastChildRect: ClientRect;\r\n\r\n\t@Output()\r\n\tpublic vsChildRectChange: EventEmitter<ClientRect> = new EventEmitter<ClientRect>();\r\n\r\n\t@Output()\r\n\tpublic vsUpdate: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n\r\n\t@Output()\r\n\tpublic vsChange: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsStart: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsEnd: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@ViewChild('content', { read: ElementRef, static: true })\r\n\tpublic contentElementRef: ElementRef;\r\n\r\n\t@ViewChild('invisiblePadding', { read: ElementRef, static: true })\r\n\tprotected invisiblePaddingElementRef: ElementRef;\r\n\r\n\t@ContentChild('header', { read: ElementRef, static: false })\r\n\tprotected headerElementRef: ElementRef;\r\n\r\n\t@ContentChild('container', { read: ElementRef, static: false })\r\n\tprotected containerElementRef: ElementRef;\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tpublic ngOnDestroy(): void {\r\n\t\tthis.removeScrollEventHandlers();\r\n\t\tthis.revertParentOverscroll();\r\n\t}\r\n\r\n\tpublic ngOnChanges(changes: any): void {\r\n\t\tconst indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n\t\tthis.cachedItemsLength = this.items.length;\r\n\r\n\t\tconst firstRun: boolean = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n\t\tthis.refresh_internal(indexLengthChanged || firstRun);\r\n\t}\r\n\r\n\tpublic ngDoCheck(): void {\r\n\t\tif (this.cachedItemsLength !== this.items.length) {\r\n\t\t\tthis.cachedItemsLength = this.items.length;\r\n\t\t\tthis.refresh_internal(true);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {\r\n\t\t\tlet itemsArrayChanged = false;\r\n\t\t\tfor (let i = 0; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\tif (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {\r\n\t\t\t\t\titemsArrayChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (itemsArrayChanged) {\r\n\t\t\t\tthis.refresh_internal(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic refresh(): void {\r\n\t\tthis.refresh_internal(true);\r\n\t}\r\n\r\n\tpublic invalidateAllCachedMeasurements(): void {\r\n\t\tthis.wrapGroupDimensions = {\r\n\t\t\tmaxChildSizePerWrapGroup: [],\r\n\t\t\tnumberOfKnownWrapGroupChildSizes: 0,\r\n\t\t\tsumOfKnownWrapGroupChildWidths: 0,\r\n\t\t\tsumOfKnownWrapGroupChildHeights: 0\r\n\t\t};\r\n\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementForItem(item: any): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst index = this.items && this.items.indexOf(item);\r\n\t\t\tif (index >= 0) {\r\n\t\t\t\tthis.invalidateCachedMeasurementAtIndex(index);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementAtIndex(index: number): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n\t\t\tif (cachedMeasurement) {\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic scrollInto(item: any, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tconst index: number = this.items.indexOf(item);\r\n\t\tif (index === -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tlet maxRetries = 5;\r\n\r\n\t\tconst retryIfNeeded = () => {\r\n\t\t\t--maxRetries;\r\n\t\t\tif (maxRetries <= 0) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst dimensions = this.calculateDimensions();\r\n\t\t\tconst desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n\t\t\tif (this.previousViewPort.startIndex === desiredStartIndex) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n\t\t};\r\n\r\n\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n\t}\r\n\r\n\tprotected scrollToIndex_internal(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tlet scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n\t\tif (!alignToBeginning) {\r\n\t\t\tscroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n\t\t}\r\n\r\n\t\tthis.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToPosition(scrollPosition: number, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tscrollPosition += this.getElementsOffset();\r\n\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tlet animationRequest: number;\r\n\r\n\t\tif (this.currentTween) {\r\n\t\t\tthis.currentTween.stop();\r\n\t\t\tthis.currentTween = undefined;\r\n\t\t}\r\n\r\n\t\tif (!animationMilliseconds) {\r\n\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n\r\n\t\tconst newTween = new tween.Tween(tweenConfigObj)\r\n\t\t\t.to({ scrollPosition }, animationMilliseconds)\r\n\t\t\t.easing(tween.Easing.Quadratic.Out)\r\n\t\t\t.onUpdate((data) => {\r\n\t\t\t\tif (isNaN(data.scrollPosition)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t})\r\n\t\t\t.onStop(() => {\r\n\t\t\t\tcancelAnimationFrame(animationRequest);\r\n\t\t\t})\r\n\t\t\t.start();\r\n\r\n\t\tconst animate = (time?: number) => {\r\n\t\t\tif (!newTween[\"isPlaying\"]()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tnewTween.update(time);\r\n\t\t\tif (tweenConfigObj.scrollPosition === scrollPosition) {\r\n\t\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\t\tanimationRequest = requestAnimationFrame(animate);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tanimate();\r\n\t\tthis.currentTween = newTween;\r\n\t}\r\n\r\n\tprotected isAngularUniversalSSR: boolean;\r\n\r\n\tconstructor(\r\n\t\tprotected readonly element: ElementRef,\r\n\t\tprotected readonly renderer: Renderer2,\r\n\t\tprotected readonly zone: NgZone,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\r\n\t\t@Inject(PLATFORM_ID) platformId: any,\r\n\t\t@Optional() @Inject('virtual-scroller-default-options')\r\n\t\toptions: VirtualScrollerDefaultOptions\r\n\t) {\r\n\r\n\t\tthis.isAngularUniversalSSR = isPlatformServer(platformId);\r\n\r\n\t\tthis.checkResizeInterval = options.checkResizeInterval;\r\n\t\tthis.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;\r\n\t\tthis.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;\r\n\t\tthis.scrollAnimationTime = options.scrollAnimationTime;\r\n\t\tthis.scrollDebounceTime = options.scrollDebounceTime;\r\n\t\tthis.scrollThrottlingTime = options.scrollThrottlingTime;\r\n\t\tthis.scrollbarHeight = options.scrollbarHeight;\r\n\t\tthis.scrollbarWidth = options.scrollbarWidth;\r\n\t\tthis.stripedTable = options.stripedTable;\r\n\r\n\t\tthis.horizontal = false;\r\n\t\tthis.resetWrapGroupDimensions();\r\n\t}\r\n\r\n\tprotected getElementSize(element: HTMLElement): ClientRect {\r\n\t\tconst result = element.getBoundingClientRect();\r\n\t\tconst styles = getComputedStyle(element);\r\n\t\tconst marginTop = parseInt(styles['margin-top'], 10) || 0;\r\n\t\tconst marginBottom = parseInt(styles['margin-bottom'], 10) || 0;\r\n\t\tconst marginLeft = parseInt(styles['margin-left'], 10) || 0;\r\n\t\tconst marginRight = parseInt(styles['margin-right'], 10) || 0;\r\n\r\n\t\treturn {\r\n\t\t\ttop: result.top + marginTop,\r\n\t\t\tbottom: result.bottom + marginBottom,\r\n\t\t\tleft: result.left + marginLeft,\r\n\t\t\tright: result.right + marginRight,\r\n\t\t\twidth: result.width + marginLeft + marginRight,\r\n\t\t\theight: result.height + marginTop + marginBottom\r\n\t\t};\r\n\t}\r\n\r\n\tprotected previousScrollBoundingRect: ClientRect;\r\n\tprotected checkScrollElementResized(): void {\r\n\t\tconst boundingRect = this.getElementSize(this.getScrollElement());\r\n\r\n\t\tlet sizeChanged: boolean;\r\n\t\tif (!this.previousScrollBoundingRect) {\r\n\t\t\tsizeChanged = true;\r\n\t\t} else {\r\n\t\t\tconst widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n\t\t\tconst heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n\t\t\tsizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n\t\t}\r\n\r\n\t\tif (sizeChanged) {\r\n\t\t\tthis.previousScrollBoundingRect = boundingRect;\r\n\t\t\tif (boundingRect.width > 0 && boundingRect.height > 0) {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _invisiblePaddingProperty;\r\n\tprotected _offsetType;\r\n\tprotected _scrollType;\r\n\tprotected _pageOffsetType;\r\n\tprotected _childScrollDim;\r\n\tprotected _translateDir;\r\n\tprotected _marginDir;\r\n\tprotected updateDirection(): void {\r\n\t\tif (this.horizontal) {\r\n\t\t\tthis._childScrollDim = 'childWidth';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleX';\r\n\t\t\tthis._marginDir = 'margin-left';\r\n\t\t\tthis._offsetType = 'offsetLeft';\r\n\t\t\tthis._pageOffsetType = 'pageXOffset';\r\n\t\t\tthis._scrollType = 'scrollLeft';\r\n\t\t\tthis._translateDir = 'translateX';\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._childScrollDim = 'childHeight';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleY';\r\n\t\t\tthis._marginDir = 'margin-top';\r\n\t\t\tthis._offsetType = 'offsetTop';\r\n\t\t\tthis._pageOffsetType = 'pageYOffset';\r\n\t\t\tthis._scrollType = 'scrollTop';\r\n\t\t\tthis._translateDir = 'translateY';\r\n\t\t}\r\n\t}\r\n\r\n\tprotected debounce(func: () => void, wait: number, ...args): () => void {\r\n\t\tconst throttled = this.throttleTrailing(func, wait);\r\n\t\tconst result = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t\tthrottled.apply(this, args);\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected throttleTrailing(func: () => void, wait: number, ...args): () => void {\r\n\t\tlet timeout = undefined;\r\n\t\tlet _arguments = args;\r\n\t\tconst result = function () {\r\n\t\t\tconst _this = this;\r\n\t\t\t_arguments = args\r\n\r\n\t\t\tif (timeout) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (wait <= 0) {\r\n\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t} else {\r\n\t\t\t\ttimeout = setTimeout(function () {\r\n\t\t\t\t\ttimeout = undefined;\r\n\t\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t\t}, wait);\r\n\t\t\t}\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tif (timeout) {\r\n\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\ttimeout = undefined;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatedScrollbarWidth = 0;\r\n\tprotected calculatedScrollbarHeight = 0;\r\n\r\n\tprotected padding = 0;\r\n\tprotected previousViewPort: IViewport = <any>{};\r\n\tprotected currentTween: tween.Tween;\r\n\tprotected cachedItemsLength: number;\r\n\r\n\tprotected disposeScrollHandler: () => void | undefined;\r\n\tprotected disposeResizeHandler: () => void | undefined;\r\n\r\n\tprotected refresh_internal(itemsArrayModified: boolean, refreshCompletedCallback: () => void = undefined, maxRunTimes = 2): void {\r\n\t\t//note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n\t\t//The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n\t\t//The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.\r\n\t\t//Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.\r\n\r\n\t\tif (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {\r\n\t\t\t//if items were prepended, scroll forward to keep same items visible\r\n\t\t\tconst oldViewPort = this.previousViewPort;\r\n\t\t\tconst oldViewPortItems = this.viewPortItems;\r\n\r\n\t\t\tconst oldRefreshCompletedCallback = refreshCompletedCallback;\r\n\t\t\trefreshCompletedCallback = () => {\r\n\t\t\t\tconst scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;\r\n\t\t\t\tif (scrollLengthDelta > 0 && this.viewPortItems) {\r\n\t\t\t\t\tconst oldStartItem = oldViewPortItems[0];\r\n\t\t\t\t\tconst oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));\r\n\t\t\t\t\tif (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {\r\n\t\t\t\t\t\tlet itemOrderChanged = false;\r\n\t\t\t\t\t\tfor (let i = 1; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\t\t\t\tif (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {\r\n\t\t\t\t\t\t\t\titemOrderChanged = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!itemOrderChanged) {\r\n\t\t\t\t\t\t\tthis.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (oldRefreshCompletedCallback) {\r\n\t\t\t\t\toldRefreshCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\trequestAnimationFrame(() => {\r\n\r\n\t\t\t\tif (itemsArrayModified) {\r\n\t\t\t\t\tthis.resetWrapGroupDimensions();\r\n\t\t\t\t}\r\n\t\t\t\tconst viewport = this.calculateViewport();\r\n\r\n\t\t\t\tconst startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;\r\n\t\t\t\tconst endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;\r\n\t\t\t\tconst scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;\r\n\t\t\t\tconst paddingChanged = viewport.padding !== this.previousViewPort.padding;\r\n\t\t\t\tconst scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;\r\n\r\n\t\t\t\tconst scrollDirection: ScrollDirectionType = this.previousViewPort.endIndex <= viewport.endIndex ? 'forward' : 'backward';\r\n\t\t\t\tthis.previousViewPort = viewport;\r\n\r\n\t\t\t\tif (scrollLengthChanged) {\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'transform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'webkitTransform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (paddingChanged) {\r\n\t\t\t\t\tif (this.useMarginInsteadOfTranslate) {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.headerElementRef) {\r\n\t\t\t\t\tconst scrollPosition = this.getScrollElement()[this._scrollType];\r\n\t\t\t\t\tconst containerOffset = this.getElementsOffset();\r\n\t\t\t\t\tconst offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst changeEventArg: IPageInfo = (startChanged || endChanged) ? {\r\n\t\t\t\t\tstartIndex: viewport.startIndex,\r\n\t\t\t\t\tendIndex: viewport.endIndex,\r\n\t\t\t\t\tscrollStartPosition: viewport.scrollStartPosition,\r\n\t\t\t\t\tscrollEndPosition: viewport.scrollEndPosition,\r\n\t\t\t\t\tscrollDirection: scrollDirection,\r\n\t\t\t\t\tstartIndexWithBuffer: viewport.startIndexWithBuffer,\r\n\t\t\t\t\tendIndexWithBuffer: viewport.endIndexWithBuffer,\r\n\t\t\t\t\tmaxScrollPosition: viewport.maxScrollPosition,\r\n\t\t\t\t} : undefined;\r\n\r\n\r\n\t\t\t\tif (startChanged || endChanged || scrollPositionChanged) {\r\n\t\t\t\t\tconst handleChanged = () => {\r\n\t\t\t\t\t\t// update the scroll list to trigger re-render of components in viewport\r\n\t\t\t\t\t\tthis.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n\t\t\t\t\t\tthis.vsUpdate.emit(this.viewPortItems);\r\n\r\n\t\t\t\t\t\tif (startChanged) {\r\n\t\t\t\t\t\t\tthis.vsStart.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (endChanged) {\r\n\t\t\t\t\t\t\tthis.vsEnd.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (startChanged || endChanged) {\r\n\t\t\t\t\t\t\tthis.changeDetectorRef.markForCheck();\r\n\t\t\t\t\t\t\tthis.vsChange.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (maxRunTimes > 0) {\r\n\t\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\r\n\t\t\t\t\tif (this.executeRefreshOutsideAngularZone) {\r\n\t\t\t\t\t\thandleChanged();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.zone.run(handleChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getScrollElement(): HTMLElement {\r\n\t\treturn this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n\t}\r\n\r\n\tprotected addScrollEventHandlers(): void {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tthis.removeScrollEventHandlers();\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);\r\n\t\t\t\tthis.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);\r\n\t\t\t\tif (this._checkResizeInterval > 0) {\r\n\t\t\t\t\tthis.checkScrollElementResizedTimer = <any>setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected removeScrollEventHandlers(): void {\r\n\t\tif (this.checkScrollElementResizedTimer) {\r\n\t\t\tclearInterval(this.checkScrollElementResizedTimer);\r\n\t\t}\r\n\r\n\t\tif (this.disposeScrollHandler) {\r\n\t\t\tthis.disposeScrollHandler();\r\n\t\t\tthis.disposeScrollHandler = undefined;\r\n\t\t}\r\n\r\n\t\tif (this.disposeResizeHandler) {\r\n\t\t\tthis.disposeResizeHandler();\r\n\t\t\tthis.disposeResizeHandler = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getElementsOffset(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet offset = 0;\r\n\r\n\t\tif (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n\t\t\toffset += this.containerElementRef.nativeElement[this._offsetType];\r\n\t\t}\r\n\r\n\t\tif (this.parentScroll) {\r\n\t\t\tconst scrollElement = this.getScrollElement();\r\n\t\t\tconst elementClientRect = this.getElementSize(this.element.nativeElement);\r\n\t\t\tconst scrollClientRect = this.getElementSize(scrollElement);\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\toffset += elementClientRect.left - scrollClientRect.left;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\toffset += elementClientRect.top - scrollClientRect.top;\r\n\t\t\t}\r\n\r\n\t\t\tif (!(this.parentScroll instanceof Window)) {\r\n\t\t\t\toffset += scrollElement[this._scrollType];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn offset;\r\n\t}\r\n\r\n\tprotected countItemsPerWrapGroup(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n\t\t}\r\n\r\n\t\tconst propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n\t\tconst children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\r\n\r\n\t\tconst childrenLength = children ? children.length : 0;\r\n\t\tif (childrenLength === 0) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tconst firstOffset = children[0][propertyName];\r\n\t\tlet result = 1;\r\n\t\twhile (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n\t\t\t++result;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected getScrollStartPosition(): number {\r\n\t\tlet windowScrollValue = undefined;\r\n\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\twindowScrollValue = window[this._pageOffsetType];\r\n\t\t}\r\n\r\n\t\treturn windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n\t}\r\n\r\n\tprotected minMeasuredChildWidth: number;\r\n\tprotected minMeasuredChildHeight: number;\r\n\r\n\tprotected wrapGroupDimensions: WrapGroupDimensions;\r\n\r\n\tprotected resetWrapGroupDimensions(): void {\r\n\t\tconst oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n\t\tthis.invalidateAllCachedMeasurements();\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst itemsPerWrapGroup: number = this.countItemsPerWrapGroup();\r\n\t\tfor (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n\t\t\tconst oldWrapGroupDimension: WrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\tif (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet itemsChanged = false;\r\n\t\t\tconst arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n\t\t\tfor (let i = 0; i < itemsPerWrapGroup; ++i) {\r\n\t\t\t\tif (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n\t\t\t\t\titemsChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!itemsChanged) {\r\n\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected calculateDimensions(): IDimensions {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tconst maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n\t\tthis.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n\t\tthis.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n\r\n\t\tlet viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n\t\tlet viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n\r\n\t\tconst content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n\r\n\t\tconst itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n\t\tlet wrapGroupsPerPage;\r\n\r\n\t\tlet defaultChildWidth;\r\n\t\tlet defaultChildHeight;\r\n\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\tviewportWidth = this.ssrViewportWidth;\r\n\t\t\tviewportHeight = this.ssrViewportHeight;\r\n\t\t\tdefaultChildWidth = this.ssrChildWidth;\r\n\t\t\tdefaultChildHeight = this.ssrChildHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t}\r\n\t\telse if (!this.enableUnequalChildrenSizes) {\r\n\t\t\tif (content.children.length > 0) {\r\n\t\t\t\tif (!this.childWidth || !this.childHeight) {\r\n\t\t\t\t\tif (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildWidth = viewportWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildHeight = viewportHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst child = content.children[0];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\t\t\t\tthis.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n\t\t\t\tthis.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n\r\n\t\t\t\t// Added for getting the child height (for card view, return all the clientRect object).\r\n\t\t\t\tif (this._lastChildRect?.height !== clientRect?.height ||\r\n\t\t\t\t\tthis._lastChildRect?.width !== clientRect?.width) {\r\n\t\t\t\t\tthis._lastChildRect = clientRect;\r\n\t\t\t\t\tthis.vsChildRectChange.emit(clientRect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdefaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t} else {\r\n\t\t\tlet scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n\r\n\t\t\tlet arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n\t\t\tlet wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n\r\n\t\t\tlet maxWidthForWrapGroup = 0;\r\n\t\t\tlet maxHeightForWrapGroup = 0;\r\n\t\t\tlet sumOfVisibleMaxWidths = 0;\r\n\t\t\tlet sumOfVisibleMaxHeights = 0;\r\n\t\t\twrapGroupsPerPage = 0;\r\n\r\n\t\t\tfor (let i = 0; i < content.children.length; ++i) {\r\n\t\t\t\t++arrayStartIndex;\r\n\t\t\t\tconst child = content.children[i];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\r\n\t\t\t\tmaxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n\t\t\t\tmaxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n\r\n\t\t\t\tif (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n\t\t\t\t\tconst oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\t\t\tif (oldValue) {\r\n\t\t\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\tconst items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n\t\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n\t\t\t\t\t\tchildWidth: maxWidthForWrapGroup,\r\n\t\t\t\t\t\tchildHeight: maxHeightForWrapGroup,\r\n\t\t\t\t\t\titems: items\r\n\t\t\t\t\t};\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n\r\n\t\t\t\t\tif (this.horizontal) {\r\n\t\t\t\t\t\tlet maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlet maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++wrapGroupIndex;\r\n\r\n\t\t\t\t\tmaxWidthForWrapGroup = 0;\r\n\t\t\t\t\tmaxHeightForWrapGroup = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tconst averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tdefaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\tif (viewportWidth > sumOfVisibleMaxWidths) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (viewportHeight > sumOfVisibleMaxHeights) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst itemCount = this.items.length;\r\n\t\tconst itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n\t\tconst pageCount_fractional = itemCount / itemsPerPage;\r\n\t\tconst numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n\r\n\t\tlet scrollLength = 0;\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tlet numUnknownChildSizes = 0;\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\tscrollLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tscrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\t\t} else {\r\n\t\t\tscrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n\t\t}\r\n\r\n\t\tif (this.headerElementRef) {\r\n\t\t\tscrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n\t\t}\r\n\r\n\t\tconst viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n\t\tconst maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n\r\n\t\treturn {\r\n\t\t\tchildHeight: defaultChildHeight,\r\n\t\t\tchildWidth: defaultChildWidth,\r\n\t\t\titemCount: itemCount,\r\n\t\t\titemsPerPage: itemsPerPage,\r\n\t\t\titemsPerWrapGroup: itemsPerWrapGroup,\r\n\t\t\tmaxScrollPosition: maxScrollPosition,\r\n\t\t\tpageCount_fractional: pageCount_fractional,\r\n\t\t\tscrollLength: scrollLength,\r\n\t\t\tviewportLength: viewportLength,\r\n\t\t\twrapGroupsPerPage: wrapGroupsPerPage,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected cachedPageSize = 0;\r\n\tprotected previousScrollNumberElements = 0;\r\n\r\n\tprotected calculatePadding(arrayStartIndexWithBuffer: number, dimensions: IDimensions): number {\r\n\t\tif (dimensions.itemCount === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\tconst startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes) {\r\n\t\t\treturn defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n\t\t}\r\n\r\n\t\tlet numUnknownChildSizes = 0;\r\n\t\tlet result = 0;\r\n\t\tfor (let i = 0; i < startingWrapGroupIndex; ++i) {\r\n\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\tif (childSize) {\r\n\t\t\t\tresult += childSize;\r\n\t\t\t} else {\r\n\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t}\r\n\t\t}\r\n\t\tresult += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatePageInfo(scrollPosition: number, dimensions: IDimensions): IPageInfo {\r\n\t\tlet scrollPercentage = 0;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n\t\t\tlet totalScrolledLength = 0;\r\n\t\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\ttotalScrolledLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttotalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (scrollPosition < totalScrolledLength) {\r\n\t\t\t\t\tscrollPercentage = i / numberOfWrapGroups;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tscrollPercentage = scrollPosition / dimensions.scrollLength;\r\n\t\t}\r\n\r\n\t\tconst startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n\r\n\t\tconst maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n\t\tlet arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n\t\tarrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n\r\n\t\tif (this.stripedTable) {\r\n\t\t\tconst bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n\t\t\tif (arrayStartIndex % bufferBoundary !== 0) {\r\n\t\t\t\tarrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n\t\tconst endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n\t\tif (endIndexWithinWrapGroup > 0) {\r\n\t\t\tarrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n\t\t}\r\n\r\n\t\tif (isNaN(arrayStartIndex)) {\r\n\t\t\tarrayStartIndex = 0;\r\n\t\t}\r\n\t\tif (isNaN(arrayEndIndex)) {\r\n\t\t\tarrayEndIndex = 0;\r\n\t\t}\r\n\r\n\t\tarrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n\t\tarrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n\r\n\t\tconst bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n\t\tconst startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n\t\tconst endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: arrayStartIndex,\r\n\t\t\tendIndex: arrayEndIndex,\r\n\t\t\tstartIndexWithBuffer: startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: endIndexWithBuffer,\r\n\t\t\tscrollStartPosition: scrollPosition,\r\n\t\t\tscrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n\t\t\tmaxScrollPosition: dimensions.maxScrollPosition\r\n\t\t};\r\n\t}\r\n\r\n\tprotected calculateViewport(): IViewport {\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tconst offset = this.getElementsOffset();\r\n\r\n\t\tlet scrollStartPosition = this.getScrollStartPosition();\r\n\t\tif (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n\t\t\tscrollStartPosition = dimensions.scrollLength;\r\n\t\t} else {\r\n\t\t\tscrollStartPosition -= offset;\r\n\t\t}\r\n\t\tscrollStartPosition = Math.max(0, scrollStartPosition);\r\n\r\n\t\tconst pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n\t\tconst newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n\t\tconst newScrollLength = dimensions.scrollLength;\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex,\r\n\t\t\tendIndex: pageInfo.endIndex,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n\t\t\tpadding: Math.round(newPadding),\r\n\t\t\tscrollLength: Math.round(newScrollLength),\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition,\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition\r\n\t\t};\r\n\t}\r\n}\r\n\r\n@NgModule({\r\n\texports: [VirtualScrollerComponent],\r\n\tdeclarations: [VirtualScrollerComponent],\r\n\timports: [CommonModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: 'virtual-scroller-default-options',\r\n\t\t\tuseFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY\r\n\t\t}\r\n\t]\r\n})\r\nexport class VirtualScrollerModule { }","import { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\n\nexport type PepListSelectionType =\n | 'none'\n | 'single'\n | 'multi';\n\nexport type PepListPagerType = 'pages' | 'scroll';\n\nexport type PepListViewType = '' | 'cards' | 'lines' | 'table'; // | 'map';\n\nexport type PepListCardSizeType = 'sm' | 'md';\n\nexport interface IPepListItemClickEvent {\n source: ObjectsDataRow;\n viewType: PepListViewType;\n}\n\nexport class PepSelectionData {\n selectionType: number;\n rows: Array<any>;\n rowTypes: Array<any>;\n}\n\nexport interface IPepListLoadItemsEvent {\n fromIndex: number;\n toIndex: number;\n // updateItemsFunc: () => void; //() => any; \n}\n\nexport interface IPepListLoadPageEvent {\n pageIndex: number;\n pageSize: number;\n // updatePageFunc: () => void; //() => any; \n}\n\nexport interface IPepListStartIndexChangeEvent {\n startIndex: number;\n}\n\nexport const DEFAULT_PAGE_SIZE = 50;\n\nexport interface IPepListSortingChangeEvent {\n sortBy: string;\n isAsc: boolean;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n Renderer2,\n ViewChild,\n ElementRef,\n ChangeDetectorRef,\n OnDestroy,\n OnChanges,\n NgZone,\n} from '@angular/core';\nimport { delay } from 'rxjs/operators';\nimport {\n PepLayoutService,\n PepScreenSizeType,\n PepSessionService,\n UIControl,\n UIControlField,\n FIELD_TYPE,\n ObjectsDataRow,\n} from '@pepperi-addons/ngx-lib';\nimport {\n IPepFormFieldValueChangeEvent,\n IPepFormFieldClickEvent,\n} from '@pepperi-addons/ngx-lib/form';\n\nimport { VirtualScrollerComponent, IPageInfo } from './virtual-scroller';\n\nimport {\n IPepListLoadItemsEvent,\n IPepListSortingChangeEvent,\n IPepListItemClickEvent,\n PepListSelectionType,\n PepListViewType,\n PepSelectionData,\n PepListPagerType,\n IPepListLoadPageEvent,\n DEFAULT_PAGE_SIZE,\n IPepListStartIndexChangeEvent,\n PepListCardSizeType,\n} from './list.model';\nimport {\n IPepListPagerChangeEvent,\n PepListPagerComponent,\n} from './list-pager.component';\n\nimport * as tween from '@tweenjs/tween.js';\n\n@Component({\n selector: 'pep-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n host: {\n '(window:resize)': 'onWinResize($event)',\n },\n // changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PepListComponent implements OnInit, OnChanges, OnDestroy {\n static TOP_ITEMS_DEFAULT = 100;\n static TOP_ITEMS_TABLE = 100;\n static TOP_ITEMS_THUMBNAILS = 100;\n static TOP_ITEMS_ARRAY = 2500;\n\n static SELECTED_ITEMS_STATE_KEY = 'SelectedItems';\n static UN_SELECTED_ITEMS_STATE_KEY = 'UnSelectedItems';\n static ALL_SELECTED_STATE_KEY = 'AllSelected';\n static SORT_BY_STATE_KEY = 'SortBy';\n static ASCENDING_STATE_KEY = 'IsAscending';\n\n static MINIMUM_COLUMN_WIDTH = 48;\n\n @Input() noDataFoundMsg: string = null;\n @Input() selectionTypeForActions: PepListSelectionType = 'multi';\n @Input() showCardSelection = false;\n @Input() hideAllSelectionInMulti = false;\n\n @Input() cardSize: PepListCardSizeType = 'md';\n private _viewType: PepListViewType = '';\n @Input()\n set viewType(value: PepListViewType) {\n this._viewType = value;\n this.isTable = value === 'table';\n }\n get viewType(): PepListViewType {\n return this._viewType;\n }\n\n @Input() firstFieldAsLink = false;\n @Input() supportSorting = true;\n @Input() supportResizing = true;\n\n private _parentScroll: Element | Window = null;\n @Input()\n set parentScroll(value: Element | Window) {\n this._parentScroll = value;\n }\n get parentScroll(): Element | Window {\n return this._parentScroll;\n }\n\n @Input() disabled = false;\n\n private _lockEvents = false;\n @Input()\n set lockEvents(value: boolean) {\n this._lockEvents = value;\n\n if (this._lockEvents) {\n this.renderer.addClass(this.hostElement.nativeElement, 'lock-events');\n } else {\n this.renderer.removeClass(this.hostElement.nativeElement, 'lock-events');\n }\n }\n get lockEvents(): boolean {\n return this._lockEvents;\n }\n\n @Input() lockItemInnerEvents = false;\n @Input() printMode = false;\n @Input() isReport = false;\n @Input() totalsRow = [];\n @Input() pagerType: PepListPagerType = 'scroll';\n @Input() pageSize: number = DEFAULT_PAGE_SIZE;\n @Input() pageIndex = 0;\n // @Input() startIndex = 0;\n\n @Input() scrollAnimationTime = 500;\n @Input() scrollDebounceTime = 0;\n @Input() scrollThrottlingTime = 0;\n\n private _useAsWebComponent = false;\n @Input()\n set useAsWebComponent(value: boolean) {\n this._useAsWebComponent = value;\n if (value) {\n this.exportFunctionsOnHostElement();\n }\n }\n get useAsWebComponent(): boolean {\n return this._useAsWebComponent;\n }\n\n @Output()\n itemClick: EventEmitter<IPepListItemClickEvent> = new EventEmitter<IPepListItemClickEvent>();\n\n @Output()\n fieldClick: EventEmitter<IPepFormFieldClickEvent> = new EventEmitter<IPepFormFieldClickEvent>();\n\n @Output()\n valueChange: EventEmitter<IPepFormFieldValueChangeEvent> = new EventEmitter<IPepFormFieldValueChangeEvent>();\n\n @Output()\n sortingChange: EventEmitter<IPepListSortingChangeEvent> = new EventEmitter<IPepListSortingChangeEvent>();\n\n @Output()\n selectedItemsChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Output()\n selectedItemChange: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n selectAllClick: EventEmitter<any> = new EventEmitter<any>();\n\n // @Output()\n // singleActionClick: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n listLoad: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n loadItems: EventEmitter<IPepListLoadItemsEvent> = new EventEmitter<IPepListLoadItemsEvent>();\n\n @Output()\n loadPage: EventEmitter<IPepListLoadPageEvent> = new EventEmitter<IPepListLoadPageEvent>();\n\n @Output()\n startIndexChange: EventEmitter<IPepListStartIndexChangeEvent> = new EventEmitter<IPepListStartIndexChangeEvent>();\n\n @ViewChild(VirtualScrollerComponent) private virtualScroller: VirtualScrollerComponent;\n @ViewChild('selectAllCB') selectAllCB: any;\n\n private _layout: UIControl = null;\n get layout(): UIControl {\n return this._layout;\n }\n\n totalRows = -1;\n isTable = false;\n private hasColumnWidthOfTypePercentage = true;\n\n private _items: Array<ObjectsDataRow> = null;\n get items(): Array<ObjectsDataRow> {\n return this._items;\n }\n\n private itemsCounter = 0;\n\n currentPageItems: Array<ObjectsDataRow>;\n\n SEPARATOR = ',';\n isAllSelected = false;\n selectedItems = new Map<string, string>();\n unSelectedItems = new Map<string, string>();\n\n private currentTween: any;\n\n selectedItemId = '';\n hoveredItemId = '';\n\n private containerWidth = 0;\n private tableScrollWidth = 0;\n\n private _loadingItemsFromApi = false;\n get loadingItemsFromApi() {\n return this._loadingItemsFromApi;\n }\n\n screenSize: PepScreenSizeType;\n deviceHasMouse = false;\n\n // For resize\n pressedColumn = '';\n startX = 0;\n startWidth = 0;\n tableStartWidth = 0;\n\n // For sorting\n isAsc = true;\n sortBy = '';\n isUserSelected = false;\n checkForChanges: any = null;\n calculatedObjectHeight: string;\n\n constructor(\n private hostElement: ElementRef,\n private layoutService: PepLayoutService,\n private sessionService: PepSessionService,\n private cd: ChangeDetectorRef,\n private renderer: Renderer2,\n private zone: NgZone\n ) {\n // this.nativeWindow = window;\n this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n this.screenSize = size;\n });\n\n this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n this.deviceHasMouse = deviceHasMouse;\n });\n }\n\n ngOnInit(): void {\n this.containerWidth = 0;\n this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n }\n\n ngOnChanges(changes): void {\n if (this.containerWidth <= 0) {\n this.setContainerWidth();\n }\n }\n\n ngOnDestroy(): void {\n // if (this.valueChange) {\n // this.valueChange.unsubscribe();\n // }\n\n // if (this.loadItems) {\n // this.loadItems.unsubscribe();\n // }\n\n // if (this.loadPage) {\n // this.loadPage.unsubscribe();\n // }\n\n // if (this.sortingChange) {\n // this.sortingChange.unsubscribe();\n // }\n\n // if (this.fieldClick) {\n // this.fieldClick.unsubscribe();\n // }\n\n // if (this.itemClick) {\n // this.itemClick.unsubscribe();\n // }\n\n // if (this.listLoad) {\n // this.listLoad.unsubscribe();\n // }\n\n this.saveSortingToSession();\n }\n\n private getScrollingElement() {\n return this.parentScroll ? this.parentScroll : this.virtualScroller?.contentElementRef.nativeElement.parentElement;\n }\n\n private scrollToTop(animate = true) {\n const scrollingElement = this.getScrollingElement();\n if (scrollingElement) {\n const scrollTop = 0;\n\n // totally disable animate\n if (!animate || this.scrollAnimationTime === 0) {\n if (scrollingElement instanceof Window) {\n window.scrollTo(0, scrollTop);\n } else {\n scrollingElement.scrollTop = scrollTop;\n }\n } else {\n let animationRequest;\n const isWindow = scrollingElement instanceof Window;\n const currentScrollTop =\n scrollingElement instanceof Window\n ? window.pageYOffset\n : scrollingElement.scrollTop;\n\n if (this.currentTween !== undefined) {\n this.currentTween.stop();\n }\n this.currentTween = new tween.Tween({ scrollTop: currentScrollTop })\n .to({ scrollTop }, this.scrollAnimationTime)\n .easing(tween.Easing.Quadratic.Out)\n .onUpdate((data) => {\n if (isNaN(data.scrollTop)) {\n return;\n }\n\n if (isWindow) {\n window.scrollTo(0, data.scrollTop);\n } else {\n this.renderer.setProperty(\n scrollingElement,\n 'scrollTop',\n data.scrollTop\n );\n }\n })\n .onStop(() => {\n cancelAnimationFrame(animationRequest);\n })\n .start();\n\n const animate = (time?) => {\n this.currentTween.update(time);\n if (this.currentTween._object.scrollTop !== scrollTop) {\n this.zone.runOutsideAngular(() => {\n animationRequest = requestAnimationFrame(animate);\n });\n }\n };\n\n animate();\n }\n }\n }\n\n private setContainerWidth(): void {\n const selectionCheckBoxWidth =\n this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n const rowHeight = 40; // the table row height (2.5rem * 16font-size).\n const style = window.getComputedStyle(\n this.hostElement.nativeElement.parentElement\n );\n // The container-fluid class padding left + right + border\n const containerFluidSpacing =\n parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);\n\n const parentContainer =\n this.hostElement.nativeElement.parentElement.parentElement > 0\n ? this.hostElement.nativeElement.parentElement.parentElement\n : this.hostElement.nativeElement.parentElement;\n\n // Calculate if vertical scroll should appear, if so set the scroll width. (this.totalRows + 1) + 1 is for the header row.\n this.tableScrollWidth = parentContainer.clientHeight < rowHeight * (this.totalRows + 1)\n ? this.layoutService.getScrollbarWidth()\n : 0;\n\n // The selectionCheckBoxWidth width + containerFluidSpacing + this.tableScrollWidth.\n const rowHeaderWidthToSub =\n containerFluidSpacing + selectionCheckBoxWidth + this.tableScrollWidth;\n this.containerWidth = parentContainer.offsetWidth - rowHeaderWidthToSub;\n }\n\n private saveSortingToSession(): void {\n this.sessionService.setObject(\n PepListComponent.SORT_BY_STATE_KEY,\n this.sortBy\n );\n this.sessionService.setObject(\n PepListComponent.ASCENDING_STATE_KEY,\n this.isAsc\n );\n }\n\n private getTopItems(): number {\n return this.isTable\n ? PepListComponent.TOP_ITEMS_TABLE\n : PepListComponent.TOP_ITEMS_THUMBNAILS;\n }\n\n // private disableScroll(disable: boolean) {\n // if (disable) {\n // this.renderer.addClass(this.getParentContainer(), 'lock-events');\n // } else {\n // this.renderer.removeClass(this.getParentContainer(), 'lock-events');\n // }\n // }\n\n private toggleLoadingItemsFropApi(loadingItemsFromApi: boolean): void {\n this._loadingItemsFromApi = loadingItemsFromApi;\n\n // this.disableScroll(loadingItemsFromApi);\n }\n\n private updateCurrentPageItems(startIndex: number, endIndex: number): void {\n this.currentPageItems = this.items.slice(startIndex, endIndex);\n }\n\n private setSelectionItems(\n itemId: string,\n uniqItemId: string,\n isChecked: boolean\n ): void {\n // Set selected item checkbox\n if (this.isAllSelected) {\n if (isChecked) {\n this.unSelectedItems.delete(itemId);\n this.selectedItems.set(itemId, uniqItemId);\n } else {\n this.selectedItems.delete(itemId);\n this.unSelectedItems.set(itemId, uniqItemId);\n }\n } else {\n if (isChecked) {\n this.unSelectedItems.delete(itemId);\n this.selectedItems.set(itemId, uniqItemId);\n } else {\n this.selectedItems.delete(itemId);\n this.unSelectedItems.set(itemId, uniqItemId);\n }\n }\n }\n\n private getUniqItemId(itemId: string, itemType = ''): string {\n return itemId + this.SEPARATOR + itemType;\n }\n\n private setLayout(): void {\n if (\n this.totalRows === 0 ||\n !this._layout ||\n !this._layout.ControlFields ||\n this._layout.ControlFields.length === 0\n ) {\n return;\n }\n\n this._layout.ControlFields.forEach((cf) => {\n if (cf.ColumnWidth === 0) {\n cf.ColumnWidth = 10;\n }\n\n if (\n this.isTable &&\n (cf.FieldType === FIELD_TYPE.Image ||\n // cf.FieldType === FIELD_TYPE.Indicators || ???\n cf.FieldType === FIELD_TYPE.Signature ||\n cf.FieldType === FIELD_TYPE.NumberIntegerQuantitySelector ||\n cf.FieldType === FIELD_TYPE.NumberRealQuantitySelector ||\n cf.FieldType === FIELD_TYPE.NumberIntegerForMatrix ||\n cf.FieldType === FIELD_TYPE.NumberRealForMatrix ||\n cf.FieldType === FIELD_TYPE.Package ||\n cf.ApiName === 'UnitsQuantity' ||\n cf.ApiName === 'QuantitySelector')\n ) {\n cf.Layout.XAlignment = 3;\n }\n });\n\n if (!this.cd['destroyed']) {\n this.cd.detectChanges();\n }\n\n // Set the columns width.\n if (this.containerWidth <= 0) {\n this.setContainerWidth();\n }\n\n this.calcColumnsWidth();\n this.checkForChanges = new Date().getTime();\n }\n\n private calcColumnsWidth(): void {\n const fixedMultiple = 3.78; // for converting em to pixel.\n const length = this._layout.ControlFields.length;\n const selectionCheckBoxWidth =\n this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n // Is table AND there is at least one column of width type of percentage.\n if (this.isTable) {\n if (this._layout && this._layout.ControlFields) {\n this.hasColumnWidthOfTypePercentage =\n this._layout.ControlFields.filter(\n (cf) => cf.ColumnWidthType === 1\n ).length === 0;\n }\n }\n\n // If the columns size is fixed and the total is small then the container change it to percentage.\n if (!this.hasColumnWidthOfTypePercentage) {\n const totalFixedColsWidth = this._layout.ControlFields.map(\n (cf) => cf.ColumnWidth * fixedMultiple\n ).reduce((sum, current) => sum + current);\n\n if (window.innerWidth > totalFixedColsWidth) {\n this.hasColumnWidthOfTypePercentage = true;\n }\n }\n\n let totalCalcColsWidth = 0;\n\n // Calc by percentage\n if (this.hasColumnWidthOfTypePercentage) {\n const totalColsWidth: number = this._layout.ControlFields.map(\n (cf) => cf.ColumnWidth\n ).reduce((sum, current) => sum + current);\n\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout.ControlFields[index];\n const calcColumnWidthPercentage = (100 / totalColsWidth) * uiControlField.ColumnWidth;\n\n uiControlField.calcColumnWidth = Math.floor((this.containerWidth * calcColumnWidthPercentage) / 100);\n\n if (index === length - 1) {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + totalCalcColsWidth + 'px)'; // For 100%\n } else {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n totalCalcColsWidth += uiControlField.calcColumnWidth;\n }\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n 'inherit'\n );\n } else {\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout\n .ControlFields[index];\n const currentFixedWidth = Math.floor(\n uiControlField.ColumnWidth * fixedMultiple\n );\n\n if (index === length - 1) {\n uiControlField.calcTitleColumnWidthString = currentFixedWidth + 'px';\n uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n } else {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n }\n\n totalCalcColsWidth += currentFixedWidth;\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n totalCalcColsWidth + selectionCheckBoxWidth + 'px'\n );\n }\n }\n\n private initResizeData(): void {\n this.startX = 0;\n this.startWidth = 0;\n this.tableStartWidth = 0;\n this.pressedColumn = '';\n }\n\n private getParent(el, parentSelector): any {\n // If no parentSelector defined will bubble up all the way to *document*\n if (parentSelector === undefined) {\n parentSelector = document;\n }\n const parent = [];\n let p = el.parentNode;\n\n while (\n p &&\n p.className !== '' &&\n p.className.indexOf(parentSelector) === -1 &&\n parentSelector !== document\n ) {\n const o = p;\n p = o.parentNode;\n }\n if (p.className.indexOf(parentSelector) > -1) {\n parent.push(p); // Push that parentSelector you wanted to stop at\n }\n return parent;\n }\n\n private cleanItems(): void {\n this.itemsCounter = 0;\n this._items =\n this.totalRows > 0 ? Array<ObjectsDataRow>(this.totalRows) : [];\n this.currentPageItems = [];\n this.calculatedObjectHeight = '';\n }\n\n private initVariablesFromSession(items: ObjectsDataRow[]): void {\n const selectedItemsObject: Array<any> = this.sessionService.getObject<\n Array<any>\n >(PepListComponent.SELECTED_ITEMS_STATE_KEY);\n const selectedItemsFromMap: Map<string, string> =\n selectedItemsObject && selectedItemsObject.length > 0\n ? new Map(selectedItemsObject)\n : null;\n if (\n selectedItemsFromMap != null &&\n typeof selectedItemsFromMap.size !== 'undefined' &&\n selectedItemsFromMap.size > 0\n ) {\n this.selectedItems = selectedItemsFromMap;\n this.sessionService.removeObject(\n PepListComponent.SELECTED_ITEMS_STATE_KEY\n );\n } else {\n this.selectedItems.clear();\n }\n\n const unSelectedItemsObject: Array<any> = this.sessionService.getObject<\n Array<any>\n >(PepListComponent.UN_SELECTED_ITEMS_STATE_KEY);\n const unSelectedItemsMap: Map<string, string> =\n unSelectedItemsObject && unSelectedItemsObject.length > 0\n ? new Map(unSelectedItemsObject)\n : null;\n if (\n unSelectedItemsMap != null &&\n typeof unSelectedItemsMap.size !== 'undefined' &&\n unSelectedItemsMap.size > 0\n ) {\n this.unSelectedItems = unSelectedItemsMap;\n this.sessionService.removeObject(\n PepListComponent.UN_SELECTED_ITEMS_STATE_KEY\n );\n } else {\n this.unSelectedItems.clear();\n }\n\n const isAllSelected = this.sessionService.getObject(\n PepListComponent.ALL_SELECTED_STATE_KEY\n );\n if (isAllSelected != null) {\n this.isAllSelected = isAllSelected && this.getIsAllSelected(items);\n this.sessionService.removeObject(\n PepListComponent.ALL_SELECTED_STATE_KEY\n );\n } else {\n this.isAllSelected = false;\n }\n\n const sortBy = this.sessionService.getObject(\n PepListComponent.SORT_BY_STATE_KEY\n );\n if (sortBy && sortBy !== '') {\n this.sortBy = sortBy;\n this.sessionService.removeObject(\n PepListComponent.SORT_BY_STATE_KEY\n );\n } else {\n this.sortBy = '';\n }\n\n const isAsc = this.sessionService.getObject(\n PepListComponent.ASCENDING_STATE_KEY\n );\n if (isAsc != null) {\n this.isAsc = isAsc;\n this.sessionService.removeObject(\n PepListComponent.ASCENDING_STATE_KEY\n );\n } else {\n this.isAsc = true;\n }\n }\n\n private getIsAllSelected(items: Array<ObjectsDataRow>): boolean {\n let result = true;\n\n if (this.selectedItems?.size > 0 && items?.length > 0) {\n for (const item of items) {\n if (!(item && this.selectedItems.has(item?.UID.toString()))) {\n result = false;\n break;\n }\n }\n } else {\n result = false;\n }\n\n return result;\n }\n\n private getNumberOfStartItems(): number {\n let numberOfStartItems = 20;\n\n if (\n this.screenSize === PepScreenSizeType.XL ||\n this.screenSize === PepScreenSizeType.LG\n ) {\n numberOfStartItems = this.isTable ? 50 : 40;\n } else if (this.screenSize === PepScreenSizeType.MD) {\n numberOfStartItems = this.isTable ? 30 : 20;\n } else if (this.screenSize === PepScreenSizeType.SM) {\n numberOfStartItems = this.isTable ? 20 : 10;\n } else if (this.screenSize === PepScreenSizeType.XS) {\n numberOfStartItems = this.isTable ? 15 : 5;\n }\n\n return numberOfStartItems;\n }\n\n private setItemClicked(\n itemId,\n isSelectableForActions: boolean,\n itemType: string,\n isChecked: boolean\n ): void {\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n\n // select the selected item.\n if (isChecked) {\n // Set seleted item\n this.selectedItemId = uniqItemId;\n } else {\n if (this.selectedItemId === uniqItemId) {\n this.selectedItemId = '';\n }\n }\n\n if (this.selectionTypeForActions === 'single') {\n this.selectedItemsChange.emit(\n this.selectedItemId.length === 0 ? 0 : 1\n );\n } else if (this.selectionTypeForActions === 'multi') {\n if (isSelectableForActions) {\n this.setSelectionItems(itemId, uniqItemId, isChecked);\n\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n const currentListCount = this.isAllSelected\n ? this.totalRows - currentList.size\n : currentList.size;\n this.selectedItemsChange.emit(currentListCount);\n }\n }\n\n // Raise selected item change event\n if (this.selectionTypeForActions !== 'none') {\n this.selectedItemChange.emit({\n id: itemId,\n selected: isChecked,\n });\n }\n }\n\n private exportFunctionsOnHostElement() {\n // This is for web component usage for use those functions.\n this.hostElement.nativeElement.clear = this.clear.bind(this);\n this.hostElement.nativeElement.initListData = this.initListData.bind(\n this\n );\n this.hostElement.nativeElement.updateItems = this.updateItems.bind(\n this\n );\n this.hostElement.nativeElement.updatePage = this.updatePage.bind(this);\n this.hostElement.nativeElement.updateItem = this.updateItem.bind(this);\n }\n\n // getIsDisabled(item: ObjectsDataRow): boolean {\n // return (\n // this.lockItemInnerEvents || (item && !item.IsSelectableForActions)\n // );\n // }\n\n getIsAllSelectedForActions(): boolean {\n let res = false;\n\n if (this.isAllSelected) {\n if (this.unSelectedItems.size === 0) {\n res = true;\n }\n } else {\n if (this.virtualScroller?.viewPortItems) {\n if (this.selectedItems.size === this.totalRows) {\n res = this.getIsAllSelected(this.virtualScroller.viewPortItems);\n } else if (this.selectedItems.size < this.totalRows) {\n for (const item of this.virtualScroller.viewPortItems) {\n res =\n item && this.selectedItems.has(item?.UID.toString());\n\n if (!res) {\n break;\n }\n }\n }\n }\n }\n\n return res;\n }\n\n setIsAllSelected(isChecked: boolean): void {\n if (this.selectionTypeForActions === 'multi') {\n this.selectAllCB.checked = isChecked;\n this.isAllSelected = isChecked;\n }\n }\n\n selectAllItemsForActions(e: any): void {\n // For material checkbox || radio.\n const isChecked = e.source.checked;\n\n // Indeterminate mode\n let isIndeterminate = false;\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n if (currentList.size > 0) {\n isIndeterminate = true;\n this.isAllSelected = false;\n this.selectedItemsChange.emit(0);\n e.source.checked = false;\n }\n\n this.selectedItems.clear();\n this.unSelectedItems.clear();\n\n if (!isIndeterminate) {\n this.isAllSelected = isChecked;\n this.selectAllClick.emit(isChecked);\n\n if (this.selectionTypeForActions === 'multi') {\n if (!isChecked) {\n this.selectedItemsChange.emit(0);\n this.selectedItemId = '';\n } else {\n const filteredItems = this.items.filter(\n (item) => item && item.IsSelectableForActions\n );\n this.selectedItemsChange.emit(filteredItems.length);\n }\n }\n } else {\n // Remove all\n if (this.selectionTypeForActions === 'multi') {\n this.selectAllClick.emit(false);\n }\n }\n }\n\n raiseStartIndexChange(startIndex = 0) {\n // this.startIndex = startIndex;\n this.startIndexChange.emit({ startIndex });\n }\n\n getIsItemSelected(item: ObjectsDataRow): boolean {\n let isSelected = false;\n\n if (item) {\n if (this.selectionTypeForActions === 'single') {\n isSelected = this.selectedItemId === this.getUniqItemId(item.UID, item.Type.toString());\n } else if (this.selectionTypeForActions === 'multi') {\n if (item.IsSelectableForActions) {\n isSelected = (this.isAllSelected && !this.unSelectedItems.has(item.UID)) || this.selectedItems.has(item.UID);\n }\n }\n }\n\n return isSelected;\n }\n\n selectItemForActions(\n e: any,\n itemId: string,\n isSelectableForActions: boolean,\n itemType = ''\n ): void {\n // For material checkbox || radio.\n const isChecked = e.source.checked;\n this.setItemClicked(\n itemId,\n isSelectableForActions,\n itemType,\n isChecked\n );\n }\n\n itemClicked(e: any, item: ObjectsDataRow): void {\n // Set seleted item\n const itemId = item?.UID.toString();\n const itemType = item?.Type.toString();\n let isChecked = false;\n\n if (item && item.IsSelectableForActions) {\n this.selectedItemId = this.getUniqItemId(itemId, itemType);\n isChecked = true;\n }\n\n if (this.isTable) {\n if (this.selectionTypeForActions === 'single') {\n this.setItemClicked(\n itemId,\n item.IsSelectableForActions,\n itemType,\n isChecked\n );\n } else if (this.selectionTypeForActions === 'none') {\n // Just mark the row as highlighted\n this.setItemClicked(\n itemId,\n item.IsSelectableForActions,\n itemType,\n true\n );\n }\n } else {\n if (this.disabled) {\n return;\n }\n }\n\n this.itemClick.emit({ source: item, viewType: this.viewType });\n }\n\n onTableRowMouseEnter(event: any, itemId: string, itemType: string): void {\n if (!this.deviceHasMouse) {\n return;\n }\n\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n this.hoveredItemId = uniqItemId;\n }\n\n onTableRowMouseLeave(event: any, itemId: string, itemType: string): void {\n this.hoveredItemId = '';\n }\n\n onCardMouseEnter(event: any, itemId: string, itemType: string): void {\n if (!this.deviceHasMouse) {\n return;\n }\n\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n this.hoveredItemId = uniqItemId;\n }\n\n onCardMouseLeave(event: any, itemId: string, itemType: string): void {\n this.hoveredItemId = '';\n }\n\n // trackByFunc(index: number, item: ObjectsDataRow): any {\n // return item && item?.UID ? item?.UID : index;\n // // let res: string = \"\";\n\n // // if (item && item?.UID) {\n // // res = item?.UID + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n // // }\n // // else {\n // // res = index + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n // // }\n\n // // return res;\n // }\n\n clear(): void {\n this.cleanItems();\n this._layout = null;\n }\n\n setSelectedIds(selectedIds: string[], items = null): void {\n this.selectedItems.clear();\n this.isAllSelected = false;\n\n if (selectedIds) {\n // for (let i = 0; i < selected.length; i++) {\n for (const selectedId of selectedIds) {\n const tmp = selectedId.split(this.SEPARATOR);\n\n if (tmp && tmp.length > 0) {\n const itemId = tmp[0];\n const itemType = tmp.length > 1 ? tmp[1] : '';\n\n this.selectedItems.set(\n itemId,\n this.getUniqItemId(itemId, itemType)\n );\n }\n }\n\n this.isAllSelected = this.getIsAllSelected(items ? items : this.virtualScroller?.viewPortItems);\n this.setSelectionDataInSession();\n }\n\n this.refresh();\n }\n\n setSelectionDataInSession(): void {\n if (this.selectedItems.size > 0) {\n this.sessionService.setObject(\n PepListComponent.SELECTED_ITEMS_STATE_KEY,\n JSON.stringify([...this.selectedItems])\n );\n }\n\n if (this.unSelectedItems.size > 0) {\n this.sessionService.setObject(\n PepListComponent.UN_SELECTED_ITEMS_STATE_KEY,\n JSON.stringify([...this.unSelectedItems])\n );\n }\n\n this.sessionService.setObject(\n PepListComponent.ALL_SELECTED_STATE_KEY,\n this.isAllSelected\n );\n }\n\n initListData(\n layout: UIControl,\n totalRows: number,\n items: ObjectsDataRow[]\n ): void {\n this.initVariablesFromSession(items);\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n const currentListCount = this.isAllSelected\n ? this.totalRows - currentList.size\n : currentList.size;\n this.selectedItemsChange.emit(currentListCount);\n\n this._layout = layout;\n this.selectedItemId = '';\n this.totalRows = totalRows;\n\n this.scrollToTop(false);\n this.cleanItems();\n\n if (items) {\n if (this.pagerType === 'pages') {\n // If page index out of bounds - init to 0.\n const numberOfPages = Math.ceil(totalRows / this.pageSize);\n\n if (this.pageIndex >= numberOfPages) {\n this.pageIndex = 0;\n }\n\n this.updatePage(items, {\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n });\n } else {\n const numberOfStartItems = this.getNumberOfStartItems();\n const event = {\n fromIndex: 0,\n toIndex: numberOfStartItems,\n };\n this.updateItems(items, event);\n\n this.refresh();\n }\n }\n\n this.setLayout();\n this.onListLoad();\n }\n\n updateItems(\n items: ObjectsDataRow[],\n event: IPepListLoadItemsEvent = null\n ): void {\n if (!event) {\n return; // Event isn't supplied.\n }\n\n // Clean array\n if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n this.cleanItems();\n }\n\n const startIndex = event.fromIndex ?? 0;\n\n for (let i = 0; i < items.length; i++) {\n if (!this.items[i + startIndex]) {\n this.items[i + startIndex] = items[i];\n this.itemsCounter += 1;\n }\n }\n\n this.toggleLoadingItemsFropApi(false);\n }\n\n updatePage(items: ObjectsDataRow[], event: IPepListLoadPageEvent): void {\n if (!event) {\n return; // Event isn't supplied.\n }\n\n // Clean array\n if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n this.cleanItems();\n }\n\n // const loadInChunks = this.itemsCounter === 0;\n const startIndex = Math.min(event.pageIndex * event.pageSize, this.totalRows);\n const endIndex = Math.min(startIndex + event.pageSize, this.totalRows);\n\n for (let i = 0; i < items.length; i++) {\n if (!this.items[i + startIndex]) {\n this.items[i + startIndex] = items[i];\n this.itemsCounter += 1;\n }\n }\n\n this.updateCurrentPageItems(startIndex, endIndex);\n this.toggleLoadingItemsFropApi(false);\n }\n\n updateItem(data: ObjectsDataRow): void {\n const index = this.items.findIndex((i) => i && i?.UID === data?.UID);\n if (index >= 0 && index < this.items.length) {\n this.updateItemProperties(this.items[index], data);\n }\n }\n\n scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined) {\n this.virtualScroller?.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\n }\n\n updateItemProperties(itemToUpdate: ObjectsDataRow, data: ObjectsDataRow) {\n Object.assign(itemToUpdate, data);\n }\n\n getSelectedItemsData(isForEdit = false): PepSelectionData {\n const res = new PepSelectionData();\n\n if (this.selectionTypeForActions === 'single') {\n const tmp = this.selectedItemId.split(this.SEPARATOR);\n\n res.selectionType = 1;\n res.rows = [tmp[0]];\n res.rowTypes = [tmp[1]];\n } else if (this.selectionTypeForActions === 'multi') {\n const items = [];\n const itemTypes = [];\n let selectionType = 1;\n let currentList = [];\n\n // For edit - only the selected items.\n if (isForEdit) {\n if (!this.isAllSelected) {\n currentList = Array.from(this.selectedItems.values());\n } else {\n // Get the id's of the items that not founded in unSelectedItems.\n this.items.forEach((item) => {\n if (\n item &&\n !this.unSelectedItems.has(item?.UID.toString())\n ) {\n currentList.push(\n this.getUniqItemId(\n item?.UID.toString(),\n item?.Type.toString()\n )\n );\n }\n });\n }\n } else {\n // For delete - can be the unselected with select_all functionality.\n currentList = Array.from(\n this.isAllSelected\n ? this.unSelectedItems.values()\n : this.selectedItems.values()\n );\n selectionType = this.isAllSelected ? 0 : 1;\n }\n\n currentList.forEach((item) => {\n const tmp = item.split(this.SEPARATOR);\n\n if (tmp.length === 2) {\n items.push(tmp[0]);\n itemTypes.push(tmp[1]);\n }\n });\n\n res.selectionType = selectionType;\n res.rows = items;\n res.rowTypes = itemTypes;\n }\n\n return res;\n }\n\n getIsItemEditable(uid: string): boolean {\n const item = this.items.filter((x) => x?.UID.toString() === uid);\n if (item.length > 0) {\n return item[0].IsEditable;\n } else {\n return false;\n }\n }\n\n getItemDataByID(uid: string): ObjectsDataRow {\n return this.items.find((item) => item?.UID.toString() === uid);\n }\n\n refresh() {\n this.virtualScroller?.refresh();\n }\n\n // ---------------------------------------------------------------\n // Events handlers.\n // ---------------------------------------------------------------\n\n onWinResize(e): void {\n this.refresh();\n\n this.containerWidth = 0;\n this.setLayout();\n }\n\n onListResizeStart(event, columnKey): void {\n this.pressedColumn = columnKey;\n this.startX = event.x;\n this.startWidth = event.target.closest('.header-column').offsetWidth;\n this.tableStartWidth = this.virtualScroller?.contentElementRef.nativeElement.offsetWidth;\n }\n\n onListResize(event): void {\n if (this.pressedColumn.length > 0) {\n let widthToAdd = this.layoutService.isRtl() ? this.startX - event.x : event.x - this.startX;\n\n // Set the width of the column and the container of the whole columns.\n if (this.startWidth + widthToAdd >= PepListComponent.MINIMUM_COLUMN_WIDTH || widthToAdd > 0) {\n const length = this._layout.ControlFields.length;\n let totalCalcColsWidth = 0;\n\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout\n .ControlFields[index];\n\n if (index === length - 1) {\n // Calc the last column only in percentage type.\n if (this.hasColumnWidthOfTypePercentage) {\n const scrollWidth = this.layoutService.getScrollbarWidth();\n widthToAdd += scrollWidth;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + (totalCalcColsWidth + scrollWidth) + 'px)'; // For 100%\n } else {\n if (uiControlField.ApiName === this.pressedColumn) {\n uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidth + 'px';\n uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n }\n }\n } else if (uiControlField.ApiName === this.pressedColumn) {\n uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n }\n\n totalCalcColsWidth += uiControlField.calcColumnWidth;\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n this.tableStartWidth + widthToAdd + 'px'\n );\n }\n\n this.checkForChanges = new Date().getTime();\n }\n }\n\n onListResizeEnd(event): void {\n if (this.pressedColumn.length > 0) {\n if (\n event &&\n this.getParent(event.srcElement, 'resize-box').length > 0\n ) {\n this.initResizeData();\n } else {\n // Set timeout 0 for onListSortingChange will have the pressedColumn.\n setTimeout(() => {\n this.initResizeData();\n }, 0);\n }\n\n event.stopPropagation();\n }\n }\n\n onListSortingChange(sortBy: string, isAsc: boolean, event = null): void {\n if (\n this.pressedColumn.length > 0 ||\n (event && this.getParent(event.srcElement, 'resize-box').length > 0)\n ) {\n return;\n }\n\n if (this.sortBy !== sortBy || this.isAsc !== isAsc) {\n this.sortBy = sortBy;\n this.isAsc = isAsc;\n this.saveSortingToSession();\n\n this.sortingChange.emit({ sortBy, isAsc });\n }\n }\n\n onListHeaderMouseEnter(event): void {\n // this.headerIsInFocus = true;\n }\n\n onListHeaderMouseLeave(event): void {\n // this.headerIsInFocus = false;\n this.onListResizeEnd(event);\n this.initResizeData();\n }\n\n onPagerChange(event: IPepListPagerChangeEvent): void {\n this.pageIndex = event.pageIndex;\n\n // Scroll to top.\n this.scrollToTop();\n\n const startIndex = event.pageIndex * event.pageSize;\n const endIndex = Math.min(\n startIndex + event.pageSize,\n this.totalRows\n );\n\n let shouldGetItemsFromApi = false;\n let index: number = startIndex;\n\n while (!shouldGetItemsFromApi && index < endIndex) {\n if (!this.items[index]) {\n shouldGetItemsFromApi = true;\n }\n index++;\n }\n\n // Get bulk from api.\n if (shouldGetItemsFromApi) {\n if (!this.loadingItemsFromApi) {\n this.toggleLoadingItemsFropApi(true);\n\n this.loadPage.emit({\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n });\n }\n } else {\n setTimeout(() => {\n this.updateCurrentPageItems(startIndex, endIndex);\n }, this.scrollAnimationTime);\n }\n }\n\n onVirtualScrollerChange(event: IPageInfo): void {\n this.raiseStartIndexChange(event.startIndex);\n\n if (this.pagerType === 'scroll') {\n // For other events do nothing.\n if (typeof event.startIndex === 'undefined' || event.startIndex < 0 ||\n typeof event.endIndex === 'undefined' || event.endIndex < 0) {\n return;\n }\n\n const addAtStart = event.scrollDirection === 'backward';\n let shouldGetItemsFromApi = false;\n let indexOfMissingItem: number;\n\n if (addAtStart) {\n indexOfMissingItem = event.endIndex;\n while (!shouldGetItemsFromApi && indexOfMissingItem >= event.startIndex) {\n if (!this.items[indexOfMissingItem]) {\n shouldGetItemsFromApi = true;\n }\n\n if (!shouldGetItemsFromApi) {\n indexOfMissingItem--;\n }\n }\n } else {\n indexOfMissingItem = event.startIndex;\n while (!shouldGetItemsFromApi && indexOfMissingItem <= event.endIndex) {\n if (!this.items[indexOfMissingItem]) {\n shouldGetItemsFromApi = true;\n }\n\n if (!shouldGetItemsFromApi) {\n indexOfMissingItem++;\n }\n }\n }\n\n // Get bulk from api.\n if (shouldGetItemsFromApi) {\n if (!this.loadingItemsFromApi) {\n this.toggleLoadingItemsFropApi(true);\n\n const top = this.getTopItems() - 1;\n const fromIndex = addAtStart ? Math.max(indexOfMissingItem - top, 0) : indexOfMissingItem;\n const toIndex = addAtStart ? indexOfMissingItem : Math.min(indexOfMissingItem + top, this.totalRows);\n\n this.loadItems.emit({\n fromIndex,\n toIndex,\n });\n }\n }\n }\n }\n\n onListLoad(): void {\n setTimeout(() => {\n this.listLoad.emit();\n }, 0);\n }\n\n onChildRectChange(event: ClientRect) {\n setTimeout(() => {\n this.calculatedObjectHeight = event?.height + 'px';\n }, 0);\n }\n\n onValueChanged(valueChange: IPepFormFieldValueChangeEvent): void {\n if (this.disabled) {\n return;\n }\n\n this.valueChange.emit(valueChange);\n }\n\n onCustomizeFieldClick(\n customizeFieldClickedData: IPepFormFieldClickEvent\n ): void {\n if (this.disabled) {\n return;\n }\n\n this.fieldClick.emit(customizeFieldClickedData);\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n IPepMenuStateChangeEvent,\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\n@Component({\n selector: 'pep-list-actions',\n templateUrl: './list-actions.component.html',\n styleUrls: ['./list-actions.component.scss'],\n})\n@Injectable()\nexport class PepListActionsComponent {\n @Input() actions: Array<PepMenuItem> = null;\n @Input() sizeType: PepSizeType = 'md';\n @Input() xPosition: 'before' | 'after' = 'before';\n @Input() hidden = false;\n\n @Output()\n actionClick: EventEmitter<IPepMenuItemClickEvent> = new EventEmitter<IPepMenuItemClickEvent>();\n @Output()\n stateChange: EventEmitter<IPepMenuStateChangeEvent> = new EventEmitter<IPepMenuStateChangeEvent>();\n @Output()\n menuClick: EventEmitter<void> = new EventEmitter<void>();\n\n onActionClicked(action): void {\n this.actionClick.emit(action);\n }\n\n onStateChanged(menuStateChangeEvent: IPepMenuStateChangeEvent): void {\n this.stateChange.emit(menuStateChangeEvent);\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n Renderer2,\n ChangeDetectorRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport {\n ObjectsDataRow,\n UIControl,\n PepLayoutService,\n PepScreenSizeType,\n} from '@pepperi-addons/ngx-lib';\nimport { PepCarouselComponent } from '@pepperi-addons/ngx-lib/carousel';\n\nexport type PepListCarouselSizeType = 'xs' | 'sm' | 'md';\n\nexport interface IPepListCarouselItemClickEvent {\n source: ObjectsDataRow;\n}\n\n@Component({\n selector: 'pep-list-carousel',\n templateUrl: './list-carousel.component.html',\n styleUrls: ['./list-carousel.component.scss'],\n})\n@Injectable()\nexport class PepListCarouselComponent implements AfterViewInit, OnDestroy {\n @Input() duration = 1000;\n @Input() layout: UIControl = null;\n @Input() itemsToMove = 3;\n @Input() lockItemInnerEvents = true;\n @Input() hideArrowsInSmallScreen = true;\n\n private _items: Array<ObjectsDataRow> = null;\n @Input()\n set items(value: Array<ObjectsDataRow>) {\n this._items = value;\n this.moveTo(0);\n }\n get items() {\n return this._items;\n }\n\n private _itemSize: PepListCarouselSizeType = 'xs';\n @Input()\n set itemSize(value: PepListCarouselSizeType) {\n this._itemSize = value;\n this.moveTo(0);\n }\n get itemSize() {\n return this._itemSize;\n }\n\n @Output()\n itemClick: EventEmitter<IPepListCarouselItemClickEvent> = new EventEmitter<IPepListCarouselItemClickEvent>();\n\n @ViewChild('carousel', { read: PepCarouselComponent })\n carousel: PepCarouselComponent;\n\n prevDisabled = false;\n nextDisabled = false;\n screenSize: PepScreenSizeType;\n PepScreenSizeType = PepScreenSizeType;\n // deviceHasMouse = false;\n\n constructor(public layoutService: PepLayoutService) {\n // this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n }\n\n ngAfterViewInit(): void {\n this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n this.screenSize = size;\n });\n\n // this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n // this.deviceHasMouse = deviceHasMouse;\n // });\n }\n\n ngOnDestroy(): void {\n // if (this.itemClick) {\n // this.itemClick.unsubscribe();\n // }\n }\n\n itemClicked(item: ObjectsDataRow): void {\n this.itemClick.emit({ source: item });\n }\n\n moveLeft() {\n // this.carousel.moveLeft();\n const indexToMove = Math.max(\n this.carousel.currIndex - this.itemsToMove,\n 0\n );\n this.moveTo(indexToMove);\n }\n\n moveRight() {\n // this.carousel.moveRight();\n const indexToMove = Math.min(\n this.carousel.currIndex + this.itemsToMove,\n this.items.length\n );\n this.moveTo(indexToMove);\n }\n\n moveTo(index: number) {\n if (this.carousel) {\n this.carousel.moveTo(index);\n }\n }\n\n onReachesLeftBound(event: boolean) {\n this.prevDisabled = event;\n }\n\n onReachesRightBound(event: boolean) {\n this.nextDisabled = event;\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { PepBreadCrumbItem } from '@pepperi-addons/ngx-lib/bread-crumbs';\n\nexport class IPepListChooserOption {\n key: string;\n text: string;\n}\n\nexport interface IPepListChooserOptionChangeEvent {\n source: IPepListChooserOption;\n}\n\n@Component({\n selector: 'pep-list-chooser',\n templateUrl: './list-chooser.component.html',\n styleUrls: ['./list-chooser.component.scss'],\n})\n@Injectable()\nexport class PepListChooserComponent {\n private _options: Array<IPepListChooserOption> = null;\n @Input()\n set options(value: Array<IPepListChooserOption>) {\n this._options = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.key, text: opt.text };\n });\n\n if (this.menuItems?.length === 1) {\n this.breadCrumbsItems = [];\n this.breadCrumbsItems.push(\n new PepBreadCrumbItem({\n key: this.menuItems[0].key,\n text: this.menuItems[0].text,\n })\n );\n }\n }\n get options(): Array<IPepListChooserOption> {\n return this._options;\n }\n\n private _currentList: IPepListChooserOption = null;\n @Input()\n set currentList(value: IPepListChooserOption) {\n this._currentList = value;\n this.currentItem = this.menuItems.find((mi) => mi.key === value.key);\n }\n get currentList(): IPepListChooserOption {\n return this._currentList;\n }\n\n @Input() sizeType: PepSizeType = 'md';\n\n @Output()\n change: EventEmitter<IPepListChooserOptionChangeEvent> = new EventEmitter<IPepListChooserOptionChangeEvent>();\n\n breadCrumbsItems: Array<PepBreadCrumbItem> = null;\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentList = this.options.find(\n (list) => list.key === menuItemClickEvent.source.key\n );\n this.change.emit({ source: this.currentList });\n }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injectable,\n Input,\n Output,\n} from '@angular/core';\nimport { PepLayoutService, } from '@pepperi-addons/ngx-lib';\nimport { DEFAULT_PAGE_SIZE } from './list.model';\n\nexport class IPepListPagerChangeEvent {\n pageIndex: number;\n previousPageIndex: number;\n pageSize: number;\n length: number;\n}\n\n@Component({\n selector: 'pep-list-pager',\n templateUrl: './list-pager.component.html',\n styleUrls: ['./list-pager.component.scss'],\n})\n@Injectable()\nexport class PepListPagerComponent {\n @Input() disabled = false;\n private _pageIndex = 0;\n @Input()\n set pageIndex(value: number) {\n this.setPageIndex(value);\n }\n get pageIndex(): number {\n return this._pageIndex;\n }\n\n @Input() length = 0;\n @Input() pageSize = DEFAULT_PAGE_SIZE;\n\n @Output()\n pagerChange: EventEmitter<IPepListPagerChangeEvent> = new EventEmitter<IPepListPagerChangeEvent>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public layoutService: PepLayoutService) { }\n\n nextPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n\n this.setPageIndex(this.pageIndex + 1);\n }\n\n previousPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n\n this.setPageIndex(this.pageIndex - 1);\n }\n\n firstPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n\n this.setPageIndex(0);\n }\n\n lastPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n\n this.setPageIndex(this.getNumberOfPages() - 1);\n }\n\n hasPreviousPage(): boolean {\n return this.pageIndex >= 1 && this.pageSize != 0;\n }\n\n hasNextPage(): boolean {\n const maxPageIndex = this.getNumberOfPages() - 1;\n return this.pageIndex < maxPageIndex && this.pageSize != 0;\n }\n\n getNumberOfPages(): number {\n if (!this.pageSize) {\n return 0;\n }\n\n return Math.ceil(this.length / this.pageSize);\n }\n\n /** Checks whether the buttons for going forwards should be disabled. */\n _nextButtonsDisabled() {\n return this.disabled || !this.hasNextPage();\n }\n\n /** Checks whether the buttons for going backwards should be disabled. */\n _previousButtonsDisabled() {\n return this.disabled || !this.hasPreviousPage();\n }\n\n onValueChange(value: string) {\n const pageNumber = coerceNumberProperty(value);\n this.setPageIndex(pageNumber - 1); // - 1 to convert number into index.\n }\n\n private setPageIndex(newIndex: number) {\n const previousPageIndex = this.pageIndex;\n\n if (newIndex >= 0 && newIndex < this.getNumberOfPages()) {\n this._pageIndex = newIndex;\n } else {\n this._pageIndex = 0;\n }\n\n if (this.pageIndex !== previousPageIndex) {\n this._emitChangeEvent(previousPageIndex);\n }\n }\n\n /** Emits an event notifying that a change of the paginator's properties has been triggered. */\n private _emitChangeEvent(previousPageIndex: number) {\n this.pagerChange.emit({\n previousPageIndex,\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n length: this.length,\n });\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n IPepMenuItemClickEvent,\n PepMenuItem,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { IPepListSortingChangeEvent } from './list.model';\n\nexport class IPepListSortingOption {\n sortBy: string;\n title: string;\n iconName?: string;\n isAsc?: boolean;\n}\n\nexport interface IPepListSortingOptionChangeEvent {\n source: IPepListSortingOption;\n}\n\n@Component({\n selector: 'pep-list-sorting',\n templateUrl: './list-sorting.component.html',\n styleUrls: ['./list-sorting.component.scss'],\n})\n@Injectable()\nexport class PepListSortingComponent implements OnInit {\n private _options: Array<IPepListSortingOption> = null;\n @Input()\n set options(value: Array<IPepListSortingOption>) {\n this._options = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.sortBy, text: opt.title, iconName: opt.iconName };\n });\n }\n get options(): Array<IPepListSortingOption> {\n return this._options;\n }\n\n private _currentSorting: IPepListSortingOption = null;\n @Input()\n set currentSorting(value: IPepListSortingOption) {\n this._currentSorting = value;\n this.currentItem = this.menuItems.find((mi) => mi.key === value.sortBy);\n }\n get currentSorting(): IPepListSortingOption {\n return this._currentSorting;\n }\n\n @Input() sizeType: PepSizeType = 'md';\n @Output()\n change: EventEmitter<IPepListSortingOptionChangeEvent> = new EventEmitter<IPepListSortingOptionChangeEvent>();\n\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n ngOnInit(): void {\n if (\n this.currentSorting === null &&\n this.options &&\n this.options.length > 0\n ) {\n this.currentSorting = this.options[0];\n }\n }\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentSorting = this.options.find(\n (sorting) => sorting.sortBy === menuItemClickEvent.source.key\n );\n this.change.emit({ source: this.currentSorting });\n }\n}\n","import { Component, Injectable, Input } from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\n\n@Component({\n selector: 'pep-list-total',\n templateUrl: './list-total.component.html',\n styleUrls: ['./list-total.component.scss'],\n})\n@Injectable()\nexport class PepListTotalComponent {\n @Input() totalRows = -1;\n @Input() totalAmount = -1;\n @Input() isMapView = false;\n @Input() sizeType: PepSizeType = 'md';\n}\n","import {\n Component,\n OnInit,\n Injectable,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n} from '@angular/core';\nimport { PepSizeType, PepStyleType } from '@pepperi-addons/ngx-lib';\nimport {\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\nexport type PepListViewDisplayType = 'menu' | 'buttons';\n\nexport class IPepListView {\n key: string;\n iconName: string;\n title?: string;\n}\n\nexport interface IListViewChangeEvent {\n source: IPepListView;\n}\n\n@Component({\n selector: 'pep-list-views',\n templateUrl: './list-views.component.html',\n styleUrls: ['./list-views.component.scss'],\n})\n@Injectable()\nexport class PepListViewsComponent implements OnInit {\n private _views: Array<IPepListView> = null;\n @Input()\n set views(value: Array<IPepListView>) {\n this._views = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.key, text: opt.title, iconName: opt.iconName };\n });\n }\n get views(): Array<IPepListView> {\n return this._views;\n }\n\n private _currentView: IPepListView = null;\n @Input()\n set currentView(value: IPepListView) {\n this._currentView = value;\n\n if (this.displayType === 'menu') {\n this.currentItem = this.menuItems.find(\n (mi) => mi.key === value.key\n );\n }\n }\n get currentView(): IPepListView {\n return this._currentView;\n }\n\n @Input() displayType: PepListViewDisplayType = 'menu';\n @Input() styleType: PepStyleType = 'weak';\n @Input() sizeType: PepSizeType = 'md';\n @Input() classNames = '';\n\n @Output()\n change: EventEmitter<IListViewChangeEvent> = new EventEmitter<IListViewChangeEvent>();\n\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n ngOnInit(): void {\n if (this.displayType === 'buttons') {\n if (\n this.currentView === null &&\n this.views &&\n this.views.length > 0\n ) {\n this.currentView = this.views[0];\n }\n }\n }\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentView = this.views.find(\n (list) => list.key === menuItemClickEvent.source.key\n );\n this.raiseChangeEvent();\n }\n\n onViewChanged(view: IPepListView): void {\n this.currentView = view;\n this.raiseChangeEvent();\n }\n\n private raiseChangeEvent(): void {\n this.change.emit({ source: this.currentView });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\r\nimport { PepListSelectionType } from './list.model';\r\n\r\n@Pipe({\r\n name: 'isItemSelected'\r\n})\r\nexport class IsItemSelectedPipe implements PipeTransform {\r\n SEPARATOR = ',';\r\n\r\n private getUniqItemId(itemId: string, itemType = ''): string {\r\n return itemId + this.SEPARATOR + itemType;\r\n }\r\n\r\n transform(item: ObjectsDataRow, selectionTypeForActions: PepListSelectionType, selectedItemId: string, isAllSelected: boolean,\r\n selectedItems: Map<string, string>, unSelectedItems: Map<string, string>): any {\r\n let isSelected = false;\r\n\r\n if (selectionTypeForActions === 'single') {\r\n isSelected = selectedItemId === this.getUniqItemId(item?.UID, item?.Type.toString());\r\n }\r\n // else if (selectionTypeForActions === 'single-action') {\r\n // isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n // }\r\n else if (selectionTypeForActions === 'multi') {\r\n if (item?.IsSelectableForActions) {\r\n isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n }\r\n }\r\n\r\n return isSelected;\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'isItemDisabled'\r\n})\r\nexport class IsItemDisabledPipe implements PipeTransform {\r\n transform(item: ObjectsDataRow, lockItemInnerEvents: boolean, printMode: boolean): any {\r\n return (\r\n printMode || lockItemInnerEvents || (item && !item.IsSelectableForActions)\r\n );\r\n }\r\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport { PepBreadCrumbsModule } from '@pepperi-addons/ngx-lib/bread-crumbs';\nimport { PepButtonModule } from '@pepperi-addons/ngx-lib/button';\nimport { PepCarouselModule } from '@pepperi-addons/ngx-lib/carousel';\nimport {\n PepIconModule,\n PepIconRegistry,\n pepIconArrowDown,\n pepIconArrowEither,\n pepIconArrowUp,\n pepIconSystemMust,\n pepIconArrowRight,\n pepIconArrowRightAlt,\n pepIconArrowLeft,\n pepIconArrowLeftAlt,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepFormModule } from '@pepperi-addons/ngx-lib/form';\nimport { PepMenuModule } from '@pepperi-addons/ngx-lib/menu';\nimport { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';\n\n// import { PepListOldComponent } from './list_old.component';\nimport { PepListComponent } from './list.component';\nimport { PepListActionsComponent } from './list-actions.component';\nimport { PepListCarouselComponent } from './list-carousel.component';\nimport { PepListChooserComponent } from './list-chooser.component';\nimport { PepListPagerComponent } from './list-pager.component';\nimport { PepListSortingComponent } from './list-sorting.component';\nimport { PepListTotalComponent } from './list-total.component';\nimport { PepListViewsComponent } from './list-views.component';\n\nconst listComponents = [\n // PepListOldComponent,\n PepListComponent,\n PepListActionsComponent,\n PepListCarouselComponent,\n PepListChooserComponent,\n PepListPagerComponent,\n PepListSortingComponent,\n PepListTotalComponent,\n PepListViewsComponent,\n];\n\nimport { IsItemDisabledPipe, IsItemSelectedPipe } from './list.pipes';\n\nconst listPipes = [\n IsItemSelectedPipe,\n IsItemDisabledPipe\n];\n\nimport { VirtualScrollerModule } from './virtual-scroller';\n// import { PepVirtualScrollComponent } from './virtual-scroll.component';\n@NgModule({\n imports: [\n CommonModule,\n // Material modules,\n MatCommonModule,\n MatButtonModule,\n MatCheckboxModule,\n MatRadioModule,\n MatIconModule,\n MatMenuModule,\n // ngx-lib modules\n PepNgxLibModule,\n PepBreadCrumbsModule,\n PepButtonModule,\n PepCarouselModule,\n PepIconModule,\n PepFormModule,\n PepMenuModule,\n PepTextboxModule,\n VirtualScrollerModule\n ],\n exports: [listComponents],\n declarations: [listComponents, listPipes],\n})\nexport class PepListModule {\n constructor(private pepIconRegistry: PepIconRegistry) {\n this.pepIconRegistry.registerIcons([\n pepIconArrowDown,\n pepIconArrowEither,\n pepIconArrowUp,\n pepIconSystemMust,\n pepIconArrowRight,\n pepIconArrowRightAlt,\n pepIconArrowLeft,\n pepIconArrowLeftAlt,\n ]);\n }\n}\n","/*\n * Public API Surface of ngx-lib/list\n */\nexport * from './list.module';\nexport * from './list.model';\n// export * from './list_old.component';\nexport * from './list.component';\nexport * from './list-actions.component';\nexport * from './list-carousel.component';\nexport * from './list-chooser.component';\nexport * from './list-pager.component';\nexport * from './list-sorting.component';\nexport * from './list-total.component';\nexport * from './list-views.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {IsItemDisabledPipe as ɵe,IsItemSelectedPipe as ɵd} from './list.pipes';\nexport {VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY as ɵa,VirtualScrollerComponent as ɵb,VirtualScrollerModule as ɵc} from './virtual-scroller';"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pepperi-addons-ngx-lib-list.js","sources":["../../../projects/ngx-lib/list/virtual-scroller.ts","../../../projects/ngx-lib/list/list.model.ts","../../../projects/ngx-lib/list/list.component.ts","../../../projects/ngx-lib/list/list-actions.component.ts","../../../projects/ngx-lib/list/list-carousel.component.ts","../../../projects/ngx-lib/list/list-chooser.component.ts","../../../projects/ngx-lib/list/list-pager.component.ts","../../../projects/ngx-lib/list/list-sorting.component.ts","../../../projects/ngx-lib/list/list-total.component.ts","../../../projects/ngx-lib/list/list-views.component.ts","../../../projects/ngx-lib/list/list.pipes.ts","../../../projects/ngx-lib/list/list.module.ts","../../../projects/ngx-lib/list/public-api.ts","../../../projects/ngx-lib/list/pepperi-addons-ngx-lib-list.ts"],"sourcesContent":["import {\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tContentChild,\r\n\tElementRef,\r\n\tEventEmitter,\r\n\tInject,\r\n\tInput,\r\n\tNgModule,\r\n\tNgZone,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOptional,\r\n\tOutput,\r\n\tRenderer2,\r\n\tViewChild,\r\n} from '@angular/core';\r\n\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport * as tween from '@tweenjs/tween.js'\r\n\r\nexport interface VirtualScrollerDefaultOptions {\r\n\tcheckResizeInterval: number\r\n\tmodifyOverflowStyleOfParentScroll: boolean,\r\n\tresizeBypassRefreshThreshold: number,\r\n\tscrollAnimationTime: number;\r\n\tscrollDebounceTime: number;\r\n\tscrollThrottlingTime: number;\r\n\tscrollbarHeight?: number;\r\n\tscrollbarWidth?: number;\r\n\tstripedTable: boolean\r\n}\r\n\r\nexport function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY(): VirtualScrollerDefaultOptions {\r\n\treturn {\r\n\t\tcheckResizeInterval: 1000,\r\n\t\tmodifyOverflowStyleOfParentScroll: true,\r\n\t\tresizeBypassRefreshThreshold: 5,\r\n\t\tscrollAnimationTime: 750,\r\n\t\tscrollDebounceTime: 0,\r\n\t\tscrollThrottlingTime: 0,\r\n\t\tstripedTable: false\r\n\t};\r\n}\r\n\r\nexport interface WrapGroupDimensions {\r\n\tmaxChildSizePerWrapGroup: WrapGroupDimension[];\r\n\tnumberOfKnownWrapGroupChildSizes: number;\r\n\tsumOfKnownWrapGroupChildHeights: number;\r\n\tsumOfKnownWrapGroupChildWidths: number;\r\n}\r\n\r\nexport interface WrapGroupDimension {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titems: any[];\r\n}\r\n\r\nexport interface IDimensions {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titemCount: number;\r\n\titemsPerPage: number;\r\n\titemsPerWrapGroup: number;\r\n\tmaxScrollPosition: number;\r\n\tpageCount_fractional: number;\r\n\tscrollLength: number;\r\n\tviewportLength: number;\r\n\twrapGroupsPerPage: number;\r\n}\r\n\r\nexport type ScrollDirectionType = 'backward' | 'forward';\r\n\r\nexport interface IPageInfo {\r\n\tendIndex: number;\r\n\tendIndexWithBuffer: number;\r\n\tmaxScrollPosition: number;\r\n\tscrollEndPosition: number;\r\n\tscrollStartPosition: number;\r\n\tscrollDirection?: ScrollDirectionType;\r\n\tstartIndex: number;\r\n\tstartIndexWithBuffer: number;\r\n}\r\n\r\nexport interface IViewport extends IPageInfo {\r\n\tpadding: number;\r\n\tscrollLength: number;\r\n}\r\n\r\n@Component({\r\n\tselector: 'virtual-scroller,[virtualScroller]',\r\n\texportAs: 'virtualScroller',\r\n\ttemplate: `\r\n <div class=\"total-padding\" #invisiblePadding></div>\r\n <div class=\"scrollable-content\" #content>\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n\thost: {\r\n\t\t'[class.horizontal]': \"horizontal\",\r\n\t\t'[class.vertical]': \"!horizontal\",\r\n\t\t'[class.selfScroll]': \"!parentScroll\",\r\n\t\t'[class.rtl]': \"RTL\"\r\n\t},\r\n\tstyles: [`\r\n :host {\r\n position: relative;\r\n\t \tdisplay: block;\r\n -webkit-overflow-scrolling: touch;\r\n }\r\n\t\t:host.horizontal.selfScroll {\r\n overflow-y: visible;\r\n overflow-x: auto;\r\n\t\t}\r\n\t\t:host.horizontal.selfScroll.rtl {\r\n\t\t\ttransform: scaleX(-1);\r\n\t\t}\r\n\t\t:host.vertical.selfScroll {\r\n overflow-y: auto;\r\n overflow-x: visible;\r\n\t\t}\r\n .scrollable-content {\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n max-width: 100vw;\r\n max-height: 100vh;\r\n position: absolute;\r\n }\r\n\t\t.scrollable-content ::ng-deep > * {\r\n\t\t\tbox-sizing: border-box;\r\n\t\t}\r\n\t\t:host.horizontal {\r\n\t\t\twhite-space: nowrap;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content {\r\n\t\t\tdisplay: flex;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content ::ng-deep > * {\r\n\t\t\tflex-shrink: 0;\r\n\t\t\tflex-grow: 0;\r\n\t\t\twhite-space: initial;\r\n\t\t}\r\n\t\t:host.horizontal.rtl .scrollable-content ::ng-deep > * {\r\n\t\t\ttransform:scaleX(-1);\r\n\t\t}\r\n .total-padding {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n height: 1px;\r\n width: 1px;\r\n transform-origin: 0 0;\r\n opacity: 0;\r\n }\r\n :host.horizontal .total-padding {\r\n height: 100%;\r\n }\r\n `]\r\n})\r\nexport class VirtualScrollerComponent implements OnInit, OnChanges, OnDestroy {\r\n\tpublic viewPortItems: any[];\r\n\tpublic window = window;\r\n\r\n\tpublic get viewPortInfo(): IPageInfo {\r\n\t\tconst pageInfo: IViewport = this.previousViewPort || <any>{};\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex || 0,\r\n\t\t\tendIndex: pageInfo.endIndex || 0,\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n\t\t\tscrollDirection: pageInfo.scrollDirection || 'forward',\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer || 0,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected _disable = false;\r\n\t@Input()\r\n\tpublic get disable(): boolean {\r\n\t\treturn this._disable;\r\n\t}\r\n\tpublic set disable(value: boolean) {\r\n\t\tif (this._disable === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._disable = value;\r\n\t\tif (this._disable) {\r\n\t\t\tthis.removeScrollEventHandlers();\r\n\t\t} else {\r\n\t\t\tthis.addScrollEventHandlers();\r\n\t\t}\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic executeRefreshOutsideAngularZone = false;\r\n\r\n\tprotected _enableUnequalChildrenSizes = false;\r\n\t@Input()\r\n\tpublic get enableUnequalChildrenSizes(): boolean {\r\n\t\treturn this._enableUnequalChildrenSizes;\r\n\t}\r\n\tpublic set enableUnequalChildrenSizes(value: boolean) {\r\n\t\tif (this._enableUnequalChildrenSizes === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._enableUnequalChildrenSizes = value;\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic RTL = false;\r\n\r\n\t@Input()\r\n\tpublic useMarginInsteadOfTranslate = false;\r\n\r\n\t@Input()\r\n\tpublic modifyOverflowStyleOfParentScroll: boolean;\r\n\r\n\t@Input()\r\n\tpublic stripedTable: boolean;\r\n\r\n\t@Input()\r\n\tpublic scrollbarWidth: number;\r\n\r\n\t@Input()\r\n\tpublic scrollbarHeight: number;\r\n\r\n\t@Input()\r\n\tpublic childWidth: number;\r\n\r\n\t@Input()\r\n\tpublic childHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildWidth: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportWidth = 1920;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportHeight = 1080;\r\n\r\n\tprotected _bufferAmount: number;\r\n\t@Input()\r\n\tpublic get bufferAmount(): number {\r\n\t\tif (typeof (this._bufferAmount) === 'number' && this._bufferAmount >= 0) {\r\n\t\t\treturn this._bufferAmount;\r\n\t\t} else {\r\n\t\t\treturn this.enableUnequalChildrenSizes ? 5 : 0;\r\n\t\t}\r\n\t}\r\n\tpublic set bufferAmount(value: number) {\r\n\t\tthis._bufferAmount = value;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic scrollAnimationTime: number;\r\n\r\n\t@Input()\r\n\tpublic resizeBypassRefreshThreshold: number;\r\n\r\n\tprotected _scrollThrottlingTime: number;\r\n\t@Input()\r\n\tpublic get scrollThrottlingTime(): number {\r\n\t\treturn this._scrollThrottlingTime;\r\n\t}\r\n\tpublic set scrollThrottlingTime(value: number) {\r\n\t\tthis._scrollThrottlingTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected _scrollDebounceTime: number;\r\n\t@Input()\r\n\tpublic get scrollDebounceTime(): number {\r\n\t\treturn this._scrollDebounceTime;\r\n\t}\r\n\tpublic set scrollDebounceTime(value: number) {\r\n\t\tthis._scrollDebounceTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected onScroll: () => void;\r\n\tprotected updateOnScrollFunction(): void {\r\n\t\tif (this.scrollDebounceTime) {\r\n\t\t\tthis.onScroll = <any>this.debounce(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollDebounceTime);\r\n\t\t}\r\n\t\telse if (this.scrollThrottlingTime) {\r\n\t\t\tthis.onScroll = <any>this.throttleTrailing(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollThrottlingTime);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.onScroll = () => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprotected checkScrollElementResizedTimer: number;\r\n\tprotected _checkResizeInterval: number;\r\n\t@Input()\r\n\tpublic get checkResizeInterval(): number {\r\n\t\treturn this._checkResizeInterval;\r\n\t}\r\n\tpublic set checkResizeInterval(value: number) {\r\n\t\tif (this._checkResizeInterval === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._checkResizeInterval = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tprotected _items: any[] = [];\r\n\t@Input()\r\n\tpublic get items(): any[] {\r\n\t\treturn this._items;\r\n\t}\r\n\tpublic set items(value: any[]) {\r\n\t\tif (value === this._items) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._items = value || [];\r\n\t\tthis.refresh_internal(true);\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic compareItems: (item1: any, item2: any) => boolean = (item1: any, item2: any) => item1 === item2;\r\n\r\n\tprotected _horizontal: boolean;\r\n\t@Input()\r\n\tpublic get horizontal(): boolean {\r\n\t\treturn this._horizontal;\r\n\t}\r\n\tpublic set horizontal(value: boolean) {\r\n\t\tthis._horizontal = value;\r\n\t\tthis.updateDirection();\r\n\t}\r\n\r\n\tprotected revertParentOverscroll(): void {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (scrollElement && this.oldParentScrollOverflow) {\r\n\t\t\tscrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n\t\t\tscrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n\t\t}\r\n\r\n\t\tthis.oldParentScrollOverflow = undefined;\r\n\t}\r\n\r\n\tprotected oldParentScrollOverflow: { x: string, y: string };\r\n\tprotected _parentScroll: Element | Window;\r\n\t@Input()\r\n\tpublic get parentScroll(): Element | Window {\r\n\t\treturn this._parentScroll;\r\n\t}\r\n\tpublic set parentScroll(value: Element | Window) {\r\n\t\tif (this._parentScroll === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.revertParentOverscroll();\r\n\t\tthis._parentScroll = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n\t\t\tthis.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n\t\t\tscrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n\t\t\tscrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _lastChildRect: ClientRect;\r\n\r\n\t@Output()\r\n\tpublic vsChildRectChange: EventEmitter<ClientRect> = new EventEmitter<ClientRect>();\r\n\r\n\t@Output()\r\n\tpublic vsUpdate: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n\r\n\t@Output()\r\n\tpublic vsChange: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsStart: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsEnd: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@ViewChild('content', { read: ElementRef, static: true })\r\n\tpublic contentElementRef: ElementRef;\r\n\r\n\t@ViewChild('invisiblePadding', { read: ElementRef, static: true })\r\n\tprotected invisiblePaddingElementRef: ElementRef;\r\n\r\n\t@ContentChild('header', { read: ElementRef, static: false })\r\n\tprotected headerElementRef: ElementRef;\r\n\r\n\t@ContentChild('container', { read: ElementRef, static: false })\r\n\tprotected containerElementRef: ElementRef;\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tpublic ngOnDestroy(): void {\r\n\t\tthis.removeScrollEventHandlers();\r\n\t\tthis.revertParentOverscroll();\r\n\t}\r\n\r\n\tpublic ngOnChanges(changes: any): void {\r\n\t\tconst indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n\t\tthis.cachedItemsLength = this.items.length;\r\n\r\n\t\tconst firstRun: boolean = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n\t\tthis.refresh_internal(indexLengthChanged || firstRun);\r\n\t}\r\n\r\n\tpublic ngDoCheck(): void {\r\n\t\tif (this.cachedItemsLength !== this.items.length) {\r\n\t\t\tthis.cachedItemsLength = this.items.length;\r\n\t\t\tthis.refresh_internal(true);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {\r\n\t\t\tlet itemsArrayChanged = false;\r\n\t\t\tfor (let i = 0; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\tif (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {\r\n\t\t\t\t\titemsArrayChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (itemsArrayChanged) {\r\n\t\t\t\tthis.refresh_internal(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic refresh(): void {\r\n\t\tthis.refresh_internal(true);\r\n\t}\r\n\r\n\tpublic invalidateAllCachedMeasurements(): void {\r\n\t\tthis.wrapGroupDimensions = {\r\n\t\t\tmaxChildSizePerWrapGroup: [],\r\n\t\t\tnumberOfKnownWrapGroupChildSizes: 0,\r\n\t\t\tsumOfKnownWrapGroupChildWidths: 0,\r\n\t\t\tsumOfKnownWrapGroupChildHeights: 0\r\n\t\t};\r\n\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementForItem(item: any): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst index = this.items && this.items.indexOf(item);\r\n\t\t\tif (index >= 0) {\r\n\t\t\t\tthis.invalidateCachedMeasurementAtIndex(index);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementAtIndex(index: number): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n\t\t\tif (cachedMeasurement) {\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic scrollInto(item: any, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tconst index: number = this.items.indexOf(item);\r\n\t\tif (index === -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tlet maxRetries = 5;\r\n\r\n\t\tconst retryIfNeeded = () => {\r\n\t\t\t--maxRetries;\r\n\t\t\tif (maxRetries <= 0) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst dimensions = this.calculateDimensions();\r\n\t\t\tconst desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n\t\t\tif (this.previousViewPort.startIndex === desiredStartIndex) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n\t\t};\r\n\r\n\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n\t}\r\n\r\n\tprotected scrollToIndex_internal(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tlet scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n\t\tif (!alignToBeginning) {\r\n\t\t\tscroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n\t\t}\r\n\r\n\t\tthis.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToPosition(scrollPosition: number, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tscrollPosition += this.getElementsOffset();\r\n\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tlet animationRequest: number;\r\n\r\n\t\tif (this.currentTween) {\r\n\t\t\tthis.currentTween.stop();\r\n\t\t\tthis.currentTween = undefined;\r\n\t\t}\r\n\r\n\t\tif (!animationMilliseconds) {\r\n\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n\r\n\t\tconst newTween = new tween.Tween(tweenConfigObj)\r\n\t\t\t.to({ scrollPosition }, animationMilliseconds)\r\n\t\t\t.easing(tween.Easing.Quadratic.Out)\r\n\t\t\t.onUpdate((data) => {\r\n\t\t\t\tif (isNaN(data.scrollPosition)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t})\r\n\t\t\t.onStop(() => {\r\n\t\t\t\tcancelAnimationFrame(animationRequest);\r\n\t\t\t})\r\n\t\t\t.start();\r\n\r\n\t\tconst animate = (time?: number) => {\r\n\t\t\tif (!newTween[\"isPlaying\"]()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tnewTween.update(time);\r\n\t\t\tif (tweenConfigObj.scrollPosition === scrollPosition) {\r\n\t\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\t\tanimationRequest = requestAnimationFrame(animate);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tanimate();\r\n\t\tthis.currentTween = newTween;\r\n\t}\r\n\r\n\tprotected isAngularUniversalSSR: boolean;\r\n\r\n\tconstructor(\r\n\t\tprotected readonly element: ElementRef,\r\n\t\tprotected readonly renderer: Renderer2,\r\n\t\tprotected readonly zone: NgZone,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\r\n\t\t@Inject(PLATFORM_ID) platformId: any,\r\n\t\t@Optional() @Inject('virtual-scroller-default-options')\r\n\t\toptions: VirtualScrollerDefaultOptions\r\n\t) {\r\n\r\n\t\tthis.isAngularUniversalSSR = isPlatformServer(platformId);\r\n\r\n\t\tthis.checkResizeInterval = options.checkResizeInterval;\r\n\t\tthis.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;\r\n\t\tthis.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;\r\n\t\tthis.scrollAnimationTime = options.scrollAnimationTime;\r\n\t\tthis.scrollDebounceTime = options.scrollDebounceTime;\r\n\t\tthis.scrollThrottlingTime = options.scrollThrottlingTime;\r\n\t\tthis.scrollbarHeight = options.scrollbarHeight;\r\n\t\tthis.scrollbarWidth = options.scrollbarWidth;\r\n\t\tthis.stripedTable = options.stripedTable;\r\n\r\n\t\tthis.horizontal = false;\r\n\t\tthis.resetWrapGroupDimensions();\r\n\t}\r\n\r\n\tprotected getElementSize(element: HTMLElement): ClientRect {\r\n\t\tconst result = element.getBoundingClientRect();\r\n\t\tconst styles = getComputedStyle(element);\r\n\t\tconst marginTop = parseInt(styles['margin-top'], 10) || 0;\r\n\t\tconst marginBottom = parseInt(styles['margin-bottom'], 10) || 0;\r\n\t\tconst marginLeft = parseInt(styles['margin-left'], 10) || 0;\r\n\t\tconst marginRight = parseInt(styles['margin-right'], 10) || 0;\r\n\r\n\t\treturn {\r\n\t\t\ttop: result.top + marginTop,\r\n\t\t\tbottom: result.bottom + marginBottom,\r\n\t\t\tleft: result.left + marginLeft,\r\n\t\t\tright: result.right + marginRight,\r\n\t\t\twidth: result.width + marginLeft + marginRight,\r\n\t\t\theight: result.height + marginTop + marginBottom\r\n\t\t};\r\n\t}\r\n\r\n\tprotected previousScrollBoundingRect: ClientRect;\r\n\tprotected checkScrollElementResized(): void {\r\n\t\tconst boundingRect = this.getElementSize(this.getScrollElement());\r\n\r\n\t\tlet sizeChanged: boolean;\r\n\t\tif (!this.previousScrollBoundingRect) {\r\n\t\t\tsizeChanged = true;\r\n\t\t} else {\r\n\t\t\tconst widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n\t\t\tconst heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n\t\t\tsizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n\t\t}\r\n\r\n\t\tif (sizeChanged) {\r\n\t\t\tthis.previousScrollBoundingRect = boundingRect;\r\n\t\t\tif (boundingRect.width > 0 && boundingRect.height > 0) {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _invisiblePaddingProperty;\r\n\tprotected _offsetType;\r\n\tprotected _scrollType;\r\n\tprotected _pageOffsetType;\r\n\tprotected _childScrollDim;\r\n\tprotected _translateDir;\r\n\tprotected _marginDir;\r\n\tprotected updateDirection(): void {\r\n\t\tif (this.horizontal) {\r\n\t\t\tthis._childScrollDim = 'childWidth';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleX';\r\n\t\t\tthis._marginDir = 'margin-left';\r\n\t\t\tthis._offsetType = 'offsetLeft';\r\n\t\t\tthis._pageOffsetType = 'pageXOffset';\r\n\t\t\tthis._scrollType = 'scrollLeft';\r\n\t\t\tthis._translateDir = 'translateX';\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._childScrollDim = 'childHeight';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleY';\r\n\t\t\tthis._marginDir = 'margin-top';\r\n\t\t\tthis._offsetType = 'offsetTop';\r\n\t\t\tthis._pageOffsetType = 'pageYOffset';\r\n\t\t\tthis._scrollType = 'scrollTop';\r\n\t\t\tthis._translateDir = 'translateY';\r\n\t\t}\r\n\t}\r\n\r\n\tprotected debounce(func: () => void, wait: number, ...args): () => void {\r\n\t\tconst throttled = this.throttleTrailing(func, wait);\r\n\t\tconst result = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t\tthrottled.apply(this, args);\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected throttleTrailing(func: () => void, wait: number, ...args): () => void {\r\n\t\tlet timeout = undefined;\r\n\t\tlet _arguments = args;\r\n\t\tconst result = function () {\r\n\t\t\tconst _this = this;\r\n\t\t\t_arguments = args\r\n\r\n\t\t\tif (timeout) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (wait <= 0) {\r\n\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t} else {\r\n\t\t\t\ttimeout = setTimeout(function () {\r\n\t\t\t\t\ttimeout = undefined;\r\n\t\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t\t}, wait);\r\n\t\t\t}\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tif (timeout) {\r\n\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\ttimeout = undefined;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatedScrollbarWidth = 0;\r\n\tprotected calculatedScrollbarHeight = 0;\r\n\r\n\tprotected padding = 0;\r\n\tprotected previousViewPort: IViewport = <any>{};\r\n\tprotected currentTween: tween.Tween;\r\n\tprotected cachedItemsLength: number;\r\n\r\n\tprotected disposeScrollHandler: () => void | undefined;\r\n\tprotected disposeResizeHandler: () => void | undefined;\r\n\r\n\tprotected refresh_internal(itemsArrayModified: boolean, refreshCompletedCallback: () => void = undefined, maxRunTimes = 2): void {\r\n\t\t//note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n\t\t//The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n\t\t//The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.\r\n\t\t//Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.\r\n\r\n\t\tif (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {\r\n\t\t\t//if items were prepended, scroll forward to keep same items visible\r\n\t\t\tconst oldViewPort = this.previousViewPort;\r\n\t\t\tconst oldViewPortItems = this.viewPortItems;\r\n\r\n\t\t\tconst oldRefreshCompletedCallback = refreshCompletedCallback;\r\n\t\t\trefreshCompletedCallback = () => {\r\n\t\t\t\tconst scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;\r\n\t\t\t\tif (scrollLengthDelta > 0 && this.viewPortItems) {\r\n\t\t\t\t\tconst oldStartItem = oldViewPortItems[0];\r\n\t\t\t\t\tconst oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));\r\n\t\t\t\t\tif (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {\r\n\t\t\t\t\t\tlet itemOrderChanged = false;\r\n\t\t\t\t\t\tfor (let i = 1; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\t\t\t\tif (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {\r\n\t\t\t\t\t\t\t\titemOrderChanged = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!itemOrderChanged) {\r\n\t\t\t\t\t\t\tthis.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (oldRefreshCompletedCallback) {\r\n\t\t\t\t\toldRefreshCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\trequestAnimationFrame(() => {\r\n\r\n\t\t\t\tif (itemsArrayModified) {\r\n\t\t\t\t\tthis.resetWrapGroupDimensions();\r\n\t\t\t\t}\r\n\t\t\t\tconst viewport = this.calculateViewport();\r\n\r\n\t\t\t\tconst startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;\r\n\t\t\t\tconst endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;\r\n\t\t\t\tconst scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;\r\n\t\t\t\tconst paddingChanged = viewport.padding !== this.previousViewPort.padding;\r\n\t\t\t\tconst scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;\r\n\r\n\t\t\t\tconst scrollDirection: ScrollDirectionType = this.previousViewPort.endIndex <= viewport.endIndex ? 'forward' : 'backward';\r\n\t\t\t\tthis.previousViewPort = viewport;\r\n\r\n\t\t\t\tif (scrollLengthChanged) {\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'transform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'webkitTransform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (paddingChanged) {\r\n\t\t\t\t\tif (this.useMarginInsteadOfTranslate) {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.headerElementRef) {\r\n\t\t\t\t\tconst scrollPosition = this.getScrollElement()[this._scrollType];\r\n\t\t\t\t\tconst containerOffset = this.getElementsOffset();\r\n\t\t\t\t\tconst offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst changeEventArg: IPageInfo = (startChanged || endChanged) ? {\r\n\t\t\t\t\tstartIndex: viewport.startIndex,\r\n\t\t\t\t\tendIndex: viewport.endIndex,\r\n\t\t\t\t\tscrollStartPosition: viewport.scrollStartPosition,\r\n\t\t\t\t\tscrollEndPosition: viewport.scrollEndPosition,\r\n\t\t\t\t\tscrollDirection: scrollDirection,\r\n\t\t\t\t\tstartIndexWithBuffer: viewport.startIndexWithBuffer,\r\n\t\t\t\t\tendIndexWithBuffer: viewport.endIndexWithBuffer,\r\n\t\t\t\t\tmaxScrollPosition: viewport.maxScrollPosition,\r\n\t\t\t\t} : undefined;\r\n\r\n\r\n\t\t\t\tif (startChanged || endChanged || scrollPositionChanged) {\r\n\t\t\t\t\tconst handleChanged = () => {\r\n\t\t\t\t\t\t// update the scroll list to trigger re-render of components in viewport\r\n\t\t\t\t\t\tthis.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n\t\t\t\t\t\tthis.vsUpdate.emit(this.viewPortItems);\r\n\r\n\t\t\t\t\t\tif (startChanged) {\r\n\t\t\t\t\t\t\tthis.vsStart.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (endChanged) {\r\n\t\t\t\t\t\t\tthis.vsEnd.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (startChanged || endChanged) {\r\n\t\t\t\t\t\t\tthis.changeDetectorRef.markForCheck();\r\n\t\t\t\t\t\t\tthis.vsChange.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (maxRunTimes > 0) {\r\n\t\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\r\n\t\t\t\t\tif (this.executeRefreshOutsideAngularZone) {\r\n\t\t\t\t\t\thandleChanged();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.zone.run(handleChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getScrollElement(): HTMLElement {\r\n\t\treturn this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n\t}\r\n\r\n\tprotected addScrollEventHandlers(): void {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tthis.removeScrollEventHandlers();\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);\r\n\t\t\t\tthis.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);\r\n\t\t\t\tif (this._checkResizeInterval > 0) {\r\n\t\t\t\t\tthis.checkScrollElementResizedTimer = <any>setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected removeScrollEventHandlers(): void {\r\n\t\tif (this.checkScrollElementResizedTimer) {\r\n\t\t\tclearInterval(this.checkScrollElementResizedTimer);\r\n\t\t}\r\n\r\n\t\tif (this.disposeScrollHandler) {\r\n\t\t\tthis.disposeScrollHandler();\r\n\t\t\tthis.disposeScrollHandler = undefined;\r\n\t\t}\r\n\r\n\t\tif (this.disposeResizeHandler) {\r\n\t\t\tthis.disposeResizeHandler();\r\n\t\t\tthis.disposeResizeHandler = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getElementsOffset(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet offset = 0;\r\n\r\n\t\tif (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n\t\t\toffset += this.containerElementRef.nativeElement[this._offsetType];\r\n\t\t}\r\n\r\n\t\tif (this.parentScroll) {\r\n\t\t\tconst scrollElement = this.getScrollElement();\r\n\t\t\tconst elementClientRect = this.getElementSize(this.element.nativeElement);\r\n\t\t\tconst scrollClientRect = this.getElementSize(scrollElement);\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\toffset += elementClientRect.left - scrollClientRect.left;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\toffset += elementClientRect.top - scrollClientRect.top;\r\n\t\t\t}\r\n\r\n\t\t\tif (!(this.parentScroll instanceof Window)) {\r\n\t\t\t\toffset += scrollElement[this._scrollType];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn offset;\r\n\t}\r\n\r\n\tprotected countItemsPerWrapGroup(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n\t\t}\r\n\r\n\t\tconst propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n\t\tconst children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\r\n\r\n\t\tconst childrenLength = children ? children.length : 0;\r\n\t\tif (childrenLength === 0) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tconst firstOffset = children[0][propertyName];\r\n\t\tlet result = 1;\r\n\t\twhile (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n\t\t\t++result;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected getScrollStartPosition(): number {\r\n\t\tlet windowScrollValue = undefined;\r\n\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\twindowScrollValue = window[this._pageOffsetType];\r\n\t\t}\r\n\r\n\t\treturn windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n\t}\r\n\r\n\tprotected minMeasuredChildWidth: number;\r\n\tprotected minMeasuredChildHeight: number;\r\n\r\n\tprotected wrapGroupDimensions: WrapGroupDimensions;\r\n\r\n\tprotected resetWrapGroupDimensions(): void {\r\n\t\tconst oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n\t\tthis.invalidateAllCachedMeasurements();\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst itemsPerWrapGroup: number = this.countItemsPerWrapGroup();\r\n\t\tfor (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n\t\t\tconst oldWrapGroupDimension: WrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\tif (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet itemsChanged = false;\r\n\t\t\tconst arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n\t\t\tfor (let i = 0; i < itemsPerWrapGroup; ++i) {\r\n\t\t\t\tif (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n\t\t\t\t\titemsChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!itemsChanged) {\r\n\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected calculateDimensions(): IDimensions {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tconst maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n\t\tthis.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n\t\tthis.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n\r\n\t\tlet viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n\t\tlet viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n\r\n\t\tconst content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n\r\n\t\tconst itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n\t\tlet wrapGroupsPerPage;\r\n\r\n\t\tlet defaultChildWidth;\r\n\t\tlet defaultChildHeight;\r\n\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\tviewportWidth = this.ssrViewportWidth;\r\n\t\t\tviewportHeight = this.ssrViewportHeight;\r\n\t\t\tdefaultChildWidth = this.ssrChildWidth;\r\n\t\t\tdefaultChildHeight = this.ssrChildHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t}\r\n\t\telse if (!this.enableUnequalChildrenSizes) {\r\n\t\t\tif (content.children.length > 0) {\r\n\t\t\t\tif (!this.childWidth || !this.childHeight) {\r\n\t\t\t\t\tif (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildWidth = viewportWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildHeight = viewportHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst child = content.children[0];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\t\t\t\tthis.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n\t\t\t\tthis.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n\r\n\t\t\t\t// Added for getting the child height (for card view, return all the clientRect object).\r\n\t\t\t\tif (this._lastChildRect?.height !== clientRect?.height ||\r\n\t\t\t\t\tthis._lastChildRect?.width !== clientRect?.width) {\r\n\t\t\t\t\tthis._lastChildRect = clientRect;\r\n\t\t\t\t\tthis.vsChildRectChange.emit(clientRect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tdefaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t} else {\r\n\t\t\tlet scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n\r\n\t\t\tlet arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n\t\t\tlet wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n\r\n\t\t\tlet maxWidthForWrapGroup = 0;\r\n\t\t\tlet maxHeightForWrapGroup = 0;\r\n\t\t\tlet sumOfVisibleMaxWidths = 0;\r\n\t\t\tlet sumOfVisibleMaxHeights = 0;\r\n\t\t\twrapGroupsPerPage = 0;\r\n\r\n\t\t\tfor (let i = 0; i < content.children.length; ++i) {\r\n\t\t\t\t++arrayStartIndex;\r\n\t\t\t\tconst child = content.children[i];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\r\n\t\t\t\tmaxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n\t\t\t\tmaxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n\r\n\t\t\t\tif (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n\t\t\t\t\tconst oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\t\t\tif (oldValue) {\r\n\t\t\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\tconst items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n\t\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n\t\t\t\t\t\tchildWidth: maxWidthForWrapGroup,\r\n\t\t\t\t\t\tchildHeight: maxHeightForWrapGroup,\r\n\t\t\t\t\t\titems: items\r\n\t\t\t\t\t};\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n\r\n\t\t\t\t\tif (this.horizontal) {\r\n\t\t\t\t\t\tlet maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlet maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++wrapGroupIndex;\r\n\r\n\t\t\t\t\tmaxWidthForWrapGroup = 0;\r\n\t\t\t\t\tmaxHeightForWrapGroup = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tconst averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tdefaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\tif (viewportWidth > sumOfVisibleMaxWidths) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (viewportHeight > sumOfVisibleMaxHeights) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst itemCount = this.items.length;\r\n\t\tconst itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n\t\tconst pageCount_fractional = itemCount / itemsPerPage;\r\n\t\tconst numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n\r\n\t\tlet scrollLength = 0;\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tlet numUnknownChildSizes = 0;\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\tscrollLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tscrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\t\t} else {\r\n\t\t\tscrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n\t\t}\r\n\r\n\t\tif (this.headerElementRef) {\r\n\t\t\tscrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n\t\t}\r\n\r\n\t\tconst viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n\t\tconst maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n\r\n\t\treturn {\r\n\t\t\tchildHeight: defaultChildHeight,\r\n\t\t\tchildWidth: defaultChildWidth,\r\n\t\t\titemCount: itemCount,\r\n\t\t\titemsPerPage: itemsPerPage,\r\n\t\t\titemsPerWrapGroup: itemsPerWrapGroup,\r\n\t\t\tmaxScrollPosition: maxScrollPosition,\r\n\t\t\tpageCount_fractional: pageCount_fractional,\r\n\t\t\tscrollLength: scrollLength,\r\n\t\t\tviewportLength: viewportLength,\r\n\t\t\twrapGroupsPerPage: wrapGroupsPerPage,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected cachedPageSize = 0;\r\n\tprotected previousScrollNumberElements = 0;\r\n\r\n\tprotected calculatePadding(arrayStartIndexWithBuffer: number, dimensions: IDimensions): number {\r\n\t\tif (dimensions.itemCount === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\tconst startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes) {\r\n\t\t\treturn defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n\t\t}\r\n\r\n\t\tlet numUnknownChildSizes = 0;\r\n\t\tlet result = 0;\r\n\t\tfor (let i = 0; i < startingWrapGroupIndex; ++i) {\r\n\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\tif (childSize) {\r\n\t\t\t\tresult += childSize;\r\n\t\t\t} else {\r\n\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t}\r\n\t\t}\r\n\t\tresult += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatePageInfo(scrollPosition: number, dimensions: IDimensions): IPageInfo {\r\n\t\tlet scrollPercentage = 0;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n\t\t\tlet totalScrolledLength = 0;\r\n\t\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\ttotalScrolledLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttotalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (scrollPosition < totalScrolledLength) {\r\n\t\t\t\t\tscrollPercentage = i / numberOfWrapGroups;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tscrollPercentage = scrollPosition / dimensions.scrollLength;\r\n\t\t}\r\n\r\n\t\tconst startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n\r\n\t\tconst maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n\t\tlet arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n\t\tarrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n\r\n\t\tif (this.stripedTable) {\r\n\t\t\tconst bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n\t\t\tif (arrayStartIndex % bufferBoundary !== 0) {\r\n\t\t\t\tarrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n\t\tconst endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n\t\tif (endIndexWithinWrapGroup > 0) {\r\n\t\t\tarrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n\t\t}\r\n\r\n\t\tif (isNaN(arrayStartIndex)) {\r\n\t\t\tarrayStartIndex = 0;\r\n\t\t}\r\n\t\tif (isNaN(arrayEndIndex)) {\r\n\t\t\tarrayEndIndex = 0;\r\n\t\t}\r\n\r\n\t\tarrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n\t\tarrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n\r\n\t\tconst bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n\t\tconst startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n\t\tconst endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: arrayStartIndex,\r\n\t\t\tendIndex: arrayEndIndex,\r\n\t\t\tstartIndexWithBuffer: startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: endIndexWithBuffer,\r\n\t\t\tscrollStartPosition: scrollPosition,\r\n\t\t\tscrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n\t\t\tmaxScrollPosition: dimensions.maxScrollPosition\r\n\t\t};\r\n\t}\r\n\r\n\tprotected calculateViewport(): IViewport {\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tconst offset = this.getElementsOffset();\r\n\r\n\t\tlet scrollStartPosition = this.getScrollStartPosition();\r\n\t\tif (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n\t\t\tscrollStartPosition = dimensions.scrollLength;\r\n\t\t} else {\r\n\t\t\tscrollStartPosition -= offset;\r\n\t\t}\r\n\t\tscrollStartPosition = Math.max(0, scrollStartPosition);\r\n\r\n\t\tconst pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n\t\tconst newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n\t\tconst newScrollLength = dimensions.scrollLength;\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex,\r\n\t\t\tendIndex: pageInfo.endIndex,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n\t\t\tpadding: Math.round(newPadding),\r\n\t\t\tscrollLength: Math.round(newScrollLength),\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition,\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition\r\n\t\t};\r\n\t}\r\n}\r\n\r\n@NgModule({\r\n\texports: [VirtualScrollerComponent],\r\n\tdeclarations: [VirtualScrollerComponent],\r\n\timports: [CommonModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: 'virtual-scroller-default-options',\r\n\t\t\tuseFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY\r\n\t\t}\r\n\t]\r\n})\r\nexport class VirtualScrollerModule { }","import { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\n\nexport type PepListSelectionType =\n | 'none'\n | 'single'\n | 'multi';\n\nexport type PepListPagerType = 'pages' | 'scroll';\n\nexport type PepListViewType = '' | 'cards' | 'lines' | 'table'; // | 'map';\n\nexport type PepListCardSizeType = 'sm' | 'md';\n\nexport interface IPepListItemClickEvent {\n source: ObjectsDataRow;\n viewType: PepListViewType;\n}\n\nexport class PepSelectionData {\n selectionType: number;\n rows: Array<any>;\n rowTypes: Array<any>;\n}\n\nexport interface IPepListLoadItemsEvent {\n fromIndex: number;\n toIndex: number;\n // updateItemsFunc: () => void; //() => any; \n}\n\nexport interface IPepListLoadPageEvent {\n pageIndex: number;\n pageSize: number;\n // updatePageFunc: () => void; //() => any; \n}\n\nexport interface IPepListStartIndexChangeEvent {\n startIndex: number;\n}\n\nexport const DEFAULT_PAGE_SIZE = 50;\n\nexport interface IPepListSortingChangeEvent {\n sortBy: string;\n isAsc: boolean;\n}\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n Renderer2,\n ViewChild,\n ElementRef,\n ChangeDetectorRef,\n OnDestroy,\n OnChanges,\n NgZone,\n} from '@angular/core';\nimport { delay } from 'rxjs/operators';\nimport {\n PepLayoutService,\n PepScreenSizeType,\n PepSessionService,\n UIControl,\n UIControlField,\n FIELD_TYPE,\n ObjectsDataRow,\n} from '@pepperi-addons/ngx-lib';\nimport {\n IPepFormFieldValueChangeEvent,\n IPepFormFieldClickEvent,\n} from '@pepperi-addons/ngx-lib/form';\n\nimport { VirtualScrollerComponent, IPageInfo } from './virtual-scroller';\n\nimport {\n IPepListLoadItemsEvent,\n IPepListSortingChangeEvent,\n IPepListItemClickEvent,\n PepListSelectionType,\n PepListViewType,\n PepSelectionData,\n PepListPagerType,\n IPepListLoadPageEvent,\n DEFAULT_PAGE_SIZE,\n IPepListStartIndexChangeEvent,\n PepListCardSizeType,\n} from './list.model';\nimport {\n IPepListPagerChangeEvent,\n PepListPagerComponent,\n} from './list-pager.component';\n\nimport * as tween from '@tweenjs/tween.js';\n\n@Component({\n selector: 'pep-list',\n templateUrl: './list.component.html',\n styleUrls: ['./list.component.scss'],\n host: {\n '(window:resize)': 'onWinResize($event)',\n },\n // changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PepListComponent implements OnInit, OnChanges, OnDestroy {\n static TOP_ITEMS_DEFAULT = 100;\n static TOP_ITEMS_TABLE = 100;\n static TOP_ITEMS_THUMBNAILS = 100;\n static TOP_ITEMS_ARRAY = 2500;\n\n static SELECTED_ITEMS_STATE_KEY = 'SelectedItems';\n static UN_SELECTED_ITEMS_STATE_KEY = 'UnSelectedItems';\n static ALL_SELECTED_STATE_KEY = 'AllSelected';\n static SORT_BY_STATE_KEY = 'SortBy';\n static ASCENDING_STATE_KEY = 'IsAscending';\n\n static MINIMUM_COLUMN_WIDTH = 48;\n\n @Input() noDataFoundMsg: string = null;\n @Input() selectionTypeForActions: PepListSelectionType = 'multi';\n @Input() showCardSelection = false;\n @Input() hideAllSelectionInMulti = false;\n\n @Input() cardSize: PepListCardSizeType = 'md';\n private _viewType: PepListViewType = '';\n @Input()\n set viewType(value: PepListViewType) {\n this._viewType = value;\n this.isTable = value === 'table';\n }\n get viewType(): PepListViewType {\n return this._viewType;\n }\n\n @Input() firstFieldAsLink = false;\n @Input() supportSorting = true;\n @Input() supportResizing = true;\n\n private _parentScroll: Element | Window = null;\n @Input()\n set parentScroll(value: Element | Window) {\n this._parentScroll = value;\n }\n get parentScroll(): Element | Window {\n return this._parentScroll;\n }\n\n @Input() disabled = false;\n\n private _lockEvents = false;\n @Input()\n set lockEvents(value: boolean) {\n this._lockEvents = value;\n\n if (this._lockEvents) {\n this.renderer.addClass(this.hostElement.nativeElement, 'lock-events');\n } else {\n this.renderer.removeClass(this.hostElement.nativeElement, 'lock-events');\n }\n }\n get lockEvents(): boolean {\n return this._lockEvents;\n }\n\n @Input() lockItemInnerEvents = false;\n @Input() printMode = false;\n @Input() isReport = false;\n @Input() totalsRow = [];\n @Input() pagerType: PepListPagerType = 'scroll';\n @Input() pageSize: number = DEFAULT_PAGE_SIZE;\n @Input() pageIndex = 0;\n // @Input() startIndex = 0;\n\n @Input() scrollAnimationTime = 500;\n @Input() scrollDebounceTime = 0;\n @Input() scrollThrottlingTime = 0;\n\n private _useAsWebComponent = false;\n @Input()\n set useAsWebComponent(value: boolean) {\n this._useAsWebComponent = value;\n if (value) {\n this.exportFunctionsOnHostElement();\n }\n }\n get useAsWebComponent(): boolean {\n return this._useAsWebComponent;\n }\n\n @Output()\n itemClick: EventEmitter<IPepListItemClickEvent> = new EventEmitter<IPepListItemClickEvent>();\n\n @Output()\n fieldClick: EventEmitter<IPepFormFieldClickEvent> = new EventEmitter<IPepFormFieldClickEvent>();\n\n @Output()\n valueChange: EventEmitter<IPepFormFieldValueChangeEvent> = new EventEmitter<IPepFormFieldValueChangeEvent>();\n\n @Output()\n sortingChange: EventEmitter<IPepListSortingChangeEvent> = new EventEmitter<IPepListSortingChangeEvent>();\n\n @Output()\n selectedItemsChange: EventEmitter<number> = new EventEmitter<number>();\n\n @Output()\n selectedItemChange: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n selectAllClick: EventEmitter<any> = new EventEmitter<any>();\n\n // @Output()\n // singleActionClick: EventEmitter<any> = new EventEmitter<any>();\n\n @Output()\n listLoad: EventEmitter<void> = new EventEmitter<void>();\n\n @Output()\n loadItems: EventEmitter<IPepListLoadItemsEvent> = new EventEmitter<IPepListLoadItemsEvent>();\n\n @Output()\n loadPage: EventEmitter<IPepListLoadPageEvent> = new EventEmitter<IPepListLoadPageEvent>();\n\n @Output()\n startIndexChange: EventEmitter<IPepListStartIndexChangeEvent> = new EventEmitter<IPepListStartIndexChangeEvent>();\n\n @ViewChild(VirtualScrollerComponent) private virtualScroller: VirtualScrollerComponent;\n @ViewChild('selectAllCB') selectAllCB: any;\n\n private _layout: UIControl = null;\n get layout(): UIControl {\n return this._layout;\n }\n\n totalRows = -1;\n isTable = false;\n private hasColumnWidthOfTypePercentage = true;\n\n private _items: Array<ObjectsDataRow> = null;\n get items(): Array<ObjectsDataRow> {\n return this._items;\n }\n\n private itemsCounter = 0;\n\n currentPageItems: Array<ObjectsDataRow>;\n\n SEPARATOR = ',';\n isAllSelected = false;\n selectedItems = new Map<string, string>();\n unSelectedItems = new Map<string, string>();\n\n private currentTween: any;\n\n selectedItemId = '';\n hoveredItemId = '';\n\n private containerWidth = 0;\n private tableScrollWidth = 0;\n\n private _loadingItemsFromApi = false;\n get loadingItemsFromApi() {\n return this._loadingItemsFromApi;\n }\n\n screenSize: PepScreenSizeType;\n deviceHasMouse = false;\n\n // For resize\n pressedColumn = '';\n startX = 0;\n startWidth = 0;\n tableStartWidth = 0;\n\n // For sorting\n isAsc = true;\n sortBy = '';\n isUserSelected = false;\n checkForChanges: any = null;\n calculatedObjectHeight: string;\n\n constructor(\n private hostElement: ElementRef,\n private layoutService: PepLayoutService,\n private sessionService: PepSessionService,\n private cd: ChangeDetectorRef,\n private renderer: Renderer2,\n private zone: NgZone\n ) {\n // this.nativeWindow = window;\n this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n this.screenSize = size;\n });\n\n this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n this.deviceHasMouse = deviceHasMouse;\n });\n }\n\n ngOnInit(): void {\n this.containerWidth = 0;\n this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n }\n\n ngOnChanges(changes): void {\n if (this.containerWidth <= 0) {\n this.setContainerWidth();\n }\n }\n\n ngOnDestroy(): void {\n // if (this.valueChange) {\n // this.valueChange.unsubscribe();\n // }\n\n // if (this.loadItems) {\n // this.loadItems.unsubscribe();\n // }\n\n // if (this.loadPage) {\n // this.loadPage.unsubscribe();\n // }\n\n // if (this.sortingChange) {\n // this.sortingChange.unsubscribe();\n // }\n\n // if (this.fieldClick) {\n // this.fieldClick.unsubscribe();\n // }\n\n // if (this.itemClick) {\n // this.itemClick.unsubscribe();\n // }\n\n // if (this.listLoad) {\n // this.listLoad.unsubscribe();\n // }\n\n this.saveSortingToSession();\n }\n\n private getScrollingElement() {\n return this.parentScroll ? this.parentScroll : this.virtualScroller?.contentElementRef.nativeElement.parentElement;\n }\n\n private scrollToTop(animate = true) {\n const scrollingElement = this.getScrollingElement();\n if (scrollingElement) {\n const scrollTop = 0;\n\n // totally disable animate\n if (!animate || this.scrollAnimationTime === 0) {\n if (scrollingElement instanceof Window) {\n window.scrollTo(0, scrollTop);\n } else {\n scrollingElement.scrollTop = scrollTop;\n }\n } else {\n let animationRequest;\n const isWindow = scrollingElement instanceof Window;\n const currentScrollTop =\n scrollingElement instanceof Window\n ? window.pageYOffset\n : scrollingElement.scrollTop;\n\n if (this.currentTween !== undefined) {\n this.currentTween.stop();\n }\n this.currentTween = new tween.Tween({ scrollTop: currentScrollTop })\n .to({ scrollTop }, this.scrollAnimationTime)\n .easing(tween.Easing.Quadratic.Out)\n .onUpdate((data) => {\n if (isNaN(data.scrollTop)) {\n return;\n }\n\n if (isWindow) {\n window.scrollTo(0, data.scrollTop);\n } else {\n this.renderer.setProperty(\n scrollingElement,\n 'scrollTop',\n data.scrollTop\n );\n }\n })\n .onStop(() => {\n cancelAnimationFrame(animationRequest);\n })\n .start();\n\n const animate = (time?) => {\n this.currentTween.update(time);\n if (this.currentTween._object.scrollTop !== scrollTop) {\n this.zone.runOutsideAngular(() => {\n animationRequest = requestAnimationFrame(animate);\n });\n }\n };\n\n animate();\n }\n }\n }\n\n private setContainerWidth(): void {\n const selectionCheckBoxWidth =\n this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n const rowHeight = 40; // the table row height (2.5rem * 16font-size).\n const style = window.getComputedStyle(\n this.hostElement.nativeElement.parentElement\n );\n // The container-fluid class padding left + right + border\n const containerFluidSpacing =\n parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);\n\n const parentContainer =\n this.hostElement.nativeElement.parentElement.parentElement > 0\n ? this.hostElement.nativeElement.parentElement.parentElement\n : this.hostElement.nativeElement.parentElement;\n\n // Calculate if vertical scroll should appear, if so set the scroll width. (this.totalRows + 1) + 1 is for the header row.\n this.tableScrollWidth = parentContainer.clientHeight < rowHeight * (this.totalRows + 1)\n ? this.layoutService.getScrollbarWidth()\n : 0;\n\n // The selectionCheckBoxWidth width + containerFluidSpacing + this.tableScrollWidth.\n const rowHeaderWidthToSub =\n containerFluidSpacing + selectionCheckBoxWidth + this.tableScrollWidth;\n this.containerWidth = parentContainer.offsetWidth - rowHeaderWidthToSub;\n }\n\n private saveSortingToSession(): void {\n this.sessionService.setObject(\n PepListComponent.SORT_BY_STATE_KEY,\n this.sortBy\n );\n this.sessionService.setObject(\n PepListComponent.ASCENDING_STATE_KEY,\n this.isAsc\n );\n }\n\n private getTopItems(): number {\n return this.isTable\n ? PepListComponent.TOP_ITEMS_TABLE\n : PepListComponent.TOP_ITEMS_THUMBNAILS;\n }\n\n // private disableScroll(disable: boolean) {\n // if (disable) {\n // this.renderer.addClass(this.getParentContainer(), 'lock-events');\n // } else {\n // this.renderer.removeClass(this.getParentContainer(), 'lock-events');\n // }\n // }\n\n private toggleLoadingItemsFropApi(loadingItemsFromApi: boolean): void {\n this._loadingItemsFromApi = loadingItemsFromApi;\n\n // this.disableScroll(loadingItemsFromApi);\n }\n\n private updateCurrentPageItems(startIndex: number, endIndex: number): void {\n this.currentPageItems = this.items.slice(startIndex, endIndex);\n }\n\n private setSelectionItems(\n itemId: string,\n uniqItemId: string,\n isChecked: boolean\n ): void {\n // Set selected item checkbox\n if (this.isAllSelected) {\n if (isChecked) {\n this.unSelectedItems.delete(itemId);\n this.selectedItems.set(itemId, uniqItemId);\n } else {\n this.selectedItems.delete(itemId);\n this.unSelectedItems.set(itemId, uniqItemId);\n }\n } else {\n if (isChecked) {\n this.unSelectedItems.delete(itemId);\n this.selectedItems.set(itemId, uniqItemId);\n } else {\n this.selectedItems.delete(itemId);\n this.unSelectedItems.set(itemId, uniqItemId);\n }\n }\n }\n\n private getUniqItemId(itemId: string, itemType = ''): string {\n return itemId + this.SEPARATOR + itemType;\n }\n\n private setLayout(): void {\n if (\n this.totalRows === 0 ||\n !this._layout ||\n !this._layout.ControlFields ||\n this._layout.ControlFields.length === 0\n ) {\n return;\n }\n\n this._layout.ControlFields.forEach((cf) => {\n if (cf.ColumnWidth === 0) {\n cf.ColumnWidth = 10;\n }\n\n if (\n this.isTable &&\n (cf.FieldType === FIELD_TYPE.Image ||\n // cf.FieldType === FIELD_TYPE.Indicators || ???\n cf.FieldType === FIELD_TYPE.Signature ||\n cf.FieldType === FIELD_TYPE.NumberIntegerQuantitySelector ||\n cf.FieldType === FIELD_TYPE.NumberRealQuantitySelector ||\n cf.FieldType === FIELD_TYPE.NumberIntegerForMatrix ||\n cf.FieldType === FIELD_TYPE.NumberRealForMatrix ||\n cf.FieldType === FIELD_TYPE.Package ||\n cf.ApiName === 'UnitsQuantity' ||\n cf.ApiName === 'QuantitySelector')\n ) {\n cf.Layout.XAlignment = 3;\n }\n });\n\n if (!this.cd['destroyed']) {\n this.cd.detectChanges();\n }\n\n // Set the columns width.\n if (this.containerWidth <= 0) {\n this.setContainerWidth();\n }\n\n this.calcColumnsWidth();\n this.checkForChanges = new Date().getTime();\n }\n\n private calcColumnsWidth(): void {\n const fixedMultiple = 3.78; // for converting em to pixel.\n const length = this._layout.ControlFields.length;\n const selectionCheckBoxWidth =\n this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n // Is table AND there is at least one column of width type of percentage.\n if (this.isTable) {\n if (this._layout && this._layout.ControlFields) {\n this.hasColumnWidthOfTypePercentage =\n this._layout.ControlFields.filter(\n (cf) => cf.ColumnWidthType === 1\n ).length === 0;\n }\n }\n\n // If the columns size is fixed and the total is small then the container change it to percentage.\n if (!this.hasColumnWidthOfTypePercentage) {\n const totalFixedColsWidth = this._layout.ControlFields.map(\n (cf) => cf.ColumnWidth * fixedMultiple\n ).reduce((sum, current) => sum + current);\n\n if (window.innerWidth > totalFixedColsWidth) {\n this.hasColumnWidthOfTypePercentage = true;\n }\n }\n\n let totalCalcColsWidth = 0;\n\n // Calc by percentage\n if (this.hasColumnWidthOfTypePercentage) {\n const totalColsWidth: number = this._layout.ControlFields.map(\n (cf) => cf.ColumnWidth\n ).reduce((sum, current) => sum + current);\n\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout.ControlFields[index];\n const calcColumnWidthPercentage = (100 / totalColsWidth) * uiControlField.ColumnWidth;\n\n uiControlField.calcColumnWidth = Math.floor((this.containerWidth * calcColumnWidthPercentage) / 100);\n\n if (index === length - 1) {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + totalCalcColsWidth + 'px)'; // For 100%\n } else {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n totalCalcColsWidth += uiControlField.calcColumnWidth;\n }\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n 'inherit'\n );\n } else {\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout\n .ControlFields[index];\n const currentFixedWidth = Math.floor(\n uiControlField.ColumnWidth * fixedMultiple\n );\n\n if (index === length - 1) {\n uiControlField.calcTitleColumnWidthString = currentFixedWidth + 'px';\n uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n } else {\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n }\n\n totalCalcColsWidth += currentFixedWidth;\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n totalCalcColsWidth + selectionCheckBoxWidth + 'px'\n );\n }\n }\n\n private initResizeData(): void {\n this.startX = 0;\n this.startWidth = 0;\n this.tableStartWidth = 0;\n this.pressedColumn = '';\n }\n\n private getParent(el, parentSelector): any {\n // If no parentSelector defined will bubble up all the way to *document*\n if (parentSelector === undefined) {\n parentSelector = document;\n }\n const parent = [];\n let p = el.parentNode;\n\n while (\n p &&\n p.className !== '' &&\n p.className.indexOf(parentSelector) === -1 &&\n parentSelector !== document\n ) {\n const o = p;\n p = o.parentNode;\n }\n if (p.className.indexOf(parentSelector) > -1) {\n parent.push(p); // Push that parentSelector you wanted to stop at\n }\n return parent;\n }\n\n private cleanItems(): void {\n this.itemsCounter = 0;\n this._items =\n this.totalRows > 0 ? Array<ObjectsDataRow>(this.totalRows) : [];\n this.currentPageItems = [];\n this.calculatedObjectHeight = '';\n }\n\n private initVariablesFromSession(items: ObjectsDataRow[]): void {\n const selectedItemsObject: Array<any> = this.sessionService.getObject<\n Array<any>\n >(PepListComponent.SELECTED_ITEMS_STATE_KEY);\n const selectedItemsFromMap: Map<string, string> =\n selectedItemsObject && selectedItemsObject.length > 0\n ? new Map(selectedItemsObject)\n : null;\n if (\n selectedItemsFromMap != null &&\n typeof selectedItemsFromMap.size !== 'undefined' &&\n selectedItemsFromMap.size > 0\n ) {\n this.selectedItems = selectedItemsFromMap;\n this.sessionService.removeObject(\n PepListComponent.SELECTED_ITEMS_STATE_KEY\n );\n } else {\n this.selectedItems.clear();\n }\n\n const unSelectedItemsObject: Array<any> = this.sessionService.getObject<\n Array<any>\n >(PepListComponent.UN_SELECTED_ITEMS_STATE_KEY);\n const unSelectedItemsMap: Map<string, string> =\n unSelectedItemsObject && unSelectedItemsObject.length > 0\n ? new Map(unSelectedItemsObject)\n : null;\n if (\n unSelectedItemsMap != null &&\n typeof unSelectedItemsMap.size !== 'undefined' &&\n unSelectedItemsMap.size > 0\n ) {\n this.unSelectedItems = unSelectedItemsMap;\n this.sessionService.removeObject(\n PepListComponent.UN_SELECTED_ITEMS_STATE_KEY\n );\n } else {\n this.unSelectedItems.clear();\n }\n\n const isAllSelected = this.sessionService.getObject(\n PepListComponent.ALL_SELECTED_STATE_KEY\n );\n if (isAllSelected != null) {\n this.isAllSelected = isAllSelected && this.getIsAllSelected(items);\n this.sessionService.removeObject(\n PepListComponent.ALL_SELECTED_STATE_KEY\n );\n } else {\n this.isAllSelected = false;\n }\n\n const sortBy = this.sessionService.getObject(\n PepListComponent.SORT_BY_STATE_KEY\n );\n if (sortBy && sortBy !== '') {\n this.sortBy = sortBy;\n this.sessionService.removeObject(\n PepListComponent.SORT_BY_STATE_KEY\n );\n } else {\n this.sortBy = '';\n }\n\n const isAsc = this.sessionService.getObject(\n PepListComponent.ASCENDING_STATE_KEY\n );\n if (isAsc != null) {\n this.isAsc = isAsc;\n this.sessionService.removeObject(\n PepListComponent.ASCENDING_STATE_KEY\n );\n } else {\n this.isAsc = true;\n }\n }\n\n private getIsAllSelected(items: Array<ObjectsDataRow>): boolean {\n let result = true;\n\n if (this.selectedItems?.size > 0 && items?.length > 0) {\n for (const item of items) {\n if (!(item && this.selectedItems.has(item?.UID.toString()))) {\n result = false;\n break;\n }\n }\n } else {\n result = false;\n }\n\n return result;\n }\n\n private getNumberOfStartItems(): number {\n let numberOfStartItems = 20;\n\n if (\n this.screenSize === PepScreenSizeType.XL ||\n this.screenSize === PepScreenSizeType.LG\n ) {\n numberOfStartItems = this.isTable ? 50 : 40;\n } else if (this.screenSize === PepScreenSizeType.MD) {\n numberOfStartItems = this.isTable ? 30 : 20;\n } else if (this.screenSize === PepScreenSizeType.SM) {\n numberOfStartItems = this.isTable ? 20 : 10;\n } else if (this.screenSize === PepScreenSizeType.XS) {\n numberOfStartItems = this.isTable ? 15 : 5;\n }\n\n return numberOfStartItems;\n }\n\n private setItemClicked(\n itemId,\n isSelectableForActions: boolean,\n itemType: string,\n isChecked: boolean\n ): void {\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n\n // select the selected item.\n if (isChecked) {\n // Set seleted item\n this.selectedItemId = uniqItemId;\n } else {\n if (this.selectedItemId === uniqItemId) {\n this.selectedItemId = '';\n }\n }\n\n if (this.selectionTypeForActions === 'single') {\n this.selectedItemsChange.emit(\n this.selectedItemId.length === 0 ? 0 : 1\n );\n } else if (this.selectionTypeForActions === 'multi') {\n if (isSelectableForActions) {\n this.setSelectionItems(itemId, uniqItemId, isChecked);\n\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n const currentListCount = this.isAllSelected\n ? this.totalRows - currentList.size\n : currentList.size;\n this.selectedItemsChange.emit(currentListCount);\n }\n }\n\n // Raise selected item change event\n if (this.selectionTypeForActions !== 'none') {\n this.selectedItemChange.emit({\n id: itemId,\n selected: isChecked,\n });\n }\n }\n\n private exportFunctionsOnHostElement() {\n // This is for web component usage for use those functions.\n this.hostElement.nativeElement.clear = this.clear.bind(this);\n this.hostElement.nativeElement.initListData = this.initListData.bind(\n this\n );\n this.hostElement.nativeElement.updateItems = this.updateItems.bind(\n this\n );\n this.hostElement.nativeElement.updatePage = this.updatePage.bind(this);\n this.hostElement.nativeElement.updateItem = this.updateItem.bind(this);\n }\n\n // getIsDisabled(item: ObjectsDataRow): boolean {\n // return (\n // this.lockItemInnerEvents || (item && !item.IsSelectableForActions)\n // );\n // }\n\n getIsAllSelectedForActions(): boolean {\n let res = false;\n\n if (this.isAllSelected) {\n if (this.unSelectedItems.size === 0) {\n res = true;\n }\n } else {\n if (this.virtualScroller?.viewPortItems) {\n if (this.selectedItems.size === this.totalRows) {\n res = this.getIsAllSelected(this.virtualScroller.viewPortItems);\n } else if (this.selectedItems.size < this.totalRows) {\n for (const item of this.virtualScroller.viewPortItems) {\n res =\n item && this.selectedItems.has(item?.UID.toString());\n\n if (!res) {\n break;\n }\n }\n }\n }\n }\n\n return res;\n }\n\n setIsAllSelected(isChecked: boolean): void {\n if (this.selectionTypeForActions === 'multi') {\n this.selectAllCB.checked = isChecked;\n this.isAllSelected = isChecked;\n }\n }\n\n selectAllItemsForActions(e: any): void {\n // For material checkbox || radio.\n const isChecked = e.source.checked;\n\n // Indeterminate mode\n let isIndeterminate = false;\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n if (currentList.size > 0) {\n isIndeterminate = true;\n this.isAllSelected = false;\n this.selectedItemsChange.emit(0);\n e.source.checked = false;\n }\n\n this.selectedItems.clear();\n this.unSelectedItems.clear();\n\n if (!isIndeterminate) {\n this.isAllSelected = isChecked;\n this.selectAllClick.emit(isChecked);\n\n if (this.selectionTypeForActions === 'multi') {\n if (!isChecked) {\n this.selectedItemsChange.emit(0);\n this.selectedItemId = '';\n } else {\n const filteredItems = this.items.filter(\n (item) => item && item.IsSelectableForActions\n );\n this.selectedItemsChange.emit(filteredItems.length);\n }\n }\n } else {\n // Remove all\n if (this.selectionTypeForActions === 'multi') {\n this.selectAllClick.emit(false);\n }\n }\n }\n\n raiseStartIndexChange(startIndex = 0) {\n // this.startIndex = startIndex;\n this.startIndexChange.emit({ startIndex });\n }\n\n getIsItemSelected(item: ObjectsDataRow): boolean {\n let isSelected = false;\n\n if (item) {\n if (this.selectionTypeForActions === 'single') {\n isSelected = this.selectedItemId === this.getUniqItemId(item.UID, item.Type.toString());\n } else if (this.selectionTypeForActions === 'multi') {\n if (item.IsSelectableForActions) {\n isSelected = (this.isAllSelected && !this.unSelectedItems.has(item.UID)) || this.selectedItems.has(item.UID);\n }\n }\n }\n\n return isSelected;\n }\n\n selectItemForActions(\n e: any,\n itemId: string,\n isSelectableForActions: boolean,\n itemType = ''\n ): void {\n // For material checkbox || radio.\n const isChecked = e.source.checked;\n this.setItemClicked(\n itemId,\n isSelectableForActions,\n itemType,\n isChecked\n );\n }\n\n itemClicked(e: any, item: ObjectsDataRow): void {\n // Set seleted item\n const itemId = item?.UID.toString();\n const itemType = item?.Type.toString();\n let isChecked = false;\n\n if (item && item.IsSelectableForActions) {\n this.selectedItemId = this.getUniqItemId(itemId, itemType);\n isChecked = true;\n }\n\n if (this.isTable) {\n if (this.selectionTypeForActions === 'single') {\n this.setItemClicked(\n itemId,\n item.IsSelectableForActions,\n itemType,\n isChecked\n );\n } else if (this.selectionTypeForActions === 'none') {\n // Just mark the row as highlighted\n this.setItemClicked(\n itemId,\n item.IsSelectableForActions,\n itemType,\n true\n );\n }\n } else {\n if (this.disabled) {\n return;\n }\n }\n\n this.itemClick.emit({ source: item, viewType: this.viewType });\n }\n\n onTableRowMouseEnter(event: any, itemId: string, itemType: string): void {\n if (!this.deviceHasMouse) {\n return;\n }\n\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n this.hoveredItemId = uniqItemId;\n }\n\n onTableRowMouseLeave(event: any, itemId: string, itemType: string): void {\n this.hoveredItemId = '';\n }\n\n onCardMouseEnter(event: any, itemId: string, itemType: string): void {\n if (!this.deviceHasMouse) {\n return;\n }\n\n const uniqItemId = this.getUniqItemId(itemId, itemType);\n this.hoveredItemId = uniqItemId;\n }\n\n onCardMouseLeave(event: any, itemId: string, itemType: string): void {\n this.hoveredItemId = '';\n }\n\n // trackByFunc(index: number, item: ObjectsDataRow): any {\n // return item && item?.UID ? item?.UID : index;\n // // let res: string = \"\";\n\n // // if (item && item?.UID) {\n // // res = item?.UID + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n // // }\n // // else {\n // // res = index + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n // // }\n\n // // return res;\n // }\n\n clear(): void {\n this.cleanItems();\n this._layout = null;\n }\n\n setSelectedIds(selectedIds: string[], items = null): void {\n this.selectedItems.clear();\n this.isAllSelected = false;\n\n if (selectedIds) {\n // for (let i = 0; i < selected.length; i++) {\n for (const selectedId of selectedIds) {\n const tmp = selectedId.split(this.SEPARATOR);\n\n if (tmp && tmp.length > 0) {\n const itemId = tmp[0];\n const itemType = tmp.length > 1 ? tmp[1] : '';\n\n this.selectedItems.set(\n itemId,\n this.getUniqItemId(itemId, itemType)\n );\n }\n }\n\n this.isAllSelected = this.getIsAllSelected(items ? items : this.virtualScroller?.viewPortItems);\n this.setSelectionDataInSession();\n }\n\n this.refresh();\n }\n\n setSelectionDataInSession(): void {\n if (this.selectedItems.size > 0) {\n this.sessionService.setObject(\n PepListComponent.SELECTED_ITEMS_STATE_KEY,\n JSON.stringify([...this.selectedItems])\n );\n }\n\n if (this.unSelectedItems.size > 0) {\n this.sessionService.setObject(\n PepListComponent.UN_SELECTED_ITEMS_STATE_KEY,\n JSON.stringify([...this.unSelectedItems])\n );\n }\n\n this.sessionService.setObject(\n PepListComponent.ALL_SELECTED_STATE_KEY,\n this.isAllSelected\n );\n }\n\n initListData(\n layout: UIControl,\n totalRows: number,\n items: ObjectsDataRow[]\n ): void {\n this.initVariablesFromSession(items);\n const currentList = this.isAllSelected\n ? this.unSelectedItems\n : this.selectedItems;\n const currentListCount = this.isAllSelected\n ? this.totalRows - currentList.size\n : currentList.size;\n this.selectedItemsChange.emit(currentListCount);\n\n this._layout = layout;\n this.selectedItemId = '';\n this.totalRows = totalRows;\n\n this.scrollToTop(false);\n this.cleanItems();\n\n if (items) {\n if (this.pagerType === 'pages') {\n // If page index out of bounds - init to 0.\n const numberOfPages = Math.ceil(totalRows / this.pageSize);\n\n if (this.pageIndex >= numberOfPages) {\n this.pageIndex = 0;\n }\n\n this.updatePage(items, {\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n });\n } else {\n const numberOfStartItems = this.getNumberOfStartItems();\n const event = {\n fromIndex: 0,\n toIndex: numberOfStartItems,\n };\n this.updateItems(items, event);\n\n this.refresh();\n }\n }\n\n this.setLayout();\n this.onListLoad();\n }\n\n updateItems(\n items: ObjectsDataRow[],\n event: IPepListLoadItemsEvent = null\n ): void {\n if (!event) {\n return; // Event isn't supplied.\n }\n\n // Clean array\n if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n this.cleanItems();\n }\n\n const startIndex = event.fromIndex ?? 0;\n\n for (let i = 0; i < items.length; i++) {\n if (!this.items[i + startIndex]) {\n this.items[i + startIndex] = items[i];\n this.itemsCounter += 1;\n }\n }\n\n this.toggleLoadingItemsFropApi(false);\n }\n\n updatePage(items: ObjectsDataRow[], event: IPepListLoadPageEvent): void {\n if (!event) {\n return; // Event isn't supplied.\n }\n\n // Clean array\n if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n this.cleanItems();\n }\n\n // const loadInChunks = this.itemsCounter === 0;\n const startIndex = Math.min(event.pageIndex * event.pageSize, this.totalRows);\n const endIndex = Math.min(startIndex + event.pageSize, this.totalRows);\n\n for (let i = 0; i < items.length; i++) {\n if (!this.items[i + startIndex]) {\n this.items[i + startIndex] = items[i];\n this.itemsCounter += 1;\n }\n }\n\n this.updateCurrentPageItems(startIndex, endIndex);\n this.toggleLoadingItemsFropApi(false);\n }\n\n updateItem(data: ObjectsDataRow): void {\n const index = this.items.findIndex((i) => i && i?.UID === data?.UID);\n if (index >= 0 && index < this.items.length) {\n this.updateItemProperties(this.items[index], data);\n }\n }\n\n scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined) {\n this.virtualScroller?.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\n }\n\n updateItemProperties(itemToUpdate: ObjectsDataRow, data: ObjectsDataRow) {\n Object.assign(itemToUpdate, data);\n }\n\n getSelectedItemsData(isForEdit = false): PepSelectionData {\n const res = new PepSelectionData();\n\n if (this.selectionTypeForActions === 'single') {\n const tmp = this.selectedItemId.split(this.SEPARATOR);\n\n res.selectionType = 1;\n res.rows = [tmp[0]];\n res.rowTypes = [tmp[1]];\n } else if (this.selectionTypeForActions === 'multi') {\n const items = [];\n const itemTypes = [];\n let selectionType = 1;\n let currentList = [];\n\n // For edit - only the selected items.\n if (isForEdit) {\n if (!this.isAllSelected) {\n currentList = Array.from(this.selectedItems.values());\n } else {\n // Get the id's of the items that not founded in unSelectedItems.\n this.items.forEach((item) => {\n if (\n item &&\n !this.unSelectedItems.has(item?.UID.toString())\n ) {\n currentList.push(\n this.getUniqItemId(\n item?.UID.toString(),\n item?.Type.toString()\n )\n );\n }\n });\n }\n } else {\n // For delete - can be the unselected with select_all functionality.\n currentList = Array.from(\n this.isAllSelected\n ? this.unSelectedItems.values()\n : this.selectedItems.values()\n );\n selectionType = this.isAllSelected ? 0 : 1;\n }\n\n currentList.forEach((item) => {\n const tmp = item.split(this.SEPARATOR);\n\n if (tmp.length === 2) {\n items.push(tmp[0]);\n itemTypes.push(tmp[1]);\n }\n });\n\n res.selectionType = selectionType;\n res.rows = items;\n res.rowTypes = itemTypes;\n }\n\n return res;\n }\n\n getIsItemEditable(uid: string): boolean {\n const item = this.items.filter((x) => x?.UID.toString() === uid);\n if (item.length > 0) {\n return item[0].IsEditable;\n } else {\n return false;\n }\n }\n\n getItemDataByID(uid: string): ObjectsDataRow {\n return this.items.find((item) => item?.UID.toString() === uid);\n }\n\n refresh() {\n this.virtualScroller?.refresh();\n }\n\n // ---------------------------------------------------------------\n // Events handlers.\n // ---------------------------------------------------------------\n\n onWinResize(e): void {\n this.refresh();\n\n this.containerWidth = 0;\n this.setLayout();\n }\n\n onListResizeStart(event, columnKey): void {\n this.pressedColumn = columnKey;\n this.startX = event.x;\n this.startWidth = event.target.closest('.header-column').offsetWidth;\n this.tableStartWidth = this.virtualScroller?.contentElementRef.nativeElement.offsetWidth;\n }\n\n onListResize(event): void {\n if (this.pressedColumn.length > 0) {\n let widthToAdd = this.layoutService.isRtl() ? this.startX - event.x : event.x - this.startX;\n\n // Set the width of the column and the container of the whole columns.\n if (this.startWidth + widthToAdd >= PepListComponent.MINIMUM_COLUMN_WIDTH || widthToAdd > 0) {\n const length = this._layout.ControlFields.length;\n let totalCalcColsWidth = 0;\n\n for (let index = 0; index < length; index++) {\n const uiControlField: UIControlField = this._layout\n .ControlFields[index];\n\n if (index === length - 1) {\n // Calc the last column only in percentage type.\n if (this.hasColumnWidthOfTypePercentage) {\n const scrollWidth = this.layoutService.getScrollbarWidth();\n widthToAdd += scrollWidth;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + (totalCalcColsWidth + scrollWidth) + 'px)'; // For 100%\n } else {\n if (uiControlField.ApiName === this.pressedColumn) {\n uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidth + 'px';\n uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n }\n }\n } else if (uiControlField.ApiName === this.pressedColumn) {\n uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n }\n\n totalCalcColsWidth += uiControlField.calcColumnWidth;\n }\n\n this.renderer.setStyle(\n this.hostElement.nativeElement,\n 'width',\n this.tableStartWidth + widthToAdd + 'px'\n );\n }\n\n this.checkForChanges = new Date().getTime();\n }\n }\n\n onListResizeEnd(event): void {\n if (this.pressedColumn.length > 0) {\n if (\n event &&\n this.getParent(event.srcElement, 'resize-box').length > 0\n ) {\n this.initResizeData();\n } else {\n // Set timeout 0 for onListSortingChange will have the pressedColumn.\n setTimeout(() => {\n this.initResizeData();\n }, 0);\n }\n\n event.stopPropagation();\n }\n }\n\n onListSortingChange(sortBy: string, isAsc: boolean, event = null): void {\n if (\n this.pressedColumn.length > 0 ||\n (event && this.getParent(event.srcElement, 'resize-box').length > 0)\n ) {\n return;\n }\n\n if (this.sortBy !== sortBy || this.isAsc !== isAsc) {\n this.sortBy = sortBy;\n this.isAsc = isAsc;\n this.saveSortingToSession();\n\n this.sortingChange.emit({ sortBy, isAsc });\n }\n }\n\n onListHeaderMouseEnter(event): void {\n // this.headerIsInFocus = true;\n }\n\n onListHeaderMouseLeave(event): void {\n // this.headerIsInFocus = false;\n this.onListResizeEnd(event);\n this.initResizeData();\n }\n\n onPagerChange(event: IPepListPagerChangeEvent): void {\n this.pageIndex = event.pageIndex;\n\n // Scroll to top.\n this.scrollToTop();\n\n const startIndex = event.pageIndex * event.pageSize;\n const endIndex = Math.min(\n startIndex + event.pageSize,\n this.totalRows\n );\n\n let shouldGetItemsFromApi = false;\n let index: number = startIndex;\n\n while (!shouldGetItemsFromApi && index < endIndex) {\n if (!this.items[index]) {\n shouldGetItemsFromApi = true;\n }\n index++;\n }\n\n // Get bulk from api.\n if (shouldGetItemsFromApi) {\n if (!this.loadingItemsFromApi) {\n this.toggleLoadingItemsFropApi(true);\n\n this.loadPage.emit({\n pageIndex: event.pageIndex,\n pageSize: event.pageSize,\n });\n }\n } else {\n setTimeout(() => {\n this.updateCurrentPageItems(startIndex, endIndex);\n }, this.scrollAnimationTime);\n }\n }\n\n onVirtualScrollerChange(event: IPageInfo): void {\n this.raiseStartIndexChange(event.startIndex);\n\n if (this.pagerType === 'scroll') {\n // For other events do nothing.\n if (typeof event.startIndex === 'undefined' || event.startIndex < 0 ||\n typeof event.endIndex === 'undefined' || event.endIndex < 0) {\n return;\n }\n\n const addAtStart = event.scrollDirection === 'backward';\n let shouldGetItemsFromApi = false;\n let indexOfMissingItem: number;\n\n if (addAtStart) {\n indexOfMissingItem = event.endIndex;\n while (!shouldGetItemsFromApi && indexOfMissingItem >= event.startIndex) {\n if (!this.items[indexOfMissingItem]) {\n shouldGetItemsFromApi = true;\n }\n\n if (!shouldGetItemsFromApi) {\n indexOfMissingItem--;\n }\n }\n } else {\n indexOfMissingItem = event.startIndex;\n while (!shouldGetItemsFromApi && indexOfMissingItem <= event.endIndex) {\n if (!this.items[indexOfMissingItem]) {\n shouldGetItemsFromApi = true;\n }\n\n if (!shouldGetItemsFromApi) {\n indexOfMissingItem++;\n }\n }\n }\n\n // Get bulk from api.\n if (shouldGetItemsFromApi) {\n if (!this.loadingItemsFromApi) {\n this.toggleLoadingItemsFropApi(true);\n\n const top = this.getTopItems() - 1;\n const fromIndex = addAtStart ? Math.max(indexOfMissingItem - top, 0) : indexOfMissingItem;\n const toIndex = addAtStart ? indexOfMissingItem : Math.min(indexOfMissingItem + top, this.totalRows);\n\n this.loadItems.emit({\n fromIndex,\n toIndex,\n });\n }\n }\n }\n }\n\n onListLoad(): void {\n setTimeout(() => {\n this.listLoad.emit();\n }, 0);\n }\n\n onChildRectChange(event: ClientRect) {\n setTimeout(() => {\n this.calculatedObjectHeight = event?.height + 'px';\n }, 0);\n }\n\n onValueChanged(valueChange: IPepFormFieldValueChangeEvent): void {\n if (this.disabled) {\n return;\n }\n\n this.valueChange.emit(valueChange);\n }\n\n onCustomizeFieldClick(\n customizeFieldClickedData: IPepFormFieldClickEvent\n ): void {\n if (this.disabled) {\n return;\n }\n\n this.fieldClick.emit(customizeFieldClickedData);\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n IPepMenuStateChangeEvent,\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\n@Component({\n selector: 'pep-list-actions',\n templateUrl: './list-actions.component.html',\n styleUrls: ['./list-actions.component.scss'],\n})\n@Injectable()\nexport class PepListActionsComponent {\n @Input() actions: Array<PepMenuItem> = null;\n @Input() sizeType: PepSizeType = 'md';\n @Input() xPosition: 'before' | 'after' = 'before';\n @Input() hidden = false;\n\n @Output()\n actionClick: EventEmitter<IPepMenuItemClickEvent> = new EventEmitter<IPepMenuItemClickEvent>();\n @Output()\n stateChange: EventEmitter<IPepMenuStateChangeEvent> = new EventEmitter<IPepMenuStateChangeEvent>();\n @Output()\n menuClick: EventEmitter<void> = new EventEmitter<void>();\n\n onActionClicked(action): void {\n this.actionClick.emit(action);\n }\n\n onStateChanged(menuStateChangeEvent: IPepMenuStateChangeEvent): void {\n this.stateChange.emit(menuStateChangeEvent);\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n ElementRef,\n Renderer2,\n ChangeDetectorRef,\n OnDestroy,\n AfterViewInit,\n} from '@angular/core';\nimport {\n ObjectsDataRow,\n UIControl,\n PepLayoutService,\n PepScreenSizeType,\n} from '@pepperi-addons/ngx-lib';\nimport { PepCarouselComponent } from '@pepperi-addons/ngx-lib/carousel';\n\nexport type PepListCarouselSizeType = 'xs' | 'sm' | 'md';\n\nexport interface IPepListCarouselItemClickEvent {\n source: ObjectsDataRow;\n}\n\n@Component({\n selector: 'pep-list-carousel',\n templateUrl: './list-carousel.component.html',\n styleUrls: ['./list-carousel.component.scss'],\n})\n@Injectable()\nexport class PepListCarouselComponent implements AfterViewInit, OnDestroy {\n @Input() duration = 1000;\n @Input() layout: UIControl = null;\n @Input() itemsToMove = 3;\n @Input() lockItemInnerEvents = true;\n @Input() hideArrowsInSmallScreen = true;\n\n private _items: Array<ObjectsDataRow> = null;\n @Input()\n set items(value: Array<ObjectsDataRow>) {\n this._items = value;\n this.moveTo(0);\n }\n get items() {\n return this._items;\n }\n\n private _itemSize: PepListCarouselSizeType = 'xs';\n @Input()\n set itemSize(value: PepListCarouselSizeType) {\n this._itemSize = value;\n this.moveTo(0);\n }\n get itemSize() {\n return this._itemSize;\n }\n\n @Output()\n itemClick: EventEmitter<IPepListCarouselItemClickEvent> = new EventEmitter<IPepListCarouselItemClickEvent>();\n\n @ViewChild('carousel', { read: PepCarouselComponent })\n carousel: PepCarouselComponent;\n\n prevDisabled = false;\n nextDisabled = false;\n screenSize: PepScreenSizeType;\n PepScreenSizeType = PepScreenSizeType;\n // deviceHasMouse = false;\n\n constructor(public layoutService: PepLayoutService) {\n // this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n }\n\n ngAfterViewInit(): void {\n this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n this.screenSize = size;\n });\n\n // this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n // this.deviceHasMouse = deviceHasMouse;\n // });\n }\n\n ngOnDestroy(): void {\n // if (this.itemClick) {\n // this.itemClick.unsubscribe();\n // }\n }\n\n itemClicked(item: ObjectsDataRow): void {\n this.itemClick.emit({ source: item });\n }\n\n moveLeft() {\n // this.carousel.moveLeft();\n const indexToMove = Math.max(\n this.carousel.currIndex - this.itemsToMove,\n 0\n );\n this.moveTo(indexToMove);\n }\n\n moveRight() {\n // this.carousel.moveRight();\n const indexToMove = Math.min(\n this.carousel.currIndex + this.itemsToMove,\n this.items.length\n );\n this.moveTo(indexToMove);\n }\n\n moveTo(index: number) {\n if (this.carousel) {\n this.carousel.moveTo(index);\n }\n }\n\n onReachesLeftBound(event: boolean) {\n this.prevDisabled = event;\n }\n\n onReachesRightBound(event: boolean) {\n this.nextDisabled = event;\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { PepBreadCrumbItem } from '@pepperi-addons/ngx-lib/bread-crumbs';\n\nexport class IPepListChooserOption {\n key: string;\n text: string;\n}\n\nexport interface IPepListChooserOptionChangeEvent {\n source: IPepListChooserOption;\n}\n\n@Component({\n selector: 'pep-list-chooser',\n templateUrl: './list-chooser.component.html',\n styleUrls: ['./list-chooser.component.scss'],\n})\n@Injectable()\nexport class PepListChooserComponent {\n private _options: Array<IPepListChooserOption> = null;\n @Input()\n set options(value: Array<IPepListChooserOption>) {\n this._options = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.key, text: opt.text };\n });\n\n if (this.menuItems?.length === 1) {\n this.breadCrumbsItems = [];\n this.breadCrumbsItems.push(\n new PepBreadCrumbItem({\n key: this.menuItems[0].key,\n text: this.menuItems[0].text,\n })\n );\n }\n }\n get options(): Array<IPepListChooserOption> {\n return this._options;\n }\n\n private _currentList: IPepListChooserOption = null;\n @Input()\n set currentList(value: IPepListChooserOption) {\n this._currentList = value;\n this.currentItem = this.menuItems.find((mi) => mi.key === value.key);\n }\n get currentList(): IPepListChooserOption {\n return this._currentList;\n }\n\n @Input() sizeType: PepSizeType = 'md';\n\n @Output()\n change: EventEmitter<IPepListChooserOptionChangeEvent> = new EventEmitter<IPepListChooserOptionChangeEvent>();\n\n breadCrumbsItems: Array<PepBreadCrumbItem> = null;\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentList = this.options.find(\n (list) => list.key === menuItemClickEvent.source.key\n );\n this.change.emit({ source: this.currentList });\n }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Injectable,\n Input,\n Output,\n} from '@angular/core';\nimport { PepLayoutService, } from '@pepperi-addons/ngx-lib';\nimport { DEFAULT_PAGE_SIZE } from './list.model';\n\nexport class IPepListPagerChangeEvent {\n pageIndex: number;\n previousPageIndex: number;\n pageSize: number;\n length: number;\n}\n\n@Component({\n selector: 'pep-list-pager',\n templateUrl: './list-pager.component.html',\n styleUrls: ['./list-pager.component.scss'],\n})\n@Injectable()\nexport class PepListPagerComponent {\n @Input() disabled = false;\n private _pageIndex = 0;\n @Input()\n set pageIndex(value: number) {\n this.setPageIndex(value);\n }\n get pageIndex(): number {\n return this._pageIndex;\n }\n\n @Input() length = 0;\n @Input() pageSize = DEFAULT_PAGE_SIZE;\n\n @Output()\n pagerChange: EventEmitter<IPepListPagerChangeEvent> = new EventEmitter<IPepListPagerChangeEvent>();\n\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n public layoutService: PepLayoutService) { }\n\n nextPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n\n this.setPageIndex(this.pageIndex + 1);\n }\n\n previousPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n\n this.setPageIndex(this.pageIndex - 1);\n }\n\n firstPage(): void {\n if (!this.hasPreviousPage()) {\n return;\n }\n\n this.setPageIndex(0);\n }\n\n lastPage(): void {\n if (!this.hasNextPage()) {\n return;\n }\n\n this.setPageIndex(this.getNumberOfPages() - 1);\n }\n\n hasPreviousPage(): boolean {\n return this.pageIndex >= 1 && this.pageSize != 0;\n }\n\n hasNextPage(): boolean {\n const maxPageIndex = this.getNumberOfPages() - 1;\n return this.pageIndex < maxPageIndex && this.pageSize != 0;\n }\n\n getNumberOfPages(): number {\n if (!this.pageSize) {\n return 0;\n }\n\n return Math.ceil(this.length / this.pageSize);\n }\n\n /** Checks whether the buttons for going forwards should be disabled. */\n _nextButtonsDisabled() {\n return this.disabled || !this.hasNextPage();\n }\n\n /** Checks whether the buttons for going backwards should be disabled. */\n _previousButtonsDisabled() {\n return this.disabled || !this.hasPreviousPage();\n }\n\n onValueChange(value: string) {\n const pageNumber = coerceNumberProperty(value);\n this.setPageIndex(pageNumber - 1); // - 1 to convert number into index.\n }\n\n private setPageIndex(newIndex: number) {\n const previousPageIndex = this.pageIndex;\n\n if (newIndex >= 0 && newIndex < this.getNumberOfPages()) {\n this._pageIndex = newIndex;\n } else {\n this._pageIndex = 0;\n }\n\n if (this.pageIndex !== previousPageIndex) {\n this._emitChangeEvent(previousPageIndex);\n }\n }\n\n /** Emits an event notifying that a change of the paginator's properties has been triggered. */\n private _emitChangeEvent(previousPageIndex: number) {\n this.pagerChange.emit({\n previousPageIndex,\n pageIndex: this.pageIndex,\n pageSize: this.pageSize,\n length: this.length,\n });\n }\n}\n","import {\n Component,\n Injectable,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnInit,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n IPepMenuItemClickEvent,\n PepMenuItem,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { IPepListSortingChangeEvent } from './list.model';\n\nexport class IPepListSortingOption {\n sortBy: string;\n title: string;\n iconName?: string;\n isAsc?: boolean;\n}\n\nexport interface IPepListSortingOptionChangeEvent {\n source: IPepListSortingOption;\n}\n\n@Component({\n selector: 'pep-list-sorting',\n templateUrl: './list-sorting.component.html',\n styleUrls: ['./list-sorting.component.scss'],\n})\n@Injectable()\nexport class PepListSortingComponent implements OnInit {\n private _options: Array<IPepListSortingOption> = null;\n @Input()\n set options(value: Array<IPepListSortingOption>) {\n this._options = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.sortBy, text: opt.title, iconName: opt.iconName };\n });\n }\n get options(): Array<IPepListSortingOption> {\n return this._options;\n }\n\n private _currentSorting: IPepListSortingOption = null;\n @Input()\n set currentSorting(value: IPepListSortingOption) {\n this._currentSorting = value;\n this.currentItem = this.menuItems.find((mi) => mi.key === value.sortBy);\n }\n get currentSorting(): IPepListSortingOption {\n return this._currentSorting;\n }\n\n @Input() sizeType: PepSizeType = 'md';\n @Output()\n change: EventEmitter<IPepListSortingOptionChangeEvent> = new EventEmitter<IPepListSortingOptionChangeEvent>();\n\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n ngOnInit(): void {\n if (\n this.currentSorting === null &&\n this.options &&\n this.options.length > 0\n ) {\n this.currentSorting = this.options[0];\n }\n }\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentSorting = this.options.find(\n (sorting) => sorting.sortBy === menuItemClickEvent.source.key\n );\n this.change.emit({ source: this.currentSorting });\n }\n}\n","import { Component, Injectable, Input } from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\n\n@Component({\n selector: 'pep-list-total',\n templateUrl: './list-total.component.html',\n styleUrls: ['./list-total.component.scss', './list-total.component.theme.scss'],\n})\n@Injectable()\nexport class PepListTotalComponent {\n @Input() totalRows = -1;\n @Input() totalAmount = -1;\n @Input() isMapView = false;\n @Input() sizeType: PepSizeType = 'md';\n}\n","import {\n Component,\n OnInit,\n Injectable,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n} from '@angular/core';\nimport { PepSizeType, PepStyleType } from '@pepperi-addons/ngx-lib';\nimport {\n PepMenuItem,\n IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\nexport type PepListViewDisplayType = 'menu' | 'buttons';\n\nexport class IPepListView {\n key: string;\n iconName: string;\n title?: string;\n}\n\nexport interface IListViewChangeEvent {\n source: IPepListView;\n}\n\n@Component({\n selector: 'pep-list-views',\n templateUrl: './list-views.component.html',\n styleUrls: ['./list-views.component.scss'],\n})\n@Injectable()\nexport class PepListViewsComponent implements OnInit {\n private _views: Array<IPepListView> = null;\n @Input()\n set views(value: Array<IPepListView>) {\n this._views = value;\n\n this.menuItems = value.map((opt) => {\n return { key: opt.key, text: opt.title, iconName: opt.iconName };\n });\n }\n get views(): Array<IPepListView> {\n return this._views;\n }\n\n private _currentView: IPepListView = null;\n @Input()\n set currentView(value: IPepListView) {\n this._currentView = value;\n\n if (this.displayType === 'menu') {\n this.currentItem = this.menuItems.find(\n (mi) => mi.key === value.key\n );\n }\n }\n get currentView(): IPepListView {\n return this._currentView;\n }\n\n @Input() displayType: PepListViewDisplayType = 'menu';\n @Input() styleType: PepStyleType = 'weak';\n @Input() sizeType: PepSizeType = 'md';\n @Input() classNames = '';\n\n @Output()\n change: EventEmitter<IListViewChangeEvent> = new EventEmitter<IListViewChangeEvent>();\n\n menuItems: Array<PepMenuItem> = null;\n currentItem: PepMenuItem = null;\n\n ngOnInit(): void {\n if (this.displayType === 'buttons') {\n if (\n this.currentView === null &&\n this.views &&\n this.views.length > 0\n ) {\n this.currentView = this.views[0];\n }\n }\n }\n\n onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n this.currentView = this.views.find(\n (list) => list.key === menuItemClickEvent.source.key\n );\n this.raiseChangeEvent();\n }\n\n onViewChanged(view: IPepListView): void {\n this.currentView = view;\n this.raiseChangeEvent();\n }\n\n private raiseChangeEvent(): void {\n this.change.emit({ source: this.currentView });\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\r\nimport { PepListSelectionType } from './list.model';\r\n\r\n@Pipe({\r\n name: 'isItemSelected'\r\n})\r\nexport class IsItemSelectedPipe implements PipeTransform {\r\n SEPARATOR = ',';\r\n\r\n private getUniqItemId(itemId: string, itemType = ''): string {\r\n return itemId + this.SEPARATOR + itemType;\r\n }\r\n\r\n transform(item: ObjectsDataRow, selectionTypeForActions: PepListSelectionType, selectedItemId: string, isAllSelected: boolean,\r\n selectedItems: Map<string, string>, unSelectedItems: Map<string, string>): any {\r\n let isSelected = false;\r\n\r\n if (selectionTypeForActions === 'single') {\r\n isSelected = selectedItemId === this.getUniqItemId(item?.UID, item?.Type.toString());\r\n }\r\n // else if (selectionTypeForActions === 'single-action') {\r\n // isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n // }\r\n else if (selectionTypeForActions === 'multi') {\r\n if (item?.IsSelectableForActions) {\r\n isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n }\r\n }\r\n\r\n return isSelected;\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'isItemDisabled'\r\n})\r\nexport class IsItemDisabledPipe implements PipeTransform {\r\n transform(item: ObjectsDataRow, lockItemInnerEvents: boolean, printMode: boolean): any {\r\n return (\r\n printMode || lockItemInnerEvents || (item && !item.IsSelectableForActions)\r\n );\r\n }\r\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport { PepBreadCrumbsModule } from '@pepperi-addons/ngx-lib/bread-crumbs';\nimport { PepButtonModule } from '@pepperi-addons/ngx-lib/button';\nimport { PepCarouselModule } from '@pepperi-addons/ngx-lib/carousel';\nimport {\n PepIconModule,\n PepIconRegistry,\n pepIconArrowDown,\n pepIconArrowEither,\n pepIconArrowUp,\n pepIconSystemMust,\n pepIconArrowRight,\n pepIconArrowRightAlt,\n pepIconArrowLeft,\n pepIconArrowLeftAlt,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepFormModule } from '@pepperi-addons/ngx-lib/form';\nimport { PepMenuModule } from '@pepperi-addons/ngx-lib/menu';\nimport { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';\n\n// import { PepListOldComponent } from './list_old.component';\nimport { PepListComponent } from './list.component';\nimport { PepListActionsComponent } from './list-actions.component';\nimport { PepListCarouselComponent } from './list-carousel.component';\nimport { PepListChooserComponent } from './list-chooser.component';\nimport { PepListPagerComponent } from './list-pager.component';\nimport { PepListSortingComponent } from './list-sorting.component';\nimport { PepListTotalComponent } from './list-total.component';\nimport { PepListViewsComponent } from './list-views.component';\n\nconst listComponents = [\n // PepListOldComponent,\n PepListComponent,\n PepListActionsComponent,\n PepListCarouselComponent,\n PepListChooserComponent,\n PepListPagerComponent,\n PepListSortingComponent,\n PepListTotalComponent,\n PepListViewsComponent,\n];\n\nimport { IsItemDisabledPipe, IsItemSelectedPipe } from './list.pipes';\n\nconst listPipes = [\n IsItemSelectedPipe,\n IsItemDisabledPipe\n];\n\nimport { VirtualScrollerModule } from './virtual-scroller';\n// import { PepVirtualScrollComponent } from './virtual-scroll.component';\n@NgModule({\n imports: [\n CommonModule,\n // Material modules,\n MatCommonModule,\n MatButtonModule,\n MatCheckboxModule,\n MatRadioModule,\n MatIconModule,\n MatMenuModule,\n // ngx-lib modules\n PepNgxLibModule,\n PepBreadCrumbsModule,\n PepButtonModule,\n PepCarouselModule,\n PepIconModule,\n PepFormModule,\n PepMenuModule,\n PepTextboxModule,\n VirtualScrollerModule\n ],\n exports: [listComponents],\n declarations: [listComponents, listPipes],\n})\nexport class PepListModule {\n constructor(private pepIconRegistry: PepIconRegistry) {\n this.pepIconRegistry.registerIcons([\n pepIconArrowDown,\n pepIconArrowEither,\n pepIconArrowUp,\n pepIconSystemMust,\n pepIconArrowRight,\n pepIconArrowRightAlt,\n pepIconArrowLeft,\n pepIconArrowLeftAlt,\n ]);\n }\n}\n","/*\n * Public API Surface of ngx-lib/list\n */\nexport * from './list.module';\nexport * from './list.model';\n// export * from './list_old.component';\nexport * from './list.component';\nexport * from './list-actions.component';\nexport * from './list-carousel.component';\nexport * from './list-chooser.component';\nexport * from './list-pager.component';\nexport * from './list-sorting.component';\nexport * from './list-total.component';\nexport * from './list-views.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {IsItemDisabledPipe as ɵe,IsItemSelectedPipe as ɵd} from './list.pipes';\nexport {VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY as ɵa,VirtualScrollerComponent as ɵb,VirtualScrollerModule as ɵc} from './virtual-scroller';"],"names":[],"mappings":"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"}
|