UNPKG

49.6 kBSource Map (JSON)View Raw
1{"version":3,"file":"angular-split.js.map","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/service/UndetectedEventPlugin.ts","ng://angular-split/lib/module.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\r\n\r\nimport { IPoint } from './interface/IPoint';\r\n\r\n\r\nexport function getPointFromEvent(event: MouseEvent | TouchEvent): IPoint {\r\n // TouchEvent\r\n if((<TouchEvent> event).touches !== undefined && (<TouchEvent> event).touches.length > 0) {\r\n return {\r\n x: (<TouchEvent> event).touches[0].clientX,\r\n y: (<TouchEvent> event).touches[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 getPixelSize(elRef: ElementRef, direction: 'horizontal' | 'vertical'): number {\r\n return elRef.nativeElement[(direction === 'horizontal') ? 'offsetWidth' : 'offsetHeight'];\r\n\r\n}\r\n\r\nexport function getInputBoolean(v: any) {\r\n return (typeof(v) === 'boolean') ? v : (v === 'false' ? false : true);\r\n}\r\n\r\nexport function isValidTotalSize(total: number): boolean {\r\n return total > .999 && total < 1.001;\r\n}","import { Component, Input, Output, ChangeDetectionStrategy, ChangeDetectorRef, Renderer2, AfterViewInit, OnDestroy, ElementRef, NgZone, ViewChildren, QueryList } from '@angular/core';\r\nimport { Observable, Subscriber, Subject } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IArea } from '../interface/IArea';\r\nimport { IPoint } from '../interface/IPoint';\r\nimport { SplitAreaDirective } from '../directive/splitArea.directive';\r\nimport { getPointFromEvent, getPixelSize, getInputBoolean, isValidTotalSize } from '../utils';\r\n\r\n/**\r\n * angular-split\r\n * \r\n * Areas size are set in percentage of the split container.\r\n * Gutters size are set in pixels.\r\n * \r\n * So we set css 'flex-basis' property like this (where 0 <= area.size <= 1): \r\n * calc( { area.size * 100 }% - { area.size * nbGutter * gutterSize }px );\r\n * \r\n * Examples with 3 visible areas and 2 gutters: \r\n * \r\n * | 10px 10px |\r\n * |---------------------[]---------------------[]------------------------------------|\r\n * | calc(20% - 4px) calc(20% - 4px) calc(60% - 12px) |\r\n * \r\n * \r\n * | 10px 10px |\r\n * |--------------------------[]--------------------------[]--------------------------|\r\n * | calc(33.33% - 6.667px) calc(33.33% - 6.667px) calc(33.33% - 6.667px) |\r\n * \r\n * \r\n * |10px 10px |\r\n * |[]----------------------------------------------------[]--------------------------|\r\n * |0 calc(66.66% - 13.333px) calc(33%% - 6.667px) |\r\n * \r\n * \r\n * 10px 10px |\r\n * |[][]------------------------------------------------------------------------------|\r\n * |0 0 calc(100% - 20px) |\r\n * \r\n */\r\n\r\n@Component({\r\n selector: 'as-split',\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 (as-split-undetected.click)=\"clickGutter($event, index+1)\"\r\n (as-split-undetected.mousedown)=\"startDragging($event, index*2+1, index+1)\"\r\n (as-split-undetected.touchstart)=\"startDragging($event, index*2+1, 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, `is-${ this._direction }`);\r\n this.renderer.removeClass(this.elRef.nativeElement, `is-${ (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 _gutterSize: number = 11;\r\n\r\n @Input() set gutterSize(v: number) {\r\n v = Number(v);\r\n this._gutterSize = (!isNaN(v) && v > 0) ? 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 _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, 'is-transition');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'is-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, 'is-disabled');\r\n else this.renderer.removeClass(this.elRef.nativeElement, 'is-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 v = (v === 'rtl') ? 'rtl' : 'ltr';\r\n this._dir = v;\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 dragStartSubscriber: Subscriber<{gutterNum: number, sizes: Array<number>}>\r\n @Output() get dragStart(): Observable<{gutterNum: number, sizes: Array<number>}> {\r\n return new Observable(subscriber => this.dragStartSubscriber = subscriber);\r\n }\r\n\r\n private dragEndSubscriber: Subscriber<{gutterNum: number, sizes: Array<number>}>\r\n @Output() get dragEnd(): Observable<{gutterNum: number, sizes: Array<number>}> {\r\n return new Observable(subscriber => this.dragEndSubscriber = subscriber);\r\n }\r\n\r\n private gutterClickSubscriber: Subscriber<{gutterNum: number, sizes: Array<number>}>\r\n @Output() get gutterClick(): Observable<{gutterNum: number, sizes: Array<number>}> {\r\n return new Observable(subscriber => this.gutterClickSubscriber = subscriber);\r\n }\r\n\r\n private transitionEndSubscriber: Subscriber<Array<number>>\r\n @Output() get transitionEnd(): Observable<Array<number>> {\r\n return new Observable(subscriber => this.transitionEndSubscriber = subscriber).pipe(\r\n debounceTime<Array<number>>(20)\r\n );\r\n }\r\n \r\n private dragProgressSubject: Subject<{gutterNum: number, sizes: Array<number>}> = new Subject();\r\n dragProgress$: Observable<{gutterNum: number, sizes: Array<number>}> = this.dragProgressSubject.asObservable();\r\n\r\n ////\r\n\r\n private isDragging: boolean = false;\r\n private currentGutterNum: number = 0;\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 private readonly dragListeners: Array<Function> = [];\r\n private readonly dragStartValues = {\r\n sizePixelContainer: 0,\r\n sizePixelA: 0,\r\n sizePixelB: 0,\r\n sizePercentA: 0,\r\n sizePercentB: 0,\r\n };\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, 'is-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 };\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 // Only refresh if area is displayed (No need to check inside 'hidedAreas')\r\n const area = this.displayedAreas.find(a => a.component === component);\r\n if(!area) {\r\n return;\r\n }\r\n\r\n this.build(resetOrders, resetSizes);\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) {\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) {\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(): Array<number> {\r\n return this.displayedAreas.map(a => a.size * 100);\r\n }\r\n\r\n public setVisibleAreaSizes(sizes: Array<number>): boolean {\r\n if(sizes.length !== this.displayedAreas.length) {\r\n return false;\r\n }\r\n\r\n sizes = sizes.map(s => s / 100);\r\n\r\n const total = sizes.reduce((total: number, v: number) => total + v, 0);\r\n if(!isValidTotalSize(total)) {\r\n return false;\r\n }\r\n\r\n this.displayedAreas.forEach((area, i) => {\r\n // @ts-ignore\r\n area.component._size = sizes[i];\r\n })\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\r\n // ¤ AREAS SIZE PERCENT\r\n \r\n if(resetSizes === true) {\r\n\r\n const totalUserSize = <number> this.displayedAreas.reduce((total: number, s: IArea) => s.component.size ? total + s.component.size : total, 0);\r\n \r\n // If user provided 'size' for each area and total == 1, use it.\r\n if(this.displayedAreas.every(a => a.component.size !== null) && isValidTotalSize(totalUserSize) ) {\r\n\r\n this.displayedAreas.forEach(area => {\r\n area.size = <number> area.component.size;\r\n });\r\n }\r\n // Else set equal sizes for all areas.\r\n else {\r\n const size = 1 / this.displayedAreas.length;\r\n \r\n this.displayedAreas.forEach(area => {\r\n area.size = size;\r\n });\r\n }\r\n }\r\n \r\n // ¤ \r\n // If some real area sizes are less than gutterSize, \r\n // set them to zero and dispatch size to others.\r\n\r\n let percentToDispatch = 0;\r\n \r\n // Get container pixel size\r\n const containerSizePixel = getPixelSize(this.elRef, this.direction);\r\n\r\n this.displayedAreas.forEach(area => {\r\n if(area.size * containerSizePixel < this.gutterSize) {\r\n percentToDispatch += area.size;\r\n area.size = 0;\r\n }\r\n });\r\n \r\n if(percentToDispatch > 0 && this.displayedAreas.length > 0) {\r\n const nbAreasNotZero = this.displayedAreas.filter(a => a.size !== 0).length;\r\n\r\n if(nbAreasNotZero > 0) {\r\n const percentToAdd = percentToDispatch / nbAreasNotZero;\r\n \r\n this.displayedAreas.filter(a => a.size !== 0).forEach(area => {\r\n area.size += percentToAdd;\r\n });\r\n }\r\n // All area sizes (container percentage) are less than guterSize,\r\n // It means containerSize < ngGutters * gutterSize\r\n else {\r\n this.displayedAreas[this.displayedAreas.length - 1].size = 1;\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 const sumGutterSize = this.getNbGutters() * this.gutterSize;\r\n\r\n this.displayedAreas.forEach(area => {\r\n area.component.setStyleFlexbasis(`calc( ${ area.size * 100 }% - ${ area.size * sumGutterSize }px )`);\r\n });\r\n }\r\n\r\n public clickGutter(event: MouseEvent, gutterNum: number): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(this.startPoint && this.startPoint.x === event.clientX && this.startPoint.y === event.clientY) {\r\n this.currentGutterNum = gutterNum;\r\n\r\n this.notify('click');\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 || this.disabled) {\r\n return;\r\n }\r\n\r\n const areaA = this.displayedAreas.find(a => a.order === gutterOrder - 1);\r\n const areaB = this.displayedAreas.find(a => a.order === gutterOrder + 1);\r\n \r\n if(!areaA || !areaB) {\r\n return;\r\n }\r\n\r\n this.dragStartValues.sizePixelContainer = getPixelSize(this.elRef, this.direction);\r\n this.dragStartValues.sizePixelA = getPixelSize(areaA.component.elRef, this.direction);\r\n this.dragStartValues.sizePixelB = getPixelSize(areaB.component.elRef, this.direction);\r\n this.dragStartValues.sizePercentA = areaA.size;\r\n this.dragStartValues.sizePercentB = areaB.size;\r\n this.currentGutterNum = gutterNum;\r\n\r\n this.ngZone.runOutsideAngular(() => {\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.dragListeners.push( this.renderer.listen('document', 'mousemove', (e: MouseEvent) => this.dragEvent(e, areaA, areaB)) );\r\n this.dragListeners.push( this.renderer.listen('document', 'touchmove', (e: TouchEvent) => this.dragEvent(e, areaA, areaB)) );\r\n });\r\n\r\n areaA.component.lockEvents();\r\n areaB.component.lockEvents();\r\n\r\n this.isDragging = true;\r\n this.renderer.addClass(this.elRef.nativeElement, 'is-dragging');\r\n this.renderer.addClass(this.gutterEls.toArray()[this.currentGutterNum-1].nativeElement, 'is-dragged');\r\n \r\n this.notify('start');\r\n }\r\n\r\n private dragEvent(event: MouseEvent | TouchEvent, areaA: IArea, areaB: IArea): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if(!this.isDragging) {\r\n return;\r\n }\r\n\r\n this.endPoint = getPointFromEvent(event);\r\n if(!this.endPoint) {\r\n return;\r\n }\r\n \r\n // ¤ AREAS SIZE PIXEL\r\n\r\n let offsetPixel = (this.direction === 'horizontal') ? (this.startPoint.x - this.endPoint.x) : (this.startPoint.y - this.endPoint.y);\r\n if(this.dir === 'rtl') {\r\n offsetPixel = -offsetPixel;\r\n }\r\n\r\n let newSizePixelA = this.dragStartValues.sizePixelA - offsetPixel;\r\n let newSizePixelB = this.dragStartValues.sizePixelB + offsetPixel;\r\n \r\n if(newSizePixelA < this.gutterSize && newSizePixelB < this.gutterSize) {\r\n // WTF.. get out of here!\r\n return;\r\n }\r\n else if(newSizePixelA < this.gutterSize) {\r\n newSizePixelB += newSizePixelA;\r\n newSizePixelA = 0;\r\n }\r\n else if(newSizePixelB < this.gutterSize) {\r\n newSizePixelA += newSizePixelB;\r\n newSizePixelB = 0;\r\n }\r\n\r\n // ¤ AREAS SIZE PERCENT\r\n\r\n if(newSizePixelA === 0) {\r\n areaB.size += areaA.size;\r\n areaA.size = 0;\r\n }\r\n else if(newSizePixelB === 0) {\r\n areaA.size += areaB.size;\r\n areaB.size = 0;\r\n }\r\n else {\r\n // NEW_PERCENT = START_PERCENT / START_PIXEL * NEW_PIXEL;\r\n if(this.dragStartValues.sizePercentA === 0) {\r\n areaB.size = this.dragStartValues.sizePercentB / this.dragStartValues.sizePixelB * newSizePixelB;\r\n areaA.size = this.dragStartValues.sizePercentB - areaB.size;\r\n }\r\n else if(this.dragStartValues.sizePercentB === 0) {\r\n areaA.size = this.dragStartValues.sizePercentA / this.dragStartValues.sizePixelA * newSizePixelA;\r\n areaB.size = this.dragStartValues.sizePercentA - areaA.size;\r\n }\r\n else {\r\n areaA.size = this.dragStartValues.sizePercentA / this.dragStartValues.sizePixelA * newSizePixelA;\r\n areaB.size = (this.dragStartValues.sizePercentA + this.dragStartValues.sizePercentB) - areaA.size;\r\n }\r\n }\r\n\r\n this.refreshStyleSizes();\r\n \r\n // If moved from starting point, notify progress\r\n if(this.startPoint.x !== this.endPoint.x || this.startPoint.y !== this.endPoint.y) {\r\n this.notify('progress');\r\n }\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 => {\r\n area.component.unlockEvents();\r\n });\r\n \r\n while(this.dragListeners.length > 0) {\r\n const fct = this.dragListeners.pop();\r\n if(fct) {\r\n fct();\r\n }\r\n }\r\n \r\n // If moved from starting point, notify end\r\n if(event && this.endPoint && (this.startPoint.x !== this.endPoint.x || this.startPoint.y !== this.endPoint.y)) {\r\n this.notify('end');\r\n }\r\n \r\n this.isDragging = false;\r\n this.renderer.removeClass(this.elRef.nativeElement, 'is-dragging');\r\n this.renderer.removeClass(this.gutterEls.toArray()[this.currentGutterNum-1].nativeElement, 'is-dragged');\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' | 'transitionEnd'): void {\r\n const sizes: Array<number> = this.displayedAreas.map(a => a.size * 100);\r\n\r\n if(type === 'start') {\r\n if(this.dragStartSubscriber) {\r\n this.ngZone.run(() => this.dragStartSubscriber.next({gutterNum: this.currentGutterNum, sizes}));\r\n }\r\n }\r\n else if(type === 'end') {\r\n if(this.dragEndSubscriber) {\r\n this.ngZone.run(() => this.dragEndSubscriber.next({gutterNum: this.currentGutterNum, sizes}));\r\n }\r\n }\r\n else if(type === 'click') {\r\n if(this.gutterClickSubscriber) {\r\n this.ngZone.run(() => this.gutterClickSubscriber.next({gutterNum: this.currentGutterNum, sizes}));\r\n }\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: this.currentGutterNum, 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 { getInputBoolean } from '../utils';\r\n\r\n@Directive({\r\n selector: 'as-split-area, [as-split-area]'\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 v = Number(v);\r\n this._order = !isNaN(v) ? 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 v = Number(v);\r\n this._size = (!isNaN(v) && v >= 0 && v <= 100) ? (v/100) : 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 _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, 'is-hided');\r\n }\r\n else {\r\n this.split.hideArea(this);\r\n this.renderer.addClass(this.elRef.nativeElement, 'is-hided');\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');\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 setStyleFlexbasis(value: string): void {\r\n this.renderer.setStyle(this.elRef.nativeElement, 'flex-basis', value);\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) {\r\n fct();\r\n }\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.unlockEvents();\r\n\r\n if(this.transitionListener) {\r\n this.transitionListener();\r\n }\r\n\r\n this.split.removeArea(this);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { EventManager } from '@angular/platform-browser';\r\n\r\n/**\r\n * Credit to Michael Strobel from:\r\n * https://github.com/kryops/ng2-events\r\n */\r\n@Injectable()\r\nexport class UndetectedEventPlugin {\r\n manager: EventManager;\r\n\r\n supports(eventName: string): boolean {\r\n return eventName.indexOf('as-split-undetected.') === 0;\r\n }\r\n\r\n addEventListener(element: HTMLElement, eventName: string, handler: Function): Function {\r\n const realEventName = eventName.slice(20);\r\n\r\n return this.manager.getZone().runOutsideAngular(() => this.manager.addEventListener(element, realEventName, handler));\r\n }\r\n}","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';\r\n\r\nimport { SplitComponent } from './component/split.component';\r\nimport { SplitAreaDirective } from './directive/splitArea.directive';\r\nimport { UndetectedEventPlugin } from \"./service/UndetectedEventPlugin\";\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 provide: EVENT_MANAGER_PLUGINS,\r\n useClass: UndetectedEventPlugin,\r\n multi: true\r\n }]\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":[],"mappings":"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"}