@ng-matero/extensions 14.7.0 → 14.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/_index.scss +1 -1
  2. package/_theming.scss +1 -1
  3. package/checkbox-group/checkbox-group.component.d.ts +6 -6
  4. package/datetimepicker/public-api.d.ts +1 -0
  5. package/esm2020/checkbox-group/checkbox-group.component.mjs +11 -11
  6. package/esm2020/datetimepicker/datetimepicker-input.mjs +1 -1
  7. package/esm2020/datetimepicker/public-api.mjs +2 -1
  8. package/esm2020/grid/cell.component.mjs +5 -4
  9. package/esm2020/grid/column-menu.component.mjs +3 -3
  10. package/esm2020/grid/grid.component.mjs +65 -46
  11. package/esm2020/grid/grid.interface.mjs +1 -1
  12. package/esm2020/grid/grid.pipe.mjs +2 -2
  13. package/esm2020/select/select.component.mjs +28 -15
  14. package/esm2020/split/interface.mjs +1 -1
  15. package/esm2020/split/split.component.mjs +24 -9
  16. package/esm2020/tooltip/tooltip.mjs +23 -4
  17. package/fesm2015/mtxCheckboxGroup.mjs +8 -8
  18. package/fesm2015/mtxCheckboxGroup.mjs.map +1 -1
  19. package/fesm2015/mtxDatetimepicker.mjs +1 -1
  20. package/fesm2015/mtxDatetimepicker.mjs.map +1 -1
  21. package/fesm2015/mtxGrid.mjs +75 -52
  22. package/fesm2015/mtxGrid.mjs.map +1 -1
  23. package/fesm2015/mtxSelect.mjs +26 -12
  24. package/fesm2015/mtxSelect.mjs.map +1 -1
  25. package/fesm2015/mtxSplit.mjs +26 -8
  26. package/fesm2015/mtxSplit.mjs.map +1 -1
  27. package/fesm2015/mtxTooltip.mjs +22 -3
  28. package/fesm2015/mtxTooltip.mjs.map +1 -1
  29. package/fesm2020/mtxCheckboxGroup.mjs +8 -8
  30. package/fesm2020/mtxCheckboxGroup.mjs.map +1 -1
  31. package/fesm2020/mtxDatetimepicker.mjs +1 -1
  32. package/fesm2020/mtxDatetimepicker.mjs.map +1 -1
  33. package/fesm2020/mtxGrid.mjs +72 -52
  34. package/fesm2020/mtxGrid.mjs.map +1 -1
  35. package/fesm2020/mtxSelect.mjs +25 -12
  36. package/fesm2020/mtxSelect.mjs.map +1 -1
  37. package/fesm2020/mtxSplit.mjs +23 -8
  38. package/fesm2020/mtxSplit.mjs.map +1 -1
  39. package/fesm2020/mtxTooltip.mjs +22 -3
  40. package/fesm2020/mtxTooltip.mjs.map +1 -1
  41. package/grid/cell.component.d.ts +1 -0
  42. package/grid/cell.component.scss +1 -1
  43. package/grid/column-menu.component.d.ts +1 -1
  44. package/grid/grid.component.d.ts +11 -6
  45. package/grid/grid.interface.d.ts +63 -14
  46. package/grid/grid.pipe.d.ts +1 -1
  47. package/package.json +2 -2
  48. package/select/select.component.d.ts +28 -8
  49. package/split/interface.d.ts +12 -0
  50. package/split/split.component.d.ts +7 -4
  51. package/tooltip/tooltip.d.ts +9 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Output, ViewChildren, Directive, NgModule } from '@angular/core';
2
+ import { InjectionToken, EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Input, Output, ViewChildren, Directive, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import { mixinColor } from '@angular/material/core';
@@ -228,6 +228,8 @@ function updateAreaSize(unit, item) {
228
228
  }
229
229
  }
230
230
 
231
+ /** Injection token that can be used to specify default split options. */
232
+ const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken('mtx-split-default-options');
231
233
  // Boilerplate for applying mixins to _MtxSplitComponentBase.
232
234
  /** @docs-private */
