GUI2 Framework as a standalone NPM Library

There are a few changes going on here
1) The fw part of GUI has been moved out in to its own project
 a) several files are renamed (files 21-83)
 b) the project has its own BUILD file (file 5)
 c) there are a few files created by Angular CLI here - mostly script generated (files 7-20)
 d) package-lock.json is a big generated file that has to be versioned (file 13)

2) The view in the main GUI2 project now refer to this library (see BUILD file 110)
 a) some useless files were removed (files 115 - 139)
 b) several files are changed to update references (files 140-202)
 c) this breaks the BUCK build so I've removed the BUCK file and references to it (file 109)

Change-Id: I48bc3253edfcf5947f1582731ba739a1296012f5
diff --git a/web/gui2/src/main/webapp/app/view/apps/apps.module.ts b/web/gui2/src/main/webapp/app/view/apps/apps.module.ts
index 0e79a2b..464ad3c 100644
--- a/web/gui2/src/main/webapp/app/view/apps/apps.module.ts
+++ b/web/gui2/src/main/webapp/app/view/apps/apps.module.ts
@@ -19,9 +19,7 @@
 import { AppsRoutingModule } from './apps-routing.module';
 import { AppsComponent } from './apps/apps.component';
 import { AppsDetailsComponent } from './appsdetails/appsdetails.component';
-import { LayerModule } from '../../fw/layer/layer.module';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 
 /**
  * ONOS GUI -- Apps View Module
@@ -34,10 +32,8 @@
     imports: [
         CommonModule,
         AppsRoutingModule,
-        SvgModule,
-        WidgetModule,
-        FormsModule,
-        LayerModule
+        Gui2FwLibModule,
+        FormsModule
     ],
     declarations: [
         AppsComponent,
diff --git a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.spec.ts b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.spec.ts
index e022ebc..f1dfe0d 100644
--- a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.spec.ts
@@ -21,22 +21,24 @@
 import { By } from '@angular/platform-browser';
 import { HttpClient, HttpErrorResponse } from '@angular/common/http';
 
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    LionService,
+    LoadingService,
+    LogService,
+    TableBaseImpl, TableResponse, TableFilter, SortParams, SortDir,
+    UrlFnService,
+    WebSocketService,
+    TableFilterPipe,
+    ConfirmComponent,
+    FlashComponent,
+    IconComponent,
+    ThemeService,
+} from 'gui2-fw-lib';
+
 import { AppsComponent } from './apps.component';
 import { AppsDetailsComponent } from '../appsdetails/appsdetails.component';
-import { ConfirmComponent } from '../../../fw/layer/confirm/confirm.component';
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { FlashComponent } from '../../../fw/layer/flash/flash.component';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LionService } from '../../../fw/util/lion.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 
@@ -47,8 +49,6 @@
     }
 }
 
-class MockDialogService { }
-
 class MockFnService { }
 
 class MockHttpClient {}
@@ -57,8 +57,6 @@
     loadIconDef() { }
 }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -123,11 +121,9 @@
                 FlashComponent
             ],
             providers: [
-                { provide: DialogService, useClass: MockDialogService },
                 { provide: FnService, useValue: fs },
                 { provide: HttpClient, useClass: MockHttpClient },
                 { provide: IconService, useClass: MockIconService },
-                { provide: KeyService, useClass: MockKeyService },
                 {
                     provide: LionService, useFactory: (() => {
                         return {
diff --git a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.ts b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.ts
index 3a8e2a8..c933053 100644
--- a/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.ts
+++ b/web/gui2/src/main/webapp/app/view/apps/apps/apps.component.ts
@@ -16,17 +16,17 @@
 import { Component, OnInit, OnDestroy, Inject } from '@angular/core';
 import { HttpClient, HttpErrorResponse } from '@angular/common/http';
 
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LionService } from '../../../fw/util/lion.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { TableBaseImpl, TableResponse, TableFilter, SortParams, SortDir } from '../../../fw/widget/table.base';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
+import {
+    FnService,
+    IconService,
+    LionService,
+    LoadingService,
+    LogService,
+    TableBaseImpl, TableResponse, TableFilter, SortParams, SortDir,
+    UrlFnService,
+    WebSocketService,
+    TableFilterPipe
+} from 'gui2-fw-lib';
 
 const INSTALLED = 'INSTALLED';
 const ACTIVE = 'ACTIVE';
@@ -131,9 +131,7 @@
 
     constructor(
         protected fs: FnService,
-        private ds: DialogService,
         private is: IconService,
-        private ks: KeyService,
         private lion: LionService,
         protected ls: LoadingService,
         protected log: LogService,
diff --git a/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.spec.ts
index 75f5f8e..ed45a02 100644
--- a/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.spec.ts
@@ -19,14 +19,18 @@
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    LionService,
+    LogService,
+    UrlFnService,
+    WebSocketService,
+    TableFilterPipe,
+    IconComponent
+} from 'gui2-fw-lib';
+
 import { AppsDetailsComponent } from './appsdetails.component';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LionService } from '../../../fw/util/lion.service';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { of } from 'rxjs';
 
 class MockActivatedRoute extends ActivatedRoute {
diff --git a/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.ts b/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.ts
index c0d2e02..d01d409 100644
--- a/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/apps/appsdetails/appsdetails.component.ts
@@ -15,14 +15,15 @@
  */
 import { Component, Input, OnInit, OnDestroy, OnChanges } from '@angular/core';
 import { trigger, state, style, animate, transition } from '@angular/animations';
