@ng-matero/extensions 10.16.4 → 10.16.6

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.
Files changed (73) hide show
  1. package/bundles/{ng-matero-extensions-button.umd.js → mtxButton.umd.js} +2 -2
  2. package/bundles/mtxButton.umd.js.map +1 -0
  3. package/bundles/{ng-matero-extensions-button.umd.min.js → mtxButton.umd.min.js} +1 -1
  4. package/bundles/mtxCheckboxGroup.umd.js +93 -20
  5. package/bundles/mtxCheckboxGroup.umd.js.map +1 -1
  6. package/bundles/mtxCheckboxGroup.umd.min.js +1 -1
  7. package/bundles/mtxCheckboxGroup.umd.min.js.map +1 -1
  8. package/bundles/mtxColorPicker.umd.js +27 -4
  9. package/bundles/mtxColorPicker.umd.js.map +1 -1
  10. package/bundles/mtxColorPicker.umd.min.js +1 -1
  11. package/bundles/mtxColorPicker.umd.min.js.map +1 -1
  12. package/bundles/mtxFormGroup.umd.js +2 -0
  13. package/bundles/mtxFormGroup.umd.js.map +1 -1
  14. package/bundles/mtxFormGroup.umd.min.js +1 -1
  15. package/bundles/mtxFormGroup.umd.min.js.map +1 -1
  16. package/bundles/mtxGrid.umd.js +34 -61
  17. package/bundles/mtxGrid.umd.js.map +1 -1
  18. package/bundles/mtxGrid.umd.min.js +2 -2
  19. package/bundles/mtxGrid.umd.min.js.map +1 -1
  20. package/bundles/mtxPopover.umd.js +7 -2
  21. package/bundles/mtxPopover.umd.js.map +1 -1
  22. package/bundles/mtxPopover.umd.min.js +1 -1
  23. package/bundles/mtxPopover.umd.min.js.map +1 -1
  24. package/bundles/mtxSelect.umd.js +1 -0
  25. package/bundles/mtxSelect.umd.js.map +1 -1
  26. package/bundles/mtxSelect.umd.min.js +1 -1
  27. package/bundles/mtxSelect.umd.min.js.map +1 -1
  28. package/bundles/mtxSplit.umd.js +1 -1
  29. package/bundles/mtxSplit.umd.js.map +1 -1
  30. package/bundles/mtxSplit.umd.min.js +1 -1
  31. package/bundles/mtxSplit.umd.min.js.map +1 -1
  32. package/button/package.json +7 -7
  33. package/checkbox-group/checkbox-group.component.d.ts +12 -8
  34. package/checkbox-group/mtxCheckboxGroup.metadata.json +1 -1
  35. package/color-picker/color-picker.component.d.ts +4 -0
  36. package/color-picker/mtxColorPicker.metadata.json +1 -1
  37. package/data-grid/cell.component.d.ts +3 -8
  38. package/data-grid/mtxGrid.metadata.json +1 -1
  39. package/esm2015/button/mtxButton.js +10 -0
  40. package/esm2015/checkbox-group/checkbox-group.component.js +82 -19
  41. package/esm2015/color-picker/color-picker.component.js +24 -5
  42. package/esm2015/data-grid/cell.component.js +34 -57
  43. package/esm2015/data-grid/column-menu.component.js +2 -2
  44. package/esm2015/data-grid/grid.component.js +3 -3
  45. package/esm2015/form-group/form-group.component.js +4 -2
  46. package/esm2015/popover/popover.js +8 -3
  47. package/esm2015/select/select.component.js +2 -1
  48. package/esm2015/split-pane/split.component.js +2 -2
  49. package/fesm2015/{ng-matero-extensions-button.js → mtxButton.js} +2 -2
  50. package/fesm2015/mtxButton.js.map +1 -0
  51. package/fesm2015/mtxCheckboxGroup.js +80 -17
  52. package/fesm2015/mtxCheckboxGroup.js.map +1 -1
  53. package/fesm2015/mtxColorPicker.js +23 -4
  54. package/fesm2015/mtxColorPicker.js.map +1 -1
  55. package/fesm2015/mtxFormGroup.js +3 -1
  56. package/fesm2015/mtxFormGroup.js.map +1 -1
  57. package/fesm2015/mtxGrid.js +36 -59
  58. package/fesm2015/mtxGrid.js.map +1 -1
  59. package/fesm2015/mtxPopover.js +7 -2
  60. package/fesm2015/mtxPopover.js.map +1 -1
  61. package/fesm2015/mtxSelect.js +1 -0
  62. package/fesm2015/mtxSelect.js.map +1 -1
  63. package/fesm2015/mtxSplit.js +1 -1
  64. package/fesm2015/mtxSplit.js.map +1 -1
  65. package/form-group/mtxFormGroup.metadata.json +1 -1
  66. package/package.json +1 -1
  67. package/select/mtxSelect.metadata.json +1 -1
  68. package/bundles/ng-matero-extensions-button.umd.js.map +0 -1
  69. package/esm2015/button/ng-matero-extensions-button.js +0 -10
  70. package/fesm2015/ng-matero-extensions-button.js.map +0 -1
  71. /package/bundles/{ng-matero-extensions-button.umd.min.js.map → mtxButton.umd.min.js.map} +0 -0
  72. /package/button/{ng-matero-extensions-button.d.ts → mtxButton.d.ts} +0 -0
  73. /package/button/{ng-matero-extensions-button.metadata.json → mtxButton.metadata.json} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split-pane/interface.ts","../../../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"],"sourcesContent":["import { MtxSplitPaneDirective } from './split-pane.directive';\r\n\r\nexport interface MtxSplitPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface MtxSplitArea {\r\n component: MtxSplitPaneDirective;\r\n order: number;\r\n size: number | null;\r\n minSize: number | null;\r\n maxSize: number | null;\r\n}\r\n\r\n// CREATED ON DRAG START\r\n\r\nexport interface MtxSplitSnapshot {\r\n gutterNum: number;\r\n allAreasSizePixel: number;\r\n allInvolvedAreasSizePercent: number;\r\n lastSteppedOffset: number;\r\n areasBeforeGutter: Array<MtxSplitAreaSnapshot>;\r\n areasAfterGutter: Array<MtxSplitAreaSnapshot>;\r\n}\r\n\r\nexport interface MtxSplitAreaSnapshot {\r\n area: MtxSplitArea;\r\n sizePixelAtStart: number;\r\n sizePercentAtStart: number;\r\n}\r\n\r\n// CREATED ON DRAG PROGRESS\r\n\r\nexport interface MtxSplitSideAbsorptionCapacity {\r\n remain: number;\r\n list: Array<MtxSplitAreaAbsorptionCapacity>;\r\n}\r\n\r\nexport interface MtxSplitAreaAbsorptionCapacity {\r\n areaSnapshot: MtxSplitAreaSnapshot;\r\n pixelAbsorb: number;\r\n percentAfterAbsorption: number;\r\n pixelRemain: number;\r\n}\r\n\r\n// CREATED TO SEND OUTSIDE\r\n\r\nexport interface MtxSplitOutputData {\r\n gutterNum: number;\r\n sizes: MtxSplitOutputAreaSizes;\r\n}\r\n\r\nexport interface MtxSplitOutputAreaSizes extends Array<number | '*'> {}\r\n","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"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split-pane/interface.ts","../../../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"],"sourcesContent":["import { MtxSplitPaneDirective } from './split-pane.directive';\r\n\r\nexport interface MtxSplitPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface MtxSplitArea {\r\n component: MtxSplitPaneDirective;\r\n order: number;\r\n size: number | null;\r\n minSize: number | null;\r\n maxSize: number | null;\r\n}\r\n\r\n// CREATED ON DRAG START\r\n\r\nexport interface MtxSplitSnapshot {\r\n gutterNum: number;\r\n allAreasSizePixel: number;\r\n allInvolvedAreasSizePercent: number;\r\n lastSteppedOffset: number;\r\n areasBeforeGutter: Array<MtxSplitAreaSnapshot>;\r\n areasAfterGutter: Array<MtxSplitAreaSnapshot>;\r\n}\r\n\r\nexport interface MtxSplitAreaSnapshot {\r\n area: MtxSplitArea;\r\n sizePixelAtStart: number;\r\n sizePercentAtStart: number;\r\n}\r\n\r\n// CREATED ON DRAG PROGRESS\r\n\r\nexport interface MtxSplitSideAbsorptionCapacity {\r\n remain: number;\r\n list: Array<MtxSplitAreaAbsorptionCapacity>;\r\n}\r\n\r\nexport interface MtxSplitAreaAbsorptionCapacity {\r\n areaSnapshot: MtxSplitAreaSnapshot;\r\n pixelAbsorb: number;\r\n percentAfterAbsorption: number;\r\n pixelRemain: number;\r\n}\r\n\r\n// CREATED TO SEND OUTSIDE\r\n\r\nexport interface MtxSplitOutputData {\r\n gutterNum: number;\r\n sizes: MtxSplitOutputAreaSizes;\r\n}\r\n\r\nexport interface MtxSplitOutputAreaSizes extends Array<number | '*'> {}\r\n","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' && this.direction === 'horizontal') {\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"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"MtxFormGroupModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":6,"character":12}],"exports":[{"__symbolic":"reference","name":"MtxFormGroupComponent"}],"declarations":[{"__symbolic":"reference","name":"MtxFormGroupComponent"}]}]}],"members":{}},"MtxFormGroupComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":12,"character":1},"arguments":[{"selector":"mtx-form-group","host":{"class":"mtx-form-group"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":19,"character":17},"member":"None"},"template":"<div class=\"mtx-form-field-layout mtx-form-field-appearance-fluent\">\r\n <label *ngIf=\"label\"\r\n class=\"mtx-form-label\"\r\n [class.mtx-form-label-marker]=\"showRequiredMarker\">{{label}}</label>\r\n <ng-content></ng-content>\r\n</div>\r\n","styles":[".mtx-form-group{display:inline-block}.mtx-form-group .mtx-form-field-layout{align-items:flex-start;display:inline-flex;width:100%}.mtx-form-group .mtx-form-label{display:inline-block;line-height:1.125;padding-bottom:calc(.375em + 1px);padding-right:1em;padding-top:calc(.375em + 1px);position:relative}[dir=rtl] .mtx-form-group .mtx-form-label{padding-left:1em;padding-right:unset}.mtx-form-group .mtx-form-label.mtx-form-label-marker:after{content:\"*\";margin-left:4px}[dir=rtl] .mtx-form-group .mtx-form-label.mtx-form-label-marker:after{margin-left:auto;margin-right:4px}.mtx-form-field-appearance-fluent .mat-form-field{margin-bottom:.25em}.mtx-form-field-appearance-fluent .mat-form-field .mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mtx-form-field-appearance-fluent .mat-form-field .mat-form-field-suffix .mat-icon-button .mat-datepicker-toggle-default-icon{width:1em}.mtx-form-field-appearance-fluent .mat-form-field-has-label .mat-form-field-flex{margin-top:.84375em}.mtx-form-field-appearance-fluent .mat-form-field-appearance-standard .mat-form-field-flex{padding-top:0}.mtx-form-field-appearance-fluent .mat-form-field-flex{align-items:center;border-radius:2px;padding:0 .5em}.mtx-form-field-appearance-fluent .mat-form-field-infix{border-top:0;padding:.375em 0}.mtx-form-field-appearance-fluent .mat-form-field-prefix,.mtx-form-field-appearance-fluent .mat-form-field-suffix{display:inline-flex}.mtx-form-field-appearance-fluent .mat-form-field-prefix .mat-icon,.mtx-form-field-appearance-fluent .mat-form-field-suffix .mat-icon{line-height:normal}.mtx-form-field-appearance-fluent .mat-form-field-underline{display:none}.mtx-form-field-appearance-fluent .mtx-select{display:block;margin:0 -8px}.mtx-form-field-appearance-fluent .ng-select{margin-top:-.4375em;padding-left:8px;padding-right:8px;padding-top:.4375em}"]}]}],"members":{"formFields":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":22,"character":3},"arguments":[{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormField","line":22,"character":19}]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":3}}]}],"showRequiredMarker":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":25,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterContentInit":[{"__symbolic":"method"}]}}},"origins":{"MtxFormGroupModule":"./form-group.module","MtxFormGroupComponent":"./form-group.component"},"importAs":"@ng-matero/extensions/form-group"}
