{"version":3,"file":"gd-splitter.mjs","sources":["../../../projects/gd-splitter/src/lib/gd-splitter.component.ts","../../../projects/gd-splitter/src/lib/gd-splitter.component.html","../../../projects/gd-splitter/src/lib/gd-splitter.module.ts","../../../projects/gd-splitter/src/public-api.ts","../../../projects/gd-splitter/src/gd-splitter.ts"],"sourcesContent":["import { Component, Output } from '@angular/core';\nimport { Input             } from '@angular/core';\nimport { AfterViewInit     } from '@angular/core';\nimport { OnInit            } from '@angular/core';\nimport { ElementRef        } from '@angular/core';\nimport { ViewEncapsulation } from '@angular/core';\nimport { Subject           } from 'rxjs';\n\n@Component({\n  selector: 'gd-splitter',\n  templateUrl: \"./gd-splitter.component.html\",\n  styleUrls:  [\"./gd-splitter.component.scss\"],\n  encapsulation: ViewEncapsulation.Emulated\n})\nexport class GDSplitterComponent implements OnInit, AfterViewInit \n{\n    private      settings        = {} as ISplitter;\n    public   get Settings()      : ISplitter   { return this.settings;         }\n    @Input() \n    public   set Settings( value : ISplitter ) {        this.settings = value; }\n\n    public  Width                   : number = 0;\n    public  Height                  : number = 0;\n\n    private drag                    : any;\n    private delta                   : any;\n    private resizeVert              = {} as HTMLElement;\n    private resizeHor               = {} as HTMLElement;\n    private isTopActive             = false;\n    private isLeftActive            = false;\n    private isBottomActive          = false;\n    private isRightActive           = false;\n    private resizeValue             = 0;\n\n    public  top                     = new SplitterPanel();\n    public  left                    = new SplitterPanel();\n    public  right                   = new SplitterPanel();\n    public  bottom                  = new SplitterPanel();\n    public  center                  = new SplitterPanel();\n \n    public  topBorder               : string = '0';\n    public  leftBorder              : string = '0';\n    public  rightBorder             : string = '0';\n    public  bottomBorder            : string = '0';\n    public  centerBorder            : string = '0';\n    public  isTopPanelVisible       : boolean = false;\n    public  isLeftPanelVisible      : boolean = false;\n    public  isRightPanelVisible     : boolean = false;\n    public  isBottomPanelVisible    : boolean = false;\n    public  isSplitterBorderVisible : boolean = false;\n    \n    @Output() actionNotifier$ = new Subject<any>();\n\n    constructor( private el : ElementRef )\n    {\n    }\n\n    public ngOnInit() \n    {\n        this.initPanels();\n    }\n\n    public  ngAfterViewInit(): void \n    {\n        this.drag  = { x : 0, y : 0 };\n        this.delta = { x : 0, y : 0 };\n\n//        this.resizeVert = this.el.nativeElement.querySelectorAll('div.splitter-vertical')[0];\n//        this.resizeHor  = this.el.nativeElement.querySelectorAll('div.splitter-horizontal')[0];\n    }\n\n    public  onSeparatorTopMouseDown(event:any) \n    {\n    }\n\n    public  onSeparatorBottomMouseDown(event:any) \n    {\n        if( ! this.bottom.isOpened ) return;\n        \n        this.drag.x  = event.clientX;\n        this.drag.y  = event.clientY;\n        this.delta.x = 0;\n        this.delta.y = 0;\n\n        this.isBottomActive = true;\n\n        var splitter = this.el.nativeElement.querySelectorAll('div.splitter')[0];\n            splitter.style.cursor = 'row-resize';\n\n        let  rect    = splitter.getBoundingClientRect();\n        this.Height  = rect.height;\n\n        let bottomPanel = this.el.nativeElement.querySelectorAll('div.bottomPanel');\n        rect = bottomPanel[0].getBoundingClientRect();\n\n        this.resizeValue = this.Height - Number(this.bottom.height);\n\n        this.resizeHor = this.el.nativeElement.querySelectorAll('div.splitter-horizontal')[0];\n        this.resizeHor.style.opacity    = '0.5';\n        this.resizeHor.style.background = '#aaa';\n        this.resizeHor.style.width      = rect.width.toString() + 'px';\n        this.resizeHor.style.left       = rect.left + 'px';\n        this.resizeHor.style.top        = this.resizeValue + 'px';\n    }\n\n    public  onSeparatorLeftMouseDown( event:any ) \n    {\n        if( ! this.left.isOpened ) return;\n\n        this.drag.x  = event.clientX;\n        this.drag.y  = event.clientY;\n        this.delta.x = 0;\n        this.delta.y = 0;\n\n        this.left.width   = this.left.width  ?? '0';\n        this.top.height   = this.top.height  ?? '0';\n\n        this.isLeftActive = true;\n        this.resizeValue  = +this.left.width;\n\n        let splitter      = this.el.nativeElement.querySelectorAll('div.splitter')[0];\n            splitter.style.cursor = 'col-resize';\n\n        let leftPanel = this.el.nativeElement.querySelectorAll('div.leftPanel');\n        let rect = leftPanel[0].getBoundingClientRect();\n\n        let topHeight = +this.top.height - (this.top.seperatorBorderThickness * 2) + 2;            \n\n        this.resizeVert = this.el.nativeElement.querySelectorAll('div.splitter-vertical')[0];\n        this.resizeVert.style.opacity    = '0.5';\n        this.resizeVert.style.background = '#aaa';\n        this.resizeVert.style.border     = '1px solid #aaa';\n        this.resizeVert.style.height     = rect.height + 'px';\n        this.resizeVert.style.top        = topHeight + 'px';\n        this.resizeVert.style.left       = (this.resizeValue - 4).toString() + 'px';    \n    }\n\n    public  onSeparatorRightMouseDown( event:any ) \n    {\n        if( ! this.right.isOpened ) return;\n\n        this.drag.x  = event.clientX;\n        this.drag.y  = event.clientY;\n        this.delta.x = 0;\n        this.delta.y = 0;\n\n        this.right.width   = this.right.width ?? '0';\n        this.top.height    = this.top.height  ?? '0';\n\n        this.isRightActive = true;\n\n        let splitter       = this.el.nativeElement.querySelectorAll('div.splitter')[0];\n            splitter.style.cursor = 'col-resize';\n\n        let  rect   = splitter.getBoundingClientRect();\n        this.Width  = rect.width;\n\n        let rightPanel = this.el.nativeElement.querySelectorAll('div.rightPanel');\n        rect = rightPanel[0].getBoundingClientRect();\n\n        this.resizeValue  = +this.right.width;\n\n        let topHeight = +this.top.height - (this.top.seperatorBorderThickness * 2) + 6;            \n\n        this.resizeVert = this.el.nativeElement.querySelectorAll('div.splitter-vertical')[0];\n        this.resizeVert.style.opacity    = '0.5';\n        this.resizeVert.style.background = '#aaa';\n        this.resizeVert.style.border     = '1px solid #aaa';\n        this.resizeVert.style.height     = rect.height + 'px';\n        this.resizeVert.style.top        = topHeight + 'px';\n        this.resizeVert.style.left       = (this.Width - rect.width).toString() + 'px';    \n    }\n\n    public  buttonTopMouseDown(event:any) \n    {\n        this.top.isOpened = ! this.top.isOpened;       \n        this.top.width    =   this.top.isOpened ? this.top.size.toString() : '4';\n    }\n\n    public  buttonLeftMouseDown(event:any) \n    {\n        this.left.isOpened = ! this.left.isOpened;       \n        this.left.width    =   this.left.isOpened ? this.left.size.toString() : '4';\n    }\n\n    public  buttonRightMouseDown(event:any) \n    {\n        this.right.isOpened = ! this.right.isOpened;       \n        this.right.width    =   this.right.isOpened ? this.right.size.toString() : '6';\n    }\n\n    public  buttonBottomMouseDown(event:any) \n    {\n        this.bottom.isOpened = ! this.bottom.isOpened;       \n        this.bottom.height   =   this.bottom.isOpened ? this.bottom.size.toString() : '6';\n    }\n\n    public  onSplitterMouseMove( event : any ) \n    {\n        if( event.buttons === 0 ) return;\n\n        event.stopPropagation();\n        event.preventDefault();\n\n        this.delta.x = event.clientX - this.drag.x;\n        this.delta.y = event.clientY - this.drag.y;\n\n         this.bottom.height = this.bottom.height ?? '0';\n         this.left.width    = this.left.width    ?? '0';\n         this.right.width   = this.right.width   ?? '0';\n\n         if( this.isTopActive    ) { this.resizeValue =               +this.bottom.height + this.delta.y;      this.resizeHor .style.top  = this.resizeValue + 'px'; }\n         if( this.isLeftActive   ) { this.resizeValue =               +this.left.width    + this.delta.x - 4;  this.resizeVert.style.left = this.resizeValue + 'px'; }\n         if( this.isRightActive  ) { this.resizeValue = this.Width  - +this.right.width   + this.delta.x + 0;  this.resizeVert.style.left = this.resizeValue + 'px'; }\n         if( this.isBottomActive ) { this.resizeValue = this.Height - +this.bottom.height + this.delta.y + 0;  this.resizeHor .style.top  = this.resizeValue + 'px'; }\n    }\n\n    public  onSplitterMouseUp( event: any ) \n    {\n         var splitter = this.el.nativeElement.querySelectorAll('div.splitter');\n         if( splitter.length > 0 ) splitter[0].style.cursor = 'default';\n\n        if( this.isTopActive || this.isBottomActive )\n        {\n            var resizer = this.el.nativeElement.querySelectorAll('div.splitter-horizontal')[0];\n                resizer.style.top        = '-10px';\n                resizer.style.background = 'transparent';\n                resizer.style.border     = 'NONE';\n\n            if( this.isTopActive )\n            {\n                                  this.resizeValue = +this.top.size + this.delta.y; // I did not test\n                this.top.height = this.resizeValue.toString();                \n                this.top.size   = this.resizeValue;  \n\n                this.actionNotifier$.next( { panel : 'top', size : this.resizeValue } );\n            }\n\n            if( this.isBottomActive )\n            {\n                                     this.resizeValue = +this.bottom.size - this.delta.y;\n                this.bottom.height = this.resizeValue.toString();                \n                this.bottom.size   = this.resizeValue;   \n\n                this.actionNotifier$.next( { panel : 'bottom', size : this.resizeValue } );\n            }\n        }\n\n        if( this.isLeftActive || this.isRightActive )\n        {\n            let resizer = this.el.nativeElement.querySelectorAll('div.splitter-vertical')[0];\n                resizer.style.left       = '-10px';\n                resizer.style.background = 'trasparent';\n                resizer.style.border     = 'NONE';\n\n            if( this.isLeftActive )\n            {\n                                  this.resizeValue = +this.left.size + this.delta.x;\n                this.left.width = this.resizeValue.toString();                \n                this.left.size  = this.resizeValue;                \n\n                this.actionNotifier$.next( { panel : 'left', size : this.resizeValue } );\n            }\n\n            if( this.isRightActive )\n            {\n                                   this.resizeValue = +this.right.size - this.delta.x;                \n                this.right.width = this.resizeValue.toString();                \n                this.right.size  = this.resizeValue;                \n\n                this.actionNotifier$.next( { panel : 'right', size : this.resizeValue } );\n            }\n        }\n\n        this.isTopActive    = false;\n        this.isBottomActive = false;\n        this.isLeftActive   = false;\n        this.isRightActive  = false;\n    } \n\n    private initPanels()\n    {\n            this.top   .index                    = this.settings.panels.findIndex( x => x.layout === SplitterPanels.top );\n        if( this.top   .index > -1 )\n        {\n            var                                    topSettings = this.settings.panels[this.top.index];\n            this.top   .seperatorThickness       = topSettings.seperatorThickness   ?? 3;\n            this.top  .seperatorBackground       = topSettings.seperatorBackground  ?? '#aaa';\n            this.top   .size                     = topSettings.size                 ?? 50;\n            this.top   .isOpened                 = topSettings.isOpened             ?? true;\n            this.top   .isButtonVisible          = topSettings.isButtonVisible      ?? true;\n            this.top   .isSeperatorLocked        = topSettings.isSeperatorLocked    ?? false;\n            this.top   .cursor                   = topSettings.isSeperatorLocked     ? 'default' : 'row-resize';  \n            this.top   .seperatorBorderThickness = this.top.seperatorThickness > 1   ? 1 : 0;\n            this.top   .seperatorBorderColor     = '#888';\n            this.top   .display                  = '';  \n            this.top   .height                   = this.top.isOpened ? (this.top.size).toString() : '0';\n\n            if( this.isSplitterBorderVisible )\n            {\n                this.topBorder = `1px 1px 0 1px`;\n            }\n\n            this.isTopPanelVisible = true;\n        }\n\n            this.left  .index                    = this.settings.panels.findIndex( x => x.layout === SplitterPanels.left );\n        if( this.left  .index > -1 )\n        {\n            var                                    leftSettings = this.settings.panels[this.left.index];\n            this.left  .seperatorThickness       = leftSettings.seperatorThickness   ?? 3;\n            this.left  .seperatorBackground      = leftSettings.seperatorBackground  ?? '#ccc';\n            this.left  .size                     = leftSettings.size                 ?? 50;\n            this.left  .isOpened                 = leftSettings.isOpened             ?? true;\n            this.left  .isButtonVisible          = leftSettings.isButtonVisible      ?? true;\n            this.left  .isSeperatorLocked        = leftSettings.isSeperatorLocked    ?? false;\n            this.left  .cursor                   = leftSettings.isSeperatorLocked     ? 'default' : 'col-resize';  \n            this.left  .seperatorBorderThickness = this.left.seperatorThickness > 1   ? 1 : 0;\n            this.left  .seperatorBorderColor     = '#aaa';\n            this.left  .display                  = '';  \n            this.left  .width                    = (this.left.isOpened ? leftSettings.size.toString() : '1');\n\n            if( this.isSplitterBorderVisible )\n            {\n                this.leftBorder = `${this.top.index === -1 ? '1px' : '0'} 0 1px 1px`;\n            }\n\n            this.isLeftPanelVisible = true;\n        }\n\n            this.right .index                    = this.settings.panels.findIndex( x => x.layout === SplitterPanels.right );\n        if( this.right .index > -1 )\n        {\n            var                                    rightSettings = this.settings.panels[this.right.index];\n            this.right .seperatorThickness       = rightSettings.seperatorThickness  ?? 3;\n            this.right .seperatorBackground      = rightSettings.seperatorBackground ?? '#ccc';\n            this.right .size                     = rightSettings.size                ?? 50;\n            this.right .isOpened                 = rightSettings.isOpened            ?? true;\n            this.right .isButtonVisible          = rightSettings.isButtonVisible     ?? true;\n            this.right .isSeperatorLocked        = rightSettings.isSeperatorLocked   ?? false;\n            this.right .cursor                   = rightSettings.isSeperatorLocked    ? 'default' : 'col-resize';  \n            this.right .seperatorBorderThickness = this.right.seperatorThickness > 1  ? 1 : 0;\n            this.right .seperatorBorderColor     = '#aaa';\n            this.right .display                  = '';  \n            this.right .width                    = (this.right.isOpened ? this.right.size.toString() : '5');\n\n\n            if( this.isSplitterBorderVisible )\n            {\n                this.rightBorder = `${this.top.index === -1 ? '1px' : '0'} 1px 1px 0`;\n            }\n\n            this.isRightPanelVisible = true;\n        }\n\n            this.bottom.index                    = this.settings.panels.findIndex( x => x.layout === SplitterPanels.bottom );\n        if( this.bottom.index > -1 )\n        {\n            var                                    bottomSettings = this.settings.panels[this.bottom.index];\n            this.bottom.seperatorThickness       = bottomSettings.seperatorThickness  ?? 3;\n            this.bottom.seperatorBackground      = bottomSettings.seperatorBackground ?? '#ccc';\n            this.bottom.size                     = bottomSettings.size                ?? 50;\n            this.bottom.isOpened                 = bottomSettings.isOpened            ?? true;\n            this.bottom.isButtonVisible          = bottomSettings.isButtonVisible     ?? true;\n            this.bottom.isSeperatorLocked        = bottomSettings.isSeperatorLocked   ?? false;\n            this.bottom.cursor                   = bottomSettings.isSeperatorLocked    ? 'default' : 'row-resize';  \n            this.bottom.seperatorBorderThickness = this.bottom.seperatorThickness > 1  ? 1 : 0;\n            this.bottom.seperatorBorderColor     = '#aaa';\n            this.bottom.display                  = '';  \n            this.bottom.height                   = (this.bottom.isOpened ? (this.bottom.size).toString() : '0');\n\n            if( this.isSplitterBorderVisible )\n            {\n                this.bottomBorder = `0 ${this.right.index === -1?'1px':'0'} 1px ${this.left.index === -1?'1px':'0'}`;\n            }\n\n            this.isBottomPanelVisible = true;\n        }\n\n        if( this.isSplitterBorderVisible )\n        {\n            this.centerBorder = `${this.top.index === -1 ? '1px' : '0'} ${this.right.index === -1 ? '1px' : '0'} ${this.bottom.index === -1 ? '1px' : '0'} ${this.left.index === -1 ? '1px' : '0'}`;\n        }\n    }\n}\n\nexport enum SplitterPanels\n{\n    none   = 0,\n    top    = 1,\n    right  = 2,\n    bottom = 3,\n    left   = 4,\n    center = 5\n}\n\nexport class SplitterPanel implements ISplitterPanel\n{\n    index?                   : number;\n    layout                   : SplitterPanels;\n    display                  : string;\n    cursor                   : string;\n    left?                    : string;\n    top?                     : string;\n    width?                   : string;\n    height?                  : string;\n    size                     : number;    \n    buttonTop?               : number;\n    buttonLeft?              : number;\n    isButtonVisible          : boolean;\n    isSeperatorLocked        : boolean;\n    isOpened                 : boolean;\n    seperatorThickness       : number;\n    seperatorBackground      : string;\n    seperatorBorderThickness : number;\n    seperatorBorderColor     : string;\n    seperatorColor           : string;\n\n    constructor()\n    {\n        this.layout                   = SplitterPanels.none;\n        this.display                  = 'none';\n        this.cursor                   = 'row-resize';\n        this.seperatorThickness       = 3;\n        this.seperatorBorderThickness = 1;\n        this.seperatorColor           = '#eee';\n        this.seperatorBorderColor     = '#ccc';\n        this.seperatorBackground      = '#eee';\n        this.size                     = 50;\n        this.isOpened                 = false;\n        this.isButtonVisible          = true;\n        this.isSeperatorLocked        = false;\n    }\n}\n\nexport interface ISplitterPanel\n{\n    index?              : number;\n    layout              : SplitterPanels;\n    left?               : string;\n    top?                : string;\n    width?              : string;\n    height?             : string;\n    size                : number;\n    seperatorThickness? : number;\n    seperatorBackground?: string;\n    buttonTop?          : number;\n    buttonLeft?         : number;\n    isButtonVisible?    : boolean;\n    isSeperatorVisible? : boolean;\n    isSeperatorLocked?  : boolean;\n    isOpened?           : boolean;\n    panels?             : Array<ISplitterPanel>;\n}\n\nexport interface ISplitter\n{\n    buttonSize? : number;\n    panels      : Array<ISplitterPanel>;\n}","<div class=\"splitter\" (mousemove)=\"onSplitterMouseMove($event)\" (mouseup)=\"onSplitterMouseUp($event)\">\n    <div *ngIf=\"isTopPanelVisible\" class=\"topPanel\" [ngStyle]=\"{ 'height': top.height + 'px', 'border-width': topBorder }\">\n        <div *ngIf=\"top.isOpened\" class=\"topPanelContent\">\n            <ng-content select=\"[panel=top]\"></ng-content>\n        </div>\n        <div class=\"seperatorTop\" (mousedown)=\"onSeparatorTopMouseDown($event)\" [ngStyle]=\"{ 'height' \t     : top.seperatorThickness + 'px', \n                                                                                             'border-width' : top.seperatorBorderThickness + 'px 0', \n                                                                                             'border-color' : top.seperatorBorderColor,\n                                                                                             'background'   : top.seperatorBackground }\"> \n            <div *ngIf=\"top.isButtonVisible && ! top.isSeperatorLocked\">\n\n                <ng-container *ngIf=\"top.isOpened; then topOpened else topClosed\"></ng-container>\n\n                <ng-template #topOpened>\n                    <div class=\"buttonTopOpened\" [ngStyle]=\"{ 'background' : top.seperatorBackground, 'border-color' : top.seperatorBorderColor }\"  (mousedown)=\"buttonBottomMouseDown($event)\">\n                        <div [ngStyle]=\"{'position': 'absolute', 'background': top.seperatorBackground, 'left': '-2px', 'top' : '0.5px', 'width': '2px', 'height': (top.seperatorThickness-1)+'px'}\"></div>\n                        <div [ngStyle]=\"{'position': 'absolute', 'background': top.seperatorBackground, 'left': '49px', 'top' : '0.5px', 'width': '2px', 'height': (top.seperatorThickness-1)+'px'}\"></div>\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 14\" enable-background=\"new 0 0 50 14\">\n                            <polygon  class=\"button-content\" points=\"22,2 30,2 26,6 22,2\"/>            \n                        </svg>\n                    </div>\n                </ng-template>\n\n                <ng-template #topClosed>\n                    <div class=\"buttonTopClosed\" [ngStyle]=\"{ 'background' : bottom.seperatorBackground, 'border-color' : top.seperatorBorderColor }\" (mousedown)=\"buttonBottomMouseDown($event)\">\n                    <div [ngStyle]=\"{'position': 'absolute', 'background':  bottom.seperatorBackground, 'left': '-1.5px', 'top' : '5.5px', 'width': '2px', 'height': (top.seperatorThickness-1)+'px'}\"></div>\n                    <div [ngStyle]=\"{'position': 'absolute', 'background': bottom.seperatorBackground, 'left': '49.5px', 'top' : '5.5px', 'width': '2px', 'height': (top.seperatorThickness-1)+'px'}\"></div>\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"8\" viewBox=\"0 0 50 8\" [ngStyle]=\"{'position': 'absolute', 'top' : 0}\">\n                        <polygon class=\"button-content\" points=\"22,6 30,6 26,2 22,6\"/>            \n                    </svg>\n                    </div>\n                </ng-template> \n\n            </div> \n        </div>            \n    </div>\n\n    <div class=\"main\">\n        <div *ngIf=\"isLeftPanelVisible\" class=\"leftPanel\" [ngStyle]=\"{ 'width': left.width + 'px', 'border-width': leftBorder }\">\n            <div *ngIf=\"left.isOpened\" class=\"leftPanelContent\">\n                <ng-content select=\"[panel=left]\"></ng-content>\n            </div>\n\n            <div class=\"seperatorLeft\" (mousedown)=\"onSeparatorLeftMouseDown($event)\" [ngStyle]=\"{ 'width' \t\t  : left.seperatorThickness + 'px', \n                                                                                                   'border-width' : '0 ' + left.seperatorBorderThickness + 'px', \n                                                                                                   'border-color' : left.seperatorBorderColor,\n                                                                                                   'background'   : left.seperatorBackground }\"> \n                <div *ngIf=\"left.isButtonVisible && ! left.isSeperatorLocked\">\n\n                    <ng-container *ngIf=\"left.isOpened; then leftOpened else leftClosed\"></ng-container>\n\n                    <ng-template #leftOpened>\n                    <div class=\"buttonLeftOpened\" [ngStyle]=\"{ 'background'   : left.seperatorBackground, \n                                                               'border-color' : left.seperatorBorderColor\n                                                                }\" (mousedown)=\"buttonLeftMouseDown($event)\">\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': left.seperatorBackground, 'left': (left.seperatorThickness+3)+'px', 'top'    : '-2px', 'width': (left.seperatorThickness-1)+'px', 'height': '3px'}\"></div>\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': left.seperatorBackground, 'left': (left.seperatorThickness+3)+'px', 'bottom' : '-2px', 'width': (left.seperatorThickness-1)+'px', 'height': '3px'}\"></div>\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 50\" enable-background=\"new 0 0 8 50\">\n                            <polygon  class=\"button-content\" points=\"6,21 6,29 2,25 6,21\"/>            \n                        </svg>\n                    </div>\n                    </ng-template>\n\n                    <ng-template #leftClosed>\n                        <div class=\"buttonLeftClosed\" [ngStyle]=\"{ 'background' : left.seperatorBackground, 'border-color' : left.seperatorBorderColor }\" (mousedown)=\"buttonLeftMouseDown($event)\">\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': left.seperatorBackground, 'left': '0px', 'top'    : '-1px', 'width': (left.seperatorThickness+0)+'px', 'height': '3px'}\"></div>\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': left.seperatorBackground, 'left': '0px', 'bottom' : '-1px', 'width': (left.seperatorThickness+0)+'px', 'height': '3px'}\"></div>\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 40\" enable-background=\"new 0 0 8 40\">\n                            <polygon class=\"button-content\" points=\"2,21 2,29 6,25 2,21\"/>            \n                            </svg>\n                        </div>\n                    </ng-template>\n\n                </div>\n            </div>            \n\n        </div>\n        <div class=\"content\">\n            <div class=\"centerPanel\" [ngStyle]=\"{ 'border-width': centerBorder }\">\n                <div class=\"centerPanelContent\" [ngStyle]=\"{ 'height': 'calc(100% - 11.5px)'}\">\n\t\t\t\t\t<ng-content select=\"[panel=center]\"></ng-content>\n                </div>\n            </div>\n\n            <div *ngIf=\"isBottomPanelVisible\" class=\"bottomPanel\" [ngStyle]=\"{ 'height': bottom.height + 'px', 'border-width': bottomBorder }\">\n                <div class=\"seperatorBottom\" (mousedown)=\"onSeparatorBottomMouseDown($event)\" [ngStyle]=\"{ 'height'       : bottom.seperatorThickness + 'px', \n                                                                                                           'border-width' : bottom.seperatorBorderThickness + 'px 0', \n                                                                                                           'border-color' : bottom.seperatorBorderColor,\n                                                                                                           'background'   : bottom.seperatorBackground }\"> \n                    <div *ngIf=\"bottom.isButtonVisible && ! bottom.isSeperatorLocked\">\n\n                        <ng-container *ngIf=\"bottom.isOpened; then bottomOpened else bottomClosed\"></ng-container>\n\n                        <ng-template #bottomOpened>\n                            <div class=\"buttonBottomOpened\" [ngStyle]=\"{ 'background' : bottom.seperatorBackground, 'border-color' : bottom.seperatorBorderColor }\"  (mousedown)=\"buttonBottomMouseDown($event)\">\n                                <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': bottom.seperatorBackground, 'left': '-2px', 'top' : '0.5px', 'width': '2px', 'height': (bottom.seperatorThickness-1)+'px'}\"></div>\n                                <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': bottom.seperatorBackground, 'left': '49px', 'top' : '0.5px', 'width': '2px', 'height': (bottom.seperatorThickness-1)+'px'}\"></div>\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 50 14\" enable-background=\"new 0 0 50 14\">\n                                    <polygon  class=\"button-content\" points=\"22,2 30,2 26,6 22,2\"/>            \n                                </svg>\n                            </div>\n                        </ng-template>\n\n                        <ng-template #bottomClosed>\n                            <div class=\"buttonBottomClosed\" [ngStyle]=\"{ 'background' : bottom.seperatorBackground, 'border-color' : bottom.seperatorBorderColor }\" (mousedown)=\"buttonBottomMouseDown($event)\">\n                            <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background':  bottom.seperatorBackground, 'left': '-1.5px', 'top' : '5.5px', 'width': '2px', 'height': (bottom.seperatorThickness-1)+'px'}\"></div>\n                            <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': bottom.seperatorBackground, 'left': '49.5px', 'top' : '5.5px', 'width': '2px', 'height': (bottom.seperatorThickness-1)+'px'}\"></div>\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"8\" viewBox=\"0 0 50 8\" [ngStyle]=\"{'position': 'absolute', 'top' : 0}\">\n                                <polygon class=\"button-content\" points=\"22,6 30,6 26,2 22,6\"/>            \n                            </svg>\n                            </div>\n                        </ng-template> \n\n                    </div> \n                </div>            \n\n                <div *ngIf=\"bottom.isOpened\" class=\"bottomPanelContent\">\n                    <ng-content select=\"[panel=bottom]\"></ng-content>\n                </div> \n            </div>\n        </div>\n\n        <div *ngIf=\"isRightPanelVisible\" class=\"rightPanel\" [ngStyle]=\"{ 'width': right.width + 'px', 'border-width': rightBorder }\">\n\n            <div class=\"seperatorRight\" (mousedown)=\"onSeparatorRightMouseDown($event)\" [ngStyle]=\"{ 'width' \t    : right.seperatorThickness + 'px', \n                                                                                                     'border-width' : '0 ' + right.seperatorBorderThickness + 'px', \n                                                                                                     'border-color' : right.seperatorBorderColor,\n                                                                                                     'background'   : right.seperatorBackground }\"> \n                <div *ngIf=\"right.isButtonVisible && ! right.isSeperatorLocked\">\n\n                    <ng-container *ngIf=\"right.isOpened; then rightOpened else rightClosed\"></ng-container>\n\n                    <ng-template #rightOpened>\n                    <div class=\"buttonRightOpened\" [ngStyle]=\"{ 'background' : right.seperatorBackground, 'border-color' : right.seperatorBorderColor }\"  (mousedown)=\"buttonRightMouseDown($event)\">\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': right.seperatorBackground, 'left': '0', 'top'    : '-2px', 'width': (right.seperatorThickness-0.5)+'px', 'height': '3px'}\"></div>\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': right.seperatorBackground, 'left': '0', 'bottom' : '-2px', 'width': (right.seperatorThickness-0.5)+'px', 'height': '3px'}\"></div>\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 50\" enable-background=\"new 0 0 8 50\">\n                            <polygon  class=\"button-content\" points=\"2,21 2,29 6,25 2,21\"/>            \n                        </svg>\n                    </div>\n                    </ng-template>\n\n                    <ng-template #rightClosed>\n                        <div class=\"buttonRightClosed\" [ngStyle]=\"{ 'background' : right.seperatorBackground, 'border-color' : right.seperatorBorderColor }\" (mousedown)=\"buttonRightMouseDown($event)\">\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': right.seperatorBackground, 'left': '6.5px', 'top'    : '-2px', 'width': (right.seperatorThickness-1)+'px', 'height': '3px'}\"></div>\n                        <div class=\"button-patch\" [ngStyle]=\"{'position': 'absolute', 'background': right.seperatorBackground, 'left': '6.5px', 'bottom' : '-1px', 'width': (right.seperatorThickness-1)+'px', 'height': '3px'}\"></div>\n                            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 8 40\" enable-background=\"new 0 0 8 40\">\n                            <polygon class=\"button-content\" points=\"7,21 7,29 2,25 7,21\"/>            \n                            </svg>\n                        </div>\n                    </ng-template>\n\n                </div>\n            </div>            \n\n            <div *ngIf=\"right.isOpened\" class=\"rightPanelContent\">\n                <ng-content select=\"[panel=right]\"></ng-content>\n            </div>\n\n        </div>\n    </div>\n\n  <!-- <div class=\"footer\">\n    <div class=\"details\">details</div>\n    <div class=\"copyright\">&copy; 2023</div>\n  </div> -->\n</div>\n\n<div class=\"splitter-horizontal\"></div>\n<div class=\"splitter-vertical\"></div>   \n","import { NgModule            } from '@angular/core';\nimport { FormsModule         } from '@angular/forms';\nimport { BrowserModule       } from '@angular/platform-browser';\nimport { CommonModule        } from '@angular/common'; \n\nimport { GDCommonModule      } from 'gd-common';\nimport { GDSplitterComponent } from './gd-splitter.component';\n\n@NgModule({\n  declarations: \n  [\n    GDSplitterComponent \n  ],\n  imports: [\n    CommonModule,\n    BrowserModule,\n    FormsModule,\n    GDCommonModule\n  ],\n  exports: \n  [\n      GDSplitterComponent\n  ]\n})\nexport class GDSplitterModule { }\n","/*\n * Public API Surface of gd-splitter\n */\n\nexport * from './lib/gd-splitter.component';\nexport * from './lib/gd-splitter.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}