{"version":3,"file":"trudb-tru-desktop-lib.mjs","sources":["../../../projects/tru-desktop-lib/src/lib/services/tru-desktop-service.ts","../../../projects/tru-desktop-lib/src/lib/components/taskbar/tru-desktop-taskbar.ts","../../../projects/tru-desktop-lib/src/lib/components/taskbar/tru-desktop-taskbar.html","../../../projects/tru-desktop-lib/src/lib/components/taskbar/tru-desktop-taskbar-module.ts","../../../projects/tru-desktop-lib/src/lib/tru-desktop-icon-module.ts","../../../projects/tru-desktop-lib/src/lib/components/menubar/tru-desktop-menubar.ts","../../../projects/tru-desktop-lib/src/lib/components/menubar/tru-desktop-menubar.html","../../../projects/tru-desktop-lib/src/lib/components/view/tru-desktop-view.ts","../../../projects/tru-desktop-lib/src/lib/components/view/tru-desktop-view.html","../../../projects/tru-desktop-lib/src/lib/directives/resizable/tru-desktop-resizable.ts","../../../projects/tru-desktop-lib/src/lib/components/window/tru-desktop-window.ts","../../../projects/tru-desktop-lib/src/lib/components/window/tru-desktop-window.html","../../../projects/tru-desktop-lib/src/lib/components/viewport/tru-desktop-viewport.ts","../../../projects/tru-desktop-lib/src/lib/components/viewport/tru-desktop-viewport.html","../../../projects/tru-desktop-lib/src/lib/tru-desktop.ts","../../../projects/tru-desktop-lib/src/lib/tru-desktop.html","../../../projects/tru-desktop-lib/src/lib/components/menubar/tru-desktop-menubar-module.ts","../../../projects/tru-desktop-lib/src/lib/directives/resizable/tru-desktop-resizable-module.ts","../../../projects/tru-desktop-lib/src/lib/components/view/tru-desktop-view-module.ts","../../../projects/tru-desktop-lib/src/lib/components/window/tru-desktop-window-module.ts","../../../projects/tru-desktop-lib/src/lib/components/viewport/tru-desktop-viewport-module.ts","../../../projects/tru-desktop-lib/src/lib/tru-desktop-module.ts","../../../projects/tru-desktop-lib/src/public-api.ts","../../../projects/tru-desktop-lib/src/trudb-tru-desktop-lib.ts"],"sourcesContent":["import { Injectable, Output, EventEmitter } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class TruDesktopService {\r\n  /**\r\n   * @tru.doc function\r\n   * @name DesktopService.createDesktop\r\n   * @module tru.desktop\r\n   *\r\n   * @description\r\n   * Creates a new desktop instance.\r\n   *\r\n   * @returns {object} Desktop\r\n   */\r\n  public createDesktop = function () {\r\n    var desktop = new Desktop();\r\n    return desktop;\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * @tru.desktop.doc class\r\n * @name DesktopService.Desktop\r\n * @module tru.desktop\r\n *\r\n * @description Desktop defines a logical desktop.  Any non-dom properties and elements needed by the desktop should\r\n * be defined in this class\r\n *\r\n */\r\nexport class Desktop {\r\n  options = new DesktopOptions();\r\n  windowConfig = new WindowConfig();\r\n  viewConfig = new ViewConfig();\r\n};\r\n\r\n/**\r\n * @tru.desktop.doc class\r\n * @name DesktopService.DesktopOptions\r\n * @module tru.desktop\r\n *\r\n * @description Default DesktopOptions class.  DesktopOptions are defined by the application developer and overlaid\r\n * over this object.\r\n *\r\n */\r\nexport class DesktopOptions {\r\n  allowDirtyClose = false;\r\n  allowInvalidClose = false;\r\n  cancelEditingOnNavigation = false;\r\n  canCloseFn = undefined;\r\n  canNavigateFn = undefined;\r\n  displayViewportDimensions = false;\r\n  enableAnimation = true;\r\n  enableWindowCascading = true;\r\n  logoUrl = undefined;\r\n  menubarHeight = 32;\r\n  menubarConfig = undefined;\r\n  showLaunchMenu = false;\r\n};\r\n\r\n\r\n/**\r\n * @tru.desktop.doc class\r\n * @name DesktopService.WindowConfig\r\n * @module tru.desktop\r\n *\r\n * @description\r\n * Default configuration object for a window. windowConfig properties can be defined by the application developer and overlaid\r\n * over this object.\r\n *\r\n */\r\nexport class WindowConfig {\r\n  active = true;\r\n  bottom = 'auto';\r\n  globals = undefined;\r\n  height = '400px';\r\n  isDirty = false;\r\n  isInvalid = false;\r\n  left = 0;\r\n  maximized = undefined;\r\n  minHeight = '200px';\r\n  minimized = false;\r\n  minWidth = '200px';\r\n  outOfBounds = false;\r\n  savedPosition = {};\r\n  right = 'auto';\r\n  scope = undefined;\r\n  title = '';\r\n  top = 0;\r\n  width = '400px';\r\n  views = Array<ViewConfig>();\r\n  zIndex = -1;\r\n  context = null;\r\n  isReadOnly = false;\r\n  unsubscribes = [];\r\n  wasReadOnly = false;\r\n\r\n  destroy = () => {\r\n    while (this.unsubscribes.length) this?.unsubscribes?.shift()?.call();\r\n    this.context = undefined;\r\n  }\r\n};\r\n\r\n/**\r\n * @tru.desktop.doc class\r\n * @name truDesktopComponent.ViewConfig\r\n * @module tru.desktop\r\n *\r\n * @description\r\n * Default configuration object for a view. viewConfig properties can be defined by the application developer and overlaid\r\n * over this object.\r\n *\r\n */\r\nexport class ViewConfig {\r\n  active = true;\r\n  entities = undefined;\r\n  entityIndex = 0;\r\n  isDirty = false;\r\n  isEditing = false;\r\n  isInvalid = false;\r\n  componentName = undefined;\r\n  windowConfig = null;\r\n};\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'tru-desktop-taskbar',\r\n  templateUrl: './tru-desktop-taskbar.html',\r\n  styleUrls: ['./tru-desktop-taskbar.css']\r\n})\r\nexport class TruDesktopTaskbar implements OnInit {\r\n\r\n  @Input() windows;\r\n  @Input() desktopCtrl;\r\n\r\n  options = null;\r\n  desktopShown = false;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    this.options = this.desktopCtrl.getOptions();\r\n  }\r\n\r\n  updateWindowState = function (wdw) {\r\n    if (wdw.active)\r\n      this.desktopCtrl.minimize(wdw);\r\n    else if (!wdw.outOfBounds)\r\n      this.desktopCtrl.restore(wdw);\r\n    else if (wdw.outOfBounds)\r\n      this.desktopCtrl.recover(wdw);\r\n  };\r\n\r\n  hideShowAll = function () {\r\n    this.desktopShown = this.desktopCtrl.hideShowAll();\r\n  };\r\n\r\n  close = function (e, wdw) {\r\n    this.desktopCtrl.closeWindow(wdw);\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n  };\r\n}\r\n","<div class=\"desktop-taskbar-container\">\r\n  <div class=\"desktop-taskbar-launch-menu\" *ngIf=\"options.showLaunchMenu\">\r\n    <div class=\"desktop-taskbar-launch-button\">\r\n      <span class=\"desktop-icon-windows\"></span>\r\n    </div>\r\n  </div>\r\n  <div class=\"desktop-taskbar-list\" [ngClass]=\"{'desktop-taskbar-list-offset': options.showLaunchMenu}\">\r\n    <ul>\r\n      <li class=\"am-fade-and-scale desktop-text\"\r\n          *ngFor=\"let window of windows\"\r\n          (click)=\"updateWindowState(window)\">\r\n        <div class=\"desktop-relative desktop-taskbar-list-item\" [ngClass]=\"{'desktop-active-taskbar-list-item': window.active, 'desktop-minimized-taskbar-list-item': window.minimized, 'desktop-taskbar-list-item-recover': window.outOfBounds}\">\r\n          <div class=\"desktop-taskbar-list-item-title\">\r\n            <span>{{window.title}}</span>\r\n          </div>\r\n          <i class=\"desktop-icon-close desktop-taskbar-list-item-close\" [ngClass]=\"{'desktop-taskbar-list-item-close-minimized': window.minimized}\" (click)=\"close($event, window)\"></i>\r\n        </div>\r\n      </li>\r\n    </ul>\r\n  </div>\r\n  <div class=\"desktop-taskbar-hide\">\r\n    <div class=\"desktop-taskbar-hide-button\" (click)=\"hideShowAll()\" >\r\n\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { TruDesktopTaskbar } from \"./tru-desktop-taskbar\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopTaskbar],\r\n  imports: [CommonModule, FormsModule],\r\n  exports: [TruDesktopTaskbar]\r\n})\r\nexport class TruDesktopTaskbarModule { }\r\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { MatIconRegistry } from \"@angular/material/icon\";\n\nconst PREVIOUS = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"/></svg>\n`;\n\nconst NEXT = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8-8-8z\"/></svg>\n`;\n\nconst MINIMIZE = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M6 12h12v2H6v-2z\"/></svg>\n`;\n\nconst MAXIMIZE = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M16 8v8H8V8h8m2-2H6v12h12V6z\"/></svg>\n`;\n\nconst RESTORE = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\">\n  <g>\n  <rect fill=\"none\" x=\"140\" y=\"134\" width=\"97.00001\" height=\"99\" id=\"svg_7\" stroke=\"#000\"></rect>\n  <rect fill=\"none\" x=\"149\" y=\"125\" width=\"97.00001\" height=\"99\" id=\"svg_8\" stroke=\"#000\"></rect>\n  <rect fill=\"none\" x=\"5.83337\" y=\"237.99628\" width=\"8.99994\" height=\"9.33327\" id=\"svg_9\" stroke=\"#000\"></rect>\n  <rect fill=\"none\" x=\"7.83336\" y=\"236.32962\" width=\"8.99994\" height=\"9.33327\" id=\"svg_11\" stroke=\"#000\"></rect>\n  <rect stroke=\"#000\" id=\"svg_2\" height=\"10.66667\" width=\"12.33333\" y=\"6.5\" x=\"7.5\" fill=\"#fff\"></rect>\n  <rect stroke=\"#000\" id=\"svg_4\" height=\"10.66667\" width=\"12.33333\" y=\"8.5\" x=\"5.5\" fill=\"#fff\"></rect>\n  </g>\n</svg>\n`;\n\nconst CLOSE_ICON = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/></svg>\n`;\n\nconst SAVE = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z\"/></svg>\n`;\n\nconst REVERT = `\n  <svg height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z\"/></svg>\n`;\n\n@NgModule({\n  imports: [CommonModule, FormsModule],\n  declarations: [],\n  exports: []\n})\nexport class TruDesktopIconModule {\n  constructor(sanitizer: DomSanitizer, iconRegistry: MatIconRegistry) {\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-previous-icon\",\n      sanitizer.bypassSecurityTrustHtml(PREVIOUS)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-next-icon\",\n      sanitizer.bypassSecurityTrustHtml(NEXT)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-minimize-icon\",\n      sanitizer.bypassSecurityTrustHtml(MINIMIZE)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-maximize-icon\",\n      sanitizer.bypassSecurityTrustHtml(MAXIMIZE)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-restore-icon\",\n      sanitizer.bypassSecurityTrustHtml(RESTORE)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-close-icon\",\n      sanitizer.bypassSecurityTrustHtml(CLOSE_ICON)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-save-icon\",\n      sanitizer.bypassSecurityTrustHtml(SAVE)\n    );\n    iconRegistry.addSvgIconLiteral(\n      \"tru-desktop-revert-icon\",\n      sanitizer.bypassSecurityTrustHtml(REVERT)\n    );\n  }\n}\n","import { Component, OnInit, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'tru-desktop-menubar',\n  templateUrl: './tru-desktop-menubar.html',\n  styleUrls: ['./tru-desktop-menubar.css'],\n  encapsulation: ViewEncapsulation.None\n})\nexport class TruDesktopMenubar implements OnInit {\n  @Input() desktopCtrl;\n\n  constructor() { }\n\n  options = null;\n  configs = null;\n\n  openWindow = function (event, windowOverrides) {\n    this.desktopCtrl.openWindow(windowOverrides);\n  };\n\n  ngOnInit(): void {\n    this.options = this.desktopCtrl.getOptions();\n    this.configs = this.options.menubarConfig;\n  }\n}\n","<div class=\"desktop-main-menu\" tru-sub-menu>\r\n  <ul class=\"hList desktop-main-menu-nav\">\r\n    <tru-menu *ngFor=\"let config of configs\" [config]=\"config\"></tru-menu>\r\n  </ul>\r\n  <div class=\"desktop-main-menu-controls\"></div>\r\n\r\n</div>\r\n","import { Component, OnInit, Input, ComponentFactoryResolver, ViewContainerRef } from '@angular/core';\nimport { TruComponentLookup } from '@trudb/tru-common-lib';\n\n@Component({\n  selector: 'tru-desktop-view',\n  templateUrl: './tru-desktop-view.html',\n  styleUrls: ['./tru-desktop-view.css']\n})\nexport class TruDesktopView implements OnInit {\n  @Input() view;\n\n  constructor(\n    private viewContainerRef: ViewContainerRef,\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private componentLookup: TruComponentLookup) {\n    \n  }\n\n  ngOnInit(): void {\n    var component = this.componentLookup.get(this.view.componentName);\n    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);\n    const containerRef = this.viewContainerRef.createComponent<any>(componentFactory, 0, this.viewContainerRef.injector);\n    containerRef.instance.view = this.view;\n  }\n}\n","<div></div>\r\n","import { Directive, OnInit, Input, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: '[tru-desktop-resizable]',\n})\nexport class TruDesktopResizable implements OnInit {\n  @Input() window;\n  @Input() maximized;\n  @Input() direction;\n\n  constructor(private elementRef: ElementRef) { }\n\n  currentHeight;\n  currentWidth;\n  currentTop;\n  currentLeft;\n  currentRight;\n  currentBottom;\n  currentMinHeight;\n  currentMinWidth;\n  mouseOffsetX = 0;\n  mouseOffsetY = 0;\n  lastMouseX = 0;\n  lastMouseY = 0;\n  originalHeight = 0;\n  originalWidth = 0;\n  viewport;\n\n  mouseDown = (event) => {\n    if (this.maximized) return;\n    event.preventDefault();\n    this.mouseOffsetY = event.clientY;\n    this.mouseOffsetX = event.clientX;\n    this.originalHeight = parseInt(this.window.height, 10);\n    this.originalWidth = parseInt(this.window.width, 10);\n    this.viewport = this.getViewport();\n    document.addEventListener('mousemove', this.mouseMove);\n    document.addEventListener('mouseup', this.mouseUp);\n  };\n\n  mouseMove = (event) => {\n    var mouseY = event.pageY - this.mouseOffsetY;\n    var mouseX = event.pageX - this.mouseOffsetX;\n    var diffY = mouseY - this.lastMouseY;\n    var diffX = mouseX - this.lastMouseX;\n    this.lastMouseY = mouseY;\n    this.lastMouseX = mouseX;\n\n    this.currentHeight = parseInt(this.window.height, 10);\n    this.currentWidth = parseInt(this.window.width, 10);\n    this.currentTop = parseInt(this.window.top, 10);\n    this.currentLeft = parseInt(this.window.left, 10);\n    this.currentRight = parseInt(this.window.right, 10);\n    this.currentBottom = parseInt(this.window.bottom, 10);\n    this.currentMinHeight = parseInt(this.window.minHeight, 10);\n    this.currentMinWidth = parseInt(this.window.minWidth, 10);\n\n    if (this.direction.indexOf(\"w\") > -1) {\n      if (this.currentWidth - diffX < this.currentMinWidth) this.mouseOffsetX = this.mouseOffsetX - (diffX - (diffX = this.currentWidth - this.currentMinWidth));\n\n      //Contain resizing to the west\n      if (this.currentLeft + diffX < 0)\n        this.mouseOffsetX = this.mouseOffsetX - (diffX - (diffX = 0 - this.currentLeft));\n\n      this.window.left = (this.currentLeft + diffX) + 'px';\n      this.window.width = (this.currentWidth - diffX) + 'px';\n    }\n    if (this.direction.indexOf(\"n\") > -1) {\n      if (this.currentHeight - diffY < this.currentMinHeight) this.mouseOffsetY = this.mouseOffsetY - (diffY - (diffY = this.currentHeight - this.currentMinHeight));\n\n      //Contain resizing to the north\n      if (this.currentTop + diffY < 0) this.mouseOffsetY = this.mouseOffsetY - (diffY - (diffY = 0 - this.currentTop));\n\n      this.window.top = (this.currentTop + diffY) + 'px';\n      this.window.height = (this.currentHeight - diffY) + 'px';\n    }\n    if (this.direction.indexOf(\"e\") > -1) {\n      if (this.currentWidth + diffX < this.currentMinWidth) this.mouseOffsetX = this.mouseOffsetX - (diffX - (diffX = this.currentMinWidth - this.currentWidth));\n\n      //Contain resizing to the east\n      if ((this.currentLeft + this.currentWidth) + diffX > this.viewport.offsetWidth)\n        this.mouseOffsetX = this.mouseOffsetX - (diffX - (diffX = this.viewport.offsetWidth - (this.currentLeft + this.currentWidth)));\n\n      this.window.width = (this.currentWidth + diffX) + 'px';\n    }\n    if (this.direction.indexOf(\"s\") > -1) {\n      if (this.currentHeight + diffY < this.currentMinHeight) this.mouseOffsetY = this.mouseOffsetY - (diffY - (diffY = this.currentMinHeight - this.currentHeight));\n\n      //Contain resizing to the south\n      if ((this.currentTop + this.currentHeight) + diffY > this.viewport.offsetHeight)\n        this.mouseOffsetY = this.mouseOffsetY - (diffY - (diffY = this.viewport.offsetHeight - (this.currentTop + this.currentHeight)));\n\n      this.window.height = (this.currentHeight + diffY) + 'px';\n    }\n  }\n\n  mouseUp = (event) => {\n    this.mouseOffsetX = 0;\n    this.mouseOffsetY = 0;\n    this.lastMouseX = 0;\n    this.lastMouseY = 0;\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n  };\n\n  getViewport = function () {\n    return document.querySelectorAll('.desktop-viewport-container')[0];\n  };\n\n  ngOnInit(): void {\n    this.elementRef.nativeElement.addEventListener('mousedown', this.mouseDown);\n  }\n\n  ngOnDestroy() {\n    this.elementRef.nativeElement.removeEventListener('mousedown', this.mouseDown);\n\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n  }\n}\n","import { Component, OnInit, Input, ElementRef } from '@angular/core';\nimport { TruWindowEventHandler, TruWindowAddViewEventHandler, TruWindowAddViewEvent, TruWindowActionEventHandler } from '@trudb/tru-common-lib';\nimport { WindowConfig } from '../../services/tru-desktop-service';\r\n\n@Component({\n  selector: 'tru-desktop-window',\n  templateUrl: './tru-desktop-window.html',\n  styleUrls: ['../../tru-desktop.css', './tru-desktop-window.css'],\n  providers: [WindowConfig, TruWindowActionEventHandler, TruWindowAddViewEventHandler]\n})\nexport class TruDesktopWindow implements OnInit {\n  @Input() window;\n  @Input() viewportCtrl;\n  @Input() desktopCtrl;\n\n  constructor(\n    private windowConfig: WindowConfig,\n    private truWindowAddViewEventHandler: TruWindowAddViewEventHandler,\n    private truWindowActionEventHandler: TruWindowActionEventHandler,\n    private elementRef: ElementRef)\n  {\n  }\n\n  x = 0;\n  y = 0;\n  lastX = 0;\n  lastY = 0;\n  startX = 0;\n  startY = 0;\n  titleBar = undefined;\n  canCloseFn = undefined;\n  canNavigateFn = undefined;\n  cancelEditingOnNavigation = false;\n  viewportDimensions = undefined;\n\n  mouseMove = (event) => {\n\n    this.viewportDimensions = this.viewportCtrl.getViewportDimensions();\n    if (event.pageX <= 0 ||\n      event.pageX >= this.viewportDimensions.width ||\n      this.window.maximized) return false;\n\n    //this.elementRef.nativeElement.setAttribute('style', 'opacity: 0.5;');\n    this.x = event.screenX - this.startX;\n    this.y = event.screenY - this.startY;\n\n    //Top Containment\n    this.y = this.y >= 0 ? this.y : 0;\n    //Bottom Containment\n    this.y = this.y <= this.viewportDimensions.height - this.titleBar.offsetHeight ? this.y : this.viewportDimensions.height - this.titleBar.offsetHeight;\n\n    //Left Containment\n    this.x = this.x >= -(this.titleBar.offsetWidth + this.titleBar.offsetLeft) ? this.x : -(this.titleBar.offsetWidth + this.titleBar.offsetLeft);\n    //Right Containment\n    this.x = this.x <= this.viewportDimensions.width - this.titleBar.offsetLeft ? this.x : this.viewportDimensions.width - this.titleBar.offsetLeft;\n\n    this.window.top = this.y + 'px';\n    this.window.left = this.x + 'px';\n\n  };\n\n  mouseUp = (event) => {\n    if (event.pageY <= this.desktopCtrl.options.viewportTop) {\n      this.desktopCtrl.maximize(this.window);\n    }\n    if (event.pageX <= 0) {\n      this.desktopCtrl.maximizeLeft(this.window);\n    }\n    this.viewportDimensions = this.viewportCtrl.getViewportDimensions();\n    if (event.pageX >= this.viewportDimensions.width - 1) {\n      this.desktopCtrl.maximizeRight(this.window);\n    }\n\n    //this.elementRef.nativeElement.setAttribute('style', 'opacity: 1.0;');\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.updateNavigationState\n   * @module tru.desktop.window\n   *\n   * @description\n   * Updates window navigation buttons based location of the active view in the views array.\n   *\n   */\n  updateNavigationState = function () {\n    if (this.window.views === undefined) return;\n    var length = this.window.views.length;\n    this.disablePrevious = !!(this.window.views[0].active || length === 1);\n    this.disableNext = !!(this.window.views[length - 1].active || length === 1);\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.isWindowInViewport\n   * @module tru.desktop.window\n   *\n   * @description\n   * Determines if the window is within the viewport boundaries.\n   *\n   */\n  isWindowInViewport = () => {\n    var windowTop = 0;\n    var windowLeft = 0;\n    if (!this.window.minimized) {\n      windowTop = this.elementRef.nativeElement.offsetTop;\n      windowLeft = this.elementRef.nativeElement.offsetLeft;\n    } else {\n      windowTop = parseInt(this.window.savedPosition.top, 10);\n      windowLeft = parseInt(this.window.savedPosition.left, 10);\n    }\n    if ((windowTop + 10) >= this.viewportCtrl.getViewportDimensions().height ||\n      (windowLeft + 60) >= this.viewportCtrl.getViewportDimensions().width) {\n      this.window.outOfBounds = true;\n      this.window.active = false;\n      this.desktopCtrl.activateForemostWindow();\n    } else {\n      this.window.outOfBounds = false;\n    }\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.getWindow\n   * @module tru.desktop.window\n   *\n   * @description\n   * Gets the window object.\n   *\n   * @returns {object} window object.\n   */\n  getWindow = function () {\n    return this.window;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.setWindowTitle\n   * @module tru.desktop.window\n   *\n   * @description\n   * Sets the window title.\n   *\n   * @param {string} value to display in the window title bar.\n   */\n  setWindowTitle = function (value) {\n    this.window.title = value;\n  };\n\n  getWindowTitle = function () {\n    return this.window.title;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.goToPreviousView\n   * @module tru.desktop.window\n   *\n   * @description\n   * Public method for navigating to the previous view.\n   *\n   */\n  goToPreviousView = function () {\n    this.previousView();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.viewIsEditing\n   * @module tru.desktop.window\n   *\n   * @description\n   * Checks whether view is editing.\n   *\n   * @returns {boolean}.\n   */\n  viewIsEditing = function () {\n    var isEditing = false;\n    this.window.views.forEach((view) => {\n      if (view.isEditing === true) {\n        isEditing = true;\n      }\n    }, null);\n    return isEditing;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.canNavigate\n   * @module tru.desktop.window\n   *\n   * @description\n   * Checks whether navigation can occur..\n   *\n   * @returns {boolean}.\n   */\n  canNavigate = function () {\n    var canNavigate = true;\n    if (this.canNavigateFn !== undefined) {\n      if (this.viewIsEditing()) {\n        canNavigate = this.canNavigateFn();\n      }\n    }\n    return canNavigate;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.removeForwardViews\n   * @module tru.desktop.window\n   *\n   * @description\n   * Removes all view(s) forward of the active view.\n   *\n   */\n  removeForwardViews = function () {\n    var activeView = this.desktopCtrl.getActiveView(this.window);\n    var activeViewIndex = this.window.views.indexOf(activeView);\n    for (var i = this.window.views.length; i > activeViewIndex; i--) {\n      this.window.views.splice(i, 1);\n    }\n    this.updateNavigationState();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.addView\n   * @module tru.desktop.window\n   *\n   * @description\n   * Removes all inactive view(s) following the active view and inserts a new view.\n   *\n   */\n  addView = function (viewConfigOverlay) {\n    this.removeForwardViews();\n    var activeView = this.desktopCtrl.getActiveView(this.window);\n    activeView.active = false;\n    var viewConfig = this.desktopCtrl.getDesktop().viewConfig;\n    viewConfig.window = this.window;\n    var viewConfigInstance = Object.create(viewConfig);\n    var extended = Object.assign(viewConfigInstance, viewConfigOverlay);\n    this.window.views.push(extended);\n    this.updateNavigationState();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.getGlobals\n   * @module tru.desktop.window\n   *\n   * @description\n   * returns the global values.\n   *\n   */\n  getGlobals = function () {\n    return this.window.globals;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.firstView\n   * @module tru.desktop.window\n   *\n   * @description\n   *\n   */\n  firstView = function () {\n    if (!this.canNavigate() || this.disablePrevious) return;\n    if (this.cancelEditingOnNavigation) this.desktopCtrl.getActiveView(this.window).isEditing = false;\n    let activeView = this.desktopCtrl.getActiveView(this.window);\n    activeView.active = false;\n    this.window.views[0].active = true;\n    this.updateNavigationState();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopWindowComponent.firstView\n   * @module tru.desktop.window\n   *\n   * @description\n   *\n   */\n  lastView = function () {\n    if (!this.canNavigate() || this.disableNext) return;\n    if (this.cancelEditingOnNavigation) this.desktopCtrl.getActiveView(this.window).isEditing = false;\n    let activeView = this.desktopCtrl.getActiveView(this.window);\n    activeView.active = false;\n    this.window.views[this.window.views.length - 1].active = true;\n    this.updateNavigationState();\n  };;\n\n  resizeEventHandler = () => {\n    this.isWindowInViewport();\n  }\n\n  /**\n   * @tru.doc event\n   * @module tru.desktop.window\n   *\n   * @description\n   *\n   */\n  onKeydown(event: any) {\n    if (!this.window.active) return;\n    var keySequence = this.desktopCtrl.getKeySequence(event);\n    if (keySequence === 'alt+left') { //Previous View\n      this.previousView();\n      event.preventDefault();\n    }\n    if (keySequence === 'alt+right') { //Next View\n      this.nextView();\n      event.preventDefault();\n    }\n    if (keySequence === 'alt+up') { //First View\n      this.firstView();\n      event.preventDefault();\n    }\n    if (keySequence === 'alt+down') { //Last View\n      this.lastView();\n      event.preventDefault();\n    }\n    if (keySequence === 'alt+l') { //Maximize left\n      if (!this.window.maximized) {\n        this.desktopCtrl.savePosition(this.window);\n        this.desktopCtrl.maximizeLeft(this.window);\n      } else if (this.window.maximized === 'right' || this.window.maximized === 'fill')\n        this.desktopCtrl.maximizeLeft(this.window);\n      else\n        this.desktopCtrl.restoreSavedPosition(this.window);\n      event.preventDefault();\n    }\n    if (keySequence === 'alt+r') { //Maximize right\n      if (!this.window.maximized) {\n        this.desktopCtrl.savePosition(this.window);\n        this.desktopCtrl.maximizeRight(this.window);\n      } else if (this.window.maximized === 'left' || this.window.maximized === 'fill')\n        this.desktopCtrl.maximizeRight(this.window);\n      else\n        this.desktopCtrl.restoreSavedPosition(this.window);\n      event.preventDefault();\n    }\n  };\n\n  /**\n   * @tru.doc watch\n   * @module tru.desktop.window\n   *\n   * @description\n   * Monitors the window's minimized state\n   *\n   */\n  //$scope.$watch('window.minimized',\n  //              function(value) {\n  //  if (value && !$scope.window.maximized) {\n  //    $scope.desktopCtrl.savePosition($scope.window);\n  //  }\n  //}\n  //          );\n\n  disablePrevious = true;\n  disableNext = true;\n\n  activate = () => {\n    if (this.window.outOfBounds) return;\n    this.desktopCtrl.clearActive();\n    this.window.active = true;\n    this.window.zIndex = this.desktopCtrl.getNextMaxZIndex();\n  };\n\n  minimize = () => {\n    this.desktopCtrl.minimize(this.window);\n  };\n\n  maximize = () => {\n    if (this.window.maximized) {\n      this.desktopCtrl.restoreSavedPosition(this.window);\n      this.window.maximized = undefined;\n    } else {\n      this.desktopCtrl.savePosition(this.window);\n      this.desktopCtrl.maximize(this.window);\n    }\n  };\n\n  close = function () {\n    this.desktopCtrl.closeWindow(this.window);\n  };\n\n  windowTitleMouseDown = (event) => {\n    if (this.window.maximized) return;\n    event.preventDefault();\n    this.titleBar = event.srcElement || event.target;\n    this.x = this.elementRef.nativeElement.children[0].offsetLeft;\n    this.y = this.elementRef.nativeElement.children[0].offsetTop;\n    this.startX = event.screenX - this.x;\n    this.startY = event.screenY - this.y;\n\n    this.desktopCtrl.savePosition(this.window);\n\n    document.addEventListener('mousemove', this.mouseMove);\n    document.addEventListener('mouseup', this.mouseUp);\n\n    window.addEventListener('resize', this.resizeEventHandler);\n  };\n\n  previousView = () => {\n    if (!this.canNavigate() || this.disablePrevious) return;\n    var activeView = this.desktopCtrl.getActiveView(this.window);\n    var activeViewIndex = this.window.views.indexOf(activeView);\n    if (this.cancelEditingOnNavigation) activeView.isEditing = false;\n    activeView.active = false;\n    this.window.views[activeViewIndex - 1].active = true;\n    this.updateNavigationState();\n  };\n\n  nextView = () => {\n    if (!this.canNavigate() || this.disableNext) return;\n    var activeView = this.desktopCtrl.getActiveView(this.window);\n    var activeViewIndex = this.window.views.indexOf(activeView);\n    if (this.cancelEditingOnNavigation) activeView.isEditing = false;\n    activeView.active = false;\n    this.window.views[activeViewIndex + 1].active = true;\n    this.updateNavigationState();\n  };\n\n  save = () => {\n    this.truWindowActionEventHandler.save();\n  };\n\n  revert = () => {\n    this.truWindowActionEventHandler.revert();\n  };\n\n  ngOnInit(): void {\n    this.canCloseFn = this.desktopCtrl.getOptions().canCloseFn;\n    this.canNavigateFn = this.desktopCtrl.getOptions().canNavigateFn;\n    this.cancelEditingOnNavigation = this.desktopCtrl.getOptions().cancelEditingOnNavigation;\n    this.updateNavigationState();\n\n    this.truWindowAddViewEventHandler.onAddView().subscribe((windiowAddViewEvent: TruWindowAddViewEvent) => {\r\n      this.addView(windiowAddViewEvent);\r\n    });\n  }\n\n  ngOnDestroy() {\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n\n    window.removeEventListener('resize', this.resizeEventHandler);\n  }\n}\n","<div class=\"desktop-window-container\"\r\n     [ngClass]=\"{'desktop-window-active': window.active, 'desktop-window-maximized': window.maximized}\"\r\n     [ngStyle]=\"{'z-index': window.zIndex, 'top': window.top, 'left': window.left, 'right': window.right, 'bottom': window.bottom, 'height': window.height, 'width': window.width, 'min-height': window.minHeight, 'minWidth': window.minWidth}\"\r\n     [style.offsetLeft.px]=\"x\"\r\n     [style.offsetTop.px]=\"y\"\r\n     (mousedown)=\"activate()\"\r\n     *ngIf=\"!window.minimized\">\r\n  <div class=\"desktop-window-header\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n    <div class=\"desktop-window-navigation\">\r\n      <div class=\"desktop-btn-group desktop-btn-group-xs desktop-window-navigation-button-group\">\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default\" title=\"Go Back One View - [Alt + Left]\" tabindex=\"-1\" ng-disabled=\"disablePrevious\" (click)=\"previousView()\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-previous-icon\"></mat-icon></span>\r\n        </button>\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default custom-nav-button\" title=\"Go Forward One View - [Alt + Right]\" tabindex=\"-1\" ng-disabled=\"disableNext\" (click)=\"nextView()\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-next-icon\"></mat-icon></span>\r\n        </button>\r\n        <div class=\"divider\"></div>\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default custom-nav-button\" title=\"Save - [Ctrl + S]\" tabindex=\"-1\" (click)=\"save()\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-save-icon\"></mat-icon></span>\r\n        </button>\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default custom-nav-button\" title=\"Revert - [Ctrl + Shift + R]\" tabindex=\"-1\" (click)=\"revert()\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-revert-icon\"></mat-icon></span>\r\n        </button>\r\n        <div class=\"divider\"></div>\r\n      </div>\r\n    </div>\r\n    <div class=\"desktop-window-title\" (dblclick)=\"maximize()\" (mousedown)=\"windowTitleMouseDown($event)\">\r\n      <div class=\"desktop-click-through\">\r\n        <div class=\"desktop-text\">{{window.title}}</div>\r\n      </div>\r\n    </div>\r\n    <div class=\"desktop-window-action\">\r\n      <div class=\"desktop-btn-group desktop-btn-group-xs desktop-window-navigation-button-group\">\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default minimize\" title=\"Minimize - [Alt + N]\" (click)=\"minimize()\" tabindex=\"-1\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-minimize-icon\"></mat-icon></span>\r\n        </button>\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default maximize\" (click)=\"maximize()\" tabindex=\"-1\">\r\n          <span><mat-icon *ngIf=\"!window.maximized\" svgIcon=\"tru-desktop-maximize-icon\"></mat-icon></span>\r\n          <span><mat-icon *ngIf=\"window.maximized\" svgIcon=\"tru-desktop-restore-icon\"></mat-icon></span>\r\n        </button>\r\n        <button type=\"button\" class=\"desktop-btn desktop-btn-default\" [ngClass]=\"{'desktop-window-close-button': window.active}\" title=\"Close Window - [Alt + SHIFT + X]\" (click)=\"close()\" tabindex=\"-1\">\r\n          <span><mat-icon svgIcon=\"tru-desktop-close-icon\"></mat-icon></span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <fieldset ng-disabled=\"!window.active\" class=\"desktop-window-fieldset\" [ngClass]=\"{'desktop-window-opacity': !window.active}\">\r\n    <div class=\"desktop-window-content\">\r\n      <div *ngFor=\"let view of window.views\">\r\n        <tru-desktop-view [view]=\"view\" [hidden]=\"!view.active\"><ng-template></ng-template></tru-desktop-view>\r\n      </div>\r\n    </div>\r\n  </fieldset>\r\n  <div class=\"desktop-window-statusbar\" [ngClass]=\"{'desktop-window-maximized': window.maximized, 'desktop-window-opacity': !window.active}\">\r\n    <div class=\"desktop-window-statusbar-container\">\r\n      <span class=\"desktop-icon-info\" [ngClass]=\"{'is-dirty-icn': window.isDirty, 'desktop-display-none': !window.isDirty}\"></span>\r\n      <span class=\"desktop-icon-spam\" [ngClass]=\"{'is-invalid-icn': window.isInvalid, 'desktop-display-none': !window.isInvalid}\"></span>\r\n    </div>\r\n  </div>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-nw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'nw'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-ne\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'ne'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-sw\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'sw'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-se\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'se'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-n\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'n'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-s\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'s'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-w\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'w'\"></span>\r\n  <span class=\"desktop-window-resizable-handle desktop-window-resizable-e\" tru-desktop-resizable [window]=\"window\" *ngIf=\"!window.maximized\" [direction]=\"'e'\"></span>\r\n</div>\r\n","import { Component, OnInit, Input, HostListener, ElementRef } from '@angular/core';\n\n@Component({\n  selector: 'tru-desktop-viewport',\n  templateUrl: './tru-desktop-viewport.html',\n  styleUrls: ['./tru-desktop-viewport.css']\n})\nexport class TruDesktopViewport implements OnInit {\n  @Input() windows;\n  @Input() desktopCtrl;\n\n  options = null;\n\n  constructor(private elementRef: ElementRef) { }\n\n  getViewportDimensions = function () {\n    var viewportContainerElement = this.elementRef.nativeElement.querySelectorAll(\".desktop-viewport-container\")[0];\n    this.dimensions = {\n      height: viewportContainerElement.clientHeight,\n      width: viewportContainerElement.clientWidth\n    };\n    return this.dimensions;\n  };\n\n  mouseMove = (event) => {\n    this.showFillOutline = event.pageY <= this.options.viewportTop;\n    this.showLeftOutline = event.pageX <= 0;\n    this.showRightOutline = event.pageX >= this.dimensions.width - 1;\n  };\n\n  mouseUp = (event) => {\n    this.showFillOutline = false;\n    this.showLeftOutline = false;\n    this.showRightOutline = false;\n\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n  };\n\n  dimensions = { height: null, width: null };\n  showFillOutline = false;\n  showLeftOutline = false;\n  showRightOutline = false;\n  displayViewportDimensions = false;\n  logoUrl = undefined;\n\n  viewportMouseDown = function (event) {\n    //Ignore resize events.\n    if (event.target.nodeName.toLowerCase() === 'span') return;\n\n    document.addEventListener('mousemove', this.mouseMove);\n    document.addEventListener('mouseup', this.mouseUp);\n  };\n\n  /**\n   * @tru.doc $watch function\n   * @name truDesktopViewportComponent.visibilityWatch\n   * @module tru.desktop.viewport\n   * @function\n   *\n   * @description\n   * Monitors for visibility changes. This method is responsible for updating the viewport\n   * dimensions in situations where the viewport is initially hidden.\n   *\n   */\n  //$watch(function() {\n  //  //Emulates jQuery's $(element).is(':visible')\n  //  return this.elementRef.nativeElement.offsetWidth > 0 && this.elementRef.nativeElement.offsetHeight > 0;\n  //}, function() {\n  //  this.dimensions = {\n  //    height: this.elementRef.nativeElement.clientHeight,\n  //    width: this.elementRef.nativeElement.clientWidth\n  //  };\n  //});\n\n  /**\n   * @tru.doc window.resize\n   * @name truDesktopViewportComponent.resize\n   * @module tru.desktop.viewport\n   * @function\n   *\n   * @description\n   * This method is responsible for updating the viewport dimensions when the\n   * browser window has been re-sized.\n   *\n   */\n  @HostListener('window:resize', ['$event'])\n  onResize(event: any) {\n    var viewportContainerElement = this.elementRef.nativeElement.querySelectorAll(\".desktop-viewport-container\")[0];\n    this.dimensions = {\n      height: viewportContainerElement.clientHeight,\n      width: viewportContainerElement.clientWidth\n    };\n  };\n\n  //document.querySelectorAll(\".desktop-viewport-container\")[0].onscroll = function (event) {\n  //  event.preventDefault();\n  //  document.querySelectorAll(\".desktop-viewport-container\")[0].scrollTop = 0;\n  //};\n\n  ngOnInit(): void {\n    this.options = this.desktopCtrl.getOptions();\n    this.displayViewportDimensions = this.options.displayViewportDimensions;\n    this.logoUrl = this.options.logoUrl;\n  }\n\n  ngOnDestroy() {\n    document.removeEventListener('mousemove', this.mouseMove);\n    document.removeEventListener('mouseup', this.mouseUp);\n  }\n}\n","<div class=\"desktop-viewport-container\" [ngStyle]=\"{'top': options.viewportTop + 'px' }\" (mousedown)=\"viewportMouseDown($event)\">\r\n  <span class=\"desktop-viewport-dimensions desktop-text\" *ngIf=\"displayViewportDimensions\">{{dimensions.height}} x {{dimensions.width}}</span>\r\n  <div *ngFor=\"let window of windows\" class=\"am-fade-and-scale\">\r\n    <tru-desktop-window [window]=\"window\" [viewportCtrl]=\"this\" [desktopCtrl]=\"this.desktopCtrl\"></tru-desktop-window>\r\n  </div>\r\n  <div class=\"desktop-viewport-fill-outline\" *ngIf=\"showFillOutline\"></div>\r\n  <div class=\"desktop-viewport-left-outline\" *ngIf=\"showLeftOutline\"></div>\r\n  <div class=\"desktop-viewport-right-outline\" *ngIf=\"showRightOutline\"></div>\r\n</div>\r\n","import { Component, OnInit, Input } from '@angular/core';\n\nimport { TruWindowEventHandler, TruWindowEvent } from '@trudb/tru-common-lib';\r\nimport { skip } from 'rxjs';\r\n\nimport { TruDesktopService } from './services/tru-desktop-service';\n\n@Component({\n  selector: 'tru-desktop',\n  templateUrl: './tru-desktop.html',\n  styleUrls: ['./tru-desktop.css'],\n  providers: [TruDesktopService]\n})\nexport class TruDesktop implements OnInit {\n  @Input() options;\n\n  constructor(\n    private desktopService: TruDesktopService,\n    private truWindowEventHandler: TruWindowEventHandler) {\n  }\r\n\n  minimizeAll = false;\n  desktop = this.desktopService.createDesktop();\n  minWindowCascadePosition = 40;\n  maxWindowCascadePosition = 100;\n  lastWindowCascadePosition = { top: this.minWindowCascadePosition, left: this.minWindowCascadePosition };\n  shiftPressed = false;\n  altPressed = false;\n  xPressed = false;\n  keyboardMap = [\"\", \"\", \"\", \"CANCEL\", \"\", \"\", \"HELP\", \"\", \"BACK_SPACE\", \"TAB\", \"\", \"\", \"CLEAR\", \"ENTER\", \"RETURN\", \"\", \"SHIFT\", \"CONTROL\", \"ALT\", \"PAUSE\", \"CAPS_LOCK\", \"KANA\", \"EISU\", \"JUNJA\", \"FINAL\", \"HANJA\", \"\", \"ESCAPE\", \"CONVERT\", \"NONCONVERT\", \"ACCEPT\", \"MODECHANGE\", \"SPACE\", \"PAGE_UP\", \"PAGE_DOWN\", \"END\", \"HOME\", \"LEFT\", \"UP\", \"RIGHT\", \"DOWN\", \"SELECT\", \"PRINT\", \"EXECUTE\", \"PRINTSCREEN\", \"INSERT\", \"DELETE\", \"\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"COLON\", \"SEMICOLON\", \"LESS_THAN\", \"EQUALS\", \"GREATER_THAN\", \"QUESTION_MARK\", \"AT\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"WIN\", \"\", \"CONTEXT_MENU\", \"\", \"SLEEP\", \"NUMPAD0\", \"NUMPAD1\", \"NUMPAD2\", \"NUMPAD3\", \"NUMPAD4\", \"NUMPAD5\", \"NUMPAD6\", \"NUMPAD7\", \"NUMPAD8\", \"NUMPAD9\", \"MULTIPLY\", \"ADD\", \"SEPARATOR\", \"SUBTRACT\", \"DECIMAL\", \"DIVIDE\", \"F1\", \"F2\", \"F3\", \"F4\", \"F5\", \"F6\", \"F7\", \"F8\", \"F9\", \"F10\", \"F11\", \"F12\", \"F13\", \"F14\", \"F15\", \"F16\", \"F17\", \"F18\", \"F19\", \"F20\", \"F21\", \"F22\", \"F23\", \"F24\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"NUM_LOCK\", \"SCROLL_LOCK\", \"WIN_OEM_FJ_JISHO\", \"WIN_OEM_FJ_MASSHOU\", \"WIN_OEM_FJ_TOUROKU\", \"WIN_OEM_FJ_LOYA\", \"WIN_OEM_FJ_ROYA\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"CIRCUMFLEX\", \"EXCLAMATION\", \"DOUBLE_QUOTE\", \"HASH\", \"DOLLAR\", \"PERCENT\", \"AMPERSAND\", \"UNDERSCORE\", \"OPEN_PAREN\", \"CLOSE_PAREN\", \"ASTERISK\", \"PLUS\", \"PIPE\", \"HYPHEN_MINUS\", \"OPEN_CURLY_BRACKET\", \"CLOSE_CURLY_BRACKET\", \"TILDE\", \"\", \"\", \"\", \"\", \"VOLUME_MUTE\", \"VOLUME_DOWN\", \"VOLUME_UP\", \"\", \"\", \"\", \"\", \"COMMA\", \"\", \"PERIOD\", \"SLASH\", \"BACK_QUOTE\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"OPEN_BRACKET\", \"BACK_SLASH\", \"CLOSE_BRACKET\", \"QUOTE\", \"\", \"META\", \"ALTGR\", \"\", \"WIN_ICO_HELP\", \"WIN_ICO_00\", \"\", \"WIN_ICO_CLEAR\", \"\", \"\", \"WIN_OEM_RESET\", \"WIN_OEM_JUMP\", \"WIN_OEM_PA1\", \"WIN_OEM_PA2\", \"WIN_OEM_PA3\", \"WIN_OEM_WSCTRL\", \"WIN_OEM_CUSEL\", \"WIN_OEM_ATTN\", \"WIN_OEM_FINISH\", \"WIN_OEM_COPY\", \"WIN_OEM_AUTO\", \"WIN_OEM_ENLW\", \"WIN_OEM_BACKTAB\", \"ATTN\", \"CRSEL\", \"EXSEL\", \"EREOF\", \"PLAY\", \"ZOOM\", \"\", \"PA1\", \"WIN_OEM_CLEAR\", \"\"];\n  logoUrl = null;\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getDesktop\n   * @module tru.desktop\n   *\n   * @description\n   * Return an object of desktop.\n   *\n   * @returns {object} desktop.\n   */\n  getDesktop = () => {\n    return this.desktop;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getOptions\n   * @module tru.desktop\n   *\n   * @description\n   * Return an object of desktop options.\n   *\n   * @returns {object} options.\n   */\n  getOptions = () => {\n    return this.options;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getWindows\n   * @module tru.desktop\n   *\n   * @description\n   * Return an array of windows.\n   *\n   * @returns {array} windows.\n   */\n  getWindows = () => {\n    return this.windows;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getNextMaxZIndex\n   * @module tru.desktop\n   *\n   * @description\n   * Iterates through all window objects in the windows array to find the max z-index\n   * and increases the value found by 1.\n   *\n   * @returns {int}\n   */\n  getNextMaxZIndex = () => {\n    var max = 0;\n    var tmp;\n    for (var i = this.windows.length - 1; i >= 0; i--) {\n      tmp = this.windows[i].zIndex;\n      if (tmp > max) max = tmp;\n    }\n    return ++max;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.clearActive\n   * @module tru.desktop\n   *\n   * @description\n   * Iterates through all window objects in the windows\n   * and sets the active property to false.\n   *\n   */\n  clearActive = () => {\n    this.windows.forEach((window) => {\n      window.active = false;\n    });\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getActiveWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Gets the active window.\n   *\n   * @returns {object} view object.\n   */\n  getActiveWindow = () => {\n    var activeWindow = null;\n    this.windows.forEach((wdw) => {\n      if (wdw.active === true) {\n        activeWindow = wdw;\n      }\n    });\n    return activeWindow;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getActiveView\n   * @module tru.desktop\n   *\n   * @description\n   * Gets the active view.\n   *\n   * @returns {object} view object.\n   */\n  getActiveView = (wdw) => {\n    var activeView = null;\n    wdw.views.forEach((view) => {\n      if (view.active === true) {\n        activeView = view;\n      }\n    });\n    return activeView;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.allWindowsAreMinimized\n   * @module tru.desktop\n   *\n   * @description\n   * Iterates through windows to determine if all are minimized.\n   *\n   */\n  allWindowsAreMinimized = () => {\n    var allMinimized = true;\n    this.windows.forEach((window) => {\n      if (!window.minimized) {\n        allMinimized = false;\n      }\n    });\n    return allMinimized;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.hideShowAll\n   * @module tru.desktop\n   *\n   * @description\n   * Hides/shows all windows\n   *\n   */\n  hideShowAll = () => {\n    this.minimizeAll = this.allWindowsAreMinimized() ? false : !this.minimizeAll;\n    this.windows.forEach((wdw) => {\n      if (wdw.outOfBounds) this.recover(wdw);\n      wdw.active = false;\n      wdw.minimized = this.minimizeAll;\n    });\n    this.activateForemostWindow();\n    return this.minimizeAll;\n  };\n\n  /**\r\n   * @tru.doc function\r\n   * @name truDesktopComponent.findWindowViewDirective\r\n   * @module tru.desktop\r\n   *\r\n   * @description\r\n   * Looks for previously open window with a view directive\r\n   *\r\n   */\r\n  findWindowViewDirective = (windowViewDirective) => {\r\n    for (let i = 0; i < this.windows.length; i++) {\r\n      for (let j = 0; j < this.windows[i].views.length; j++) {\r\n        if (this.windows[i].views[0].viewDirective === windowViewDirective)\r\n          return this.windows[i];\r\n      }\r\n    }\r\n    return null;\r\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.openWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Displays a new window. All window properties defined by the application developer will be\n   * overlaid here before displaying the window\n   *\n   */\n  openWindow = (windowConfigOverlays, singleInstance) => {\n    let activeWindow = this.getActiveWindow();\r\n    if (activeWindow && activeWindow.isModal) {\r\n      activeWindow.invalidOperation = true;\r\n      return;\r\n    }\r\n\r\n    if (singleInstance) {\r\n      let window = this.findWindowViewDirective(windowConfigOverlays.views[0].viewDirective);\r\n      if (window) {\r\n        this.updateWindowState(window);\r\n        return;\r\n      }\r\n    }\r\n\r\n    if (windowConfigOverlays.isModal) {\r\n      let heightOffset = (parseInt(windowConfigOverlays.height, 10) / 2) + 30;\r\n      let widthOffset = (parseInt(windowConfigOverlays.width, 10) / 2);\r\n      windowConfigOverlays.top = 'calc(50% - ' + heightOffset + 'px )';\r\n      windowConfigOverlays.left = 'calc(50% - ' + widthOffset + 'px )';\r\n    }\r\n\r\n    this.clearActive();\r\n    let configuredWindow = this.configureWindow(windowConfigOverlays);\r\n    configuredWindow.views = this.configureViews(windowConfigOverlays, configuredWindow);\r\n    if (!configuredWindow.isModal) {\r\n      configuredWindow.cascadeWindow = false;\r\n      this.savePosition(configuredWindow);\r\n      this.maximize(configuredWindow);\r\n      this.windows.push(configuredWindow);\r\n    } else {\r\n      this.windows.push(configuredWindow);\r\n    }\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.configureWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Creates a new window instance.\n   *\n   */\n  configureWindow = (windowConfigOverlays) => {\n    var windowConfigInstance = Object.create(this.desktop.windowConfig);\n    windowConfigInstance.savedPosition = Object.create({ top: 0, left: 0, right: 0, bottom: 0, height: 0, width: 0 });\n    windowConfigInstance.zIndex = this.getNextMaxZIndex();\n    //windowConfigInstance.globals = Object.assign({}, $rootScope.$eval(this.options.globals));\n    return Object.assign(windowConfigInstance, windowConfigOverlays);\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.configureViews\n   * @module tru.desktop\n   *\n   * @description\n   * Creates one or more view instances\n   *\n   */\n  configureViews = (windowConfigOverlays, configuredWindow) => {\n    let configuredViews = [];\n    windowConfigOverlays.views.forEach((view) => {\n      let viewConfigInstance = Object.create(this.desktop.viewConfig);\n      viewConfigInstance.globals = this.options.globals;\n      let configuredView = Object.assign(viewConfigInstance, view);\n      configuredView.window = configuredWindow;\n      configuredViews.push(configuredView);\n    });\n    return configuredViews;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.closeWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Remove a window {object} from the windows array.\n   *\n   * @returns {boolean} returns true if window was closed, false if not closed.\n   */\n  closeWindow = (wdw) => {\n    if (!this.options.allowDirtyClose && wdw.isDirty) {\n      alert(\"Unsaved Changes. Save changes before closing window.\");\n      return false;\n    }\n\n    if (!this.options.allowInvalidClose && wdw.isInvalid) {\n      alert(\"Data is invalid. Correct Invalid data before closing window.\");\n      return false;\n    }\n\n    if (this.options.canCloseFn !== undefined) {\n      if (this.options.canCloseFn(wdw)) {\n        this.windows.splice(this.windows.indexOf(wdw), 1);\n        this.activateForemostWindow();\n        return true;\n      };\n    } else {\n      this.windows.splice(this.windows.indexOf(wdw), 1);\n      this.activateForemostWindow();\n      return true;\n    }\n    return false;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.activateForemostWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Set the foremost window to an active state\n   *\n   */\n  activateForemostWindow = () => {\n    var foremost = undefined;\n    for (var i = 0; i < this.windows.length; i++) {\n      if ((foremost === undefined || this.windows[i].zIndex > foremost.zIndex) && !this.windows[i].minimized && !this.windows[i].outOfBounds)\n        foremost = this.windows[i];\n    }\n    if (foremost)\n      foremost.active = true;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.activateNextWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Set the next window to an active state\n   *\n   */\n  activateNextWindow = (activeWindowLocation) => {\n    if (this.windows.length <= 1) return;\n    var backend = this.windows.slice(activeWindowLocation);\n    var frontend = this.windows.slice(0, activeWindowLocation - 1);\n    var sorted = backend.concat(frontend);\n    var nextWindow = undefined;\n    for (var i = 0; i < sorted.length; i++) {\n      if (!sorted[i].minimized && !sorted[i].outOfBounds && !nextWindow)\n        nextWindow = sorted[i];\n    }\n\n    if (nextWindow) {\n      this.clearActive();\n      nextWindow.zIndex = this.getNextMaxZIndex();\n      nextWindow.active = true;\n    }\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.activatePreviousWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Set the previous window to an active state\n   *\n   */\n  activatePreviousWindow = (activeWindowLocation) => {\n    if (this.windows.length <= 1) return;\n    var backend = this.windows.slice(activeWindowLocation);\n    var frontend = this.windows.slice(0, activeWindowLocation - 1);\n    var sorted = backend.concat(frontend);\n    var nextWindow = undefined;\n    for (var i = sorted.length - 1; i >= 0; i--) {\n      if (!sorted[i].minimized && !sorted[i].outOfBounds && !nextWindow)\n        nextWindow = sorted[i];\n    }\n\n    if (nextWindow) {\n      this.clearActive();\n      nextWindow.zIndex = this.getNextMaxZIndex();\n      nextWindow.active = true;\n    }\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.minimize\n   * @module tru.desktop\n   *\n   * @description\n   * Visually removes window from the viewport.\n   *\n   */\n  minimize = (window) => {\n    this.savePosition(window);\n\n    window.active = false;\n    window.minimized = true;\n    this.activateForemostWindow();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.maximize\n   * @module tru.desktop\n   *\n   * @description\n   * Positions window such that it fills the whole viewport.\n   *\n   */\n  maximize = (window) => {\n    window.top = 0;\n    window.left = 0;\n    window.right = 0;\n    window.bottom = 0;\n    window.height = 'auto';\n    window.width = '100%';\n    window.maximized = 'fill';\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.maximizeLeft\n   * @module tru.desktop\n   *\n   * @description\n   * Positions window such that it fills the left portion viewport.\n   *\n   */\n  maximizeLeft = (window) => {\n    window.split = true;\n    window.top = 0;\n    window.left = 0;\n    window.bottom = 0;\n    window.width = '50%';\n    window.height = 'auto';\n    window.maximized = 'left';\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.maximizeRight\n   * @module tru.desktop\n   *\n   * @description\n   * Positions window such that it fills the right portion viewport.\n   *\n   */\n  maximizeRight = (window) => {\n    window.top = 0;\n    window.left = '50%';\n    window.right = 0;\n    window.bottom = 0;\n    window.width = '50%';\n    window.height = 'auto';\n    window.maximized = 'right';\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.recover\n   * @module tru.desktop\n   *\n   * @description\n   * Brings window back into view when it has escaped the viewport.\n   *\n   */\n  recover = (window) => {\n    window.active = true;\n    window.outOfBounds = false;\n    window.minimized = false;\n    window.zIndex = this.getNextMaxZIndex();\n    this.cascadeWindow(window);\n    this.clearActive();\n    this.activateForemostWindow();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.restore\n   * @module tru.desktop\n   *\n   * @description\n   *\n   */\n  restore = (wdw) => {\n    if (wdw.maximized === 'fill') {\n      this.maximize(wdw);\n    } else if (wdw.maximized === 'left') {\n      this.maximizeLeft(wdw);\n    } else if (wdw.maximized === 'right') {\n      this.maximizeRight(wdw);\n    }\n    this.updateWindowState(wdw);\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.bringToFront\n   * @module tru.desktop\n   *\n   * @description\n   *\n   */\n  updateWindowState = (wdw) => {\r\n    if (wdw.outOfBounds) {\r\n      this.recover(wdw);\r\n      return;\r\n    }\r\n\r\n    if (wdw.maximized === 'fill') {\r\n      this.maximize(wdw);\r\n    } else if (wdw.maximized === 'left') {\r\n      this.maximizeLeft(wdw);\r\n    } else if (wdw.maximized === 'right') {\r\n      this.maximizeRight(wdw);\r\n    }\r\n    this.clearActive();\r\n    wdw.active = true;\r\n    wdw.minimized = false;\r\n    wdw.zIndex = this.getNextMaxZIndex();\r\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.restoreSavedPosition\n   * @module tru.desktop\n   *\n   * @description\n   * Set the windows last know position to the current position.\n   *\n   */\n  restoreSavedPosition = (wdw) => {\n    this.clearActive();\n    wdw.top = wdw.savedPosition.top;\n    wdw.left = wdw.savedPosition.left;\n    wdw.right = wdw.savedPosition.right;\n    wdw.bottom = wdw.savedPosition.bottom;\n    wdw.height = wdw.savedPosition.height;\n    wdw.width = wdw.savedPosition.width;\n    wdw.maximized = undefined;\n    wdw.minimized = undefined;\n    wdw.active = true;\n    wdw.minimized = false;\n    wdw.zIndex = this.getNextMaxZIndex();\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.savePosition\n   * @module tru.desktop\n   *\n   * @description\n   * Save the windows last know position.\n   *\n   */\n  savePosition = (wdw) => {\n    wdw.savedPosition.top = wdw.top;\n    wdw.savedPosition.left = wdw.left;\n    wdw.savedPosition.right = wdw.right;\n    wdw.savedPosition.bottom = wdw.bottom;\n    wdw.savedPosition.height = wdw.height;\n    wdw.savedPosition.width = wdw.width;\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.closeWindow\n   * @module tru.desktop\n   *\n   * @description\n   * Moves a window to the next cascade position.\n   *\n   */\n  cascadeWindow = (window) => {\n    if (!this.options.enableWindowCascading || window.isModal) return;\n    this.lastWindowCascadePosition.top += 10;\n    this.lastWindowCascadePosition.left += 10;\n    if (this.lastWindowCascadePosition.top > this.maxWindowCascadePosition)\n      this.lastWindowCascadePosition.top = this.minWindowCascadePosition;\n    if (this.lastWindowCascadePosition.left > this.maxWindowCascadePosition)\n      this.lastWindowCascadePosition.left = this.minWindowCascadePosition;\n\n    window.top = this.lastWindowCascadePosition.top + 'px';\n    window.left = this.lastWindowCascadePosition.left + 'px';\n  };\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.getKeyCode\n   * @module tru.desktop\n   *\n   * @description\n   *\n   */\n  getKeySequence = (event) => {\n    var keys = [];\n    if (event.shiftKey) keys.push('shift');\n    if (event.ctrlKey) keys.push('ctrl');\n    if (event.altKey) keys.push('alt');\n    if (event.metaKey) keys.push('meta');\n\n    var keyCode = event.keyCode || event.which;\n    if (keyCode) keys.push(this.keyboardMap[keyCode].toLowerCase());\n\n    return keys.join('+');\n  };\n\n  /**\n   * @tru.doc event\n   * @module tru.desktop\n   *\n   * @description\n   *\n   */\n  onKeyDown = (event: any) => {\n      var keySequence = this.getKeySequence(event);\n      if (keySequence === 'alt+m') { //Maximize\n        var activeWindow = this.getActiveWindow();\n        if (activeWindow === null) return;\n        if (!activeWindow.maximized) {\n          this.savePosition(activeWindow);\n          this.maximize(activeWindow);\n        } else if (activeWindow.maximized === 'right' || activeWindow.maximized === 'left')\n          this.maximize(activeWindow);\n        else\n          this.restoreSavedPosition(activeWindow);\n        event.preventDefault();\n      }\n      if (keySequence === 'alt+n') { //Minimize\n        var activeWindow = this.getActiveWindow();\n        if (activeWindow === null || activeWindow.minimized) return;\n        this.minimize(activeWindow);\n        event.preventDefault();\n      }\n      if (keySequence === 'alt+w') { //Cycles Forward\n        var index = this.windows.indexOf(this.getActiveWindow());\n        this.activateNextWindow(index + 1);\n        event.preventDefault();\n      }\n      if (keySequence === 'shift+alt+w') { //Cycles Backward\n        var index = this.windows.indexOf(this.getActiveWindow());\n        this.activatePreviousWindow(index + 1);\n        event.preventDefault();\n      }\n      if (keySequence === 'shift+alt+x' && !(this.shiftPressed && this.altPressed && this.xPressed)) { //Close\n        var activeWindow = this.getActiveWindow();\n        if (!activeWindow) return;\n        this.closeWindow(activeWindow);\n        event.preventDefault();\n      }\n      if (keySequence === 'alt+d') { //Toggle Desktop\n        //this.desktopShown = this.hideShowAll();\n        event.preventDefault();\n      }\n\n      if (event.shiftKey)\n        this.shiftPressed = true;\n      if (event.altKey)\n        this.altPressed = true;\n      if (event.keyCode === 88)\n        this.xPressed = true;\n  }\n\n  onKeyUp = (event: any) =>  {\n      if (event.shiftKey)\n        this.shiftPressed = false;\n      if (event.altKey)\n        this.altPressed = false;\n      if (event.keyCode === 88)\n        this.xPressed = false;\n  }\n\n  /**\n   * @tru.doc function\n   * @name truDesktopComponent.handleSelectAttempt\n   * @module tru.desktop\n   *\n   * @description\n   * Prevents the user from highlight desktop elements.\n   *\n   */\n  handleSelectAttempt = (e) => {\n    var nodeName = e.target.nodeName.toLowerCase();\n    if (nodeName === 'input' || nodeName === 'textarea' || nodeName === 'select') return true;\n    if (window.event) { e.preventDefault(); }\n    return true;\n  }\n  \n  windows = [];\n\n  ngOnInit(): void {\r\n    this.logoUrl = this.options.logoUrl;\r\n    this.options = Object.assign(this.desktop.options, this.options);\r\n    this.options.viewportTop = this.options.menubarConfig !== undefined ? this.options.menubarHeight + 1 : 0;\r\n    this.truWindowEventHandler.onOpen().subscribe((windiowEvent: TruWindowEvent) => {\r\n      this.openWindow(windiowEvent, false);\r\n    });\r\n    document.onselectstart = this.handleSelectAttempt;\r\n    window.addEventListener('keydown', this.onKeyDown);\r\n    window.addEventListener('keyup', this.onKeyUp);\r\n  }\n\n  ngOnDestroy() {\n    window.removeEventListener('keydown', this.onKeyDown);\n    window.removeEventListener('keyup', this.onKeyUp);\n  }\n}\n","<div class=\"desktop-wrapper\">\r\n\r\n  <div class=\"desktop-menubar-container\" [ngStyle]=\"{'height': options.menubarHeight + 'px'}\">\r\n    <tru-desktop-menubar [desktopCtrl]=\"this\"></tru-desktop-menubar>\r\n  </div>\r\n\r\n  <tru-desktop-viewport [windows]=\"windows\" [desktopCtrl]=\"this\"></tru-desktop-viewport>\r\n\r\n  <tru-desktop-taskbar [windows]=\"windows\" [desktopCtrl]=\"this\"></tru-desktop-taskbar>\r\n\r\n  <img class=\"desktop-viewport-logo\" data-ng-show=\"logoUrl\" alt=\"\">\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { TruMenuModule, TruSubMenuModule } from '@trudb/tru-common-lib';\r\n\r\nimport { TruDesktopMenubar } from \"./tru-desktop-menubar\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopMenubar],\r\n  imports: [CommonModule, FormsModule, TruMenuModule, TruSubMenuModule],\r\n  exports: [TruDesktopMenubar]\r\n})\r\nexport class TruDesktopMenubarModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { TruDesktopResizable } from \"./tru-desktop-resizable\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopResizable],\r\n  imports: [CommonModule, FormsModule],\r\n  exports: [TruDesktopResizable]\r\n})\r\nexport class TruDesktopResizableModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { TruDesktopView } from \"./tru-desktop-view\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopView],\r\n  imports: [CommonModule, FormsModule],\r\n  exports: [TruDesktopView]\r\n})\r\nexport class TruDesktopViewModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\n\r\nimport { TruDesktopWindow } from \"./tru-desktop-window\";\r\nimport { TruDesktopResizableModule } from \"../../directives/resizable/tru-desktop-resizable-module\";\r\nimport { TruDesktopIconModule } from \"../../tru-desktop-icon-module\"\r\nimport { TruDesktopViewModule } from \"../view/tru-desktop-view-module\"\r\nimport { WindowConfig } from \"../../services/tru-desktop-service\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopWindow],\r\n  imports: [CommonModule, FormsModule, MatButtonModule, MatIconModule, TruDesktopResizableModule, TruDesktopIconModule, TruDesktopViewModule],\r\n  providers: [WindowConfig],\r\n  exports: [TruDesktopWindow]\r\n})\r\nexport class TruDesktopWindowModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { TruDesktopViewport } from \"./tru-desktop-viewport\";\r\nimport { TruDesktopWindowModule } from \"../window/tru-desktop-window-module\";\r\n\r\n@NgModule({\r\n  declarations: [TruDesktopViewport],\r\n  imports: [CommonModule, FormsModule, TruDesktopWindowModule],\r\n  exports: [TruDesktopViewport]\r\n})\r\nexport class TruDesktopViewportModule { }\r\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatButtonModule } from \"@angular/material/button\"\nimport { MatIconModule } from \"@angular/material/icon\"\n\nimport { TruDesktop } from './tru-desktop';\nimport { TruDesktopMenubarModule } from './components/menubar/tru-desktop-menubar-module';\nimport { TruDesktopTaskbarModule } from './components/taskbar/tru-desktop-taskbar-module';\nimport { TruDesktopViewportModule } from './components/viewport/tru-desktop-viewport-module';\nimport { TruDesktopWindowModule } from './components/window/tru-desktop-window-module';\nimport { TruDesktopViewModule } from './components/view/tru-desktop-view-module';\nimport { TruDesktopIconModule } from './tru-desktop-icon-module';\n\n@NgModule({\n  declarations: [\n    TruDesktop\n  ],\n  imports: [\n    CommonModule,\n    BrowserModule,\n    FormsModule,\n    HttpClientModule,\n    BrowserAnimationsModule,\n    MatButtonModule,\n    MatIconModule,\n    TruDesktopIconModule,\n    TruDesktopMenubarModule,\n    TruDesktopTaskbarModule,\n    TruDesktopViewportModule,\n    TruDesktopWindowModule,\n    TruDesktopViewModule,\n  ],\n  exports: [\n    TruDesktop\n  ]\n})\nexport class TruDesktopModule { }\n","/*\n * Public API Surface of tru-desktop-lib\n */\nexport * from './lib/services/tru-desktop-service';\n\nexport * from './lib/components/taskbar/tru-desktop-taskbar';\nexport * from './lib/components/taskbar/tru-desktop-taskbar-module';\n\nexport * from './lib/tru-desktop-icon-module';\n\nexport * from './lib/tru-desktop';\nexport * from './lib/tru-desktop-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i1.WindowConfig","i3","i4.TruDesktopView","i6.TruDesktopResizable","i1.TruDesktopWindow","i1.TruDesktopService","i3.TruDesktopMenubar","i4.TruDesktopViewport","i5.TruDesktopTaskbar","i6"],"mappings":"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"}