233
235
  const _MtxSplitComponentBase = mixinColor(class {
@@ -265,12 +267,13 @@ const _MtxSplitComponentBase = mixinColor(class {
265
267
  *
266
268
  */
267
269
  class MtxSplitComponent extends _MtxSplitComponentBase {
268
- constructor(ngZone, elRef, cdRef, renderer) {
270
+ constructor(ngZone, elRef, cdRef, renderer, _defaultOptions) {
269
271
  super(elRef);
270
272
  this.ngZone = ngZone;
271
273
  this.elRef = elRef;
272
274
  this.cdRef = cdRef;
273
275
  this.renderer = renderer;
276
+ this._defaultOptions = _defaultOptions;
274
277
  this._direction = 'horizontal';
275
278
  ////
276
279
  this._unit = 'percent';
@@ -304,8 +307,15 @@ class MtxSplitComponent extends _MtxSplitComponentBase {
304
307
  this.displayedAreas = [];
305
308
  this.hidedAreas = [];
306
309
  this._clickTimeout = null;
307
- // To force adding default class, could be override by user @Input() or not
308
- this.direction = this._direction;
310
+ this.color = _defaultOptions?.color ?? 'primary';
311
+ this.direction = _defaultOptions?.direction ?? 'horizontal';
312
+ this.dir = _defaultOptions?.dir ?? 'ltr';
313
+ this.unit = _defaultOptions?.unit ?? 'percent';
314
+ this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;
315
+ this.gutterSize = _defaultOptions?.gutterSize ?? 4;
316
+ this.gutterStep = _defaultOptions?.gutterStep ?? 1;
317
+ this.restrictMove = _defaultOptions?.restrictMove ?? false;
318
+ this.useTransition = _defaultOptions?.useTransition ?? false;
309
319
  }
310
320
  set direction(v) {
311
321
  this._direction = v === 'vertical' ? 'vertical' : 'horizontal';
@@ -685,7 +695,7 @@ class MtxSplitComponent extends _MtxSplitComponentBase {
685
695
  let offset = this.direction === 'horizontal'
686
696
  ? this.startPoint.x - this.endPoint.x
687
697
  : this.startPoint.y - this.endPoint.y;
688
- if (this.dir === 'rtl') {
698
+ if (this.dir === 'rtl' && this.direction === 'horizontal') {
689
699
  offset = -offset;
690
700
  }
691
701
  const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;
@@ -800,14 +810,19 @@ class MtxSplitComponent extends _MtxSplitComponentBase {
800
810
  this.stopDragging();
801
811
  }
802
812
  }
803
- /** @nocollapse */ MtxSplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxSplitComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
813
+ /** @nocollapse */ MtxSplitComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxSplitComponent, deps: [{ token: i0.NgZone }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: MTX_SPLIT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
804
814
  /** @nocollapse */ MtxSplitComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MtxSplitComponent, selector: "mtx-split", inputs: { color: "color", direction: "direction", unit: "unit", gutterSize: "gutterSize", gutterStep: "gutterStep", restrictMove: "restrictMove", useTransition: "useTransition", disabled: "disabled", dir: "dir", gutterDblClickDuration: "gutterDblClickDuration" }, outputs: { dragStart: "dragStart", dragEnd: "dragEnd", gutterClick: "gutterClick", gutterDblClick: "gutterDblClick", transitionEnd: "transitionEnd" }, host: { classAttribute: "mtx-split" }, viewQueries: [{ propertyName: "gutterEls", predicate: ["gutterEls"], descendants: true }], exportAs: ["mtxSplit"], usesInheritance: true, ngImport: i0, template: "<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mtx-split{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;overflow:hidden;width:100%;height:100%}.mtx-split>.mtx-split-gutter{position:relative;display:flex;flex-grow:0;flex-shrink:0;align-items:center;justify-content:center}.mtx-split>.mtx-split-gutter>.mtx-split-gutter-handle{position:absolute;opacity:0}.mtx-split>.mtx-split-pane{flex-grow:0;flex-shrink:0;overflow-x:hidden;overflow-y:auto}.mtx-split>.mtx-split-pane.mtx-split-pane-hidden{flex:0 1 0!important;overflow-x:hidden;overflow-y:hidden}.mtx-split.mtx-split-horizontal{flex-direction:row}.mtx-split.mtx-split-horizontal>.mtx-split-gutter{flex-direction:row;height:100%;cursor:col-resize}.mtx-split.mtx-split-horizontal>.mtx-split-gutter>.mtx-split-gutter-handle{width:8px;height:100%;left:-2px;right:2px}.mtx-split.mtx-split-horizontal>.mtx-split-pane{height:100%}.mtx-split.mtx-split-vertical{flex-direction:column}.mtx-split.mtx-split-vertical>.mtx-split-gutter{flex-direction:column;width:100%;cursor:row-resize}.mtx-split.mtx-split-vertical>.mtx-split-gutter>.mtx-split-gutter-handle{width:100%;height:8px;top:-2px;bottom:2px}.mtx-split.mtx-split-vertical>.mtx-split-pane{width:100%}.mtx-split.mtx-split-vertical>.mtx-split-pane.mtx-split-pane-hidden{max-width:0}.mtx-split.mtx-split-disabled>.mtx-split-gutter{cursor:default}.mtx-split.mtx-split-disabled>.mtx-split-gutter .mtx-split-gutter-handle{background-image:none}.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-gutter,.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-pane{transition:flex-basis .3s}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
805
815
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxSplitComponent, decorators: [{
806
816
  type: Component,
807
817
  args: [{ selector: 'mtx-split', exportAs: 'mtxSplit', host: {
808
818
  class: 'mtx-split',
809
819
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, inputs: ['color'], template: "<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n", styles: [".mtx-split{display:flex;flex-wrap:nowrap;justify-content:flex-start;align-items:stretch;overflow:hidden;width:100%;height:100%}.mtx-split>.mtx-split-gutter{position:relative;display:flex;flex-grow:0;flex-shrink:0;align-items:center;justify-content:center}.mtx-split>.mtx-split-gutter>.mtx-split-gutter-handle{position:absolute;opacity:0}.mtx-split>.mtx-split-pane{flex-grow:0;flex-shrink:0;overflow-x:hidden;overflow-y:auto}.mtx-split>.mtx-split-pane.mtx-split-pane-hidden{flex:0 1 0!important;overflow-x:hidden;overflow-y:hidden}.mtx-split.mtx-split-horizontal{flex-direction:row}.mtx-split.mtx-split-horizontal>.mtx-split-gutter{flex-direction:row;height:100%;cursor:col-resize}.mtx-split.mtx-split-horizontal>.mtx-split-gutter>.mtx-split-gutter-handle{width:8px;height:100%;left:-2px;right:2px}.mtx-split.mtx-split-horizontal>.mtx-split-pane{height:100%}.mtx-split.mtx-split-vertical{flex-direction:column}.mtx-split.mtx-split-vertical>.mtx-split-gutter{flex-direction:column;width:100%;cursor:row-resize}.mtx-split.mtx-split-vertical>.mtx-split-gutter>.mtx-split-gutter-handle{width:100%;height:8px;top:-2px;bottom:2px}.mtx-split.mtx-split-vertical>.mtx-split-pane{width:100%}.mtx-split.mtx-split-vertical>.mtx-split-pane.mtx-split-pane-hidden{max-width:0}.mtx-split.mtx-split-disabled>.mtx-split-gutter{cursor:default}.mtx-split.mtx-split-disabled>.mtx-split-gutter .mtx-split-gutter-handle{background-image:none}.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-gutter,.mtx-split.mtx-split-transition.mtx-split-init:not(.mtx-dragging)>.mtx-split-pane{transition:flex-basis .3s}\n"] }]
810
- }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { direction: [{
820
+ }], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
821
+ type: Optional
822
+ }, {
823
+ type: Inject,
824
+ args: [MTX_SPLIT_DEFAULT_OPTIONS]
825
+ }] }]; }, propDecorators: { direction: [{
811
826
  type: Input
812
827
  }], unit: [{
813
828
  type: Input
@@ -1003,5 +1018,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
1003
1018
  * Generated bundle index. Do not edit.
1004
1019
  */
1005
1020
 
1006
- export { MtxSplitComponent, MtxSplitModule, MtxSplitPaneDirective, getAreaMaxSize, getAreaMinSize, getElementPixelSize, getGutterSideAbsorptionCapacity, getInputBoolean, getInputPositiveNumber, getPointFromEvent, isUserSizesValid, updateAreaSize };
1021
+ export { MTX_SPLIT_DEFAULT_OPTIONS, MtxSplitComponent, MtxSplitModule, MtxSplitPaneDirective, getAreaMaxSize, getAreaMinSize, getElementPixelSize, getGutterSideAbsorptionCapacity, getInputBoolean, getInputPositiveNumber, getPointFromEvent, isUserSizesValid, updateAreaSize };
1007
1022
  //# sourceMappingURL=mtxSplit.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split.component.html","../../../projects/extensions/split/split-pane.directive.ts","../../../projects/extensions/split/split.module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interface';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputBoolean(v: any): boolean {\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nfunction getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nfunction getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nfunction getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n Component,\n Input,\n Output,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Renderer2,\n AfterViewInit,\n OnDestroy,\n ElementRef,\n NgZone,\n ViewChildren,\n QueryList,\n EventEmitter,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CanColor, mixinColor } from '@angular/material/core';\nimport { Observable, Subscriber, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitSnapshot,\n MtxSplitAreaSnapshot,\n MtxSplitOutputData,\n MtxSplitOutputAreaSizes,\n} from './interface';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\nimport {\n getInputPositiveNumber,\n getInputBoolean,\n isUserSizesValid,\n getAreaMinSize,\n getAreaMaxSize,\n getPointFromEvent,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n updateAreaSize,\n} from './utils';\n\n// Boilerplate for applying mixins to _MtxSplitComponentBase.\n/** @docs-private */\nconst _MtxSplitComponentBase = mixinColor(\n class {\n constructor(public _elementRef: ElementRef) {}\n }\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: [`./split.component.scss`],\n templateUrl: './split.component.html',\n inputs: ['color'],\n})\nexport class MtxSplitComponent\n extends _MtxSplitComponentBase\n implements AfterViewInit, OnDestroy, CanColor\n{\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2\n ) {\n super(elRef);\n // To force adding default class, could be override by user @Input() or not\n this.direction = this._direction;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPaneDirective): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPaneDirective): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(\n component: MtxSplitPaneDirective,\n resetOrders: boolean,\n resetSizes: boolean\n ): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPaneDirective): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPaneDirective): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => ((a.component.order as number) - (b.component.order as number)) as number\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n public startDragging(\n event: MouseEvent | TouchEvent,\n gutterOrder: number,\n gutterNum: number\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n public notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n public ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplitComponent\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplitComponent"],"mappings":"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"}
1
+ {"version":3,"file":"mtxSplit.mjs","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split.component.html","../../../projects/extensions/split/split-pane.directive.ts","../../../projects/extensions/split/split.module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interface';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n else if (\n (event as MouseEvent).clientX !== undefined &&\n (event as MouseEvent).clientY !== undefined\n ) {\n return {\n x: (event as MouseEvent).clientX,\n y: (event as MouseEvent).clientY,\n };\n }\n return null;\n}\n\nexport function getElementPixelSize(\n elRef: ElementRef,\n direction: 'horizontal' | 'vertical'\n): number {\n const rect = (elRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n return direction === 'horizontal' ? rect.width : rect.height;\n}\n\nexport function getInputBoolean(v: any): boolean {\n return typeof v === 'boolean' ? v : v === 'false' ? false : true;\n}\n\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\n if (v === null || v === undefined) {\n return defaultValue;\n }\n\n v = Number(v);\n return !isNaN(v) && v >= 0 ? v : defaultValue;\n}\n\nexport function isUserSizesValid(\n unit: 'percent' | 'pixel',\n sizes: Array<number>\n): boolean | number | void {\n // All sizes have to be not null and total should be 100\n if (unit === 'percent') {\n const total = sizes.reduce((_total, s) => (s !== null ? _total + s : _total), 0);\n return sizes.every(s => s !== null) && total && total > 99.9 && total < 100.1;\n }\n\n // A size at null is mandatory but only one.\n if (unit === 'pixel') {\n return sizes.filter(s => s === null).length === 1;\n }\n}\n\nexport function getAreaMinSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.minSize === null) {\n return null;\n }\n\n if (a.component.minSize > a.size) {\n return a.size;\n }\n\n return a.component.minSize;\n}\n\nexport function getAreaMaxSize(a: MtxSplitArea): null | number {\n if (a.size === null) {\n return null;\n }\n\n if (a.component.lockSize === true) {\n return a.size;\n }\n\n if (a.component.maxSize === null) {\n return null;\n }\n\n if (a.component.maxSize < a.size) {\n return a.size;\n }\n\n return a.component.maxSize;\n}\n\nexport function getGutterSideAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n sideAreas: Array<MtxSplitAreaSnapshot>,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitSideAbsorptionCapacity {\n return sideAreas.reduce(\n (acc: any, area) => {\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\n acc.list.push(res);\n acc.remain = res && res.pixelRemain;\n return acc;\n },\n { remain: pixels, list: [] }\n );\n}\n\nfunction getAreaAbsorptionCapacity(\n unit: 'percent' | 'pixel',\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n // No pain no gain\n if (pixels === 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\n pixelRemain: 0,\n };\n }\n\n // Area start at zero and need to be reduced, not possible\n if (areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: 0,\n percentAfterAbsorption: 0,\n pixelRemain: pixels,\n };\n }\n\n if (unit === 'percent') {\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\n }\n\n if (unit === 'pixel') {\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\n }\n}\n\nfunction getAreaAbsorptionCapacityPercent(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n allAreasSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n const tempPercentSize = (tempPixelSize / allAreasSizePixel) * 100;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\n const maxSizePixel = (areaSnapshot.area.maxSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: maxSizePixel,\n percentAfterAbsorption: areaSnapshot.area.maxSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\n const minSizePixel = (areaSnapshot.area.minSize / 100) * allAreasSizePixel;\n return {\n areaSnapshot,\n pixelAbsorb: minSizePixel,\n percentAfterAbsorption: areaSnapshot.area.minSize,\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPercentSize < 0) {\n // Use 0 as newPercentSize and return calculate pixels remaining\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: 0,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: tempPercentSize,\n pixelRemain: 0,\n };\n }\n}\n\nfunction getAreaAbsorptionCapacityPixel(\n areaSnapshot: MtxSplitAreaSnapshot,\n pixels: number,\n containerSizePixel: number\n): MtxSplitAreaAbsorptionCapacity | void {\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\n\n // ENLARGE AREA\n\n if (pixels > 0) {\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels\n if (areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n\n // REDUCE AREA\n else if (pixels < 0) {\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels\n if (areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\n return {\n areaSnapshot,\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\n percentAfterAbsorption: -1,\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize,\n };\n }\n // If reduced under zero > return remaining pixels\n else if (tempPixelSize < 0) {\n return {\n areaSnapshot,\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\n percentAfterAbsorption: -1,\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart,\n };\n }\n return {\n areaSnapshot,\n pixelAbsorb: pixels,\n percentAfterAbsorption: -1,\n pixelRemain: 0,\n };\n }\n}\n\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: MtxSplitAreaAbsorptionCapacity) {\n if (unit === 'percent') {\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\n } else if (unit === 'pixel') {\n // Update size except for the wildcard size area\n if (item.areaSnapshot.area.size !== null) {\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n InjectionToken,\n Input,\n NgZone,\n OnDestroy,\n Optional,\n Output,\n QueryList,\n Renderer2,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { CanColor, mixinColor } from '@angular/material/core';\nimport { Observable, Subject, Subscriber } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport {\n MtxSplitArea,\n MtxSplitAreaSnapshot,\n MtxSplitDefaultOptions,\n MtxSplitOutputAreaSizes,\n MtxSplitOutputData,\n MtxSplitPoint,\n MtxSplitSnapshot,\n} from './interface';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\nimport {\n getAreaMaxSize,\n getAreaMinSize,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n getInputBoolean,\n getInputPositiveNumber,\n getPointFromEvent,\n isUserSizesValid,\n updateAreaSize,\n} from './utils';\n\n/** Injection token that can be used to specify default split options. */\nexport const MTX_SPLIT_DEFAULT_OPTIONS = new InjectionToken<MtxSplitDefaultOptions>(\n 'mtx-split-default-options'\n);\n\n// Boilerplate for applying mixins to _MtxSplitComponentBase.\n/** @docs-private */\nconst _MtxSplitComponentBase = mixinColor(\n class {\n constructor(public _elementRef: ElementRef) {}\n }\n);\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: [`./split.component.scss`],\n templateUrl: './split.component.html',\n inputs: ['color'],\n})\nexport class MtxSplitComponent\n extends _MtxSplitComponentBase\n implements AfterViewInit, OnDestroy, CanColor\n{\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2,\n @Optional()\n @Inject(MTX_SPLIT_DEFAULT_OPTIONS)\n protected _defaultOptions?: MtxSplitDefaultOptions\n ) {\n super(elRef);\n\n this.color = _defaultOptions?.color ?? 'primary';\n this.direction = _defaultOptions?.direction ?? 'horizontal';\n this.dir = _defaultOptions?.dir ?? 'ltr';\n this.unit = _defaultOptions?.unit ?? 'percent';\n this.gutterDblClickDuration = _defaultOptions?.gutterDblClickDuration ?? 0;\n this.gutterSize = _defaultOptions?.gutterSize ?? 4;\n this.gutterStep = _defaultOptions?.gutterStep ?? 1;\n this.restrictMove = _defaultOptions?.restrictMove ?? false;\n this.useTransition = _defaultOptions?.useTransition ?? false;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPaneDirective): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPaneDirective): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(\n component: MtxSplitPaneDirective,\n resetOrders: boolean,\n resetSizes: boolean\n ): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPaneDirective): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPaneDirective): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this.displayedAreas.forEach((area, i) => (area.component._size = formatedSizes[i]));\n\n this.build(false, true);\n return true;\n }\n\n private build(resetOrders: boolean, resetSizes: boolean): void {\n this.stopDragging();\n\n // ¤ AREAS ORDER\n\n if (resetOrders === true) {\n // If user provided 'order' for each area, use it to sort them.\n if (this.displayedAreas.every(a => a.component.order !== null)) {\n this.displayedAreas.sort(\n (a, b) => ((a.component.order as number) - (b.component.order as number)) as number\n );\n }\n\n // Then set real order with multiples of 2, numbers between will be used by gutters.\n this.displayedAreas.forEach((area, i) => {\n area.order = i * 2;\n area.component.setStyleOrder(area.order);\n });\n }\n\n // ¤ AREAS SIZE\n\n if (resetSizes === true) {\n const useUserSizes = isUserSizesValid(\n this.unit,\n this.displayedAreas.map(a => a.component.size) as number[]\n );\n\n switch (this.unit) {\n case 'percent': {\n const defaultSize = 100 / this.displayedAreas.length;\n\n this.displayedAreas.forEach(area => {\n area.size = useUserSizes ? (area.component.size as number) : defaultSize;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n break;\n }\n case 'pixel': {\n if (useUserSizes) {\n this.displayedAreas.forEach(area => {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n });\n } else {\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\n\n // No wildcard area > Need to select one arbitrarily > first\n if (wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\n this.displayedAreas.forEach((area, i) => {\n area.size = i === 0 ? null : area.component.size;\n area.minSize = i === 0 ? null : getAreaMinSize(area);\n area.maxSize = i === 0 ? null : getAreaMaxSize(area);\n });\n }\n // More than one wildcard area > Need to keep only one arbitrarly > first\n else if (wildcardSizeAreas.length > 1) {\n let alreadyGotOne = false;\n this.displayedAreas.forEach(area => {\n if (area.component.size === null) {\n if (alreadyGotOne === false) {\n area.size = null;\n area.minSize = null;\n area.maxSize = null;\n alreadyGotOne = true;\n } else {\n area.size = 100;\n area.minSize = null;\n area.maxSize = null;\n }\n } else {\n area.size = area.component.size;\n area.minSize = getAreaMinSize(area);\n area.maxSize = getAreaMaxSize(area);\n }\n });\n }\n }\n break;\n }\n }\n }\n\n this.refreshStyleSizes();\n this.cdRef.markForCheck();\n }\n\n private refreshStyleSizes(): void {\n ///////////////////////////////////////////\n // PERCENT MODE\n if (this.unit === 'percent') {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each percent basis\n else {\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\n\n this.displayedAreas.forEach(area => {\n area.component.setStyleFlex(\n 0,\n 0,\n `calc( ${area.size}% - ${((area.size as number) / 100) * sumGutterSize}px )`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n });\n }\n }\n ///////////////////////////////////////////\n // PIXEL MODE\n else if (this.unit === 'pixel') {\n this.displayedAreas.forEach(area => {\n // Area with wildcard size\n if (area.size === null) {\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(1, 1, `100%`, false, false);\n } else {\n area.component.setStyleFlex(1, 1, `auto`, false, false);\n }\n }\n // Area with pixel size\n else {\n // Only one area > flex-basis 100%\n if (this.displayedAreas.length === 1) {\n area.component.setStyleFlex(0, 0, `100%`, false, false);\n }\n // Multiple areas > use each pixel basis\n else {\n area.component.setStyleFlex(\n 0,\n 0,\n `${area.size}px`,\n area.minSize !== null && area.minSize === area.size ? true : false,\n area.maxSize !== null && area.maxSize === area.size ? true : false\n );\n }\n }\n });\n }\n }\n\n _clickTimeout: number | null = null;\n\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\n const tempPoint = getPointFromEvent(event) as MtxSplitPoint;\n\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\n if (this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\n // If timeout in progress and new click > clearTimeout & dblClickEvent\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n this.notify('dblclick', gutterNum);\n this.stopDragging();\n }\n // Else start timeout to call clickEvent at end\n else {\n this._clickTimeout = window.setTimeout(() => {\n this._clickTimeout = null;\n this.notify('click', gutterNum);\n this.stopDragging();\n }, this.gutterDblClickDuration);\n }\n }\n }\n\n public startDragging(\n event: MouseEvent | TouchEvent,\n gutterOrder: number,\n gutterNum: number\n ): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.startPoint = getPointFromEvent(event);\n if (this.startPoint === null || this.disabled === true) {\n return;\n }\n\n this.snapshot = {\n gutterNum,\n lastSteppedOffset: 0,\n allAreasSizePixel:\n getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\n allInvolvedAreasSizePercent: 100,\n areasBeforeGutter: [],\n areasAfterGutter: [],\n };\n\n this.displayedAreas.forEach(area => {\n const areaSnapshot: MtxSplitAreaSnapshot = {\n area,\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\n sizePercentAtStart: (this.unit === 'percent' ? area.size : -1) as number, // If pixel mode, anyway, will not be used.\n };\n\n if (area.order < gutterOrder) {\n if (this.restrictMove === true) {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter = [areaSnapshot];\n } else {\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter.unshift(areaSnapshot);\n }\n } else if (area.order > gutterOrder) {\n if (this.restrictMove === true) {\n if ((this.snapshot as MtxSplitSnapshot).areasAfterGutter.length === 0) {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter = [areaSnapshot];\n }\n } else {\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter.push(areaSnapshot);\n }\n }\n });\n\n this.snapshot.allInvolvedAreasSizePercent = [\n ...this.snapshot.areasBeforeGutter,\n ...this.snapshot.areasAfterGutter,\n ].reduce((t, a) => t + a.sizePercentAtStart, 0);\n\n if (\n this.snapshot.areasBeforeGutter.length === 0 ||\n this.snapshot.areasAfterGutter.length === 0\n ) {\n return;\n }\n\n this.dragListeners.push(\n this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchend', this.stopDragging.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this))\n );\n\n this.ngZone.runOutsideAngular(() => {\n this.dragListeners.push(\n this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this))\n );\n this.dragListeners.push(\n this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this))\n );\n });\n\n this.displayedAreas.forEach(area => area.component.lockEvents());\n\n this.isDragging = true;\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.addClass(\n this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n\n this.notify('start', this.snapshot.gutterNum);\n }\n\n private dragEvent(event: MouseEvent | TouchEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this._clickTimeout !== null) {\n window.clearTimeout(this._clickTimeout);\n this._clickTimeout = null;\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.endPoint = getPointFromEvent(event);\n if (this.endPoint === null) {\n return;\n }\n\n // Calculate steppedOffset\n\n let offset =\n this.direction === 'horizontal'\n ? (this.startPoint as MtxSplitPoint).x - this.endPoint.x\n : (this.startPoint as MtxSplitPoint).y - this.endPoint.y;\n if (this.dir === 'rtl' && this.direction === 'horizontal') {\n offset = -offset;\n }\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\n\n if (steppedOffset === (this.snapshot as MtxSplitSnapshot).lastSteppedOffset) {\n return;\n }\n\n (this.snapshot as MtxSplitSnapshot).lastSteppedOffset = steppedOffset;\n\n // Need to know if each gutter side areas could reacts to steppedOffset\n\n let areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n let areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n\n // Each gutter side areas can't absorb all offset\n if (areasBefore.remain !== 0 && areasAfter.remain !== 0) {\n if (Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\n /** */\n } else if (Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n } else {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n }\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\n else if (areasBefore.remain !== 0) {\n areasAfter = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasAfterGutter,\n steppedOffset + areasBefore.remain,\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\n else if (areasAfter.remain !== 0) {\n areasBefore = getGutterSideAbsorptionCapacity(\n this.unit,\n (this.snapshot as MtxSplitSnapshot).areasBeforeGutter,\n -(steppedOffset - areasAfter.remain),\n (this.snapshot as MtxSplitSnapshot).allAreasSizePixel\n );\n }\n\n if (this.unit === 'percent') {\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\n const all = [...areasBefore.list, ...areasAfter.list];\n const areaToReset = all.find(\n a =>\n a.percentAfterAbsorption !== 0 &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.minSize &&\n a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize\n );\n\n if (areaToReset) {\n areaToReset.percentAfterAbsorption =\n (this.snapshot as MtxSplitSnapshot).allInvolvedAreasSizePercent -\n all\n .filter(a => a !== areaToReset)\n .reduce((total, a) => total + a.percentAfterAbsorption, 0);\n }\n }\n\n // Now we know areas could absorb steppedOffset, time to really update sizes\n\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\n\n this.refreshStyleSizes();\n this.notify('progress', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n private stopDragging(event?: Event): void {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (this.isDragging === false) {\n return;\n }\n\n this.displayedAreas.forEach(area => area.component.unlockEvents());\n\n while (this.dragListeners.length > 0) {\n const fct = this.dragListeners.pop();\n if (fct) {\n fct();\n }\n }\n\n // Warning: Have to be before \"notify('end')\"\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\n this.isDragging = false;\n\n // If moved from starting point, notify end\n if (\n this.endPoint &&\n ((this.startPoint as MtxSplitPoint).x !== this.endPoint.x ||\n (this.startPoint as MtxSplitPoint).y !== this.endPoint.y)\n ) {\n this.notify('end', (this.snapshot as MtxSplitSnapshot).gutterNum);\n }\n\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-dragging');\n this.renderer.removeClass(\n this.gutterEls.toArray()[(this.snapshot as MtxSplitSnapshot).gutterNum - 1].nativeElement,\n 'mtx-dragged'\n );\n this.snapshot = null;\n\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n this.startPoint = null;\n this.endPoint = null;\n });\n });\n }\n\n public notify(\n type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd',\n gutterNum: number\n ): void {\n const sizes = this.getVisibleAreaSizes();\n\n if (type === 'start') {\n this.dragStart.emit({ gutterNum, sizes });\n } else if (type === 'end') {\n this.dragEnd.emit({ gutterNum, sizes });\n } else if (type === 'click') {\n this.gutterClick.emit({ gutterNum, sizes });\n } else if (type === 'dblclick') {\n this.gutterDblClick.emit({ gutterNum, sizes });\n } else if (type === 'transitionEnd') {\n if (this.transitionEndSubscriber) {\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\n }\n } else if (type === 'progress') {\n // Stay outside zone to allow users do what they want about change detection mechanism.\n this.dragProgressSubject.next({ gutterNum, sizes });\n }\n }\n\n public ngOnDestroy(): void {\n this.stopDragging();\n }\n}\n","<ng-content></ng-content>\r\n<ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div #gutterEls class=\"mtx-split-gutter\" [ngClass]=\"['mat-' + color]\"\r\n *ngIf=\"last === false\"\r\n [style.flex-basis.px]=\"gutterSize\"\r\n [style.order]=\"index * 2 + 1\"\r\n (mousedown)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (touchstart)=\"startDragging($event, index * 2 + 1, index + 1)\"\r\n (mouseup)=\"clickGutter($event, index + 1)\"\r\n (touchend)=\"clickGutter($event, index + 1)\">\r\n <div class=\"mtx-split-gutter-handle\"></div>\r\n </div>\r\n</ng-template>\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplitComponent\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MtxSplitComponent"],"mappings":"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"}
@@ -210,6 +210,14 @@ class MtxTooltip {
210
210
  });
211
211
  }
212
212
  }
213
+ /** Context to be passed to the tooltip. */
214
+ get tooltipContext() {
215
+ return this._tooltipContext;
216
+ }
217
+ set tooltipContext(value) {
218
+ this._tooltipContext = value;
219
+ this._setTooltipContext(this._tooltipContext);
220
+ }
213
221
  /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */
214
222
  get tooltipClass() {
215
223
  return this._tooltipClass;
@@ -276,6 +284,7 @@ class MtxTooltip {
276
284
  .pipe(takeUntil(this._destroyed))
277
285
  .subscribe(() => this._detach());
278
286
  this._setTooltipClass(this._tooltipClass);
287
+ this._setTooltipContext(this._tooltipContext);
279
288
  this._updateTooltipMessage();
280
289
  this._tooltipInstance.show(delay);
281
290
  }
@@ -424,6 +433,13 @@ class MtxTooltip {
424
433
  });
425
434
  }
426
435
  }
436
+ /** Updates the tooltip context */
437
+ _setTooltipContext(tooltipContext) {
438
+ if (this._tooltipInstance) {
439
+ this._tooltipInstance.tooltipContext = tooltipContext;
440
+ this._tooltipInstance._markForCheck();
441
+ }
442
+ }
427
443
  /** Updates the tooltip class */
428
444
  _setTooltipClass(tooltipClass) {
429
445
  if (this._tooltipInstance) {
@@ -542,7 +558,7 @@ class MtxTooltip {
542
558
  }
543
559
  }
544
560
  /** @nocollapse */ MtxTooltip.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTooltip, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i2.ScrollDispatcher }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i3.Platform }, { token: i4.AriaDescriber }, { token: i4.FocusMonitor }, { token: MTX_TOOLTIP_SCROLL_STRATEGY }, { token: i5.Directionality, optional: true }, { token: MTX_TOOLTIP_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
545
- /** @nocollapse */ MtxTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: MtxTooltip, selector: "[mtxTooltip]", inputs: { position: ["mtxTooltipPosition", "position"], disabled: ["mtxTooltipDisabled", "disabled"], showDelay: ["mtxTooltipShowDelay", "showDelay"], hideDelay: ["mtxTooltipHideDelay", "hideDelay"], touchGestures: ["mtxTooltipTouchGestures", "touchGestures"], message: ["mtxTooltip", "message"], tooltipClass: ["mtxTooltipClass", "tooltipClass"] }, host: { classAttribute: "mtx-tooltip-trigger" }, exportAs: ["mtxTooltip"], ngImport: i0 });
561
+ /** @nocollapse */ MtxTooltip.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: MtxTooltip, selector: "[mtxTooltip]", inputs: { position: ["mtxTooltipPosition", "position"], disabled: ["mtxTooltipDisabled", "disabled"], showDelay: ["mtxTooltipShowDelay", "showDelay"], hideDelay: ["mtxTooltipHideDelay", "hideDelay"], touchGestures: ["mtxTooltipTouchGestures", "touchGestures"], message: ["mtxTooltip", "message"], tooltipContext: ["mtxTooltipContext", "tooltipContext"], tooltipClass: ["mtxTooltipClass", "tooltipClass"] }, host: { classAttribute: "mtx-tooltip-trigger" }, exportAs: ["mtxTooltip"], ngImport: i0 });
546
562
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MtxTooltip, decorators: [{
547
563
  type: Directive,
548
564
  args: [{
@@ -580,6 +596,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
580
596
  }], message: [{
581
597
  type: Input,
582
598
  args: ['mtxTooltip']
599
+ }], tooltipContext: [{
600
+ type: Input,
601
+ args: ['mtxTooltipContext']
583
602
  }], tooltipClass: [{
584
603
  type: Input,
585
604
  args: ['mtxTooltipClass']
@@ -682,7 +701,7 @@ class TooltipComponent {
682
701
  }
683
702
  }
684
703
  /** @nocollapse */ TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i6.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
685
- /** @nocollapse */ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: TooltipComponent, selector: "mtx-tooltip-component", host: { attributes: { "aria-hidden": "true" }, listeners: { "body:click": "this._handleBodyInteraction()" }, properties: { "style.zoom": "_visibility === \"visible\" ? 1 : null" } }, ngImport: i0, template: "<div class=\"mtx-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mtx-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">\n <ng-template [ngIf]=\"message | isTemplateRef\" [ngIfElse]=\"msgStrTpl\">\n <ng-template [ngTemplateOutlet]=\"$any(message)\"></ng-template>\n </ng-template>\n <ng-template #msgStrTpl>{{message}}</ng-template>\n</div>\n", styles: [".mtx-tooltip-panel{pointer-events:none!important}.mtx-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mtx-tooltip{outline:solid 1px}.mtx-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.MtxIsTemplateRefPipe, name: "isTemplateRef" }], animations: [mtxTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
704
+ /** @nocollapse */ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: TooltipComponent, selector: "mtx-tooltip-component", host: { attributes: { "aria-hidden": "true" }, listeners: { "body:click": "this._handleBodyInteraction()" }, properties: { "style.zoom": "_visibility === \"visible\" ? 1 : null" } }, ngImport: i0, template: "<div class=\"mtx-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mtx-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">\n <ng-template [ngIf]=\"message | isTemplateRef\" [ngIfElse]=\"msgStrTpl\">\n <ng-template [ngTemplateOutlet]=\"$any(message)\"\n [ngTemplateOutletContext]=\"{ $implicit: tooltipContext }\"></ng-template>\n </ng-template>\n <ng-template #msgStrTpl>{{message}}</ng-template>\n</div>\n", styles: [".mtx-tooltip-panel{pointer-events:none!important}.mtx-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mtx-tooltip{outline:solid 1px}.mtx-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.MtxIsTemplateRefPipe, name: "isTemplateRef" }], animations: [mtxTooltipAnimations.tooltipState], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
686
705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, decorators: [{
687
706
  type: Component,
688
707
  args: [{ selector: 'mtx-tooltip-component', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, animations: [mtxTooltipAnimations.tooltipState], host: {
@@ -691,7 +710,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
691
710
  '[style.zoom]': '_visibility === "visible" ? 1 : null',
692
711
  '(body:click)': 'this._handleBodyInteraction()',
693
712
  'aria-hidden': 'true',
694
- }, template: "<div class=\"mtx-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mtx-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">\n <ng-template [ngIf]=\"message | isTemplateRef\" [ngIfElse]=\"msgStrTpl\">\n <ng-template [ngTemplateOutlet]=\"$any(message)\"></ng-template>\n </ng-template>\n <ng-template #msgStrTpl>{{message}}</ng-template>\n</div>\n", styles: [".mtx-tooltip-panel{pointer-events:none!important}.mtx-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mtx-tooltip{outline:solid 1px}.mtx-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"] }]
713
+ }, template: "<div class=\"mtx-tooltip\"\n [ngClass]=\"tooltipClass\"\n [class.mtx-tooltip-handset]=\"(_isHandset | async)?.matches\"\n [@state]=\"_visibility\"\n (@state.start)=\"_animationStart()\"\n (@state.done)=\"_animationDone($event)\">\n <ng-template [ngIf]=\"message | isTemplateRef\" [ngIfElse]=\"msgStrTpl\">\n <ng-template [ngTemplateOutlet]=\"$any(message)\"\n [ngTemplateOutletContext]=\"{ $implicit: tooltipContext }\"></ng-template>\n </ng-template>\n <ng-template #msgStrTpl>{{message}}</ng-template>\n</div>\n", styles: [".mtx-tooltip-panel{pointer-events:none!important}.mtx-tooltip{color:#fff;border-radius:4px;margin:14px;max-width:250px;padding-left:8px;padding-right:8px;overflow:hidden;text-overflow:ellipsis}.cdk-high-contrast-active .mtx-tooltip{outline:solid 1px}.mtx-tooltip-handset{margin:24px;padding-left:16px;padding-right:16px}\n"] }]
695
714
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i6.BreakpointObserver }]; } });
696
715
 
697
716
  class MtxTooltipModule {