UNPKG

77.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"angular-split.js","sources":["ng://angular-split/lib/utils.ts","ng://angular-split/lib/component/split.component.ts","ng://angular-split/lib/directive/splitArea.directive.ts","ng://angular-split/lib/module.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\r\n\r\nimport { IArea, IPoint, IAreaSnapshot, ISplitSideAbsorptionCapacity, IAreaAbsorptionCapacity } from './interface';\r\n\r\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): IPoint {\r\n // TouchEvent\r\n if((<TouchEvent> event).changedTouches !== undefined && (<TouchEvent> event).changedTouches.length > 0) {\r\n return {\r\n x: (<TouchEvent> event).changedTouches[0].clientX,\r\n y: (<TouchEvent> event).changedTouches[0].clientY,\r\n };\r\n }\r\n // MouseEvent\r\n else if((<MouseEvent> event).clientX !== undefined && (<MouseEvent> event).clientY !== undefined) {\r\n return {\r\n x: (<MouseEvent> event).clientX,\r\n y: (<MouseEvent> event).clientY,\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function getElementPixelSize(elRef: ElementRef, direction: 'horizontal' | 'vertical'): number {\r\n const rect = (<HTMLElement> elRef.nativeElement).getBoundingClientRect();\r\n\r\n return (direction === 'horizontal') ? rect.width : rect.height;\r\n}\r\n\r\nexport function getInputBoolean(v: any): boolean {\r\n return (typeof(v) === 'boolean') ? v : (v === 'false' ? false : true);\r\n}\r\n\r\nexport function getInputPositiveNumber<T>(v: any, defaultValue: T): number | T {\r\n if(v === null || v === undefined) return defaultValue;\r\n\r\n v = Number(v);\r\n return !isNaN(v) && v >= 0 ? v : defaultValue;\r\n}\r\n\r\nexport function isUserSizesValid(unit: 'percent' | 'pixel', sizes: Array<number | null>): boolean {\r\n // All sizes have to be not null and total should be 100\r\n if(unit === 'percent') {\r\n const total = sizes.reduce((total, s) => s !== null ? total + s : total, 0);\r\n return sizes.every(s => s !== null) && total > 99.9 && total < 100.1;\r\n }\r\n \r\n // A size at null is mandatory but only one.\r\n if(unit === 'pixel') {\r\n return sizes.filter(s => s === null).length === 1;\r\n }\r\n}\r\n\r\nexport function getAreaMinSize(a: IArea): null | number {\r\n if(a.size === null) {\r\n return null;\r\n }\r\n \r\n if(a.component.lockSize === true) {\r\n return a.size;\r\n }\r\n\r\n if(a.component.minSize === null) {\r\n return null;\r\n }\r\n\r\n if(a.component.minSize > a.size) {\r\n return a.size;\r\n }\r\n\r\n return a.component.minSize;\r\n}\r\n\r\nexport function getAreaMaxSize(a: IArea): null | number {\r\n if(a.size === null) {\r\n return null;\r\n }\r\n \r\n if(a.component.lockSize === true) {\r\n return a.size;\r\n }\r\n\r\n if(a.component.maxSize === null) {\r\n return null;\r\n }\r\n\r\n if(a.component.maxSize < a.size) {\r\n return a.size;\r\n }\r\n\r\n return a.component.maxSize;\r\n}\r\n\r\nexport function getGutterSideAbsorptionCapacity(unit: 'percent' | 'pixel', sideAreas: Array<IAreaSnapshot>, pixels: number, allAreasSizePixel: number): ISplitSideAbsorptionCapacity {\r\n return sideAreas.reduce((acc, area) => {\r\n const res = getAreaAbsorptionCapacity(unit, area, acc.remain, allAreasSizePixel);\r\n acc.list.push(res);\r\n acc.remain = res.pixelRemain;\r\n return acc;\r\n }, {remain: pixels, list: []});\r\n}\r\n\r\nfunction getAreaAbsorptionCapacity(unit: 'percent' | 'pixel', areaSnapshot: IAreaSnapshot, pixels: number, allAreasSizePixel: number): IAreaAbsorptionCapacity {\r\n // No pain no gain\r\n if(pixels === 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: 0,\r\n percentAfterAbsorption: areaSnapshot.sizePercentAtStart,\r\n pixelRemain: 0,\r\n };\r\n }\r\n \r\n // Area start at zero and need to be reduced, not possible\r\n if(areaSnapshot.sizePixelAtStart === 0 && pixels < 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: 0,\r\n percentAfterAbsorption: 0,\r\n pixelRemain: pixels,\r\n };\r\n }\r\n \r\n if(unit === 'percent') {\r\n return getAreaAbsorptionCapacityPercent(areaSnapshot, pixels, allAreasSizePixel);\r\n }\r\n \r\n\tif(unit === 'pixel') {\r\n return getAreaAbsorptionCapacityPixel(areaSnapshot, pixels, allAreasSizePixel);\r\n }\r\n}\r\n\r\nfunction getAreaAbsorptionCapacityPercent(areaSnapshot: IAreaSnapshot, pixels: number, allAreasSizePixel: number): IAreaAbsorptionCapacity {\r\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\r\n const tempPercentSize = tempPixelSize / allAreasSizePixel * 100;\r\n \r\n // ENLARGE AREA\r\n \r\n if(pixels > 0) {\r\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels \r\n if(areaSnapshot.area.maxSize !== null && tempPercentSize > areaSnapshot.area.maxSize) {\r\n // Use area.area.maxSize as newPercentSize and return calculate pixels remaining\r\n const maxSizePixel = areaSnapshot.area.maxSize / 100 * allAreasSizePixel;\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: maxSizePixel,\r\n percentAfterAbsorption: areaSnapshot.area.maxSize,\r\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - maxSizePixel\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: tempPercentSize > 100 ? 100 : tempPercentSize,\r\n pixelRemain: 0\r\n };\r\n }\r\n\r\n // REDUCE AREA\r\n \r\n else if(pixels < 0) {\r\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels \r\n if(areaSnapshot.area.minSize !== null && tempPercentSize < areaSnapshot.area.minSize) {\r\n // Use area.area.minSize as newPercentSize and return calculate pixels remaining\r\n const minSizePixel = areaSnapshot.area.minSize / 100 * allAreasSizePixel;\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: minSizePixel,\r\n percentAfterAbsorption: areaSnapshot.area.minSize,\r\n pixelRemain: areaSnapshot.sizePixelAtStart + pixels - minSizePixel\r\n };\r\n }\r\n // If reduced under zero > return remaining pixels\r\n else if(tempPercentSize < 0) {\r\n // Use 0 as newPercentSize and return calculate pixels remaining\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: 0,\r\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: tempPercentSize,\r\n pixelRemain: 0\r\n };\r\n }\r\n}\r\n\r\nfunction getAreaAbsorptionCapacityPixel(areaSnapshot: IAreaSnapshot, pixels: number, containerSizePixel: number): IAreaAbsorptionCapacity {\r\n const tempPixelSize = areaSnapshot.sizePixelAtStart + pixels;\r\n \r\n // ENLARGE AREA\r\n\r\n if(pixels > 0) {\r\n // If maxSize & newSize bigger than it > absorb to max and return remaining pixels \r\n if(areaSnapshot.area.maxSize !== null && tempPixelSize > areaSnapshot.area.maxSize) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: areaSnapshot.area.maxSize - areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: tempPixelSize - areaSnapshot.area.maxSize\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: 0\r\n };\r\n }\r\n\r\n // REDUCE AREA\r\n \r\n else if(pixels < 0) {\r\n // If minSize & newSize smaller than it > absorb to min and return remaining pixels \r\n if(areaSnapshot.area.minSize !== null && tempPixelSize < areaSnapshot.area.minSize) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: areaSnapshot.area.minSize + pixels - tempPixelSize,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: tempPixelSize - areaSnapshot.area.minSize\r\n };\r\n }\r\n // If reduced under zero > return remaining pixels\r\n else if(tempPixelSize < 0) {\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: -areaSnapshot.sizePixelAtStart,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: pixels + areaSnapshot.sizePixelAtStart\r\n };\r\n }\r\n return {\r\n areaSnapshot,\r\n pixelAbsorb: pixels,\r\n percentAfterAbsorption: -1,\r\n pixelRemain: 0\r\n };\r\n }\r\n}\r\n\r\nexport function updateAreaSize(unit: 'percent' | 'pixel', item: IAreaAbsorptionCapacity) {\r\n \r\n if(unit === 'percent') {\r\n item.areaSnapshot.area.size = item.percentAfterAbsorption;\r\n }\r\n else if(unit === 'pixel') {\r\n // Update size except for the wildcard size area\r\n if(item.areaSnapshot.area.size !== null) {\r\n item.areaSnapshot.area.size = item.areaSnapshot.sizePixelAtStart + item.pixelAbsorb;\r\n }\r\n }\r\n}","import { Component, Input, Output, ChangeDetectionStrategy, ChangeDetectorRef, Renderer2, AfterViewInit, OnDestroy, ElementRef, NgZone, ViewChildren, QueryList, EventEmitter } from '@angular/core';\r\nimport { Observable, Subscriber, Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IArea, IPoint, ISplitSnapshot, IAreaSnapshot, IOutputData, IOutputAreaSizes } from '../interface';\r\nimport { SplitAreaDirective } from '../directive/splitArea.directive';\r\nimport { getInputPositiveNumber, getInputBoolean, isUserSizesValid, getAreaMinSize, getAreaMaxSize, getPointFromEvent, getElementPixelSize, getGutterSideAbsorptionCapacity, updateAreaSize } from '../utils';\r\n\r\n/**\r\n * angular-split\r\n * \r\n * \r\n * PERCENT MODE ([unit]=\"'percent'\")\r\n * ___________________________________________________________________________________________\r\n * | A [g1] B [g2] C [g3] D [g4] E |\r\n * |-------------------------------------------------------------------------------------------|\r\n * | 20 30 20 15 15 | <-- [size]=\"x\"\r\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\r\n * |calc(20% - 8px) calc(30% - 12px) calc(20% - 8px) calc(15% - 6px) calc(15% - 6px)| <-- CSS flex-basis property (with flex-grow&shrink at 0)\r\n * | 152px 228px 152px 114px 114px | <-- el.getBoundingClientRect().width\r\n * |___________________________________________________________________________________________|\r\n * 800px <-- el.getBoundingClientRect().width\r\n * flex-basis = calc( { area.size }% - { area.size/100 * nbGutter*gutterSize }px );\r\n * \r\n * \r\n * PIXEL MODE ([unit]=\"'pixel'\")\r\n * ___________________________________________________________________________________________\r\n * | A [g1] B [g2] C [g3] D [g4] E | \r\n * |-------------------------------------------------------------------------------------------|\r\n * | 100 250 * 150 100 | <-- [size]=\"y\"\r\n * | 10px 10px 10px 10px | <-- [gutterSize]=\"10\"\r\n * | 0 0 100px 0 0 250px 1 1 auto 0 0 150px 0 0 100px | <-- CSS flex property (flex-grow/flex-shrink/flex-basis)\r\n * | 100px 250px 200px 150px 100px | <-- el.getBoundingClientRect().width\r\n * |___________________________________________________________________________________________|\r\n * 800px <-- el.getBoundingClientRect().width\r\n * \r\n */\r\n\r\n@Component({\r\n selector: 'as-split',\r\n exportAs: 'asSplit',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n styleUrls: [`./split.component.scss`],\r\n template: `\r\n <ng-content></ng-content>\r\n <ng-template ngFor [ngForOf]=\"displayedAreas\" let-index=\"index\" let-last=\"last\">\r\n <div *ngIf=\"last === false\" \r\n #gutterEls\r\n class=\"as-split-gutter\"\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=\"as-split-gutter-icon\"></div>\r\n </div>\r\n </ng-template>`,\r\n})\r\nexport class SplitComponent implements AfterViewInit, OnDestroy {\r\n\r\n private _direction: 'horizontal' | 'vertical' = 'horizontal';\r\n\r\n @Input() set direction(v: 'horizontal' | 'vertical') {\r\n this._direction = (v === 'vertical') ? 'vertical' : 'horizontal';\r\n \r\n this.renderer.addClass(this.elRef.nativeElement, `as-${ this._direction }`);\r\n this.renderer.removeClass(this.elRef.nativeElement, `as-${ (this._direction === 'vertical') ? 'horizontal' : 'vertical' }`);\r\n \r\n this.build(false, false);\r\n }\r\n \r\n get direction(): 'horizontal' | 'vertical' {\r\n return this._direction;\r\n }\r\n \r\n ////\r\n\r\n private _unit: 'percent' | 'pixel' = 'percent';\r\n\r\n @Input() set unit(v: 'percent' | 'pixel') {\r\n this._unit = (v === 'pixel') ? 'pixel' : 'percent';\r\n \r\n this.renderer.addClass(this.elRef.nativeElement, `as-${ this._unit }`);\r\n this.renderer.removeClass(this.elRef.nativeElement, `as-${ (this._unit === 'pixel') ? 'percent' : 'pixel' }`);\r\n \r\n this.build(false, true);\r\n }\r\n \r\n get unit(): 'percent' | 'pixel' {\r\n return this._unit;\r\n }\r\n \r\n ////\r\n\r\n private _gutterSize: number = 11;\r\n\r\n @Input() set gutterSize(v: number | null) {\r\n this._gutterSize = getInputPositiveNumber(v, 11);\r\n\r\n this.build(false, false);\r\n }\r\n \r\n get gutterSize(): number {\r\n return this._gutterSize;\r\n }\r\n \r\n ////\r\n\r\n private _gutterStep: number = 1;\r\n\r\n @Input() set gutterStep(v: number) {\r\n this._gutterStep = getInputPositiveNumber(v, 1);\r\n }\r\n \r\n get gutterStep(): number {\r\n return this._gutterStep;\r\n }\r\n \r\n ////\r\n\r\n private _restrictMove: boolean = false;\r\n\r\n @Input() set restrictMove(v: boolean) {\r\n this._restrictMove = getInputBoolean(v);\r\n }\r\n \r\n get restrictMove(): boolean {\r\n return this._restrictMove;\r\n }\r\n \r\n ////\r\n\r\n private _useTransition: boolean = false;\r\n\r\n @Input() set useTransition(v: boolean) {\r\n this._useTransition = getInputBoolean(v);\r\n\r\n if(this._useTransition) this.renderer.addClass(this.elRef.nativeElement, 'as-transition');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'as-transition');\r\n }\r\n \r\n get useTransition(): boolean {\r\n return this._useTransition;\r\n }\r\n \r\n ////\r\n\r\n private _disabled: boolean = false;\r\n \r\n @Input() set disabled(v: boolean) {\r\n this._disabled = getInputBoolean(v);\r\n\r\n if(this._disabled) this.renderer.addClass(this.elRef.nativeElement, 'as-disabled');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'as-disabled');\r\n }\r\n \r\n get disabled(): boolean {\r\n return this._disabled;\r\n }\r\n\r\n ////\r\n\r\n private _dir: 'ltr' | 'rtl' = 'ltr';\r\n \r\n @Input() set dir(v: 'ltr' | 'rtl') {\r\n this._dir = (v === 'rtl') ? 'rtl' : 'ltr';\r\n \r\n this.renderer.setAttribute(this.elRef.nativeElement, 'dir', this._dir);\r\n }\r\n \r\n get dir(): 'ltr' | 'rtl' {\r\n return this._dir;\r\n }\r\n \r\n ////\r\n\r\n private _gutterDblClickDuration: number = 0;\r\n\r\n @Input() set gutterDblClickDuration(v: number) {\r\n this._gutterDblClickDuration = getInputPositiveNumber(v, 0);\r\n }\r\n \r\n get gutterDblClickDuration(): number {\r\n return this._gutterDblClickDuration;\r\n }\r\n\r\n ////\r\n\r\n @Output() dragStart = new EventEmitter<IOutputData>(false)\r\n @Output() dragEnd = new EventEmitter<IOutputData>(false)\r\n @Output() gutterClick = new EventEmitter<IOutputData>(false)\r\n @Output() gutterDblClick = new EventEmitter<IOutputData>(false)\r\n\r\n private transitionEndSubscriber: Subscriber<IOutputAreaSizes>\r\n @Output() get transitionEnd(): Observable<IOutputAreaSizes> {\r\n return new Observable(subscriber => this.transitionEndSubscriber = subscriber).pipe(\r\n debounceTime<IOutputAreaSizes>(20)\r\n );\r\n }\r\n \r\n private dragProgressSubject: Subject<IOutputData> = new Subject();\r\n dragProgress$: Observable<IOutputData> = this.dragProgressSubject.asObservable();\r\n\r\n ////\r\n\r\n private isDragging: boolean = false;\r\n private dragListeners: Array<Function> = [];\r\n private snapshot: ISplitSnapshot | null = null;\r\n private startPoint: IPoint | null = null;\r\n private endPoint: IPoint | null = null;\r\n\r\n public readonly displayedAreas: Array<IArea> = [];\r\n private readonly hidedAreas: Array<IArea> = [];\r\n\r\n @ViewChildren('gutterEls') private gutterEls: QueryList<ElementRef>;\r\n\r\n constructor(private ngZone: NgZone,\r\n private elRef: ElementRef,\r\n private cdRef: ChangeDetectorRef,\r\n private renderer: Renderer2) {\r\n // To force adding default class, could be override by user @Input() or not\r\n this.direction = this._direction;\r\n }\r\n\r\n public ngAfterViewInit() {\r\n this.ngZone.runOutsideAngular(() => {\r\n // To avoid transition at first rendering\r\n setTimeout(() => this.renderer.addClass(this.elRef.nativeElement, 'as-init'));\r\n });\r\n }\r\n \r\n private getNbGutters(): number {\r\n return (this.displayedAreas.length === 0) ? 0 : this.displayedAreas.length - 1;\r\n }\r\n\r\n public addArea(component: SplitAreaDirective): void {\r\n const newArea: IArea = {\r\n component, \r\n order: 0, \r\n size: 0,\r\n minSize: null,\r\n maxSize: null,\r\n };\r\n\r\n if(component.visible === true) {\r\n this.displayedAreas.push(newArea);\r\n\r\n this.build(true, true);\r\n }\r\n else {\r\n this.hidedAreas.push(newArea);\r\n }\r\n }\r\n\r\n public removeArea(component: SplitAreaDirective): void {\r\n if(this.displayedAreas.some(a => a.component === component)) {\r\n const area = this.displayedAreas.find(a => a.component === component);\r\n this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\r\n\r\n this.build(true, true);\r\n }\r\n else if(this.hidedAreas.some(a => a.component === component)) {\r\n const area = this.hidedAreas.find(a => a.component === component);\r\n this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\r\n }\r\n }\r\n\r\n public updateArea(component: SplitAreaDirective, resetOrders: boolean, resetSizes: boolean): void {\r\n if(component.visible === true) {\r\n this.build(resetOrders, resetSizes);\r\n }\r\n }\r\n\r\n public showArea(component: SplitAreaDirective): void {\r\n const area = this.hidedAreas.find(a => a.component === component);\r\n if(area === undefined) {\r\n return;\r\n }\r\n\r\n const areas = this.hidedAreas.splice(this.hidedAreas.indexOf(area), 1);\r\n this.displayedAreas.push(...areas);\r\n\r\n this.build(true, true);\r\n }\r\n\r\n public hideArea(comp: SplitAreaDirective): void {\r\n const area = this.displayedAreas.find(a => a.component === comp);\r\n if(area === undefined) {\r\n return;\r\n }\r\n\r\n const areas = this.displayedAreas.splice(this.displayedAreas.indexOf(area), 1);\r\n areas.forEach(area => {\r\n area.order = 0;\r\n area.size = 0;\r\n })\r\n this.hidedAreas.push(...areas);\r\n\r\n this.build(true, true);\r\n }\r\n\r\n public getVisibleAreaSizes(): IOutputAreaSizes {\r\n return this.displayedAreas.map(a => a.size === null ? '*' : a.size);\r\n }\r\n\r\n public setVisibleAreaSizes(sizes: IOutputAreaSizes): boolean {\r\n if(sizes.length !== this.displayedAreas.length) {\r\n return false;\r\n }\r\n\r\n const formatedSizes = sizes.map(s => getInputPositiveNumber(s, null));\r\n const isValid = isUserSizesValid(this.unit, formatedSizes);\r\n\r\n if(isValid === false) {\r\n return false;\r\n }\r\n\r\n // @ts-ignore\r\n this.displayedAreas.forEach((area, i) => area.component._size = formatedSizes[i]);\r\n\r\n this.build(false, true);\r\n return true;\r\n }\r\n\r\n private build(resetOrders: boolean, resetSizes: boolean): void {\r\n this.stopDragging();\r\n\r\n // ¤ AREAS ORDER\r\n \r\n if(resetOrders === true) {\r\n\r\n // If user provided 'order' for each area, use it to sort them.\r\n if(this.displayedAreas.every(a => a.component.order !== null)) {\r\n this.displayedAreas.sort((a, b) => (<number> a.component.order) - (<number> b.component.order));\r\n }\r\n \r\n // Then set real order with multiples of 2, numbers between will be used by gutters.\r\n this.displayedAreas.forEach((area, i) => {\r\n area.order = i * 2;\r\n area.component.setStyleOrder(area.order);\r\n });\r\n }\r\n\r\n // ¤ AREAS SIZE\r\n \r\n if(resetSizes === true) {\r\n const useUserSizes = isUserSizesValid(this.unit, this.displayedAreas.map(a => a.component.size));\r\n\r\n switch(this.unit) {\r\n case 'percent': {\r\n const defaultSize = 100 / this.displayedAreas.length;\r\n \r\n this.displayedAreas.forEach(area => {\r\n area.size = useUserSizes ? <number> area.component.size : defaultSize;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n });\r\n break;\r\n }\r\n case 'pixel': {\r\n if(useUserSizes) {\r\n this.displayedAreas.forEach(area => {\r\n area.size = area.component.size;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n });\r\n }\r\n else {\r\n const wildcardSizeAreas = this.displayedAreas.filter(a => a.component.size === null);\r\n \r\n // No wildcard area > Need to select one arbitrarily > first\r\n if(wildcardSizeAreas.length === 0 && this.displayedAreas.length > 0) {\r\n\r\n this.displayedAreas.forEach((area, i) => {\r\n area.size = (i === 0) ? null : area.component.size;\r\n area.minSize = (i === 0) ? null : getAreaMinSize(area);\r\n area.maxSize = (i === 0) ? null : getAreaMaxSize(area);\r\n });\r\n }\r\n // More than one wildcard area > Need to keep only one arbitrarly > first\r\n else if(wildcardSizeAreas.length > 1) {\r\n\r\n let alreadyGotOne = false;\r\n this.displayedAreas.forEach(area => {\r\n if(area.component.size === null) {\r\n if(alreadyGotOne === false) {\r\n area.size = null;\r\n area.minSize = null;\r\n area.maxSize = null;\r\n alreadyGotOne = true;\r\n }\r\n else {\r\n area.size = 100;\r\n area.minSize = null;\r\n area.maxSize = null;\r\n }\r\n }\r\n else {\r\n area.size = area.component.size;\r\n area.minSize = getAreaMinSize(area);\r\n area.maxSize = getAreaMaxSize(area);\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n this.refreshStyleSizes();\r\n this.cdRef.markForCheck();\r\n }\r\n\r\n private refreshStyleSizes(): void {\r\n ///////////////////////////////////////////\r\n // PERCENT MODE\r\n if(this.unit === 'percent') {\r\n // Only one area > flex-basis 100%\r\n if(this.displayedAreas.length === 1) {\r\n this.displayedAreas[0].component.setStyleFlex(0, 0, `100%`, false, false);\r\n }\r\n // Multiple areas > use each percent basis\r\n else {\r\n const sumGutterSize = this.getNbGutters() * this.gutterSize;\r\n \r\n this.displayedAreas.forEach(area => {\r\n area.component.setStyleFlex(\r\n 0, 0, `calc( ${ area.size }% - ${ <number> area.size / 100 * sumGutterSize }px )`,\r\n (area.minSize !== null && area.minSize === area.size) ? true : false,\r\n (area.maxSize !== null && area.maxSize === area.size) ? true : false,\r\n );\r\n });\r\n } \r\n }\r\n ///////////////////////////////////////////\r\n // PIXEL MODE\r\n else if(this.unit === 'pixel') {\r\n this.displayedAreas.forEach(area => {\r\n // Area with wildcard size\r\n if(area.size === null) {\r\n if(this.displayedAreas.length === 1) {\r\n area.component.setStyleFlex(1, 1, `100%`, false, false);\r\n }\r\n else {\r\n area.component.setStyleFlex(1, 1, `auto`, false, false);\r\n }\r\n }\r\n // Area with pixel size\r\n else {\r\n // Only one area > flex-basis 100%\r\n if(this.displayedAreas.length === 1) {\r\n area.component.setStyleFlex(0, 0, `100%`, false, false);\r\n }\r\n // Multiple areas > use each pixel basis\r\n else {\r\n area.component.setStyleFlex(\r\n 0, 0, `${ area.size }px`,\r\n (area.minSize !== null && area.minSize === area.size) ? true : false,\r\n (area.maxSize !== null && area.maxSize === area.size) ? true : false,\r\n );\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n _clickTimeout: number | null = null\r\n\r\n public clickGutter(event: MouseEvent | TouchEvent, gutterNum: number): void {\r\n const tempPoint = getPointFromEvent(event);\r\n\r\n // Be sure mouseup/touchend happened at same point as mousedown/touchstart to trigger click/dblclick\r\n if(this.startPoint && this.startPoint.x === tempPoint.x && this.startPoint.y === tempPoint.y) {\r\n\r\n // If timeout in progress and new click > clearTimeout & dblClickEvent\r\n if(this._clickTimeout !== null) {\r\n window.clearTimeout(this._clickTimeout);\r\n this._clickTimeout = null;\r\n this.notify('dblclick', gutterNum);\r\n this.stopDragging();\r\n }\r\n // Else start timeout to call clickEvent at end\r\n else {\r\n this._clickTimeout = window.setTimeout(() => {\r\n this._clickTimeout = null;\r\n this.notify('click', gutterNum);\r\n this.stopDragging();\r\n }, this.gutterDblClickDuration);\r\n }\r\n }\r\n }\r\n\r\n public startDragging(event: MouseEvent | TouchEvent, gutterOrder: number, gutterNum: number): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.startPoint = getPointFromEvent(event);\r\n if(this.startPoint === null || this.disabled === true) {\r\n return;\r\n }\r\n\r\n this.snapshot = {\r\n gutterNum,\r\n lastSteppedOffset: 0,\r\n allAreasSizePixel: getElementPixelSize(this.elRef, this.direction) - this.getNbGutters() * this.gutterSize,\r\n allInvolvedAreasSizePercent: 100,\r\n areasBeforeGutter: [],\r\n areasAfterGutter: [],\r\n };\r\n\r\n this.displayedAreas.forEach(area => {\r\n const areaSnapshot: IAreaSnapshot = {\r\n area,\r\n sizePixelAtStart: getElementPixelSize(area.component.elRef, this.direction),\r\n sizePercentAtStart: (this.unit === 'percent') ? area.size : -1 // If pixel mode, anyway, will not be used.\r\n };\r\n\r\n if(area.order < gutterOrder) {\r\n if(this.restrictMove === true) {\r\n this.snapshot.areasBeforeGutter = [areaSnapshot];\r\n }\r\n else {\r\n this.snapshot.areasBeforeGutter.unshift(areaSnapshot);\r\n }\r\n }\r\n else if(area.order > gutterOrder) {\r\n if(this.restrictMove === true) {\r\n if(this.snapshot.areasAfterGutter.length === 0) this.snapshot.areasAfterGutter = [areaSnapshot];\r\n }\r\n else {\r\n this.snapshot.areasAfterGutter.push(areaSnapshot);\r\n }\r\n }\r\n });\r\n\r\n this.snapshot.allInvolvedAreasSizePercent = [...this.snapshot.areasBeforeGutter, ...this.snapshot.areasAfterGutter].reduce((t, a) => t+a.sizePercentAtStart, 0);\r\n \r\n if(this.snapshot.areasBeforeGutter.length === 0 || this.snapshot.areasAfterGutter.length === 0) {\r\n return;\r\n }\r\n\r\n this.dragListeners.push( this.renderer.listen('document', 'mouseup', this.stopDragging.bind(this)) );\r\n this.dragListeners.push( this.renderer.listen('document', 'touchend', this.stopDragging.bind(this)) );\r\n this.dragListeners.push( this.renderer.listen('document', 'touchcancel', this.stopDragging.bind(this)) );\r\n \r\n this.ngZone.runOutsideAngular(() => {\r\n this.dragListeners.push( this.renderer.listen('document', 'mousemove', this.dragEvent.bind(this)) );\r\n this.dragListeners.push( this.renderer.listen('document', 'touchmove', this.dragEvent.bind(this)) );\r\n });\r\n\r\n this.displayedAreas.forEach(area => area.component.lockEvents());\r\n\r\n this.isDragging = true;\r\n this.renderer.addClass(this.elRef.nativeElement, 'as-dragging');\r\n this.renderer.addClass(this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement, 'as-dragged');\r\n \r\n this.notify('start', this.snapshot.gutterNum);\r\n }\r\n\r\n private dragEvent(event: MouseEvent | TouchEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(this._clickTimeout !== null) {\r\n window.clearTimeout(this._clickTimeout);\r\n this._clickTimeout = null;\r\n }\r\n\r\n if(this.isDragging === false) {\r\n return;\r\n }\r\n\r\n this.endPoint = getPointFromEvent(event);\r\n if(this.endPoint === null) {\r\n return;\r\n }\r\n\r\n // Calculate steppedOffset\r\n\r\n let offset = (this.direction === 'horizontal') ? (this.startPoint.x - this.endPoint.x) : (this.startPoint.y - this.endPoint.y);\r\n if(this.dir === 'rtl') {\r\n offset = -offset;\r\n }\r\n const steppedOffset = Math.round(offset / this.gutterStep) * this.gutterStep;\r\n \r\n if(steppedOffset === this.snapshot.lastSteppedOffset) {\r\n return;\r\n }\r\n \r\n this.snapshot.lastSteppedOffset = steppedOffset;\r\n \r\n // Need to know if each gutter side areas could reacts to steppedOffset\r\n \r\n let areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -steppedOffset, this.snapshot.allAreasSizePixel);\r\n let areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset, this.snapshot.allAreasSizePixel);\r\n\r\n // Each gutter side areas can't absorb all offset \r\n if(areasBefore.remain !== 0 && areasAfter.remain !== 0) {\r\n if(Math.abs(areasBefore.remain) === Math.abs(areasAfter.remain)) {\r\n }\r\n else if(Math.abs(areasBefore.remain) > Math.abs(areasAfter.remain)) {\r\n areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset + areasBefore.remain, this.snapshot.allAreasSizePixel);\r\n }\r\n else {\r\n areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -(steppedOffset - areasAfter.remain), this.snapshot.allAreasSizePixel);\r\n }\r\n }\r\n // Areas before gutter can't absorbs all offset > need to recalculate sizes for areas after gutter.\r\n else if(areasBefore.remain !== 0) {\r\n areasAfter = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasAfterGutter, steppedOffset + areasBefore.remain, this.snapshot.allAreasSizePixel);\r\n }\r\n // Areas after gutter can't absorbs all offset > need to recalculate sizes for areas before gutter.\r\n else if(areasAfter.remain !== 0) {\r\n areasBefore = getGutterSideAbsorptionCapacity(this.unit, this.snapshot.areasBeforeGutter, -(steppedOffset - areasAfter.remain), this.snapshot.allAreasSizePixel);\r\n }\r\n\r\n if(this.unit === 'percent') {\r\n // Hack because of browser messing up with sizes using calc(X% - Ypx) -> el.getBoundingClientRect()\r\n // If not there, playing with gutters makes total going down to 99.99875% then 99.99286%, 99.98986%,..\r\n const all = [...areasBefore.list, ...areasAfter.list];\r\n const areaToReset = all.find(a => a.percentAfterAbsorption !== 0 && a.percentAfterAbsorption !== a.areaSnapshot.area.minSize && a.percentAfterAbsorption !== a.areaSnapshot.area.maxSize)\r\n\r\n if(areaToReset) {\r\n areaToReset.percentAfterAbsorption = this.snapshot.allInvolvedAreasSizePercent - all.filter(a => a !== areaToReset).reduce((total, a) => total+a.percentAfterAbsorption, 0);\r\n }\r\n }\r\n\r\n // Now we know areas could absorb steppedOffset, time to really update sizes\r\n \r\n areasBefore.list.forEach(item => updateAreaSize(this.unit, item));\r\n areasAfter.list.forEach(item => updateAreaSize(this.unit, item));\r\n \r\n this.refreshStyleSizes();\r\n this.notify('progress', this.snapshot.gutterNum);\r\n }\r\n\r\n private stopDragging(event?: Event): void {\r\n if(event) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n \r\n if(this.isDragging === false) {\r\n return;\r\n }\r\n \r\n this.displayedAreas.forEach(area => area.component.unlockEvents());\r\n \r\n while(this.dragListeners.length > 0) {\r\n const fct = this.dragListeners.pop();\r\n if(fct) fct();\r\n }\r\n \r\n // Warning: Have to be before \"notify('end')\" \r\n // because \"notify('end')\"\" can be linked to \"[size]='x'\" > \"build()\" > \"stopDragging()\"\r\n this.isDragging = false;\r\n\r\n // If moved from starting point, notify end\r\n if(this.endPoint && (this.startPoint.x !== this.endPoint.x || this.startPoint.y !== this.endPoint.y)) {\r\n this.notify('end', this.snapshot.gutterNum);\r\n }\r\n \r\n this.renderer.removeClass(this.elRef.nativeElement, 'as-dragging');\r\n this.renderer.removeClass(this.gutterEls.toArray()[this.snapshot.gutterNum - 1].nativeElement, 'as-dragged');\r\n this.snapshot = null;\r\n\r\n // Needed to let (click)=\"clickGutter(...)\" event run and verify if mouse moved or not\r\n this.ngZone.runOutsideAngular(() => {\r\n setTimeout(() => {\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n })\r\n });\r\n }\r\n\r\n public notify(type: 'start' | 'progress' | 'end' | 'click' | 'dblclick' | 'transitionEnd', gutterNum: number): void {\r\n const sizes = this.getVisibleAreaSizes();\r\n\r\n if(type === 'start') {\r\n this.dragStart.emit({gutterNum, sizes});\r\n }\r\n else if(type === 'end') {\r\n this.dragEnd.emit({gutterNum, sizes});\r\n }\r\n else if(type === 'click') {\r\n this.gutterClick.emit({gutterNum, sizes});\r\n }\r\n else if(type === 'dblclick') {\r\n this.gutterDblClick.emit({gutterNum, sizes});\r\n }\r\n else if(type === 'transitionEnd') {\r\n if(this.transitionEndSubscriber) {\r\n this.ngZone.run(() => this.transitionEndSubscriber.next(sizes));\r\n }\r\n }\r\n else if(type === 'progress') {\r\n // Stay outside zone to allow users do what they want about change detection mechanism.\r\n this.dragProgressSubject.next({gutterNum, sizes});\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.stopDragging();\r\n }\r\n}\r\n","import { Directive, Input, ElementRef, Renderer2, OnInit, OnDestroy, NgZone } from '@angular/core';\r\n\r\nimport { SplitComponent } from '../component/split.component';\r\nimport { getInputPositiveNumber, getInputBoolean } from '../utils';\r\n\r\n@Directive({\r\n selector: 'as-split-area, [as-split-area]',\r\n exportAs: 'asSplitArea'\r\n})\r\nexport class SplitAreaDirective implements OnInit, OnDestroy {\r\n\r\n private _order: number | null = null;\r\n\r\n @Input() set order(v: number | null) {\r\n this._order = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, true, false);\r\n }\r\n \r\n get order(): number | null {\r\n return this._order;\r\n }\r\n\r\n ////\r\n\r\n private _size: number | null = null;\r\n\r\n @Input() set size(v: number | null) {\r\n this._size = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n \r\n get size(): number | null {\r\n return this._size;\r\n }\r\n\r\n ////\r\n\r\n private _minSize: number | null = null;\r\n\r\n @Input() set minSize(v: number | null) {\r\n this._minSize = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n \r\n get minSize(): number | null {\r\n return this._minSize;\r\n }\r\n\r\n ////\r\n\r\n private _maxSize: number | null = null;\r\n\r\n @Input() set maxSize(v: number | null) {\r\n this._maxSize = getInputPositiveNumber(v, null);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n \r\n get maxSize(): number | null {\r\n return this._maxSize;\r\n }\r\n\r\n ////\r\n\r\n private _lockSize: boolean = false;\r\n\r\n @Input() set lockSize(v: boolean) {\r\n this._lockSize = getInputBoolean(v);\r\n\r\n this.split.updateArea(this, false, true);\r\n }\r\n \r\n get lockSize(): boolean {\r\n return this._lockSize;\r\n }\r\n\r\n ////\r\n\r\n private _visible: boolean = true;\r\n\r\n @Input() set visible(v: boolean) {\r\n this._visible = getInputBoolean(v);\r\n\r\n if(this._visible) { \r\n this.split.showArea(this);\r\n this.renderer.removeClass(this.elRef.nativeElement, 'as-hidden');\r\n }\r\n else {\r\n this.split.hideArea(this);\r\n this.renderer.addClass(this.elRef.nativeElement, 'as-hidden');\r\n }\r\n }\r\n\r\n get visible(): boolean {\r\n return this._visible;\r\n }\r\n\r\n ////\r\n\r\n private transitionListener: Function;\r\n private readonly lockListeners: Array<Function> = [];\r\n\r\n constructor(private ngZone: NgZone,\r\n public elRef: ElementRef,\r\n private renderer: Renderer2,\r\n private split: SplitComponent) {\r\n this.renderer.addClass(this.elRef.nativeElement, 'as-split-area');\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.split.addArea(this);\r\n\r\n this.ngZone.runOutsideAngular(() => {\r\n this.transitionListener = this.renderer.listen(this.elRef.nativeElement, 'transitionend', (event: TransitionEvent) => {\r\n // Limit only flex-basis transition to trigger the event\r\n if(event.propertyName === 'flex-basis') {\r\n this.split.notify('transitionEnd', -1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public setStyleOrder(value: number): void {\r\n this.renderer.setStyle(this.elRef.nativeElement, 'order', value);\r\n }\r\n \r\n public setStyleFlex(grow: number, shrink: number, basis: string, isMin: boolean, isMax: boolean): void {\r\n // Need 3 separated properties to work on IE11 (https://github.com/angular/flex-layout/issues/323)\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-grow', grow);\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-shrink', shrink);\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', basis);\r\n \r\n if(isMin === true) this.renderer.addClass(this.elRef.nativeElement, 'as-min');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'as-min');\r\n \r\n if(isMax === true) this.renderer.addClass(this.elRef.nativeElement, 'as-max');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'as-max');\r\n }\r\n \r\n public lockEvents(): void {\r\n this.ngZone.runOutsideAngular(() => {\r\n this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'selectstart', (e: Event) => false) );\r\n this.lockListeners.push( this.renderer.listen(this.elRef.nativeElement, 'dragstart', (e: Event) => false) );\r\n });\r\n }\r\n\r\n public unlockEvents(): void {\r\n while(this.lockListeners.length > 0) {\r\n const fct = this.lockListeners.pop();\r\n if(fct) fct();\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unlockEvents();\r\n\r\n if(this.transitionListener) {\r\n this.transitionListener();\r\n }\r\n\r\n this.split.removeArea(this);\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { SplitComponent } from './component/split.component';\r\nimport { SplitAreaDirective } from './directive/splitArea.directive';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SplitComponent,\r\n SplitAreaDirective,\r\n ],\r\n exports: [\r\n SplitComponent,\r\n SplitAreaDirective,\r\n ]\r\n})\r\nexport class AngularSplitModule {\r\n\r\n public static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: AngularSplitModule,\r\n providers: []\r\n };\r\n }\r\n\r\n public static forChild(): ModuleWithProviders {\r\n return {\r\n ngModule: AngularSplitModule,\r\n providers: []\r\n };\r\n }\r\n\r\n}\r\n"],"names":["tslib_1.__spread"],"mappings":"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"}
\No newline at end of file