gd-splitter
Version:
This set of libraries was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.4.
1 lines • 54.7 kB
Source Map (JSON)
{"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\">© 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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