{"version":3,"file":"deja-js-component-splitter.mjs","sources":["../../../../projects/deja-js/component/splitter/split-gutter.directive.ts","../../../../projects/deja-js/component/splitter/splitter.component.ts","../../../../projects/deja-js/component/splitter/splitter.component.html","../../../../projects/deja-js/component/splitter/split-area.directive.ts","../../../../projects/deja-js/component/splitter/index.ts","../../../../projects/deja-js/component/splitter/deja-js-component-splitter.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, Input, Renderer2 } from '@angular/core';\n\n/**\n * Separator for the spltter component\n */\n@Directive({\n    selector: 'split-gutter'\n})\nexport class SplitGutterDirective {\n\n    /**\n     * Order of the seperator\n     */\n    @Input()\n    public set order(v: NumberInput) {\n        this.setStyle('order', coerceNumberProperty(v));\n    }\n\n    private _direction: string;\n    /**\n     * Direction of the separator\n     * Can be `horizontal` or `vertical`\n     */\n    @Input()\n    public set direction(v: string) {\n        this._direction = v;\n        this.refreshStyle();\n    }\n\n    /**\n     * Separator size in pixel\n     */\n    @Input()\n    public set size(v: NumberInput) {\n        if (!v) {\n            this.setStyle('flex-basis', '');\n        } else if (typeof v === 'string') {\n            this.setStyle('flex-basis', `${coerceNumberProperty(v)}px`);\n        } else {\n            this.setStyle('flex-basis', `${v}px`);\n        }\n    }\n\n    private _disabled = false;\n    /**\n     * Disable the separator\n     * By default `false`\n     */\n    @Input()\n    public set disabled(v: BooleanInput) {\n        this._disabled = coerceBooleanProperty(v);\n        this.refreshStyle();\n    }\n\n    /**\n     * Constructor\n     */\n    public constructor(private elementRef: ElementRef,\n        private renderer: Renderer2) {\n    }\n\n    private refreshStyle(): void {\n        const state = this._disabled ? 'disabled' : this._direction;\n\n        this.setStyle('cursor', this.getCursor(state));\n        this.setStyle('background-image', `url(\"${this.getImage(state)}\")`);\n\n        // Add a content in css, to allow the gutter to take the full wize\n        if (state === 'horizontal') {\n            this.setStyle('content', ' ');\n        }\n    }\n\n    private setStyle(key: string, value: unknown): void {\n        void (value === null || value === undefined ? this.renderer.removeStyle(this.elementRef.nativeElement, key) : this.renderer.setStyle(this.elementRef.nativeElement, key, value));\n    }\n\n    private getCursor(state: string): string {\n        switch (state) {\n            case 'disabled':\n                return 'default';\n            case 'vertical':\n                return 'row-resize';\n            case 'horizontal':\n                return 'col-resize';\n            default:\n                return null;\n        }\n    }\n\n    private getImage(state: string): string {\n        switch (state) {\n            case 'disabled':\n                return '';\n            case 'vertical':\n                return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFCAMAAABl/6zIAAAABlBMVEUAAADMzMzIT8AyAAAAAXRSTlMAQObYZgAAABRJREFUeAFjYGRkwIMJSeMHlBkOABP7AEGzSuPKAAAAAElFTkSuQmCC';\n            case 'horizontal':\n                // eslint-disable-next-line no-secrets/no-secrets\n                return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==';\n            default:\n                return null;\n        }\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Input, OnChanges, OnDestroy, Output, Renderer2, SimpleChanges, ViewEncapsulation } from '@angular/core';\n\nimport { IAreaData } from './area-data.model';\nimport { Point } from './point.model';\nimport { SplitAreaDirective } from './split-area.directive';\n\nconst gutterSize = 'gutterSize';\nconst disabled = 'disabled';\n\n/**\n * Splitter Component for Angular\n *\n * The splitter component allows to split horizontally or vertically, a container in N resizable part.\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    selector: 'deja-splitter',\n    styleUrls: ['./splitter.component.scss'],\n    templateUrl: './splitter.component.html'\n})\nexport class DejaSplitterComponent implements OnChanges, OnDestroy {\n    /**\n     * Direction of the split\n     * Can be `horizontal` or `vertical`\n     */\n    @Input() public direction = 'horizontal';\n    /**\n     * Width in percent of the component\n     * By default `100%`\n     */\n    @Input() public width: number;\n    /**\n     * Height in percent of the component\n     * By default `100%`\n     */\n    @Input() public height: number;\n    /**\n     * Separator width\n     */\n    @Input() public gutterSize = 10;\n    /**\n     * Event triggered when the user start to drag the cursor\n     */\n    @Output() public readonly dragStart = new EventEmitter<number[]>(false);\n    /**\n     * Event triggered during the cursor's drag\n     */\n    @Output() public readonly dragProgress = new EventEmitter<number[]>(false);\n    /**\n     * Event triggered when the user stop to drag the cursor\n     */\n    @Output() public readonly dragEnd = new EventEmitter<number[]>(false);\n\n    /**\n     * Host Binding\n     */\n    @HostBinding('style.flex-direction')\n    public get styleFlexDirection(): string {\n        return this.direction === 'horizontal' ? 'row' : 'column';\n    }\n\n    /**\n     * Host Binding\n     */\n    @HostBinding('style.width')\n    public get styleWidth(): string {\n        return (this.width && !isNaN(this.width) && this.width > 0) ? `${this.width}px` : '100%';\n    }\n\n    /**\n     * Host Binding\n     */\n    @HostBinding('style.height')\n    public get styleHeight(): string {\n        return (this.height && !isNaN(this.height) && this.height > 0) ? `${this.height}px` : '100%';\n    }\n\n    private get nbGutters(): number {\n        return this._areas.length - 1;\n    }\n\n    private _areas: IAreaData[] = [];\n    private isDragging = false;\n    private containerSize = 0;\n    private areaAsize = 0;\n    private areaBsize = 0;\n    private eventsDragFct = [] as (() => void)[];\n    private _disabled = false;\n\n    /** Retourne ou definit si le selecteur est desactivé. */\n    @Input()\n    public set disabled(value: BooleanInput) {\n        this._disabled = coerceBooleanProperty(value) || null;\n    }\n\n    public get disabled(): BooleanInput {\n        return this._disabled;\n    }\n\n    public get areas(): IAreaData[] {\n        return this._areas;\n    }\n\n    /**\n     * Constructor\n     */\n    public constructor(private cdRef: ChangeDetectorRef,\n        private elementRef: ElementRef<HTMLElement>,\n        private renderer: Renderer2) {\n        console.warn('@deja-js/component/splitter is deprecated, and will be removed in a further version. Please use @deja-js/component/v2/splitter instead.');\n    }\n\n    /**\n     * Lifecycle hook that is called when any data-bound property of a directive changes.\n     */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes[gutterSize] || changes[disabled]) {\n            this.refresh();\n        }\n    }\n\n    /**\n     * Lifecycle hook that is called when a directive, pipe or service is destroyed.\n     */\n    public ngOnDestroy(): void {\n        this.stopDragging();\n    }\n\n    /**\n     * Add a new area into the component\n     * @param component Area to add\n     * @param orderUser Position of the new area into the component\n     * @param sizeUser Size of the new area\n     * @param minPixel Min size of the new area\n     */\n    public addArea(component: SplitAreaDirective, orderUser: number | null, sizeUser: number | null, minPixel: number): void {\n        this._areas.push({\n            component,\n            orderUser,\n            order: -1,\n            sizeUser,\n            size: -1,\n            minPixel\n        });\n\n        this.refresh();\n    }\n\n    /**\n     * Update an existing area into the component\n     * @param component Area to update\n     * @param orderUser Position of the area into the component\n     * @param sizeUser Size of the area\n     * @param minPixel  Min size of the area\n     */\n    public updateArea(component: SplitAreaDirective, orderUser: number | null, sizeUser: number | null, minPixel: number): void {\n        const item = this._areas.find(a => a.component === component);\n\n        if (item) {\n            item.orderUser = orderUser;\n            item.sizeUser = sizeUser;\n            item.minPixel = minPixel;\n\n            this.refresh();\n        }\n    }\n\n    /**\n     * Delete an existing area into the component\n     * @param area Area to delete\n     */\n    public removeArea(area: SplitAreaDirective): void {\n        const item = this._areas.find(a => a.component === area);\n\n        if (item) {\n            const index = this._areas.indexOf(item);\n            this._areas.splice(index, 1);\n            this._areas.forEach((a, i) => a.order = i * 2);\n\n            this.refresh();\n        }\n    }\n\n    /**\n     * Function called when the user start to drag the cursor\n     * @param startEvent drag event\n     * @param gutterOrder separator number\n     */\n    public startDragging(event: Event, gutterOrder: number): void {\n        const startEvent = event as MouseEvent;\n        startEvent.preventDefault();\n\n        if (this.disabled) {\n            return;\n        }\n\n        const areaA = this._areas.find(a => a.order === gutterOrder - 1);\n        const areaB = this._areas.find(a => a.order === gutterOrder + 1);\n        if (!areaA || !areaB) {\n            return;\n        }\n\n        const prop = (this.direction === 'horizontal') ? 'offsetWidth' : 'offsetHeight';\n        this.containerSize = this.elementRef.nativeElement[prop];\n        this.areaAsize = this.containerSize * areaA.size / 100;\n        this.areaBsize = this.containerSize * areaB.size / 100;\n\n        const start: Point = {\n            x: startEvent.screenX,\n            y: startEvent.screenY\n        };\n\n        this.eventsDragFct.push(this.renderer.listen('document', 'mousemove', (e: MouseEvent) => this.dragEvent(e, start, areaA, areaB)));\n        this.eventsDragFct.push(this.renderer.listen('document', 'touchmove', (e: MouseEvent) => this.dragEvent(e, start, areaA, areaB)));\n        this.eventsDragFct.push(this.renderer.listen('document', 'mouseup', () => this.stopDragging()));\n        this.eventsDragFct.push(this.renderer.listen('document', 'touchend', () => this.stopDragging()));\n        this.eventsDragFct.push(this.renderer.listen('document', 'touchcancel', () => this.stopDragging()));\n\n        areaA.component.lockEvents();\n        areaB.component.lockEvents();\n\n        this.isDragging = true;\n        this.notify('start');\n    }\n\n    public refresh(): void {\n        this.stopDragging();\n\n        // ORDERS: Set css 'order' property depending on user input or added order\n        const nbCorrectOrder = this._areas.filter(a => a.orderUser !== null && !isNaN(a.orderUser)).length;\n        if (nbCorrectOrder === this._areas.length) {\n            this._areas.sort((a, b) => +a.orderUser - +b.orderUser);\n        }\n\n        this._areas.forEach((a, i) => {\n            a.order = i * 2;\n            a.component.setStyle('order', a.order);\n        });\n\n        // SIZES: Set css 'flex-basis' property depending on user input or equal sizes\n        const totalSize = this._areas.map(a => a.sizeUser).reduce((acc, s) => acc + s, 0);\n        const toBeDefined = this._areas.filter(a => !a.sizeUser || isNaN(a.sizeUser));\n\n        if ((totalSize < 99.99 || totalSize > 100.01) && this._areas.length > 1) {\n            if (toBeDefined.length === 0) {\n                // Map to 100%\n                this._areas.forEach(a => {\n                    const adjustedSize = Number(a.sizeUser) * 100 / totalSize;\n                    a.size = adjustedSize;\n                });\n            } else if (totalSize < 99.99) {\n                // Share the remaining size to the undefined areas\n                let remain = (100 - totalSize);\n                let toBeDefinedLength = toBeDefined.length;\n                toBeDefined.forEach(a => {\n                    const size = remain / toBeDefinedLength--;\n                    a.size = size;\n                    remain -= size;\n                });\n                this._areas\n                    .filter(a => a.sizeUser && !isNaN(a.sizeUser))\n                    .forEach(a => a.size = Number(a.sizeUser));\n            } else {\n                const size = Number((100 / this._areas.length).toFixed(3));\n                this._areas.forEach(a => a.size = size);\n            }\n        } else if (totalSize === 0 && this._areas.length === 1) {\n            this._areas[0].size = 100;\n        } else {\n            this._areas.forEach(a => a.size = Number(a.sizeUser));\n        }\n\n        this.refreshStyleSizes();\n        this.cdRef.markForCheck();\n    }\n\n    private refreshStyleSizes(): void {\n        const f = this.gutterSize * this.nbGutters / this._areas.length;\n        this._areas.forEach(a => a.component.setStyle('flex-basis', `calc( ${a.size}% - ${f}px )`));\n    }\n\n    private dragEvent(event: MouseEvent, start: Point, areaA: IAreaData, areaB: IAreaData): void {\n        if (!this.isDragging) {\n            return;\n        }\n\n        const end: Point = {\n            x: event.screenX,\n            y: event.screenY\n        };\n\n        this.drag(start, end, areaA, areaB);\n    }\n\n    private drag(start: Point, end: Point, areaA: IAreaData, areaB: IAreaData): void {\n        const offsetPixel = (this.direction === 'horizontal') ? (start.x - end.x) : (start.y - end.y);\n\n        const newSizePixelA = this.areaAsize - offsetPixel;\n        const newSizePixelB = this.areaBsize + offsetPixel;\n\n        const minPercentA = areaA.minPixel ? (areaA.minPixel + 5) / this.containerSize * 100 : 0;\n        const minPercentB = areaB.minPixel ? (areaB.minPixel + 5) / this.containerSize * 100 : 0;\n\n        let newSizePercentA = newSizePixelA / this.containerSize * 100;\n        let newSizePercentB = newSizePixelB / this.containerSize * 100;\n\n        if (newSizePercentA <= minPercentA) {\n            newSizePercentA = minPercentA;\n            newSizePercentB = areaA.size + areaB.size - minPercentA;\n        } else if (newSizePercentB <= minPercentB) {\n            newSizePercentB = minPercentB;\n            newSizePercentA = areaA.size + areaB.size - minPercentB;\n        } else {\n            newSizePercentA = Number(newSizePercentA.toFixed(3));\n            newSizePercentB = Number((areaA.size + areaB.size - newSizePercentA).toFixed(3));\n        }\n\n        areaA.size = newSizePercentA;\n        areaB.size = newSizePercentB;\n\n        this.refreshStyleSizes();\n        this.notify('progress');\n    }\n\n    private stopDragging(): void {\n        if (!this.isDragging) {\n            return;\n        }\n\n        this._areas.forEach(a => a.component.unlockEvents());\n\n        // eslint-disable-next-line no-loops/no-loops\n        while (this.eventsDragFct.length > 0) {\n            const fct = this.eventsDragFct.pop();\n            if (fct) {\n                fct();\n            }\n        }\n\n        this.containerSize = 0;\n        this.areaAsize = 0;\n        this.areaBsize = 0;\n\n        this.isDragging = false;\n        this.notify('end');\n    }\n\n    private notify(type: string): void {\n        const data: number[] = this._areas.map(a => a.size);\n\n        switch (type) {\n            case 'start':\n                return this.dragStart.emit(data);\n            case 'progress':\n                return this.dragProgress.emit(data);\n            case 'end':\n                return this.dragEnd.emit(data);\n            default:\n                return null;\n        }\n    }\n}\n","<ng-content></ng-content>\n<ng-template ngFor let-area [ngForOf]=\"areas\" let-index=\"index\" let-last=\"last\">\n    <split-gutter *ngIf=\"last === false\"\n                  [order]=\"index*2+1\"\n                  [direction]=\"direction\"\n                  [size]=\"gutterSize\"\n                  [disabled]=\"disabled\"\n                  (mousedown)=\"startDragging($event, index*2+1)\"\n                  (touchstart)=\"startDragging($event, index*2+1)\">\n\n    </split-gutter>\n</ng-template>","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\n/**\n * Created by rtr on 22.12.2016.\n */\nimport { coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { Directive, ElementRef, Input, OnDestroy, OnInit, Renderer2 } from '@angular/core';\n\nimport { DejaSplitterComponent } from './splitter.component';\n\n/**\n * Directive representing a panel in a Splitter Component\n */\n@Directive({\n    selector: 'split-area'\n})\nexport class SplitAreaDirective implements OnInit, OnDestroy {\n\n    /**\n     * Order position of the current area\n     */\n    @Input()\n    public set order(value: NumberInput) {\n        const v = coerceNumberProperty(value);\n        this._order = !isNaN(v) ? v : null;\n        this.split.updateArea(this, this._order, this._size, this._minSizePixel);\n    }\n\n    /**\n     * Size in percent of the current area\n     */\n    @Input()\n    public set size(value: NumberInput) {\n        const v = coerceNumberProperty(value);\n        this._size = !isNaN(v) ? v : null;\n        this.split.updateArea(this, this._order, this._size, this._minSizePixel);\n    }\n\n    /**\n     * Min size in percent of the current area\n     */\n    @Input()\n    public set minSizePixel(value: NumberInput) {\n        const v = coerceNumberProperty(value);\n        this._minSizePixel = (!isNaN(v) && v > 0) ? v : 0;\n        this.split.updateArea(this, this._order, this._size, this._minSizePixel);\n    }\n\n    private _order: number | null = null;\n    private _size: number | null = null;\n    private _minSizePixel = 0;\n    private eventsLockFct = [] as (() => void)[];\n\n    /**\n     * Constructor\n     */\n    public constructor(private elementRef: ElementRef,\n        private renderer: Renderer2,\n        private split: DejaSplitterComponent) {\n    }\n\n    /**\n     * Lifecycle hook that is called after data-bound properties of a directive are initialized.\n     */\n    public ngOnInit(): void {\n        this.split.addArea(this, this._order, this._size, this._minSizePixel);\n    }\n\n    /**\n     * Lock the events\n     */\n    public lockEvents(): void {\n        this.eventsLockFct.push(this.renderer.listen(this.elementRef.nativeElement, 'selectstart', () => false));\n        this.eventsLockFct.push(this.renderer.listen(this.elementRef.nativeElement, 'dragstart', () => false));\n    }\n\n    /**\n     * Unlock the events\n     */\n    public unlockEvents(): void {\n        // eslint-disable-next-line no-loops/no-loops\n        while (this.eventsLockFct.length > 0) {\n            const fct = this.eventsLockFct.pop();\n            if (fct) {\n                fct();\n            }\n        }\n    }\n\n    /**\n     * Set a style for the current area\n     * @param key style key\n     * @param value style value\n     */\n    public setStyle(key: string, value: unknown): void {\n        void (value === null || value === undefined ? this.renderer.removeStyle(this.elementRef.nativeElement, key) : this.renderer.setStyle(this.elementRef.nativeElement, key, value));\n    }\n\n    /**\n     * Lifecycle hook that is called when a directive, pipe or service is destroyed.\n     */\n    public ngOnDestroy(): void {\n        this.split.removeArea(this);\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SplitAreaDirective } from './split-area.directive';\nimport { SplitGutterDirective } from './split-gutter.directive';\nimport { DejaSplitterComponent } from './splitter.component';\n\n@NgModule({\n    declarations: [\n        DejaSplitterComponent,\n        SplitAreaDirective,\n        SplitGutterDirective\n    ],\n    exports: [\n        DejaSplitterComponent,\n        SplitAreaDirective,\n        SplitGutterDirective\n    ],\n    imports: [\n        CommonModule\n    ]\n})\nexport class DejaSplitterModule {\n\n}\n\nexport * from './split-area.directive';\nexport * from './split-gutter.directive';\nexport * from './splitter.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SplitGutterDirective","i1.DejaSplitterComponent"],"mappings":"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"}