+import {
+    FnService,
+    LionService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 
-import { FnService } from '../../../fw/util/fn.service';
-import { LionService } from '../../../fw/util/lion.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-
-import { DetailsPanelBaseImpl } from '../../../fw/widget/detailspanel.base';
 import { App, APPURLPREFIX, ICONURLSUFFIX } from '../apps/apps.component';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/cluster/cluster-details.directive.ts b/web/gui2/src/main/webapp/app/view/cluster/cluster-details.directive.ts
index 9aa2eb7..c796962 100644
--- a/web/gui2/src/main/webapp/app/view/cluster/cluster-details.directive.ts
+++ b/web/gui2/src/main/webapp/app/view/cluster/cluster-details.directive.ts
@@ -14,16 +14,18 @@
  * limitations under the License.
  */
 import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, OnDestroy, OnInit, Output} from '@angular/core';
-import {FnService} from '../../fw/util/fn.service';
-import {LogService} from '../../log.service';
-import {MastService} from '../../fw/mast/mast.service';
-import {DetailsPanelBaseImpl} from '../../fw/widget/detailspanel.base';
-import {LoadingService} from '../../fw/layer/loading.service';
-import {IconService} from '../../fw/svg/icon.service';
-import {LionService} from '../../fw/util/lion.service';
-import {WebSocketService} from '../../fw/remote/websocket.service';
+import {
+    FnService,
+    LogService,
+    MastService,
+    DetailsPanelBaseImpl,
+    LoadingService,
+    IconService,
+    LionService,
+    PanelService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import * as d3 from 'd3';
-import {PanelService} from '../../fw/layer/panel.service';
 import {HostListener} from '@angular/core';
 
 // internal state
diff --git a/web/gui2/src/main/webapp/app/view/cluster/cluster.module.ts b/web/gui2/src/main/webapp/app/view/cluster/cluster.module.ts
index d5da0bf..2ffb801 100644
--- a/web/gui2/src/main/webapp/app/view/cluster/cluster.module.ts
+++ b/web/gui2/src/main/webapp/app/view/cluster/cluster.module.ts
@@ -13,20 +13,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import {NgModule} from '@angular/core';
-import {CommonModule} from '@angular/common';
-import {SvgModule} from '../../fw/svg/svg.module';
-import {WidgetModule} from '../../fw/widget/widget.module';
-import {ClusterComponent} from './cluster/cluster.component';
-import {ClusterRoutingModule} from './cluster-routing.module';
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
+import { ClusterComponent } from './cluster/cluster.component';
+import { ClusterRoutingModule } from './cluster-routing.module';
 import { ClusterDetailsDirective } from './cluster-details.directive';
 
 @NgModule({
     imports: [
         CommonModule,
-        SvgModule,
-        ClusterRoutingModule,
-        WidgetModule
+        Gui2FwLibModule,
+        ClusterRoutingModule
     ],
     declarations: [ClusterComponent, ClusterDetailsDirective]
 })
diff --git a/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.spec.ts b/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.spec.ts
index f0b4908..4756b4e 100644
--- a/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.spec.ts
@@ -16,22 +16,26 @@
 import {async, ComponentFixture, TestBed} from '@angular/core/testing';
 
 import {ClusterComponent} from './cluster.component';
-import {FnService} from '../../../fw/util/fn.service';
-import {LogService} from '../../../log.service';
+
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    IconComponent,
+    IconService,
+    GlyphService,
+    MastService,
+    NavService,
+    ThemeService,
+
+} from 'gui2-fw-lib';
+
 import {ActivatedRoute, Params} from '@angular/router';
 import {of} from 'rxjs/index';
 import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
 import {FormsModule} from '@angular/forms';
 import {RouterTestingModule} from '@angular/router/testing';
-import {IconComponent} from '../../../fw/svg/icon/icon.component';
-import {IconService} from '../../../fw/svg/icon.service';
-import {GlyphService} from '../../../fw/svg/glyph.service';
-import {KeyService} from '../../../fw/util/key.service';
-import {LoadingService} from '../../../fw/layer/loading.service';
-import {MastService} from '../../../fw/mast/mast.service';
-import {NavService} from '../../../fw/nav/nav.service';
-import {WebSocketService} from '../../../fw/remote/websocket.service';
-import {ThemeService} from '../../../fw/util/theme.service';
 import {DebugElement} from '@angular/core';
 import {By} from '@angular/platform-browser';
 
@@ -50,9 +54,6 @@
 class MockGlyphService {
 }
 
