@ng-matero/extensions 15.5.0 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alert/alert.d.ts +1 -1
- package/button/button-loading.d.ts +1 -1
- package/checkbox-group/checkbox-group.d.ts +1 -1
- package/colorpicker/colorpicker-input.d.ts +1 -1
- package/colorpicker/colorpicker-toggle.d.ts +1 -1
- package/colorpicker/colorpicker.d.ts +2 -2
- package/datetimepicker/calendar-body.d.ts +1 -1
- package/datetimepicker/calendar.d.ts +1 -1
- package/datetimepicker/clock.d.ts +1 -1
- package/datetimepicker/clock.scss +1 -4
- package/datetimepicker/datetimepicker-input.d.ts +1 -1
- package/datetimepicker/datetimepicker-toggle.d.ts +1 -1
- package/datetimepicker/datetimepicker.d.ts +2 -2
- package/datetimepicker/month-view.d.ts +1 -1
- package/datetimepicker/multi-year-view.d.ts +1 -1
- package/datetimepicker/time.d.ts +2 -2
- package/datetimepicker/year-view.d.ts +1 -1
- package/esm2022/alert/alert-module.mjs +19 -0
- package/esm2022/alert/alert.mjs +53 -0
- package/esm2022/button/button-loading.mjs +77 -0
- package/esm2022/button/button-module.mjs +21 -0
- package/esm2022/checkbox-group/checkbox-group-module.mjs +22 -0
- package/esm2022/checkbox-group/checkbox-group.mjs +234 -0
- package/esm2022/colorpicker/colorpicker-input.mjs +229 -0
- package/esm2022/colorpicker/colorpicker-module.mjs +64 -0
- package/esm2022/colorpicker/colorpicker-toggle.mjs +103 -0
- package/esm2022/colorpicker/colorpicker.mjs +367 -0
- package/esm2022/column-resize/column-resize-directives/column-resize-flex.mjs +46 -0
- package/esm2022/column-resize/column-resize-directives/column-resize.mjs +46 -0
- package/esm2022/column-resize/column-resize-module.mjs +29 -0
- package/esm2022/column-resize/column-resize-notifier.mjs +49 -0
- package/esm2022/column-resize/column-resize.mjs +83 -0
- package/esm2022/column-resize/column-size-store.mjs +21 -0
- package/esm2022/column-resize/event-dispatcher.mjs +68 -0
- package/esm2022/column-resize/overlay-handle.mjs +147 -0
- package/esm2022/column-resize/resizable.mjs +200 -0
- package/esm2022/column-resize/resize-strategy.mjs +235 -0
- package/{esm2020 → esm2022}/core/datetime/datetime-adapter.mjs +1 -1
- package/esm2022/core/datetime/datetime.module.mjs +44 -0
- package/esm2022/core/datetime/native-datetime-adapter.mjs +139 -0
- package/esm2022/core/pipes/is-template-ref.pipe.mjs +15 -0
- package/esm2022/core/pipes/pipes.module.mjs +20 -0
- package/esm2022/core/pipes/to-observable.pipe.mjs +16 -0
- package/esm2022/datetimepicker/calendar-body.mjs +79 -0
- package/esm2022/datetimepicker/calendar.mjs +672 -0
- package/esm2022/datetimepicker/clock.mjs +354 -0
- package/esm2022/datetimepicker/datetimepicker-input.mjs +350 -0
- package/esm2022/datetimepicker/datetimepicker-intl.mjs +64 -0
- package/esm2022/datetimepicker/datetimepicker-module.mjs +83 -0
- package/esm2022/datetimepicker/datetimepicker-toggle.mjs +106 -0
- package/esm2022/datetimepicker/datetimepicker.mjs +529 -0
- package/esm2022/datetimepicker/month-view.mjs +149 -0
- package/esm2022/datetimepicker/multi-year-view.mjs +215 -0
- package/esm2022/datetimepicker/time.mjs +458 -0
- package/esm2022/datetimepicker/year-view.mjs +139 -0
- package/esm2022/dialog/dialog-container.mjs +36 -0
- package/esm2022/dialog/dialog-module.mjs +25 -0
- package/esm2022/dialog/dialog.mjs +75 -0
- package/esm2022/drawer/drawer-container.mjs +253 -0
- package/esm2022/drawer/drawer-module.mjs +23 -0
- package/esm2022/drawer/drawer.mjs +167 -0
- package/esm2022/grid/cell.mjs +117 -0
- package/{esm2020 → esm2022}/grid/column-menu.mjs +6 -5
- package/esm2022/grid/column-resize/column-resize-directives/column-resize-flex.mjs +38 -0
- package/esm2022/grid/column-resize/column-resize-directives/column-resize.mjs +38 -0
- package/esm2022/grid/column-resize/column-resize-module.mjs +44 -0
- package/esm2022/grid/column-resize/overlay-handle.mjs +61 -0
- package/esm2022/grid/column-resize/resizable-directives/resizable.mjs +63 -0
- package/esm2022/grid/column-resize/resize-strategy.mjs +43 -0
- package/esm2022/grid/expansion-toggle.mjs +65 -0
- package/esm2022/grid/grid-module.mjs +137 -0
- package/esm2022/grid/grid-pipes.mjs +113 -0
- package/esm2022/grid/grid-utils.mjs +64 -0
- package/esm2022/grid/grid.mjs +630 -0
- package/esm2022/loader/loader-module.mjs +21 -0
- package/esm2022/loader/loader.mjs +70 -0
- package/esm2022/popover/popover-content.mjs +92 -0
- package/esm2022/popover/popover-module.mjs +25 -0
- package/esm2022/popover/popover-target.mjs +18 -0
- package/esm2022/popover/popover-trigger.mjs +472 -0
- package/esm2022/popover/popover.mjs +384 -0
- package/esm2022/progress/progress-module.mjs +19 -0
- package/esm2022/progress/progress.mjs +56 -0
- package/esm2022/select/option.mjs +58 -0
- package/esm2022/select/select-module.mjs +75 -0
- package/esm2022/select/select.mjs +561 -0
- package/esm2022/select/templates.mjs +135 -0
- package/esm2022/slider/slider-module.mjs +20 -0
- package/esm2022/slider/slider.mjs +1116 -0
- package/esm2022/split/split-module.mjs +20 -0
- package/esm2022/split/split-pane.mjs +150 -0
- package/esm2022/split/split.mjs +635 -0
- package/esm2022/tooltip/tooltip-module.mjs +25 -0
- package/esm2022/tooltip/tooltip.mjs +930 -0
- package/{fesm2020 → fesm2022}/mtxAlert.mjs +7 -7
- package/{fesm2020 → fesm2022}/mtxAlert.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxButton.mjs +7 -7
- package/{fesm2015 → fesm2022}/mtxButton.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxCheckboxGroup.mjs +13 -13
- package/{fesm2020 → fesm2022}/mtxCheckboxGroup.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxColorpicker.mjs +41 -41
- package/{fesm2020 → fesm2022}/mtxColorpicker.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxColumnResize.mjs +46 -46
- package/{fesm2015 → fesm2022}/mtxColumnResize.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxCore.mjs +26 -26
- package/fesm2022/mtxCore.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/mtxDatetimepicker.mjs +84 -80
- package/fesm2022/mtxDatetimepicker.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/mtxDialog.mjs +10 -10
- package/{fesm2015 → fesm2022}/mtxDialog.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxDrawer.mjs +10 -10
- package/{fesm2020 → fesm2022}/mtxDrawer.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxGrid.mjs +120 -120
- package/{fesm2020 → fesm2022}/mtxGrid.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxLoader.mjs +7 -7
- package/{fesm2020 → fesm2022}/mtxLoader.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxPopover.mjs +19 -19
- package/{fesm2020 → fesm2022}/mtxPopover.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxProgress.mjs +7 -7
- package/{fesm2015 → fesm2022}/mtxProgress.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxSelect.mjs +68 -68
- package/{fesm2015 → fesm2022}/mtxSelect.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxSlider.mjs +7 -7
- package/{fesm2020 → fesm2022}/mtxSlider.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxSplit.mjs +10 -10
- package/{fesm2020 → fesm2022}/mtxSplit.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/mtxTooltip.mjs +16 -16
- package/{fesm2015 → fesm2022}/mtxTooltip.mjs.map +1 -1
- package/grid/cell.d.ts +1 -1
- package/grid/column-menu.d.ts +1 -1
- package/grid/column-resize/resizable-directives/resizable.d.ts +1 -1
- package/grid/expansion-toggle.d.ts +1 -1
- package/grid/grid.d.ts +2 -2
- package/loader/loader.d.ts +1 -1
- package/package.json +69 -109
- package/popover/popover-trigger.d.ts +1 -1
- package/popover/popover.d.ts +1 -1
- package/progress/progress.d.ts +1 -1
- package/select/option.d.ts +1 -1
- package/select/select.d.ts +1 -1
- package/select/select.scss +0 -7
- package/slider/slider.d.ts +1 -1
- package/split/split-pane.d.ts +1 -1
- package/split/split.d.ts +1 -1
- package/tooltip/tooltip.d.ts +1 -1
- package/tooltip/tooltip.scss +1 -4
- package/esm2020/alert/alert-module.mjs +0 -18
- package/esm2020/alert/alert.mjs +0 -52
- package/esm2020/button/button-loading.mjs +0 -76
- package/esm2020/button/button-module.mjs +0 -20
- package/esm2020/checkbox-group/checkbox-group-module.mjs +0 -21
- package/esm2020/checkbox-group/checkbox-group.mjs +0 -233
- package/esm2020/colorpicker/colorpicker-input.mjs +0 -228
- package/esm2020/colorpicker/colorpicker-module.mjs +0 -63
- package/esm2020/colorpicker/colorpicker-toggle.mjs +0 -101
- package/esm2020/colorpicker/colorpicker.mjs +0 -365
- package/esm2020/column-resize/column-resize-directives/column-resize-flex.mjs +0 -45
- package/esm2020/column-resize/column-resize-directives/column-resize.mjs +0 -45
- package/esm2020/column-resize/column-resize-module.mjs +0 -28
- package/esm2020/column-resize/column-resize-notifier.mjs +0 -47
- package/esm2020/column-resize/column-resize.mjs +0 -82
- package/esm2020/column-resize/column-size-store.mjs +0 -20
- package/esm2020/column-resize/event-dispatcher.mjs +0 -67
- package/esm2020/column-resize/overlay-handle.mjs +0 -146
- package/esm2020/column-resize/resizable.mjs +0 -199
- package/esm2020/column-resize/resize-strategy.mjs +0 -232
- package/esm2020/core/datetime/datetime.module.mjs +0 -42
- package/esm2020/core/datetime/native-datetime-adapter.mjs +0 -138
- package/esm2020/core/pipes/is-template-ref.pipe.mjs +0 -14
- package/esm2020/core/pipes/pipes.module.mjs +0 -19
- package/esm2020/core/pipes/to-observable.pipe.mjs +0 -15
- package/esm2020/datetimepicker/calendar-body.mjs +0 -78
- package/esm2020/datetimepicker/calendar.mjs +0 -671
- package/esm2020/datetimepicker/clock.mjs +0 -349
- package/esm2020/datetimepicker/datetimepicker-input.mjs +0 -349
- package/esm2020/datetimepicker/datetimepicker-intl.mjs +0 -63
- package/esm2020/datetimepicker/datetimepicker-module.mjs +0 -82
- package/esm2020/datetimepicker/datetimepicker-toggle.mjs +0 -104
- package/esm2020/datetimepicker/datetimepicker.mjs +0 -527
- package/esm2020/datetimepicker/month-view.mjs +0 -148
- package/esm2020/datetimepicker/multi-year-view.mjs +0 -214
- package/esm2020/datetimepicker/time.mjs +0 -456
- package/esm2020/datetimepicker/year-view.mjs +0 -138
- package/esm2020/dialog/dialog-container.mjs +0 -35
- package/esm2020/dialog/dialog-module.mjs +0 -24
- package/esm2020/dialog/dialog.mjs +0 -74
- package/esm2020/drawer/drawer-container.mjs +0 -252
- package/esm2020/drawer/drawer-module.mjs +0 -22
- package/esm2020/drawer/drawer.mjs +0 -166
- package/esm2020/grid/cell.mjs +0 -116
- package/esm2020/grid/column-resize/column-resize-directives/column-resize-flex.mjs +0 -37
- package/esm2020/grid/column-resize/column-resize-directives/column-resize.mjs +0 -37
- package/esm2020/grid/column-resize/column-resize-module.mjs +0 -42
- package/esm2020/grid/column-resize/overlay-handle.mjs +0 -60
- package/esm2020/grid/column-resize/resizable-directives/resizable.mjs +0 -62
- package/esm2020/grid/column-resize/resize-strategy.mjs +0 -42
- package/esm2020/grid/expansion-toggle.mjs +0 -64
- package/esm2020/grid/grid-module.mjs +0 -136
- package/esm2020/grid/grid-pipes.mjs +0 -108
- package/esm2020/grid/grid-utils.mjs +0 -63
- package/esm2020/grid/grid.mjs +0 -628
- package/esm2020/loader/loader-module.mjs +0 -20
- package/esm2020/loader/loader.mjs +0 -69
- package/esm2020/popover/popover-content.mjs +0 -90
- package/esm2020/popover/popover-module.mjs +0 -24
- package/esm2020/popover/popover-target.mjs +0 -17
- package/esm2020/popover/popover-trigger.mjs +0 -471
- package/esm2020/popover/popover.mjs +0 -383
- package/esm2020/progress/progress-module.mjs +0 -18
- package/esm2020/progress/progress.mjs +0 -55
- package/esm2020/select/option.mjs +0 -57
- package/esm2020/select/select-module.mjs +0 -74
- package/esm2020/select/select.mjs +0 -560
- package/esm2020/select/templates.mjs +0 -124
- package/esm2020/slider/slider-module.mjs +0 -19
- package/esm2020/slider/slider.mjs +0 -1115
- package/esm2020/split/split-module.mjs +0 -19
- package/esm2020/split/split-pane.mjs +0 -149
- package/esm2020/split/split.mjs +0 -634
- package/esm2020/tooltip/tooltip-module.mjs +0 -24
- package/esm2020/tooltip/tooltip.mjs +0 -926
- package/fesm2015/mtxAlert.mjs +0 -74
- package/fesm2015/mtxAlert.mjs.map +0 -1
- package/fesm2015/mtxButton.mjs +0 -99
- package/fesm2015/mtxCheckboxGroup.mjs +0 -256
- package/fesm2015/mtxCheckboxGroup.mjs.map +0 -1
- package/fesm2015/mtxColorpicker.mjs +0 -767
- package/fesm2015/mtxColorpicker.mjs.map +0 -1
- package/fesm2015/mtxColumnResize.mjs +0 -959
- package/fesm2015/mtxCore.mjs +0 -374
- package/fesm2015/mtxCore.mjs.map +0 -1
- package/fesm2015/mtxDatetimepicker.mjs +0 -3164
- package/fesm2015/mtxDatetimepicker.mjs.map +0 -1
- package/fesm2015/mtxDialog.mjs +0 -130
- package/fesm2015/mtxDrawer.mjs +0 -578
- package/fesm2015/mtxDrawer.mjs.map +0 -1
- package/fesm2015/mtxGrid.mjs +0 -1514
- package/fesm2015/mtxGrid.mjs.map +0 -1
- package/fesm2015/mtxLoader.mjs +0 -93
- package/fesm2015/mtxLoader.mjs.map +0 -1
- package/fesm2015/mtxPopover.mjs +0 -1027
- package/fesm2015/mtxPopover.mjs.map +0 -1
- package/fesm2015/mtxProgress.mjs +0 -77
- package/fesm2015/mtxSelect.mjs +0 -814
- package/fesm2015/mtxSlider.mjs +0 -1139
- package/fesm2015/mtxSlider.mjs.map +0 -1
- package/fesm2015/mtxSplit.mjs +0 -1025
- package/fesm2015/mtxSplit.mjs.map +0 -1
- package/fesm2015/mtxTooltip.mjs +0 -982
- package/fesm2020/mtxButton.mjs.map +0 -1
- package/fesm2020/mtxColumnResize.mjs.map +0 -1
- package/fesm2020/mtxCore.mjs.map +0 -1
- package/fesm2020/mtxDatetimepicker.mjs.map +0 -1
- package/fesm2020/mtxDialog.mjs.map +0 -1
- package/fesm2020/mtxProgress.mjs.map +0 -1
- package/fesm2020/mtxSelect.mjs.map +0 -1
- package/fesm2020/mtxTooltip.mjs.map +0 -1
- package/fesm2020/ng-matero-extensions.mjs +0 -9
- package/fesm2020/ng-matero-extensions.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alert/mtxAlert.mjs +0 -0
- /package/{esm2020 → esm2022}/alert/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/button/mtxButton.mjs +0 -0
- /package/{esm2020 → esm2022}/button/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox-group/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox-group/mtxCheckboxGroup.mjs +0 -0
- /package/{esm2020 → esm2022}/checkbox-group/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/colorpicker/colorpicker-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/colorpicker/mtxColorpicker.mjs +0 -0
- /package/{esm2020 → esm2022}/colorpicker/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/column-resize-directives/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/mtxColumnResize.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/polyfill.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/resize-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/column-resize/selectors.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/datetime-formats.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/datetime/native-datetime-formats.mjs +0 -0
- /package/{esm2020 → esm2022}/core/mtxCore.mjs +0 -0
- /package/{esm2020 → esm2022}/core/pipes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/core/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/datetimepicker-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/datetimepicker-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/datetimepicker-filtertype.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/datetimepicker-types.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/mtxDatetimepicker.mjs +0 -0
- /package/{esm2020 → esm2022}/datetimepicker/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/dialog-config.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/mtxDialog.mjs +0 -0
- /package/{esm2020 → esm2022}/dialog/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/drawer-animation.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/drawer-config.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/drawer-ref.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/mtxDrawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/column-resize/column-resize-directives/common.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/column-resize/resizable-directives/common.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/mtxGrid.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/loader/mtxLoader.mjs +0 -0
- /package/{esm2020 → esm2022}/loader/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/ng-matero-extensions.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/mtxPopover.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/popover-animations.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/popover-errors.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/popover-interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/popover-types.mjs +0 -0
- /package/{esm2020 → esm2022}/popover/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/progress/mtxProgress.mjs +0 -0
- /package/{esm2020 → esm2022}/progress/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/select/mtxSelect.mjs +0 -0
- /package/{esm2020 → esm2022}/select/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/slider/mtxSlider.mjs +0 -0
- /package/{esm2020 → esm2022}/slider/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/split/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/split/mtxSplit.mjs +0 -0
- /package/{esm2020 → esm2022}/split/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/split/utils.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/mtxTooltip.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/tooltip-animations.mjs +0 -0
- /package/{fesm2015 → fesm2022}/ng-matero-extensions.mjs +0 -0
- /package/{fesm2015 → fesm2022}/ng-matero-extensions.mjs.map +0 -0
|
@@ -1,959 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, Injectable, Inject, NgModule, Injector } from '@angular/core';
|
|
3
|
-
import { Subject, fromEvent, merge, combineLatest, Observable } from 'rxjs';
|
|
4
|
-
import { map, takeUntil, filter, mapTo, take, startWith, pairwise, distinctUntilChanged, share, skip } from 'rxjs/operators';
|
|
5
|
-
import { DOCUMENT } from '@angular/common';
|
|
6
|
-
import { coerceCssPixelValue } from '@angular/cdk/coercion';
|
|
7
|
-
import * as i2 from '@angular/cdk/table';
|
|
8
|
-
import { _COALESCED_STYLE_SCHEDULER } from '@angular/cdk/table';
|
|
9
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
10
|
-
import { ESCAPE } from '@angular/cdk/keycodes';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @license
|
|
14
|
-
* Copyright Google LLC All Rights Reserved.
|
|
15
|
-
*
|
|
16
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
17
|
-
* found in the LICENSE file at https://angular.io/license
|
|
18
|
-
*/
|
|
19
|
-
// TODO: Figure out how to remove `mat-` classes from the CDK part of the
|
|
20
|
-
// column resize implementation.
|
|
21
|
-
const HEADER_CELL_SELECTOR = '.cdk-header-cell, .mat-header-cell';
|
|
22
|
-
const HEADER_ROW_SELECTOR = '.cdk-header-row, .mat-header-row';
|
|
23
|
-
const RESIZE_OVERLAY_SELECTOR = '.mat-column-resize-overlay-thumb';
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @license
|
|
27
|
-
* Copyright Google LLC All Rights Reserved.
|
|
28
|
-
*
|
|
29
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
30
|
-
* found in the LICENSE file at https://angular.io/license
|
|
31
|
-
*/
|
|
32
|
-
/** IE 11 compatible matches implementation. */
|
|
33
|
-
function matches(element, selector) {
|
|
34
|
-
return element.matches ? element.matches(selector) : element.msMatchesSelector(selector);
|
|
35
|
-
}
|
|
36
|
-
/** IE 11 compatible closest implementation that is able to start from non-Element Nodes. */
|
|
37
|
-
function closest(element, selector) {
|
|
38
|
-
if (!(element instanceof Node)) {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
let curr = element;
|
|
42
|
-
while (curr != null && !(curr instanceof Element)) {
|
|
43
|
-
curr = curr.parentNode;
|
|
44
|
-
}
|
|
45
|
-
return (curr &&
|
|
46
|
-
(hasNativeClosest
|
|
47
|
-
? curr.closest(selector)
|
|
48
|
-
: polyfillClosest(curr, selector)));
|
|
49
|
-
}
|
|
50
|
-
/** Polyfill for browsers without Element.closest. */
|
|
51
|
-
function polyfillClosest(element, selector) {
|
|
52
|
-
let curr = element;
|
|
53
|
-
while (curr != null && !(curr instanceof Element && matches(curr, selector))) {
|
|
54
|
-
curr = curr.parentNode;
|
|
55
|
-
}
|
|
56
|
-
return (curr || null);
|
|
57
|
-
}
|
|
58
|
-
const hasNativeClosest = !!Element.prototype.closest;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* @license
|
|
62
|
-
* Copyright Google LLC All Rights Reserved.
|
|
63
|
-
*
|
|
64
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
65
|
-
* found in the LICENSE file at https://angular.io/license
|
|
66
|
-
*/
|
|
67
|
-
const HOVER_OR_ACTIVE_CLASS = 'cdk-column-resize-hover-or-active';
|
|
68
|
-
const WITH_RESIZED_COLUMN_CLASS = 'cdk-column-resize-with-resized-column';
|
|
69
|
-
let nextId = 0;
|
|
70
|
-
/**
|
|
71
|
-
* Base class for ColumnResize directives which attach to mat-table elements to
|
|
72
|
-
* provide common events and services for column resizing.
|
|
73
|
-
*/
|
|
74
|
-
class ColumnResize {
|
|
75
|
-
constructor() {
|
|
76
|
-
this.destroyed = new Subject();
|
|
77
|
-
/** Unique ID for this table instance. */
|
|
78
|
-
this.selectorId = `${++nextId}`;
|
|
79
|
-
}
|
|
80
|
-
ngAfterViewInit() {
|
|
81
|
-
this.elementRef.nativeElement.classList.add(this.getUniqueCssClass());
|
|
82
|
-
this._listenForRowHoverEvents();
|
|
83
|
-
this._listenForResizeActivity();
|
|
84
|
-
this._listenForHoverActivity();
|
|
85
|
-
}
|
|
86
|
-
ngOnDestroy() {
|
|
87
|
-
this.destroyed.next();
|
|
88
|
-
this.destroyed.complete();
|
|
89
|
-
}
|
|
90
|
-
/** Gets the unique CSS class name for this table instance. */
|
|
91
|
-
getUniqueCssClass() {
|
|
92
|
-
return `cdk-column-resize-${this.selectorId}`;
|
|
93
|
-
}
|
|
94
|
-
/** Called when a column in the table is resized. Applies a css class to the table element. */
|
|
95
|
-
setResized() {
|
|
96
|
-
this.elementRef.nativeElement.classList.add(WITH_RESIZED_COLUMN_CLASS);
|
|
97
|
-
}
|
|
98
|
-
_listenForRowHoverEvents() {
|
|
99
|
-
this.ngZone.runOutsideAngular(() => {
|
|
100
|
-
const element = this.elementRef.nativeElement;
|
|
101
|
-
fromEvent(element, 'mouseover')
|
|
102
|
-
.pipe(map(event => closest(event.target, HEADER_CELL_SELECTOR)), takeUntil(this.destroyed))
|
|
103
|
-
.subscribe(this.eventDispatcher.headerCellHovered);
|
|
104
|
-
fromEvent(element, 'mouseleave')
|
|
105
|
-
.pipe(filter(event => !!event.relatedTarget &&
|
|
106
|
-
!matches(event.relatedTarget, RESIZE_OVERLAY_SELECTOR)), mapTo(null), takeUntil(this.destroyed))
|
|
107
|
-
.subscribe(this.eventDispatcher.headerCellHovered);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
_listenForResizeActivity() {
|
|
111
|
-
merge(this.eventDispatcher.overlayHandleActiveForCell.pipe(mapTo(undefined)), this.notifier.triggerResize.pipe(mapTo(undefined)), this.notifier.resizeCompleted.pipe(mapTo(undefined)))
|
|
112
|
-
.pipe(take(1), takeUntil(this.destroyed))
|
|
113
|
-
.subscribe(() => {
|
|
114
|
-
this.setResized();
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
_listenForHoverActivity() {
|
|
118
|
-
this.eventDispatcher.headerRowHoveredOrActiveDistinct
|
|
119
|
-
.pipe(startWith(null), pairwise(), takeUntil(this.destroyed))
|
|
120
|
-
.subscribe(([previousRow, hoveredRow]) => {
|
|
121
|
-
if (hoveredRow) {
|
|
122
|
-
hoveredRow.classList.add(HOVER_OR_ACTIVE_CLASS);
|
|
123
|
-
}
|
|
124
|
-
if (previousRow) {
|
|
125
|
-
previousRow.classList.remove(HOVER_OR_ACTIVE_CLASS);
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/** @nocollapse */ ColumnResize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResize, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
131
|
-
/** @nocollapse */ ColumnResize.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ColumnResize, ngImport: i0 });
|
|
132
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResize, decorators: [{
|
|
133
|
-
type: Directive
|
|
134
|
-
}] });
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* @license
|
|
138
|
-
* Copyright Google LLC All Rights Reserved.
|
|
139
|
-
*
|
|
140
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
141
|
-
* found in the LICENSE file at https://angular.io/license
|
|
142
|
-
*/
|
|
143
|
-
/**
|
|
144
|
-
* Originating source of column resize events within a table.
|
|
145
|
-
* @docs-private
|
|
146
|
-
*/
|
|
147
|
-
class ColumnResizeNotifierSource {
|
|
148
|
-
constructor() {
|
|
149
|
-
/** Emits when an in-progress resize is canceled. */
|
|
150
|
-
this.resizeCanceled = new Subject();
|
|
151
|
-
/** Emits when a resize is applied. */
|
|
152
|
-
this.resizeCompleted = new Subject();
|
|
153
|
-
/** Triggers a resize action. */
|
|
154
|
-
this.triggerResize = new Subject();
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
/** @nocollapse */ ColumnResizeNotifierSource.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifierSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
158
|
-
/** @nocollapse */ ColumnResizeNotifierSource.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifierSource });
|
|
159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifierSource, decorators: [{
|
|
160
|
-
type: Injectable
|
|
161
|
-
}] });
|
|
162
|
-
/** Service for triggering column resizes imperatively or being notified of them. */
|
|
163
|
-
class ColumnResizeNotifier {
|
|
164
|
-
constructor(_source) {
|
|
165
|
-
this._source = _source;
|
|
166
|
-
/** Emits whenever a column is resized. */
|
|
167
|
-
this.resizeCompleted = this._source.resizeCompleted;
|
|
168
|
-
}
|
|
169
|
-
/** Instantly resizes the specified column. */
|
|
170
|
-
resize(columnId, size) {
|
|
171
|
-
this._source.triggerResize.next({ columnId, size, completeImmediately: true, isStickyColumn: true });
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/** @nocollapse */ ColumnResizeNotifier.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifier, deps: [{ token: ColumnResizeNotifierSource }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
175
|
-
/** @nocollapse */ ColumnResizeNotifier.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifier });
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnResizeNotifier, decorators: [{
|
|
177
|
-
type: Injectable
|
|
178
|
-
}], ctorParameters: function () { return [{ type: ColumnResizeNotifierSource }]; } });
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* @license
|
|
182
|
-
* Copyright Google LLC All Rights Reserved.
|
|
183
|
-
*
|
|
184
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
185
|
-
* found in the LICENSE file at https://angular.io/license
|
|
186
|
-
*/
|
|
187
|
-
/** Coordinates events between the column resize directives. */
|
|
188
|
-
class HeaderRowEventDispatcher {
|
|
189
|
-
constructor(_ngZone) {
|
|
190
|
-
this._ngZone = _ngZone;
|
|
191
|
-
/**
|
|
192
|
-
* Emits the currently hovered header cell or null when no header cells are hovered.
|
|
193
|
-
* Exposed publicly for events to feed in, but subscribers should use headerCellHoveredDistinct,
|
|
194
|
-
* defined below.
|
|
195
|
-
*/
|
|
196
|
-
this.headerCellHovered = new Subject();
|
|
197
|
-
/**
|
|
198
|
-
* Emits the header cell for which a user-triggered resize is active or null
|
|
199
|
-
* when no resize is in progress.
|
|
200
|
-
*/
|
|
201
|
-
this.overlayHandleActiveForCell = new Subject();
|
|
202
|
-
/** Distinct and shared version of headerCellHovered. */
|
|
203
|
-
this.headerCellHoveredDistinct = this.headerCellHovered.pipe(distinctUntilChanged(), share());
|
|
204
|
-
/**
|
|
205
|
-
* Emits the header that is currently hovered or hosting an active resize event (with active
|
|
206
|
-
* taking precedence).
|
|
207
|
-
*/
|
|
208
|
-
this.headerRowHoveredOrActiveDistinct = combineLatest(this.headerCellHoveredDistinct.pipe(map(cell => closest(cell, HEADER_ROW_SELECTOR)), startWith(null), distinctUntilChanged()), this.overlayHandleActiveForCell.pipe(map(cell => closest(cell, HEADER_ROW_SELECTOR)), startWith(null), distinctUntilChanged())).pipe(skip(1), // Ignore initial [null, null] emission.
|
|
209
|
-
map(([hovered, active]) => active || hovered), distinctUntilChanged(), share());
|
|
210
|
-
this._headerRowHoveredOrActiveDistinctReenterZone = this.headerRowHoveredOrActiveDistinct.pipe(this._enterZone(), share());
|
|
211
|
-
// Optimization: Share row events observable with subsequent callers.
|
|
212
|
-
// At startup, calls will be sequential by row (and typically there's only one).
|
|
213
|
-
this._lastSeenRow = null;
|
|
214
|
-
this._lastSeenRowHover = null;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Emits whether the specified row should show its overlay controls.
|
|
218
|
-
* Emission occurs within the NgZone.
|
|
219
|
-
*/
|
|
220
|
-
resizeOverlayVisibleForHeaderRow(row) {
|
|
221
|
-
if (row !== this._lastSeenRow) {
|
|
222
|
-
this._lastSeenRow = row;
|
|
223
|
-
this._lastSeenRowHover = this._headerRowHoveredOrActiveDistinctReenterZone.pipe(map(hoveredRow => hoveredRow === row), distinctUntilChanged(), share());
|
|
224
|
-
}
|
|
225
|
-
return this._lastSeenRowHover;
|
|
226
|
-
}
|
|
227
|
-
_enterZone() {
|
|
228
|
-
return (source) => new Observable(observer => source.subscribe({
|
|
229
|
-
next: value => this._ngZone.run(() => observer.next(value)),
|
|
230
|
-
error: err => observer.error(err),
|
|
231
|
-
complete: () => observer.complete(),
|
|
232
|
-
}));
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
/** @nocollapse */ HeaderRowEventDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: HeaderRowEventDispatcher, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
236
|
-
/** @nocollapse */ HeaderRowEventDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: HeaderRowEventDispatcher });
|
|
237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: HeaderRowEventDispatcher, decorators: [{
|
|
238
|
-
type: Injectable
|
|
239
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
* @license
|
|
243
|
-
* Copyright Google LLC All Rights Reserved.
|
|
244
|
-
*
|
|
245
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
246
|
-
* found in the LICENSE file at https://angular.io/license
|
|
247
|
-
*/
|
|
248
|
-
/**
|
|
249
|
-
* Provides an implementation for resizing a column.
|
|
250
|
-
* The details of how resizing works for tables for flex mat-tables are quite different.
|
|
251
|
-
*/
|
|
252
|
-
class ResizeStrategy {
|
|
253
|
-
constructor() {
|
|
254
|
-
this._pendingResizeDelta = null;
|
|
255
|
-
}
|
|
256
|
-
/** Adjusts the width of the table element by the specified delta. */
|
|
257
|
-
updateTableWidthAndStickyColumns(delta) {
|
|
258
|
-
var _a;
|
|
259
|
-
if (this._pendingResizeDelta === null) {
|
|
260
|
-
const tableElement = this.columnResize.elementRef.nativeElement;
|
|
261
|
-
const tableWidth = getElementWidth(tableElement);
|
|
262
|
-
this.styleScheduler.schedule(() => {
|
|
263
|
-
tableElement.style.width = coerceCssPixelValue(tableWidth + this._pendingResizeDelta);
|
|
264
|
-
this._pendingResizeDelta = null;
|
|
265
|
-
});
|
|
266
|
-
this.styleScheduler.scheduleEnd(() => {
|
|
267
|
-
this.table.updateStickyColumnStyles();
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
this._pendingResizeDelta = ((_a = this._pendingResizeDelta) !== null && _a !== void 0 ? _a : 0) + delta;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
/** @nocollapse */ ResizeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ResizeStrategy, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
274
|
-
/** @nocollapse */ ResizeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ResizeStrategy });
|
|
275
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ResizeStrategy, decorators: [{
|
|
276
|
-
type: Injectable
|
|
277
|
-
}] });
|
|
278
|
-
/**
|
|
279
|
-
* The optimially performing resize strategy for <table> elements with table-layout: fixed.
|
|
280
|
-
* Tested against and outperformed:
|
|
281
|
-
* CSS selector
|
|
282
|
-
* CSS selector w/ CSS variable
|
|
283
|
-
* Updating all cell nodes
|
|
284
|
-
*/
|
|
285
|
-
class TableLayoutFixedResizeStrategy extends ResizeStrategy {
|
|
286
|
-
constructor(columnResize, styleScheduler, table) {
|
|
287
|
-
super();
|
|
288
|
-
this.columnResize = columnResize;
|
|
289
|
-
this.styleScheduler = styleScheduler;
|
|
290
|
-
this.table = table;
|
|
291
|
-
}
|
|
292
|
-
applyColumnSize(_, columnHeader, sizeInPx, previousSizeInPx) {
|
|
293
|
-
const delta = sizeInPx - (previousSizeInPx !== null && previousSizeInPx !== void 0 ? previousSizeInPx : getElementWidth(columnHeader));
|
|
294
|
-
if (delta === 0) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
this.styleScheduler.schedule(() => {
|
|
298
|
-
columnHeader.style.width = coerceCssPixelValue(sizeInPx);
|
|
299
|
-
});
|
|
300
|
-
this.updateTableWidthAndStickyColumns(delta);
|
|
301
|
-
}
|
|
302
|
-
applyMinColumnSize(_, columnHeader, sizeInPx) {
|
|
303
|
-
const currentWidth = getElementWidth(columnHeader);
|
|
304
|
-
const newWidth = Math.max(currentWidth, sizeInPx);
|
|
305
|
-
this.applyColumnSize(_, columnHeader, newWidth, currentWidth);
|
|
306
|
-
}
|
|
307
|
-
applyMaxColumnSize(_, columnHeader, sizeInPx) {
|
|
308
|
-
const currentWidth = getElementWidth(columnHeader);
|
|
309
|
-
const newWidth = Math.min(currentWidth, sizeInPx);
|
|
310
|
-
this.applyColumnSize(_, columnHeader, newWidth, currentWidth);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
/** @nocollapse */ TableLayoutFixedResizeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TableLayoutFixedResizeStrategy, deps: [{ token: ColumnResize }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i2.CdkTable }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
314
|
-
/** @nocollapse */ TableLayoutFixedResizeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TableLayoutFixedResizeStrategy });
|
|
315
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: TableLayoutFixedResizeStrategy, decorators: [{
|
|
316
|
-
type: Injectable
|
|
317
|
-
}], ctorParameters: function () {
|
|
318
|
-
return [{ type: ColumnResize }, { type: i2._CoalescedStyleScheduler, decorators: [{
|
|
319
|
-
type: Inject,
|
|
320
|
-
args: [_COALESCED_STYLE_SCHEDULER]
|
|
321
|
-
}] }, { type: i2.CdkTable }];
|
|
322
|
-
} });
|
|
323
|
-
/**
|
|
324
|
-
* The optimally performing resize strategy for flex mat-tables.
|
|
325
|
-
* Tested against and outperformed:
|
|
326
|
-
* CSS selector w/ CSS variable
|
|
327
|
-
* Updating all mat-cell nodes
|
|
328
|
-
*/
|
|
329
|
-
class CdkFlexTableResizeStrategy extends ResizeStrategy {
|
|
330
|
-
constructor(columnResize, styleScheduler, table, document) {
|
|
331
|
-
super();
|
|
332
|
-
this.columnResize = columnResize;
|
|
333
|
-
this.styleScheduler = styleScheduler;
|
|
334
|
-
this.table = table;
|
|
335
|
-
this._columnIndexes = new Map();
|
|
336
|
-
this._columnProperties = new Map();
|
|
337
|
-
this._indexSequence = 0;
|
|
338
|
-
this.defaultMinSize = 0;
|
|
339
|
-
this.defaultMaxSize = Number.MAX_SAFE_INTEGER;
|
|
340
|
-
this._document = document;
|
|
341
|
-
}
|
|
342
|
-
applyColumnSize(cssFriendlyColumnName, columnHeader, sizeInPx, previousSizeInPx) {
|
|
343
|
-
// Optimization: Check applied width first as we probably set it already before reading
|
|
344
|
-
// offsetWidth which triggers layout.
|
|
345
|
-
const delta = sizeInPx -
|
|
346
|
-
(previousSizeInPx !== null && previousSizeInPx !== void 0 ? previousSizeInPx : (this._getAppliedWidth(cssFriendlyColumnName) || columnHeader.offsetWidth));
|
|
347
|
-
if (delta === 0) {
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
const cssSize = coerceCssPixelValue(sizeInPx);
|
|
351
|
-
this._applyProperty(cssFriendlyColumnName, 'flex', `0 0.01 ${cssSize}`);
|
|
352
|
-
this.updateTableWidthAndStickyColumns(delta);
|
|
353
|
-
}
|
|
354
|
-
applyMinColumnSize(cssFriendlyColumnName, _, sizeInPx) {
|
|
355
|
-
const cssSize = coerceCssPixelValue(sizeInPx);
|
|
356
|
-
this._applyProperty(cssFriendlyColumnName, 'min-width', cssSize, sizeInPx !== this.defaultMinSize);
|
|
357
|
-
this.updateTableWidthAndStickyColumns(0);
|
|
358
|
-
}
|
|
359
|
-
applyMaxColumnSize(cssFriendlyColumnName, _, sizeInPx) {
|
|
360
|
-
const cssSize = coerceCssPixelValue(sizeInPx);
|
|
361
|
-
this._applyProperty(cssFriendlyColumnName, 'max-width', cssSize, sizeInPx !== this.defaultMaxSize);
|
|
362
|
-
this.updateTableWidthAndStickyColumns(0);
|
|
363
|
-
}
|
|
364
|
-
getColumnCssClass(cssFriendlyColumnName) {
|
|
365
|
-
return `cdk-column-${cssFriendlyColumnName}`;
|
|
366
|
-
}
|
|
367
|
-
ngOnDestroy() {
|
|
368
|
-
// TODO: Use remove() once we're off IE11.
|
|
369
|
-
if (this._styleElement && this._styleElement.parentNode) {
|
|
370
|
-
this._styleElement.parentNode.removeChild(this._styleElement);
|
|
371
|
-
this._styleElement = undefined;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
_getPropertyValue(cssFriendlyColumnName, key) {
|
|
375
|
-
const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);
|
|
376
|
-
return properties.get(key);
|
|
377
|
-
}
|
|
378
|
-
_getAppliedWidth(cssFriendslyColumnName) {
|
|
379
|
-
return coercePixelsFromFlexValue(this._getPropertyValue(cssFriendslyColumnName, 'flex'));
|
|
380
|
-
}
|
|
381
|
-
_applyProperty(cssFriendlyColumnName, key, value, enable = true) {
|
|
382
|
-
const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);
|
|
383
|
-
this.styleScheduler.schedule(() => {
|
|
384
|
-
if (enable) {
|
|
385
|
-
properties.set(key, value);
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
properties.delete(key);
|
|
389
|
-
}
|
|
390
|
-
this._applySizeCss(cssFriendlyColumnName);
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
_getStyleSheet() {
|
|
394
|
-
if (!this._styleElement) {
|
|
395
|
-
this._styleElement = this._document.createElement('style');
|
|
396
|
-
this._styleElement.appendChild(this._document.createTextNode(''));
|
|
397
|
-
this._document.head.appendChild(this._styleElement);
|
|
398
|
-
}
|
|
399
|
-
return this._styleElement.sheet;
|
|
400
|
-
}
|
|
401
|
-
_getColumnPropertiesMap(cssFriendlyColumnName) {
|
|
402
|
-
let properties = this._columnProperties.get(cssFriendlyColumnName);
|
|
403
|
-
if (properties === undefined) {
|
|
404
|
-
properties = new Map();
|
|
405
|
-
this._columnProperties.set(cssFriendlyColumnName, properties);
|
|
406
|
-
}
|
|
407
|
-
return properties;
|
|
408
|
-
}
|
|
409
|
-
_applySizeCss(cssFriendlyColumnName) {
|
|
410
|
-
const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);
|
|
411
|
-
const propertyKeys = Array.from(properties.keys());
|
|
412
|
-
let index = this._columnIndexes.get(cssFriendlyColumnName);
|
|
413
|
-
if (index === undefined) {
|
|
414
|
-
if (!propertyKeys.length) {
|
|
415
|
-
// Nothing to set or unset.
|
|
416
|
-
return;
|
|
417
|
-
}
|
|
418
|
-
index = this._indexSequence++;
|
|
419
|
-
this._columnIndexes.set(cssFriendlyColumnName, index);
|
|
420
|
-
}
|
|
421
|
-
else {
|
|
422
|
-
this._getStyleSheet().deleteRule(index);
|
|
423
|
-
}
|
|
424
|
-
const columnClassName = this.getColumnCssClass(cssFriendlyColumnName);
|
|
425
|
-
const tableClassName = this.columnResize.getUniqueCssClass();
|
|
426
|
-
const selector = `.${tableClassName} .${columnClassName}`;
|
|
427
|
-
const body = propertyKeys.map(key => `${key}:${properties.get(key)}`).join(';');
|
|
428
|
-
this._getStyleSheet().insertRule(`${selector} {${body}}`, index);
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
/** @nocollapse */ CdkFlexTableResizeStrategy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkFlexTableResizeStrategy, deps: [{ token: ColumnResize }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i2.CdkTable }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
432
|
-
/** @nocollapse */ CdkFlexTableResizeStrategy.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkFlexTableResizeStrategy });
|
|
433
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkFlexTableResizeStrategy, decorators: [{
|
|
434
|
-
type: Injectable
|
|
435
|
-
}], ctorParameters: function () {
|
|
436
|
-
return [{ type: ColumnResize }, { type: i2._CoalescedStyleScheduler, decorators: [{
|
|
437
|
-
type: Inject,
|
|
438
|
-
args: [_COALESCED_STYLE_SCHEDULER]
|
|
439
|
-
}] }, { type: i2.CdkTable }, { type: undefined, decorators: [{
|
|
440
|
-
type: Inject,
|
|
441
|
-
args: [DOCUMENT]
|
|
442
|
-
}] }];
|
|
443
|
-
} });
|
|
444
|
-
/** Converts CSS pixel values to numbers, eg "123px" to 123. Returns NaN for non pixel values. */
|
|
445
|
-
function coercePixelsFromCssValue(cssValue) {
|
|
446
|
-
var _a;
|
|
447
|
-
return Number((_a = cssValue.match(/(\d+)px/)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
448
|
-
}
|
|
449
|
-
/** Gets the style.width pixels on the specified element if present, otherwise its offsetWidth. */
|
|
450
|
-
function getElementWidth(element) {
|
|
451
|
-
// Optimization: Check style.width first as we probably set it already before reading
|
|
452
|
-
// offsetWidth which triggers layout.
|
|
453
|
-
return coercePixelsFromCssValue(element.style.width) || element.offsetWidth;
|
|
454
|
-
}
|
|
455
|
-
/**
|
|
456
|
-
* Converts CSS flex values as set in CdkFlexTableResizeStrategy to numbers,
|
|
457
|
-
* eg "0 0.01 123px" to 123.
|
|
458
|
-
*/
|
|
459
|
-
function coercePixelsFromFlexValue(flexValue) {
|
|
460
|
-
var _a;
|
|
461
|
-
return Number((_a = flexValue === null || flexValue === void 0 ? void 0 : flexValue.match(/0 0\.01 (\d+)px/)) === null || _a === void 0 ? void 0 : _a[1]);
|
|
462
|
-
}
|
|
463
|
-
const TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER = {
|
|
464
|
-
provide: ResizeStrategy,
|
|
465
|
-
useClass: TableLayoutFixedResizeStrategy,
|
|
466
|
-
};
|
|
467
|
-
const FLEX_RESIZE_STRATEGY_PROVIDER = {
|
|
468
|
-
provide: ResizeStrategy,
|
|
469
|
-
useClass: CdkFlexTableResizeStrategy,
|
|
470
|
-
};
|
|
471
|
-
|
|
472
|
-
/**
|
|
473
|
-
* @license
|
|
474
|
-
* Copyright Google LLC All Rights Reserved.
|
|
475
|
-
*
|
|
476
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
477
|
-
* found in the LICENSE file at https://angular.io/license
|
|
478
|
-
*/
|
|
479
|
-
const PROVIDERS = [
|
|
480
|
-
ColumnResizeNotifier,
|
|
481
|
-
HeaderRowEventDispatcher,
|
|
482
|
-
ColumnResizeNotifierSource,
|
|
483
|
-
];
|
|
484
|
-
const TABLE_PROVIDERS = [
|
|
485
|
-
...PROVIDERS,
|
|
486
|
-
TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER,
|
|
487
|
-
];
|
|
488
|
-
const FLEX_PROVIDERS = [...PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER];
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* @license
|
|
492
|
-
* Copyright Google LLC All Rights Reserved.
|
|
493
|
-
*
|
|
494
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
495
|
-
* found in the LICENSE file at https://angular.io/license
|
|
496
|
-
*/
|
|
497
|
-
/**
|
|
498
|
-
* Explicitly enables column resizing for a table-based cdk-table.
|
|
499
|
-
* Individual columns must be annotated specifically.
|
|
500
|
-
*/
|
|
501
|
-
class CdkColumnResize extends ColumnResize {
|
|
502
|
-
constructor(columnResizeNotifier, elementRef, eventDispatcher, ngZone, notifier, table) {
|
|
503
|
-
super();
|
|
504
|
-
this.columnResizeNotifier = columnResizeNotifier;
|
|
505
|
-
this.elementRef = elementRef;
|
|
506
|
-
this.eventDispatcher = eventDispatcher;
|
|
507
|
-
this.ngZone = ngZone;
|
|
508
|
-
this.notifier = notifier;
|
|
509
|
-
this.table = table;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
/** @nocollapse */ CdkColumnResize.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResize, deps: [{ token: ColumnResizeNotifier }, { token: i0.ElementRef }, { token: HeaderRowEventDispatcher }, { token: i0.NgZone }, { token: ColumnResizeNotifierSource }, { token: i2.CdkTable }], target: i0.ɵɵFactoryTarget.Directive });
|
|
513
|
-
/** @nocollapse */ CdkColumnResize.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: CdkColumnResize, selector: "table[cdk-table][columnResize]", providers: [
|
|
514
|
-
...TABLE_PROVIDERS,
|
|
515
|
-
{ provide: ColumnResize, useExisting: CdkColumnResize },
|
|
516
|
-
], usesInheritance: true, ngImport: i0 });
|
|
517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResize, decorators: [{
|
|
518
|
-
type: Directive,
|
|
519
|
-
args: [{
|
|
520
|
-
selector: 'table[cdk-table][columnResize]',
|
|
521
|
-
providers: [
|
|
522
|
-
...TABLE_PROVIDERS,
|
|
523
|
-
{ provide: ColumnResize, useExisting: CdkColumnResize },
|
|
524
|
-
],
|
|
525
|
-
}]
|
|
526
|
-
}], ctorParameters: function () { return [{ type: ColumnResizeNotifier }, { type: i0.ElementRef }, { type: HeaderRowEventDispatcher }, { type: i0.NgZone }, { type: ColumnResizeNotifierSource }, { type: i2.CdkTable }]; } });
|
|
527
|
-
|
|
528
|
-
/**
|
|
529
|
-
* @license
|
|
530
|
-
* Copyright Google LLC All Rights Reserved.
|
|
531
|
-
*
|
|
532
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
533
|
-
* found in the LICENSE file at https://angular.io/license
|
|
534
|
-
*/
|
|
535
|
-
/**
|
|
536
|
-
* Explicitly enables column resizing for a flexbox-based cdk-table.
|
|
537
|
-
* Individual columns must be annotated specifically.
|
|
538
|
-
*/
|
|
539
|
-
class CdkColumnResizeFlex extends ColumnResize {
|
|
540
|
-
constructor(columnResizeNotifier, elementRef, eventDispatcher, ngZone, notifier, table) {
|
|
541
|
-
super();
|
|
542
|
-
this.columnResizeNotifier = columnResizeNotifier;
|
|
543
|
-
this.elementRef = elementRef;
|
|
544
|
-
this.eventDispatcher = eventDispatcher;
|
|
545
|
-
this.ngZone = ngZone;
|
|
546
|
-
this.notifier = notifier;
|
|
547
|
-
this.table = table;
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
/** @nocollapse */ CdkColumnResizeFlex.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeFlex, deps: [{ token: ColumnResizeNotifier }, { token: i0.ElementRef }, { token: HeaderRowEventDispatcher }, { token: i0.NgZone }, { token: ColumnResizeNotifierSource }, { token: i2.CdkTable }], target: i0.ɵɵFactoryTarget.Directive });
|
|
551
|
-
/** @nocollapse */ CdkColumnResizeFlex.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: CdkColumnResizeFlex, selector: "cdk-table[columnResize]", providers: [
|
|
552
|
-
...FLEX_PROVIDERS,
|
|
553
|
-
{ provide: ColumnResize, useExisting: CdkColumnResizeFlex },
|
|
554
|
-
], usesInheritance: true, ngImport: i0 });
|
|
555
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeFlex, decorators: [{
|
|
556
|
-
type: Directive,
|
|
557
|
-
args: [{
|
|
558
|
-
selector: 'cdk-table[columnResize]',
|
|
559
|
-
providers: [
|
|
560
|
-
...FLEX_PROVIDERS,
|
|
561
|
-
{ provide: ColumnResize, useExisting: CdkColumnResizeFlex },
|
|
562
|
-
],
|
|
563
|
-
}]
|
|
564
|
-
}], ctorParameters: function () { return [{ type: ColumnResizeNotifier }, { type: i0.ElementRef }, { type: HeaderRowEventDispatcher }, { type: i0.NgZone }, { type: ColumnResizeNotifierSource }, { type: i2.CdkTable }]; } });
|
|
565
|
-
|
|
566
|
-
/**
|
|
567
|
-
* @license
|
|
568
|
-
* Copyright Google LLC All Rights Reserved.
|
|
569
|
-
*
|
|
570
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
571
|
-
* found in the LICENSE file at https://angular.io/license
|
|
572
|
-
*/
|
|
573
|
-
/**
|
|
574
|
-
* One of two NgModules for use with CdkColumnResize.
|
|
575
|
-
* When using this module, columns are not resizable by default.
|
|
576
|
-
*/
|
|
577
|
-
class CdkColumnResizeModule {
|
|
578
|
-
}
|
|
579
|
-
/** @nocollapse */ CdkColumnResizeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
580
|
-
/** @nocollapse */ CdkColumnResizeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeModule, declarations: [CdkColumnResize, CdkColumnResizeFlex], exports: [CdkColumnResize, CdkColumnResizeFlex] });
|
|
581
|
-
/** @nocollapse */ CdkColumnResizeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeModule });
|
|
582
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: CdkColumnResizeModule, decorators: [{
|
|
583
|
-
type: NgModule,
|
|
584
|
-
args: [{
|
|
585
|
-
declarations: [CdkColumnResize, CdkColumnResizeFlex],
|
|
586
|
-
exports: [CdkColumnResize, CdkColumnResizeFlex],
|
|
587
|
-
}]
|
|
588
|
-
}] });
|
|
589
|
-
|
|
590
|
-
/**
|
|
591
|
-
* @license
|
|
592
|
-
* Copyright Google LLC All Rights Reserved.
|
|
593
|
-
*
|
|
594
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
595
|
-
* found in the LICENSE file at https://angular.io/license
|
|
596
|
-
*/
|
|
597
|
-
/**
|
|
598
|
-
* Can be provided by the host application to enable persistence of column resize state.
|
|
599
|
-
*/
|
|
600
|
-
class ColumnSizeStore {
|
|
601
|
-
}
|
|
602
|
-
/** @nocollapse */ ColumnSizeStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnSizeStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
603
|
-
/** @nocollapse */ ColumnSizeStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnSizeStore });
|
|
604
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ColumnSizeStore, decorators: [{
|
|
605
|
-
type: Injectable
|
|
606
|
-
}] });
|
|
607
|
-
|
|
608
|
-
/**
|
|
609
|
-
* @license
|
|
610
|
-
* Copyright Google LLC All Rights Reserved.
|
|
611
|
-
*
|
|
612
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
613
|
-
* found in the LICENSE file at https://angular.io/license
|
|
614
|
-
*/
|
|
615
|
-
/** Tracks state of resize events in progress. */
|
|
616
|
-
class ResizeRef {
|
|
617
|
-
constructor(origin, overlayRef, minWidthPx, maxWidthPx) {
|
|
618
|
-
this.origin = origin;
|
|
619
|
-
this.overlayRef = overlayRef;
|
|
620
|
-
this.minWidthPx = minWidthPx;
|
|
621
|
-
this.maxWidthPx = maxWidthPx;
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
const OVERLAY_ACTIVE_CLASS = 'cdk-resizable-overlay-thumb-active';
|
|
626
|
-
/**
|
|
627
|
-
* Base class for Resizable directives which are applied to column headers to make those columns
|
|
628
|
-
* resizable.
|
|
629
|
-
*/
|
|
630
|
-
class Resizable {
|
|
631
|
-
constructor() {
|
|
632
|
-
this.isResizable = true;
|
|
633
|
-
this.minWidthPxInternal = 0;
|
|
634
|
-
this.maxWidthPxInternal = Number.MAX_SAFE_INTEGER;
|
|
635
|
-
this.destroyed = new Subject();
|
|
636
|
-
this._viewInitialized = false;
|
|
637
|
-
}
|
|
638
|
-
/** The minimum width to allow the column to be sized to. */
|
|
639
|
-
get minWidthPx() {
|
|
640
|
-
return this.minWidthPxInternal;
|
|
641
|
-
}
|
|
642
|
-
set minWidthPx(value) {
|
|
643
|
-
if (value) {
|
|
644
|
-
this.minWidthPxInternal = value;
|
|
645
|
-
}
|
|
646
|
-
this.columnResize.setResized();
|
|
647
|
-
if (this.elementRef.nativeElement && this._viewInitialized) {
|
|
648
|
-
this._applyMinWidthPx();
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
/** The maximum width to allow the column to be sized to. */
|
|
652
|
-
get maxWidthPx() {
|
|
653
|
-
return this.maxWidthPxInternal;
|
|
654
|
-
}
|
|
655
|
-
set maxWidthPx(value) {
|
|
656
|
-
if (value) {
|
|
657
|
-
this.maxWidthPxInternal = value;
|
|
658
|
-
}
|
|
659
|
-
this.columnResize.setResized();
|
|
660
|
-
if (this.elementRef.nativeElement && this._viewInitialized) {
|
|
661
|
-
this._applyMaxWidthPx();
|
|
662
|
-
}
|
|
663
|
-
}
|
|
664
|
-
ngAfterViewInit() {
|
|
665
|
-
if (this.isResizable) {
|
|
666
|
-
this._listenForRowHoverEvents();
|
|
667
|
-
this._listenForResizeEvents();
|
|
668
|
-
this._appendInlineHandle();
|
|
669
|
-
this.styleScheduler.scheduleEnd(() => {
|
|
670
|
-
this._viewInitialized = true;
|
|
671
|
-
this._applyMinWidthPx();
|
|
672
|
-
this._applyMaxWidthPx();
|
|
673
|
-
});
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
ngOnDestroy() {
|
|
677
|
-
this.destroyed.next();
|
|
678
|
-
this.destroyed.complete();
|
|
679
|
-
if (this.inlineHandle) {
|
|
680
|
-
this.elementRef.nativeElement.removeChild(this.inlineHandle);
|
|
681
|
-
}
|
|
682
|
-
if (this.overlayRef) {
|
|
683
|
-
this.overlayRef.dispose();
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
_createOverlayForHandle() {
|
|
687
|
-
// Use of overlays allows us to properly capture click events spanning parts
|
|
688
|
-
// of two table cells and is also useful for displaying a resize thumb
|
|
689
|
-
// over both cells and extending it down the table as needed.
|
|
690
|
-
const isRtl = this.directionality.value === 'rtl';
|
|
691
|
-
const positionStrategy = this.overlay
|
|
692
|
-
.position()
|
|
693
|
-
.flexibleConnectedTo(this.elementRef.nativeElement)
|
|
694
|
-
.withFlexibleDimensions(false)
|
|
695
|
-
.withGrowAfterOpen(false)
|
|
696
|
-
.withPush(false)
|
|
697
|
-
.withDefaultOffsetX(isRtl ? 1 : 0)
|
|
698
|
-
.withPositions([
|
|
699
|
-
{
|
|
700
|
-
originX: isRtl ? 'start' : 'end',
|
|
701
|
-
originY: 'top',
|
|
702
|
-
overlayX: 'center',
|
|
703
|
-
overlayY: 'top',
|
|
704
|
-
},
|
|
705
|
-
]);
|
|
706
|
-
return this.overlay.create({
|
|
707
|
-
// Always position the overlay based on left-indexed coordinates.
|
|
708
|
-
direction: 'ltr',
|
|
709
|
-
disposeOnNavigation: true,
|
|
710
|
-
positionStrategy,
|
|
711
|
-
scrollStrategy: this.overlay.scrollStrategies.reposition(),
|
|
712
|
-
width: '16px',
|
|
713
|
-
});
|
|
714
|
-
}
|
|
715
|
-
_listenForRowHoverEvents() {
|
|
716
|
-
const element = this.elementRef.nativeElement;
|
|
717
|
-
const takeUntilDestroyed = takeUntil(this.destroyed);
|
|
718
|
-
this.eventDispatcher
|
|
719
|
-
.resizeOverlayVisibleForHeaderRow(closest(element, HEADER_ROW_SELECTOR))
|
|
720
|
-
.pipe(takeUntilDestroyed)
|
|
721
|
-
.subscribe(hoveringRow => {
|
|
722
|
-
if (hoveringRow) {
|
|
723
|
-
if (!this.overlayRef) {
|
|
724
|
-
this.overlayRef = this._createOverlayForHandle();
|
|
725
|
-
}
|
|
726
|
-
this._showHandleOverlay();
|
|
727
|
-
}
|
|
728
|
-
else if (this.overlayRef) {
|
|
729
|
-
// todo - can't detach during an active resize - need to work that out
|
|
730
|
-
this.overlayRef.detach();
|
|
731
|
-
}
|
|
732
|
-
});
|
|
733
|
-
}
|
|
734
|
-
_listenForResizeEvents() {
|
|
735
|
-
const takeUntilDestroyed = takeUntil(this.destroyed);
|
|
736
|
-
merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.triggerResize)
|
|
737
|
-
.pipe(takeUntilDestroyed, filter(columnSize => columnSize.columnId === this.columnDef.name))
|
|
738
|
-
.subscribe(({ size, previousSize, completeImmediately }) => {
|
|
739
|
-
this.elementRef.nativeElement.classList.add(OVERLAY_ACTIVE_CLASS);
|
|
740
|
-
this._applySize(size, previousSize);
|
|
741
|
-
if (completeImmediately) {
|
|
742
|
-
this._completeResizeOperation();
|
|
743
|
-
}
|
|
744
|
-
});
|
|
745
|
-
merge(this.resizeNotifier.resizeCanceled, this.resizeNotifier.resizeCompleted)
|
|
746
|
-
.pipe(takeUntilDestroyed)
|
|
747
|
-
.subscribe(columnSize => {
|
|
748
|
-
this._cleanUpAfterResize(columnSize);
|
|
749
|
-
});
|
|
750
|
-
}
|
|
751
|
-
_completeResizeOperation() {
|
|
752
|
-
this.ngZone.run(() => {
|
|
753
|
-
this.resizeNotifier.resizeCompleted.next({
|
|
754
|
-
columnId: this.columnDef.name,
|
|
755
|
-
size: this.elementRef.nativeElement.offsetWidth,
|
|
756
|
-
});
|
|
757
|
-
});
|
|
758
|
-
}
|
|
759
|
-
_cleanUpAfterResize(columnSize) {
|
|
760
|
-
this.elementRef.nativeElement.classList.remove(OVERLAY_ACTIVE_CLASS);
|
|
761
|
-
if (this.overlayRef && this.overlayRef.hasAttached()) {
|
|
762
|
-
this._updateOverlayHandleHeight();
|
|
763
|
-
this.overlayRef.updatePosition();
|
|
764
|
-
if (columnSize.columnId === this.columnDef.name) {
|
|
765
|
-
this.inlineHandle.focus();
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
_createHandlePortal() {
|
|
770
|
-
const injector = Injector.create({
|
|
771
|
-
parent: this.injector,
|
|
772
|
-
providers: [
|
|
773
|
-
{
|
|
774
|
-
provide: ResizeRef,
|
|
775
|
-
useValue: new ResizeRef(this.elementRef, this.overlayRef, this.minWidthPx, this.maxWidthPx),
|
|
776
|
-
},
|
|
777
|
-
],
|
|
778
|
-
});
|
|
779
|
-
return new ComponentPortal(this.getOverlayHandleComponentType(), this.viewContainerRef, injector);
|
|
780
|
-
}
|
|
781
|
-
_showHandleOverlay() {
|
|
782
|
-
this._updateOverlayHandleHeight();
|
|
783
|
-
this.overlayRef.attach(this._createHandlePortal());
|
|
784
|
-
// Needed to ensure that all of the lifecycle hooks inside the overlay run immediately.
|
|
785
|
-
this.changeDetectorRef.markForCheck();
|
|
786
|
-
}
|
|
787
|
-
_updateOverlayHandleHeight() {
|
|
788
|
-
this.overlayRef.updateSize({ height: this.elementRef.nativeElement.offsetHeight });
|
|
789
|
-
}
|
|
790
|
-
_applySize(sizeInPixels, previousSize) {
|
|
791
|
-
const sizeToApply = Math.min(Math.max(sizeInPixels, this.minWidthPx, 0), this.maxWidthPx);
|
|
792
|
-
this.resizeStrategy.applyColumnSize(this.columnDef.cssClassFriendlyName, this.elementRef.nativeElement, sizeToApply, previousSize);
|
|
793
|
-
}
|
|
794
|
-
_applyMinWidthPx() {
|
|
795
|
-
this.resizeStrategy.applyMinColumnSize(this.columnDef.cssClassFriendlyName, this.elementRef.nativeElement, this.minWidthPx);
|
|
796
|
-
}
|
|
797
|
-
_applyMaxWidthPx() {
|
|
798
|
-
this.resizeStrategy.applyMaxColumnSize(this.columnDef.cssClassFriendlyName, this.elementRef.nativeElement, this.maxWidthPx);
|
|
799
|
-
}
|
|
800
|
-
_appendInlineHandle() {
|
|
801
|
-
this.styleScheduler.schedule(() => {
|
|
802
|
-
this.inlineHandle = this.document.createElement('div');
|
|
803
|
-
this.inlineHandle.tabIndex = 0;
|
|
804
|
-
this.inlineHandle.className = this.getInlineHandleCssClassName();
|
|
805
|
-
// TODO: Apply correct aria role (probably slider) after a11y spec questions resolved.
|
|
806
|
-
this.elementRef.nativeElement.appendChild(this.inlineHandle);
|
|
807
|
-
});
|
|
808
|
-
}
|
|
809
|
-
}
|
|
810
|
-
/** @nocollapse */ Resizable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: Resizable, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
811
|
-
/** @nocollapse */ Resizable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: Resizable, ngImport: i0 });
|
|
812
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: Resizable, decorators: [{
|
|
813
|
-
type: Directive
|
|
814
|
-
}] });
|
|
815
|
-
|
|
816
|
-
/**
|
|
817
|
-
* @license
|
|
818
|
-
* Copyright Google LLC All Rights Reserved.
|
|
819
|
-
*
|
|
820
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
821
|
-
* found in the LICENSE file at https://angular.io/license
|
|
822
|
-
*/
|
|
823
|
-
// TODO: Take another look at using cdk drag drop. IIRC I ran into a couple
|
|
824
|
-
// good reasons for not using it but I don't remember what they were at this point.
|
|
825
|
-
/**
|
|
826
|
-
* Base class for a component shown over the edge of a resizable column that is responsible
|
|
827
|
-
* for handling column resize mouse events and displaying any visible UI on the column edge.
|
|
828
|
-
*/
|
|
829
|
-
class ResizeOverlayHandle {
|
|
830
|
-
constructor() {
|
|
831
|
-
this.destroyed = new Subject();
|
|
832
|
-
}
|
|
833
|
-
ngAfterViewInit() {
|
|
834
|
-
this._listenForMouseEvents();
|
|
835
|
-
}
|
|
836
|
-
ngOnDestroy() {
|
|
837
|
-
this.destroyed.next();
|
|
838
|
-
this.destroyed.complete();
|
|
839
|
-
}
|
|
840
|
-
_listenForMouseEvents() {
|
|
841
|
-
this.ngZone.runOutsideAngular(() => {
|
|
842
|
-
fromEvent(this.elementRef.nativeElement, 'mouseenter')
|
|
843
|
-
.pipe(mapTo(this.resizeRef.origin.nativeElement), takeUntil(this.destroyed))
|
|
844
|
-
.subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));
|
|
845
|
-
fromEvent(this.elementRef.nativeElement, 'mouseleave')
|
|
846
|
-
.pipe(map(event => event.relatedTarget && closest(event.relatedTarget, HEADER_CELL_SELECTOR)), takeUntil(this.destroyed))
|
|
847
|
-
.subscribe(cell => this.eventDispatcher.headerCellHovered.next(cell));
|
|
848
|
-
fromEvent(this.elementRef.nativeElement, 'mousedown')
|
|
849
|
-
.pipe(takeUntil(this.destroyed))
|
|
850
|
-
.subscribe(mousedownEvent => {
|
|
851
|
-
this._dragStarted(mousedownEvent);
|
|
852
|
-
});
|
|
853
|
-
});
|
|
854
|
-
}
|
|
855
|
-
_dragStarted(mousedownEvent) {
|
|
856
|
-
// Only allow dragging using the left mouse button.
|
|
857
|
-
if (mousedownEvent.button !== 0) {
|
|
858
|
-
return;
|
|
859
|
-
}
|
|
860
|
-
const mouseup = fromEvent(this.document, 'mouseup');
|
|
861
|
-
const mousemove = fromEvent(this.document, 'mousemove');
|
|
862
|
-
const escape = fromEvent(this.document, 'keyup').pipe(filter(event => event.keyCode === ESCAPE));
|
|
863
|
-
const startX = mousedownEvent.screenX;
|
|
864
|
-
const initialSize = this._getOriginWidth();
|
|
865
|
-
let overlayOffset = 0;
|
|
866
|
-
let originOffset = this._getOriginOffset();
|
|
867
|
-
let size = initialSize;
|
|
868
|
-
let overshot = 0;
|
|
869
|
-
this.updateResizeActive(true);
|
|
870
|
-
mouseup.pipe(takeUntil(merge(escape, this.destroyed))).subscribe(({ screenX }) => {
|
|
871
|
-
this.styleScheduler.scheduleEnd(() => {
|
|
872
|
-
this._notifyResizeEnded(size, screenX !== startX);
|
|
873
|
-
});
|
|
874
|
-
});
|
|
875
|
-
escape.pipe(takeUntil(merge(mouseup, this.destroyed))).subscribe(() => {
|
|
876
|
-
this._notifyResizeEnded(initialSize);
|
|
877
|
-
});
|
|
878
|
-
mousemove
|
|
879
|
-
.pipe(map(({ screenX }) => screenX), startWith(startX), distinctUntilChanged(), pairwise(), takeUntil(merge(mouseup, escape, this.destroyed)))
|
|
880
|
-
.subscribe(([prevX, currX]) => {
|
|
881
|
-
let deltaX = currX - prevX;
|
|
882
|
-
// If the mouse moved further than the resize was able to match, limit the
|
|
883
|
-
// movement of the overlay to match the actual size and position of the origin.
|
|
884
|
-
if (overshot !== 0) {
|
|
885
|
-
if ((overshot < 0 && deltaX < 0) || (overshot > 0 && deltaX > 0)) {
|
|
886
|
-
overshot += deltaX;
|
|
887
|
-
return;
|
|
888
|
-
}
|
|
889
|
-
else {
|
|
890
|
-
const remainingOvershot = overshot + deltaX;
|
|
891
|
-
overshot =
|
|
892
|
-
overshot > 0 ? Math.max(remainingOvershot, 0) : Math.min(remainingOvershot, 0);
|
|
893
|
-
deltaX = remainingOvershot - overshot;
|
|
894
|
-
if (deltaX === 0) {
|
|
895
|
-
return;
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
}
|
|
899
|
-
let computedNewSize = size + (this._isLtr() ? deltaX : -deltaX);
|
|
900
|
-
computedNewSize = Math.min(Math.max(computedNewSize, this.resizeRef.minWidthPx, 0), this.resizeRef.maxWidthPx);
|
|
901
|
-
this.resizeNotifier.triggerResize.next({
|
|
902
|
-
columnId: this.columnDef.name,
|
|
903
|
-
size: computedNewSize,
|
|
904
|
-
previousSize: size,
|
|
905
|
-
isStickyColumn: this.columnDef.sticky || this.columnDef.stickyEnd,
|
|
906
|
-
});
|
|
907
|
-
this.styleScheduler.scheduleEnd(() => {
|
|
908
|
-
const originNewSize = this._getOriginWidth();
|
|
909
|
-
const originNewOffset = this._getOriginOffset();
|
|
910
|
-
const originOffsetDeltaX = originNewOffset - originOffset;
|
|
911
|
-
const originSizeDeltaX = originNewSize - size;
|
|
912
|
-
size = originNewSize;
|
|
913
|
-
originOffset = originNewOffset;
|
|
914
|
-
overshot += deltaX + (this._isLtr() ? -originSizeDeltaX : originSizeDeltaX);
|
|
915
|
-
overlayOffset += originOffsetDeltaX + (this._isLtr() ? originSizeDeltaX : 0);
|
|
916
|
-
this._updateOverlayOffset(overlayOffset);
|
|
917
|
-
});
|
|
918
|
-
});
|
|
919
|
-
}
|
|
920
|
-
updateResizeActive(active) {
|
|
921
|
-
this.eventDispatcher.overlayHandleActiveForCell.next(active ? this.resizeRef.origin.nativeElement : null);
|
|
922
|
-
}
|
|
923
|
-
_getOriginWidth() {
|
|
924
|
-
return this.resizeRef.origin.nativeElement.offsetWidth;
|
|
925
|
-
}
|
|
926
|
-
_getOriginOffset() {
|
|
927
|
-
return this.resizeRef.origin.nativeElement.offsetLeft;
|
|
928
|
-
}
|
|
929
|
-
_updateOverlayOffset(offset) {
|
|
930
|
-
this.resizeRef.overlayRef.overlayElement.style.transform = `translateX(${coerceCssPixelValue(offset)})`;
|
|
931
|
-
}
|
|
932
|
-
_isLtr() {
|
|
933
|
-
return this.directionality.value === 'ltr';
|
|
934
|
-
}
|
|
935
|
-
_notifyResizeEnded(size, completedSuccessfully = false) {
|
|
936
|
-
this.updateResizeActive(false);
|
|
937
|
-
this.ngZone.run(() => {
|
|
938
|
-
const sizeMessage = { columnId: this.columnDef.name, size };
|
|
939
|
-
if (completedSuccessfully) {
|
|
940
|
-
this.resizeNotifier.resizeCompleted.next(sizeMessage);
|
|
941
|
-
}
|
|
942
|
-
else {
|
|
943
|
-
this.resizeNotifier.resizeCanceled.next(sizeMessage);
|
|
944
|
-
}
|
|
945
|
-
});
|
|
946
|
-
}
|
|
947
|
-
}
|
|
948
|
-
/** @nocollapse */ ResizeOverlayHandle.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ResizeOverlayHandle, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
949
|
-
/** @nocollapse */ ResizeOverlayHandle.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.1", type: ResizeOverlayHandle, ngImport: i0 });
|
|
950
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImport: i0, type: ResizeOverlayHandle, decorators: [{
|
|
951
|
-
type: Directive
|
|
952
|
-
}] });
|
|
953
|
-
|
|
954
|
-
/**
|
|
955
|
-
* Generated bundle index. Do not edit.
|
|
956
|
-
*/
|
|
957
|
-
|
|
958
|
-
export { CdkColumnResize, CdkColumnResizeFlex, CdkColumnResizeModule, CdkFlexTableResizeStrategy, ColumnResize, ColumnResizeNotifier, ColumnResizeNotifierSource, ColumnSizeStore, FLEX_PROVIDERS, FLEX_RESIZE_STRATEGY_PROVIDER, HeaderRowEventDispatcher, Resizable, ResizeOverlayHandle, ResizeRef, ResizeStrategy, TABLE_LAYOUT_FIXED_RESIZE_STRATEGY_PROVIDER, TABLE_PROVIDERS, TableLayoutFixedResizeStrategy };
|
|
959
|
-
//# sourceMappingURL=mtxColumnResize.mjs.map
|