{"version":3,"file":"gd-dashboard.mjs","sources":["../../../projects/gd-dashboard/src/lib/gd-dashboard.component.ts","../../../projects/gd-dashboard/src/lib/gd-dashboard.component.html","../../../projects/gd-dashboard/src/lib/gd-dashboard.module.ts","../../../projects/gd-dashboard/src/public-api.ts","../../../projects/gd-dashboard/src/gd-dashboard.ts"],"sourcesContent":["import { Component         } from '@angular/core';\nimport { ElementRef        } from '@angular/core';\nimport { Input             } from '@angular/core';\nimport { OnDestroy         } from '@angular/core';\nimport { ViewEncapsulation } from '@angular/core';\n\nimport { SplitterPanel     } from 'gd-splitter';\nimport { IWindowAction     } from 'gd-window';\nimport { GDWindowComponent } from 'gd-window';\nimport { Buttons           } from 'gd-window';\nimport { ContentResponce   } from 'gd-window';\nimport { Subscription      } from 'rxjs';\nimport { Observable        } from 'rxjs';\n\ndeclare var html2canvas : any;\n\n@Component({\n  selector: 'gd-dashboard',\n  templateUrl: \"./gd-dashboard.component.html\",\n  styleUrls:  [\"./gd-dashboard.component.scss\"],\n  encapsulation: ViewEncapsulation.Emulated\n})\nexport class GDDashboardComponent implements OnDestroy \n{\n    @Input() ParentWindowAction      : Observable<IWindowAction> | null = null;\n\n    private drag                     : any;\n    private delta                    : any;\n    private settings                 : any;\n    private isSplitterMouseDown      = false;\n    private thumbnailContainerHeight = 112;\n\n    public  Windows                  : Array<any>;\n    public  Thumbnails               : Array<any>;\n\n    public  resizerPosition          : number = 0;\n\n    public  thumbnailContainer       = new SplitterPanel();\n    public  dashboardContainer       = new SplitterPanel();\n\n    private      isThumbnailContainerOpen        : boolean = false;\n             get IsThumbnailContainerOpen()      : boolean   { return this.isThumbnailContainerOpen;         }     \n    @Input() set IsThumbnailContainerOpen( value : boolean ) {        this.isThumbnailContainerOpen = value; \n\n        this.settings.isOpened = value; \n        this.settings.size     = value ? this.thumbnailContainerHeight : 0; \n    }       \n\n    private      parentWindow        = {} as GDWindowComponent;\n             get ParentWindow()      : GDWindowComponent   { return this.parentWindow;         }     \n    @Input() set ParentWindow( value : GDWindowComponent ) {        this.parentWindow = value; }       \n\n    private      isAutoLayout        : boolean;\n             get IsAutoLayout()      : boolean             { return this.isAutoLayout;         }     \n    @Input() set IsAutoLayout( value : boolean )           {        this.isAutoLayout = value; }       \n\n    //#region Subscriptions\n    private subscriptionParentWindowAction : Subscription | null = null;\n    //#endregion\n\n    constructor( private el : ElementRef ) \n    { \n        this.Windows      = new Array<GDWindowComponent>();\n        this.Thumbnails   = new Array<GDWindowComponent>();\n\n        this.isAutoLayout = true;\n\n        this.dashboardContainer.left   = '0';    \n        this.dashboardContainer.top    = '0';    \n        this.dashboardContainer.width  = '100%';\n        this.dashboardContainer.height = '0';\n\n        this.settings = \n        {\n            isOpened           : this.isThumbnailContainerOpen,\n            isButtonVisible    : true,\n            isSeperatorVisible : true,\n            isSeperatorLocked  : true,\n            seperatorThickness : 3,\n            size               : this.isThumbnailContainerOpen ? this.thumbnailContainerHeight : 0\n        }\n    }\n\n    public  ngOnInit(): void \n    {\n        this.drag  = { x : 0, y : 0 };\n        this.delta = { x : 0, y : 0 };\n\n        this.calculateDashboard();\n    }\n\n    public  ngAfterViewInit() \n    {\n        if( this.ParentWindowAction )\n        {\n            this.subscriptionParentWindowAction = this.ParentWindowAction.subscribe( (action : IWindowAction) => \n            {\n                this.onParentWindowAction( action );\n            });\n        }\n    }\n\n    public  ngOnDestroy()\n    {\n        this.subscriptionParentWindowAction?.unsubscribe();\n    }\n\n    private onParentWindowAction( arg : any ) \n    {\n        if( arg.windowID !== this.parentWindow.ID ) return;\n\n        var responce = new ContentResponce( arg.action, arg.windowID, arg.windowName, null, 'OK', '', true, 50 );\n\n        switch( arg.action ) \n        {\n            case Buttons.resize :  this.layoutDashboard();  break;\n            case Buttons.close  :                           break;\n            default:               responce.result = '';    break;\n        }\n\n        arg.cb( responce );\n    }\n\n    public  ReorderDashboard( arg : any )\n    {\n        var activeWindow = this.Windows.find( w => w.child.ID === arg.window.ID );\n        var dropPosX     = arg.event.clientX;\n        var dropPosY     = arg.event.clientY;\n\n        for( var window of this.Windows )\n        {\n            if( window.child.ID === arg.window.ID              ) continue;\n            if( window.child.HTMLElement.children.length === 0 ) continue;\n\n            var rect = window.child.HTMLElement.children[0].getBoundingClientRect();\n\n            if( dropPosX < rect.left || dropPosX > rect.right || dropPosY < rect.top || dropPosY > rect.bottom ) continue;\n\n            var order = window.order;\n\n            window.order = activeWindow.order;\n                           activeWindow.order = order;\n\n            this.layoutDashboard();\n\n            break;\n        }\n    }\n\n    public  layoutDashboard()\n    {\n        if( ! this.isAutoLayout ) return;\n\n        var width = this.parentWindow.W - 4 - 4;\n        let x     = 20;\n        let y     = 20;\n        let maxY  =  0;\n\n                           this.Windows.sort( function(a, b) { return a.order > b.order ? 1 : -1; } );\n        for( var window of this.Windows )\n        {\n            if( window.child.IsMinimized ) continue;\n\n//            if( x + window.child.W + 20 > width )\n            if( x + 20 > width )\n            {\n                x         = 20;\n                y += maxY + 20;\n                     maxY = 0;\n            }\n\n            window.child.X = x;\n            window.child.Y = y;\n\n            x += window.child.W + 20;\n\n            maxY = Math.max( maxY, window.child.H );\n        }\n\n        setTimeout( () =>\n        {\n            this.el.nativeElement.children[0].children[0].children[0].scrollTop = 0;\n        }, 100);\n    }\n\n    public  onChildMinimize( arg : any ) : void\n    {\n        var   item = this.Windows.find( item => item.child.ID === arg.window.ID );\n        if( ! item ) return;\n\n        let   element  = document.getElementById( item.child.ID );\n        if( ! element ) return;\n\n        let children = element .getElementsByTagName('canvas');\n        if( children.length > 0 )\n        {\n            var rect    = children[0].getBoundingClientRect();\n\n            var content = children[0].toDataURL();\n\n            this.addThumbnail( item, content, rect );\n        }\n        else\n        {\n            var itemElement = element as Element;\n\n            var                                   noneCanvasChildren = element.getElementsByClassName( 'gd-window-scrollArea' );\n            if( noneCanvasChildren.length === 0 ) noneCanvasChildren = element.getElementsByClassName( 'gd-window-scrollArea-no-scrollBars' );\n            if( noneCanvasChildren.length >   0 )\n            {\n                itemElement = noneCanvasChildren[0]\n            }\n\n            var elementBackgound = '#222';\n\n            if( window.getComputedStyle )\n            {\n                elementBackgound = window.getComputedStyle(element, null).getPropertyValue( 'background-color' );\n            }\n\n            var rect = itemElement.getBoundingClientRect();\n\n            html2canvas( itemElement,\n            {\n                backgroundColor : elementBackgound,\n                width           : Math.round(rect.width),\n                height          : Math.round(rect.height)\n            })\n            .then( (canvas : any) => \n            {\n                var content = canvas.toDataURL();\n\n                this.addThumbnail( item, content, rect );\n            });\n        }\n\n        item.child.Minimize();\n        \n        this.layoutDashboard()\n    }\n\n    private addThumbnail( item : any, content : any, rect : any )\n    {\n        if( ! item.child ) return;\n        \n        var ratio = rect.height / rect.width;\n\n        var width  = ratio < 1 ? 100         : 76 * ratio;\n        var height = ratio < 1 ? 100 * ratio : 76;\n        if( height >= 76 )\n        {\n            height = 76;\n            width  = 76 / ratio;\n        }\n        var left   = width < 100 ? (100 - width) / 2 : 0;\n        var top    = 20;\n\n        this.Thumbnails.push( {img : content, id : item.child.ID, text : item.child.Title, imageWidth : width, imageHeight : height, imageLeft : left, imageTop : top } );\n    }\n\n    public  InitContent()\n    {\n        this.Windows = [];\n    }\n\n    public  AddWindow      ( child : GDWindowComponent, childContent : any, order : number )\n    {\n        this.Windows.push( { child, childContent, order } );\n\n        child.Title = childContent.name;\n\n        this.layoutDashboard();\n    }\n\n    public  DeleteWindow   (  arg : any )\n    {\n        var i = this.Windows.findIndex( x => x.child.ID === arg.window.ID );\n        if( i === -1 ) return;\n\n        this.Windows.splice( i, 1 );\n\n        this.layoutDashboard();\n    }\n\n    private calculateDashboard()\n    {\n        this.thumbnailContainer.display                  = '';  \n        this.thumbnailContainer.top                      = '0';  \n        this.thumbnailContainer.width                    = '100%';\n        this.thumbnailContainer.height                   = this.settings.size.toString();  \n        this.thumbnailContainer.isButtonVisible          = this.settings.isButtonVisible;\n        this.thumbnailContainer.isSeperatorLocked        = this.settings.isSeperatorLocked;\n        this.thumbnailContainer.isOpened                 = this.settings.isOpened;\n        this.thumbnailContainer.seperatorThickness       = this.settings.seperatorThickness;\n        this.thumbnailContainer.seperatorBorderThickness = 1;\n        this.thumbnailContainer.seperatorBorderColor     = '#ccc';\n        this.thumbnailContainer.seperatorColor           = '#eee';\n\n        var                                                                                                                         seperatorThickness = this.thumbnailContainer.seperatorThickness + (this.thumbnailContainer.seperatorBorderThickness * 2);\n        var                               hBottom = this.thumbnailContainer.display !== 'none' ? (+(this.thumbnailContainer.height??0) + seperatorThickness) : 0;\n        this.dashboardContainer.height = (hBottom + 1).toString();\n        this.resizerPosition = 0;\n    }\n\n    public  onSplitterMouseMove( event : any ) \n    {\n        if( ! this.isSplitterMouseDown ) return;\n\n        const currentX = event.clientX;\n        const currentY = event.clientY;\n\n        this.delta.x = currentX - this.drag.x;\n        this.delta.y = currentY - this.drag.y;\n\n        var                                                                            seperatorThickness = this.thumbnailContainer.seperatorThickness + (this.thumbnailContainer.seperatorBorderThickness * 2);\n        this.resizerPosition = this.parentWindow.H - +(this.thumbnailContainer.height??0) - seperatorThickness - 4 + this.delta.y;\n    }\n\n    public  onClickThumbnailClose( event : any, thumbnail : any )\n    {\n        event.stopPropagation();\n\n        var i = this.Thumbnails.indexOf(thumbnail);\n        if( i === -1 ) return;\n\n        this.Thumbnails.splice( i, 1 );\n\n            i = this.Windows.findIndex( x => x.child.ID === thumbnail.id );\n        if( i === -1 ) return;\n\n        this.Windows.splice( i, 1 );\n\n        this.layoutDashboard();\n    }\n\n    public  onThumbnailMouseDown( event : any, thumbnail : any )\n    {\n        event.stopPropagation();\n\n        var item = this.Windows.find( item => item.child.ID === thumbnail.id );\n            item.child.IsMinimized = false;\n\n        var i = this.Thumbnails.findIndex( x => x.id === thumbnail.id );\n        if( i === -1 ) return;\n\n        this.Thumbnails.splice( i, 1 );\n\n        this.layoutDashboard();\n    }\n\n    //#region Disabled Splitter \n    public  onSplitterMouseUp( event: any ) \n    {\n        let dashboard = this.el.nativeElement.querySelectorAll('div.gd-dashboard')[0];\n            dashboard.style.cursor = 'default';\n\n        if( this.isSplitterMouseDown )\n        {\n            this.isSplitterMouseDown = false;\n\n            let resizer = this.el.nativeElement.querySelectorAll('div.gd-dashboard-resizer')[0];\n                resizer.style.background = 'transparent';\n\n            this.settings.size = this.parentWindow.H - this.resizerPosition - 9;                \n\n            this.calculateDashboard();\n        }\n    }    \n\n    public  onButtonMouseDown( event : any )\n    {\n        if( !! event ) event.stopPropagation();\n\n                             this.settings.isOpened = ! this.settings.isOpened;       \n        this.settings.size = this.settings.isOpened ? this.thumbnailContainerHeight : 0;\n\n        this.calculateDashboard();\n    }\n\n    public  onSeperatorMouseDown( event : any )\n    {\n        if( this.thumbnailContainer.isSeperatorLocked ) return;\n\n        this.isSplitterMouseDown = true;\n\n        this.drag.x = event.clientX;\n        this.drag.y = event.clientY;\n\n        let dashboard   = this.el.nativeElement.querySelectorAll('div.gd-dashboard')[0];\n            dashboard.style.cursor = 'row-resize';\n\n        let resizer = this.el.nativeElement.querySelectorAll('div.gd-dashboard-resizer')[0];\n            resizer.style.opacity    = 0.5;\n            resizer.style.background = '#bbb';\n            resizer.style.width      = 'calc(100% - 4px)';\n            resizer.style.left       = '2px';\n\n        let                                                                                 seperatorThickness = this.thumbnailContainer.seperatorThickness + (this.thumbnailContainer.seperatorBorderThickness * 2);\n        this.resizerPosition = this.parentWindow.H - +(this.thumbnailContainer.height??0) - seperatorThickness - 4;\n    }\n    //#endregion\n}\n","<div class=\"gd-dashboard\" (mousemove)=\"onSplitterMouseMove($event)\" (mouseup)=\"onSplitterMouseUp($event)\">\n\n\t<div [ngStyle]=\"{ \n\t\t'position' : 'relative',\n\t\t'overflow' : 'hidden', \n\t\t'width'    : '100%', \n\t\t'height'   : 'calc(100% - ' + dashboardContainer.height + 'px)'}\">\n\t\t<div [ngStyle]=\"{ \n\t\t\t'position' : 'relative',\n\t\t\t'overflow' : 'auto', \n\t\t\t'width'    : '100%', \n\t\t\t'height'   : 'calc(100% - 2px)'}\">\n\t\t\t<ng-content></ng-content>\n\t\t\t<div [style.height.px]=20></div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"gd-dashboard-seperator\" (mousedown)=\"onSeperatorMouseDown($event)\" [ngStyle]=\"{ 'bottom' : thumbnailContainer.height+'px', 'height' : thumbnailContainer.seperatorThickness+'px'}\">\n\t\t<div *ngIf=\"thumbnailContainer.isButtonVisible\">\n\n\t\t\t<div *ngIf=\"thumbnailContainer.isOpened; then opened3 else closed3\"></div>\n\n\t\t\t<ng-template #opened3>\n\t\t\t\t<div class=\"buttonOpened\" (mousedown)=\"onButtonMouseDown($event)\">\n\t\t\t\t\t<div style=\"position: absolute; left: -1.5px; top : 0; width: 2px; height: 3px; background: inherit;\"></div>\n\t\t\t\t\t<div style=\"position: absolute; right: -1.5px; top : 0; width: 2px; height: 3px; background: inherit;\"></div>\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 8.5\" enable-background=\"new 0 0 40 8.5\">\n\t\t\t\t\t\t<polygon points=\"18,2 24,2 21,5 18,2\" style=\"stroke-width:1;\"/>            \n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template #closed3>\n\t\t\t\t<div class=\"buttonClosed\" (mousedown)=\"onButtonMouseDown($event)\">\n\t\t\t\t\t<div style=\"position: absolute; left: -1.5px; top : 7px; width: 2px; height: 3px; background: inherit;\"></div>\n\t\t\t\t\t<div style=\"position: absolute; right: -1.5px; top : 7px; width: 2px; height: 3px; background: inherit;\"></div>\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 40 10\" enable-background=\"new 0 0 40 10\">\n\t\t\t\t\t\t<polygon points=\"17,5 23,5 20,2 17,5\" style=\"stroke-width:1;\"/>            \n\t\t\t\t\t</svg>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\n\t\t</div>\n\t</div>\n\n\t<div [ngStyle]=\"{ 'display': thumbnailContainer.display }\"> \n\t\t<div *ngIf=\"thumbnailContainer.isOpened\" class=\"gd-thumbnail-panel\" [style.height.px]=\"thumbnailContainer.height\">\n\t\t\t<ng-template ngFor let-i=\"index\" let-thumbnail [ngForOf]=\"Thumbnails\">\n\t\t\t\t<div class=\"gd-thumbnail-container\" (mousedown)=\"onThumbnailMouseDown($event, thumbnail)\">\n\t\t\t\t\t<div class=\"gd-thumbnail\" title={{thumbnail.name}}>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<img class=\"gd-thumbnail-image\" [src]=\"thumbnail.img\" [style.left.px]=thumbnail.imageLeft \n\t\t\t\t\t\t\t                                                      [style.top.px]=thumbnail.imageTop \n\t\t\t\t\t\t\t\t\t     \t\t\t\t\t\t\t\t\t      [style.width.px]=thumbnail.imageWidth \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t      [style.height.px]=thumbnail.imageHeight>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"gd-thumbnail-button\" (mousedown)=\"onClickThumbnailClose($event, thumbnail)\">\n\t\t\t\t\t\t\t<div class=\"gd-thumbnail-button-X\">\n\t\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" enable-background=\"new 0 0 16 16\">\n\t\t\t\t\t\t\t\t\t<line x1=\"4.5\"  y1=\"2\" x2=\"10.5\" y2=\"8\" fill=\"inherit\" stroke=\"inherit\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-miterlimit=\"10\"></line>\n\t\t\t\t\t\t\t\t\t<line x1=\"10.5\" y1=\"2\" x2=\"4.5\"  y2=\"8\" fill=\"inherit\" stroke=\"inherit\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-miterlimit=\"10\"></line>    \n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"gd-thumbnail-text\">{{thumbnail.text}}</div>\n\t\t\t\t</div>\n\t\t\t</ng-template>\n\t\t</div> \n\n\t</div> \n\n\t<div class=\"gd-dashboard-resizer\" [style.top.px]=\"resizerPosition\"></div>\n\n</div>\n\n","import { NgModule            } from '@angular/core';\nimport { CommonModule        } from '@angular/common'; \nimport { GDCommonModule      } from 'gd-common';\n\nimport { GDDashboardComponent } from './gd-dashboard.component';\n\n@NgModule({\n  declarations: [GDDashboardComponent],\n  imports: [\n    CommonModule,\n    GDCommonModule\n  ],\n  exports: [GDDashboardComponent]\n})\nexport class GDDashboardModule { }\n","/*\n * Public API Surface of gd-dashboard\n */\n\nexport * from './lib/gd-dashboard.component';\nexport * from './lib/gd-dashboard.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}