@ng-matero/extensions 12.3.0 → 12.5.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/README.md +1 -1
- package/_all-color.scss +47 -0
- package/_all-theme.scss +5 -3
- package/_index.scss +4 -2
- package/_theming.scss +4 -2
- package/alert/_alert-theme.import.scss +2 -2
- package/alert/_alert-theme.scss +38 -17
- package/alert/alert.component.d.ts +6 -6
- package/alert/alert.component.scss +2 -1
- package/alert/mtxAlert.metadata.json +1 -1
- package/bundles/extensions.umd.js +21 -10
- package/bundles/extensions.umd.js.map +1 -1
- package/bundles/mtxAlert.umd.js +32 -14
- package/bundles/mtxAlert.umd.js.map +1 -1
- package/bundles/mtxButton.umd.js +36 -5
- package/bundles/mtxButton.umd.js.map +1 -1
- package/bundles/mtxCheckboxGroup.umd.js +10 -1
- package/bundles/mtxCheckboxGroup.umd.js.map +1 -1
- package/bundles/mtxColorPicker.umd.js +10 -1
- package/bundles/mtxColorPicker.umd.js.map +1 -1
- package/bundles/mtxColumnResize.umd.js +55 -6
- package/bundles/mtxColumnResize.umd.js.map +1 -1
- package/bundles/mtxCore.umd.js +10 -1
- package/bundles/mtxCore.umd.js.map +1 -1
- package/bundles/mtxDatetimepicker.umd.js +139 -32
- package/bundles/mtxDatetimepicker.umd.js.map +1 -1
- package/bundles/mtxDialog.umd.js +17 -2
- package/bundles/mtxDialog.umd.js.map +1 -1
- package/bundles/mtxFormGroup.umd.js +10 -1
- package/bundles/mtxFormGroup.umd.js.map +1 -1
- package/bundles/mtxGrid.umd.js +92 -12
- package/bundles/mtxGrid.umd.js.map +1 -1
- package/bundles/mtxLoader.umd.js +37 -8
- package/bundles/mtxLoader.umd.js.map +1 -1
- package/bundles/mtxPipes.umd.js +2 -0
- package/bundles/mtxPipes.umd.js.map +1 -1
- package/bundles/mtxPopover.umd.js +27 -3
- package/bundles/mtxPopover.umd.js.map +1 -1
- package/bundles/mtxProgress.umd.js +31 -4
- package/bundles/mtxProgress.umd.js.map +1 -1
- package/bundles/mtxSelect.umd.js +107 -13
- package/bundles/mtxSelect.umd.js.map +1 -1
- package/bundles/mtxSlider.umd.js +1551 -0
- package/bundles/mtxSlider.umd.js.map +1 -0
- package/bundles/mtxSplit.umd.js +23 -6
- package/bundles/mtxSplit.umd.js.map +1 -1
- package/bundles/mtxText3d.umd.js +10 -1
- package/bundles/mtxText3d.umd.js.map +1 -1
- package/bundles/mtxTooltip.umd.js +18 -2
- package/bundles/mtxTooltip.umd.js.map +1 -1
- package/button/button-loading.directive.d.ts +9 -2
- package/button/mtxButton.metadata.json +1 -1
- package/datetimepicker/_datetimepicker-theme.import.scss +4 -2
- package/datetimepicker/_datetimepicker-theme.scss +101 -29
- package/datetimepicker/calendar-body.scss +0 -3
- package/datetimepicker/calendar.d.ts +10 -3
- package/datetimepicker/calendar.scss +5 -22
- package/datetimepicker/clock.scss +0 -2
- package/datetimepicker/datetimepicker-content.scss +2 -2
- package/datetimepicker/datetimepicker-input.d.ts +5 -3
- package/datetimepicker/datetimepicker-toggle.d.ts +2 -0
- package/datetimepicker/datetimepicker.d.ts +13 -3
- package/datetimepicker/mtxDatetimepicker.metadata.json +1 -1
- package/esm2015/alert/alert.component.js +25 -11
- package/esm2015/alert/alert.module.js +2 -1
- package/esm2015/button/button-loading.directive.js +31 -8
- package/esm2015/button/button.module.js +2 -1
- package/esm2015/checkbox-group/checkbox-group.component.js +10 -2
- package/esm2015/checkbox-group/checkbox-group.module.js +2 -1
- package/esm2015/color-picker/color-picker.component.js +10 -2
- package/esm2015/color-picker/color-picker.module.js +2 -1
- package/esm2015/column-resize/column-resize-directives/column-resize-flex.js +9 -2
- package/esm2015/column-resize/column-resize-directives/column-resize.js +9 -2
- package/esm2015/column-resize/column-resize-module.js +2 -1
- package/esm2015/column-resize/column-resize-notifier.js +10 -2
- package/esm2015/column-resize/column-resize.js +2 -1
- package/esm2015/column-resize/column-size-store.js +2 -1
- package/esm2015/column-resize/event-dispatcher.js +9 -2
- package/esm2015/column-resize/overlay-handle.js +2 -1
- package/esm2015/column-resize/resizable.js +2 -1
- package/esm2015/column-resize/resize-strategy.js +18 -3
- package/esm2015/core/datetime/datetime.module.js +3 -1
- package/esm2015/core/datetime/native-datetime-adapter.js +9 -2
- package/esm2015/datetimepicker/calendar-body.js +5 -3
- package/esm2015/datetimepicker/calendar.js +31 -12
- package/esm2015/datetimepicker/clock.js +11 -3
- package/esm2015/datetimepicker/datetimepicker-input.js +12 -4
- package/esm2015/datetimepicker/datetimepicker-toggle.js +11 -3
- package/esm2015/datetimepicker/datetimepicker.js +30 -8
- package/esm2015/datetimepicker/datetimepicker.module.js +2 -1
- package/esm2015/datetimepicker/month-view.js +11 -3
- package/esm2015/datetimepicker/multi-year-view.js +11 -3
- package/esm2015/datetimepicker/year-view.js +11 -3
- package/esm2015/dialog/dialog.component.js +9 -2
- package/esm2015/dialog/dialog.js +9 -2
- package/esm2015/dialog/dialog.module.js +2 -1
- package/esm2015/extensions-experimental.module.js +2 -1
- package/esm2015/extensions.module.js +6 -3
- package/esm2015/form-group/form-group.component.js +10 -2
- package/esm2015/form-group/form-group.module.js +2 -1
- package/esm2015/grid/cell-selection.directive.js +62 -0
- package/esm2015/{data-grid → grid}/cell.component.js +10 -2
- package/esm2015/{data-grid → grid}/column-menu.component.js +3 -1
- package/esm2015/grid/column-resize/column-resize-directives/column-resize-flex.js +47 -0
- package/esm2015/grid/column-resize/column-resize-directives/column-resize.js +47 -0
- package/esm2015/grid/column-resize/column-resize-directives/common.js +34 -0
- package/esm2015/grid/column-resize/column-resize-module.js +36 -0
- package/esm2015/grid/column-resize/overlay-handle.js +68 -0
- package/esm2015/grid/column-resize/resizable-directives/common.js +29 -0
- package/esm2015/grid/column-resize/resizable-directives/resizable.js +75 -0
- package/esm2015/grid/column-resize/resize-strategy.js +45 -0
- package/esm2015/grid/expansion-toggle.directive.js +62 -0
- package/esm2015/{data-grid → grid}/grid.component.js +10 -2
- package/esm2015/grid/grid.interface.js +2 -0
- package/esm2015/grid/grid.module.js +69 -0
- package/esm2015/grid/grid.service.js +50 -0
- package/esm2015/grid/mtxGrid.js +5 -0
- package/esm2015/grid/public-api.js +17 -0
- package/esm2015/loader/loader.component.js +26 -5
- package/esm2015/loader/loader.module.js +2 -1
- package/esm2015/pipes/pipes.module.js +2 -1
- package/esm2015/pipes/to-observable.pipe.js +2 -1
- package/esm2015/popover/popover-module.js +2 -1
- package/esm2015/popover/popover-target.js +9 -2
- package/esm2015/popover/popover-trigger.js +10 -2
- package/esm2015/popover/popover.js +10 -2
- package/esm2015/progress/progress.component.js +20 -1
- package/esm2015/progress/progress.module.js +2 -1
- package/esm2015/public-api.js +4 -3
- package/esm2015/select/option.component.js +10 -2
- package/esm2015/select/select.component.js +10 -2
- package/esm2015/select/select.module.js +2 -1
- package/esm2015/select/templates.directive.js +89 -12
- package/esm2015/slider/mtxSlider.js +5 -0
- package/esm2015/slider/public-api.js +3 -0
- package/esm2015/slider/slider-module.js +15 -0
- package/esm2015/slider/slider.js +1115 -0
- package/esm2015/split/interface.js +2 -0
- package/esm2015/split/mtxSplit.js +5 -0
- package/esm2015/split/public-api.js +6 -0
- package/esm2015/split/split-pane.directive.js +156 -0
- package/esm2015/split/split.component.js +620 -0
- package/esm2015/split/split.module.js +15 -0
- package/esm2015/split/utils.js +227 -0
- package/esm2015/text3d/text3d.component.js +10 -2
- package/esm2015/text3d/text3d.module.js +2 -1
- package/esm2015/tooltip/tooltip-module.js +2 -1
- package/esm2015/tooltip/tooltip.js +18 -3
- package/extensions.metadata.json +1 -1
- package/fesm2015/extensions.js +9 -4
- package/fesm2015/extensions.js.map +1 -1
- package/fesm2015/mtxAlert.js +25 -10
- package/fesm2015/mtxAlert.js.map +1 -1
- package/fesm2015/mtxButton.js +31 -7
- package/fesm2015/mtxButton.js.map +1 -1
- package/fesm2015/mtxCheckboxGroup.js +10 -1
- package/fesm2015/mtxCheckboxGroup.js.map +1 -1
- package/fesm2015/mtxColorPicker.js +10 -1
- package/fesm2015/mtxColorPicker.js.map +1 -1
- package/fesm2015/mtxColumnResize.js +55 -6
- package/fesm2015/mtxColumnResize.js.map +1 -1
- package/fesm2015/mtxCore.js +10 -1
- package/fesm2015/mtxCore.js.map +1 -1
- package/fesm2015/mtxDatetimepicker.js +120 -29
- package/fesm2015/mtxDatetimepicker.js.map +1 -1
- package/fesm2015/mtxDialog.js +17 -2
- package/fesm2015/mtxDialog.js.map +1 -1
- package/fesm2015/mtxFormGroup.js +10 -1
- package/fesm2015/mtxFormGroup.js.map +1 -1
- package/fesm2015/mtxGrid.js +90 -10
- package/fesm2015/mtxGrid.js.map +1 -1
- package/fesm2015/mtxLoader.js +26 -4
- package/fesm2015/mtxLoader.js.map +1 -1
- package/fesm2015/mtxPipes.js +2 -0
- package/fesm2015/mtxPipes.js.map +1 -1
- package/fesm2015/mtxPopover.js +27 -3
- package/fesm2015/mtxPopover.js.map +1 -1
- package/fesm2015/mtxProgress.js +20 -0
- package/fesm2015/mtxProgress.js.map +1 -1
- package/fesm2015/mtxSelect.js +107 -13
- package/fesm2015/mtxSelect.js.map +1 -1
- package/fesm2015/mtxSlider.js +1134 -0
- package/fesm2015/mtxSlider.js.map +1 -0
- package/fesm2015/mtxSplit.js +21 -4
- package/fesm2015/mtxSplit.js.map +1 -1
- package/fesm2015/mtxText3d.js +10 -1
- package/fesm2015/mtxText3d.js.map +1 -1
- package/fesm2015/mtxTooltip.js +18 -2
- package/fesm2015/mtxTooltip.js.map +1 -1
- package/form-group/_form-group-theme.import.scss +2 -2
- package/form-group/_form-group-theme.scss +46 -22
- package/form-group/form-group.component.d.ts +2 -0
- package/grid/_grid-theme.import.scss +2 -0
- package/grid/_grid-theme.scss +114 -0
- package/{data-grid → grid}/cell-selection.directive.d.ts +0 -0
- package/{data-grid → grid}/cell.component.d.ts +0 -0
- package/{data-grid → grid}/cell.component.scss +0 -0
- package/{data-grid → grid}/column-menu.component.d.ts +0 -0
- package/{data-grid → grid}/column-menu.component.scss +0 -0
- package/{data-grid → grid}/column-resize/_column-resize.scss +19 -13
- package/{data-grid → grid}/column-resize/column-resize-directives/column-resize-flex.d.ts +0 -0
- package/{data-grid → grid}/column-resize/column-resize-directives/column-resize.d.ts +0 -0
- package/{data-grid → grid}/column-resize/column-resize-directives/common.d.ts +0 -0
- package/{data-grid → grid}/column-resize/column-resize-module.d.ts +0 -0
- package/{data-grid → grid}/column-resize/overlay-handle.d.ts +0 -0
- package/{data-grid → grid}/column-resize/resizable-directives/common.d.ts +0 -0
- package/{data-grid → grid}/column-resize/resizable-directives/resizable.d.ts +0 -0
- package/{data-grid → grid}/column-resize/resize-strategy.d.ts +0 -0
- package/{data-grid → grid}/expansion-toggle.directive.d.ts +0 -0
- package/{data-grid → grid}/grid.component.d.ts +0 -0
- package/{data-grid → grid}/grid.component.scss +0 -0
- package/{data-grid → grid}/grid.interface.d.ts +0 -0
- package/{data-grid → grid}/grid.module.d.ts +0 -0
- package/{data-grid → grid}/grid.service.d.ts +0 -0
- package/{data-grid → grid}/mtxGrid.d.ts +0 -0
- package/{data-grid → grid}/mtxGrid.metadata.json +1 -1
- package/{data-grid → grid}/package.json +2 -2
- package/{data-grid → grid}/public-api.d.ts +0 -0
- package/loader/_loader-theme.import.scss +2 -2
- package/loader/_loader-theme.scss +30 -6
- package/loader/loader.component.d.ts +9 -2
- package/loader/mtxLoader.metadata.json +1 -1
- package/package.json +3 -3
- package/popover/_popover-theme.import.scss +2 -2
- package/popover/_popover-theme.scss +32 -8
- package/progress/_progress-theme.import.scss +2 -2
- package/progress/_progress-theme.scss +33 -8
- package/progress/mtxProgress.metadata.json +1 -1
- package/progress/progress.component.d.ts +9 -2
- package/public-api.d.ts +3 -2
- package/select/_select-theme.import.scss +2 -2
- package/select/_select-theme.scss +55 -31
- package/slider/_slider-theme.import.scss +2 -0
- package/slider/_slider-theme.scss +233 -0
- package/{split-pane/mtxSplit.d.ts → slider/mtxSlider.d.ts} +0 -0
- package/slider/mtxSlider.metadata.json +1 -0
- package/slider/package.json +11 -0
- package/slider/public-api.d.ts +2 -0
- package/slider/slider-module.d.ts +2 -0
- package/slider/slider.d.ts +274 -0
- package/slider/slider.scss +513 -0
- package/split/_split-theme.import.scss +2 -0
- package/split/_split-theme.scss +41 -0
- package/{split-pane → split}/interface.d.ts +0 -0
- package/split/mtxSplit.d.ts +4 -0
- package/split/mtxSplit.metadata.json +1 -0
- package/{split-pane → split}/package.json +2 -2
- package/{split-pane → split}/public-api.d.ts +0 -0
- package/{split-pane → split}/split-pane.directive.d.ts +0 -0
- package/{split-pane → split}/split.component.d.ts +0 -0
- package/{split-pane → split}/split.component.scss +3 -2
- package/{split-pane → split}/split.module.d.ts +0 -0
- package/{split-pane → split}/utils.d.ts +0 -0
- package/text3d/_text3d-theme.import.scss +2 -2
- package/text3d/_text3d-theme.scss +32 -7
- package/tooltip/_tooltip-theme.import.scss +2 -2
- package/tooltip/_tooltip-theme.scss +32 -15
- package/data-grid/_grid-theme.import.scss +0 -2
- package/data-grid/_grid-theme.scss +0 -90
- package/esm2015/data-grid/cell-selection.directive.js +0 -54
- package/esm2015/data-grid/column-resize/column-resize-directives/column-resize-flex.js +0 -40
- package/esm2015/data-grid/column-resize/column-resize-directives/column-resize.js +0 -40
- package/esm2015/data-grid/column-resize/column-resize-directives/common.js +0 -34
- package/esm2015/data-grid/column-resize/column-resize-module.js +0 -34
- package/esm2015/data-grid/column-resize/overlay-handle.js +0 -61
- package/esm2015/data-grid/column-resize/resizable-directives/common.js +0 -29
- package/esm2015/data-grid/column-resize/resizable-directives/resizable.js +0 -67
- package/esm2015/data-grid/column-resize/resize-strategy.js +0 -38
- package/esm2015/data-grid/expansion-toggle.directive.js +0 -54
- package/esm2015/data-grid/grid.interface.js +0 -2
- package/esm2015/data-grid/grid.module.js +0 -68
- package/esm2015/data-grid/grid.service.js +0 -43
- package/esm2015/data-grid/mtxGrid.js +0 -5
- package/esm2015/data-grid/public-api.js +0 -17
- package/esm2015/split-pane/interface.js +0 -2
- package/esm2015/split-pane/mtxSplit.js +0 -5
- package/esm2015/split-pane/public-api.js +0 -6
- package/esm2015/split-pane/split-pane.directive.js +0 -148
- package/esm2015/split-pane/split.component.js +0 -612
- package/esm2015/split-pane/split.module.js +0 -14
- package/esm2015/split-pane/utils.js +0 -227
- package/split-pane/_split-theme.import.scss +0 -2
- package/split-pane/_split-theme.scss +0 -17
- package/split-pane/mtxSplit.metadata.json +0 -1
package/fesm2015/mtxSplit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split-pane/utils.ts","../../../projects/extensions/split-pane/split.component.ts","../../../projects/extensions/split-pane/split-pane.directive.ts","../../../projects/extensions/split-pane/split.module.ts","../../../projects/extensions/split-pane/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\r\n\r\nimport {\r\n MtxSplitArea,\r\n MtxSplitPoint,\r\n MtxSplitAreaSnapshot,\r\n MtxSplitSideAbsorptionCapacity,\r\n MtxSplitAreaAbsorptionCapacity,\r\n} from './interface';\r\n\r\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\r\n // TouchEvent\r\n if (\r\n (event as TouchEvent).changedTouches !== undefined &&\r\n (event as TouchEvent).changedTouches.length > 0\r\n ) {\r\n return {\r\n x: (event as TouchEvent).changedTouches[0].clientX,\r\n y: (event as TouchEvent).changedTouches[0].clientY,\r\n };\r\n }\r\n // MouseEvent\r\n // tslint:disable-next-line: one-line\r\n else if (\r\n (event as MouseEvent).clientX !== undefined &&\r\n (event as MouseEvent).clientY !== undefined\r\n ) {\r\n return {\r\n x: (event as MouseEvent).clientX,\r\n y: (event as MouseEvent).clientY,\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function getElementPixelSize(\r\n elRef: ElementRef,\r\n direction: 'horizontal' | 'vertical'\r\n): number {\r\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\r\n\r\n return direction === 'horizontal' ? rect.width : rect.height;\r\n}\r\n\r\nexport function getInputBoolean(v: any): boolean {\r\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\r\n}\r\n\r\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\r\n if (v === null || v === undefined) {\r\n return defaultValue;\r\n }\r\n\r\n v = Number(v);\r\n return !isNaN(v) && v >= 0 ? v : defaultValue;\r\n}\r\n\r\nexport function isUserSizesValid(\r\n unit: 'percent' | 'pixel',\r\n sizes: Array<number>\r\n): boolean | number | void {\r\n // All sizes have to be not null and total should be 100\r\n if (unit === 'percent') {\r\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\r\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\r\n }\r\n\r\n // A size at null is mandatory but only one.\r\n if (unit === 'pixel') {\r\n return sizes.filter(s => s === null).length === 1;\r\n }\r\n}\r\n\r\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\r\n if (a.size === null) {\r\n return null;\r\n }\r\n\r\n if (a.component.lockSize === true) {\r\n return a.size;\r\n }\r\n\r\n if (a.component.minSize === null) {\r\n return null;\r\n }\r\n\r\n if (a.component.minSize > a.size) {\r\n return a.size;\r\n }\r\n\r\n return a.component.minSize;\r\n}\r\n\r\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\r\n if (a.size === null) {\r\n return null;\r\n }\r\n\r\n if (a.component.lockSize === true) {\r\n return a.size;\r\n }\r\n\r\n if (a.component.maxSize === null) {\r\n return null;\r\n }\r\n\r\n if (a.component.maxSize < a.size) {\r\n return a.size;\r\n }\r\n\r\n return a.component.maxSize;\r\n}\r\n\r\nexport function getGutterSideAbsorptionCapacity(\r\n unit: 'percent' | 'pixel',\r\n sideAreas: Array<MtxSplitAreaSnapshot>,\r\n pixels: number,\r\n allAreasSizePixel: number\r\n): MtxSplitSideAbsorptionCapacity {\r\n return sideAreas.reduce(\r\n (acc: any, area) => {\r\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\r\n acc.list.push(res);\r\n acc.remain = res && res.pixelRemain;\r\n return acc;\r\n },\r\n { remain: pixels, list: [] }\r\n );\r\n}\r\n\r\nfunction getAreaAbsorptionCapacity(\r\n unit: 'percent' | 'pixel',\r\n areaSnapshot: MtxSplitAreaSnapshot,\r\n pixels: number,\r\n allAreasSizePixel: number\r\n): MtxSplitAreaAbsorptionCapacity | void {\r\n // No pain no gain\r\n if (pixels === 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: 0,\r\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\r\n pixelRemain: 0,\r\n };\r\n }\r\n\r\n // Area start at zero and need to be reduced, not possible\r\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: 0,\r\n percentAfterAbsorption: 0,\r\n pixelRemain: pixels,\r\n };\r\n }\r\n\r\n if (unit === 'percent') {\r\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\r\n }\r\n\r\n if (unit === 'pixel') {\r\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\r\n }\r\n}\r\n\r\nfunction getAreaAbsorptionCapacityPercent(\r\n areaSnapshot: MtxSplitAreaSnapshot,\r\n pixels: number,\r\n allAreasSizePixel: number\r\n): MtxSplitAreaAbsorptionCapacity | void {\r\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\r\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\r\n\r\n // ENLARGE AREA\r\n\r\n if (pixels > 0) {\r\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\r\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\r\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\r\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: maxSizePixel,\r\n percentAfterAbsorption: areaSnapshot.area.maxSize,\r\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\r\n pixelRemain: 0,\r\n };\r\n }\r\n\r\n // REDUCE AREA\r\n // tslint:disable-next-line: one-line\r\n else if (pixels < 0) {\r\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\r\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\r\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\r\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: minSizePixel,\r\n percentAfterAbsorption: areaSnapshot.area.minSize,\r\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\r\n };\r\n }\r\n // If reduced under zero > return remaining pixels\r\n // tslint:disable-next-line: one-line\r\n else if (tempPercentSize < 0) {\r\n // Use 0 as newPercentSize and return calculate pixels remaining\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: 0,\r\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: tempPercentSize,\r\n pixelRemain: 0,\r\n };\r\n }\r\n}\r\n\r\nfunction getAreaAbsorptionCapacityPixel(\r\n areaSnapshot: MtxSplitAreaSnapshot,\r\n pixels: number,\r\n containerSizePixel: number\r\n): MtxSplitAreaAbsorptionCapacity | void {\r\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\r\n\r\n // ENLARGE AREA\r\n\r\n if (pixels > 0) {\r\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\r\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: 0,\r\n };\r\n }\r\n\r\n // REDUCE AREA\r\n // tslint:disable-next-line: one-line\r\n else if (pixels < 0) {\r\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\r\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\r\n };\r\n }\r\n // If reduced under zero > return remaining pixels\r\n // tslint:disable-next-line: one-line\r\n else if (tempPixelSize < 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: 0,\r\n };\r\n }\r\n}\r\n\r\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\r\n if (unit === 'percent') {\r\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\r\n } else if (unit === 'pixel') {\r\n // Update size except for the wildcard size area\r\n if (item.areaSnapshot.area.size !== null) {\r\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Renderer2,\r\n AfterViewInit,\r\n OnDestroy,\r\n ElementRef,\r\n NgZone,\r\n ViewChildren,\r\n QueryList,\r\n EventEmitter,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { Observable, Subscriber, Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport {\r\n MtxSplitArea,\r\n MtxSplitPoint,\r\n MtxSplitSnapshot,\r\n MtxSplitAreaSnapshot,\r\n MtxSplitOutputData,\r\n MtxSplitOutputAreaSizes,\r\n} from './interface';\r\nimport { MtxSplitPaneDirective } from './split-pane.directive';\r\nimport {\r\n getInputPositiveNumber,\r\n getInputBoolean,\r\n isUserSizesValid,\r\n getAreaMinSize,\r\n getAreaMaxSize,\r\n getPointFromEvent,\r\n getElementPixelSize,\r\n getGutterSideAbsorptionCapacity,\r\n updateAreaSize,\r\n} from './utils';\r\n\r\n/**\r\n * mtx-split\r\n *\r\n *\r\n * PERCENT MODE ([unit]=\"'percent'\")\r\n * ___________________________________________________________________________________________\r\n * | A [g1] B [g2] C [g3] D [g4] E |\r\n * |-------------------------------------------------------------------------------------------|\r\n * | 20 30 20 15 15 | <-- [size]=\"x\"\r\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\r\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\r\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\r\n * |___________________________________________________________________________________________|\r\n * 800px <-- el.getBoundingClientRect().width\r\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\r\n *\r\n *\r\n * PIXEL MODE ([unit]=\"'pixel'\")\r\n * ___________________________________________________________________________________________\r\n * | A [g1] B [g2] C [g3] D [g4] E |\r\n * |-------------------------------------------------------------------------------------------|\r\n * | 100 250 * 150 100 | <-- [size]=\"y\"\r\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\r\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\r\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\r\n * |___________________________________________________________________________________________|\r\n * 800px <-- el.getBoundingClientRect().width\r\n *\r\n */\r\n\r\n@Component({\r\n selector: 'mtx-split',\r\n exportAs: 'mtxSplit',\r\n host: {\r\n class: 'mtx-split',\r\n },\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [`./split.component.scss`],\r\n templateUrl: './split.component.html',\r\n})\r\nexport class MtxSplitComponent implements AfterViewInit, OnDestroy {\r\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\r\n\r\n @Input() set direction(v: 'horizontal' | 'vertical') {\r\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\r\n\r\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\r\n this.renderer.removeClass(\r\n this.elRef.nativeElement,\r\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\r\n );\r\n\r\n this.build(false, false);\r\n }\r\n\r\n get direction(): 'horizontal' | 'vertical' {\r\n return this._direction;\r\n }\r\n\r\n ////\r\n\r\n private _unit: 'percent' | 'pixel' = 'percent';\r\n\r\n @Input() set unit(v: 'percent' | 'pixel') {\r\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\r\n\r\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\r\n this.renderer.removeClass(\r\n this.elRef.nativeElement,\r\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\r\n );\r\n\r\n this.build(false, true);\r\n }\r\n\r\n get unit(): 'percent' | 'pixel' {\r\n return this._unit;\r\n }\r\n\r\n ////\r\n\r\n private _gutterSize = 1;\r\n\r\n @Input() set gutterSize(v: number) {\r\n this._gutterSize = getInputPositiveNumber(v, 11);\r\n\r\n this.build(false, false);\r\n }\r\n\r\n get gutterSize(): number {\r\n return this._gutterSize;\r\n }\r\n\r\n ////\r\n\r\n private _gutterStep = 1;\r\n\r\n @Input() set gutterStep(v: number) {\r\n this._gutterStep = getInputPositiveNumber(v, 1);\r\n }\r\n\r\n get gutterStep(): number {\r\n return this._gutterStep;\r\n }\r\n\r\n ////\r\n\r\n private _restrictMove = false;\r\n\r\n @Input() set restrictMove(v: boolean) {\r\n this._restrictMove = getInputBoolean(v);\r\n }\r\n\r\n get restrictMove(): boolean {\r\n return this._restrictMove;\r\n }\r\n\r\n ////\r\n\r\n private _useTransition = false;\r\n\r\n @Input() set useTransition(v: boolean) {\r\n this._useTransition = getInputBoolean(v);\r\n\r\n if (this._useTransition) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\r\n } else {\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\r\n }\r\n }\r\n\r\n get useTransition(): boolean {\r\n return this._useTransition;\r\n }\r\n\r\n ////\r\n\r\n private _disabled = false;\r\n\r\n @Input() set disabled(v: boolean) {\r\n this._disabled = getInputBoolean(v);\r\n\r\n if (this._disabled) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\r\n } else {\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\r\n }\r\n }\r\n\r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n ////\r\n\r\n private _dir: 'ltr' | 'rtl' = 'ltr';\r\n\r\n @Input() set dir(v: 'ltr' | 'rtl') {\r\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\r\n\r\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\r\n }\r\n\r\n get dir(): 'ltr' | 'rtl' {\r\n return this._dir;\r\n }\r\n\r\n ////\r\n\r\n private _gutterDblClickDuration = 0;\r\n\r\n @Input() set gutterDblClickDuration(v: number) {\r\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\r\n }\r\n\r\n get gutterDblClickDuration(): number {\r\n return this._gutterDblClickDuration;\r\n }\r\n\r\n ////\r\n\r\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\r\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\r\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\r\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\r\n\r\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\r\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\r\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\r\n debounceTime<any>(20)\r\n );\r\n }\r\n\r\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\r\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\r\n\r\n ////\r\n\r\n private isDragging = false;\r\n private dragListeners: Array<() => void> = [];\r\n private snapshot: MtxSplitSnapshot | null = null;\r\n private startPoint: MtxSplitPoint | null = null;\r\n private endPoint: MtxSplitPoint | null = null;\r\n\r\n public readonly displayedAreas: Array<MtxSplitArea> = [];\r\n private readonly hidedAreas: Array<MtxSplitArea> = [];\r\n\r\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private elRef: ElementRef,\r\n private cdRef: ChangeDetectorRef,\r\n private renderer: Renderer2\r\n ) {\r\n // To force adding default class, could be override by user @Input() or not\r\n this.direction = this._direction;\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this.ngZone.runOutsideAngular(() => {\r\n // To avoid transition at first rendering\r\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\r\n });\r\n }\r\n\r\n private getNbGutters(): number {\r\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\r\n }\r\n\r\n public addArea(component: MtxSplitPaneDirective): void {\r\n const newArea: MtxSplitArea = {\r\n component,\r\n order: 0,\r\n size: 0,\r\n minSize: null,\r\n maxSize: null,\r\n };\r\n\r\n if (component.visible === true) {\r\n this.displayedAreas.push(newArea);\r\n\r\n this.build(true, true);\r\n } else {\r\n this.hidedAreas.push(newArea);\r\n }\r\n }\r\n\r\n public removeArea(component: MtxSplitPaneDirective): void {\r\n if (this.displayedAreas.some(a => a.component === component)) {\r\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\r\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\r\n\r\n this.build(true, true);\r\n } else if (this.hidedAreas.some(a => a.component === component)) {\r\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\r\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\r\n }\r\n }\r\n\r\n public updateArea(\r\n component: MtxSplitPaneDirective,\r\n resetOrders: boolean,\r\n resetSizes: boolean\r\n ): void {\r\n if (component.visible === true) {\r\n this.build(resetOrders, resetSizes);\r\n }\r\n }\r\n\r\n public showArea(component: MtxSplitPaneDirective): void {\r\n const area = this.hidedAreas.find(a => a.component === component);\r\n if (area === undefined) {\r\n return;\r\n }\r\n\r\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\r\n this.displayedAreas.push(...areas);\r\n\r\n this.build(true, true);\r\n }\r\n\r\n public hideArea(comp: MtxSplitPaneDirective): void {\r\n const area = this.displayedAreas.find(a => a.component === comp);\r\n if (area === undefined) {\r\n return;\r\n }\r\n\r\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\r\n areas.forEach(_area => {\r\n _area.order = 0;\r\n _area.size = 0;\r\n });\r\n this.hidedAreas.push(...areas);\r\n\r\n this.build(true, true);\r\n }\r\n\r\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\r\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\r\n }\r\n\r\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\r\n if (sizes.length !== this.displayedAreas.length) {\r\n return false;\r\n }\r\n\r\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\r\n const isValid = isUserSizesValid(this.unit, formatedSizes);\r\n\r\n if (isValid === false) {\r\n return false;\r\n }\r\n\r\n // @ts-ignore\r\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\r\n\r\n this.build(false, true);\r\n return true;\r\n }\r\n\r\n private build(resetOrders: boolean, resetSizes: boolean): void {\r\n this.stopDragging();\r\n\r\n // ¤ AREAS ORDER\r\n\r\n if (resetOrders === true) {\r\n // If user provided 'order' for each area, use it to sort them.\r\n if (this.displayedAreas.every(a => a.component.order !== null)) {\r\n this.displayedAreas.sort(\r\n (a, b) => ((a.component.order as number) - (b.component.order as number)) as number\r\n );\r\n }\r\n\r\n // Then set real order with multiples of 2, numbers between will be used by gutters.\r\n this.displayedAreas.forEach((area, i) => {\r\n area.order = i * 2;\r\n area.component.setStyleOrder(area.order);\r\n });\r\n }\r\n\r\n // ¤ AREAS SIZE\r\n\r\n if (resetSizes === true) {\r\n const useUserSizes = isUserSizesValid(\r\n this.unit,\r\n this.displayedAreas.map(a => a.component.size) as number[]\r\n );\r\n\r\n switch (this.unit) {\r\n case 'percent': {\r\n const defaultSize = 100 / this.displayedAreas.length;\r\n\r\n this.displayedAreas.forEach(area => {\r\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n });\r\n break;\r\n }\r\n case 'pixel': {\r\n if (useUserSizes) {\r\n this.displayedAreas.forEach(area => {\r\n area.size = area.component.size;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n });\r\n } else {\r\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\r\n\r\n // No wildcard area > Need to select one arbitrarily > first\r\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\r\n this.displayedAreas.forEach((area, i) => {\r\n area.size = i === 0 ? null : area.component.size;\r\n area.minSize = i === 0 ? null : getAreaMinSize(area);\r\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\r\n });\r\n }\r\n // More than one wildcard area > Need to keep only one arbitrarly > first\r\n // tslint:disable-next-line: one-line\r\n else if (wildcardSizeAreas.length > 1) {\r\n let alreadyGotOne = false;\r\n this.displayedAreas.forEach(area => {\r\n if (area.component.size === null) {\r\n if (alreadyGotOne === false) {\r\n area.size = null;\r\n area.minSize = null;\r\n area.maxSize = null;\r\n alreadyGotOne = true;\r\n } else {\r\n area.size = 100;\r\n area.minSize = null;\r\n area.maxSize = null;\r\n }\r\n } else {\r\n area.size = area.component.size;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.refreshStyleSizes();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n private refreshStyleSizes(): void {\r\n ///////////////////////////////////////////\r\n // PERCENT MODE\r\n if (this.unit === 'percent') {\r\n // Only one area > flex-basis 100%\r\n if (this.displayedAreas.length === 1) {\r\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\r\n }\r\n // Multiple areas > use each percent basis\r\n // tslint:disable-next-line: one-line\r\n else {\r\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\r\n\r\n this.displayedAreas.forEach(area => {\r\n area.component.setStyleFlex(\r\n 0,\r\n 0,\r\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\r\n area.minSize !== null && area.minSize === area.size ? true : false,\r\n area.maxSize !== null && area.maxSize === area.size ? true : false\r\n );\r\n });\r\n }\r\n }\r\n ///////////////////////////////////////////\r\n // PIXEL MODE\r\n // tslint:disable-next-line: one-line\r\n else if (this.unit === 'pixel') {\r\n this.displayedAreas.forEach(area => {\r\n // Area with wildcard size\r\n if (area.size === null) {\r\n if (this.displayedAreas.length === 1) {\r\n area.component.setStyleFlex(1, 1, `100%`, false, false);\r\n } else {\r\n area.component.setStyleFlex(1, 1, `auto`, false, false);\r\n }\r\n }\r\n // Area with pixel size\r\n // tslint:disable-next-line: one-line\r\n else {\r\n // Only one area > flex-basis 100%\r\n if (this.displayedAreas.length === 1) {\r\n area.component.setStyleFlex(0, 0, `100%`, false, false);\r\n }\r\n // Multiple areas > use each pixel basis\r\n // tslint:disable-next-line: one-line\r\n else {\r\n area.component.setStyleFlex(\r\n 0,\r\n 0,\r\n `${area.size}px`,\r\n area.minSize !== null && area.minSize === area.size ? true : false,\r\n area.maxSize !== null && area.maxSize === area.size ? true : false\r\n );\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n _clickTimeout: number | null = null;\r\n\r\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\r\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\r\n\r\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\r\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\r\n // If timeout in progress and new click > clearTimeout & dblClickEvent\r\n if (this._clickTimeout !== null) {\r\n window.clearTimeout(this._clickTimeout);\r\n this._clickTimeout = null;\r\n this.notify('dblclick', gutterNum);\r\n this.stopDragging();\r\n }\r\n // Else start timeout to call clickEvent at end\r\n // tslint:disable-next-line: one-line\r\n else {\r\n this._clickTimeout = window.setTimeout(() => {\r\n this._clickTimeout = null;\r\n this.notify('click', gutterNum);\r\n this.stopDragging();\r\n }, this.gutterDblClickDuration);\r\n }\r\n }\r\n }\r\n\r\n public startDragging(\r\n event: MouseEvent | TouchEvent,\r\n gutterOrder: number,\r\n gutterNum: number\r\n ): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.startPoint = getPointFromEvent(event);\r\n if (this.startPoint === null || this.disabled === true) {\r\n return;\r\n }\r\n\r\n this.snapshot = {\r\n gutterNum,\r\n lastSteppedOffset: 0,\r\n allAreasSizePixel:\r\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\r\n allInvolvedAreasSizePercent: 100,\r\n areasBeforeGutter: [],\r\n areasAfterGutter: [],\r\n };\r\n\r\n this.displayedAreas.forEach(area => {\r\n const areaSnapshot: MtxSplitAreaSnapshot = {\r\n area,\r\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\r\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\r\n };\r\n\r\n if (area.order < gutterOrder) {\r\n if (this.restrictMove === true) {\r\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\r\n } else {\r\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\r\n }\r\n } else if (area.order > gutterOrder) {\r\n if (this.restrictMove === true) {\r\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\r\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\r\n }\r\n } else {\r\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\r\n }\r\n }\r\n });\r\n\r\n this.snapshot.allInvolvedAreasSizePercent = [\r\n ...this.snapshot.areasBeforeGutter,\r\n ...this.snapshot.areasAfterGutter,\r\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\r\n\r\n if (\r\n this.snapshot.areasBeforeGutter.length === 0 ||\r\n this.snapshot.areasAfterGutter.length === 0\r\n ) {\r\n return;\r\n }\r\n\r\n this.dragListeners.push(\r\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\r\n );\r\n this.dragListeners.push(\r\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\r\n );\r\n this.dragListeners.push(\r\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\r\n );\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.dragListeners.push(\r\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\r\n );\r\n this.dragListeners.push(\r\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\r\n );\r\n });\r\n\r\n this.displayedAreas.forEach(area => area.component.lockEvents());\r\n\r\n this.isDragging = true;\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\r\n this.renderer.addClass(\r\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\r\n 'mtx-dragged'\r\n );\r\n\r\n this.notify('start', this.snapshot.gutterNum);\r\n }\r\n\r\n private dragEvent(event: MouseEvent | TouchEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (this._clickTimeout !== null) {\r\n window.clearTimeout(this._clickTimeout);\r\n this._clickTimeout = null;\r\n }\r\n\r\n if (this.isDragging === false) {\r\n return;\r\n }\r\n\r\n this.endPoint = getPointFromEvent(event);\r\n if (this.endPoint === null) {\r\n return;\r\n }\r\n\r\n // Calculate steppedOffset\r\n\r\n let offset =\r\n this.direction === 'horizontal'\r\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\r\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\r\n if (this.dir === 'rtl') {\r\n offset = -offset;\r\n }\r\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\r\n\r\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\r\n return;\r\n }\r\n\r\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\r\n\r\n // Need to know if each gutter side areas could reacts to steppedOffset\r\n\r\n let areasBefore = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\r\n -steppedOffset,\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n let areasAfter = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\r\n steppedOffset,\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n\r\n // Each gutter side areas can't absorb all offset\r\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\r\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\r\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\r\n areasAfter = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\r\n steppedOffset + areasBefore.remain,\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n } else {\r\n areasBefore = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\r\n -(steppedOffset - areasAfter.remain),\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n }\r\n }\r\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\r\n // tslint:disable-next-line: one-line\r\n else if (areasBefore.remain !== 0) {\r\n areasAfter = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\r\n steppedOffset + areasBefore.remain,\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n }\r\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\r\n // tslint:disable-next-line: one-line\r\n else if (areasAfter.remain !== 0) {\r\n areasBefore = getGutterSideAbsorptionCapacity(\r\n this.unit,\r\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\r\n -(steppedOffset - areasAfter.remain),\r\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\r\n );\r\n }\r\n\r\n if (this.unit === 'percent') {\r\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\r\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\r\n const all = [...areasBefore.list, ...areasAfter.list];\r\n const areaToReset = all.find(\r\n a =>\r\n a.percentAfterAbsorption !== 0 &&\r\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\r\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\r\n );\r\n\r\n if (areaToReset) {\r\n areaToReset.percentAfterAbsorption =\r\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\r\n all\r\n .filter(a => a !== areaToReset)\r\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\r\n }\r\n }\r\n\r\n // Now we know areas could absorb steppedOffset, time to really update sizes\r\n\r\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\r\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\r\n\r\n this.refreshStyleSizes();\r\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\r\n }\r\n\r\n private stopDragging(event?: Event): void {\r\n if (event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n if (this.isDragging === false) {\r\n return;\r\n }\r\n\r\n this.displayedAreas.forEach(area => area.component.unlockEvents());\r\n\r\n while (this.dragListeners.length > 0) {\r\n const fct = this.dragListeners.pop();\r\n if (fct) {\r\n fct();\r\n }\r\n }\r\n\r\n // Warning: Have to be before \"notify('end')\"\r\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\r\n this.isDragging = false;\r\n\r\n // If moved from starting point, notify end\r\n if (\r\n this.endPoint &&\r\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\r\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\r\n ) {\r\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\r\n }\r\n\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\r\n this.renderer.removeClass(\r\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\r\n 'mtx-dragged'\r\n );\r\n this.snapshot = null;\r\n\r\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\r\n this.ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n });\r\n });\r\n }\r\n\r\n public notify(\r\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\r\n gutterNum: number\r\n ): void {\r\n const sizes = this.getVisibleAreaSizes();\r\n\r\n if (type === 'start') {\r\n this.dragStart.emit({ gutterNum, sizes });\r\n } else if (type === 'end') {\r\n this.dragEnd.emit({ gutterNum, sizes });\r\n } else if (type === 'click') {\r\n this.gutterClick.emit({ gutterNum, sizes });\r\n } else if (type === 'dblclick') {\r\n this.gutterDblClick.emit({ gutterNum, sizes });\r\n } else if (type === 'transitionEnd') {\r\n if (this.transitionEndSubscriber) {\r\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\r\n }\r\n } else if (type === 'progress') {\r\n // Stay outside zone to allow users do what they want about change detection mechanism.\r\n this.dragProgressSubject.next({ gutterNum, sizes });\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.stopDragging();\r\n }\r\n}\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\r\n\r\nimport { MtxSplitComponent } from './split.component';\r\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\r\n\r\n@Directive({\r\n selector: 'mtx-split-pane, [mtx-split-pane]',\r\n exportAs: 'mtxSplitPane',\r\n})\r\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\r\n private _order: number | null = null;\r\n\r\n @Input() set order(v: number | null) {\r\n this._order = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, true, false);\r\n }\r\n\r\n get order(): number | null {\r\n return this._order;\r\n }\r\n\r\n ////\r\n\r\n private _size: number | null = null;\r\n\r\n @Input() set size(v: number | null) {\r\n this._size = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n\r\n get size(): number | null {\r\n return this._size;\r\n }\r\n\r\n ////\r\n\r\n private _minSize: number | null = null;\r\n\r\n @Input() set minSize(v: number | null) {\r\n this._minSize = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n\r\n get minSize(): number | null {\r\n return this._minSize;\r\n }\r\n\r\n ////\r\n\r\n private _maxSize: number | null = null;\r\n\r\n @Input() set maxSize(v: number | null) {\r\n this._maxSize = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n\r\n get maxSize(): number | null {\r\n return this._maxSize;\r\n }\r\n\r\n ////\r\n\r\n private _lockSize = false;\r\n\r\n @Input() set lockSize(v: boolean) {\r\n this._lockSize = getInputBoolean(v);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n\r\n get lockSize(): boolean {\r\n return this._lockSize;\r\n }\r\n\r\n ////\r\n\r\n private _visible = true;\r\n\r\n @Input() set visible(v: boolean) {\r\n this._visible = getInputBoolean(v);\r\n\r\n if (this._visible) {\r\n this.split.showArea(this);\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\r\n } else {\r\n this.split.hideArea(this);\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\r\n }\r\n }\r\n\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n ////\r\n\r\n private transitionListener!: () => void;\r\n private readonly lockListeners: Array<() => void> = [];\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n public elRef: ElementRef,\r\n private renderer: Renderer2,\r\n private split: MtxSplitComponent\r\n ) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.split.addArea(this);\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.transitionListener = this.renderer.listen(\r\n this.elRef.nativeElement,\r\n 'transitionend',\r\n (event: TransitionEvent) => {\r\n // Limit only flex-basis transition to trigger the event\r\n if (event.propertyName === 'flex-basis') {\r\n this.split.notify('transitionEnd', -1);\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n public setStyleOrder(value: number): void {\r\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\r\n }\r\n\r\n public setStyleFlex(\r\n grow: number,\r\n shrink: number,\r\n basis: string,\r\n isMin: boolean,\r\n isMax: boolean\r\n ): void {\r\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\r\n\r\n if (isMin === true) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\r\n } else {\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\r\n }\r\n\r\n if (isMax === true) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\r\n } else {\r\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\r\n }\r\n }\r\n\r\n public lockEvents(): void {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.lockListeners.push(\r\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\r\n );\r\n this.lockListeners.push(\r\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\r\n );\r\n });\r\n }\r\n\r\n public unlockEvents(): void {\r\n while (this.lockListeners.length > 0) {\r\n const fct = this.lockListeners.pop();\r\n if (fct) {\r\n fct();\r\n }\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unlockEvents();\r\n\r\n if (this.transitionListener) {\r\n this.transitionListener();\r\n }\r\n\r\n this.split.removeArea(this);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MtxSplitComponent } from './split.component';\r\nimport { MtxSplitPaneDirective } from './split-pane.directive';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\r\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\r\n})\r\nexport class MtxSplitModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split-pane.directive.ts","../../../projects/extensions/split/split.module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interface';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n // tslint:disable-next-line: one-line\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputBoolean(v: any): boolean {\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nfunction getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nfunction getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n // tslint:disable-next-line: one-line\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n // tslint:disable-next-line: one-line\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nfunction getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n // tslint:disable-next-line: one-line\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n // tslint:disable-next-line: one-line\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Renderer2,\n AfterViewInit,\n OnDestroy,\n ElementRef,\n NgZone,\n ViewChildren,\n QueryList,\n EventEmitter,\n ViewEncapsulation,\n} from '@angular/core';\nimport { Observable, Subscriber, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitSnapshot,\n MtxSplitAreaSnapshot,\n MtxSplitOutputData,\n MtxSplitOutputAreaSizes,\n} from './interface';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\nimport {\n getInputPositiveNumber,\n getInputBoolean,\n isUserSizesValid,\n getAreaMinSize,\n getAreaMaxSize,\n getPointFromEvent,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n updateAreaSize,\n} from './utils';\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: [`./split.component.scss`],\n templateUrl: './split.component.html',\n})\nexport class MtxSplitComponent implements AfterViewInit, OnDestroy {\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2\n ) {\n // To force adding default class, could be override by user @Input() or not\n this.direction = this._direction;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPaneDirective): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPaneDirective): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(\n component: MtxSplitPaneDirective,\n resetOrders: boolean,\n resetSizes: boolean\n ): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPaneDirective): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPaneDirective): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // @ts-ignore\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => ((a.component.order as number) - (b.component.order as number)) as number\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n // tslint:disable-next-line: one-line\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n // tslint:disable-next-line: one-line\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n // tslint:disable-next-line: one-line\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n // tslint:disable-next-line: one-line\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n // tslint:disable-next-line: one-line\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n // tslint:disable-next-line: one-line\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n public startDragging(\n event: MouseEvent | TouchEvent,\n gutterOrder: number,\n gutterNum: number\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n // tslint:disable-next-line: one-line\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n // tslint:disable-next-line: one-line\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n public notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n public ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplitComponent\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/fesm2015/mtxText3d.js
CHANGED
|
@@ -20,6 +20,7 @@ class MtxText3dComponent {
|
|
|
20
20
|
return tmpArr;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
23
24
|
MtxText3dComponent.decorators = [
|
|
24
25
|
{ type: Component, args: [{
|
|
25
26
|
selector: 'mtx-text3d',
|
|
@@ -34,8 +35,15 @@ MtxText3dComponent.decorators = [
|
|
|
34
35
|
styles: [".mtx-text3d{display:block;transform-style:preserve-3d;-webkit-animation:rotate 5s ease infinite;animation:rotate 5s ease infinite;font-weight:bold}.mtx-text3d .mtx-text3d-layer{display:block;text-align:center;font-size:10rem}.mtx-text3d .mtx-text3d-layer:not(:first-child){position:absolute;top:0;left:0%;right:0%;margin:auto;transform-style:preserve-3d}\n"]
|
|
35
36
|
},] }
|
|
36
37
|
];
|
|
37
|
-
/**
|
|
38
|
+
/**
|
|
39
|
+
* @type {function(): !Array<(null|{
|
|
40
|
+
* type: ?,
|
|
41
|
+
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
42
|
+
* })>}
|
|
43
|
+
* @nocollapse
|
|
44
|
+
*/
|
|
38
45
|
MtxText3dComponent.ctorParameters = () => [];
|
|
46
|
+
/** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
|
|
39
47
|
MtxText3dComponent.propDecorators = {
|
|
40
48
|
template: [{ type: ContentChild, args: [TemplateRef, { static: false },] }],
|
|
41
49
|
text: [{ type: Input }],
|
|
@@ -47,6 +55,7 @@ MtxText3dComponent.propDecorators = {
|
|
|
47
55
|
|
|
48
56
|
class MtxText3dModule {
|
|
49
57
|
}
|
|
58
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
50
59
|
MtxText3dModule.decorators = [
|
|
51
60
|
{ type: NgModule, args: [{
|
|
52
61
|
imports: [CommonModule],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtxText3d.js","sources":["../../../projects/extensions/text3d/text3d.component.ts","../../../projects/extensions/text3d/text3d.module.ts","../../../projects/extensions/text3d/mtxText3d.ts"],"sourcesContent":["import {\n Component,\n Input,\n ContentChild,\n TemplateRef,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\n@Component({\n selector: 'mtx-text3d',\n exportAs: 'mtxText3d',\n host: {\n 'class': 'mtx-text3d',\n '[style.transform]': 'transform',\n },\n templateUrl: './text3d.component.html',\n styleUrls: ['./text3d.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxText3dComponent {\n @ContentChild(TemplateRef, { static: false }) template!: TemplateRef<any>;\n\n @Input() text = '';\n\n @Input() depth = 20;\n\n @Input() rotateX = 60;\n @Input() rotateY = 0;\n @Input() rotateZ = 0;\n\n get transform() {\n return `rotateX(${this.rotateX}deg) rotateY(${this.rotateY}deg) rotateZ(${this.rotateZ}deg)`;\n }\n\n get depthArr() {\n const tmpArr: number[] = [];\n for (let i = 1; i <= this.depth; i++) {\n tmpArr.push(i);\n }\n return tmpArr;\n }\n\n constructor() {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxText3dComponent } from './text3d.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [MtxText3dComponent],\n declarations: [MtxText3dComponent],\n})\nexport class MtxText3dModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAqBa,kBAAkB;IAuB7B;QApBS,SAAI,GAAG,EAAE,CAAC;QAEV,UAAK,GAAG,EAAE,CAAC;QAEX,YAAO,GAAG,EAAE,CAAC;QACb,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;KAcL;IAZhB,IAAI,SAAS;QACX,OAAO,WAAW,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,OAAO,MAAM,CAAC;KAC9F;IAED,IAAI,QAAQ;QACV,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;QACD,OAAO,MAAM,CAAC;KACf
|
|
1
|
+
{"version":3,"file":"mtxText3d.js","sources":["../../../projects/extensions/text3d/text3d.component.ts","../../../projects/extensions/text3d/text3d.module.ts","../../../projects/extensions/text3d/mtxText3d.ts"],"sourcesContent":["import {\n Component,\n Input,\n ContentChild,\n TemplateRef,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\n@Component({\n selector: 'mtx-text3d',\n exportAs: 'mtxText3d',\n host: {\n 'class': 'mtx-text3d',\n '[style.transform]': 'transform',\n },\n templateUrl: './text3d.component.html',\n styleUrls: ['./text3d.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxText3dComponent {\n @ContentChild(TemplateRef, { static: false }) template!: TemplateRef<any>;\n\n @Input() text = '';\n\n @Input() depth = 20;\n\n @Input() rotateX = 60;\n @Input() rotateY = 0;\n @Input() rotateZ = 0;\n\n get transform() {\n return `rotateX(${this.rotateX}deg) rotateY(${this.rotateY}deg) rotateZ(${this.rotateZ}deg)`;\n }\n\n get depthArr() {\n const tmpArr: number[] = [];\n for (let i = 1; i <= this.depth; i++) {\n tmpArr.push(i);\n }\n return tmpArr;\n }\n\n constructor() {}\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxText3dComponent } from './text3d.component';\n\n@NgModule({\n imports: [CommonModule],\n exports: [MtxText3dComponent],\n declarations: [MtxText3dComponent],\n})\nexport class MtxText3dModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAqBa,kBAAkB;IAuB7B;QApBS,SAAI,GAAG,EAAE,CAAC;QAEV,UAAK,GAAG,EAAE,CAAC;QAEX,YAAO,GAAG,EAAE,CAAC;QACb,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;KAcL;IAZhB,IAAI,SAAS;QACX,OAAO,WAAW,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,OAAO,MAAM,CAAC;KAC9F;IAED,IAAI,QAAQ;QACV,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;QACD,OAAO,MAAM,CAAC;KACf;;;;YAjCF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE;oBACJ,OAAO,EAAE,YAAY;oBACrB,mBAAmB,EAAE,WAAW;iBACjC;gBACD,qPAAsC;gBAEtC,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;;;;;;;;;uBAEE,YAAY,SAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;mBAE3C,KAAK;oBAEL,KAAK;sBAEL,KAAK;sBACL,KAAK;sBACL,KAAK;;;MCpBK,eAAe;;;;YAL3B,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,YAAY,CAAC;gBACvB,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAC7B,YAAY,EAAE,CAAC,kBAAkB,CAAC;aACnC;;;ACTD;;;;;;"}
|
package/fesm2015/mtxTooltip.js
CHANGED
|
@@ -527,6 +527,7 @@ class MtxTooltip {
|
|
|
527
527
|
}
|
|
528
528
|
}
|
|
529
529
|
}
|
|
530
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
530
531
|
MtxTooltip.decorators = [
|
|
531
532
|
{ type: Directive, args: [{
|
|
532
533
|
selector: '[mtxTooltip]',
|
|
@@ -536,7 +537,13 @@ MtxTooltip.decorators = [
|
|
|
536
537
|
},
|
|
537
538
|
},] }
|
|
538
539
|
];
|
|
539
|
-
/**
|
|
540
|
+
/**
|
|
541
|
+
* @type {function(): !Array<(null|{
|
|
542
|
+
* type: ?,
|
|
543
|
+
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
544
|
+
* })>}
|
|
545
|
+
* @nocollapse
|
|
546
|
+
*/
|
|
540
547
|
MtxTooltip.ctorParameters = () => [
|
|
541
548
|
{ type: Overlay },
|
|
542
549
|
{ type: ElementRef },
|
|
@@ -550,6 +557,7 @@ MtxTooltip.ctorParameters = () => [
|
|
|
550
557
|
{ type: Directionality, decorators: [{ type: Optional }] },
|
|
551
558
|
{ type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MTX_TOOLTIP_DEFAULT_OPTIONS,] }] }
|
|
552
559
|
];
|
|
560
|
+
/** @type {!Object<string, !Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
|
|
553
561
|
MtxTooltip.propDecorators = {
|
|
554
562
|
position: [{ type: Input, args: ['mtxTooltipPosition',] }],
|
|
555
563
|
disabled: [{ type: Input, args: ['mtxTooltipDisabled',] }],
|
|
@@ -659,6 +667,7 @@ class TooltipComponent {
|
|
|
659
667
|
this._changeDetectorRef.markForCheck();
|
|
660
668
|
}
|
|
661
669
|
}
|
|
670
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
662
671
|
TooltipComponent.decorators = [
|
|
663
672
|
{ type: Component, args: [{
|
|
664
673
|
selector: 'mtx-tooltip-component',
|
|
@@ -676,7 +685,13 @@ TooltipComponent.decorators = [
|
|
|
676
685
|
styles: [".mtx-tooltip-panel{pointer-events:none!important}.mtx-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mtx-tooltip{outline:solid 1px}.mtx-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"]
|
|
677
686
|
},] }
|
|
678
687
|
];
|
|
679
|
-
/**
|
|
688
|
+
/**
|
|
689
|
+
* @type {function(): !Array<(null|{
|
|
690
|
+
* type: ?,
|
|
691
|
+
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
692
|
+
* })>}
|
|
693
|
+
* @nocollapse
|
|
694
|
+
*/
|
|
680
695
|
TooltipComponent.ctorParameters = () => [
|
|
681
696
|
{ type: ChangeDetectorRef },
|
|
682
697
|
{ type: BreakpointObserver }
|
|
@@ -684,6 +699,7 @@ TooltipComponent.ctorParameters = () => [
|
|
|
684
699
|
|
|
685
700
|
class MtxTooltipModule {
|
|
686
701
|
}
|
|
702
|
+
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
687
703
|
MtxTooltipModule.decorators = [
|
|
688
704
|
{ type: NgModule, args: [{
|
|
689
705
|
imports: [A11yModule, CommonModule, OverlayModule, MatCommonModule],
|