-class MockKeyService {
-}
-
 class MockLoadingService {
     startAnim() {
     }
@@ -120,7 +121,6 @@
                 {provide: FnService, useValue: fs},
                 {provide: IconService, useClass: MockIconService},
                 {provide: GlyphService, useClass: MockGlyphService},
-                {provide: KeyService, useClass: MockKeyService},
                 {provide: LoadingService, useClass: MockLoadingService},
                 {provide: MastService, useClass: MockMastService},
                 {provide: NavService, useClass: MockNavService},
diff --git a/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.ts b/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.ts
index 1181a17..f72b1d0 100644
--- a/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.ts
+++ b/web/gui2/src/main/webapp/app/view/cluster/cluster/cluster.component.ts
@@ -14,12 +14,14 @@
  * limitations under the License.
  */
 import {Component, OnDestroy, OnInit} from '@angular/core';
-import {SortDir, TableBaseImpl, TableResponse} from '../../../fw/widget/table.base';
-import {FnService} from '../../../fw/util/fn.service';
-import {LoadingService} from '../../../fw/layer/loading.service';
-import {LogService} from '../../../log.service';
-import {WebSocketService} from '../../../fw/remote/websocket.service';
-import {LionService} from '../../../fw/util/lion.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    LionService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 /**
  * Model of the response from WebSocket
diff --git a/web/gui2/src/main/webapp/app/view/device/device.module.ts b/web/gui2/src/main/webapp/app/view/device/device.module.ts
index 9ad5456..94e717d 100644
--- a/web/gui2/src/main/webapp/app/view/device/device.module.ts
+++ b/web/gui2/src/main/webapp/app/view/device/device.module.ts
@@ -17,8 +17,7 @@
 import { CommonModule } from '@angular/common';
 import { DeviceRoutingModule } from './device-routing.module';
 import { DeviceComponent } from './device/device.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { FormsModule } from '@angular/forms';
 import { DeviceDetailsComponent } from './devicedetails/devicedetails.component';
 
@@ -29,8 +28,7 @@
     imports: [
         CommonModule,
         DeviceRoutingModule,
-        SvgModule,
-        WidgetModule,
+        Gui2FwLibModule,
         FormsModule
     ],
     declarations: [
diff --git a/web/gui2/src/main/webapp/app/view/device/device/device.component.spec.ts b/web/gui2/src/main/webapp/app/view/device/device/device.component.spec.ts
index 207dde9..44bb0c3 100644
--- a/web/gui2/src/main/webapp/app/view/device/device/device.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/device/device/device.component.spec.ts
@@ -17,21 +17,22 @@
 import { ActivatedRoute, Params } from '@angular/router';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { LogService } from '../../../log.service';
 import { DeviceComponent } from './device.component';
 import { } from 'jasmine';
 
-import { FnService } from '../../../fw/util/fn.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { GlyphService } from '../../../fw/svg/glyph.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { KeyService } from '../../../fw/util/key.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { NavService } from '../../../fw/nav/nav.service';
-import { MastService } from '../../../fw/mast/mast.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    TableFilterPipe,
+    ThemeService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { of } from 'rxjs';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { FormsModule } from '@angular/forms';
@@ -51,8 +52,6 @@
 
 class MockGlyphService { }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -106,7 +105,6 @@
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
                 { provide: GlyphService, useClass: MockGlyphService },
-                { provide: KeyService, useClass: MockKeyService },
                 { provide: LoadingService, useClass: MockLoadingService },
                 { provide: MastService, useClass: MockMastService },
                 { provide: NavService, useClass: MockNavService },
diff --git a/web/gui2/src/main/webapp/app/view/device/device/device.component.ts b/web/gui2/src/main/webapp/app/view/device/device/device.component.ts
index b6f1d95..e5b40c3 100644
--- a/web/gui2/src/main/webapp/app/view/device/device/device.component.ts
+++ b/web/gui2/src/main/webapp/app/view/device/device/device.component.ts
@@ -14,11 +14,16 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy} from '@angular/core';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { TableBaseImpl, TableResponse, SortDir } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    LionService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
+
 import { ActivatedRoute, Router } from '@angular/router';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.spec.ts
index 5daa2ef..d169f34 100644
--- a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.spec.ts
@@ -17,15 +17,18 @@
 import { DeviceDetailsComponent } from './devicedetails.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs/index';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    LogService,
+    WebSocketService,
+    IconComponent
+} from 'gui2-fw-lib';
+
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { IconService } from '../../../fw/svg/icon.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 import { } from 'jasmine';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
 
 class MockActivatedRoute extends ActivatedRoute {
     constructor(params: Params) {
diff --git a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
index 9e30eb7..b81b68f 100644
--- a/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/device/devicedetails/devicedetails.component.ts
@@ -15,14 +15,15 @@
  */
 import { Component, Input, OnInit, OnDestroy, OnChanges } from '@angular/core';
 import { trigger, state, style, animate, transition } from '@angular/animations';
-
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-
-import { DetailsPanelBaseImpl } from '../../../fw/widget/detailspanel.base';
-import { IconService } from '../../../fw/svg/icon.service';
+import {
+    FnService,
+    IconService,
+    LionService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 
 /**
  * The details view when a device row is clicked from the Device view
diff --git a/web/gui2/src/main/webapp/app/view/flow/flow.module.ts b/web/gui2/src/main/webapp/app/view/flow/flow.module.ts
index 55d3c96..ee03a8d 100644
--- a/web/gui2/src/main/webapp/app/view/flow/flow.module.ts
+++ b/web/gui2/src/main/webapp/app/view/flow/flow.module.ts
@@ -16,8 +16,7 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { FlowComponent } from './flow/flow.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { FlowRoutingModule } from './flow-routing.module';
 import { FormsModule } from '@angular/forms';
 import { FlowDetailsComponent } from './flowdetails/flowdetails/flowdetails.component';
@@ -28,10 +27,9 @@
 @NgModule({
     imports: [
         CommonModule,
-        SvgModule,
+        Gui2FwLibModule,
         FlowRoutingModule,
-        FormsModule,
-        WidgetModule
+        FormsModule
     ],
     declarations: [
         FlowComponent,
diff --git a/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.spec.ts b/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.spec.ts
index e6ed12a..e049fcf 100644
--- a/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.spec.ts
@@ -18,24 +18,26 @@
 import { FlowComponent } from './flow.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs/index';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LionService,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    TableFilterPipe,
+    ThemeService,
+    WebSocketService
+} from 'gui2-fw-lib';
+
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { FormsModule } from '@angular/forms';
 import { RouterTestingModule } from '@angular/router/testing';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { GlyphService } from '../../../fw/svg/glyph.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { MastService } from '../../../fw/mast/mast.service';
-import { NavService } from '../../../fw/nav/nav.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { LionService } from '../../../fw/util/lion.service';
 import { FlowDetailsComponent } from '../flowdetails/flowdetails/flowdetails.component';
 
 class MockActivatedRoute extends ActivatedRoute {
@@ -51,8 +53,6 @@
 
 class MockGlyphService { }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -116,7 +116,6 @@
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
                 { provide: GlyphService, useClass: MockGlyphService },
-                { provide: KeyService, useClass: MockKeyService },
                 {
                     provide: LionService, useFactory: (() => {
                         return {
diff --git a/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.ts b/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.ts
index 96692a4..7a6c892 100644
--- a/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.ts
+++ b/web/gui2/src/main/webapp/app/view/flow/flow/flow.component.ts
@@ -15,14 +15,15 @@
  */
 
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { SortDir, TableBaseImpl, TableResponse } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { LogService } from '../../../log.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    LionService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
-import { LionService } from '../../../fw/util/lion.service';
-
 
 /**
  * Model of the response from WebSocket
diff --git a/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.spec.ts
index 8bbf482..b7da3cf 100644
--- a/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.spec.ts
@@ -18,11 +18,13 @@
 import { FlowDetailsComponent } from './flowdetails.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
-import { FnService } from '../../../../fw/util/fn.service';
-import { LogService } from '../../../../log.service';
-import { IconService } from '../../../../fw/svg/icon.service';
-import { WebSocketService } from '../../../../fw/remote/websocket.service';
-import { IconComponent } from '../../../../fw/svg/icon/icon.component';
+import {
+    FnService,
+    IconService,
+    LogService,
+    WebSocketService,
+    IconComponent
+} from 'gui2-fw-lib';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
diff --git a/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.ts b/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.ts
index 3197285..36d1b34 100644
--- a/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/flow/flowdetails/flowdetails/flowdetails.component.ts
@@ -14,12 +14,15 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy, OnChanges, Input, Output, EventEmitter } from '@angular/core';
-import { DetailsPanelBaseImpl } from '../../../../fw/widget/detailspanel.base';
-import { FnService } from '../../../../fw/util/fn.service';
-import { LoadingService } from '../../../../fw/layer/loading.service';
-import { LogService } from '../../../../log.service';
-import { WebSocketService } from '../../../../fw/remote/websocket.service';
-import { LionService } from '../../../../fw/util/lion.service';
+import {
+    FnService,
+    IconService,
+    LionService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { trigger, state, style, transition, animate } from '@angular/animations';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/group/group.module.ts b/web/gui2/src/main/webapp/app/view/group/group.module.ts
index 343a971..ad876ee 100644
--- a/web/gui2/src/main/webapp/app/view/group/group.module.ts
+++ b/web/gui2/src/main/webapp/app/view/group/group.module.ts
@@ -18,8 +18,7 @@
 
 import { GroupRoutingModule } from './group-routing.module';
 import { GroupComponent } from './group/group.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { FormsModule } from '@angular/forms';
 import { RouterModule } from '@angular/router';
 
@@ -27,8 +26,7 @@
   imports: [
     CommonModule,
     GroupRoutingModule,
-    SvgModule,
-    WidgetModule,
+    Gui2FwLibModule,
     FormsModule,
     RouterModule
   ],
diff --git a/web/gui2/src/main/webapp/app/view/group/group/group.component.spec.ts b/web/gui2/src/main/webapp/app/view/group/group/group.component.spec.ts
index bcf0ca2..2b0e4e6 100644
--- a/web/gui2/src/main/webapp/app/view/group/group/group.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/group/group/group.component.spec.ts
@@ -16,22 +16,25 @@
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 
 import { GroupComponent } from './group.component';
-import { LogService } from '../../../log.service';
-import { ConsoleLoggerService } from '../../../consolelogger.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    ConsoleLoggerService,
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    TableFilterPipe,
+    ThemeService,
+    UrlFnService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { FormsModule } from '@angular/forms';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
 import { RouterTestingModule } from '@angular/router/testing';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
@@ -43,16 +46,12 @@
     }
 }
 
-class MockDialogService { }
-
 class MockFnService { }
 
 class MockIconService {
     loadIconDef() { }
 }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -111,10 +110,8 @@
             imports: [BrowserAnimationsModule, FormsModule, RouterTestingModule],
             declarations: [GroupComponent, IconComponent, TableFilterPipe],
             providers: [
-                { provide: DialogService, useClass: MockDialogService },
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
-                { provide: KeyService, useClass: MockKeyService },
                 { provide: LoadingService, useClass: MockLoadingService },
                 { provide: LogService, useValue: log },
                 { provide: ThemeService, useClass: MockThemeService },
diff --git a/web/gui2/src/main/webapp/app/view/group/group/group.component.ts b/web/gui2/src/main/webapp/app/view/group/group/group.component.ts
index fc6e9bd..c7fa497 100644
--- a/web/gui2/src/main/webapp/app/view/group/group/group.component.ts
+++ b/web/gui2/src/main/webapp/app/view/group/group/group.component.ts
@@ -14,12 +14,15 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    LionService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
-import { TableResponse, TableBaseImpl, SortDir } from '../../../fw/widget/table.base';
 
 /**
  * Model of the response from WebSocket
diff --git a/web/gui2/src/main/webapp/app/view/host/host.module.ts b/web/gui2/src/main/webapp/app/view/host/host.module.ts
index 93d0a59..2bb8321 100644
--- a/web/gui2/src/main/webapp/app/view/host/host.module.ts
+++ b/web/gui2/src/main/webapp/app/view/host/host.module.ts
@@ -18,16 +18,14 @@
 
 import { HostRoutingModule } from './host-routing.module';
 import { HostComponent } from './host/host.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { HostDetailsComponent } from './hostdetails/hostdetails.component';
 
 @NgModule({
     imports: [
         CommonModule,
         HostRoutingModule,
-        WidgetModule,
-        SvgModule
+        Gui2FwLibModule
     ],
     declarations: [HostComponent, HostDetailsComponent]
 })
diff --git a/web/gui2/src/main/webapp/app/view/host/host/host.component.spec.ts b/web/gui2/src/main/webapp/app/view/host/host/host.component.spec.ts
index 6d915c7..d482cb2 100644
--- a/web/gui2/src/main/webapp/app/view/host/host/host.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/host/host/host.component.spec.ts
@@ -19,20 +19,22 @@
 import { FormsModule } from '@angular/forms';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    TableFilterPipe,
+    ThemeService,
+    UrlFnService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { HostComponent } from './host.component';
 import { HostDetailsComponent } from '../hostdetails/hostdetails.component';
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 
@@ -43,16 +45,12 @@
     }
 }
 
-class MockDialogService { }
-
 class MockFnService { }
 
 class MockIconService {
     loadIconDef() { }
 }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -110,10 +108,8 @@
             imports: [BrowserAnimationsModule, FormsModule],
             declarations: [HostComponent, HostDetailsComponent, IconComponent, TableFilterPipe],
             providers: [
-                { provide: DialogService, useClass: MockDialogService },
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
-                { provide: KeyService, useClass: MockKeyService },
                 { provide: LoadingService, useClass: MockLoadingService },
                 { provide: LogService, useValue: logSpy },
                 { provide: ThemeService, useClass: MockThemeService },
diff --git a/web/gui2/src/main/webapp/app/view/host/host/host.component.ts b/web/gui2/src/main/webapp/app/view/host/host/host.component.ts
index c13e2f5..3ea91c7 100644
--- a/web/gui2/src/main/webapp/app/view/host/host/host.component.ts
+++ b/web/gui2/src/main/webapp/app/view/host/host/host.component.ts
@@ -14,11 +14,13 @@
 * limitations under the License.
 */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { TableBaseImpl, TableResponse, SortDir } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 interface HostTableResponse extends TableResponse {
     hosts: Host[];
diff --git a/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.spec.ts
index 0ce1ba0..2526c47 100644
--- a/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.spec.ts
@@ -18,13 +18,14 @@
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../../app/fw/util/fn.service';
-import { IconComponent } from '../../../../app/fw/svg/icon/icon.component';
-import { IconService } from '../../../../app/fw/svg/icon.service';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    LogService,
+    UrlFnService,
+    WebSocketService,
+    IconComponent
+} from 'gui2-fw-lib';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 
diff --git a/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.ts b/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.ts
index 7d1132d..18cf106 100644
--- a/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/host/hostdetails/hostdetails.component.ts
@@ -16,13 +16,13 @@
 
 import { Component, Input, OnInit, OnDestroy, OnChanges } from '@angular/core';
 import { trigger, state, style, animate, transition } from '@angular/animations';
-
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-
-import { DetailsPanelBaseImpl } from '../../../fw/widget/detailspanel.base';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 
 /**
  * The details view when a host row is clicked from the Host view
diff --git a/web/gui2/src/main/webapp/app/view/intent/intent.module.ts b/web/gui2/src/main/webapp/app/view/intent/intent.module.ts
index b5d6e64..d935e08 100644
--- a/web/gui2/src/main/webapp/app/view/intent/intent.module.ts
+++ b/web/gui2/src/main/webapp/app/view/intent/intent.module.ts
@@ -18,19 +18,15 @@
 
 import { IntentRoutingModule } from './intent-routing.module';
 import { IntentComponent } from './intent/intent.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { RouterModule } from '@angular/router';
-import { LayerModule } from '../../fw/layer/layer.module';
 
 @NgModule({
     imports: [
         CommonModule,
-        SvgModule,
-        WidgetModule,
+        Gui2FwLibModule,
         RouterModule,
         IntentRoutingModule,
-        LayerModule
     ],
     declarations: [IntentComponent],
     exports: [IntentComponent]
diff --git a/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.spec.ts b/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.spec.ts
index b32538b..9a0a082 100644
--- a/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.spec.ts
@@ -19,16 +19,18 @@
 import { FormsModule } from '@angular/forms';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { ConfirmComponent } from '../../../fw/layer/confirm/confirm.component';
-import { FlashComponent } from '../../../fw/layer/flash/flash.component';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    ConfirmComponent,
+    FlashComponent,
+    LoadingService,
+    LogService,
+    TableFilterPipe,
+    WebSocketService
+} from 'gui2-fw-lib';
 
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 
diff --git a/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.ts b/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.ts
index df94ed1..6719564 100644
--- a/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.ts
+++ b/web/gui2/src/main/webapp/app/view/intent/intent/intent.component.ts
@@ -14,12 +14,13 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { TableResponse, TableBaseImpl, SortDir } from '../../../fw/widget/table.base';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 const RESUBMITINTENT = 'resubmitIntent';
 const REMOVEINTENT = 'removeIntent';
@@ -87,7 +88,6 @@
     constructor(
         protected log: LogService,
         protected fs: FnService,
-        private ds: DialogService,
         protected ls: LoadingService,
         protected wss: WebSocketService,
     ) {
diff --git a/web/gui2/src/main/webapp/app/view/link/link.module.ts b/web/gui2/src/main/webapp/app/view/link/link.module.ts
index 92276b0..0cf2cc2 100644
--- a/web/gui2/src/main/webapp/app/view/link/link.module.ts
+++ b/web/gui2/src/main/webapp/app/view/link/link.module.ts
@@ -16,16 +16,14 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { LinkComponent } from './link/link.component';
-import { SvgModule } from '../../fw/svg/svg.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { LinkRoutingModule } from './link-routing.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
 
 @NgModule({
   imports: [
     CommonModule,
     LinkRoutingModule,
-    SvgModule,
-    WidgetModule
+    Gui2FwLibModule
   ],
   declarations: [
     LinkComponent
diff --git a/web/gui2/src/main/webapp/app/view/link/link/link.component.spec.ts b/web/gui2/src/main/webapp/app/view/link/link/link.component.spec.ts
index 699e535..c50ed46 100644
--- a/web/gui2/src/main/webapp/app/view/link/link/link.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/link/link/link.component.spec.ts
@@ -18,12 +18,14 @@
 import { LinkComponent } from './link.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 
diff --git a/web/gui2/src/main/webapp/app/view/link/link/link.component.ts b/web/gui2/src/main/webapp/app/view/link/link/link.component.ts
index eeb7c33..3e0b21f 100644
--- a/web/gui2/src/main/webapp/app/view/link/link/link.component.ts
+++ b/web/gui2/src/main/webapp/app/view/link/link/link.component.ts
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { LogService } from '../../../log.service';
-import { TableBaseImpl, TableResponse, SortDir } from '../../../fw/widget/table.base';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 /**
  * Model of the response from WebSocket
diff --git a/web/gui2/src/main/webapp/app/view/meter/meter.module.ts b/web/gui2/src/main/webapp/app/view/meter/meter.module.ts
index 90263b2..cd90d85 100644
--- a/web/gui2/src/main/webapp/app/view/meter/meter.module.ts
+++ b/web/gui2/src/main/webapp/app/view/meter/meter.module.ts
@@ -15,9 +15,7 @@
 */
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
-
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 
 import { MeterRoutingModule } from './meter-routing.module';
 import { MeterComponent } from './meter/meter.component';
@@ -27,10 +25,9 @@
 @NgModule({
   imports: [
     CommonModule,
-    SvgModule,
+    Gui2FwLibModule,
     MeterRoutingModule,
-    FormsModule,
-    WidgetModule
+    FormsModule
   ],
   declarations: [MeterComponent]
 })
diff --git a/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.spec.ts b/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.spec.ts
index e17ff50..1337cb8 100644
--- a/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.spec.ts
@@ -20,18 +20,21 @@
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 import { MeterComponent } from './meter.component';
-import { LogService } from '../../../log.service';
-import { DialogService } from '../../../fw/layer/dialog.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LionService } from '../../../fw/util/lion.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { UrlFnService } from '../../../fw/remote/urlfn.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LionService,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    TableFilterPipe,
+    ThemeService,
+    UrlFnService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { of, Subject } from 'rxjs';
 import { } from 'jasmine';
 import { RouterTestingModule } from '@angular/router/testing';
@@ -45,16 +48,12 @@
 }
 
 
-class MockDialogService { }
-
 class MockFnService { }
 
 class MockIconService {
     loadIconDef() { }
 }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -120,10 +119,8 @@
             imports: [BrowserAnimationsModule, FormsModule, RouterTestingModule],
             declarations: [MeterComponent, IconComponent, TableFilterPipe],
             providers: [
-                { provide: DialogService, useClass: MockDialogService },
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
-                { provide: KeyService, useClass: MockKeyService },
                 {
                     provide: LionService, useFactory: (() => {
                         return {
diff --git a/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.ts b/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.ts
index e026e1c..b534c0a 100644
--- a/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.ts
+++ b/web/gui2/src/main/webapp/app/view/meter/meter/meter.component.ts
@@ -14,11 +14,13 @@
 * limitations under the License.
 */
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { SortDir, TableBaseImpl, TableResponse } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { LogService } from '../../../log.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/partition/partition.module.ts b/web/gui2/src/main/webapp/app/view/partition/partition.module.ts
index 69e9832..2e79afc 100644
--- a/web/gui2/src/main/webapp/app/view/partition/partition.module.ts
+++ b/web/gui2/src/main/webapp/app/view/partition/partition.module.ts
@@ -15,8 +15,7 @@
  */
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 
 import { PartitionRoutingModule } from './partition-routing.module';
 import { PartitionComponent } from './partition/partition.component';
@@ -24,8 +23,7 @@
 @NgModule({
     imports: [
         CommonModule,
-        SvgModule,
-        WidgetModule,
+        Gui2FwLibModule,
         PartitionRoutingModule
     ],
     declarations: [PartitionComponent]
diff --git a/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.spec.ts b/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.spec.ts
index ed9697e..ff43f9e 100644
--- a/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.spec.ts
@@ -17,12 +17,14 @@
 import { ActivatedRoute, Params } from '@angular/router';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 import { RouterTestingModule } from '@angular/router/testing';
diff --git a/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.ts b/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.ts
index 552574f..aec5e85 100644
--- a/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.ts
+++ b/web/gui2/src/main/webapp/app/view/partition/partition/partition.component.ts
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { TableBaseImpl, SortDir } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { LogService } from '../../../log.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/port/port.module.ts b/web/gui2/src/main/webapp/app/view/port/port.module.ts
index dd622dc..105312c 100644
--- a/web/gui2/src/main/webapp/app/view/port/port.module.ts
+++ b/web/gui2/src/main/webapp/app/view/port/port.module.ts
@@ -16,19 +16,17 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { PortComponent } from './port/port.component';
-import { SvgModule } from '../../fw/svg/svg.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { FormsModule } from '@angular/forms';
-import { WidgetModule } from '../../fw/widget/widget.module';
 import { PortRoutingModule } from './port-routing.module';
 import { PortDetailsComponent } from './portdetails/portdetails.component';
 
 @NgModule({
     imports: [
         CommonModule,
-        SvgModule,
+        Gui2FwLibModule,
         PortRoutingModule,
-        FormsModule,
-        WidgetModule
+        FormsModule
     ],
     declarations: [PortComponent, PortDetailsComponent]
 })
diff --git a/web/gui2/src/main/webapp/app/view/port/port/port.component.spec.ts b/web/gui2/src/main/webapp/app/view/port/port/port.component.spec.ts
index 233b34e..a53bd1c 100644
--- a/web/gui2/src/main/webapp/app/view/port/port/port.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/port/port/port.component.spec.ts
@@ -19,25 +19,26 @@
 import { PortComponent } from './port.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs/index';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    GlyphService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    NavService,
+    MastService,
+    PrefsService,
+    TableFilterPipe,
+    ThemeService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { FormsModule } from '@angular/forms';
 import { RouterTestingModule } from '@angular/router/testing';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { TableFilterPipe } from '../../../fw/widget/tablefilter.pipe';
-import { GlyphService } from '../../../fw/svg/glyph.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { KeyService } from '../../../fw/util/key.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { MastService } from '../../../fw/mast/mast.service';
-import { NavService } from '../../../fw/nav/nav.service';
-import { ThemeService } from '../../../fw/util/theme.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 import { PortDetailsComponent } from '../portdetails/portdetails.component';
-import { PrefsService } from '../../../fw/util/prefs.service';
 class MockActivatedRoute extends ActivatedRoute {
     constructor(params: Params) {
         super();
@@ -58,8 +59,6 @@
 
 class MockGlyphService { }
 
-class MockKeyService { }
-
 class MockLoadingService {
     startAnim() { }
     stop() { }
@@ -116,7 +115,6 @@
                 { provide: FnService, useValue: fs },
                 { provide: IconService, useClass: MockIconService },
                 { provide: GlyphService, useClass: MockGlyphService },
-                { provide: KeyService, useClass: MockKeyService },
                 { provide: LoadingService, useClass: MockLoadingService },
                 { provide: MastService, useClass: MockMastService },
                 { provide: NavService, useClass: MockNavService },
diff --git a/web/gui2/src/main/webapp/app/view/port/port/port.component.ts b/web/gui2/src/main/webapp/app/view/port/port/port.component.ts
index 1c86c9c..0dcd114 100644
--- a/web/gui2/src/main/webapp/app/view/port/port/port.component.ts
+++ b/web/gui2/src/main/webapp/app/view/port/port/port.component.ts
@@ -14,13 +14,15 @@
  * limitations under the License.
  */
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { SortDir, TableBaseImpl, TableResponse } from '../../../fw/widget/table.base';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    PrefsService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { PrefsService } from '../../../fw/util/prefs.service';
 
 /**
  * Model of the response from WebSocket
diff --git a/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.spec.ts
index 18dc37b..9cae299 100644
--- a/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.spec.ts
@@ -18,12 +18,14 @@
 import { PortDetailsComponent } from './portdetails.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs/index';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    IconService,
+    LogService,
+    WebSocketService,
+    IconComponent
+} from 'gui2-fw-lib';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 
diff --git a/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.ts b/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.ts
index 1fd62d3..0960cd6 100644
--- a/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/port/portdetails/portdetails.component.ts
@@ -15,12 +15,14 @@
  */
 import { Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';
 import { animate, state, style, transition, trigger } from '@angular/animations';
-import { DetailsPanelBaseImpl } from '../../../fw/widget/detailspanel.base';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 
 /**
  * The details view when a port row is clicked from the Port view
diff --git a/web/gui2/src/main/webapp/app/view/processor/processor.module.ts b/web/gui2/src/main/webapp/app/view/processor/processor.module.ts
index 961925a..2cf5e42 100644
--- a/web/gui2/src/main/webapp/app/view/processor/processor.module.ts
+++ b/web/gui2/src/main/webapp/app/view/processor/processor.module.ts
@@ -15,8 +15,7 @@
  */
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { ProcessorRoutingModule } from './processor-routing.module';
 import { ProcessorComponent } from './processor/processor.component';
 
@@ -24,8 +23,7 @@
     imports: [
         CommonModule,
         ProcessorRoutingModule,
-        SvgModule,
-        WidgetModule
+        Gui2FwLibModule
     ],
     declarations: [ProcessorComponent]
 })
diff --git a/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.spec.ts b/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.spec.ts
index 6abded1..53ad34c 100644
--- a/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.spec.ts
@@ -17,12 +17,14 @@
 import { ActivatedRoute, Params } from '@angular/router';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
-import { LogService } from '../../../log.service';
-import { FnService } from '../../../fw/util/fn.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { of } from 'rxjs';
 import { } from 'jasmine';
 import { RouterTestingModule } from '@angular/router/testing';
diff --git a/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.ts b/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.ts
index a7840ec..a42912f 100644
--- a/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.ts
+++ b/web/gui2/src/main/webapp/app/view/processor/processor/processor.component.ts
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 import { Component, OnDestroy, OnInit } from '@angular/core';
-import { SortDir, TableBaseImpl, TableResponse } from '../../../fw/widget/table.base';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { LogService } from '../../../log.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { FnService } from '../../../fw/util/fn.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 import { ActivatedRoute } from '@angular/router';
 
 /**
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings.module.ts b/web/gui2/src/main/webapp/app/view/settings/settings.module.ts
index eeed435..5b6505b 100644
--- a/web/gui2/src/main/webapp/app/view/settings/settings.module.ts
+++ b/web/gui2/src/main/webapp/app/view/settings/settings.module.ts
@@ -18,16 +18,14 @@
 
 import { SettingsRoutingModule } from './settings-routing.module';
 import { SettingsComponent } from './settings/settings.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 import { SettingsDetailsComponent } from './settingsdetails/settingsdetails.component';
 
 @NgModule({
     imports: [
         CommonModule,
         SettingsRoutingModule,
-        SvgModule,
-        WidgetModule
+        Gui2FwLibModule
     ],
     declarations: [SettingsComponent, SettingsDetailsComponent]
 })
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts
index 6ceb4ad..7e0d8de 100644
--- a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.spec.ts
@@ -18,12 +18,14 @@
 import { SettingsComponent } from './settings.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 import { SettingsDetailsComponent } from '../settingsdetails/settingsdetails.component';
diff --git a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts
index bc74b6a..a2bf6c4 100644
--- a/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts
+++ b/web/gui2/src/main/webapp/app/view/settings/settings/settings.component.ts
@@ -14,11 +14,13 @@
 * limitations under the License.
 */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { TableBaseImpl, TableResponse, SortDir } from '../../../fw/widget/table.base';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 /**
  * Model of the data returned through the Web Socket about settings.
diff --git a/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.spec.ts b/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.spec.ts
index 41200fc..f8060fe 100644
--- a/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.spec.ts
@@ -18,12 +18,14 @@
 import { SettingsDetailsComponent } from './settingsdetails.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
+import {
+    FnService,
+    IconService,
+    LogService,
+    WebSocketService,
+    IconComponent
+} from 'gui2-fw-lib';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
-import { IconService } from '../../../fw/svg/icon.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 
diff --git a/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.ts b/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.ts
index e818360..39cc9b8 100644
--- a/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.ts
+++ b/web/gui2/src/main/webapp/app/view/settings/settingsdetails/settingsdetails.component.ts
@@ -14,11 +14,14 @@
 * limitations under the License.
 */
 import { Component, OnInit, Input, OnDestroy, OnChanges } from '@angular/core';
-import { FnService } from '../../../fw/util/fn.service';
-import { DetailsPanelBaseImpl } from '../../../fw/widget/detailspanel.base';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    IconService,
+    LoadingService,
+    LogService,
+    DetailsPanelBaseImpl,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { trigger, state, style, transition, animate } from '@angular/animations';
 import { Settings } from '../settings/settings.component';
 
diff --git a/web/gui2/src/main/webapp/app/view/tunnel/tunnel.module.ts b/web/gui2/src/main/webapp/app/view/tunnel/tunnel.module.ts
index 56e03b6..0e2018b 100644
--- a/web/gui2/src/main/webapp/app/view/tunnel/tunnel.module.ts
+++ b/web/gui2/src/main/webapp/app/view/tunnel/tunnel.module.ts
@@ -18,15 +18,13 @@
 
 import { TunnelRoutingModule } from './tunnel-routing.module';
 import { TunnelComponent } from './tunnel/tunnel.component';
-import { SvgModule } from '../../fw/svg/svg.module';
-import { WidgetModule } from '../../fw/widget/widget.module';
+import { Gui2FwLibModule } from 'gui2-fw-lib';
 
 @NgModule({
   imports: [
     CommonModule,
     TunnelRoutingModule,
-    SvgModule,
-    WidgetModule
+    Gui2FwLibModule
   ],
   declarations: [
     TunnelComponent
diff --git a/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.spec.ts b/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.spec.ts
index 3b2611e..30c5ead 100644
--- a/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.spec.ts
+++ b/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.spec.ts
@@ -18,12 +18,14 @@
 import { TunnelComponent } from './tunnel.component';
 import { ActivatedRoute, Params } from '@angular/router';
 import { of } from 'rxjs';
-import { FnService } from '../../../fw/util/fn.service';
-import { LogService } from '../../../log.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
-import { IconService } from '../../../fw/svg/icon.service';
-import { IconComponent } from '../../../fw/svg/icon/icon.component';
+import {
+    FnService,
+    IconService,
+    IconComponent,
+    LoadingService,
+    LogService,
+    WebSocketService
+} from 'gui2-fw-lib';
 import { DebugElement } from '@angular/core';
 import { By } from '@angular/platform-browser';
 
diff --git a/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.ts b/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.ts
index bbd4b67..388e69e 100644
--- a/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.ts
+++ b/web/gui2/src/main/webapp/app/view/tunnel/tunnel/tunnel.component.ts
@@ -14,11 +14,13 @@
  * limitations under the License.
  */
 import { Component, OnInit, OnDestroy } from '@angular/core';
-import { TableResponse, TableBaseImpl, SortDir } from '../../../fw/widget/table.base';
-import { FnService } from '../../../fw/util/fn.service';
-import { LoadingService } from '../../../fw/layer/loading.service';
-import { LogService } from '../../../log.service';
-import { WebSocketService } from '../../../fw/remote/websocket.service';
+import {
+    FnService,
+    LoadingService,
+    LogService,
+    WebSocketService,
+    SortDir, TableBaseImpl, TableResponse
+} from 'gui2-fw-lib';
 
 /**
  * Model of the response from WebSocket