1
+ {"__symbolic":"module","version":4,"metadata":{"MtxFormGroupModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":6,"character":12}],"exports":[{"__symbolic":"reference","name":"MtxFormGroupComponent"}],"declarations":[{"__symbolic":"reference","name":"MtxFormGroupComponent"}]}]}],"members":{}},"MtxFormGroupComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"mtx-form-group","exportAs":"mtxFormGroup","host":{"class":"mtx-form-group"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":21,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":22,"character":19},"member":"OnPush"},"template":"<div class=\"mtx-form-field-layout mtx-form-field-appearance-fluent\">\r\n <label *ngIf=\"label\"\r\n class=\"mtx-form-label\"\r\n [class.mtx-form-label-marker]=\"showRequiredMarker\">{{label}}</label>\r\n <ng-content></ng-content>\r\n</div>\r\n","styles":[".mtx-form-group{display:inline-block}.mtx-form-group .mtx-form-field-layout{align-items:flex-start;display:inline-flex;width:100%}.mtx-form-group .mtx-form-label{display:inline-block;line-height:1.125;padding-bottom:calc(.375em + 1px);padding-right:1em;padding-top:calc(.375em + 1px);position:relative}[dir=rtl] .mtx-form-group .mtx-form-label{padding-left:1em;padding-right:unset}.mtx-form-group .mtx-form-label.mtx-form-label-marker:after{content:\"*\";margin-left:4px}[dir=rtl] .mtx-form-group .mtx-form-label.mtx-form-label-marker:after{margin-left:auto;margin-right:4px}.mtx-form-field-appearance-fluent .mat-form-field{margin-bottom:.25em}.mtx-form-field-appearance-fluent .mat-form-field .mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mtx-form-field-appearance-fluent .mat-form-field .mat-form-field-suffix .mat-icon-button .mat-datepicker-toggle-default-icon{width:1em}.mtx-form-field-appearance-fluent .mat-form-field-has-label .mat-form-field-flex{margin-top:.84375em}.mtx-form-field-appearance-fluent .mat-form-field-appearance-standard .mat-form-field-flex{padding-top:0}.mtx-form-field-appearance-fluent .mat-form-field-flex{align-items:center;border-radius:2px;padding:0 .5em}.mtx-form-field-appearance-fluent .mat-form-field-infix{border-top:0;padding:.375em 0}.mtx-form-field-appearance-fluent .mat-form-field-prefix,.mtx-form-field-appearance-fluent .mat-form-field-suffix{display:inline-flex}.mtx-form-field-appearance-fluent .mat-form-field-prefix .mat-icon,.mtx-form-field-appearance-fluent .mat-form-field-suffix .mat-icon{line-height:normal}.mtx-form-field-appearance-fluent .mat-form-field-underline{display:none}.mtx-form-field-appearance-fluent .mtx-select{display:block;margin:0 -8px}.mtx-form-field-appearance-fluent .ng-select{margin-top:-.4375em;padding-left:8px;padding-right:8px;padding-top:.4375em}"]}]}],"members":{"formFields":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChildren","line":25,"character":3},"arguments":[{"__symbolic":"reference","module":"@angular/material/form-field","name":"MatFormField","line":25,"character":19}]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"showRequiredMarker":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterContentInit":[{"__symbolic":"method"}]}}},"origins":{"MtxFormGroupModule":"./form-group.module","MtxFormGroupComponent":"./form-group.component"},"importAs":"@ng-matero/extensions/form-group"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-matero/extensions",
3
- "version": "10.16.4",
3
+ "version": "10.16.6",
4
4
  "description": "Angular Material Extensions",
5
5
  "author": "nzbin<nzb329@163.com>",
6
6
  "repository": {