@ng-matero/extensions 12.6.0 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/mtxColorpicker.umd.js +25 -8
- package/bundles/mtxColorpicker.umd.js.map +1 -1
- package/bundles/mtxDatetimepicker.umd.js +1 -1
- package/bundles/mtxDatetimepicker.umd.js.map +1 -1
- package/bundles/mtxLoader.umd.js +7 -4
- package/bundles/mtxLoader.umd.js.map +1 -1
- package/bundles/mtxSplit.umd.js +80 -68
- package/bundles/mtxSplit.umd.js.map +1 -1
- package/colorpicker/colorpicker-input.d.ts +3 -0
- package/colorpicker/colorpicker-toggle.d.ts +2 -3
- package/colorpicker/colorpicker.d.ts +6 -2
- package/colorpicker/mtxColorpicker.metadata.json +1 -1
- package/colorpicker/public-api.d.ts +1 -1
- package/datetimepicker/mtxDatetimepicker.metadata.json +1 -1
- package/esm2015/colorpicker/colorpicker-input.js +4 -1
- package/esm2015/colorpicker/colorpicker-toggle.js +2 -3
- package/esm2015/colorpicker/colorpicker.js +18 -7
- package/esm2015/colorpicker/public-api.js +1 -1
- package/esm2015/datetimepicker/datetimepicker-toggle.js +2 -2
- package/esm2015/loader/loader.component.js +8 -5
- package/esm2015/split/split.component.js +13 -3
- package/fesm2015/mtxColorpicker.js +21 -8
- package/fesm2015/mtxColorpicker.js.map +1 -1
- package/fesm2015/mtxDatetimepicker.js +1 -1
- package/fesm2015/mtxDatetimepicker.js.map +1 -1
- package/fesm2015/mtxLoader.js +7 -4
- package/fesm2015/mtxLoader.js.map +1 -1
- package/fesm2015/mtxSplit.js +12 -2
- package/fesm2015/mtxSplit.js.map +1 -1
- package/loader/loader.component.d.ts +4 -1
- package/loader/mtxLoader.metadata.json +1 -1
- package/package.json +1 -1
- package/split/_split-theme.scss +9 -2
- package/split/mtxSplit.metadata.json +1 -1
- package/split/split.component.d.ts +9 -1
package/fesm2015/mtxLoader.js
CHANGED
|
@@ -10,10 +10,13 @@ class MtxLoaderComponent {
|
|
|
10
10
|
this.type = 'spinner';
|
|
11
11
|
this.color = 'primary';
|
|
12
12
|
this.mode = 'indeterminate';
|
|
13
|
+
/** Only support `spinner` type */
|
|
14
|
+
this.strokeWidth = 4;
|
|
15
|
+
/** Only support `spinner` type */
|
|
16
|
+
this.diameter = 48;
|
|
17
|
+
/** Only support `progresbar` type */
|
|
18
|
+
this.bufferValue = 0;
|
|
13
19
|
this.value = 0;
|
|
14
|
-
this.strokeWidth = 4; // only support spinner
|
|
15
|
-
this.diameter = 48; // only support spinner
|
|
16
|
-
this.bufferValue = 0; // only support progresbar
|
|
17
20
|
this._loading = true;
|
|
18
21
|
this._hasBackdrop = true;
|
|
19
22
|
}
|
|
@@ -60,10 +63,10 @@ MtxLoaderComponent.propDecorators = {
|
|
|
60
63
|
type: [{ type: Input }],
|
|
61
64
|
color: [{ type: Input }],
|
|
62
65
|
mode: [{ type: Input }],
|
|
63
|
-
value: [{ type: Input }],
|
|
64
66
|
strokeWidth: [{ type: Input }],
|
|
65
67
|
diameter: [{ type: Input }],
|
|
66
68
|
bufferValue: [{ type: Input }],
|
|
69
|
+
value: [{ type: Input }],
|
|
67
70
|
loading: [{ type: Input }],
|
|
68
71
|
hasBackdrop: [{ type: Input }]
|
|
69
72
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtxLoader.js","sources":["../../../projects/extensions/loader/loader.component.ts","../../../projects/extensions/loader/loader.module.ts","../../../projects/extensions/loader/mtxLoader.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Input,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressBarMode } from '@angular/material/progress-bar';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\nexport type MtxLoaderType = 'spinner' | 'progressbar';\n\n@Component({\n selector: 'mtx-loader',\n exportAs: 'mtxLoader',\n host: {\n 'class': 'mtx-loader',\n '[class.mtx-loader-loading]': 'loading',\n },\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxLoaderComponent {\n @Input() type: MtxLoaderType = 'spinner';\n @Input() color: ThemePalette = 'primary';\n @Input() mode: ProgressSpinnerMode | ProgressBarMode = 'indeterminate';\n
|
|
1
|
+
{"version":3,"file":"mtxLoader.js","sources":["../../../projects/extensions/loader/loader.component.ts","../../../projects/extensions/loader/loader.module.ts","../../../projects/extensions/loader/mtxLoader.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n Input,\n ChangeDetectorRef,\n} from '@angular/core';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ThemePalette } from '@angular/material/core';\nimport { ProgressBarMode } from '@angular/material/progress-bar';\nimport { ProgressSpinnerMode } from '@angular/material/progress-spinner';\n\nexport type MtxLoaderType = 'spinner' | 'progressbar';\n\n@Component({\n selector: 'mtx-loader',\n exportAs: 'mtxLoader',\n host: {\n 'class': 'mtx-loader',\n '[class.mtx-loader-loading]': 'loading',\n },\n templateUrl: './loader.component.html',\n styleUrls: ['./loader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MtxLoaderComponent {\n @Input() type: MtxLoaderType = 'spinner';\n\n @Input() color: ThemePalette = 'primary';\n\n @Input() mode: ProgressSpinnerMode | ProgressBarMode = 'indeterminate';\n\n /** Only support `spinner` type */\n @Input() strokeWidth = 4;\n\n /** Only support `spinner` type */\n @Input() diameter = 48;\n\n /** Only support `progresbar` type */\n @Input() bufferValue = 0;\n\n @Input() value = 0;\n\n @Input()\n get loading(): boolean {\n return this._loading;\n }\n set loading(value: boolean) {\n this._loading = coerceBooleanProperty(value);\n }\n private _loading = true;\n\n @Input()\n get hasBackdrop(): boolean {\n return this._hasBackdrop;\n }\n set hasBackdrop(value: boolean) {\n this._hasBackdrop = coerceBooleanProperty(value);\n }\n private _hasBackdrop = true;\n\n constructor(private _changeDetectorRef: ChangeDetectorRef) {}\n\n static ngAcceptInputType_loading: BooleanInput;\n static ngAcceptInputType_hasBackdrop: BooleanInput;\n}\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\n\r\nimport { MtxLoaderComponent } from './loader.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule, MatProgressSpinnerModule, MatProgressBarModule],\r\n exports: [MtxLoaderComponent],\r\n declarations: [MtxLoaderComponent],\r\n})\r\nexport class MtxLoaderModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MA0Ba,kBAAkB;IAoC7B,YAAoB,kBAAqC;QAArC,uBAAkB,GAAlB,kBAAkB,CAAmB;QAnChD,SAAI,GAAkB,SAAS,CAAC;QAEhC,UAAK,GAAiB,SAAS,CAAC;QAEhC,SAAI,GAA0C,eAAe,CAAC;;QAG9D,gBAAW,GAAG,CAAC,CAAC;;QAGhB,aAAQ,GAAG,EAAE,CAAC;;QAGd,gBAAW,GAAG,CAAC,CAAC;QAEhB,UAAK,GAAG,CAAC,CAAC;QASX,aAAQ,GAAG,IAAI,CAAC;QAShB,iBAAY,GAAG,IAAI,CAAC;KAEiC;IAlB7D,IACI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IACD,IAAI,OAAO,CAAC,KAAc;QACxB,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC9C;IAGD,IACI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;IACD,IAAI,WAAW,CAAC,KAAc;QAC5B,IAAI,CAAC,YAAY,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAClD;;;;YA7CF,SAAS,SAAC;gBACT,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE;oBACJ,OAAO,EAAE,YAAY;oBACrB,4BAA4B,EAAE,SAAS;iBACxC;gBACD,0sBAAsC;gBAEtC,aAAa,EAAE,iBAAiB,CAAC,IAAI;gBACrC,eAAe,EAAE,uBAAuB,CAAC,MAAM;;aAChD;;;;;;;;;;YApBC,iBAAiB;;;;mBAsBhB,KAAK;oBAEL,KAAK;mBAEL,KAAK;0BAGL,KAAK;uBAGL,KAAK;0BAGL,KAAK;oBAEL,KAAK;sBAEL,KAAK;0BASL,KAAK;;;MCzCK,eAAe;;;;YAL3B,QAAQ,SAAC;gBACR,OAAO,EAAE,CAAC,YAAY,EAAE,wBAAwB,EAAE,oBAAoB,CAAC;gBACvE,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAC7B,YAAY,EAAE,CAAC,kBAAkB,CAAC;aACnC;;;ACXD;;;;;;"}
|
package/fesm2015/mtxSplit.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, NgZone, ElementRef, ChangeDetectorRef, Renderer2, Input, Output, ViewChildren, Directive, NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { mixinColor } from '@angular/material/core';
|
|
3
4
|
import { Subject, Observable } from 'rxjs';
|
|
4
5
|
import { debounceTime } from 'rxjs/operators';
|
|
5
6
|
|
|
@@ -225,6 +226,13 @@ function updateAreaSize(unit, item) {
|
|
|
225
226
|
}
|
|
226
227
|
}
|
|
227
228
|
|
|
229
|
+
// Boilerplate for applying mixins to _MtxSplitComponentBase.
|
|
230
|
+
/** @docs-private */
|
|
231
|
+
const _MtxSplitComponentBase = mixinColor(class {
|
|
232
|
+
constructor(_elementRef) {
|
|
233
|
+
this._elementRef = _elementRef;
|
|
234
|
+
}
|
|
235
|
+
});
|
|
228
236
|
/**
|
|
229
237
|
* mtx-split
|
|
230
238
|
*
|
|
@@ -254,8 +262,9 @@ function updateAreaSize(unit, item) {
|
|
|
254
262
|
* 800px <-- el.getBoundingClientRect().width
|
|
255
263
|
*
|
|
256
264
|
*/
|
|
257
|
-
class MtxSplitComponent {
|
|
265
|
+
class MtxSplitComponent extends _MtxSplitComponentBase {
|
|
258
266
|
constructor(ngZone, elRef, cdRef, renderer) {
|
|
267
|
+
super(elRef);
|
|
259
268
|
this.ngZone = ngZone;
|
|
260
269
|
this.elRef = elRef;
|
|
261
270
|
this.cdRef = cdRef;
|
|
@@ -799,7 +808,8 @@ MtxSplitComponent.decorators = [
|
|
|
799
808
|
},
|
|
800
809
|
encapsulation: ViewEncapsulation.None,
|
|
801
810
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
802
|
-
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\"\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",
|
|
811
|
+
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",
|
|
812
|
+
inputs: ['color'],
|
|
803
813
|
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"]
|
|
804
814
|
},] }
|
|
805
815
|
];
|
package/fesm2015/mtxSplit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split-pane.directive.ts","../../../projects/extensions/split/split.module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interface';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n 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 { Observable, Subscriber, Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitSnapshot,\n MtxSplitAreaSnapshot,\n MtxSplitOutputData,\n MtxSplitOutputAreaSizes,\n} from './interface';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\nimport {\n getInputPositiveNumber,\n getInputBoolean,\n isUserSizesValid,\n getAreaMinSize,\n getAreaMaxSize,\n getPointFromEvent,\n getElementPixelSize,\n getGutterSideAbsorptionCapacity,\n updateAreaSize,\n} from './utils';\n\n/**\n * mtx-split\n *\n *\n * PERCENT MODE ([unit]=\"'percent'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 20 30 20 15 15 | <-- [size]=\"x\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\n *\n *\n * PIXEL MODE ([unit]=\"'pixel'\")\n * ___________________________________________________________________________________________\n * | A [g1] B [g2] C [g3] D [g4] E |\n * |-------------------------------------------------------------------------------------------|\n * | 100 250 * 150 100 | <-- [size]=\"y\"\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\n * |___________________________________________________________________________________________|\n * 800px <-- el.getBoundingClientRect().width\n *\n */\n\n@Component({\n selector: 'mtx-split',\n exportAs: 'mtxSplit',\n host: {\n class: 'mtx-split',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n styleUrls: [`./split.component.scss`],\n templateUrl: './split.component.html',\n})\nexport class MtxSplitComponent implements AfterViewInit, OnDestroy {\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\n\n @Input() set direction(v: 'horizontal' | 'vertical') {\n this._direction = v === 'vertical' ? 'vertical' : 'horizontal';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._direction}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._direction === 'vertical' ? 'horizontal' : 'vertical'}`\n );\n\n this.build(false, false);\n }\n\n get direction(): 'horizontal' | 'vertical' {\n return this._direction;\n }\n\n ////\n\n private _unit: 'percent' | 'pixel' = 'percent';\n\n @Input() set unit(v: 'percent' | 'pixel') {\n this._unit = v === 'pixel' ? 'pixel' : 'percent';\n\n this.renderer.addClass(this.elRef.nativeElement, `mtx-split-${this._unit}`);\n this.renderer.removeClass(\n this.elRef.nativeElement,\n `mtx-split-${this._unit === 'pixel' ? 'percent' : 'pixel'}`\n );\n\n this.build(false, true);\n }\n\n get unit(): 'percent' | 'pixel' {\n return this._unit;\n }\n\n ////\n\n private _gutterSize = 4;\n\n @Input() set gutterSize(v: number) {\n this._gutterSize = getInputPositiveNumber(v, 11);\n\n this.build(false, false);\n }\n\n get gutterSize(): number {\n return this._gutterSize;\n }\n\n ////\n\n private _gutterStep = 1;\n\n @Input() set gutterStep(v: number) {\n this._gutterStep = getInputPositiveNumber(v, 1);\n }\n\n get gutterStep(): number {\n return this._gutterStep;\n }\n\n ////\n\n private _restrictMove = false;\n\n @Input() set restrictMove(v: boolean) {\n this._restrictMove = getInputBoolean(v);\n }\n\n get restrictMove(): boolean {\n return this._restrictMove;\n }\n\n ////\n\n private _useTransition = false;\n\n @Input() set useTransition(v: boolean) {\n this._useTransition = getInputBoolean(v);\n\n if (this._useTransition) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-transition');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-transition');\n }\n }\n\n get useTransition(): boolean {\n return this._useTransition;\n }\n\n ////\n\n private _disabled = false;\n\n @Input() set disabled(v: boolean) {\n this._disabled = getInputBoolean(v);\n\n if (this._disabled) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-disabled');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-disabled');\n }\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n ////\n\n private _dir: 'ltr' | 'rtl' = 'ltr';\n\n @Input() set dir(v: 'ltr' | 'rtl') {\n this._dir = v === 'rtl' ? 'rtl' : 'ltr';\n\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\n }\n\n get dir(): 'ltr' | 'rtl' {\n return this._dir;\n }\n\n ////\n\n private _gutterDblClickDuration = 0;\n\n @Input() set gutterDblClickDuration(v: number) {\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\n }\n\n get gutterDblClickDuration(): number {\n return this._gutterDblClickDuration;\n }\n\n ////\n\n @Output() dragStart = new EventEmitter<MtxSplitOutputData>(false);\n @Output() dragEnd = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterClick = new EventEmitter<MtxSplitOutputData>(false);\n @Output() gutterDblClick = new EventEmitter<MtxSplitOutputData>(false);\n\n private transitionEndSubscriber!: Subscriber<MtxSplitOutputAreaSizes>;\n @Output() get transitionEnd(): Observable<MtxSplitOutputAreaSizes> {\n return new Observable(subscriber => (this.transitionEndSubscriber = subscriber)).pipe(\n debounceTime<any>(20)\n );\n }\n\n private dragProgressSubject: Subject<MtxSplitOutputData> = new Subject();\n dragProgress$: Observable<MtxSplitOutputData> = this.dragProgressSubject.asObservable();\n\n ////\n\n private isDragging = false;\n private dragListeners: Array<() => void> = [];\n private snapshot: MtxSplitSnapshot | null = null;\n private startPoint: MtxSplitPoint | null = null;\n private endPoint: MtxSplitPoint | null = null;\n\n public readonly displayedAreas: Array<MtxSplitArea> = [];\n private readonly hidedAreas: Array<MtxSplitArea> = [];\n\n @ViewChildren('gutterEls') private gutterEls!: QueryList<ElementRef>;\n\n constructor(\n private ngZone: NgZone,\n private elRef: ElementRef,\n private cdRef: ChangeDetectorRef,\n private renderer: Renderer2\n ) {\n // To force adding default class, could be override by user @Input() or not\n this.direction = this._direction;\n }\n\n public ngAfterViewInit() {\n this.ngZone.runOutsideAngular(() => {\n // To avoid transition at first rendering\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-init'));\n });\n }\n\n private getNbGutters(): number {\n return this.displayedAreas.length === 0 ? 0 : this.displayedAreas.length - 1;\n }\n\n public addArea(component: MtxSplitPaneDirective): void {\n const newArea: MtxSplitArea = {\n component,\n order: 0,\n size: 0,\n minSize: null,\n maxSize: null,\n };\n\n if (component.visible === true) {\n this.displayedAreas.push(newArea);\n\n this.build(true, true);\n } else {\n this.hidedAreas.push(newArea);\n }\n }\n\n public removeArea(component: MtxSplitPaneDirective): void {\n if (this.displayedAreas.some(a => a.component === component)) {\n const area = this.displayedAreas.find(a => a.component === component) as MtxSplitArea;\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n\n this.build(true, true);\n } else if (this.hidedAreas.some(a => a.component === component)) {\n const area = this.hidedAreas.find(a => a.component === component) as MtxSplitArea;\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n }\n }\n\n public updateArea(\n component: MtxSplitPaneDirective,\n resetOrders: boolean,\n resetSizes: boolean\n ): void {\n if (component.visible === true) {\n this.build(resetOrders, resetSizes);\n }\n }\n\n public showArea(component: MtxSplitPaneDirective): void {\n const area = this.hidedAreas.find(a => a.component === component);\n if (area === undefined) {\n return;\n }\n\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\n this.displayedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public hideArea(comp: MtxSplitPaneDirective): void {\n const area = this.displayedAreas.find(a => a.component === comp);\n if (area === undefined) {\n return;\n }\n\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\n areas.forEach(_area => {\n _area.order = 0;\n _area.size = 0;\n });\n this.hidedAreas.push(...areas);\n\n this.build(true, true);\n }\n\n public getVisibleAreaSizes(): MtxSplitOutputAreaSizes {\n return this.displayedAreas.map(a => (a.size === null ? '*' : a.size));\n }\n\n public setVisibleAreaSizes(sizes: MtxSplitOutputAreaSizes): boolean {\n if (sizes.length !== this.displayedAreas.length) {\n return false;\n }\n\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null)) as number[];\n const isValid = isUserSizesValid(this.unit, formatedSizes);\n\n if (isValid === false) {\n return false;\n }\n\n // 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","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplitComponent\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mtxSplit.js","sources":["../../../projects/extensions/split/utils.ts","../../../projects/extensions/split/split.component.ts","../../../projects/extensions/split/split-pane.directive.ts","../../../projects/extensions/split/split.module.ts","../../../projects/extensions/split/mtxSplit.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\nimport {\n MtxSplitArea,\n MtxSplitPoint,\n MtxSplitAreaSnapshot,\n MtxSplitSideAbsorptionCapacity,\n MtxSplitAreaAbsorptionCapacity,\n} from './interface';\n\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): MtxSplitPoint | null {\n // TouchEvent\n if (\n (event as TouchEvent).changedTouches !== undefined &&\n (event as TouchEvent).changedTouches.length > 0\n ) {\n return {\n x: (event as TouchEvent).changedTouches[0].clientX,\n y: (event as TouchEvent).changedTouches[0].clientY,\n };\n }\n // MouseEvent\n 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","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\n\nimport { MtxSplitComponent } from './split.component';\nimport { getInputPositiveNumber, getInputBoolean } from './utils';\n\n@Directive({\n selector: 'mtx-split-pane, [mtx-split-pane]',\n exportAs: 'mtxSplitPane',\n})\nexport class MtxSplitPaneDirective implements OnInit, OnDestroy {\n private _order: number | null = null;\n\n @Input() set order(v: number | null) {\n this._order = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, true, false);\n }\n\n get order(): number | null {\n return this._order;\n }\n\n ////\n\n private _size: number | null = null;\n\n @Input() set size(v: number | null) {\n this._size = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get size(): number | null {\n return this._size;\n }\n\n ////\n\n private _minSize: number | null = null;\n\n @Input() set minSize(v: number | null) {\n this._minSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get minSize(): number | null {\n return this._minSize;\n }\n\n ////\n\n private _maxSize: number | null = null;\n\n @Input() set maxSize(v: number | null) {\n this._maxSize = getInputPositiveNumber(v, null);\n\n this.split.updateArea(this, false, true);\n }\n\n get maxSize(): number | null {\n return this._maxSize;\n }\n\n ////\n\n private _lockSize = false;\n\n @Input() set lockSize(v: boolean) {\n this._lockSize = getInputBoolean(v);\n\n this.split.updateArea(this, false, true);\n }\n\n get lockSize(): boolean {\n return this._lockSize;\n }\n\n ////\n\n private _visible = true;\n\n @Input() set visible(v: boolean) {\n this._visible = getInputBoolean(v);\n\n if (this._visible) {\n this.split.showArea(this);\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n } else {\n this.split.hideArea(this);\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane-hidden');\n }\n }\n\n get visible(): boolean {\n return this._visible;\n }\n\n ////\n\n private transitionListener!: () => void;\n private readonly lockListeners: Array<() => void> = [];\n\n constructor(\n private ngZone: NgZone,\n public elRef: ElementRef,\n private renderer: Renderer2,\n private split: MtxSplitComponent\n ) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-split-pane');\n }\n\n public ngOnInit(): void {\n this.split.addArea(this);\n\n this.ngZone.runOutsideAngular(() => {\n this.transitionListener = this.renderer.listen(\n this.elRef.nativeElement,\n 'transitionend',\n (event: TransitionEvent) => {\n // Limit only flex-basis transition to trigger the event\n if (event.propertyName === 'flex-basis') {\n this.split.notify('transitionEnd', -1);\n }\n }\n );\n });\n }\n\n public setStyleOrder(value: number): void {\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\n }\n\n public setStyleFlex(\n grow: number,\n shrink: number,\n basis: string,\n isMin: boolean,\n isMax: boolean\n ): void {\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\n\n if (isMin === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-min');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-min');\n }\n\n if (isMax === true) {\n this.renderer.addClass(this.elRef.nativeElement, 'mtx-max');\n } else {\n this.renderer.removeClass(this.elRef.nativeElement, 'mtx-max');\n }\n }\n\n public lockEvents(): void {\n this.ngZone.runOutsideAngular(() => {\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false)\n );\n this.lockListeners.push(\n this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false)\n );\n });\n }\n\n public unlockEvents(): void {\n while (this.lockListeners.length > 0) {\n const fct = this.lockListeners.pop();\n if (fct) {\n fct();\n }\n }\n }\n\n public ngOnDestroy(): void {\n this.unlockEvents();\n\n if (this.transitionListener) {\n this.transitionListener();\n }\n\n this.split.removeArea(this);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MtxSplitComponent } from './split.component';\nimport { MtxSplitPaneDirective } from './split-pane.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MtxSplitComponent, MtxSplitPaneDirective],\n exports: [MtxSplitComponent, MtxSplitPaneDirective],\n})\nexport class MtxSplitModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,13 @@ export declare class MtxLoaderComponent {
|
|
|
9
9
|
type: MtxLoaderType;
|
|
10
10
|
color: ThemePalette;
|
|
11
11
|
mode: ProgressSpinnerMode | ProgressBarMode;
|
|
12
|
-
|
|
12
|
+
/** Only support `spinner` type */
|
|
13
13
|
strokeWidth: number;
|
|
14
|
+
/** Only support `spinner` type */
|
|
14
15
|
diameter: number;
|
|
16
|
+
/** Only support `progresbar` type */
|
|
15
17
|
bufferValue: number;
|
|
18
|
+
value: number;
|
|
16
19
|
get loading(): boolean;
|
|
17
20
|
set loading(value: boolean);
|
|
18
21
|
private _loading;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"MtxLoaderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":12},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":8,"character":26},{"__symbolic":"reference","module":"@angular/material/progress-bar","name":"MatProgressBarModule","line":8,"character":52}],"exports":[{"__symbolic":"reference","name":"MtxLoaderComponent"}],"declarations":[{"__symbolic":"reference","name":"MtxLoaderComponent"}]}]}],"members":{}},"MtxLoaderType":{"__symbolic":"interface"},"MtxLoaderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"mtx-loader","exportAs":"mtxLoader","host":{"class":"mtx-loader","[class.mtx-loader-loading]":"loading","$quoted$":["class","[class.mtx-loader-loading]"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":23,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":24,"character":19},"member":"OnPush"},"template":"<div class=\"mtx-loader-backdrop\" *ngIf=\"loading && hasBackdrop\"></div>\r\n<div class=\"mtx-loader-main\" *ngIf=\"loading\">\r\n <mat-spinner *ngIf=\"type==='spinner'\"\r\n [color]=\"color\"\r\n [strokeWidth]=\"strokeWidth\"\r\n [diameter]=\"diameter\"\r\n [mode]=\"$any(mode)\"\r\n [value]=\"value\">\r\n </mat-spinner>\r\n\r\n <mat-progress-bar *ngIf=\"type==='progressbar'\"\r\n [color]=\"color\"\r\n [mode]=\"$any(mode)\"\r\n [value]=\"value\"\r\n [bufferValue]=\"bufferValue\">\r\n </mat-progress-bar>\r\n</div>\r\n<ng-content></ng-content>\r\n","styles":[".mtx-loader{position:relative;display:block;width:100%;height:100%}.mtx-loader-main{position:absolute;top:0;left:0;z-index:2;display:flex;justify-content:center;align-items:center;width:100%;height:100%}.mtx-loader-main .mat-spinner{position:relative}.mtx-loader-main .mat-progress-bar{position:absolute;top:0;left:0;width:100%}.mtx-loader-backdrop{display:block;position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;content:\"\"}\n"]}]}],"members":{"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"MtxLoaderModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":7,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":8,"character":12},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":8,"character":26},{"__symbolic":"reference","module":"@angular/material/progress-bar","name":"MatProgressBarModule","line":8,"character":52}],"exports":[{"__symbolic":"reference","name":"MtxLoaderComponent"}],"declarations":[{"__symbolic":"reference","name":"MtxLoaderComponent"}]}]}],"members":{}},"MtxLoaderType":{"__symbolic":"interface"},"MtxLoaderComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"mtx-loader","exportAs":"mtxLoader","host":{"class":"mtx-loader","[class.mtx-loader-loading]":"loading","$quoted$":["class","[class.mtx-loader-loading]"]},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":23,"character":17},"member":"None"},"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":24,"character":19},"member":"OnPush"},"template":"<div class=\"mtx-loader-backdrop\" *ngIf=\"loading && hasBackdrop\"></div>\r\n<div class=\"mtx-loader-main\" *ngIf=\"loading\">\r\n <mat-spinner *ngIf=\"type==='spinner'\"\r\n [color]=\"color\"\r\n [strokeWidth]=\"strokeWidth\"\r\n [diameter]=\"diameter\"\r\n [mode]=\"$any(mode)\"\r\n [value]=\"value\">\r\n </mat-spinner>\r\n\r\n <mat-progress-bar *ngIf=\"type==='progressbar'\"\r\n [color]=\"color\"\r\n [mode]=\"$any(mode)\"\r\n [value]=\"value\"\r\n [bufferValue]=\"bufferValue\">\r\n </mat-progress-bar>\r\n</div>\r\n<ng-content></ng-content>\r\n","styles":[".mtx-loader{position:relative;display:block;width:100%;height:100%}.mtx-loader-main{position:absolute;top:0;left:0;z-index:2;display:flex;justify-content:center;align-items:center;width:100%;height:100%}.mtx-loader-main .mat-spinner{position:relative}.mtx-loader-main .mat-progress-bar{position:absolute;top:0;left:0;width:100%}.mtx-loader-backdrop{display:block;position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;content:\"\"}\n"]}]}],"members":{"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":27,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"strokeWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"diameter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"bufferValue":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"value":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":42,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"hasBackdrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":62,"character":42}]}]}}},"origins":{"MtxLoaderModule":"./loader.module","MtxLoaderType":"./loader.component","MtxLoaderComponent":"./loader.component"},"importAs":"@ng-matero/extensions/loader"}
|
package/package.json
CHANGED
package/split/_split-theme.scss
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
|
|
4
4
|
@mixin color($config-or-theme) {
|
|
5
5
|
$config: theming.get-color-config($config-or-theme);
|
|
6
|
-
$accent: map.get($config, accent);
|
|
7
6
|
$foreground: map.get($config, foreground);
|
|
8
7
|
|
|
9
8
|
.mtx-split {
|
|
@@ -11,7 +10,15 @@
|
|
|
11
10
|
background-color: rgba(theming.get-color-from-palette($foreground, divider), .12);
|
|
12
11
|
|
|
13
12
|
&:hover {
|
|
14
|
-
background-color: theming.get-color-from-palette($
|
|
13
|
+
background-color: theming.get-color-from-palette(map.get($config, primary), text);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
&.mat-accent:hover {
|
|
17
|
+
background-color: theming.get-color-from-palette(map.get($config, accent), text);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
&.mat-warn:hover {
|
|
21
|
+
background-color: theming.get-color-from-palette(map.get($config, warn), text);
|
|
15
22
|
}
|
|
16
23
|
}
|
|
17
24
|
}
|