You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by sc...@apache.org on 2018/04/30 19:13:21 UTC

[1/7] nifi-fds git commit: [NIFIREG-168] include webapp in src to facilitate local build and review process [Forced Update!]

Repository: nifi-fds
Updated Branches:
  refs/heads/gh-pages e7eda493c -> a4b7aa828 (forced update)


http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/components/fluid-design-system/fds-demo.js
----------------------------------------------------------------------
diff --git a/webapp/components/fluid-design-system/fds-demo.js b/webapp/components/fluid-design-system/fds-demo.js
new file mode 100644
index 0000000..a21dd6b
--- /dev/null
+++ b/webapp/components/fluid-design-system/fds-demo.js
@@ -0,0 +1,1066 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngCore = require('@angular/core');
+var covalentCore = require('@covalent/core');
+var ngRouter = require('@angular/router');
+var ngMaterial = require('@angular/material');
+var fdsAnimations = require('webapp/fds.animations.js');
+var fdsDialogsModule = require('@fluid-design-system/dialogs');
+var fdsSnackBarsModule = require('@fluid-design-system/snackbars');
+var FdsService = require('webapp/services/fds.service.js');
+var FdsDemoDialog = require('webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js');
+
+var NUMBER_FORMAT = function (v) {
+    return v;
+};
+var DECIMAL_FORMAT = function (v) {
+    return v.toFixed(2);
+};
+var date = new Date();
+
+/**
+ * FdsDemo constructor.
+ *
+ * @param FdsSnackBarService    The FDS snack bar service module.
+ * @param FdsService            The FDS service module.
+ * @param dialog                The angular material dialog module.
+ * @param TdDialogService       The covalent dialog service module.
+ * @param TdDataTableService    The covalent data table service module.
+ * @constructor
+ */
+function FdsDemo(FdsSnackBarService, FdsService, dialog, TdDataTableService, FdsDialogService) {
+
+    this.fdsService = FdsService;
+
+    //<editor-fold desc="Snack Bars">
+
+    this.snackBarService = FdsSnackBarService;
+
+    //</editor-fold>
+
+    //<editor-fold desc="Dialog">
+
+    this.dialog = dialog;
+
+    //</editor-fold>
+
+    //<editor-fold desc="Simple Dialogs">
+
+    this.dialogService = FdsDialogService;
+
+    //</editor-fold>
+
+    //<editor-fold desc="Expansion Panel">
+
+    this.expandCollapseExpansion1Msg = 'No expanded/collapsed detected yet';
+    this.expansion1 = false;
+    this.disabled = false;
+
+    //</editor-fold>
+
+    //<editor-fold desc="Autocomplete">
+
+    this.currentState = '';
+    this.reactiveStates = '';
+    this.tdStates = [];
+    this.tdDisabled = false;
+    this.states = [
+        {code: 'AL', name: 'Alabama'},
+        {code: 'AK', name: 'Alaska'},
+        {code: 'AZ', name: 'Arizona'},
+        {code: 'AR', name: 'Arkansas'},
+        {code: 'CA', name: 'California'},
+        {code: 'CO', name: 'Colorado'},
+        {code: 'CT', name: 'Connecticut'},
+        {code: 'DE', name: 'Delaware'},
+        {code: 'FL', name: 'Florida'},
+        {code: 'GA', name: 'Georgia'},
+        {code: 'HI', name: 'Hawaii'},
+        {code: 'ID', name: 'Idaho'},
+        {code: 'IL', name: 'Illinois'},
+        {code: 'IN', name: 'Indiana'},
+        {code: 'IA', name: 'Iowa'},
+        {code: 'KS', name: 'Kansas'},
+        {code: 'KY', name: 'Kentucky'},
+        {code: 'LA', name: 'Louisiana'},
+        {code: 'ME', name: 'Maine'},
+        {code: 'MD', name: 'Maryland'},
+        {code: 'MA', name: 'Massachusetts'},
+        {code: 'MI', name: 'Michigan'},
+        {code: 'MN', name: 'Minnesota'},
+        {code: 'MS', name: 'Mississippi'},
+        {code: 'MO', name: 'Missouri'},
+        {code: 'MT', name: 'Montana'},
+        {code: 'NE', name: 'Nebraska'},
+        {code: 'NV', name: 'Nevada'},
+        {code: 'NH', name: 'New Hampshire'},
+        {code: 'NJ', name: 'New Jersey'},
+        {code: 'NM', name: 'New Mexico'},
+        {code: 'NY', name: 'New York'},
+        {code: 'NC', name: 'North Carolina'},
+        {code: 'ND', name: 'North Dakota'},
+        {code: 'OH', name: 'Ohio'},
+        {code: 'OK', name: 'Oklahoma'},
+        {code: 'OR', name: 'Oregon'},
+        {code: 'PA', name: 'Pennsylvania'},
+        {code: 'RI', name: 'Rhode Island'},
+        {code: 'SC', name: 'South Carolina'},
+        {code: 'SD', name: 'South Dakota'},
+        {code: 'TN', name: 'Tennessee'},
+        {code: 'TX', name: 'Texas'},
+        {code: 'UT', name: 'Utah'},
+        {code: 'VT', name: 'Vermont'},
+        {code: 'VA', name: 'Virginia'},
+        {code: 'WA', name: 'Washington'},
+        {code: 'WV', name: 'West Virginia'},
+        {code: 'WI', name: 'Wisconsin'},
+        {code: 'WY', name: 'Wyoming'},
+    ];
+
+    //</editor-fold>
+
+    //<editor-fold desc="Searchable Expansion Panels">
+
+    this.dataTableService = TdDataTableService;
+
+    this.droplets = [{
+        id: '23f6cc59-0156-1000-09b4-2b0610089090',
+        name: "Decompression_Circular_Flow",
+        displayName: 'Decompressed Circular flow',
+        type: 'flow',
+        sublabel: 'A sublabel',
+        compliant: {
+            id: '25fd6vv87-3549-0001-05g6-4d4567890765',
+            label: 'Compliant',
+            type: 'certification'
+        },
+        fleet: {
+            id: '23f6cc59-3549-0001-05g6-4d4567890765',
+            label: 'Fleet',
+            type: 'certification'
+        },
+        prod: {
+            id: '52fd6vv87-3549-0001-05g6-4d4567890765',
+            label: 'Production Ready',
+            type: 'certification'
+        },
+        secure: {
+            id: '32f6cc59-3549-0001-05g6-4d4567890765',
+            label: 'Secure',
+            type: 'certification'
+        },
+        versions: [{
+            id: '23f6cc59-0156-1000-06b4-2b0810089090',
+            revision: '1',
+            dependentFlows: [{
+                id: '25fd6vv87-3549-0001-05g6-4d4567890765'
+            }],
+            created: date.setDate(date.getDate() - 1),
+            updated: new Date()
+        }, {
+            id: '25fd6vv87-3549-0001-05g6-4d4567890765',
+            revision: '2',
+            dependentFlows: [{
+                id: '23f6cc59-0156-1000-06b4-2b0810089090'
+            }],
+            created: new Date(),
+            updated: new Date()
+        }],
+        flows: [],
+        extensions: [],
+        assets: [],
+        actions: [{
+            'name': 'Delete',
+            'icon': 'fa fa-close',
+            'tooltip': 'Delete User'
+        }, {
+            'name': 'Manage',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage User'
+        }, {
+            'name': 'Action 3',
+            'icon': 'fa fa-question',
+            'tooltip': 'Whatever else we want to do...'
+        }]
+    }, {
+        id: '25fd6vv87-3249-0001-05g6-4d4767890765',
+        name: "DateConversion",
+        displayName: 'Date conversion',
+        type: 'asset',
+        sublabel: 'A sublabel',
+        compliant: {
+            id: '25fd6vv34-3549-0001-05g6-4d4567890765',
+            label: 'Compliant',
+            type: 'certification'
+        },
+        prod: {
+            id: '52vn6vv87-3549-0001-05g6-4d4567890765',
+            label: 'Production Ready',
+            type: 'certification'
+        },
+        versions: [{
+            id: '23f6ic59-0156-1000-06b4-2b0810089090',
+            revision: '1',
+            dependentFlows: [{
+                id: '23f6cc19-0156-1000-06b4-2b0810089090'
+            }],
+            created: new Date(),
+            updated: new Date()
+        }],
+        flows: [],
+        extensions: [],
+        assets: [],
+        actions: [{
+            'name': 'Delete',
+            'icon': 'fa fa-close',
+            'tooltip': 'Delete User'
+        }]
+    }, {
+        id: '52fd6vv87-3294-0001-05g6-4d4767890765',
+        name: "nifi-email-bundle",
+        displayName: 'nifi-email-bundle',
+        type: 'extension',
+        sublabel: 'A sublabel',
+        compliant: {
+            id: '33fd6vv87-3549-0001-05g6-4d4567890765',
+            label: 'Compliant',
+            test: {
+                label: 'test'
+            },
+            type: 'certification'
+        },
+        versions: [{
+            id: '23d3cc59-0156-1000-06b4-2b0810089090',
+            revision: '1',
+            dependentFlows: [{
+                id: '23f6cc89-0156-1000-06b4-2b0810089090'
+            }],
+            created: new Date(),
+            updated: new Date()
+        }],
+        flows: [],
+        extensions: [],
+        assets: [],
+        actions: [{
+            'name': 'Delete',
+            'icon': 'fa fa-close',
+            'tooltip': 'Delete User'
+        }, {
+            'name': 'Manage',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage User'
+        },]
+    }];
+
+    this.filteredDroplets = [];
+
+    this.dropletColumns = [
+        {name: 'id', label: 'ID', sortable: true},
+        {name: 'name', label: 'Name', sortable: true,},
+        {name: 'displayName', label: 'Display Name', sortable: true},
+        {name: 'sublabel', label: 'Label', sortable: true},
+        {name: 'type', label: 'Type', sortable: true}
+    ];
+    this.activeDropletColumn = this.dropletColumns[0];
+
+    this.autoCompleteDroplets = [];
+    this.dropletsSearchTerms = [];
+
+    //</editor-fold>
+
+    //<editor-fold desc="Data Tables">
+
+    this.data = [{
+        'id': 1,
+        'name': 'Frozen yogurt',
+        'type': 'Ice cream',
+        'calories': 159.0,
+        'fat': 6.0,
+        'carbs': 24.0,
+        'protein': 4.0,
+        'sodium': 87.0,
+        'calcium': 14.0,
+        'iron': 1.0,
+        'comments': 'I love froyo!',
+        'actions': [{
+            'name': 'Action 1',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage Users'
+        }, {
+            'name': 'Action 2',
+            'icon': 'fa fa-key',
+            'tooltip': 'Manage Permissions'
+        }]
+    }, {
+        'id': 2,
+        'name': 'Ice cream sandwich',
+        'type': 'Ice cream',
+        'calories': 237.0,
+        'fat': 9.0,
+        'carbs': 37.0,
+        'protein': 4.3,
+        'sodium': 129.0,
+        'calcium': 8.0,
+        'iron': 1.0,
+        'actions': [{
+            'name': 'Action 1',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage Users'
+        }, {
+            'name': 'Action 2',
+            'icon': 'fa fa-key',
+            'tooltip': 'Manage Permissions'
+        }, {
+            'name': 'Action 3',
+            'tooltip': 'Action 3'
+        }, {
+            'name': 'Action 4',
+            'disabled': true,
+            'tooltip': 'Action 4'
+        }, {
+            'name': 'Action 5',
+            'tooltip': 'Action 5'
+        }]
+    }, {
+        'id': 3,
+        'name': 'Eclair',
+        'type': 'Pastry',
+        'calories': 262.0,
+        'fat': 16.0,
+        'carbs': 24.0,
+        'protein': 6.0,
+        'sodium': 337.0,
+        'calcium': 6.0,
+        'iron': 7.0,
+        'actions': [{
+            'name': 'Action 1',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage Users'
+        }, {
+            'name': 'Action 2',
+            'icon': 'fa fa-key',
+            'tooltip': 'Manage Permissions'
+        }, {
+            'name': 'Action 3',
+            'tooltip': 'Action 3'
+        }, {
+            'name': 'Action 4',
+            'disabled': true,
+            'tooltip': 'Action 4'
+        }, {
+            'name': 'Action 5',
+            'tooltip': 'Action 5'
+        }],
+    }, {
+        'id': 4,
+        'name': 'Cupcake',
+        'type': 'Pastry',
+        'calories': 305.0,
+        'fat': 3.7,
+        'carbs': 67.0,
+        'protein': 4.3,
+        'sodium': 413.0,
+        'calcium': 3.0,
+        'iron': 8.0,
+        'actions': [{
+            'name': 'Action 1',
+            'icon': 'fa fa-user',
+            'tooltip': 'Manage Users'
+        }, {
+            'name': 'Action 2',
+            'icon': 'fa fa-key',
+            'tooltip': 'Manage Permissions'
+        }, {
+            'name': 'Action 3',
+            'tooltip': 'Action 3'
+        }, {
+            'name': 'Action 4',
+            'disabled': true,
+            'tooltip': 'Action 4'
+        }, {
+            'name': 'Action 5',
+            'tooltip': 'Action 5'
+        }],
+    }, {
+        'id': 5,
+        'name': 'Jelly bean',
+        'type': 'Candy',
+        'calories': 375.0,
+        'fat': 0.0,
+        'carbs': 94.0,
+        'protein': 0.0,
+        'sodium': 50.0,
+        'calcium': 0.0,
+        'iron': 0.0,
+    }, {
+        'id': 6,
+        'name': 'Lollipop',
+        'type': 'Candy',
+        'calories': 392.0,
+        'fat': 0.2,
+        'carbs': 98.0,
+        'protein': 0.0,
+        'sodium': 38.0,
+        'calcium': 0.0,
+        'iron': 2.0,
+    }, {
+        'id': 7,
+        'name': 'Honeycomb',
+        'type': 'Other',
+        'calories': 408.0,
+        'fat': 3.2,
+        'carbs': 87.0,
+        'protein': 6.5,
+        'sodium': 562.0,
+        'calcium': 0.0,
+        'iron': 45.0,
+    }, {
+        'id': 8,
+        'name': 'Donut',
+        'type': 'Pastry',
+        'calories': 452.0,
+        'fat': 25.0,
+        'carbs': 51.0,
+        'protein': 4.9,
+        'sodium': 326.0,
+        'calcium': 2.0,
+        'iron': 22.0,
+    }, {
+        'id': 9,
+        'name': 'KitKat',
+        'type': 'Candy',
+        'calories': 518.0,
+        'fat': 26.0,
+        'carbs': 65.0,
+        'protein': 7.0,
+        'sodium': 54.0,
+        'calcium': 12.0,
+        'iron': 6.0,
+    }, {
+        'id': 10,
+        'name': 'Chocolate',
+        'type': 'Candy',
+        'calories': 518.0,
+        'fat': 26.0,
+        'carbs': 65.0,
+        'protein': 7.0,
+        'sodium': 54.0,
+        'calcium': 12.0,
+        'iron': 6.0,
+    }, {
+        'id': 11,
+        'name': 'Chamoy',
+        'type': 'Candy',
+        'calories': 518.0,
+        'fat': 26.0,
+        'carbs': 65.0,
+        'protein': 7.0,
+        'sodium': 54.0,
+        'calcium': 12.0,
+        'iron': 6.0,
+    },];
+
+    this.filteredData = this.data;
+    this.filteredTotal = this.data.length;
+
+    this.columns = [
+        {name: 'comments', label: 'Comments', width: 10},
+        {name: 'name', label: 'Dessert (100g serving)', sortable: true, width: 10},
+        {name: 'type', label: 'Type', sortable: true, width: 10},
+        {name: 'calories', label: 'Calories', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10},
+        {name: 'fat', label: 'Fat (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true, width: 10},
+        {name: 'carbs', label: 'Carbs (g)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10},
+        {name: 'protein', label: 'Protein (g)', numeric: true, format: DECIMAL_FORMAT, sortable: true, width: 10},
+        {name: 'sodium', label: 'Sodium (mg)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10},
+        {name: 'calcium', label: 'Calcium (%)', numeric: true, format: NUMBER_FORMAT, sortable: true, width: 10},
+        {name: 'iron', label: 'Iron (%)', numeric: true, format: NUMBER_FORMAT, width: 10},
+    ];
+
+    this.allRowsSelected = false;
+    this.autoCompleteData = [];
+    this.selectedRows = [];
+
+    this.searchTerm = [];
+    this.fromRow = 1;
+    this.currentPage = 1;
+    this.pageSize = 5;
+    this.pageCount = 0;
+
+    //</editor-fold>
+
+    //<editor-fold desc="Chips $ Autocomplete">
+
+    this.readOnly = false;
+
+    this.items = [
+        'stepper',
+        'expansion-panel',
+        'markdown',
+        'highlight',
+        'loading',
+        'media',
+        'chips',
+        'http',
+        'json-formatter',
+        'pipes',
+        'need more?',
+    ];
+
+    this.itemsRequireMatch = this.items.slice(0, 6);
+
+    //</editor-fold>
+
+    //<editor-fold desc="Radios">
+
+    this.favoriteSeason = 'Autumn';
+
+    this.seasonOptions = [
+        'Winter',
+        'Spring',
+        'Summer',
+        'Autumn',
+    ];
+
+    //</editor-fold>
+
+    //<editor-fold desc="Select">
+
+    this.selectedValue = '';
+
+    this.foods = [
+        {value: 'steak-0', viewValue: 'Steak'},
+        {value: 'pizza-1', viewValue: 'Pizza'},
+        {value: 'tacos-2', viewValue: 'Tacos'},
+    ];
+
+    //</editor-fold>
+
+    //<editor-fold desc="Checkbox">
+
+    this.user = {
+        agreesToTOS: false
+    };
+
+    this.groceries = [{
+        bought: true,
+        name: 'Seitan',
+    }, {
+        bought: false,
+        name: 'Almond Meal Flour',
+    }, {
+        bought: false,
+        name: 'Organic Eggs',
+    },];
+
+    //</editor-fold>
+
+    //<editor-fold desc="Slide Toggle">
+
+    this.systems = [{
+        name: 'Lights',
+        on: false,
+        color: 'primary',
+    }, {
+        name: 'Surround Sound',
+        on: true,
+        color: 'accent',
+    }, {
+        name: 'T.V.',
+        on: true,
+        color: 'warn',
+    },];
+
+    this.house = {
+        lockHouse: false,
+    };
+
+    //</editor-fold>
+};
+
+FdsDemo.prototype = {
+    constructor: FdsDemo,
+
+    //<editor-fold desc="Autocomplete">
+
+    displayFn: function (value) {
+        return value && typeof value === 'object' ? value.name : value;
+    },
+
+    filterStates: function (val) {
+        return val ? this.states.filter(function (s) {
+            return s.name.match(new RegExp(val, 'gi'));
+        }) : this.states;
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Snack Bars">
+
+    showSuccessSnackBar: function () {
+        var snackBarRef = this.snackBarService.openCoaster({
+            title: 'Success',
+            message: 'Some help text regarding the successful event.',
+            verticalPosition: 'top',
+            horizontalPosition: 'right',
+            icon: 'fa fa-check-circle-o',
+            color: '#1EB475',
+            duration: 3000
+        });
+    },
+
+    showWarnSnackBar: function () {
+        var snackBarRef = this.snackBarService.openCoaster({
+            title: 'Warning',
+            message: 'Some help text regarding the warning.',
+            verticalPosition: 'top',
+            horizontalPosition: 'left',
+            icon: 'fa fa-exclamation-triangle',
+            color: '#E98A40',
+            duration: 3000
+        });
+    },
+
+    showErrorSnackBar: function () {
+        var snackBarRef = this.snackBarService.openCoaster({
+            title: 'Error',
+            message: 'Some help text regarding the critical error. This coaster will stay open until closed with the `x` or if another coaster is created.',
+            verticalPosition: 'bottom',
+            horizontalPosition: 'right',
+            icon: 'fa fa-times-circle-o',
+            color: '#EF6162'
+        });
+    },
+
+    showRegularSnackBar: function () {
+        var snackBarRef = this.snackBarService.openCoaster({
+            title: 'Regular',
+            message: 'Something interesting.',
+            verticalPosition: 'bottom',
+            horizontalPosition: 'left',
+            color: '#808793',
+            duration: 3000
+        });
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Dialog">
+
+    openDialog: function () {
+        this.dialog.open(FdsDemoDialog);
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Expansion Panel">
+
+    toggleExpansion1: function () {
+        if (!this.disabled) {
+            this.expansion1 = !this.expansion1;
+        }
+    },
+
+    toggleDisabled: function () {
+        this.disabled = !this.disabled;
+    },
+
+    expandExpansion1Event: function () {
+        this.expandCollapseExpansion1Msg = 'Expand event emitted.';
+    },
+
+    collapseExpansion1Event: function () {
+        this.expandCollapseExpansion1Msg = 'Collapse event emitted.';
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Simple Dialogs">
+
+    openAlert: function () {
+        this.dialogService.openAlert({
+            title: 'Alert',
+            disableClose: true,
+            message: 'This is how simple it is to create an alert with this wrapper service.',
+        });
+    },
+
+    openConfirm: function () {
+        this.dialogService.openConfirm({
+            title: 'Confirm',
+            message: 'This is how simple it is to create a confirm with this wrapper service. Do you agree?',
+            cancelButton: 'Disagree',
+            acceptButton: 'Agree',
+        });
+    },
+
+    openPrompt: function () {
+        this.dialogService.openPrompt({
+            title: 'Prompt',
+            message: 'This is how simple it is to create a prompt with this wrapper service. Prompt something.',
+            value: 'Populated value',
+            cancelButton: 'Cancel',
+            acceptButton: 'Ok',
+        });
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Searchable Expansion Panels">
+
+    isDropletFilterChecked: function (term) {
+        return (this.dropletsSearchTerms.indexOf(term) > -1);
+    },
+
+    getDropletTypeCount: function (type) {
+        return this.filteredDroplets.filter(function (droplet) {
+            return droplet.type === type;
+        }).length;
+    },
+
+    getDropletCertificationCount: function (certification) {
+        return this.filteredDroplets.filter(function (droplet) {
+            return Object.keys(droplet).find(function (key) {
+                if (key === certification && droplet[certification].type === 'certification') {
+                    return droplet;
+                }
+            });
+        }).length;
+    },
+
+    getSortBy: function () {
+        var sortByColumnLabel;
+        var arrayLength = this.dropletColumns.length;
+        for (var i = 0; i < arrayLength; i++) {
+            if (this.dropletColumns[i].active === true) {
+                sortByColumnLabel = this.dropletColumns[i].label;
+                break;
+            }
+        }
+        return sortByColumnLabel;
+    },
+
+    sortDroplets: function (column) {
+        if (column.sortable === true) {
+            // toggle column sort order
+            var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC';
+            this.filterDroplets(column.name, sortOrder);
+            //only one column can be actively sorted so we reset all to inactive
+            this.dropletColumns.forEach(function (c) {
+                c.active = false;
+            });
+            //and set this column as the actively sorted column
+            column.active = true;
+            this.activeDropletColumn = column;
+        }
+    },
+
+    toggleDropletsFilter: function (searchTerm) {
+        var applySearchTerm = true;
+        // check if the search term is already applied and remove it if true
+        if (this.dropletsSearchTerms.length > 0) {
+            var arrayLength = this.dropletsSearchTerms.length;
+            for (var i = 0; i < arrayLength; i++) {
+                var index = this.dropletsSearchTerms.indexOf(searchTerm);
+                if (index > -1) {
+                    this.dropletsSearchTerms.splice(index, 1);
+                    applySearchTerm = false;
+                }
+            }
+        }
+
+        // if we just removed the search term do NOT apply it again
+        if (applySearchTerm) {
+            this.dropletsSearchTerms.push(searchTerm);
+        }
+
+        this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder);
+    },
+
+    filterDroplets: function (sortBy, sortOrder) {
+        // if `sortOrder` is `undefined` then use 'ASC'
+        if (sortOrder === undefined) {
+            sortOrder = 'ASC'
+        }
+        // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns
+        if (sortBy === undefined) {
+            var arrayLength = this.dropletColumns.length;
+            for (var i = 0; i < arrayLength; i++) {
+                if (this.dropletColumns[i].sortable === true) {
+                    sortBy = this.dropletColumns[i].name;
+                    this.activeDropletColumn = this.dropletColumns[i];
+                    //only one column can be actively sorted so we reset all to inactive
+                    this.dropletColumns.forEach(function (c) {
+                        c.active = false;
+                    });
+                    //and set this column as the actively sorted column
+                    this.dropletColumns[i].active = true;
+                    this.dropletColumns[i].sortOrder = sortOrder;
+                    break;
+                }
+            }
+        }
+
+        var newData = this.droplets;
+
+        for (var i = 0; i < this.dropletsSearchTerms.length; i++) {
+            newData = this.filterData(newData, this.dropletsSearchTerms[i], true, this.activeDropletColumn.name);
+        }
+
+        newData = this.dataTableService.sortData(newData, sortBy, sortOrder);
+        this.filteredDroplets = newData;
+        this.getAutoCompleteDroplets();
+    },
+
+    getAutoCompleteDroplets: function () {
+        var self = this;
+        this.autoCompleteDroplets = [];
+        this.dropletColumns.forEach(function (c) {
+            self.filteredDroplets.forEach(function (r) {
+                (r[c.name.toLowerCase()]) ? self.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : '';
+            });
+        });
+    },
+
+    //</editor-fold>
+
+    filterData: function (data, searchTerm, ignoreCase) {
+        var field = '';
+        if (searchTerm.indexOf(":") > -1) {
+            field = searchTerm.split(':')[0].trim();
+            searchTerm = searchTerm.split(':')[1].trim();
+        }
+        var filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';
+
+        if (filter) {
+            data = data.filter(function (item) {
+                var res = Object.keys(item).find(function (key) {
+                    if (field.indexOf(".") > -1) {
+                        var objArray = field.split(".");
+                        var obj = item;
+                        var arrayLength = objArray.length;
+                        for (var i = 0; i < arrayLength; i++) {
+                            try {
+                                obj = obj[objArray[i]];
+                            } catch (e) {
+                                return false;
+                            }
+                        }
+                        var preItemValue = ('' + obj);
+                        var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;
+                        return itemValue.indexOf(filter) > -1;
+                    } else {
+                        if (key !== field && field !== '') {
+                            return false;
+                        }
+                        var preItemValue = ('' + item[key]);
+                        var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;
+                        return itemValue.indexOf(filter) > -1;
+                    }
+                });
+                return !(typeof res === 'undefined');
+            });
+        }
+        return data;
+    },
+
+    //<editor-fold desc="Data Tables">
+
+    sort: function (sortEvent, column) {
+        if (column.sortable) {
+            var sortBy = column.name;
+            var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC';
+            this.filter(sortBy, sortOrder);
+
+            //only one column can be actively sorted so we reset all to inactive
+            this.columns.forEach(function (c) {
+                c.active = false;
+            });
+            //and set this column as the actively sorted column
+            column.active = true;
+        }
+    },
+
+    searchRemove: function (searchTerm) {
+        //only remove the first occurrence of the search term
+        var index = this.searchTerm.indexOf(searchTerm);
+        if (index !== -1) {
+            this.searchTerm.splice(index, 1);
+        }
+        this.fromRow = 1;
+        this.currentPage = 1;
+        this.filter();
+    },
+
+    searchAdd: function (searchTerm) {
+        this.searchTerm.push(searchTerm);
+        this.fromRow = 1;
+        this.currentPage = 1;
+        this.filter();
+    },
+
+    page: function (pagingEvent) {
+        this.fromRow = pagingEvent.fromRow;
+        this.currentPage = pagingEvent.page;
+        this.pageSize = pagingEvent.pageSize;
+        this.allRowsSelected = false;
+        this.filter();
+    },
+
+    filter: function (sortBy, sortOrder) {
+        if (this.allRowsSelected) {
+            this.toggleSelectAll();
+        }
+        this.deselectAll();
+        var newData = this.data;
+
+        for (var i = 0; i < this.searchTerm.length; i++) {
+            newData = this.filterData(newData, this.searchTerm[i], true);
+        }
+        this.filteredTotal = newData.length;
+        newData = this.dataTableService.sortData(newData, sortBy, sortOrder);
+        this.pageCount = newData.length;
+        newData = this.dataTableService.pageData(newData, this.fromRow, this.currentPage * this.pageSize);
+        this.filteredData = newData;
+        this.getAutoCompleteData();
+    },
+
+    toggleSelect: function (row) {
+        if (this.allFilteredRowsSelected()) {
+            this.allRowsSelected = true;
+        } else {
+            this.allRowsSelected = false;
+        }
+    },
+
+    toggleSelectAll: function () {
+        if (this.allRowsSelected) {
+            this.selectAll();
+        } else {
+            this.deselectAll();
+        }
+    },
+
+    selectAll: function () {
+        this.filteredData.forEach(function (c) {
+            c.checked = true;
+        });
+    },
+
+    deselectAll: function () {
+        this.filteredData.forEach(function (c) {
+            c.checked = false;
+        });
+    },
+
+    allFilteredRowsSelected: function () {
+        var allFilteredRowsSelected = true;
+        this.filteredData.forEach(function (c) {
+            if (c.checked === undefined || c.checked === false) {
+                allFilteredRowsSelected = false;
+            }
+        });
+
+        return allFilteredRowsSelected;
+    },
+
+    areTooltipsOn: function () {
+        return this.columns[0].hasOwnProperty('tooltip');
+    },
+
+    toggleTooltips: function () {
+        if (this.columns[0].tooltip) {
+            this.columns.forEach(function (c) {
+                delete c.tooltip;
+            });
+        } else {
+            this.columns.forEach(function (c) {
+                c.tooltip = 'This is ' + c.label + '!';
+            });
+        }
+    },
+
+    openDataTablePrompt: function (row, name) {
+        this.dialogService.openPrompt({
+            message: 'Enter comment?',
+            value: row[name],
+        }).afterClosed().subscribe(function (value) {
+            if (value !== undefined) {
+                row[name] = value;
+            }
+        })
+    },
+
+    getAutoCompleteData: function () {
+        var self = this;
+        this.autoCompleteData = [];
+        this.columns.forEach(function (c) {
+            self.filteredData.forEach(function (r) {
+                (r[c.name.toLowerCase()]) ? self.autoCompleteData.push(r[c.name.toLowerCase()].toString()) : '';
+            });
+        });
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Chips $ Autocomplete">
+
+    toggleReadOnly: function () {
+        this.readOnly = !this.readOnly;
+    },
+
+    //</editor-fold>
+
+    //<editor-fold desc="Life Cycle Listeners">
+
+    /**
+     * Initialize the component
+     */
+    ngOnInit: function () {
+        this.filter();
+        this.filterDroplets();
+    },
+
+    /**
+     * Respond after Angular checks the component's views and child views
+     */
+    ngAfterViewChecked: function () {
+        this.fdsService.inProgress = false;
+    }
+
+    //</editor-fold>
+};
+
+FdsDemo.annotations = [
+    new ngCore.Component({
+        template: require('./fds-demo.html!text'),
+        animations: [fdsAnimations.slideInLeftAnimation],
+        host: {
+            '[@routeAnimation]': 'routeAnimation'
+        }
+    })
+];
+
+FdsDemo.parameters = [
+    fdsSnackBarsModule.FdsSnackBarService,
+    FdsService,
+    ngMaterial.MatDialog,
+    covalentCore.TdDataTableService,
+    fdsDialogsModule.FdsDialogService
+];
+
+module.exports = FdsDemo;

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds-bootstrap.js
----------------------------------------------------------------------
diff --git a/webapp/fds-bootstrap.js b/webapp/fds-bootstrap.js
new file mode 100644
index 0000000..d853f67
--- /dev/null
+++ b/webapp/fds-bootstrap.js
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+require('core-js');
+require('zone.js');
+require('hammerjs');
+var $ = require('jquery');
+var FdsModule = require('webapp/fds.module.js');
+var ngPlatformBrowserDynamic = require('@angular/platform-browser-dynamic');
+var ngCore = require('@angular/core');
+
+// Comment out this line when developing to assert for unidirectional data flow
+ngCore.enableProdMode();
+
+// Get the locale id from the global
+var locale = navigator.language;
+
+var providers = [];
+
+// No locale or U.S. English: no translation providers so go ahead and bootstrap the app
+if (!locale || locale === 'en-US') {
+    ngPlatformBrowserDynamic.platformBrowserDynamic().bootstrapModule(FdsModule, {providers: providers});
+} else { //load the translation providers and bootstrap the module
+    var translationFile = './webapp/messages.' + locale + '.xlf';
+
+    $.ajax({
+        url: translationFile
+    }).done(function (translations) {
+        // add providers if translation file for locale is loaded
+        if (translations) {
+            providers.push({provide: ngCore.TRANSLATIONS, useValue: translations});
+            providers.push({provide: ngCore.TRANSLATIONS_FORMAT, useValue: 'xlf'});
+            providers.push({provide: ngCore.LOCALE_ID, useValue: locale});
+        }
+        ngPlatformBrowserDynamic.platformBrowserDynamic().bootstrapModule(FdsModule, {providers: providers});
+    }).fail(function () {
+        ngPlatformBrowserDynamic.platformBrowserDynamic().bootstrapModule(FdsModule, {providers: providers});
+    });
+}

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds.animations.js
----------------------------------------------------------------------
diff --git a/webapp/fds.animations.js b/webapp/fds.animations.js
new file mode 100644
index 0000000..5f7d0cb
--- /dev/null
+++ b/webapp/fds.animations.js
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngAnimate = require('@angular/animations');
+
+/**
+ * NfAnimations constructor.
+ *
+ * @constructor
+ */
+function NfAnimations() {
+};
+
+NfAnimations.prototype = {
+    constructor: NfAnimations,
+
+    /**
+     * Fade animation
+     */
+    fadeAnimation: ngAnimate.trigger('routeAnimation', [
+        ngAnimate.state('*',
+            ngAnimate.style({
+                opacity: 1
+            })
+        ),
+        ngAnimate.transition(':enter', [
+            ngAnimate.style({
+                opacity: 0
+            }),
+            ngAnimate.animate('0.5s ease-in')
+        ]),
+        ngAnimate.transition(':leave', [
+            ngAnimate.animate('0.5s ease-out', ngAnimate.style({
+                opacity: 0
+            }))
+        ])
+    ]),
+
+    /**
+     * Slide in from the left animation
+     */
+    slideInLeftAnimation: ngAnimate.trigger('routeAnimation', [
+        ngAnimate.state('*',
+            ngAnimate.style({
+                opacity: 1,
+                transform: 'translateX(0)'
+            })
+        ),
+        ngAnimate.transition(':enter', [
+            ngAnimate.style({
+                opacity: 0,
+                transform: 'translateX(-100%)'
+            }),
+            ngAnimate.animate('0.5s ease-in')
+        ]),
+        ngAnimate.transition(':leave', [
+            ngAnimate.animate('0.5s ease-out', ngAnimate.style({
+                opacity: 0,
+                transform: 'translateX(100%)'
+            }))
+        ])
+    ]),
+
+    /**
+     * Slide in from the top animation
+     */
+    slideInDownAnimation: ngAnimate.trigger('routeAnimation', [
+        ngAnimate.state('*',
+            ngAnimate.style({
+                opacity: 1,
+                transform: 'translateY(0)'
+            })
+        ),
+        ngAnimate.transition(':enter', [
+            ngAnimate.style({
+                opacity: 0,
+                transform: 'translateY(-100%)'
+            }),
+            ngAnimate.animate('0.5s ease-in')
+        ]),
+        ngAnimate.transition(':leave', [
+            ngAnimate.animate('0.5s ease-out', ngAnimate.style({
+                opacity: 0,
+                transform: 'translateY(100%)'
+            }))
+        ])
+    ]),
+
+    /**
+     * Fly in/out animation
+     */
+    flyInOutAnimation: ngAnimate.trigger('flyInOut', [
+        ngAnimate.state('in',
+            ngAnimate.style({transform: 'translateX(0)'})
+        ),
+        ngAnimate.transition('void => *', [
+            ngAnimate.style({transform: 'translateX(100%)'}),
+            ngAnimate.animate('0.4s 0.1s ease-in')
+        ]),
+        ngAnimate.transition('* => void', ngAnimate.animate('0.2s ease-out', ngAnimate.style({transform: 'translateX(-100%)'})))
+    ]),
+
+    /**
+     * Fly in/out animation
+     */
+    fadeInOutAnimation: ngAnimate.trigger('fadeInOut', [
+        ngAnimate.state('in',
+            ngAnimate.style({opacity: 1})
+        ),
+        ngAnimate.transition('void => *', [
+            ngAnimate.style({opacity: 0}),
+            ngAnimate.animate('0.5s 0.1s ease-in')
+        ]),
+        ngAnimate.transition('* => void', ngAnimate.animate('0.5s ease-out', ngAnimate.style({opacity: 0})))
+    ])
+
+};
+
+module.exports = new NfAnimations();

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds.html
----------------------------------------------------------------------
diff --git a/webapp/fds.html b/webapp/fds.html
new file mode 100644
index 0000000..98a3f58
--- /dev/null
+++ b/webapp/fds.html
@@ -0,0 +1,34 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<mat-progress-spinner id="loading-spinner" *ngIf="fdsService.inProgress" mode="indeterminate"></mat-progress-spinner>
+<mat-sidenav-container>
+    <mat-sidenav #sidenav mode="over" align="end" opened="false" disableClose="true">
+        <router-outlet name="sidenav"></router-outlet>
+    </mat-sidenav>
+    <div id="fds-app-container">
+        <mat-toolbar id="fds-toolbar">
+            <!-- <img id="fds-logo" src="fds/images/fds-logo-web-app.svg"> -->
+            <div *ngIf="fdsService.perspective !== 'login' && fdsService.perspective !== 'not-found'" fxFlex="1 1 auto" class="pad-left-xl" [@flyInOut]="fdsService.breadCrumbState">
+                <span class="pointer">{{fdsService.title}}</span>
+            </div>
+        </mat-toolbar>
+        <div id="fds-perspectives-container">
+            <router-outlet></router-outlet>
+        </div>
+    </div>
+</mat-sidenav-container>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds.js
----------------------------------------------------------------------
diff --git a/webapp/fds.js b/webapp/fds.js
new file mode 100644
index 0000000..175f9d7
--- /dev/null
+++ b/webapp/fds.js
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngCore = require('@angular/core');
+var ngCommonHttp = require('@angular/common/http');
+var FdsService = require('webapp/services/fds.service.js');
+var fdsAnimations = require('webapp/fds.animations.js');
+var ngRouter = require('@angular/router');
+var MILLIS_PER_SECOND = 1000;
+
+/**
+ * Fds constructor.
+ *
+ * @param fdsService            The fds service.
+ * @param changeDetectorRef     The change detector ref.
+ * @constructor
+ */
+function Fds(fdsService, changeDetectorRef) {
+    this.fdsService = fdsService;
+    this.cd = changeDetectorRef;
+};
+
+Fds.prototype = {
+    constructor: Fds,
+
+    /**
+     * Initialize the component
+     */
+    ngOnInit: function () {
+        var self = this;
+        this.fdsService.sidenav = this.sidenav; //ngCore.ViewChild
+    },
+
+    /**
+     * Since the child views are updating the fdsService values that are used to display
+     * the breadcrumbs in this component's view we need to manually detect changes at the correct
+     * point in the lifecycle.
+     */
+    ngAfterViewChecked: function () {
+        this.cd.detectChanges();
+    }
+};
+
+Fds.annotations = [
+    new ngCore.Component({
+        selector: 'fds-app',
+        template: require('./fds.html!text'),
+        queries: {
+            sidenav: new ngCore.ViewChild('sidenav')
+        },
+        animations: [fdsAnimations.flyInOutAnimation]
+    })
+];
+
+Fds.parameters = [
+    FdsService,
+    ngCore.ChangeDetectorRef
+];
+
+module.exports = Fds;

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds.module.js
----------------------------------------------------------------------
diff --git a/webapp/fds.module.js b/webapp/fds.module.js
new file mode 100644
index 0000000..bc8e80b
--- /dev/null
+++ b/webapp/fds.module.js
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngCore = require('@angular/core');
+var FdsRoutes = require('webapp/fds.routes.js');
+var fdsCore = require('@fluid-design-system/core');
+var Fds = require('webapp/fds.js');
+var FdsDemo = require('webapp/components/fluid-design-system/fds-demo.js');
+var FdsDemoDialog = require('webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js');
+var FdsService = require('webapp/services/fds.service.js');
+var ngCommonHttp = require('@angular/common/http');
+
+function FdsModule() {
+};
+
+FdsModule.prototype = {
+    constructor: FdsModule
+};
+
+FdsModule.annotations = [
+    new ngCore.NgModule({
+        imports: [
+            fdsCore,
+            FdsRoutes
+        ],
+        declarations: [
+            Fds,
+            FdsDemo,
+            FdsDemoDialog
+        ],
+        entryComponents: [
+            FdsDemoDialog
+        ],
+        providers: [
+            FdsService
+        ],
+        bootstrap: [Fds]
+    })
+];
+
+module.exports = FdsModule;

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/fds.routes.js
----------------------------------------------------------------------
diff --git a/webapp/fds.routes.js b/webapp/fds.routes.js
new file mode 100644
index 0000000..fa7b10e
--- /dev/null
+++ b/webapp/fds.routes.js
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngRouter = require('@angular/router');
+var FdsDemo = require('webapp/components/fluid-design-system/fds-demo.js');
+
+var FdsRoutes = new ngRouter.RouterModule.forRoot([{
+    path: '',
+    component: FdsDemo
+}]);
+
+module.exports = FdsRoutes;

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/services/fds.service.js
----------------------------------------------------------------------
diff --git a/webapp/services/fds.service.js b/webapp/services/fds.service.js
new file mode 100644
index 0000000..26e6686
--- /dev/null
+++ b/webapp/services/fds.service.js
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var covalentCore = require('@covalent/core');
+var fdsDialogsModule = require('@fluid-design-system/dialogs');
+var fdsSnackBarsModule = require('@fluid-design-system/snackbars');
+
+/**
+ * FdsService constructor.
+ *
+ * @param tdDataTableService    The covalent data table service module.
+ * @param fdsDialogService      The FDS dialog service.
+ * @param fdsSnackBarService    The FDS snack bar service module.
+ * @constructor
+ */
+function FdsService(tdDataTableService, fdsDialogService, fdsSnackBarService) {
+    // Services
+    this.dialogService = fdsDialogService;
+    this.snackBarService = fdsSnackBarService;
+    this.dataTableService = tdDataTableService;
+
+    // General
+    this.title = "Apache NiFi Fluid Design System Demo";
+    this.inProgress = true;
+    this.perspective = '';
+};
+
+FdsService.prototype = {
+    constructor: FdsService,
+};
+
+FdsService.parameters = [
+    covalentCore.TdDataTableService,
+    fdsDialogsModule.FdsDialogService,
+    fdsSnackBarsModule.FdsSnackBarService
+];
+
+module.exports = FdsService;

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/systemjs-angular-loader.js
----------------------------------------------------------------------
diff --git a/webapp/systemjs-angular-loader.js b/webapp/systemjs-angular-loader.js
new file mode 100644
index 0000000..8e33bb5
--- /dev/null
+++ b/webapp/systemjs-angular-loader.js
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var templateUrlRegex = /templateUrl\s*:(\s*['"`](.*?)['"`]\s*)/gm;
+var stylesRegex = /styleUrls *:(\s*\[[^\]]*?\])/g;
+var stringRegex = /(['`"])((?:[^\\]\\\1|.)*?)\1/g;
+
+module.exports.translate = function (load) {
+    if (load.source.indexOf('moduleId') != -1) return load;
+
+    var url = document.createElement('a');
+    url.href = load.address;
+
+    var basePathParts = url.pathname.split('/');
+
+    basePathParts.pop();
+    var basePath = basePathParts.join('/');
+
+    var baseHref = document.createElement('a');
+    baseHref.href = this.baseURL;
+    baseHref = baseHref.pathname;
+
+    if (!baseHref.startsWith('/base/')) { // it is not karma
+        basePath = basePath.replace(baseHref, '');
+    }
+
+    load.source = load.source
+        .replace(templateUrlRegex, function (match, quote, url) {
+            var resolvedUrl = url;
+
+            if (url.startsWith('.')) {
+                resolvedUrl = basePath + url.substr(1);
+            }
+
+            return 'templateUrl: "' + resolvedUrl + '"';
+        })
+        .replace(stylesRegex, function (match, relativeUrls) {
+            var urls = [];
+
+            while ((match = stringRegex.exec(relativeUrls)) !== null) {
+                if (match[2].startsWith('.')) {
+                    urls.push('"' + basePath + match[2].substr(1) + '"');
+                } else {
+                    urls.push('"' + match[2] + '"');
+                }
+            }
+
+            return "styleUrls: [" + urls.join(', ') + "]";
+        });
+
+    return load;
+};

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/systemjs.config.extras.js
----------------------------------------------------------------------
diff --git a/webapp/systemjs.config.extras.js b/webapp/systemjs.config.extras.js
new file mode 100644
index 0000000..e2a256a
--- /dev/null
+++ b/webapp/systemjs.config.extras.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Add barrels and stuff
+ */
+(function (global) {
+    System.config({
+        packages: {
+            // add packages here
+        }
+    });
+})(this);

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/systemjs.config.js
----------------------------------------------------------------------
diff --git a/webapp/systemjs.config.js b/webapp/systemjs.config.js
new file mode 100644
index 0000000..24857de
--- /dev/null
+++ b/webapp/systemjs.config.js
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (global) {
+    System.config({
+        paths: {
+            // paths serve as alias
+            'npm:': 'node_modules/'
+        },
+        // map tells the System loader where to look for things
+        map: {
+            'text': 'npm:systemjs-plugin-text/text.js',
+            'app': './webapp',
+
+            // jquery
+            'jquery': 'npm:jquery/dist/jquery.min.js',
+
+            // Angular
+            '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
+            '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
+            '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
+            '@angular/common/http/testing': 'npm:@angular/common/bundles/common-http-testing.umd.js',
+            '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
+            '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
+            '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
+            '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
+            '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
+            '@angular/flex-layout': 'npm:@angular/flex-layout/bundles/flex-layout.umd.js',
+            '@angular/flex-layout/core': 'npm:@angular/flex-layout/bundles/flex-layout-core.umd.js',
+            '@angular/flex-layout/extended': 'npm:@angular/flex-layout/bundles/flex-layout-extended.umd.js',
+            '@angular/flex-layout/flex': 'npm:@angular/flex-layout/bundles/flex-layout-flex.umd.js',
+            '@angular/material': 'npm:@angular/material/bundles/material.umd.js',
+            '@angular/material/core': 'npm:@angular/material/bundles/material-core.umd.js',
+            '@angular/material/card': 'npm:@angular/material/bundles/material-card.umd.js',
+            '@angular/material/divider': 'npm:@angular/material/bundles/material-divider.umd.js',
+            '@angular/material/progress-bar': 'npm:@angular/material/bundles/material-progress-bar.umd.js',
+            '@angular/material/progress-spinner': 'npm:@angular/material/bundles/material-progress-spinner.umd.js',
+            '@angular/material/chips': 'npm:@angular/material/bundles/material-chips.umd.js',
+            '@angular/material/input': 'npm:@angular/material/bundles/material-input.umd.js',
+            '@angular/material/icon': 'npm:@angular/material/bundles/material-icon.umd.js',
+            '@angular/material/button': 'npm:@angular/material/bundles/material-button.umd.js',
+            '@angular/material/checkbox': 'npm:@angular/material/bundles/material-checkbox.umd.js',
+            '@angular/material/tooltip': 'npm:@angular/material/bundles/material-tooltip.umd.js',
+            '@angular/material/dialog': 'npm:@angular/material/bundles/material-dialog.umd.js',
+            '@angular/material/sidenav': 'npm:@angular/material/bundles/material-sidenav.umd.js',
+            '@angular/material/menu': 'npm:@angular/material/bundles/material-menu.umd.js',
+            '@angular/material/form-field': 'npm:@angular/material/bundles/material-form-field.umd.js',
+            '@angular/material/toolbar': 'npm:@angular/material/bundles/material-toolbar.umd.js',
+            '@angular/material/autocomplete': 'npm:@angular/material/bundles/material-autocomplete.umd.js',
+            '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
+            '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',
+            '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',
+            '@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js',
+            '@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js',
+            '@angular/cdk/collections': 'npm:@angular/cdk/bundles/cdk-collections.umd.js',
+            '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',
+            '@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js',
+            '@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js',
+            '@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js',
+            '@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js',
+            '@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js',
+            '@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js',
+            '@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js',
+            '@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js',
+            '@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js',
+            '@angular/cdk/stepper': 'npm:@angular/cdk/bundles/cdk-stepper.umd.js',
+            '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
+            '@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
+            '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
+
+            // needed to support gestures for angular material
+            'hammerjs': 'npm:hammerjs/hammer.min.js',
+
+            // Covalent
+            '@covalent/core': 'npm:@covalent/core/bundles/covalent-core.umd.min.js',
+            '@covalent/core/common': 'npm:@covalent/core/bundles/covalent-core-common.umd.min.js',
+
+            // other libraries
+            'rxjs': 'npm:rxjs',
+            'zone.js': 'npm:zone.js/dist/zone.js',
+            'core-js': 'npm:core-js/client/shim.min.js',
+            'superagent': 'npm:superagent/superagent.js',
+            'querystring': 'npm:querystring',
+            'tslib': 'npm:tslib/tslib.js',
+
+            // Fluid Design System
+            '@fluid-design-system/core': 'platform/core/fluid-design-system.module.js',
+            '@fluid-design-system/dialogs': 'platform/core/dialogs/fds-dialogs.module.js',
+            '@fluid-design-system/dialog-component': 'platform/core/dialogs/fds-dialog.component.js',
+            '@fluid-design-system/dialog-service': 'platform/core/dialogs/services/dialog.service.js',
+            '@fluid-design-system/confirm-dialog-component': 'platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
+            '@fluid-design-system/snackbars': 'platform/core/snackbars/fds-snackbars.module.js',
+            '@fluid-design-system/snackbar-component': 'platform/core/snackbars/fds-snackbar.component.js',
+            '@fluid-design-system/snackbar-service': 'platform/core/snackbars/services/snackbar.service.js',
+            '@fluid-design-system/coaster-component': 'platform/core/snackbars/coaster/coaster.component.js',
+            '@fluid-design-system/common/storage-service': 'platform/core/common/services/fds-storage.service.js'
+        },
+        // packages tells the System loader how to load when no filename and/or no extension
+        packages: {
+            app: {
+                defaultExtension: 'js',
+                meta: {
+                    './*.js': {
+                        loader: 'webapp/systemjs-angular-loader.js'
+                    }
+                }
+            },
+            'webapp/systemjs-angular-loader.js': {
+                loader: false
+            },
+            'rxjs': {
+                defaultExtension: 'js'
+            },
+            'querystring': {
+                main: './index.js',
+                defaultExtension: 'js'
+            },
+            'moment': {
+                main: './moment.js',
+                defaultExtension: 'js'
+            },
+            'angular2-moment': {
+                main: './index.js',
+                defaultExtension: 'js'
+            }
+        }
+    });
+})(this);

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/theming/_helperClasses.scss
----------------------------------------------------------------------
diff --git a/webapp/theming/_helperClasses.scss b/webapp/theming/_helperClasses.scss
new file mode 100644
index 0000000..6918db4
--- /dev/null
+++ b/webapp/theming/_helperClasses.scss
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the 'License'); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+.fa-rotate-45 {
+    -webkit-transform: rotate(45deg);
+    -moz-transform: rotate(45deg);
+    -ms-transform: rotate(45deg);
+    -o-transform: rotate(45deg);
+    transform: rotate(45deg);
+}
+
+.capitalize {
+    text-transform: capitalize;
+}
+
+.uppercase {
+    text-transform: uppercase;
+}
+
+.ellipsis {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: block !important;
+}
+
+.info {
+    color: $blue8;
+}
+
+.authorized {
+    color: $red2;
+}
+
+.suspended {
+    color: $green3;
+}
+
+.nonconfigurable {
+    background: $grey9;
+}
+
+.selected-nonconfigurable {
+    background: repeating-linear-gradient(-45deg, $grey5, $grey5 10px, #fff 10px, #fff 20px) !important;
+}
+
+.fds-button-container {
+    position: absolute;
+    bottom: 0px;
+    height: 64px;
+    left: 0px;
+    right: 0px;
+    border-top: 1px solid $grey4;
+}
+
+.fds-button-container .done-button {
+    float: right;
+    margin-right: 15px;
+    margin-top: 15px;
+}
+
+.td-expansion-content {
+    background: $grey6;
+}

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/theming/_structureElements.scss
----------------------------------------------------------------------
diff --git a/webapp/theming/_structureElements.scss b/webapp/theming/_structureElements.scss
new file mode 100644
index 0000000..b84c60a
--- /dev/null
+++ b/webapp/theming/_structureElements.scss
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+body {
+  background: $grey12;
+  background-size: 40%;
+}
+
+#fds-app-container {
+  margin: 0;
+  width: 100%;
+  height: 100%;
+}
+
+#fds-toolbar {
+  min-width: 1045px;
+  background-color: #FFFFFF;
+  position: absolute;
+  z-index: 1000;
+  background: $grey11;
+}
+
+#fds-toolbar .mat-icon-button {
+  color: $grey5;
+  font-size: 20px;
+  margin: 0;
+}
+
+#fds-toolbar .mat-select-value-text, #fds-toolbar .mat-select-arrow {
+  color: white;
+}
+
+#fds-toolbar span, #fds-toolbar .link {
+  color: $grey5;
+  font-weight: lighter;
+}
+
+#fds-perspectives-container {
+  position: absolute;
+  top: 64px;
+  left: 0px;
+  right: 0px;
+  bottom: 0px;
+  min-height: 370px;
+  min-width: 1045px;
+  overflow: auto;
+  background: $grey12;
+  background-size: 40%;
+}
+
+#loading-spinner {
+  position: absolute;
+  top: calc(50% - 50px);
+  left: calc(50% - 50px);
+  z-index: 2;
+}
+
+mat-sidenav {
+  width: 40%;
+  min-width: 418px;
+}
+
+.sidenav-content {
+  position: absolute;
+  bottom: 60px;
+  top: 80px;
+  right: 0px;
+  left: 0px;
+  overflow: auto;
+}

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/theming/fds-demo.scss
----------------------------------------------------------------------
diff --git a/webapp/theming/fds-demo.scss b/webapp/theming/fds-demo.scss
new file mode 100644
index 0000000..c7730fa
--- /dev/null
+++ b/webapp/theming/fds-demo.scss
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the 'License'); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an 'AS IS' BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* Welcome to Compass.
+ * In this file you should centralize your imports. After compilation simply import this file using the following HTML or equivalent:
+ * <link href='webapp/css/fds-demo.min.css' media='screen, projection' rel='stylesheet' type='text/css' /> */
+
+@import '../../platform/core/common/styles/globalVars';
+@import '../../platform/core/theming/all-theme';
+@import 'structureElements';
+@import 'helperClasses';
+
+//Change these
+$primaryColor: $rose1;
+$primaryColorHover: $rose2;
+$accentColor: $blue7;
+$accentColorHover: $grey4;
+
+// Include the base styles for Angular Material core. We include this here so that you only
+// have to load a single css file for Angular Material in your app.
+@include mat-core;
+
+// Define the palettes
+$fds-base-palette: (50: #89df79, 100: $primaryColorHover, 200: #65d550, 300: #53d03b, 400: #46c32f, 500: $primaryColor, 600: $primaryColor, 700: #89df79, 800: #29701b, 900: #215c16, A100: #9be48d, A200: #ade9a2, A400: #bfedb6, A700: #1a4711, contrast: (50: $black-87-opacity, 100: $black-87-opacity, 200: $black-87-opacity, 300: white, 400: white, 500: $white-87-opacity, 600: $white-87-opacity, 700: $white-87-opacity, 800: $white-87-opacity, 900: $white-87-opacity, A100: $black-87-opacity, A200: white, A400: white, A700: $white-87-opacity));
+$fds-accent-palette: (50: #89df79, 100: $accentColorHover, 200: #65d550, 300: #53d03b, 400: #46c32f, 500: $accentColor, 600: $accentColor, 700: #89df79, 800: #29701b, 900: #215c16, A100: #9be48d, A200: #ade9a2, A400: #bfedb6, A700: #1a4711, contrast: (50: $black-87-opacity, 100: $black-87-opacity, 200: $black-87-opacity, 300: white, 400: white, 500: $white-87-opacity, 600: $white-87-opacity, 700: $white-87-opacity, 800: $white-87-opacity, 900: $white-87-opacity, A100: $black-87-opacity, A200: white, A400: white, A700: $white-87-opacity));
+$fds-warn-palette: (50: #81410f, 100: #D14A50, 200: #af5814, 300: #c66317, 400: #dd6f19, 500: $warnColor, 600: $warnColor, 700: #eea66e, 800: #f1b485, 900: #f4c29b, A100: #ec9857, A200: #89df79, A400: #89df79, A700: #f6d0b2, contrast: (50: $black-87-opacity, 100: $black-87-opacity, 200: $black-87-opacity, 300: white, 400: white, 500: $white-87-opacity, 600: $white-87-opacity, 700: $white-87-opacity, 800: $white-87-opacity, 900: $white-87-opacity, A100: $black-87-opacity, A200: white, A400: white, A700: $white-87-opacity));
+$fds-primary: mat-palette($fds-base-palette, 500, 100, 500);
+$fds-accent: mat-palette($fds-accent-palette, 500, 100, 500);
+$fds-warn: mat-palette($fds-warn-palette, 500, 100, 500);
+
+// Define the theme (Optionally specify a default, lighter, and darker hue.)
+$fds-theme: mat-light-theme($fds-primary, $fds-accent, $fds-warn);
+
+// FDS theme mixin
+@include fds-theme($fds-theme);


[2/7] nifi-fds git commit: [NIFIREG-168] include webapp in src to facilitate local build and review process

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/components/fluid-design-system/fds-demo.html
----------------------------------------------------------------------
diff --git a/webapp/components/fluid-design-system/fds-demo.html b/webapp/components/fluid-design-system/fds-demo.html
new file mode 100644
index 0000000..621acc6
--- /dev/null
+++ b/webapp/components/fluid-design-system/fds-demo.html
@@ -0,0 +1,2995 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<mat-sidenav-container>
+    <mat-sidenav #sidenav mode="over" align="end" opened="false">
+        <div fxLayout="column" fxLayoutAlign="space-between center">
+            <p>You can also open a dialog from a side nav.</p>
+            <button mat-raised-button color="fds-primary" (click)="openDialog()">Show simple dialog</button>
+        </div>
+    </mat-sidenav>
+    <div id="fds-demo">
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Apache NiFi Fluid Design System</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content class="pad-top-sm">
+                <p>With the Apache NiFi Fluid Design System module, we get an atomic, reusable component platform for Apache NiFi and Apache NiFi Registry to consume, while collaborating in an open source model. This module packages the <a class="link" href="https://material.angular.io/components" target="_blank">Angular Material</a> module as well as the <a class="link" href="https://teradata.github.io/covalent/#/components" target="_blank">Teradata Covalent</a> module. These modules have been themed to match the FDS color palette.</p>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Setup</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <p>Import the FDS Core NgModule into your AppModule</p>
+                <p>HTML:</p>
+                <pre lang="javascript">
+        <![CDATA[
+        var ngCore = require('@angular/core');
+        var fdsCore = require('fluid-design-system/core');
+        // other imports
+          ...
+        new ngCore.NgModule({
+        imports: [
+            fdsCore,
+            // (optional) Additional imports
+          ],
+          ...
+        })
+        ]]>
+    </pre>
+                <p>The core FDS styles also need to be included in your `index.html` like:</p>
+                <p>HTML:</p>
+                <pre lang="html">
+        <![CDATA[
+        <link href="../node_modules/fluid-design-system/core/common/styles/css/fluid-design-system.css" rel="stylesheet">
+        ]]>
+    </pre>
+                <p>Or, if you are using the Angular CLI you will need to add a new entry to the "styles" list in .angular-cli.json.</p>
+                <p>JSON:</p>
+                <pre lang="json">
+        <![CDATA[
+        "styles": [
+            "../node_modules/fluid-design-system/core/common/styles/fluid-design-system.scss"
+        ]
+        ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Typography</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <p class="mat-body-1">Angular Material provides <a class="link" href="https://material.io/guidelines/style/typography.html" target="_blank">typography</a> CSS classes you can use to create visual consistency across your application.</p>
+                <p class="mat-body-1">
+                    <strong>Note:</strong>
+                    <span>Base font size is 10px for easy rem units (1.2rem = 12px). Body font size is 14px. sp = scalable pixels.</span>
+                </p>
+                <h3 class="mat-title">Header Styles</h3>
+                <mat-divider class="push-top push-bottom"></mat-divider>
+                <p class="mat-body-1">To preserve semantic structures, you can optionally style the <code>&lt;h1&gt;</code> - <code>&lt;h6&gt;</code> heading tags with the styling classes shown below:</p>
+                <p>CSS:</p>
+                <div layout-align="center end">
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-display-4</code>
+                        <span class="mat-display-4">Light 112px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-display-3</code>
+                        <span class="mat-display-3">Regular 56px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-display-2</code>
+                        <span class="mat-display-2">Regular 45px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-display-1</code>
+                        <span class="mat-display-1">Regular 34px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-headline</code>
+                        <span class="mat-headline">Regular 24px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-title</code>
+                        <span class="mat-title">Medium 20px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.md-subhead</code>
+                        <span class="md-subhead">Regular 16px</span>
+                    </div>
+                </div>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- Large Heading -->
+        <h1 class="mat-display-4">Roboto is the standard typeface on Android.</h1>
+        <h2 class="mat-display-3">Roboto and Noto are the standard typefaces on Android and Chrome.</h2>
+        <h3 class="mat-display-2">Noto is the standard typeface for all languages on Chrome and Android for all languages not covered by Roboto.</h3>
+        <!-- Medium Heading -->
+        <h1 class="mat-display-1">Roboto is the standard typeface on Android.</h1>
+        <h2 class="mat-headline">Roboto and Noto are the standard typefaces on Android and Chrome.</h2>
+        <h3 class="md-subhead">Noto is the standard typeface for all languages on Chrome and Android for all languages not covered by Roboto.</h3>
+    ]]>
+    </pre>
+                <h3 class="mat-title">Body Copy</h3>
+                <mat-divider class="push-top push-bottom"></mat-divider>
+                <p>CSS:</p>
+                <div class="mat-body-1" layout-align="center end">
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-body-1</code>
+                        <span class="mat-body-1">Regular 14px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-body-2</code>
+                        <span class="mat-body-2">Medium 14px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-button</code>
+                        <span class="mat-button mat-raised">Medium 14px</span>
+                    </div>
+                    <div layout="row" layout-align="start center">
+                        <code flex="15">.mat-caption</code>
+                        <span class="mat-caption">Regular 12px</span>
+                    </div>
+                </div>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- body copy -->
+        <p class="mat-body-1">Roboto is the standard typeface on Android.</p>
+        <p class="mat-body-2">Roboto and Noto are the standard typefaces on Android and Chrome.</p>
+        <p class="mat-button">Roboto and Noto are the standard typefaces on Android and Chrome.</p>
+        <p class="mat-caption">Noto is the standard typeface for all languages on Chrome and Android for all languages not covered by Roboto.</p>
+    ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Raised Buttons</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <p>Tip: Use UPPERCASE text for 1-2 words, and Titlecase text for 3+ words.</p>
+                <button mat-raised-button color="primary">Primary</button>
+                <button mat-raised-button color="accent">Accent</button>
+                <button mat-raised-button color="warn">Warn</button>
+                <button mat-raised-button color="fds-primary">FDS Primary</button>
+                <button mat-raised-button color="fds-secondary">FDS Secondary</button>
+                <button mat-raised-button color="fds-regular">FDS regular</button>
+                <button mat-raised-button color="fds-warn">FDS warn</button>
+                <button mat-raised-button color="fds-critical">FDS critical</button>
+                <button mat-raised-button disabled color="primary">Primary</button>
+                <button mat-raised-button disabled color="accent">Accent</button>
+                <button mat-raised-button disabled color="warn">Warn</button>
+                <button mat-raised-button disabled color="fds-primary">FDS primary</button>
+                <button mat-raised-button disabled color="fds-secondary">FDS Secondary</button>
+                <button mat-raised-button disabled color="fds-regular">FDS regular</button>
+                <button mat-raised-button disabled color="fds-warn">FDS warn</button>
+                <button mat-raised-button disabled color="fds-critical">FDS critical</button>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- Themed Raised Buttons -->
+        <button mat-raised-button color="primary">Primary</button>
+        <button mat-raised-button color="accent">Secondary</button>
+        <button mat-raised-button color="warn">warn</button>
+        <button mat-raised-button color="fds-primary">FDS Primary</button>
+        <button mat-raised-button color="fds-secondary">FDS Secondary</button>
+        <button mat-raised-button color="fds-regular">FDS regular</button>
+        <button mat-raised-button color="fds-warn">FDS warn</button>
+        <button mat-raised-button color="fds-critical">FDS critical</button>
+        <!-- Disabled Raised Buttons -->
+        <button mat-raised-button disabled color="primary">Primary</button>
+        <button mat-raised-button disabled color="accent">Secondary</button>
+        <button mat-raised-button disabled color="warn">warn</button>
+        <button mat-raised-button disabled color="fds-primary">FDS primary</button>
+        <button mat-raised-button disabled color="fds-secondary">FDS Secondary</button>
+        <button mat-raised-button disabled color="fds-regular">FDS regular</button>
+        <button mat-raised-button disabled color="fds-warn">FDS warn</button>
+        <button mat-raised-button disabled color="fds-critical">FDS critical</button>
+    ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Links</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <a class="link" href="https://material.angular.io" target="_blank">Angular Material</a>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+                <![CDATA[
+        <a class="link" href="https://material.angular.io" target="_blank">Angular Material</a>
+                ]]>
+            </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Flat Buttons</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <mat-card-actions>
+                    <button mat-button>Default</button>
+                    <button mat-button color="primary">Primary</button>
+                    <button mat-button color="accent">Secondary</button>
+                    <button mat-button color="warn">Warn</button>
+                    <button mat-button disabled>Disabled Default</button>
+                    <button mat-button disabled color="primary">Disabled Primary</button>
+                    <button mat-button disabled color="accent">Disabled Secondary</button>
+                    <button mat-button disabled color="warn">Disabled Warn</button>
+                </mat-card-actions>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- Themed Flat Buttons -->
+        <button mat-button>Default</button>
+        <button mat-button color="primary">Primary</button>
+        <button mat-button color="accent">Secondary</button>
+        <button mat-button color="warn">warn</button>
+        <!-- Disabled Flat Buttons -->
+        <button mat-button disabled>disabled Default</button>
+        <button mat-button disabled color="primary">disabled primary</button>
+        <button mat-button disabled color="accent">disabled Secondary</button>
+        <button mat-button disabled color="warn">disabled warn</button>
+    ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Fab Buttons</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <mat-card-actions class="pad-left-sm">
+                    <button mat-mini-fab color="primary">P</button>
+                    <button mat-mini-fab color="accent">A</button>
+                    <button mat-mini-fab color="warn">W</button>
+                    <button mat-mini-fab disabled color="primary">P</button>
+                    <button mat-mini-fab disabled color="accent">A</button>
+                    <button mat-mini-fab disabled color="warn">W</button>
+                </mat-card-actions>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- Themed Fab Buttons -->
+        <button mat-mini-fab color="primary">P</button>
+        <button mat-mini-fab color="accent">A</button>
+        <button mat-mini-fab color="warn">W</button>
+        <!-- Disabled Fab Buttons -->
+        <button mat-mini-fab disabled color="primary">P</button>
+        <button mat-mini-fab disabled color="accent">A</button>
+        <button mat-mini-fab disabled color="warn">W</button>
+    ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Button Toggles</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <mat-button-toggle-group name="alignment">
+                    <mat-button-toggle value="left">
+                        <mat-icon>format_align_left</mat-icon>
+                    </mat-button-toggle>
+                    <mat-button-toggle value="center">
+                        <mat-icon>format_align_center</mat-icon>
+                    </mat-button-toggle>
+                    <mat-button-toggle value="right">
+                        <mat-icon>format_align_right</mat-icon>
+                    </mat-button-toggle>
+                    <mat-button-toggle value="justify">
+                        <mat-icon>format_align_justify</mat-icon>
+                    </mat-button-toggle>
+                </mat-button-toggle-group>
+                <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+                <mat-button-toggle-group name="onOffToggle" class="on-off-toggle-group">
+                    <mat-button-toggle value="on" [checked]="true">
+                        ON
+                    </mat-button-toggle>
+                    <mat-button-toggle value="off" class="off-toggle">
+                        OFF
+                    </mat-button-toggle>
+                </mat-button-toggle-group>
+                <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+                <mat-button-toggle-group fxLayout="row" fxLayoutAlign="space-between center" class="expansion-panel-filter-toggle-group" multiple>
+                    <mat-button-toggle>
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">34</div>
+                            <div class="pad-top-sm" fxFlex="45">Assets</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle>
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">300</div>
+                            <div class="pad-top-sm" fxFlex="45">Extensions</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle>
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">5000</div>
+                            <div class="pad-top-sm" fxFlex="45">Flows</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle>
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">0</div>
+                            <div class="pad-top-sm" fxFlex="45">Certifications</div>
+                        </div>
+                    </mat-button-toggle>
+                </mat-button-toggle-group>
+                <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+                <mat-button-toggle-group name="fds-administration-perspective" fxLayout="row" class="tab-toggle-group">
+                    <mat-button-toggle value="general" class="uppercase">
+                        general
+                    </mat-button-toggle>
+                    <div fxLayout="row" class="pad-left-md"></div>
+                    <mat-button-toggle value="users" class="uppercase">
+                        Users
+                    </mat-button-toggle>
+                    <div fxLayout="row" class="pad-left-md"></div>
+                    <mat-button-toggle value="workflow" class="uppercase">
+                        Workflow
+                    </mat-button-toggle>
+                </mat-button-toggle-group>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+      <![CDATA[
+         <mat-button-toggle-group name="alignment">
+            <mat-button-toggle value="left">
+                <mat-icon>format_align_left</mat-icon>
+            </mat-button-toggle>
+            <mat-button-toggle value="center">
+                <mat-icon>format_align_center</mat-icon>
+            </mat-button-toggle>
+            <mat-button-toggle value="right">
+                <mat-icon>format_align_right</mat-icon>
+            </mat-button-toggle>
+            <mat-button-toggle value="justify">
+                <mat-icon>format_align_justify</mat-icon>
+            </mat-button-toggle>
+        </mat-button-toggle-group>
+        <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+        <mat-button-toggle-group name="onOffToggle" class="on-off-toggle-group">
+            <mat-button-toggle value="on" [checked]="true">
+                ON
+            </mat-button-toggle>
+            <mat-button-toggle value="off" class="off-toggle">
+                OFF
+            </mat-button-toggle>
+        </mat-button-toggle-group>
+        <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+        <mat-button-toggle-group fxLayout="row" fxLayoutAlign="space-between center" class="expansion-panel-filter-toggle-group" multiple>
+            <mat-button-toggle>
+                <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                    <div class="md-display-1 pad-top-sm" fxFlex="55">34</div>
+                    <div class="pad-top-sm" fxFlex="45">Assets</div>
+                </div>
+            </mat-button-toggle>
+            <mat-button-toggle>
+                <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                    <div class="md-display-1 pad-top-sm" fxFlex="55">300</div>
+                    <div class="pad-top-sm" fxFlex="45">Extensions</div>
+                </div>
+            </mat-button-toggle>
+            <mat-button-toggle>
+                <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                    <div class="md-display-1 pad-top-sm" fxFlex="55">5000</div>
+                    <div class="pad-top-sm" fxFlex="45">Flows</div>
+                </div>
+            </mat-button-toggle>
+            <mat-button-toggle>
+                <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                    <div class="md-display-1 pad-top-sm" fxFlex="55">0</div>
+                    <div class="pad-top-sm" fxFlex="45">Certifications</div>
+                </div>
+            </mat-button-toggle>
+        </mat-button-toggle-group>
+        <div fxLayout="row" class="pad-top-md pad-bot-md"></div>
+        <mat-button-toggle-group name="fds-administration-perspective" fxLayout="row" class="tab-toggle-group">
+            <mat-button-toggle value="general" class="uppercase">
+                general
+            </mat-button-toggle>
+            <div fxLayout="row" class="pad-left-md"></div>
+            <mat-button-toggle value="users" class="uppercase">
+                Users
+            </mat-button-toggle>
+            <div fxLayout="row" class="pad-left-md"></div>
+            <mat-button-toggle value="workflow" class="uppercase">
+                Workflow
+            </mat-button-toggle>
+        </mat-button-toggle-group>
+        ]]>
+      </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Input</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <form>
+                    <div layout="row" layout-margin>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <input matInput placeholder="Company (disabled)" disabled value="Google">
+                        </mat-input-container>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <input matInput disabled placeholder="First name">
+                        </mat-input-container>
+                        <mat-input-container flex>
+                            <input matInput placeholder="Long Last Name That Will Be Truncated">
+                        </mat-input-container>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <div flex fxLayoutAlign="start center">
+                            <mat-input-container flex>
+                                <input matInput placeholder="Button Addon with dropdown">
+                            </mat-input-container>
+                            <button class="input-button" color="fds-regular" mat-raised-button [matMenuTriggerFor]="inputButtonDropdownAddonMenu">
+                                Select<i class="fa fa-caret-down" aria-hidden="true"></i>
+                            </button>
+                            <mat-menu xPosition="before" #inputButtonDropdownAddonMenu="matMenu" [overlapTrigger]="false">
+                                <button mat-menu-item> Refresh </button>
+                                <button mat-menu-item> Settings </button>
+                                <button mat-menu-item> Help </button>
+                                <button mat-menu-item disabled> Sign Out </button>
+                            </mat-menu>
+                        </div>
+                        <div flex fxLayoutAlign="start center">
+                            <mat-input-container floatPlaceholder="always" flex>
+                                <input matInput placeholder="Button Addon">
+                            </mat-input-container>
+                            <button class="input-button" color="fds-regular" mat-raised-button>
+                                Search
+                            </button>
+                        </div>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <div flex fxLayoutAlign="start center">
+                            <mat-input-container floatPlaceholder="always" flex>
+                                <input disabled matInput placeholder="Button Addon with dropdown">
+                            </mat-input-container>
+                            <button disabled class="input-button" color="fds-regular" mat-raised-button>
+                                Select<i class="fa fa-caret-down" aria-hidden="true"></i>
+                            </button>
+                        </div>
+                        <div flex fxLayoutAlign="start center">
+                            <mat-input-container floatPlaceholder="always" flex>
+                                <input disabled matInput placeholder="Button Addon">
+                            </mat-input-container>
+                            <button disabled class="input-button" color="fds-regular" mat-raised-button>
+                                Search
+                            </button>
+                        </div>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <mat-input-container flex>
+                            <textarea matInput placeholder="Address" value="1600 Amphitheatre Pkway"></textarea>
+                        </mat-input-container>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <textarea disabled value="Address 2 Value" matInput placeholder="Address 2"></textarea>
+                        </mat-input-container>
+                    </div>
+                    <div layout="row" layout-margin>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <input matInput placeholder="City">
+                        </mat-input-container>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <input matInput placeholder="State">
+                        </mat-input-container>
+                        <mat-input-container floatPlaceholder="always" flex>
+                            <input matInput #postalCode maxlength="5" placeholder="Postal Code" value="94043">
+                            <mat-hint align="end">{{postalCode.value.length}} / 5</mat-hint>
+                        </mat-input-container>
+                    </div>
+                </form>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+    <![CDATA[
+        <!-- Inputs -->
+        <form>
+            <div layout="row" layout-margin>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <input matInput placeholder="Company (disabled)" disabled value="Google">
+                </mat-input-container>
+            </div>
+            <div layout="row" layout-margin>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <input matInput disabled placeholder="First name">
+                </mat-input-container>
+                <mat-input-container flex>
+                    <input matInput placeholder="Long Last Name That Will Be Truncated">
+                </mat-input-container>
+            </div>
+            <div layout="row" layout-margin>
+                <div flex fxLayoutAlign="start center">
+                    <mat-input-container flex>
+                        <input matInput placeholder="Button Addon with dropdown">
+                    </mat-input-container>
+                    <button class="input-button" color="fds-regular" mat-raised-button [matMenuTriggerFor]="inputButtonDropdownAddonMenu">
+                        Select<i class="fa fa-caret-down" aria-hidden="true"></i>
+                    </button>
+                    <mat-menu xPosition="before" #inputButtonDropdownAddonMenu="matMenu" [overlapTrigger]="false">
+                        <button mat-menu-item> Refresh </button>
+                        <button mat-menu-item> Settings </button>
+                        <button mat-menu-item> Help </button>
+                        <button mat-menu-item disabled> Sign Out </button>
+                    </mat-menu>
+                </div>
+                <div flex fxLayoutAlign="start center">
+                    <mat-input-container floatPlaceholder="always" flex>
+                        <input matInput placeholder="Button Addon">
+                    </mat-input-container>
+                    <button class="input-button" color="fds-regular" mat-raised-button>
+                        Search
+                    </button>
+                </div>
+            </div>
+            <div layout="row" layout-margin>
+                <div flex fxLayoutAlign="start center">
+                    <mat-input-container floatPlaceholder="always" flex>
+                        <input disabled matInput placeholder="Button Addon with dropdown">
+                    </mat-input-container>
+                    <button disabled class="input-button" color="fds-regular" mat-raised-button>
+                        Select<i class="fa fa-caret-down" aria-hidden="true"></i>
+                    </button>
+                </div>
+                <div flex fxLayoutAlign="start center">
+                    <mat-input-container floatPlaceholder="always" flex>
+                        <input disabled matInput placeholder="Button Addon">
+                    </mat-input-container>
+                    <button disabled class="input-button" color="fds-regular" mat-raised-button>
+                        Search
+                    </button>
+                </div>
+            </div>
+            <div layout="row" layout-margin>
+                <mat-input-container flex>
+                    <textarea matInput placeholder="Address" value="1600 Amphitheatre Pkway"></textarea>
+                </mat-input-container>
+            </div>
+            <div layout="row" layout-margin>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <textarea disabled value="Address 2 Value" matInput placeholder="Address 2"></textarea>
+                </mat-input-container>
+            </div>
+            <div layout="row" layout-margin>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <input matInput placeholder="City">
+                </mat-input-container>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <input matInput placeholder="State">
+                </mat-input-container>
+                <mat-input-container floatPlaceholder="always" flex>
+                    <input matInput #postalCode maxlength="5" placeholder="Postal Code" value="94043">
+                    <mat-hint align="end">{{postalCode.value.length}} / 5</mat-hint>
+                </mat-input-container>
+            </div>
+        </form>
+    ]]>
+    </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Tabs</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <mat-tab-group dynamicHeight>
+                    <mat-tab>
+                        <ng-template mat-tab-label>One</ng-template>
+                        <h3 class="mat-title">First tab content</h3>
+                        <p>Plaid echo park knausgaard normcore franzen cronut. Pickled humblebrag tofu hoodie, umami salvia farm-to-table schlitz try-hard food truck knausgaard pabst. Yuccie portland jean shorts, authentic mixtape waistcoat gentrify blue bottle. Fixie kickstarter church-key small batch seitan, shabby chic vegan listicle before they sold out. Hammock raw denim flannel tousled seitan you probably haven't heard of them. Trust fund man bun pug, kickstarter artisan selvage letterpress cornhole tote bag butcher locavore. Affogato try-hard kickstarter seitan, DIY pickled hella godard pork belly four loko ugh.</p>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Two</ng-template>
+                        <h3 class="mat-title">Second tab content</h3>
+                        <p>Hashtag distillery skateboard man bun gochujang, salvia man braid art party meggings heirloom kitsch farm-to-table. Franzen beard fingerstache gentrify, heirloom portland ennui XOXO microdosing kitsch plaid. Chicharrones bushwick chia, banh mi irony tattooed hammock butcher shabby chic taxidermy semiotics marfa post-ironic. Blue bottle keffiyeh farm-to-table ennui, chambray pitchfork art party pinterest artisan pop-up. Etsy banjo marfa, blue bottle kombucha crucifix XOXO tousled beard. Tilde disrupt kale chips bicycle rights skateboard master cleanse hella shoreditch, meditation retro shabby chic vice heirloom. Etsy listicle vice actually, iPhone chia hoodie four loko.</p>
+                    </mat-tab>
+                </mat-tab-group>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+      <![CDATA[
+        <mat-tab-group dynamicHeight>
+          <mat-tab>
+            <ng-template mat-tab-label>First tab content</ng-template>
+            <h1>First content</h1>
+            <p>...</p>
+          </mat-tab>
+          <mat-tab>
+            <ng-template mat-tab-label>Second tab content</ng-template>
+            <h1>Second tab content</h1>
+            <p>...</p>
+          </mat-tab>
+        </mat-tab-group>
+        ]]>
+      </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Autocomplete</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <div class="pad-top-sm" layout="row">
+                    <mat-input-container flex="50">
+                        <input matInput placeholder="State" [matAutocomplete]="tdAuto" [(ngModel)]="currentState" #modelDir="ngModel" (ngModelChange)="this.tdStates = filterStates(currentState)" [disabled]="tdDisabled">
+                    </mat-input-container>
+                </div>
+                <div class="push-top">
+                    <button mat-button (click)="modelDir.reset()" class="text-upper">Reset</button>
+                    <button mat-button (click)="currentState='California'" class="text-upper">Set value</button>
+                    <button mat-button (click)="tdDisabled=!tdDisabled" class="text-upper">Toggle disabled</button>
+                </div>
+                <mat-autocomplete #tdAuto="matAutocomplete">
+                    <mat-option *ngFor="let state of tdStates" [value]="state.name">
+                        <span>{{ state.name }}</span>
+                        <span class="demo-secondary-text"> ({{state.code}}) </span>
+                    </mat-option>
+                </mat-autocomplete>
+                <h3 class="mat-title">Usage</h3>
+                <p>HTML:</p>
+                <pre lang="html">
+      <![CDATA[
+        <div class="pad-top-sm" layout="row">
+            <mat-input-container flex="50">
+                <input matInput placeholder="State" [matAutocomplete]="tdAuto" [(ngModel)]="currentState" #modelDir="ngModel" (ngModelChange)="this.tdStates = filterStates(currentState)" [disabled]="tdDisabled">
+            </mat-input-container>
+        </div>
+        <div class="push-top">
+            <button mat-button (click)="modelDir.reset()" class="text-upper">Reset</button>
+            <button mat-button (click)="currentState='California'" class="text-upper">Set value</button>
+            <button mat-button (click)="tdDisabled=!tdDisabled" class="text-upper">Toggle disabled</button>
+        </div>
+        <mat-autocomplete #tdAuto="matAutocomplete">
+            <mat-option *ngFor="let state of tdStates" [value]="state.name">
+                <span>{ { state.name } }</span>
+                <span class="demo-secondary-text"> ({ {state.code} }) </span>
+            </mat-option>
+        </mat-autocomplete>
+        ]]>
+      </pre>
+                <p>Javascript:</p>
+                <pre lang="javascript">
+      <![CDATA[
+        this.currentState = '';
+        this.reactiveStates = '';
+        this.tdStates = [];
+        this.tdDisabled = false;
+        this.states = [
+            { code: 'AL', name: 'Alabama' },
+            { code: 'AK', name: 'Alaska' },
+            { code: 'AZ', name: 'Arizona' },
+            { code: 'AR', name: 'Arkansas' },
+            { code: 'CA', name: 'California' },
+            { code: 'CO', name: 'Colorado' },
+            { code: 'CT', name: 'Connecticut' },
+            { code: 'DE', name: 'Delaware' },
+            { code: 'FL', name: 'Florida' },
+            { code: 'GA', name: 'Georgia' },
+            { code: 'HI', name: 'Hawaii' },
+            { code: 'ID', name: 'Idaho' },
+            { code: 'IL', name: 'Illinois' },
+            { code: 'IN', name: 'Indiana' },
+            { code: 'IA', name: 'Iowa' },
+            { code: 'KS', name: 'Kansas' },
+            { code: 'KY', name: 'Kentucky' },
+            { code: 'LA', name: 'Louisiana' },
+            { code: 'ME', name: 'Maine' },
+            { code: 'MD', name: 'Maryland' },
+            { code: 'MA', name: 'Massachusetts' },
+            { code: 'MI', name: 'Michigan' },
+            { code: 'MN', name: 'Minnesota' },
+            { code: 'MS', name: 'Mississippi' },
+            { code: 'MO', name: 'Missouri' },
+            { code: 'MT', name: 'Montana' },
+            { code: 'NE', name: 'Nebraska' },
+            { code: 'NV', name: 'Nevada' },
+            { code: 'NH', name: 'New Hampshire' },
+            { code: 'NJ', name: 'New Jersey' },
+            { code: 'NM', name: 'New Mexico' },
+            { code: 'NY', name: 'New York' },
+            { code: 'NC', name: 'North Carolina' },
+            { code: 'ND', name: 'North Dakota' },
+            { code: 'OH', name: 'Ohio' },
+            { code: 'OK', name: 'Oklahoma' },
+            { code: 'OR', name: 'Oregon' },
+            { code: 'PA', name: 'Pennsylvania' },
+            { code: 'RI', name: 'Rhode Island' },
+            { code: 'SC', name: 'South Carolina' },
+            { code: 'SD', name: 'South Dakota' },
+            { code: 'TN', name: 'Tennessee' },
+            { code: 'TX', name: 'Texas' },
+            { code: 'UT', name: 'Utah' },
+            { code: 'VT', name: 'Vermont' },
+            { code: 'VA', name: 'Virginia' },
+            { code: 'WA', name: 'Washington' },
+            { code: 'WV', name: 'West Virginia' },
+            { code: 'WI', name: 'Wisconsin' },
+            { code: 'WY', name: 'Wyoming' },
+        ];
+
+        ...
+
+        displayFn: function(value) {
+            return value && typeof value === 'object' ? value.name : value;
+        },
+
+        filterStates: function(val) {
+            return val ? this.states.filter((s) => s.name.match(new RegExp(val, 'gi'))) : this.states;
+        },
+
+        ...
+        ]]>
+      </pre>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Filter</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <h3 class="mat-title">Autocomplete with chips and no custom inputs</h3>
+                <mat-divider class="push-top push-bottom"></mat-divider>
+                <mat-tab-group mat-stretch-tabs dynamicHeight>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Demo</ng-template>
+                        <div class="push">
+                            <div class="mat-body-1">Type and select a preset option:</div>
+                            <td-chips [items]="items" [(ngModel)]="itemsRequireMatch" placeholder="Enter autocomplete strings" [disabled]="readOnly" requireMatch></td-chips>
+                        </div>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Code</ng-template>
+                        <mat-card-content>
+                            <p>HTML:</p>
+                            <pre lang="html">
+                            <![CDATA[
+        <td-chips [items]="items" [(ngModel)]="itemsRequireMatch" placeholder="Enter autocomplete strings" [disabled]="readOnly" requireMatch></td-chips>
+          ]]>
+                        </pre>
+                            <p>Javascript:</p>
+                            <pre lang="javascript">
+                            <![CDATA[
+        this.readOnly = false;
+
+        this.items = [
+            'stepper',
+            'expansion-panel',
+            'markdown',
+            'highlight',
+            'loading',
+            'media',
+            'chips',
+            'http',
+            'json-formatter',
+            'pipes',
+            'need more?',
+        ];
+
+        this.itemsRequireMatch = this.items.slice(0, 6);
+
+        ...
+
+        toggleReadOnly: function() {
+            this.readOnly = !this.readOnly;
+        },
+
+        ...
+          ]]>
+                        </pre>
+                        </mat-card-content>
+                    </mat-tab>
+                </mat-tab-group>
+                <mat-divider></mat-divider>
+                <mat-card-actions>
+                    <button mat-button color="primary" (click)="toggleReadOnly()" class="text-upper">Toggle ReadOnly</button>
+                </mat-card-actions>
+            </mat-card-content>
+            <mat-card-content>
+                <h3 class="mat-title">Autocomplete with custom inputs</h3>
+                <mat-divider class="push-top push-bottom"></mat-divider>
+                <mat-tab-group mat-stretch-tabs dynamicHeight>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Demo</ng-template>
+                        <div class="push">
+                            <div class="mat-body-1">Type and select option or enter custom text and press enter:</div>
+                            <td-chips [items]="items" placeholder="Enter any string"></td-chips>
+                        </div>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Code</ng-template>
+                        <mat-card-content>
+                            <p>HTML:</p>
+                            <pre lang="html">
+                            <![CDATA[
+        <td-chips [items]="items" placeholder="Enter any string"></td-chips>
+          ]]>
+                        </pre>
+                            <p>Javascript:</p>
+                            <pre lang="javascript">
+                            <![CDATA[
+        this.items = [
+            'stepper',
+            'expansion-panel',
+            'markdown',
+            'highlight',
+            'loading',
+            'media',
+            'chips',
+            'http',
+            'json-formatter',
+            'pipes',
+            'need more?',
+        ];
+          ]]>
+                        </pre>
+                        </mat-card-content>
+                    </mat-tab>
+                </mat-tab-group>
+            </mat-card-content>
+            <mat-card-content>
+                <h3 class="mat-title">Demo allowing custom inputs for tags</h3>
+                <mat-divider class="push-top push-bottom"></mat-divider>
+                <mat-tab-group mat-stretch-tabs dynamicHeight>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Demo</ng-template>
+                        <div class="push">
+                            <div class="mat-body-1">Type any test and press enter:</div>
+                            <td-chips placeholder="Enter any string"></td-chips>
+                        </div>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Code</ng-template>
+                        <mat-card-content>
+                            <p>HTML:</p>
+                            <pre lang="html">
+                            <![CDATA[
+        <td-chips placeholder="Enter any string"></td-chips>
+          ]]>
+                        </pre>
+                        </mat-card-content>
+                    </mat-tab>
+                </mat-tab-group>
+            </mat-card-content>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Searchable/Filterable Expansion Panels</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <mat-tab-group mat-stretch-tabs>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Demo</ng-template>
+                        <div class="pad-top-md pad-bottom-md pad-right-xxl pad-left-xxl">
+                            <div class="pad-top-md pad-bottom-sm">
+                                <mat-button-toggle-group fxLayout="row" fxLayoutAlign="space-between center" class="expansion-panel-filter-toggle-group" multiple>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('type:asset')" [checked]="isDropletFilterChecked('type:asset')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletTypeCount('asset')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Assets</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('type:extension')" [checked]="isDropletFilterChecked('type:extension')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletTypeCount('extension')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Extensions</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('type:flow')" [checked]="isDropletFilterChecked('type:flow')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletTypeCount('flow')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Flows</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('compliant.label:Compliant')" [checked]="isDropletFilterChecked('compliant.label:Compliant')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletCertificationCount('compliant')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Compliant</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('fleet.label:Fleet')" [checked]="isDropletFilterChecked('fleet.label:Fleet')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletCertificationCount('fleet')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Fleet</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('prod.label:Production Ready')" [checked]="isDropletFilterChecked('prod.label:Production Ready')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletCertificationCount('prod')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Production Ready</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                    <mat-button-toggle (change)="toggleDropletsFilter('secure.label:Secure')" [checked]="isDropletFilterChecked('secure.label:Secure')">
+                                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                                            <div class="md-display-1 pad-top-sm" fxFlex="55">{{getDropletCertificationCount('secure')}}</div>
+                                            <div class="pad-top-sm" fxFlex="45">Secure</div>
+                                        </div>
+                                    </mat-button-toggle>
+                                </mat-button-toggle-group>
+                                <div id="fds-droplet-filter-clear-grouping-button-container">
+                                    <span *ngIf="dropletsSearchTerms.length > 0" (click)="dropletsSearchTerms = [];filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);"><i class="fa fa-plus-circle fa-rotate-45" aria-hidden="true"></i><span class="pad-left-sm link">Clear Grouping</span></span>
+                                </div>
+                            </div>
+                            <div layout="row" layout-align="space-between center">
+                                <div flex fxLayout="row" fxLayoutAlign="end center">
+                                    <td-chips [(ngModel)]="dropletsSearchTerms" [items]="autoCompleteDroplets" (add)="filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);" (remove)="filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);" class="push-right-sm"></td-chips>
+                                    <span class="push-top-sm pad-right-sm">Sort by:</span>
+                                    <button class="push-top-sm" color="fds-primary" mat-raised-button [matMenuTriggerFor]="dropletGridSortMenu">
+                                        {{getSortBy()}}<i class="fa fa-caret-down" aria-hidden="true"></i>
+                                    </button>
+                                </div>
+                                <mat-menu class="fds-primary-dropdown-button-menu" #dropletGridSortMenu="matMenu" [overlapTrigger]="false">
+                                    <div *ngFor="let column of dropletColumns">
+                                        <button mat-menu-item *ngIf="column.sortable" (click)="sortDroplets(column);">{{column.label}} {{(column.sortOrder === 'ASC') ? 'DESC' : 'ASC'}}</button>
+                                    </div>
+                                </mat-menu>
+                            </div>
+                        </div>
+                        <div class="pad-right-xxl pad-left-xxl">
+                            <div *ngFor="let droplet of filteredDroplets">
+                                <td-expansion-panel class="mat-elevation-z5" label={{droplet.label}} sublabel={{droplet.sublabel}} [disabled]="disabled">
+                                    <ng-template td-expansion-panel-label>
+                                        <div fxLayout="column" fxLayoutAlign="space-between start">
+                                            <span class="mat-title capitalize">{{droplet.displayName}}</span>
+                                            <span class="md-subhead">{{droplet.type}}</span>
+                                        </div>
+                                    </ng-template>
+                                    <ng-template td-expansion-panel-sublabel>
+                                        <div fxLayout="row" fxLayoutAlign="space-between center">
+                                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                                <span class="uppercase">Versions</span> {{droplet.versions.length}}
+                                            </div>
+                                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                                <span class="uppercase">Flows</span> {{droplet.flows.length}}
+                                            </div>
+                                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                                <span class="uppercase">Extensions</span> {{droplet.extensions.length}}
+                                            </div>
+                                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                                <span class="uppercase">Assests</span> {{droplet.assets.length}}
+                                            </div>
+                                        </div>
+                                    </ng-template>
+                                    <div class="mat-padding">
+                                        <div fxLayout="column" fxLayoutAlign="space-between stretch">
+                                            <div class="pad-bottom-sm" fxLayout="row" fxLayoutAlign="end center">
+                                                <button color="fds-primary" [matMenuTriggerFor]="primaryButtonDropdownMenu" mat-raised-button>
+                                                    Actions<i class="fa fa-caret-down" aria-hidden="true"></i>
+                                                </button>
+                                                <mat-menu class="fds-primary-dropdown-button-menu" #primaryButtonDropdownMenu="matMenu" [overlapTrigger]="false">
+                                                    <button mat-menu-item *ngFor="let action of droplet.actions">
+                                                        <span>{{action.name}}</span>
+                                                    </button>
+                                                </mat-menu>
+                                            </div>
+                                            <div fxLayout="row">
+                                                <div fxFlex="25">
+                                                    <span class="uppercase">Description</span>
+                                                    <p>Blah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah bla</p>
+                                                </div>
+                                                <div fxFlex="50">
+                                                    <mat-card fxFlex>
+                                                        <mat-card-content class="pad-top-sm">
+                                                            <img src="{{droplet.img}}">
+                                                        </mat-card-content>
+                                                    </mat-card>
+                                                </div>
+                                                <div fxFlex="25">
+                                                    <span class="uppercase">Change Log</span>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </td-expansion-panel>
+                                <div class="pad-bottom-sm"></div>
+                            </div>
+                        </div>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Code</ng-template>
+                        <p>HTML:</p>
+                        <pre lang="html">
+                        <![CDATA[
+        <div class="pad-top-md pad-bottom-md pad-right-xxl pad-left-xxl">
+            <div class="pad-top-md pad-bottom-sm">
+                <mat-button-toggle-group fxLayout="row" fxLayoutAlign="space-between center" class="expansion-panel-filter-toggle-group" multiple>
+                    <mat-button-toggle (change)="toggleDropletsFilter('type:asset')" [checked]="isDropletFilterChecked('type:asset')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletTypeCount('asset')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Assets</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('type:extension')" [checked]="isDropletFilterChecked('type:extension')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletTypeCount('extension')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Extensions</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('type:flow')" [checked]="isDropletFilterChecked('type:flow')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletTypeCount('flow')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Flows</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('compliant.label:Compliant')" [checked]="isDropletFilterChecked('compliant.label:Compliant')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletCertificationCount('compliant')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Compliant</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('fleet.label:Fleet')" [checked]="isDropletFilterChecked('fleet.label:Fleet')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletCertificationCount('fleet')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Fleet</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('prod.label:Production Ready')" [checked]="isDropletFilterChecked('prod.label:Production Ready')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletCertificationCount('prod')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Production Ready</div>
+                        </div>
+                    </mat-button-toggle>
+                    <mat-button-toggle (change)="toggleDropletsFilter('secure.label:Secure')" [checked]="isDropletFilterChecked('secure.label:Secure')">
+                        <div fxFlex fxLayout="column" fxLayoutAlign="space-around stretch">
+                            <div class="md-display-1 pad-top-sm" fxFlex="55">{ {getDropletCertificationCount('secure')} }</div>
+                            <div class="pad-top-sm" fxFlex="45">Secure</div>
+                        </div>
+                    </mat-button-toggle>
+                </mat-button-toggle-group>
+                <button *ngIf="activeDropletColumn" mat-button color="primary" (click)="dropletsSearchTerms = [];filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);">Clear Grouping</button>
+            </div>
+            <div layout="row" layout-align="space-between center">
+                <div flex fxLayout="row" fxLayoutAlign="end center">
+                    <td-chips [(ngModel)]="dropletsSearchTerms" [items]="autoCompleteDroplets" (add)="filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);" (remove)="filterDroplets(activeDropletColumn.name, activeDropletColumn.sortOrder);" class="push-right-sm"></td-chips>
+                    <span class="pad-right-sm">Sort by:</span>
+                    <button color="fds-primary" mat-raised-button [matMenuTriggerFor]="dropletGridSortMenu">
+                        { {getSortBy()} }<i class="fa fa-caret-down" aria-hidden="true"></i>
+                    </button>
+                </div>
+                <mat-menu class="fds-primary-dropdown-button-menu" #dropletGridSortMenu="matMenu" [overlapTrigger]="false">
+                    <div *ngFor="let column of dropletColumns">
+                        <button mat-menu-item *ngIf="column.sortable" (click)="sortDroplets(column);">{ {column.label} } { {(column.sortOrder === 'ASC') ? 'DESC' : 'ASC'} }</button>
+                    </div>
+                </mat-menu>
+            </div>
+        </div>
+        <div class="pad-right-xxl pad-left-xxl">
+            <div *ngFor="let droplet of filteredDroplets">
+                <td-expansion-panel class="mat-elevation-z5" label={ {droplet.label} } sublabel={ {droplet.sublabel} } [disabled]="disabled">
+                    <ng-template td-expansion-panel-label>
+                        <div fxLayout="column" fxLayoutAlign="space-between start">
+                            <span class="mat-title capitalize">{ {droplet.displayName} }</span>
+                            <span class="md-subhead">{ {droplet.type} }</span>
+                        </div>
+                    </ng-template>
+                    <ng-template td-expansion-panel-sublabel>
+                        <div fxLayout="row" fxLayoutAlign="space-between center">
+                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                <span class="uppercase">Versions</span> { {droplet.versions.length} }
+                            </div>
+                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                <span class="uppercase">Flows</span> { {droplet.flows.length} }
+                            </div>
+                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                <span class="uppercase">Extensions</span> { {droplet.extensions.length} }
+                            </div>
+                            <div class="pad-right-xxl pad-left-xxl" fxLayout="column" fxLayoutAlign="space-between start">
+                                <span class="uppercase">Assests</span> { {droplet.assets.length} }
+                            </div>
+                        </div>
+                    </ng-template>
+                    <div class="mat-padding">
+                        <div fxLayout="column" fxLayoutAlign="space-between stretch">
+                            <div class="pad-bottom-sm" fxLayout="row" fxLayoutAlign="end center">
+                                <button color="fds-primary" [matMenuTriggerFor]="primaryButtonDropdownMenu" mat-raised-button>
+                                    Actions<i class="fa fa-caret-down" aria-hidden="true"></i>
+                                </button>
+                                <mat-menu class="fds-primary-dropdown-button-menu" #primaryButtonDropdownMenu="matMenu" [overlapTrigger]="false">
+                                    <button mat-menu-item *ngFor="let action of droplet.actions">
+                                        <span>{ {action.name} }</span>
+                                    </button>
+                                </mat-menu>
+                            </div>
+                            <div fxLayout="row">
+                                <div fxFlex="25">
+                                    <span class="uppercase">Description</span>
+                                    <p>Blah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah blaBlah blah bla, bla bla, blah blah bla</p>
+                                </div>
+                                <div fxFlex="50">
+                                    <mat-card fxFlex>
+                                        <mat-card-content class="pad-top-sm">
+                                            <img src="{ {droplet.img} }">
+                                        </mat-card-content>
+                                    </mat-card>
+                                </div>
+                                <div fxFlex="25">
+                                    <span class="uppercase">Change Log</span>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </td-expansion-panel>
+                <div class="pad-bottom-sm"></div>
+            </div>
+        </div>
+          ]]>
+                    </pre>
+                        <p>Javascript:</p>
+                        <pre lang="javascript">
+                        <![CDATA[
+        this.dataTableService = TdDataTableService;
+
+        this.droplets = [{
+            id: '23f6cc59-0156-1000-09b4-2b0610089090',
+            name: "Decompression_Circular_Flow",
+            displayName: 'Decompressed Circular flow',
+            type: 'flow',
+            sublabel: 'A sublabel',
+            compliant: {
+                id: '25fd6vv87-3549-0001-05g6-4d4567890765',
+                label: 'Compliant',
+                type: 'certification'
+            },
+            fleet: {
+                id: '23f6cc59-3549-0001-05g6-4d4567890765',
+                label: 'Fleet',
+                type: 'certification'
+            },
+            prod: {
+                id: '52fd6vv87-3549-0001-05g6-4d4567890765',
+                label: 'Production Ready',
+                type: 'certification'
+            },
+            secure: {
+                id: '32f6cc59-3549-0001-05g6-4d4567890765',
+                label: 'Secure',
+                type: 'certification'
+            },
+            versions: [{
+                id: '23f6cc59-0156-1000-06b4-2b0810089090',
+                revision: '1',
+                dependentFlows: [{
+                    id: '25fd6vv87-3549-0001-05g6-4d4567890765'
+                }],
+                created: date.setDate(date.getDate() - 1),
+                updated: new Date()
+            }, {
+                id: '25fd6vv87-3549-0001-05g6-4d4567890765',
+                revision: '2',
+                dependentFlows: [{
+                    id: '23f6cc59-0156-1000-06b4-2b0810089090'
+                }],
+                created: new Date(),
+                updated: new Date()
+            }],
+            flows: [],
+            extensions: [],
+            assets: [],
+            actions: [{
+                'name': 'Delete',
+                'icon': 'fa fa-close',
+                'tooltip': 'Delete User'
+            }, {
+                'name': 'Manage',
+                'icon': 'fa fa-user',
+                'tooltip': 'Manage User'
+            }, {
+                'name': 'Action 3',
+                'icon': 'fa fa-question',
+                'tooltip': 'Whatever else we want to do...'
+            }]
+        }, {
+            id: '25fd6vv87-3249-0001-05g6-4d4767890765',
+            name: "DateConversion",
+            displayName: 'Date conversion',
+            type: 'asset',
+            sublabel: 'A sublabel',
+            compliant: {
+                id: '25fd6vv34-3549-0001-05g6-4d4567890765',
+                label: 'Compliant',
+                type: 'certification'
+            },
+            prod: {
+                id: '52vn6vv87-3549-0001-05g6-4d4567890765',
+                label: 'Production Ready',
+                type: 'certification'
+            },
+            versions: [{
+                id: '23f6ic59-0156-1000-06b4-2b0810089090',
+                revision: '1',
+                dependentFlows: [{
+                    id: '23f6cc19-0156-1000-06b4-2b0810089090'
+                }],
+                created: new Date(),
+                updated: new Date()
+            }],
+            flows: [],
+            extensions: [],
+            assets: [],
+            actions: [{
+                'name': 'Delete',
+                'icon': 'fa fa-close',
+                'tooltip': 'Delete User'
+            }]
+        }, {
+            id: '52fd6vv87-3294-0001-05g6-4d4767890765',
+            name: "nifi-email-bundle",
+            displayName: 'nifi-email-bundle',
+            type: 'extension',
+            sublabel: 'A sublabel',
+            compliant: {
+                id: '33fd6vv87-3549-0001-05g6-4d4567890765',
+                label: 'Compliant',
+                test: {
+                    label: 'test'
+                },
+                type: 'certification'
+            },
+            versions: [{
+                id: '23d3cc59-0156-1000-06b4-2b0810089090',
+                revision: '1',
+                dependentFlows: [{
+                    id: '23f6cc89-0156-1000-06b4-2b0810089090'
+                }],
+                created: new Date(),
+                updated: new Date()
+            }],
+            flows: [],
+            extensions: [],
+            assets: [],
+            actions: [{
+                'name': 'Delete',
+                'icon': 'fa fa-close',
+                'tooltip': 'Delete User'
+            }, {
+                'name': 'Manage',
+                'icon': 'fa fa-user',
+                'tooltip': 'Manage User'
+            }, ]
+        }];
+
+        this.filteredDroplets = [];
+
+        this.dropletColumns = [
+            { name: 'id', label: 'ID', sortable: true },
+            { name: 'name', label: 'Name', sortable: true },
+            { name: 'displayName', label: 'Display Name', sortable: true },
+            { name: 'sublabel', label: 'Label', sortable: true },
+            { name: 'type', label: 'Type', sortable: true }
+        ];
+
+        this.autoCompleteDroplets = [];
+        this.dropletsSearchTerms = [];
+
+        ...
+
+        isDropletFilterChecked: function(term) {
+            return (this.dropletsSearchTerms.indexOf(term) > -1);
+        },
+
+        getDropletTypeCount: function(type) {
+            return this.filteredDroplets.filter(function(droplet) {
+                return droplet.type === type;
+            }).length;
+        },
+
+        getDropletCertificationCount: function(certification) {
+            return this.filteredDroplets.filter(droplet => {
+                return Object.keys(droplet).find((key) => {
+                    if (key === certification && droplet[certification].type === 'certification') {
+                        return droplet;
+                    }
+                });
+            }).length;
+        },
+
+        getSortBy: function() {
+            var sortByColumnLabel;
+            var arrayLength = this.dropletColumns.length;
+            for (var i = 0; i < arrayLength; i++) {
+                if (this.dropletColumns[i].active === true) {
+                    sortByColumnLabel = this.dropletColumns[i].label;
+                    break;
+                }
+            }
+            return sortByColumnLabel;
+        },
+
+        sortDroplets: function(column) {
+            if (column.sortable === true) {
+                // toggle column sort order
+                var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC';
+                this.filterDroplets(column.name, sortOrder);
+                //only one column can be actively sorted so we reset all to inactive
+                this.dropletColumns.forEach(function (c) {
+                    c.active = false;
+                });
+                //and set this column as the actively sorted column
+                column.active = true;
+                this.activeDropletColumn = column;
+            }
+        },
+
+        toggleDropletsFilter: function(searchTerm) {
+            var applySearchTerm = true;
+            // check if the search term is already applied and remove it if true
+            if (this.dropletsSearchTerms.length > 0) {
+                var arrayLength = this.dropletsSearchTerms.length;
+                for (var i = 0; i < arrayLength; i++) {
+                    var index = this.dropletsSearchTerms.indexOf(searchTerm);
+                    if (index > -1) {
+                        this.dropletsSearchTerms.splice(index, 1);
+                        applySearchTerm = false;
+                    }
+                }
+            }
+
+            // if we just removed the search term do NOT apply it again
+            if (applySearchTerm) {
+                this.dropletsSearchTerms.push(searchTerm);
+            }
+
+            this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder);
+        },
+
+        filterDroplets: function(sortBy, sortOrder) {
+            // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns
+            if (sortBy === undefined) {
+                var arrayLength = this.dropletColumns.length;
+                for (var i = 0; i < arrayLength; i++) {
+                    if (this.dropletColumns[i].sortable === true) {
+                        sortBy = this.dropletColumns[i].name;
+                        this.activeDropletColumn = this.dropletColumns[i];
+                        //only one column can be actively sorted so we reset all to inactive
+                        this.dropletColumns.forEach(c => c.active = false);
+                        //and set this column as the actively sorted column
+                        this.dropletColumns[i].active = true;
+                        break;
+                    }
+                }
+            }
+
+            // if `sortOrder` is `undefined` then use 'ASC'
+            if (sortOrder === undefined) {
+                sortOrder = 'ASC'
+            }
+
+            var newData = this.droplets;
+
+            for (var i = 0; i < this.dropletsSearchTerms.length; i++) {
+                newData = this.filterData(newData, this.dropletsSearchTerms[i], true, this.activeDropletColumn.name);
+            }
+
+            newData = this.dataTableService.sortData(newData, sortBy, sortOrder);
+            this.filteredDroplets = newData;
+            this.getAutoCompleteDroplets();
+        },
+
+        getAutoCompleteDroplets: function() {
+            this.autoCompleteDroplets = [];
+            this.dropletColumns.forEach(c => this.filteredDroplets.forEach(r => (r[c.name.toLowerCase()]) ? this.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : ''));
+        },
+
+        filterData: function(data, searchTerm, ignoreCase) {
+            var field = '';
+            if (searchTerm.indexOf(":") > -1) {
+                field = searchTerm.split(':')[0].trim();
+                searchTerm = searchTerm.split(':')[1].trim();
+            }
+            var filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : '';
+
+            if (filter) {
+                data = data.filter(item => {
+                    var res = Object.keys(item).find((key) => {
+                        if (field.indexOf(".") > -1) {
+                            var objArray = field.split(".");
+                            var obj = item;
+                            var arrayLength = objArray.length;
+                            for (var i = 0; i < arrayLength; i++) {
+                                try {
+                                    obj = obj[objArray[i]];
+                                } catch (e) {
+                                    return false;
+                                }
+                            }
+                            var preItemValue = ('' + obj);
+                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;
+                            return itemValue.indexOf(filter) > -1;
+                        } else {
+                            if (key !== field && field !== '') {
+                                return false;
+                            }
+                            var preItemValue = ('' + item[key]);
+                            var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue;
+                            return itemValue.indexOf(filter) > -1;
+                        }
+                    });
+                    return !(typeof res === 'undefined');
+                });
+            }
+            return data;
+        },
+
+        ...
+          ]]>
+                    </pre>
+                    </mat-tab>
+                </mat-tab-group>
+            </mat-card-content>
+            <mat-divider class="pad-bottom-sm"></mat-divider>
+        </mat-card>
+        <mat-card>
+            <mat-card-title class="pad-bottom-sm">Table</mat-card-title>
+            <mat-divider></mat-divider>
+            <mat-card-content>
+                <p>Example table with: Paging Bar / Filter / Sortable Columns / Multi-select with available Actions</p>
+                <mat-tab-group mat-stretch-tabs>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Demo</ng-template>
+                        <div layout="row" layout-align="space-between center" class="pad-top-md pad-bottom-sm pad-left-md pad-right-md">
+                            <span class="table-title">
+                            <span>Table title</span>
+                            </span>
+                            <div flex class="push-right-sm" fxLayout="row" fxLayoutAlign="end center">
+                                <td-chips [items]="autoCompleteData" (add)="searchAdd($event)" (remove)="searchRemove($event)"></td-chips>
+                                <button class="push-top-sm" color="fds-primary" mat-raised-button [matMenuTriggerFor]="dataTableActionMenu">
+                                    Actions<i class="fa fa-caret-down" aria-hidden="true"></i>
+                                </button>
+                            </div>
+                            <mat-menu class="fds-primary-dropdown-button-menu" #dataTableActionMenu="matMenu" [overlapTrigger]="false">
+                                <button mat-menu-item> Option 1 </button>
+                                <button mat-menu-item> Option 2 </button>
+                            </mat-menu>
+                        </div>
+                        <div class="pad-left-md pad-right-md">
+                            <div fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table">
+                                <div class="td-data-table-column" (click)="sort($event, column)" [matTooltip]="column.tooltip" *ngFor="let column of columns" fxFlex="{{column.width}}">
+                                    <i *ngIf="column.active && column.sortable && column.sortOrder === 'ASC'" class="fa fa-caret-up" aria-hidden="true"></i>
+                                    <i *ngIf="column.active && column.sortable && column.sortOrder === 'DESC'" class="fa fa-caret-down" aria-hidden="true"></i>
+                                    {{column.label}}
+                                </div>
+                                <div class="td-data-table-column" fxFlex=10>
+                                    <div fxLayout="row" fxLayoutAlign="end center">
+                                        <mat-checkbox class="pad-left-sm" [(ngModel)]="allRowsSelected" (checked)="allRowsSelected" (change)="toggleSelectAll()"></mat-checkbox>
+                                    </div>
+                                </div>
+                            </div>
+                            <div>
+                                <div fxLayout="row" fxLayoutAlign="space-between center" class="td-data-table-row" [ngClass]="{'selected' : row.checked}" *ngFor="let row of filteredData" (click)="row.checked = !row.checked;toggleSelect(row)">
+                                    <div class="td-data-table-cell" *ngFor="let column of columns" fxFlex="{{column.width}}">
+                                        <div *ngIf="column.name !== 'comments' || row['comments']">
+                                            {{column.format ? column.format(row[column.name]) : row[column.name]}}
+                                        </div>
+                                    </div>
+                                    <div class="td-data-table-cell" fxFlex=10>
+                                        <div *ngIf="row.actions">
+                                            <div *ngIf="row.actions.length <= 4" fxLayout="row" fxLayoutAlign="end center">
+                                                <button (click)="row.checked = !row.checked" *ngFor="let action of row.actions" matTooltip="{{action.tooltip}}" mat-icon-button color="accent" [disabled]="action.disabled ? '' : null">
+                                                    <i class="{{action.icon}}" aria-hidden="true"></i>
+                                                </button>
+                                                <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked" (change)="toggleSelect(row)" (click)="row.checked = !row.checked;toggleSelect(row)"></mat-checkbox>
+                                            </div>
+                                            <div *ngIf="row.actions.length > 4" fxLayout="row" fxLayoutAlign="end center">
+                                                <button (click)="row.checked = !row.checked" matTooltip="Actions" mat-icon-button color="accent" [matMenuTriggerFor]="tableActionMenu">
+                                                    <i class="fa fa-ellipsis-h" aria-hidden="true"></i>
+                                                </button>
+                                                <mat-menu #tableActionMenu="matMenu" [overlapTrigger]="false">
+                                                    <button *ngFor="let action of row.actions" matTooltip="{{action.tooltip}}" mat-menu-item [disabled]="action.disabled ? '' : null">
+                                                        <i class="{{action.icon}}" aria-hidden="true"></i>
+                                                        <span>{{action.name}}</span>
+                                                    </button>
+                                                </mat-menu>
+                                                <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked" (change)="toggleSelect(row)" (click)="row.checked = !row.checked;toggleSelect(row)"></mat-checkbox>
+                                            </div>
+                                        </div>
+                                        <div *ngIf="!row.actions" fxLayout="row" fxLayoutAlign="end center">
+                                            <mat-checkbox class="pad-left-sm" [(ngModel)]="row.checked" [checked]="row.checked" (change)="toggleSelect(row)" (click)="row.checked = !row.checked;toggleSelect(row)"></mat-checkbox>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="mat-padding" *ngIf="!filteredData.length > 0" layout="row" layout-align="center center">
+                                <h3>No results to display.</h3>
+                            </div>
+                            <td-paging-bar #pagingBar [initialPage]="1" [pageSize]="pageSize" [total]="pageCount" (change)="page($event)">
+                                <span hide-xs>Row per page:</span> {{pagingBar.range}} <span hide-xs>of {{pagingBar.total}}</span>
+                            </td-paging-bar>
+                        </div>
+                    </mat-tab>
+                    <mat-tab>
+                        <ng-template mat-tab-label>Code</ng-template>
+                        <p>HTML:</p>
+                        <pre lang="html">
+                        <![CDATA[
+        <div layout="row" layout-align="space-between center" class="pad-top-md pad-bottom-sm pad-left-md pad-right-md">
+            <span class="table-title">
+            <span>Table title</span>
+            </span>
+            <div flex class="push-right-sm" fxLayout="row" fxLayoutAlign="end center">
+                <td-chips [items]="autoCompleteData" (add)="searchAdd($event)" (remove)="searchRemove($event)"></td-chips>
+                <button color="fds-primary" mat-raised-button [matMenuTriggerFor]="dataTableActionMenu">
+                    Actions<i class="fa 

<TRUNCATED>

[7/7] nifi-fds git commit: gh-pages update

Posted by sc...@apache.org.
gh-pages update


Project: http://git-wip-us.apache.org/repos/asf/nifi-fds/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-fds/commit/a4b7aa82
Tree: http://git-wip-us.apache.org/repos/asf/nifi-fds/tree/a4b7aa82
Diff: http://git-wip-us.apache.org/repos/asf/nifi-fds/diff/a4b7aa82

Branch: refs/heads/gh-pages
Commit: a4b7aa828567fee9018e5327561264f576b57475
Parents: 43ea662
Author: Scott Aslan <sc...@gmail.com>
Authored: Mon Apr 30 15:13:00 2018 -0400
Committer: Scott Aslan <sc...@gmail.com>
Committed: Mon Apr 30 15:13:00 2018 -0400

----------------------------------------------------------------------
 index.html                      |    4 +-
 package-lock.json               | 3586 ++++------------------------------
 package.json                    |   66 +-
 webapp/css/fds-demo.min.css     |    3 +
 webapp/css/fds-demo.min.css.gz  |  Bin 0 -> 11590 bytes
 webapp/css/fds-demo.min.css.map |   64 +
 webapp/systemjs.config.js       |   42 +-
 7 files changed, 451 insertions(+), 3314 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index fb66cad..e55dbb9 100644
--- a/index.html
+++ b/index.html
@@ -16,12 +16,12 @@
 <html>
 <head>
     <title>Apache NiFi Fluid Design System Demo</title>
-    <base href='/'>
+    <base href='/nifi-fds/'>
     <meta charset='UTF-8'>
     <meta name='viewport' content='width=device-width, initial-scale=1'>
     <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
     <link rel="stylesheet" href="node_modules/@covalent/core/common/platform.css">
-    <link rel="stylesheet" href='platform/core/common/styles/css/fluid-design-system.min.css'/>
+    <link rel="stylesheet" href='node_modules/nifi-fds/platform/core/common/styles/css/fluid-design-system.min.css'/>
     <link rel="stylesheet" href='webapp/css/fds-demo.min.css'/>
     <link rel='stylesheet' href='node_modules/font-awesome/css/font-awesome.css'/>
 </head>


[4/7] nifi-fds git commit: gh-pages update

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/webapp/css/fds-demo.min.css.map
----------------------------------------------------------------------
diff --git a/webapp/css/fds-demo.min.css.map b/webapp/css/fds-demo.min.css.map
new file mode 100644
index 0000000..01437c0
--- /dev/null
+++ b/webapp/css/fds-demo.min.css.map
@@ -0,0 +1,64 @@
+{
+	"version": 3,
+	"file": "fds-demo.min.css",
+	"sources": [
+		"../theming/fds-demo.scss",
+		"../../platform/core/common/styles/_globalVars.scss",
+		"../../platform/core/theming/_all-theme.scss",
+		"../../node_modules/@angular/material/_theming.scss",
+		"../../node_modules/@covalent/core/theming/_all-theme.scss",
+		"../../node_modules/@covalent/core/common/_common-theme.scss",
+		"../../node_modules/@covalent/core/common/styles/_theme-functions.scss",
+		"../../node_modules/@covalent/core/chips/_chips-theme.scss",
+		"../../node_modules/@covalent/core/common/styles/_typography-functions.scss",
+		"../../node_modules/@covalent/core/data-table/_data-table-theme.scss",
+		"../../node_modules/@covalent/core/layout/_layout-theme.scss",
+		"../../node_modules/@covalent/core/common/styles/_elevation.scss",
+		"../../node_modules/@covalent/core/common/styles/_variables.scss",
+		"../../node_modules/@covalent/core/steps/_steps-theme.scss",
+		"../../node_modules/@covalent/core/expansion-panel/_expansion-panel-theme.scss",
+		"../../node_modules/@covalent/core/file/_file-theme.scss",
+		"../../node_modules/@covalent/core/loading/_loading-theme.scss",
+		"../../node_modules/@covalent/core/dialogs/_dialog-theme.scss",
+		"../../node_modules/@covalent/core/json-formatter/_json-formatter-theme.scss",
+		"../../node_modules/@covalent/core/paging/_paging-bar-theme.scss",
+		"../../node_modules/@covalent/core/notifications/_notification-count-theme.scss",
+		"../../node_modules/@covalent/core/message/_message-theme.scss",
+		"../../node_modules/@covalent/core/common/styles/_styles.scss",
+		"../../node_modules/@covalent/core/common/styles/font/_font.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_core.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_button.scss",
+		"../../node_modules/@covalent/core/common/styles/_rtl.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_card.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_content.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_divider.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_icons.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_list.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_sidenav.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_structure.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_toolbar.scss",
+		"../../node_modules/@covalent/core/common/styles/core/_whiteframe.scss",
+		"../../node_modules/@covalent/core/common/styles/_typography.scss",
+		"../../node_modules/@covalent/core/common/styles/_layout.scss",
+		"../../node_modules/@covalent/core/common/styles/colors/_colors.scss",
+		"../../node_modules/@covalent/core/common/styles/colors/_colors-dark.scss",
+		"../../node_modules/@covalent/core/common/styles/_palette-dark.scss",
+		"../../node_modules/@covalent/core/common/styles/colors/_colors-light.scss",
+		"../../node_modules/@covalent/core/common/styles/_palette-light.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_utilities.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_general.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_pad.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_pull.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_push.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_size.scss",
+		"../../node_modules/@covalent/core/common/styles/utilities/_text.scss",
+		"../../node_modules/@covalent/core/typography/_all-typography.scss",
+		"../../platform/core/common/styles/_buttons.scss",
+		"../../platform/core/common/styles/_expansionPanels.scss",
+		"../../platform/core/common/styles/_menus.scss",
+		"../theming/_structureElements.scss",
+		"../theming/_helperClasses.scss"
+	],
+	"names": [],
+	"mappings": "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"
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/webapp/systemjs.config.js
----------------------------------------------------------------------
diff --git a/webapp/systemjs.config.js b/webapp/systemjs.config.js
index 24857de..d4587e1 100644
--- a/webapp/systemjs.config.js
+++ b/webapp/systemjs.config.js
@@ -40,27 +40,7 @@
             '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
             '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
             '@angular/flex-layout': 'npm:@angular/flex-layout/bundles/flex-layout.umd.js',
-            '@angular/flex-layout/core': 'npm:@angular/flex-layout/bundles/flex-layout-core.umd.js',
-            '@angular/flex-layout/extended': 'npm:@angular/flex-layout/bundles/flex-layout-extended.umd.js',
-            '@angular/flex-layout/flex': 'npm:@angular/flex-layout/bundles/flex-layout-flex.umd.js',
             '@angular/material': 'npm:@angular/material/bundles/material.umd.js',
-            '@angular/material/core': 'npm:@angular/material/bundles/material-core.umd.js',
-            '@angular/material/card': 'npm:@angular/material/bundles/material-card.umd.js',
-            '@angular/material/divider': 'npm:@angular/material/bundles/material-divider.umd.js',
-            '@angular/material/progress-bar': 'npm:@angular/material/bundles/material-progress-bar.umd.js',
-            '@angular/material/progress-spinner': 'npm:@angular/material/bundles/material-progress-spinner.umd.js',
-            '@angular/material/chips': 'npm:@angular/material/bundles/material-chips.umd.js',
-            '@angular/material/input': 'npm:@angular/material/bundles/material-input.umd.js',
-            '@angular/material/icon': 'npm:@angular/material/bundles/material-icon.umd.js',
-            '@angular/material/button': 'npm:@angular/material/bundles/material-button.umd.js',
-            '@angular/material/checkbox': 'npm:@angular/material/bundles/material-checkbox.umd.js',
-            '@angular/material/tooltip': 'npm:@angular/material/bundles/material-tooltip.umd.js',
-            '@angular/material/dialog': 'npm:@angular/material/bundles/material-dialog.umd.js',
-            '@angular/material/sidenav': 'npm:@angular/material/bundles/material-sidenav.umd.js',
-            '@angular/material/menu': 'npm:@angular/material/bundles/material-menu.umd.js',
-            '@angular/material/form-field': 'npm:@angular/material/bundles/material-form-field.umd.js',
-            '@angular/material/toolbar': 'npm:@angular/material/bundles/material-toolbar.umd.js',
-            '@angular/material/autocomplete': 'npm:@angular/material/bundles/material-autocomplete.umd.js',
             '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
             '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',
             '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',
@@ -86,8 +66,7 @@
             'hammerjs': 'npm:hammerjs/hammer.min.js',
 
             // Covalent
-            '@covalent/core': 'npm:@covalent/core/bundles/covalent-core.umd.min.js',
-            '@covalent/core/common': 'npm:@covalent/core/bundles/covalent-core-common.umd.min.js',
+            '@covalent/core': 'npm:@covalent/core/bundles/core.umd.min.js',
 
             // other libraries
             'rxjs': 'npm:rxjs',
@@ -98,16 +77,15 @@
             'tslib': 'npm:tslib/tslib.js',
 
             // Fluid Design System
-            '@fluid-design-system/core': 'platform/core/fluid-design-system.module.js',
-            '@fluid-design-system/dialogs': 'platform/core/dialogs/fds-dialogs.module.js',
-            '@fluid-design-system/dialog-component': 'platform/core/dialogs/fds-dialog.component.js',
-            '@fluid-design-system/dialog-service': 'platform/core/dialogs/services/dialog.service.js',
-            '@fluid-design-system/confirm-dialog-component': 'platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
-            '@fluid-design-system/snackbars': 'platform/core/snackbars/fds-snackbars.module.js',
-            '@fluid-design-system/snackbar-component': 'platform/core/snackbars/fds-snackbar.component.js',
-            '@fluid-design-system/snackbar-service': 'platform/core/snackbars/services/snackbar.service.js',
-            '@fluid-design-system/coaster-component': 'platform/core/snackbars/coaster/coaster.component.js',
-            '@fluid-design-system/common/storage-service': 'platform/core/common/services/fds-storage.service.js'
+            '@fluid-design-system/core': 'npm:nifi-fds/platform/core/fluid-design-system.module.js',
+            '@fluid-design-system/dialogs': 'npm:nifi-fds/platform/core/dialogs/fds-dialogs.module.js',
+            '@fluid-design-system/dialog-component': 'npm:nifi-fds/platform/core/dialogs/fds-dialog.component.js',
+            '@fluid-design-system/dialog-service': 'npm:nifi-fds/platform/core/dialogs/services/dialog.service.js',
+            '@fluid-design-system/confirm-dialog-component': 'npm:nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
+            '@fluid-design-system/snackbars': 'npm:nifi-fds/platform/core/snackbars/fds-snackbars.module.js',
+            '@fluid-design-system/snackbar-component': 'npm:nifi-fds/platform/core/snackbars/fds-snackbar.component.js',
+            '@fluid-design-system/snackbar-service': 'npm:nifi-fds/platform/core/snackbars/services/snackbar.service.js',
+            '@fluid-design-system/coaster-component': 'npm:nifi-fds/platform/core/snackbars/coaster/coaster.component.js'
         },
         // packages tells the System loader how to load when no filename and/or no extension
         packages: {


[3/7] nifi-fds git commit: [NIFIREG-168] include webapp in src to facilitate local build and review process

Posted by sc...@apache.org.
[NIFIREG-168] include webapp in src to facilitate local build and review process


Project: http://git-wip-us.apache.org/repos/asf/nifi-fds/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-fds/commit/43ea6622
Tree: http://git-wip-us.apache.org/repos/asf/nifi-fds/tree/43ea6622
Diff: http://git-wip-us.apache.org/repos/asf/nifi-fds/diff/43ea6622

Branch: refs/heads/gh-pages
Commit: 43ea6622b0697c426cf290eed7ace2eacd306633
Parents: 544c0e4
Author: Scott Aslan <sc...@gmail.com>
Authored: Mon Apr 30 15:07:17 2018 -0400
Committer: Scott Aslan <sc...@gmail.com>
Committed: Mon Apr 30 15:07:17 2018 -0400

----------------------------------------------------------------------
 .github/PULL_REQUEST_TEMPLATE.md                |   12 +-
 .gitignore                                      |    4 +-
 Gruntfile.js                                    |   14 +
 README.md                                       |   40 +-
 gh-pages.index.html                             |   36 +
 gh-pages.package.json                           |   59 +
 gh-pages.systemjs.config.js                     |  120 +
 index.html                                      |   36 +
 karma.conf.js                                   |    3 +-
 package.json                                    |   13 +-
 platform/core/theming/_all-theme.scss           |    4 +-
 platform/systemjs-angular-loader.js             |   66 -
 platform/systemjs.spec.config.js                |   11 -
 scripts/clean-install                           |   21 +
 scripts/clean-install-skipTests                 |   18 +
 scripts/deploy-gh-pages                         |   21 +
 scripts/dev-install                             |   19 +
 scripts/dev-install-skipTests                   |   16 +
 .../dialogs/demo/fds-demo-dialog.html           |   18 +
 .../dialogs/demo/fds-demo-dialog.js             |   59 +
 .../fluid-design-system/fds-demo.html           | 2995 ++++++++++++++++++
 .../components/fluid-design-system/fds-demo.js  | 1066 +++++++
 webapp/fds-bootstrap.js                         |   53 +
 webapp/fds.animations.js                        |  133 +
 webapp/fds.html                                 |   34 +
 webapp/fds.js                                   |   74 +
 webapp/fds.module.js                            |   55 +
 webapp/fds.routes.js                            |   26 +
 webapp/services/fds.service.js                  |   52 +
 webapp/systemjs-angular-loader.js               |   66 +
 webapp/systemjs.config.extras.js                |   27 +
 webapp/systemjs.config.js                       |  142 +
 webapp/theming/_helperClasses.scss              |   78 +
 webapp/theming/_structureElements.scss          |   84 +
 webapp/theming/fds-demo.scss                    |   49 +
 35 files changed, 5403 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/.github/PULL_REQUEST_TEMPLATE.md
----------------------------------------------------------------------
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index cb9093a..25f2d97 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -14,10 +14,9 @@ to ensure the following steps have been taken:
 - [ ] Is your initial contribution a single, squashed commit?
 
 ### For code changes:
-- [ ] Have you ensured that a full build is executed via npm build at the root nifi-fds folder?
-- [ ] Have you ensured that the full suite of tests is executed via npm test at the root nifi-fds folder?
 - [ ] Have you written or updated unit tests to verify your changes?
-- [ ] Have you written or updated the Apache NiFi Fluid Design System Demo application to demonstrate, provide examples of usage, and to verify your changes?
+- [ ] Have you ensured that a full build and that the full suite of unit tests is executed via npm run clean:install at the root nifi-fds folder?
+- [ ] Have you written or updated the Apache NiFi Fluid Design System demo application to demonstrate any new functionality, provide examples of usage, and to verify your changes via npm start at the nifi-fds/target folder?
 - [ ] If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under [ASF 2.0](http://www.apache.org/legal/resolved.html#category-a)?
 - [ ] If applicable, have you updated the LICENSE file, including the main LICENSE file under nifi-fds?
 - [ ] If applicable, have you updated the NOTICE file, including the main NOTICE file found under nifi-fds?
@@ -27,10 +26,3 @@ to ensure the following steps have been taken:
 
 ### Note:
 Please ensure that once the PR is submitted, you check travis-ci for build issues and submit an update to your PR as soon as possible.
-
-### Reviewers, please perform the following in order to validate the changes:
-- [ ] Checkout the gh-pages branch.
-- [ ] Open the package.json file in the root nifi-fds folder and in the dependencies property edit the nifi-fds module to point to the pull request under review by replacing the user name, repository name, and branch name to the appropriate values for the PR.
-     Ex. To point to the Apache NiFi FDS master branch replace the user, repository, and branch name in the string git+https://github.com/USER_NAME/REPO_NAME.git#PR_BRANCH_NAME to:
-            "nifi-fds": "git+https://github.com/apache/nifi-fds.git#master"
-- [ ] ‘npm start’ in the root nifi-fds folder and verify the UI/UX in a browser.

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 297f275..a19bd7a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
 node_modules/
-coverage/
-platform/core/common/styles/css/
+target/
 npm-debug.log*
-webapp/
 
 # Intellij
 .idea/

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/Gruntfile.js
----------------------------------------------------------------------
diff --git a/Gruntfile.js b/Gruntfile.js
index f4f8ae7..45b43f4 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -29,6 +29,11 @@ module.exports = function (grunt) {
                 files: [{
                     './platform/core/common/styles/css/fluid-design-system.min.css': ['./platform/core/common/styles/fluid-design-system.scss']
                 }]
+            },
+            minifyFdsDemo: {
+                files: [{
+                    './webapp/css/fds-demo.min.css': ['./webapp/theming/fds-demo.scss']
+                }]
             }
         },
         compress: {
@@ -42,6 +47,14 @@ module.exports = function (grunt) {
                     dest: './',
                     ext: '.min.css.gz'
                 }]
+            },
+            fdsDemoStyles: {
+                files: [{
+                    expand: true,
+                    src: ['./webapp/css/fds-demo.min.css'],
+                    dest: './',
+                    ext: '.min.css.gz'
+                }]
             }
         },
         bump: {
@@ -65,4 +78,5 @@ module.exports = function (grunt) {
         }
     });
     grunt.registerTask('compile-fds-styles', ['sass:minifyFds', 'compress:fdsStyles']);
+    grunt.registerTask('compile-fds-demo-styles', ['sass:minifyFdsDemo', 'compress:fdsDemoStyles']);
 };

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 5ac1f90..cdbce26 100644
--- a/README.md
+++ b/README.md
@@ -77,48 +77,32 @@ npm install
 Next run:
 
 ```bash
-npm run build
+npm run clean:install
 ```
 
-## Testing
-
-Developers can easily test this project using **npm**.
-
-```bash
-npm test
-```
-
-Or, during development:
+or to run without unit tests run:
 
 ```bash
-npm run test:dev
+npm run clean:install:skipTests
 ```
 
-## Release Managment
-
-For developers with permissions releasing a new version of the NiFi Fluid Design System is simple with [grunt bump](https://github.com/vojtajina/grunt-bump)
-
-## Running the demo locally
+## Developing
 
-For developers that would like to contribute to the demo please checkout the `gh-pages` branch:
+Developers can easily skip the re-instalation of node_modules and run unit tests in development mode using **npm**.
 
 ```bash
-git checkout gh-pages
+npm run dev:install
 ```
 
-Next, you will need to update the base url. To do this simply edit the index.html file on line 21:
+or to run without unit tests run:
 
 ```bash
-<base href='/fluid-design-system/'>
+npm run dev:install:skipTests
 ```
 
-should be:
-
-```bash
-<base href='/'>
-```
+## Running locally
 
-Finally, start the application:
+Once built you can start the application from the target directory via:
 
 ```bash
 npm start
@@ -126,3 +110,7 @@ npm start
 
 The demo application should now be availalbe at: [http://127.0.0.1:8080/](http://127.0.0.1:8080/).
 
+## Release Managment
+
+For developers with permissions releasing a new version of the NiFi Fluid Design System is simple with [grunt bump](https://github.com/vojtajina/grunt-bump)
+

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/gh-pages.index.html
----------------------------------------------------------------------
diff --git a/gh-pages.index.html b/gh-pages.index.html
new file mode 100644
index 0000000..e55dbb9
--- /dev/null
+++ b/gh-pages.index.html
@@ -0,0 +1,36 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the 'License'); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an 'AS IS' BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Apache NiFi Fluid Design System Demo</title>
+    <base href='/nifi-fds/'>
+    <meta charset='UTF-8'>
+    <meta name='viewport' content='width=device-width, initial-scale=1'>
+    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
+    <link rel="stylesheet" href="node_modules/@covalent/core/common/platform.css">
+    <link rel="stylesheet" href='node_modules/nifi-fds/platform/core/common/styles/css/fluid-design-system.min.css'/>
+    <link rel="stylesheet" href='webapp/css/fds-demo.min.css'/>
+    <link rel='stylesheet' href='node_modules/font-awesome/css/font-awesome.css'/>
+</head>
+<body>
+<fds-app></fds-app>
+</body>
+<script src="node_modules/systemjs/dist/system.src.js"></script>
+<script src="webapp/systemjs.config.js?"></script>
+<script>
+  System.import('webapp/fds-bootstrap.js').catch(function(err) {console.error(err);});
+</script>
+</html>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/gh-pages.package.json
----------------------------------------------------------------------
diff --git a/gh-pages.package.json b/gh-pages.package.json
new file mode 100644
index 0000000..58da069
--- /dev/null
+++ b/gh-pages.package.json
@@ -0,0 +1,59 @@
+{
+  "name": "nifi-fds-demo",
+  "version": "0.0.0",
+  "scripts": {
+    "start": "./node_modules/http-server/bin/http-server .",
+    "build:webapp": "./node_modules/grunt-cli/bin/grunt compile-fds-demo-styles",
+    "build:platform": "npm install && cd ./node_modules/nifi-fds && npm install && npm run build && rm -rf ./node_modules && rm -rf ./package-lock.json"
+  },
+  "description": "The Apache NiFi Fluid Design System demo provides users with an example web application that consumes the NgModule and allows users to interact with the UI/UX components.",
+  "keywords": [
+    "fluid design system",
+    "angular",
+    "material",
+    "material design",
+    "components",
+    "reusable",
+    "covalent"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/apache/nifi-fds.git"
+  },
+  "bugs": {
+    "url": "https://github.com/apache/nifi-fds/issues"
+  },
+  "license": "Apache License, Version 2.0",
+  "dependencies": {
+    "@angular/animations": "4.4.6",
+    "@angular/cdk": "2.0.0-beta.12",
+    "@angular/common": "4.4.6",
+    "@angular/compiler": "4.4.6",
+    "@angular/core": "4.4.6",
+    "@angular/flex-layout": "2.0.0-beta.9",
+    "@angular/forms": "4.4.6",
+    "@angular/http": "4.4.6",
+    "@angular/material": "2.0.0-beta.12",
+    "@angular/platform-browser": "4.4.6",
+    "@angular/platform-browser-dynamic": "4.4.6",
+    "@angular/router": "4.4.6",
+    "@covalent/core": "1.0.0-beta.8-1",
+    "detect-libc": "1.0.3",
+    "font-awesome": "4.7.0",
+    "hammerjs": "2.0.8",
+    "jquery": "3.2.1",
+    "node-gyp": "3.6.2",
+    "roboto-fontface": "0.7.0",
+    "rxjs": "5.4.3",
+    "systemjs": "0.20.17",
+    "systemjs-plugin-text": "0.0.11",
+    "zone.js": "0.8.7"
+  },
+  "devDependencies": {
+    "grunt": "0.4.5",
+    "grunt-cli": "1.2.0",
+    "grunt-contrib-compress": "1.4.3",
+    "grunt-sass": "2.0.0",
+    "load-grunt-tasks": "3.5.2"
+  }
+}

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/gh-pages.systemjs.config.js
----------------------------------------------------------------------
diff --git a/gh-pages.systemjs.config.js b/gh-pages.systemjs.config.js
new file mode 100644
index 0000000..d4587e1
--- /dev/null
+++ b/gh-pages.systemjs.config.js
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+(function (global) {
+    System.config({
+        paths: {
+            // paths serve as alias
+            'npm:': 'node_modules/'
+        },
+        // map tells the System loader where to look for things
+        map: {
+            'text': 'npm:systemjs-plugin-text/text.js',
+            'app': './webapp',
+
+            // jquery
+            'jquery': 'npm:jquery/dist/jquery.min.js',
+
+            // Angular
+            '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
+            '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
+            '@angular/common/http': 'npm:@angular/common/bundles/common-http.umd.js',
+            '@angular/common/http/testing': 'npm:@angular/common/bundles/common-http-testing.umd.js',
+            '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
+            '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
+            '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
+            '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
+            '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
+            '@angular/flex-layout': 'npm:@angular/flex-layout/bundles/flex-layout.umd.js',
+            '@angular/material': 'npm:@angular/material/bundles/material.umd.js',
+            '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js',
+            '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js',
+            '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js',
+            '@angular/cdk/accordion': 'npm:@angular/cdk/bundles/cdk-accordion.umd.js',
+            '@angular/cdk/layout': 'npm:@angular/cdk/bundles/cdk-layout.umd.js',
+            '@angular/cdk/collections': 'npm:@angular/cdk/bundles/cdk-collections.umd.js',
+            '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js',
+            '@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js',
+            '@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js',
+            '@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js',
+            '@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js',
+            '@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js',
+            '@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js',
+            '@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js',
+            '@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js',
+            '@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js',
+            '@angular/cdk/stepper': 'npm:@angular/cdk/bundles/cdk-stepper.umd.js',
+            '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js',
+            '@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js',
+            '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
+
+            // needed to support gestures for angular material
+            'hammerjs': 'npm:hammerjs/hammer.min.js',
+
+            // Covalent
+            '@covalent/core': 'npm:@covalent/core/bundles/core.umd.min.js',
+
+            // other libraries
+            'rxjs': 'npm:rxjs',
+            'zone.js': 'npm:zone.js/dist/zone.js',
+            'core-js': 'npm:core-js/client/shim.min.js',
+            'superagent': 'npm:superagent/superagent.js',
+            'querystring': 'npm:querystring',
+            'tslib': 'npm:tslib/tslib.js',
+
+            // Fluid Design System
+            '@fluid-design-system/core': 'npm:nifi-fds/platform/core/fluid-design-system.module.js',
+            '@fluid-design-system/dialogs': 'npm:nifi-fds/platform/core/dialogs/fds-dialogs.module.js',
+            '@fluid-design-system/dialog-component': 'npm:nifi-fds/platform/core/dialogs/fds-dialog.component.js',
+            '@fluid-design-system/dialog-service': 'npm:nifi-fds/platform/core/dialogs/services/dialog.service.js',
+            '@fluid-design-system/confirm-dialog-component': 'npm:nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
+            '@fluid-design-system/snackbars': 'npm:nifi-fds/platform/core/snackbars/fds-snackbars.module.js',
+            '@fluid-design-system/snackbar-component': 'npm:nifi-fds/platform/core/snackbars/fds-snackbar.component.js',
+            '@fluid-design-system/snackbar-service': 'npm:nifi-fds/platform/core/snackbars/services/snackbar.service.js',
+            '@fluid-design-system/coaster-component': 'npm:nifi-fds/platform/core/snackbars/coaster/coaster.component.js'
+        },
+        // packages tells the System loader how to load when no filename and/or no extension
+        packages: {
+            app: {
+                defaultExtension: 'js',
+                meta: {
+                    './*.js': {
+                        loader: 'webapp/systemjs-angular-loader.js'
+                    }
+                }
+            },
+            'webapp/systemjs-angular-loader.js': {
+                loader: false
+            },
+            'rxjs': {
+                defaultExtension: 'js'
+            },
+            'querystring': {
+                main: './index.js',
+                defaultExtension: 'js'
+            },
+            'moment': {
+                main: './moment.js',
+                defaultExtension: 'js'
+            },
+            'angular2-moment': {
+                main: './index.js',
+                defaultExtension: 'js'
+            }
+        }
+    });
+})(this);

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..fb66cad
--- /dev/null
+++ b/index.html
@@ -0,0 +1,36 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the 'License'); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an 'AS IS' BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Apache NiFi Fluid Design System Demo</title>
+    <base href='/'>
+    <meta charset='UTF-8'>
+    <meta name='viewport' content='width=device-width, initial-scale=1'>
+    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
+    <link rel="stylesheet" href="node_modules/@covalent/core/common/platform.css">
+    <link rel="stylesheet" href='platform/core/common/styles/css/fluid-design-system.min.css'/>
+    <link rel="stylesheet" href='webapp/css/fds-demo.min.css'/>
+    <link rel='stylesheet' href='node_modules/font-awesome/css/font-awesome.css'/>
+</head>
+<body>
+<fds-app></fds-app>
+</body>
+<script src="node_modules/systemjs/dist/system.src.js"></script>
+<script src="webapp/systemjs.config.js?"></script>
+<script>
+  System.import('webapp/fds-bootstrap.js').catch(function(err) {console.error(err);});
+</script>
+</html>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/karma.conf.js
----------------------------------------------------------------------
diff --git a/karma.conf.js b/karma.conf.js
index 606aa3e..19f0125 100644
--- a/karma.conf.js
+++ b/karma.conf.js
@@ -91,8 +91,7 @@ module.exports = function (config) {
         // Proxied base paths for loading assets
         proxies: {
             // required for modules fetched by SystemJS
-            '/base/fds/node_modules/': '/base/node_modules/',
-            '/base/systemjs-angular-loader.js': '/base/platform/systemjs-angular-loader.js'
+            '/base/fds/node_modules/': '/base/node_modules/'
         },
 
         exclude: [],

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 98f05ea..122d380 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,14 @@
   "name": "nifi-fds",
   "version": "0.0.0",
   "scripts": {
-    "build": "./node_modules/grunt-cli/bin/grunt compile-fds-styles",
+    "start": "./node_modules/http-server/bin/http-server .",
+    "build:webapp": "./node_modules/grunt-cli/bin/grunt compile-fds-demo-styles",
+    "build:platform": "./node_modules/grunt-cli/bin/grunt compile-fds-styles",
+    "clean:install": "bash ./scripts/clean-install",
+    "clean:install:skipTests": "bash ./scripts/clean-install-skipTests",
+    "dev:install": "bash ./scripts/dev-install",
+    "dev:install:skipTests": "bash ./scripts/dev-install-skipTests",
+    "deploy:ghpages": "bash ./scripts/deploy-gh-pages",
     "test": "./node_modules/protractor/bin/webdriver-manager update --gecko false && karma start karma.conf.js --single-run",
     "test:dev": "./node_modules/protractor/bin/webdriver-manager update --gecko false && karma start karma.conf.js"
   },
@@ -44,6 +51,9 @@
     "@angular/platform-browser-dynamic": "5.2.0",
     "@angular/router": "5.2.0",
     "@covalent/core": "1.0.0",
+    "detect-libc": "1.0.3",
+    "font-awesome": "4.7.0",
+    "hammerjs": "2.0.8",
     "roboto-fontface": "0.7.0"
   },
   "devDependencies": {
@@ -52,6 +62,7 @@
     "grunt-cli": "1.2.0",
     "grunt-contrib-compress": "1.4.3",
     "grunt-sass": "2.0.0",
+    "http-server": "0.11.1",
     "jasmine-core": "2.8.0",
     "karma": "1.7.1",
     "karma-chrome-launcher": "2.2.0",

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/platform/core/theming/_all-theme.scss
----------------------------------------------------------------------
diff --git a/platform/core/theming/_all-theme.scss b/platform/core/theming/_all-theme.scss
index 66bd9f9..747ab8b 100644
--- a/platform/core/theming/_all-theme.scss
+++ b/platform/core/theming/_all-theme.scss
@@ -15,8 +15,8 @@
 * limitations under the License.
 */
 
-@import '../../../../@angular/material/theming';
-@import '../../../../@covalent/core/theming/all-theme';
+@import '../../../node_modules/@angular/material/theming';
+@import '../../../node_modules/@covalent/core/theming/all-theme';
 @import '../common/styles/buttons';
 @import '../common/styles/expansionPanels';
 @import '../common/styles/menus';

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/platform/systemjs-angular-loader.js
----------------------------------------------------------------------
diff --git a/platform/systemjs-angular-loader.js b/platform/systemjs-angular-loader.js
deleted file mode 100644
index 8e33bb5..0000000
--- a/platform/systemjs-angular-loader.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var templateUrlRegex = /templateUrl\s*:(\s*['"`](.*?)['"`]\s*)/gm;
-var stylesRegex = /styleUrls *:(\s*\[[^\]]*?\])/g;
-var stringRegex = /(['`"])((?:[^\\]\\\1|.)*?)\1/g;
-
-module.exports.translate = function (load) {
-    if (load.source.indexOf('moduleId') != -1) return load;
-
-    var url = document.createElement('a');
-    url.href = load.address;
-
-    var basePathParts = url.pathname.split('/');
-
-    basePathParts.pop();
-    var basePath = basePathParts.join('/');
-
-    var baseHref = document.createElement('a');
-    baseHref.href = this.baseURL;
-    baseHref = baseHref.pathname;
-
-    if (!baseHref.startsWith('/base/')) { // it is not karma
-        basePath = basePath.replace(baseHref, '');
-    }
-
-    load.source = load.source
-        .replace(templateUrlRegex, function (match, quote, url) {
-            var resolvedUrl = url;
-
-            if (url.startsWith('.')) {
-                resolvedUrl = basePath + url.substr(1);
-            }
-
-            return 'templateUrl: "' + resolvedUrl + '"';
-        })
-        .replace(stylesRegex, function (match, relativeUrls) {
-            var urls = [];
-
-            while ((match = stringRegex.exec(relativeUrls)) !== null) {
-                if (match[2].startsWith('.')) {
-                    urls.push('"' + basePath + match[2].substr(1) + '"');
-                } else {
-                    urls.push('"' + match[2] + '"');
-                }
-            }
-
-            return "styleUrls: [" + urls.join(', ') + "]";
-        });
-
-    return load;
-};

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/platform/systemjs.spec.config.js
----------------------------------------------------------------------
diff --git a/platform/systemjs.spec.config.js b/platform/systemjs.spec.config.js
index 9a1281f..1f51a7a 100644
--- a/platform/systemjs.spec.config.js
+++ b/platform/systemjs.spec.config.js
@@ -107,17 +107,6 @@
         },
         // packages tells the System loader how to load when no filename and/or no extension
         packages: {
-            app: {
-                defaultExtension: 'js',
-                meta: {
-                    './*.js': {
-                        loader: 'fds/systemjs-angular-loader.js'
-                    }
-                }
-            },
-            'fds/systemjs-angular-loader.js': {
-                loader: false
-            },
             'rxjs': {
                 defaultExtension: 'js'
             }

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/scripts/clean-install
----------------------------------------------------------------------
diff --git a/scripts/clean-install b/scripts/clean-install
new file mode 100644
index 0000000..a453550
--- /dev/null
+++ b/scripts/clean-install
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+set -e
+
+# build
+rm -rf ./target
+mkdir target
+cp -R ./webapp/ ./target/webapp
+cp -R ./platform/ ./target/platform
+cp package.json ./target/package.json
+cp index.html ./target/index.html
+cp karma.conf.js ./target/karma.conf.js
+cp karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp gh-pages.* ./target/
+cd ./target
+npm install
+npm run build:webapp
+npm run build:platform
+
+# test
+npm test

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/scripts/clean-install-skipTests
----------------------------------------------------------------------
diff --git a/scripts/clean-install-skipTests b/scripts/clean-install-skipTests
new file mode 100644
index 0000000..c326d70
--- /dev/null
+++ b/scripts/clean-install-skipTests
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+set -e
+
+# build
+rm -rf ./target
+mkdir target
+cp -R ./webapp/ ./target/webapp
+cp -R ./platform/ ./target/platform
+cp package.json ./target/package.json
+cp index.html ./target/index.html
+cp karma.conf.js ./target/karma.conf.js
+cp karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp gh-pages.* ./target/
+cd ./target
+npm install
+npm run build:webapp
+npm run build:platform

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/scripts/deploy-gh-pages
----------------------------------------------------------------------
diff --git a/scripts/deploy-gh-pages b/scripts/deploy-gh-pages
new file mode 100644
index 0000000..13470d5
--- /dev/null
+++ b/scripts/deploy-gh-pages
@@ -0,0 +1,21 @@
+#!/bin/bash
+npm run clean:install
+echo 'Build Complete'
+git branch -f gh-pages
+git checkout gh-pages
+echo 'Created and Checked out gh-pages branch'
+
+rm -rf ./node_modules/
+cp ./target/gh-pages.package.json ./package.json
+npm install
+mkdir ./node_modules/nifi-fds
+cp -R ./target/platform/ ./node_modules/nifi-fds/platform
+cp -R ./target/webapp/ ./webapp
+cp ./target/gh-pages.index.html ./index.html
+cp ./target/gh-pages.systemjs.config.js ./webapp/systemjs.config.js
+echo 'Tracking files'
+git add -A .
+echo 'Commiting files'
+git commit -a -m 'gh-pages update'
+echo 'Pushing files into gh-pages branch'
+git push apache gh-pages --force

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/scripts/dev-install
----------------------------------------------------------------------
diff --git a/scripts/dev-install b/scripts/dev-install
new file mode 100644
index 0000000..27ae97e
--- /dev/null
+++ b/scripts/dev-install
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+set -e
+
+# build
+cp -R ./webapp/ ./target/webapp
+cp -R ./platform/ ./target/platform
+cp package.json ./target/package.json
+cp index.html ./target/index.html
+cp karma.conf.js ./target/karma.conf.js
+cp karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp gh-pages.* ./target/
+cd ./target
+npm install
+npm run build:webapp
+npm run build:platform
+
+# test
+npm run test:dev

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/scripts/dev-install-skipTests
----------------------------------------------------------------------
diff --git a/scripts/dev-install-skipTests b/scripts/dev-install-skipTests
new file mode 100644
index 0000000..774750f
--- /dev/null
+++ b/scripts/dev-install-skipTests
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -e
+
+# build
+cp -R ./webapp/ ./target/webapp
+cp -R ./platform/ ./target/platform
+cp package.json ./target/package.json
+cp index.html ./target/index.html
+cp karma.conf.js ./target/karma.conf.js
+cp karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp gh-pages.* ./target/
+cd ./target
+npm install
+npm run build:webapp
+npm run build:platform

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.html
----------------------------------------------------------------------
diff --git a/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.html b/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.html
new file mode 100644
index 0000000..c283684
--- /dev/null
+++ b/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.html
@@ -0,0 +1,18 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<div>Hello Dialog!</div>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/43ea6622/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js
----------------------------------------------------------------------
diff --git a/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js b/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js
new file mode 100644
index 0000000..d3ead2b
--- /dev/null
+++ b/webapp/components/fluid-design-system/dialogs/demo/fds-demo-dialog.js
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var ngMaterial = require('@angular/material');
+var ngCore = require('@angular/core');
+
+/**
+ * NfRegistryEditBucketPolicy constructor.
+ *
+ * @param nfRegistryApi         The api service.
+ * @param nfRegistryService     The nf-registry.service module.
+ * @param activatedRoute        The angular route module.
+ * @param matDialogRef          The angular material dialog ref.
+ * @param data                  The data passed into this component.
+ * @constructor
+ */
+function FdsDemoDialog(matDialogRef, data) {
+    // Services
+    this.dialogRef = matDialogRef;
+    this.data = data;
+};
+
+FdsDemoDialog.prototype = {
+    constructor: FdsDemoDialog,
+
+    /**
+     * Cancel creation of a new policy and close dialog.
+     */
+    cancel: function () {
+        this.dialogRef.close();
+    }
+};
+
+FdsDemoDialog.annotations = [
+    new ngCore.Component({
+        template: require('./fds-demo-dialog.html!text')
+    })
+];
+
+FdsDemoDialog.parameters = [
+    ngMaterial.MatDialogRef,
+    ngMaterial.MAT_DIALOG_DATA
+];
+
+module.exports = FdsDemoDialog;


[5/7] nifi-fds git commit: gh-pages update

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 122d380..58da069 100644
--- a/package.json
+++ b/package.json
@@ -1,20 +1,12 @@
 {
-  "name": "nifi-fds",
+  "name": "nifi-fds-demo",
   "version": "0.0.0",
   "scripts": {
     "start": "./node_modules/http-server/bin/http-server .",
     "build:webapp": "./node_modules/grunt-cli/bin/grunt compile-fds-demo-styles",
-    "build:platform": "./node_modules/grunt-cli/bin/grunt compile-fds-styles",
-    "clean:install": "bash ./scripts/clean-install",
-    "clean:install:skipTests": "bash ./scripts/clean-install-skipTests",
-    "dev:install": "bash ./scripts/dev-install",
-    "dev:install:skipTests": "bash ./scripts/dev-install-skipTests",
-    "deploy:ghpages": "bash ./scripts/deploy-gh-pages",
-    "test": "./node_modules/protractor/bin/webdriver-manager update --gecko false && karma start karma.conf.js --single-run",
-    "test:dev": "./node_modules/protractor/bin/webdriver-manager update --gecko false && karma start karma.conf.js"
+    "build:platform": "npm install && cd ./node_modules/nifi-fds && npm install && npm run build && rm -rf ./node_modules && rm -rf ./package-lock.json"
   },
-  "description": "The Apache NiFi Fluid Design System module is an atomic reusable platform providing consistent set of UI/UX components for open source friendly web applications to consume.",
-  "module": "./platform/core/fluid-design-system.module.js",
+  "description": "The Apache NiFi Fluid Design System demo provides users with an example web application that consumes the NgModule and allows users to interact with the UI/UX components.",
   "keywords": [
     "fluid design system",
     "angular",
@@ -33,45 +25,35 @@
   },
   "license": "Apache License, Version 2.0",
   "dependencies": {
-    "jquery": "3.2.1",
-    "rxjs": "5.5.6",
-    "systemjs": "0.20.17",
-    "systemjs-plugin-text": "0.0.11",
-    "zone.js": "0.8.17",
-    "@angular/animations": "5.2.0",
-    "@angular/cdk": "5.2.0",
-    "@angular/common": "5.2.0",
-    "@angular/compiler": "5.2.0",
-    "@angular/core": "5.2.0",
-    "@angular/flex-layout": "5.0.0-beta.14",
-    "@angular/forms": "5.2.0",
-    "@angular/http": "5.2.0",
-    "@angular/material": "5.2.0",
-    "@angular/platform-browser": "5.2.0",
-    "@angular/platform-browser-dynamic": "5.2.0",
-    "@angular/router": "5.2.0",
-    "@covalent/core": "1.0.0",
+    "@angular/animations": "4.4.6",
+    "@angular/cdk": "2.0.0-beta.12",
+    "@angular/common": "4.4.6",
+    "@angular/compiler": "4.4.6",
+    "@angular/core": "4.4.6",
+    "@angular/flex-layout": "2.0.0-beta.9",
+    "@angular/forms": "4.4.6",
+    "@angular/http": "4.4.6",
+    "@angular/material": "2.0.0-beta.12",
+    "@angular/platform-browser": "4.4.6",
+    "@angular/platform-browser-dynamic": "4.4.6",
+    "@angular/router": "4.4.6",
+    "@covalent/core": "1.0.0-beta.8-1",
     "detect-libc": "1.0.3",
     "font-awesome": "4.7.0",
     "hammerjs": "2.0.8",
-    "roboto-fontface": "0.7.0"
+    "jquery": "3.2.1",
+    "node-gyp": "3.6.2",
+    "roboto-fontface": "0.7.0",
+    "rxjs": "5.4.3",
+    "systemjs": "0.20.17",
+    "systemjs-plugin-text": "0.0.11",
+    "zone.js": "0.8.7"
   },
   "devDependencies": {
     "grunt": "0.4.5",
-    "grunt-bump": "0.8.0",
     "grunt-cli": "1.2.0",
     "grunt-contrib-compress": "1.4.3",
     "grunt-sass": "2.0.0",
-    "http-server": "0.11.1",
-    "jasmine-core": "2.8.0",
-    "karma": "1.7.1",
-    "karma-chrome-launcher": "2.2.0",
-    "karma-cli": "1.0.1",
-    "karma-coverage": "1.1.1",
-    "karma-jasmine": "1.1.1",
-    "karma-jasmine-html-reporter": "0.2.2",
-    "karma-spec-reporter": "0.0.31",
-    "load-grunt-tasks": "3.5.2",
-    "protractor": "4.0.14"
+    "load-grunt-tasks": "3.5.2"
   }
 }

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/webapp/css/fds-demo.min.css
----------------------------------------------------------------------
diff --git a/webapp/css/fds-demo.min.css b/webapp/css/fds-demo.min.css
new file mode 100644
index 0000000..4e1166e
--- /dev/null
+++ b/webapp/css/fds-demo.min.css
@@ -0,0 +1,3 @@
+@-moz-document url-prefix(){[layout-fill]{margin:0;width:100%;min-height:100%;height:100%}}body{background:#EEEFF0;background-size:40%}#fds-app-container{margin:0;width:100%;height:100%}#fds-toolbar{min-width:1045px;background-color:#FFFFFF;position:absolute;z-index:1000;background:#2C3E44}#fds-toolbar .mat-icon-button{color:#eee;font-size:20px;margin:0}#fds-toolbar .mat-select-value-text,#fds-toolbar .mat-select-arrow{color:white}#fds-toolbar span,#fds-toolbar .link{color:#eee;font-weight:lighter}#fds-perspectives-container{position:absolute;top:64px;left:0px;right:0px;bottom:0px;min-height:370px;min-width:1045px;overflow:auto;background:#EEEFF0;background-size:40%}#loading-spinner{position:absolute;top:calc(50% - 50px);left:calc(50% - 50px);z-index:2}mat-sidenav{width:40%;min-width:418px}.sidenav-content{position:absolute;bottom:60px;top:80px;right:0px;left:0px;overflow:auto}.fa-rotate-45{-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-t
 ransform:rotate(45deg);transform:rotate(45deg)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block !important}.info{color:#1291c1}.authorized{color:#D14A50}.suspended{color:#429929}.nonconfigurable{background:#b2b8c1}.selected-nonconfigurable{background:repeating-linear-gradient(-45deg, #eee, #eee 10px, #fff 10px, #fff 20px) !important}.fds-button-container{position:absolute;bottom:0px;height:64px;left:0px;right:0px;border-top:1px solid #ccc}.fds-button-container .done-button{float:right;margin-right:15px;margin-top:15px}.td-expansion-content{background:#F8F9F9}.mat-elevation-z0{box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}.mat-elevation-z1{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}.mat-elevation-z2{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 
 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.mat-elevation-z3{box-shadow:0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)}.mat-elevation-z4{box-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)}.mat-elevation-z5{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)}.mat-elevation-z6{box-shadow:0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)}.mat-elevation-z7{box-shadow:0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)}.mat-elevation-z8{box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.mat-elevation-z9{box-shadow:0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)}.mat-elevation-z10{box-shadow:0px
  6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)}.mat-elevation-z11{box-shadow:0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)}.mat-elevation-z12{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)}.mat-elevation-z13{box-shadow:0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)}.mat-elevation-z14{box-shadow:0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)}.mat-elevation-z15{box-shadow:0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)}.mat-elevation-z16{box-shadow:0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)}.mat-elevation-z17{box-shadow:0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6p
 x 32px 5px rgba(0,0,0,0.12)}.mat-elevation-z18{box-shadow:0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)}.mat-elevation-z19{box-shadow:0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)}.mat-elevation-z20{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)}.mat-elevation-z21{box-shadow:0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)}.mat-elevation-z22{box-shadow:0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)}.mat-elevation-z23{box-shadow:0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)}.mat-elevation-z24{box-shadow:0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)}.mat-h1,.mat-headline,.mat-typogr
 aphy h1{font:400 24px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h2,.mat-title,.mat-typography h2{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h3,.mat-subheading-2,.mat-typography h3{font:400 16px/28px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h4,.mat-subheading-1,.mat-typography h4{font:400 15px/24px Roboto, "Helvetica Neue", sans-serif;margin:0 0 16px}.mat-h5,.mat-typography h5{font:400 11.62px/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-h6,.mat-typography h6{font:400 9.38px/20px Roboto, "Helvetica Neue", sans-serif;margin:0 0 12px}.mat-body-strong,.mat-body-2{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-body,.mat-body-1,.mat-typography{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-body p,.mat-body-1 p,.mat-typography p{margin:0 0 12px}.mat-small,.mat-caption{font:400 12px/20px Roboto, "Helvetica Neue", sans-serif}.mat-display-4,.mat-typography .mat-display-4{font:
 300 112px/112px Roboto, "Helvetica Neue", sans-serif;margin:0 0 56px;letter-spacing:-0.05em}.mat-display-3,.mat-typography .mat-display-3{font:400 56px/56px Roboto, "Helvetica Neue", sans-serif;margin:0 0 64px;letter-spacing:-0.02em}.mat-display-2,.mat-typography .mat-display-2{font:400 45px/48px Roboto, "Helvetica Neue", sans-serif;margin:0 0 64px;letter-spacing:-0.005em}.mat-display-1,.mat-typography .mat-display-1{font:400 34px/40px Roboto, "Helvetica Neue", sans-serif;margin:0 0 64px}.mat-button,.mat-raised-button,.mat-icon-button,.mat-stroked-button,.mat-flat-button,.mat-fab,.mat-mini-fab{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-button-toggle{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-card-title{font-size:24px;font-weight:400}.mat-card-subtitle,.mat-card-content,.mat-card-header .mat-card-title{font-size:14px}.mat-checkbox{font-family:Roboto, "Helvetica Neue", sans-
 serif}.mat-checkbox-layout .mat-checkbox-label{line-height:24px}.mat-chip{font-size:13px;line-height:18px}.mat-chip .mat-chip-remove.mat-icon{font-size:18px}.mat-table{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-header-cell{font-size:12px;font-weight:500}.mat-cell{font-size:14px}.mat-calendar{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-calendar-body{font-size:13px}.mat-calendar-body-label,.mat-calendar-period-button{font-size:14px;font-weight:500}.mat-calendar-table-header th{font-size:11px;font-weight:400}.mat-dialog-title{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif}.mat-expansion-panel-header{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:15px;font-weight:400}.mat-expansion-panel-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-form-field{font-size:inherit;font-weight:400;line-height:1.125;font-family:Roboto, "Helvetica Neue", sans-serif}.mat-form-field-wrapper{padding-bottom:1.25em}.mat-form-field-prefix .mat-icon,.m
 at-form-field-suffix .mat-icon{font-size:150%;line-height:1.125}.mat-form-field-prefix .mat-icon-button,.mat-form-field-suffix .mat-icon-button{height:1.5em;width:1.5em}.mat-form-field-prefix .mat-icon-button .mat-icon,.mat-form-field-suffix .mat-icon-button .mat-icon{height:1.125em;line-height:1.125}.mat-form-field-infix{padding:.4375em 0;border-top:.84375em solid transparent}.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label,.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.333333333%}.mat-form-field-can-float .mat-form-field-autofill-control:-webkit-autofill+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00101px);-ms-transform:translateY(-1.28124em) scale(.75);width:133.333343333%}.mat-
 form-field-can-float .mat-input-server[label]:not(:label-shown)+.mat-form-field-label-wrapper .mat-form-field-label{transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(0.00102px);-ms-transform:translateY(-1.28123em) scale(.75);width:133.333353333%}.mat-form-field-label-wrapper{top:-.84375em;padding-top:.84375em}.mat-form-field-label{top:1.28125em}.mat-form-field-underline{bottom:1.25em}.mat-form-field-subscript-wrapper{font-size:75%;margin-top:.5416666667em;top:calc(100% - 1.6666666667em)}.mat-grid-tile-header,.mat-grid-tile-footer{font-size:14px}.mat-grid-tile-header .mat-line,.mat-grid-tile-footer .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-grid-tile-header .mat-line:nth-child(n+2),.mat-grid-tile-footer .mat-line:nth-child(n+2){font-size:12px}input.mat-input-element{margin-top:-.0625em}.mat-menu-item{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px;font-weight:400}.mat-paginator,.
 mat-paginator-page-size .mat-select-trigger{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.mat-radio-button{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-select-trigger{height:1.125em}.mat-slide-toggle-content{font:400 14px/20px Roboto, "Helvetica Neue", sans-serif}.mat-slider-thumb-label-text{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-stepper-vertical,.mat-stepper-horizontal{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-step-label{font-size:14px;font-weight:400}.mat-step-label-selected{font-size:14px;font-weight:500}.mat-tab-group{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-tab-label,.mat-tab-link{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-toolbar,.mat-toolbar h1,.mat-toolbar h2,.mat-toolbar h3,.mat-toolbar h4,.mat-toolbar h5,.mat-toolbar h6{font:500 20px/32px Roboto, "Helvetica Neue", sans-serif
 ;margin:0}.mat-tooltip{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:10px;padding-top:6px;padding-bottom:6px}.mat-tooltip-handset{font-size:14px;padding-top:9px;padding-bottom:9px}.mat-list-item{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list-option{font-family:Roboto, "Helvetica Neue", sans-serif}.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{font-size:16px}.mat-list .mat-list-item .mat-line,.mat-nav-list .mat-list-item .mat-line,.mat-selection-list .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list .mat-list-item .mat-line:nth-child(n+2),.mat-selection-list .mat-list-item .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{font-size:16px}.mat-list .mat-list-option .mat-line,.mat-nav-list .mat-list-option 
 .mat-line,.mat-selection-list .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list .mat-list-option .mat-line:nth-child(n+2){font-size:14px}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.mat-list[dense] .mat-list-item,.mat-nav-list[dense] .mat-list-item,.mat-selection-list[dense] .mat-list-item{font-size:12px}.mat-list[dense] .mat-list-item .mat-line,.mat-nav-list[dense] .mat-list-item .mat-line,.mat-selection-list[dense] .mat-list-item .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-item .mat-line:nth-child(n+2),.mat-selection-
 list[dense] .mat-list-item .mat-line:nth-child(n+2){font-size:12px}.mat-list[dense] .mat-list-option,.mat-nav-list[dense] .mat-list-option,.mat-selection-list[dense] .mat-list-option{font-size:12px}.mat-list[dense] .mat-list-option .mat-line,.mat-nav-list[dense] .mat-list-option .mat-line,.mat-selection-list[dense] .mat-list-option .mat-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;box-sizing:border-box}.mat-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-nav-list[dense] .mat-list-option .mat-line:nth-child(n+2),.mat-selection-list[dense] .mat-list-option .mat-line:nth-child(n+2){font-size:12px}.mat-list[dense] .mat-subheader,.mat-nav-list[dense] .mat-subheader,.mat-selection-list[dense] .mat-subheader{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:500}.mat-option{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px}.mat-optgroup-label{font:500 14px/24px Roboto, "Helvetica Neue", sans-serif}.mat-simple
 -snackbar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.mat-simple-snackbar-action{line-height:1;font-family:inherit;font-size:inherit;font-weight:500}.mat-ripple{overflow:hidden}@media screen and (-ms-high-contrast: active){.mat-ripple{display:none}}.mat-ripple.mat-ripple-unbounded{overflow:visible}.mat-ripple-element{position:absolute;border-radius:50%;pointer-events:none;transition:opacity,transform 0ms cubic-bezier(0, 0, 0.2, 1);transform:scale(0)}.cdk-visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;outline:0;-webkit-appearance:none;-moz-appearance:none}.cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:1000}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000}.cdk-overlay-backdro
 p{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:transparent;transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,0.288)}.cdk-overlay-transparent-backdrop,.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}.mat-ripple-element{background-color:rgba(0,0,0,0.1)}.mat-option{color:rgba(0,0,0,0.87)}.mat-option:hover:not(.mat-option-disabled),.mat-option:focus:not(.mat-option-disabled){background:rgba(0,0,0,0.04)}.mat-primary .mat-option.mat-selected:not(.mat-option-disabled){color:#9e737d}.mat-accent .mat-option.mat-selected:not(.mat-option-disabled){color:#d0dbe0}.mat-warn .mat-option.mat-selected:not(.mat-option-disabled){color:#ef6162}.mat-option.mat-selected:not(.mat-option-multiple):not(.mat-option-disabled){bac
 kground:rgba(0,0,0,0.04)}.mat-option.mat-active{background:rgba(0,0,0,0.04);color:rgba(0,0,0,0.87)}.mat-option.mat-option-disabled{color:rgba(0,0,0,0.38)}.mat-optgroup-label{color:rgba(0,0,0,0.54)}.mat-optgroup-disabled .mat-optgroup-label{color:rgba(0,0,0,0.38)}.mat-pseudo-checkbox{color:rgba(0,0,0,0.54)}.mat-pseudo-checkbox::after{color:#fafafa}.mat-pseudo-checkbox-checked,.mat-pseudo-checkbox-indeterminate,.mat-accent .mat-pseudo-checkbox-checked,.mat-accent .mat-pseudo-checkbox-indeterminate{background:#d0dbe0}.mat-primary .mat-pseudo-checkbox-checked,.mat-primary .mat-pseudo-checkbox-indeterminate{background:#9e737d}.mat-warn .mat-pseudo-checkbox-checked,.mat-warn .mat-pseudo-checkbox-indeterminate{background:#ef6162}.mat-pseudo-checkbox-checked.mat-pseudo-checkbox-disabled,.mat-pseudo-checkbox-indeterminate.mat-pseudo-checkbox-disabled{background:#b0b0b0}.mat-app-background{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-theme-loaded-marker{display:none}.mat-autocomplete-
 panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover){background:#fff}.mat-autocomplete-panel .mat-option.mat-selected:not(.mat-active):not(:hover):not(.mat-option-disabled){color:rgba(0,0,0,0.87)}.mat-button,.mat-icon-button,.mat-stroked-button{background:transparent}.mat-button.mat-primary .mat-button-focus-overlay,.mat-icon-button.mat-primary .mat-button-focus-overlay,.mat-stroked-button.mat-primary .mat-button-focus-overlay{background-color:rgba(158,115,125,0.12)}.mat-button.mat-accent .mat-button-focus-overlay,.mat-icon-button.mat-accent .mat-button-focus-overlay,.mat-stroked-button.mat-accent .mat-button-focus-overlay{background-color:rgba(208,219,224,0.12)}.mat-button.mat-warn .mat-button-focus-overlay,.mat-icon-button.mat-warn .mat-button-focus-overlay,.mat-stroked-button.mat-warn .mat-button-focus-overlay{background-color:rgba(239,97,98,0.12)}.mat-button[disabled] .mat-button-focus-overlay,.mat-icon-button
 [disabled] .mat-button-focus-overlay,.mat-stroked-button[disabled] .mat-button-focus-overlay{background-color:transparent}.mat-button.mat-primary,.mat-icon-button.mat-primary,.mat-stroked-button.mat-primary{color:#9e737d}.mat-button.mat-accent,.mat-icon-button.mat-accent,.mat-stroked-button.mat-accent{color:#d0dbe0}.mat-button.mat-warn,.mat-icon-button.mat-warn,.mat-stroked-button.mat-warn{color:#ef6162}.mat-button.mat-primary[disabled],.mat-button.mat-accent[disabled],.mat-button.mat-warn[disabled],.mat-button[disabled][disabled],.mat-icon-button.mat-primary[disabled],.mat-icon-button.mat-accent[disabled],.mat-icon-button.mat-warn[disabled],.mat-icon-button[disabled][disabled],.mat-stroked-button.mat-primary[disabled],.mat-stroked-button.mat-accent[disabled],.mat-stroked-button.mat-warn[disabled],.mat-stroked-button[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-raised-button,.mat-fab,.mat-mini-fab{color:rgba(0,0,0,0.87);background-color:#fff}.mat-raised-button.mat-primary,.mat-fa
 b.mat-primary,.mat-mini-fab.mat-primary{color:rgba(255,255,255,0.87)}.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{color:rgba(255,255,255,0.87)}.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{color:rgba(255,255,255,0.87)}.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-raised-button.mat-primary,.mat-fab.mat-primary,.mat-mini-fab.mat-primary{background-color:#9e737d}.mat-raised-button.mat-accent,.mat-fab.mat-accent,.mat-mini-fab.mat-accent{background-color:#d0dbe0}.mat-raised-button.mat-warn,.mat-fab.mat-warn,.mat-mini-fab.mat-warn{background-color:
 #ef6162}.mat-raised-button.mat-primary[disabled],.mat-raised-button.mat-accent[disabled],.mat-raised-button.mat-warn[disabled],.mat-raised-button[disabled][disabled],.mat-fab.mat-primary[disabled],.mat-fab.mat-accent[disabled],.mat-fab.mat-warn[disabled],.mat-fab[disabled][disabled],.mat-mini-fab.mat-primary[disabled],.mat-mini-fab.mat-accent[disabled],.mat-mini-fab.mat-warn[disabled],.mat-mini-fab[disabled][disabled]{background-color:rgba(0,0,0,0.12)}.mat-raised-button.mat-primary .mat-ripple-element,.mat-fab.mat-primary .mat-ripple-element,.mat-mini-fab.mat-primary .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-raised-button.mat-accent .mat-ripple-element,.mat-fab.mat-accent .mat-ripple-element,.mat-mini-fab.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-raised-button.mat-warn .mat-ripple-element,.mat-fab.mat-warn .mat-ripple-element,.mat-mini-fab.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-button.mat-primar
 y .mat-ripple-element{background-color:rgba(158,115,125,0.1)}.mat-button.mat-accent .mat-ripple-element{background-color:rgba(208,219,224,0.1)}.mat-button.mat-warn .mat-ripple-element{background-color:rgba(239,97,98,0.1)}.mat-flat-button{color:rgba(0,0,0,0.87);background-color:#fff}.mat-flat-button.mat-primary{color:rgba(255,255,255,0.87)}.mat-flat-button.mat-accent{color:rgba(255,255,255,0.87)}.mat-flat-button.mat-warn{color:rgba(255,255,255,0.87)}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled]{color:rgba(0,0,0,0.26)}.mat-flat-button.mat-primary{background-color:#9e737d}.mat-flat-button.mat-accent{background-color:#d0dbe0}.mat-flat-button.mat-warn{background-color:#ef6162}.mat-flat-button.mat-primary[disabled],.mat-flat-button.mat-accent[disabled],.mat-flat-button.mat-warn[disabled],.mat-flat-button[disabled][disabled]{background-color:rgba(0,0,0,0.12)}.mat-flat-button.mat-primary 
 .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-flat-button.mat-accent .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-flat-button.mat-warn .mat-ripple-element{background-color:rgba(255,255,255,0.2)}.mat-icon-button.mat-primary .mat-ripple-element{background-color:rgba(158,115,125,0.2)}.mat-icon-button.mat-accent .mat-ripple-element{background-color:rgba(208,219,224,0.2)}.mat-icon-button.mat-warn .mat-ripple-element{background-color:rgba(239,97,98,0.2)}.mat-button-toggle{color:rgba(0,0,0,0.38)}.mat-button-toggle.cdk-focused .mat-button-toggle-focus-overlay{background-color:rgba(0,0,0,0.12)}.mat-button-toggle-checked{background-color:#e0e0e0;color:rgba(0,0,0,0.54)}.mat-button-toggle-disabled{background-color:#eee;color:rgba(0,0,0,0.26)}.mat-button-toggle-disabled.mat-button-toggle-checked{background-color:#bdbdbd}.mat-card{background:#fff;color:rgba(0,0,0,0.87)}.mat-card-subtitle{color:rgba(0,0,0,0.54)}.mat-checkbox-frame{border-color:rgba(0,0,0,0.54)}
 .mat-checkbox-checkmark{fill:#fafafa}.mat-checkbox-checkmark-path{stroke:#fafafa !important}.mat-checkbox-mixedmark{background-color:#fafafa}.mat-checkbox-indeterminate.mat-primary .mat-checkbox-background,.mat-checkbox-checked.mat-primary .mat-checkbox-background{background-color:#9e737d}.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,.mat-checkbox-checked.mat-accent .mat-checkbox-background{background-color:#d0dbe0}.mat-checkbox-indeterminate.mat-warn .mat-checkbox-background,.mat-checkbox-checked.mat-warn .mat-checkbox-background{background-color:#ef6162}.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background,.mat-checkbox-disabled.mat-checkbox-indeterminate .mat-checkbox-background{background-color:#b0b0b0}.mat-checkbox-disabled:not(.mat-checkbox-checked) .mat-checkbox-frame{border-color:#b0b0b0}.mat-checkbox-disabled .mat-checkbox-label{color:#b0b0b0}.mat-checkbox:not(.mat-checkbox-disabled).mat-primary .mat-checkbox-ripple .mat-ripple-element{backg
 round-color:rgba(158,115,125,0.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-accent .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(208,219,224,0.26)}.mat-checkbox:not(.mat-checkbox-disabled).mat-warn .mat-checkbox-ripple .mat-ripple-element{background-color:rgba(239,97,98,0.26)}.mat-chip:not(.mat-basic-chip){background-color:#e0e0e0;color:rgba(0,0,0,0.87)}.mat-chip:not(.mat-basic-chip) .mat-chip-remove{color:rgba(0,0,0,0.87);opacity:0.4}.mat-chip:not(.mat-basic-chip) .mat-chip-remove:hover{opacity:0.54}.mat-chip.mat-chip-selected.mat-primary{background-color:#9e737d;color:rgba(255,255,255,0.87)}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove{color:rgba(255,255,255,0.87);opacity:0.4}.mat-chip.mat-chip-selected.mat-primary .mat-chip-remove:hover{opacity:0.54}.mat-chip.mat-chip-selected.mat-warn{background-color:#ef6162;color:rgba(255,255,255,0.87)}.mat-chip.mat-chip-selected.mat-warn .mat-chip-remove{color:rgba(255,255,255,0.87);opacity:0.4}.mat-chip.mat-c
 hip-selected.mat-warn .mat-chip-remove:hover{opacity:0.54}.mat-chip.mat-chip-selected.mat-accent{background-color:#d0dbe0;color:rgba(255,255,255,0.87)}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove{color:rgba(255,255,255,0.87);opacity:0.4}.mat-chip.mat-chip-selected.mat-accent .mat-chip-remove:hover{opacity:0.54}.mat-table{background:#fff}.mat-row,.mat-header-row{border-bottom-color:rgba(0,0,0,0.12)}.mat-header-cell{color:rgba(0,0,0,0.54)}.mat-cell{color:rgba(0,0,0,0.87)}.mat-datepicker-content{background-color:#fff;color:rgba(0,0,0,0.87)}.mat-calendar-arrow{border-top-color:rgba(0,0,0,0.54)}.mat-calendar-next-button,.mat-calendar-previous-button{color:rgba(0,0,0,0.54)}.mat-calendar-table-header{color:rgba(0,0,0,0.38)}.mat-calendar-table-header-divider::after{background:rgba(0,0,0,0.12)}.mat-calendar-body-label{color:rgba(0,0,0,0.54)}.mat-calendar-body-cell-content{color:rgba(0,0,0,0.87);border-color:transparent}.mat-calendar-body-disabled>.mat-calendar-body-cell-content:no
 t(.mat-calendar-body-selected){color:rgba(0,0,0,0.38)}:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected),.cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected){background-color:rgba(0,0,0,0.04)}.mat-calendar-body-selected{background-color:#9e737d;color:rgba(255,255,255,0.87)}.mat-calendar-body-disabled>.mat-calendar-body-selected{background-color:rgba(158,115,125,0.4)}.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.38)}.mat-calendar-body-today.mat-calendar-body-selected{box-shadow:inset 0 0 0 1px rgba(255,255,255,0.87)}.mat-calendar-body-disabled>.mat-calendar-body-today:not(.mat-calendar-body-selected){border-color:rgba(0,0,0,0.18)}.mat-datepicker-toggle-active{color:#9e737d}.mat-dialog-container{background:#fff;color:rgba(0,0
 ,0,0.87)}.mat-divider{border-top-color:rgba(0,0,0,0.12)}.mat-divider-vertical{border-right-color:rgba(0,0,0,0.12)}.mat-expansion-panel{background:#fff;color:rgba(0,0,0,0.87)}.mat-action-row{border-top-color:rgba(0,0,0,0.12)}.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled='true']).cdk-keyboard-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled='true']).cdk-program-focused,.mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:not([aria-disabled='true']):hover{background:rgba(0,0,0,0.04)}.mat-expansion-panel-header-title{color:rgba(0,0,0,0.87)}.mat-expansion-panel-header-description,.mat-expansion-indicator::after{color:rgba(0,0,0,0.54)}.mat-expansion-panel-header[aria-disabled='true']{color:rgba(0,0,0,0.26)}.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-title,.mat-expansion-panel-header[aria-disabled='true'] .mat-expansion-panel-header-description{color:inher
 it}.mat-form-field-label{color:rgba(0,0,0,0.54)}.mat-hint{color:rgba(0,0,0,0.54)}.mat-focused .mat-form-field-label{color:#9e737d}.mat-focused .mat-form-field-label.mat-accent{color:#d0dbe0}.mat-focused .mat-form-field-label.mat-warn{color:#ef6162}.mat-focused .mat-form-field-required-marker{color:#d0dbe0}.mat-form-field-underline{background-color:rgba(0,0,0,0.42)}.mat-form-field-disabled .mat-form-field-underline{background-image:linear-gradient(to right, rgba(0,0,0,0.42) 0%, rgba(0,0,0,0.42) 33%, transparent 0%);background-size:4px 1px;background-repeat:repeat-x}.mat-form-field-ripple{background-color:#9e737d}.mat-form-field-ripple.mat-accent{background-color:#d0dbe0}.mat-form-field-ripple.mat-warn{background-color:#ef6162}.mat-form-field-invalid .mat-form-field-label{color:#ef6162}.mat-form-field-invalid .mat-form-field-label.mat-accent,.mat-form-field-invalid .mat-form-field-label .mat-form-field-required-marker{color:#ef6162}.mat-form-field-invalid .mat-form-field-ripple{backgr
 ound-color:#ef6162}.mat-error{color:#ef6162}.mat-icon.mat-primary{color:#9e737d}.mat-icon.mat-accent{color:#d0dbe0}.mat-icon.mat-warn{color:#ef6162}.mat-input-element:disabled{color:rgba(0,0,0,0.38)}.mat-input-element{caret-color:#9e737d}.mat-input-element::placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-moz-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element::-webkit-input-placeholder{color:rgba(0,0,0,0.42)}.mat-input-element:-ms-input-placeholder{color:rgba(0,0,0,0.42)}.mat-accent .mat-input-element{caret-color:#d0dbe0}.mat-warn .mat-input-element,.mat-form-field-invalid .mat-input-element{caret-color:#ef6162}.mat-list .mat-list-item,.mat-nav-list .mat-list-item,.mat-selection-list .mat-list-item{color:rgba(0,0,0,0.87)}.mat-list .mat-list-option,.mat-nav-list .mat-list-option,.mat-selection-list .mat-list-option{color:rgba(0,0,0,0.87)}.mat-list .mat-subheader,.mat-nav-list .mat-subheader,.mat-selection-list .mat-subheader{color:rgba(0,0,0,0.54)}.mat-list-item-disabled{ba
 ckground-color:#eee}.mat-nav-list .mat-list-item{outline:none}.mat-nav-list .mat-list-item:hover,.mat-nav-list .mat-list-item.mat-list-item-focus{background:rgba(0,0,0,0.04)}.mat-list-option{outline:none}.mat-list-option:hover,.mat-list-option.mat-list-item-focus{background:rgba(0,0,0,0.04)}.mat-menu-panel{background:#fff}.mat-menu-item{background:transparent;color:rgba(0,0,0,0.87)}.mat-menu-item[disabled]{color:rgba(0,0,0,0.38)}.mat-menu-item .mat-icon:not([color]),.mat-menu-item-submenu-trigger::after{color:rgba(0,0,0,0.54)}.mat-menu-item:hover:not([disabled]),.mat-menu-item.cdk-program-focused:not([disabled]),.mat-menu-item.cdk-keyboard-focused:not([disabled]),.mat-menu-item-highlighted:not([disabled]){background:rgba(0,0,0,0.04)}.mat-paginator{background:#fff}.mat-paginator,.mat-paginator-page-size .mat-select-trigger{color:rgba(0,0,0,0.54)}.mat-paginator-decrement,.mat-paginator-increment{border-top:2px solid rgba(0,0,0,0.54);border-right:2px solid rgba(0,0,0,0.54)}.mat-paginat
 or-first,.mat-paginator-last{border-top:2px solid rgba(0,0,0,0.54)}.mat-icon-button[disabled] .mat-paginator-decrement,.mat-icon-button[disabled] .mat-paginator-increment,.mat-icon-button[disabled] .mat-paginator-first,.mat-icon-button[disabled] .mat-paginator-last{border-color:rgba(0,0,0,0.38)}.mat-progress-bar-background{fill:#915d69}.mat-progress-bar-buffer{background-color:#915d69}.mat-progress-bar-fill::after{background-color:#9e737d}.mat-progress-bar.mat-accent .mat-progress-bar-background{fill:#ccc}.mat-progress-bar.mat-accent .mat-progress-bar-buffer{background-color:#ccc}.mat-progress-bar.mat-accent .mat-progress-bar-fill::after{background-color:#d0dbe0}.mat-progress-bar.mat-warn .mat-progress-bar-background{fill:#d14a50}.mat-progress-bar.mat-warn .mat-progress-bar-buffer{background-color:#d14a50}.mat-progress-bar.mat-warn .mat-progress-bar-fill::after{background-color:#ef6162}.mat-progress-spinner circle,.mat-spinner circle{stroke:#9e737d}.mat-progress-spinner.mat-accent c
 ircle,.mat-spinner.mat-accent circle{stroke:#d0dbe0}.mat-progress-spinner.mat-warn circle,.mat-spinner.mat-warn circle{stroke:#ef6162}.mat-radio-outer-circle{border-color:rgba(0,0,0,0.54)}.mat-radio-disabled .mat-radio-outer-circle{border-color:rgba(0,0,0,0.38)}.mat-radio-disabled .mat-radio-ripple .mat-ripple-element,.mat-radio-disabled .mat-radio-inner-circle{background-color:rgba(0,0,0,0.38)}.mat-radio-disabled .mat-radio-label-content{color:rgba(0,0,0,0.38)}.mat-radio-button.mat-primary.mat-radio-checked .mat-radio-outer-circle{border-color:#9e737d}.mat-radio-button.mat-primary .mat-radio-inner-circle{background-color:#9e737d}.mat-radio-button.mat-primary .mat-radio-ripple .mat-ripple-element{background-color:rgba(158,115,125,0.26)}.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#d0dbe0}.mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#d0dbe0}.mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element{background-col
 or:rgba(208,219,224,0.26)}.mat-radio-button.mat-warn.mat-radio-checked .mat-radio-outer-circle{border-color:#ef6162}.mat-radio-button.mat-warn .mat-radio-inner-circle{background-color:#ef6162}.mat-radio-button.mat-warn .mat-radio-ripple .mat-ripple-element{background-color:rgba(239,97,98,0.26)}.mat-select-content,.mat-select-panel-done-animating{background:#fff}.mat-select-value{color:rgba(0,0,0,0.87)}.mat-select-placeholder{color:rgba(0,0,0,0.42)}.mat-select-disabled .mat-select-value{color:rgba(0,0,0,0.38)}.mat-select-arrow{color:rgba(0,0,0,0.54)}.mat-select-panel .mat-option.mat-selected:not(.mat-option-multiple){background:rgba(0,0,0,0.12)}.mat-form-field.mat-focused.mat-primary .mat-select-arrow{color:#9e737d}.mat-form-field.mat-focused.mat-accent .mat-select-arrow{color:#d0dbe0}.mat-form-field.mat-focused.mat-warn .mat-select-arrow{color:#ef6162}.mat-form-field .mat-select.mat-select-invalid .mat-select-arrow{color:#ef6162}.mat-form-field .mat-select.mat-select-disabled .mat-s
 elect-arrow{color:rgba(0,0,0,0.38)}.mat-drawer-container{background-color:#fafafa;color:rgba(0,0,0,0.87)}.mat-drawer{background-color:#fff;color:rgba(0,0,0,0.87)}.mat-drawer.mat-drawer-push{background-color:#fff}.mat-drawer-backdrop.mat-drawer-shown{background-color:rgba(0,0,0,0.6)}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#d0dbe0}.mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(208,219,224,0.5)}.mat-slide-toggle:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,0.06)}.mat-slide-toggle .mat-ripple-element{background-color:rgba(208,219,224,0.12)}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#9e737d}.mat-slide-toggle.mat-primary.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(158,115,125,0.5)}.mat-slide-toggle.mat-primary:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,0.06)}.mat
 -slide-toggle.mat-primary .mat-ripple-element{background-color:rgba(158,115,125,0.12)}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb{background-color:#ef6162}.mat-slide-toggle.mat-warn.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar{background-color:rgba(239,97,98,0.5)}.mat-slide-toggle.mat-warn:not(.mat-checked) .mat-ripple-element{background-color:rgba(0,0,0,0.06)}.mat-slide-toggle.mat-warn .mat-ripple-element{background-color:rgba(239,97,98,0.12)}.mat-disabled .mat-slide-toggle-thumb{background-color:#bdbdbd}.mat-disabled .mat-slide-toggle-bar{background-color:rgba(0,0,0,0.1)}.mat-slide-toggle-thumb{background-color:#fafafa}.mat-slide-toggle-bar{background-color:rgba(0,0,0,0.38)}.mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-primary .mat-slider-track-fill,.mat-primary .mat-slider-thumb,.mat-primary .mat-slider-thumb-label{background-color:#9e737d}.mat-primary .mat-slider-thumb-label-text{color:rgba(255,255,255,0.87)}.ma
 t-accent .mat-slider-track-fill,.mat-accent .mat-slider-thumb,.mat-accent .mat-slider-thumb-label{background-color:#d0dbe0}.mat-accent .mat-slider-thumb-label-text{color:rgba(255,255,255,0.87)}.mat-warn .mat-slider-track-fill,.mat-warn .mat-slider-thumb,.mat-warn .mat-slider-thumb-label{background-color:#ef6162}.mat-warn .mat-slider-thumb-label-text{color:rgba(255,255,255,0.87)}.mat-slider-focus-ring{background-color:rgba(208,219,224,0.2)}.mat-slider:hover .mat-slider-track-background,.cdk-focused .mat-slider-track-background{background-color:rgba(0,0,0,0.38)}.mat-slider-disabled .mat-slider-track-background,.mat-slider-disabled .mat-slider-track-fill,.mat-slider-disabled .mat-slider-thumb{background-color:rgba(0,0,0,0.26)}.mat-slider-disabled:hover .mat-slider-track-background{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value .mat-slider-focus-ring{background-color:rgba(0,0,0,0.12)}.mat-slider-min-value.mat-slider-thumb-label-showing .mat-slider-thumb,.mat-slider-min-value.ma
 t-slider-thumb-label-showing .mat-slider-thumb-label{background-color:rgba(0,0,0,0.87)}.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb,.mat-slider-min-value.mat-slider-thumb-label-showing.cdk-focused .mat-slider-thumb-label{background-color:rgba(0,0,0,0.26)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing) .mat-slider-thumb{border-color:rgba(0,0,0,0.26);background-color:transparent}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused .mat-slider-thumb{border-color:rgba(0,0,0,0.38)}.mat-slider-min-value:not(.mat-slider-thumb-label-showing):hover.mat-slider-disabled .mat-slider-thumb,.mat-slider-min-value:not(.mat-slider-thumb-label-showing).cdk-focused.mat-slider-disabled .mat-slider-thumb{border-color:rgba(0,0,0,0.26)}.mat-slider-has-ticks .mat-slider-wrapper::after{border-color:rgba(0,0,0,0.7)}.mat-slider-horizontal .mat-slider-ticks{backg
 round-image:repeating-linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent);background-image:-moz-repeating-linear-gradient(0.0001deg, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-slider-vertical .mat-slider-ticks{background-image:repeating-linear-gradient(to bottom, rgba(0,0,0,0.7), rgba(0,0,0,0.7) 2px, transparent 0, transparent)}.mat-step-header.cdk-keyboard-focused,.mat-step-header.cdk-program-focused,.mat-step-header:hover{background-color:rgba(0,0,0,0.04)}.mat-step-header .mat-step-label,.mat-step-header .mat-step-optional{color:rgba(0,0,0,0.38)}.mat-step-header .mat-step-icon{background-color:#9e737d;color:rgba(255,255,255,0.87)}.mat-step-header .mat-step-icon-not-touched{background-color:rgba(0,0,0,0.38);color:rgba(255,255,255,0.87)}.mat-step-header .mat-step-label.mat-step-label-active{color:rgba(0,0,0,0.87)}.mat-stepper-horizontal,.mat-stepper-vertical{background-color:#fff}.mat-stepper-vertical-line::before{b
 order-left-color:rgba(0,0,0,0.12)}.mat-stepper-horizontal-line{border-top-color:rgba(0,0,0,0.12)}.mat-tab-nav-bar,.mat-tab-header{border-bottom:1px solid rgba(0,0,0,0.12)}.mat-tab-group-inverted-header .mat-tab-nav-bar,.mat-tab-group-inverted-header .mat-tab-header{border-top:1px solid rgba(0,0,0,0.12);border-bottom:none}.mat-tab-label,.mat-tab-link{color:rgba(0,0,0,0.87)}.mat-tab-label.mat-tab-disabled,.mat-tab-link.mat-tab-disabled{color:rgba(0,0,0,0.38)}.mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.87)}.mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(0,0,0,0.38)}.mat-tab-group[class*='mat-background-'] .mat-tab-header,.mat-tab-nav-bar[class*='mat-background-']{border-bottom:none;border-top:none}.mat-tab-group.mat-primary .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-group.mat-primary .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-primary .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-
 primary .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(145,93,105,0.3)}.mat-tab-group.mat-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary .mat-ink-bar{background-color:#9e737d}.mat-tab-group.mat-primary.mat-background-primary .mat-ink-bar,.mat-tab-nav-bar.mat-primary.mat-background-primary .mat-ink-bar{background-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-accent .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-group.mat-accent .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-accent .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-accent .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(204,204,204,0.3)}.mat-tab-group.mat-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent .mat-ink-bar{background-color:#d0dbe0}.mat-tab-group.mat-accent.mat-background-accent .mat-ink-bar,.mat-tab-nav-bar.mat-accent.mat-background-accent .mat-ink-bar{background-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-warn .mat-tab-label:not(
 .mat-tab-disabled):focus,.mat-tab-group.mat-warn .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-warn .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-warn .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(209,74,80,0.3)}.mat-tab-group.mat-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn .mat-ink-bar{background-color:#ef6162}.mat-tab-group.mat-warn.mat-background-warn .mat-ink-bar,.mat-tab-nav-bar.mat-warn.mat-background-warn .mat-ink-bar{background-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-primary .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-group.mat-background-primary .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-primary .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(145,93,105,0.3)}.mat-tab-group.mat-background-primary .mat-tab-header,.mat-tab-group.mat-background-primary .mat-tab-lin
 ks,.mat-tab-nav-bar.mat-background-primary .mat-tab-header,.mat-tab-nav-bar.mat-background-primary .mat-tab-links{background-color:#9e737d}.mat-tab-group.mat-background-primary .mat-tab-label,.mat-tab-group.mat-background-primary .mat-tab-link,.mat-tab-nav-bar.mat-background-primary .mat-tab-label,.mat-tab-nav-bar.mat-background-primary .mat-tab-link{color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-primary .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-primary .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-primary .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav
 -bar.mat-background-primary .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-primary .mat-ripple-element,.mat-tab-nav-bar.mat-background-primary .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-accent .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-group.mat-background-accent .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-accent .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(204,204,204,0.3)}.mat-tab-group.mat-background-accent .mat-tab-header,.mat-tab-group.mat-background-accent .mat-tab-links,.mat-tab-nav-bar.mat-background-accent .mat-tab-header,.mat-tab-nav-bar.mat-background-accent .mat-tab-links{background-color:#d0dbe0}.mat-tab-group.mat-background-accent .mat-tab-label,.mat-tab-group.mat-background-accent .mat-tab-lin
 k,.mat-tab-nav-bar.mat-background-accent .mat-tab-label,.mat-tab-nav-bar.mat-background-accent .mat-tab-link{color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-accent .mat-tab-link.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-accent .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-accent .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-accent .mat-ripple-element,.mat-tab-nav-bar.mat-background-accent .mat-ripple-element{ba
 ckground-color:rgba(255,255,255,0.12)}.mat-tab-group.mat-background-warn .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-group.mat-background-warn .mat-tab-link:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-label:not(.mat-tab-disabled):focus,.mat-tab-nav-bar.mat-background-warn .mat-tab-link:not(.mat-tab-disabled):focus{background-color:rgba(209,74,80,0.3)}.mat-tab-group.mat-background-warn .mat-tab-header,.mat-tab-group.mat-background-warn .mat-tab-links,.mat-tab-nav-bar.mat-background-warn .mat-tab-header,.mat-tab-nav-bar.mat-background-warn .mat-tab-links{background-color:#ef6162}.mat-tab-group.mat-background-warn .mat-tab-label,.mat-tab-group.mat-background-warn .mat-tab-link,.mat-tab-nav-bar.mat-background-warn .mat-tab-label,.mat-tab-nav-bar.mat-background-warn .mat-tab-link{color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-group.mat-background-warn .mat-tab-link.mat-tab-disabled,.mat-tab-
 nav-bar.mat-background-warn .mat-tab-label.mat-tab-disabled,.mat-tab-nav-bar.mat-background-warn .mat-tab-link.mat-tab-disabled{color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.87)}.mat-tab-group.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron,.mat-tab-nav-bar.mat-background-warn .mat-tab-header-pagination-disabled .mat-tab-header-pagination-chevron{border-color:rgba(255,255,255,0.4)}.mat-tab-group.mat-background-warn .mat-ripple-element,.mat-tab-nav-bar.mat-background-warn .mat-ripple-element{background-color:rgba(255,255,255,0.12)}.mat-toolbar{background:#f5f5f5;color:rgba(0,0,0,0.87)}.mat-toolbar.mat-primary{background:#9e737d;color:rgba(255,255,255,0.87)}.mat-toolbar.mat-accent{background:#d0dbe0;color:rgba(255,255,255,0.87)}.mat-toolbar.mat-warn{background:#ef6162;color:rgba(255,255,25
 5,0.87)}.mat-tooltip{background:rgba(97,97,97,0.9)}.mat-snack-bar-container{background:#323232;color:#fff}.mat-simple-snackbar-action{color:#d0dbe0}body{font-family:Roboto, "Helvetica Neue", sans-serif}.td-chip-content{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.td-data-table-cell{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400;line-height:20px}.td-data-table-column{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px;font-weight:600}.td-dialog-title{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:20px;font-weight:500}.td-dialog-message{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px;font-weight:400;line-height:28px}.td-expansion-label{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px;font-weight:400}.td-expansion-sublabel{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400}.td-key{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.td-mes
 sage-label{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:600;line-height:24px}.td-message-sublabel{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px}.td-paging-bar{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:12px}.td-step-label{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500}.td-step-sublabel{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;line-height:20px}td-navigation-drawer .td-navigation-drawer-title{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:16px}td-navigation-drawer .td-navigation-drawer-name{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:500;line-height:20px}td-navigation-drawer .td-navigation-drawer-menu-toggle{font-family:Roboto, "Helvetica Neue", sans-serif;font-size:14px;font-weight:400;line-height:24px}mat-list-item mat-icon,.mat-list-item-content mat-icon{color:rgba(0,0,0,0.54)}mat-list-item mat-icon[matListAvatar],.mat-
 list-item-content mat-icon[matListAvatar]{background-color:rgba(0,0,0,0.04)}.mat-list-text p{color:rgba(0,0,0,0.38)}.mat-drawer-container{background-color:#e0e0e0}[mat-icon-button].td-layout-menu-button{margin-left:0}::ng-deep [dir='rtl'] [mat-icon-button].td-layout-menu-button{margin-right:0;margin-left:6px}td-layout-nav mat-toolbar,td-layout-nav-list mat-toolbar,td-layout-manage-list mat-toolbar,td-layout-card-over mat-toolbar,td-navigation-drawer mat-toolbar,td-layout mat-toolbar{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);z-index:1}.mat-drawer-side.td-layout-sidenav{box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.td-layout-footer{background:#f5f5f5;color:rgba(0,0,0,0.87);box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}.td-layout-footer.mat-primary{background:#9e737d}.td-layout-footer.mat-pri
 mary,.td-layout-footer.mat-primary mat-icon{color:rgba(255,255,255,0.87)}.td-layout-footer.mat-accent{background:#d0dbe0}.td-layout-footer.mat-accent,.td-layout-footer.mat-accent mat-icon{color:rgba(255,255,255,0.87)}.td-layout-footer.mat-warn{background:#ef6162}.td-layout-footer.mat-warn,.td-layout-footer.mat-warn mat-icon{color:rgba(255,255,255,0.87)}td-steps .td-steps-header{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)}td-steps .td-step-content,td-steps .td-step-summary,td-steps .td-step-actions{margin:16px}td-steps .td-horizontal-line{border-bottom-color:rgba(0,0,0,0.12)}td-steps .td-vertical-line{border-left-color:rgba(0,0,0,0.12)}td-steps .td-step-header:focus:not(.mat-disabled),td-steps .td-step-header:hover:not(.mat-disabled){background:rgba(0,0,0,0.04)}td-steps .td-step-header .td-step-label-wrapper .td-step-sublabel{color:rgba(0,0,0,0.54)}td-steps .td-step-header .td-step-label-wrapper.mat-inactive,td-steps .
 td-step-header .td-step-label-wrapper.mat-inactive *{color:rgba(0,0,0,0.38)}td-steps .td-step-header .td-step-label-wrapper.mat-warn,td-steps .td-step-header .td-step-label-wrapper.mat-warn *{color:#ef6162}td-steps .td-step-header .mat-complete{color:#d0dbe0}td-steps .td-circle{color:#fff}td-steps .td-circle.mat-active{background-color:#d0dbe0}td-steps .td-circle.mat-inactive{background-color:rgba(0,0,0,0.38)}td-steps .td-circle mat-icon{fill:rgba(0,0,0,0.87)}td-steps .td-triangle{color:#ef6162}td-steps .td-edit-icon{color:rgba(0,0,0,0.54)}.td-expansion-panel-group .td-expansion-panel{transition:120ms ease-in}.td-expansion-panel-group .td-expansion-panel:not(:last-of-type).td-expanded{margin-bottom:16px}.td-expansion-panel-group .td-expansion-panel:not(:first-of-type).td-expanded{margin-top:16px}.td-expansion-panel{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12);background-color:#fff}.td-expansion-panel .td-expansion-pane
 l-header:focus:not(.mat-disabled),.td-expansion-panel .td-expansion-panel-header:hover:not(.mat-disabled){background:rgba(0,0,0,0.04)}.td-expansion-panel .td-expansion-panel-header .td-expansion-panel-header-content mat-icon.td-expand-icon{color:rgba(0,0,0,0.54)}.td-expansion-panel .td-expansion-panel-header .td-expansion-panel-header-content.mat-disabled,.td-expansion-panel .td-expansion-panel-header .td-expansion-panel-header-content.mat-disabled *{color:rgba(0,0,0,0.38)}.td-expansion-panel mat-icon.td-expand-icon{color:rgba(0,0,0,0.54)}.td-expansion-panel .td-expansion-label,.td-expansion-panel .td-expansion-label *,.td-expansion-panel .td-expansion-sublabel,.td-expansion-panel .td-expansion-sublabel *{vertical-align:middle}.td-expansion-panel .td-expansion-sublabel{color:rgba(0,0,0,0.54)}td-chips .mat-basic-chip{background:#e0e0e0;color:rgba(0,0,0,0.87)}td-chips .mat-basic-chip:focus:not(.td-chip-disabled) mat-icon:hover{color:rgba(0,0,0,0.54)}td-chips .mat-basic-chip:focus:not(
 .td-chip-disabled).mat-primary{background:#9e737d}td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-primary,td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-primary mat-icon{color:rgba(255,255,255,0.87)}td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-accent{background:#d0dbe0}td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-accent,td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-accent mat-icon{color:rgba(255,255,255,0.87)}td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-warn{background:#ef6162}td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-warn,td-chips .mat-basic-chip:focus:not(.td-chip-disabled).mat-warn mat-icon{color:rgba(255,255,255,0.87)}td-chips .mat-basic-chip mat-icon.td-chip-removal{color:rgba(0,0,0,0.38)}td-chips .mat-basic-chip mat-icon.td-chip-removal:hover{color:rgba(0,0,0,0.54)}td-chips.mat-primary .mat-form-field-underline .mat-form-field-ripple{background-color:#9e737d}td-chips.mat-accent .mat-form-fi
 eld-underline .mat-form-field-ripple{background-color:#d0dbe0}td-chips.mat-warn .mat-form-field-underline .mat-form-field-ripple{background-color:#ef6162}td-file-upload .td-file-upload-cancel mat-icon{background-color:#fafafa}td-file-input .drop-zone{transition:background 400ms cubic-bezier(0.25, 0.8, 0.25, 1),box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)}.td-dialog-message{color:rgba(0,0,0,0.54)}.td-json-formatter-wrapper .function::after,.td-json-formatter-wrapper .date::after,.td-json-formatter-wrapper .td-object-name::after,.td-json-formatter-wrapper .td-array-length::after{content:'\200E'}.td-json-formatter-wrapper .td-key.td-key-node:focus,.td-json-formatter-wrapper .td-key.td-key-node:hover{background-color:rgba(0,0,0,0.04)}.td-json-formatter-wrapper .td-key.td-key-node .td-node-icon{color:rgba(0,0,0,0.54)}.td-json-formatter-wrapper .key{color:#9e737d}.td-json-forma
 tter-wrapper .value .string{color:#ef6162}.td-json-formatter-wrapper .value .number{color:#d0dbe0}.td-json-formatter-wrapper .value .boolean{color:#d0dbe0}.td-json-formatter-wrapper .value .null,.td-json-formatter-wrapper .value .undefined{color:rgba(0,0,0,0.38)}.td-json-formatter-wrapper .value .function{color:#9e737d}.td-json-formatter-wrapper .value .date{color:rgba(0,0,0,0.87)}td-paging-bar,td-paging-bar mat-select .mat-select-value{color:rgba(0,0,0,0.54)}.td-loading-wrapper.td-overlay .td-loading{background:rgba(255,255,255,0.8)}.td-data-table-scrollable{border-top:1px solid rgba(0,0,0,0.12)}table[td-data-table] .td-data-table-column-row,table[td-data-table] .td-data-table-row{border-bottom-color:rgba(0,0,0,0.12)}table[td-data-table] .mat-checkbox-cell,table[td-data-table] .mat-checkbox-column{color:rgba(0,0,0,0.54)}table[td-data-table] .mat-checkbox-cell mat-pseudo-checkbox.mat-pseudo-checkbox-checked,table[td-data-table] .mat-checkbox-column mat-pseudo-checkbox.mat-pseudo-che
 ckbox-checked{background-color:#d0dbe0}table[td-data-table] .td-data-table-cell mat-form-field .mat-form-field-underline{display:none}table[td-data-table] .td-data-table-column{color:rgba(0,0,0,0.54)}table[td-data-table] .td-data-table-column *{vertical-align:middle}table[td-data-table] .td-data-table-column mat-icon.td-data-table-sort-icon{color:rgba(0,0,0,0.38)}table[td-data-table] .td-data-table-column.mat-active,table[td-data-table] .td-data-table-column.mat-active mat-icon{color:#000}table[td-data-table].mat-selectable tbody>tr.td-data-table-row.td-selected{background-color:#f5f5f5}table[td-data-table].mat-selectable tbody>tr.td-data-table-row:focus{background-color:rgba(0,0,0,0.04)}table[td-data-table].mat-clickable tbody>tr.td-data-table-row:hover{background-color:rgba(0,0,0,0.04)}.mat-selected-title{background-color:rgba(208,219,224,0.12);color:#d0dbe0}.td-notification-count{box-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0
 ,0,0.12)}.td-notification-count.mat-warn{background-color:#ef6162;color:rgba(255,255,255,0.87)}.td-notification-count.mat-primary{background-color:#9e737d;color:rgba(255,255,255,0.87)}.td-notification-count.mat-accent{background-color:#d0dbe0;color:rgba(255,255,255,0.87)}.td-message.mat-primary{color:#9e737d;background-color:rgba(158,115,125,0.15)}.td-message.mat-accent{color:#d0dbe0;background-color:rgba(208,219,224,0.15)}.td-message.mat-warn{color:#ef6162;background-color:rgba(239,97,98,0.15)}body[fds] .mat-raised-button{height:34px;font-family:"Roboto",sans-serif;font-weight:lighter;font-size:14px;text-transform:uppercase;line-height:normal;box-shadow:0px 0px 0px 0px rgba(0,0,0,0.2),0px 0px 0px 0px rgba(0,0,0,0.14),0px 0px 0px 0px rgba(0,0,0,0.12)}body[fds] .mat-raised-button.cdk-focused:focus{box-shadow:0px 0px 2px 0px #1391c1}body[fds] .mat-raised-button[disabled]{opacity:.6;cursor:not-allowed}body[fds] .mat-button-toggle-disabled .mat-button-toggle-label-content{cursor:not-all
 owed}body[fds] .mat-button-focus-overlay{background-color:transparent}body[fds] .mat-raised-button.mat-fds-primary{border:1px solid #9E737D;background-color:#9E737D;color:#fff}body[fds] .mat-raised-button.mat-fds-primary:hover{background-color:#915D69;color:#fff}body[fds] .mat-raised-button.mat-fds-primary.mat-button-focus{color:#fff;background-color:#9E737D}body[fds] .mat-raised-button.mat-fds-primary[disabled]{color:#D1E8D1;background-color:#9E737D;color:#D1E8D1}body[fds] .mat-raised-button.mat-fds-secondary{color:#915D69;border:1px solid #9E737D}body[fds] .mat-raised-button.mat-fds-secondary:hover:not([disabled]){color:#fff;background-color:#915D69;border:1px solid #915D69}body[fds] .mat-raised-button.mat-fds-secondary.mat-button-focus{color:#915D69;background-color:#fff;border:1px solid #9E737D}body[fds] .mat-raised-button.mat-fds-secondary[disabled]{color:#D1E8D1;background-color:#9E737D}body[fds] .mat-raised-button.mat-fds-regular{color:#666;background-color:#fff;border:1px so
 lid #CFD3D7}body[fds] .mat-raised-button.mat-fds-regular:hover{color:#fff;background-color:#808793;border:1px solid #808793}body[fds] .mat-raised-button.mat-fds-regular.mat-button-focus{color:#333;background-color:#fff;border:1px solid #CFD3D7}body[fds] .mat-raised-button.mat-fds-regular[disabled]{color:#D1E8D1;background-color:#808793;border:1px solid #808793}body[fds] .mat-raised-button.mat-fds-warn{border:1px solid #EF6162;background-color:#EF6162;color:#fff}body[fds] .mat-raised-button.mat-fds-warn:hover{color:#fff;background-color:#D14A50;border:1px solid #EF6162}body[fds] .mat-raised-button.mat-fds-warn.mat-button-focus{color:#fff;background-color:#EF6162;border:1px solid #CFD3D7}body[fds] .mat-raised-button.mat-fds-warn[disabled]{color:#D1E8D1;background-color:#EF6162;border:1px solid #EF6162}body[fds] .mat-raised-button.mat-fds-critical{color:#fff;background-color:#E98A40;border:1px solid #E98A40}body[fds] .mat-raised-button.mat-fds-critical:hover{color:#fff;background-color
 :#D3702D;border:1px solid #D3702D}body[fds] .mat-raised-button.mat-fds-critical.mat-button-focus{color:#fff;background-color:#D3702D;border:1px solid #CFD3D7}body[fds] .mat-raised-button.mat-fds-critical[disabled]{color:#D1E8D1;background-color:#E98A40;border:1px solid #E98A40}.fds-primary-dropdown-button-menu .cdk-focused{color:#fff;background-color:#9E737D}body[fds] td-expansion-panel:not(:last-of-type) .td-expanded{margin-bottom:0px}body[fds] .td-expansion-panel-header-content{height:80px !important;padding:0px 30px !important;border-bottom:1px solid #ddd}body[fds] .td-expansion-content form{padding:15px 10px 20px 20px}body[fds] .md-subhead{font-size:18px;color:#999}body[fds] td-expansion-panel .td-expansion-panel-header .td-expansion-panel-header-content mat-icon.td-expand-icon{font-size:28px;color:#6B8791;font-weight:bold}body[fds] td-expansion-panel .td-expansion-panel-header:hover:not(.mat-disabled){background:#F3FAFF}body[fds] td-expansion-panel .td-expansion-panel-header:fo
 cus{background:#FFFFFF}body[fds] td-expansion-panel .td-expansion-panel-header:focus .td-expansion-panel-header-content{border-bottom:1px solid #9E737D}body[fds] .mat-menu-panel{border-radius:2px}body[fds] .mat-menu-item{font-size:14px;color:#333;min-width:200px;text-transform:none;height:24px;line-height:24px}body[fds] .regular-button-menu .mat-menu-item:hover{color:#ffffff;background-color:#808793}body[fds] .mat-menu-item[disabled]{color:rgba(0,0,0,0.38);background-color:#ffffff;cursor:not-allowed}body[fds] .mat-menu-item .mat-icon{font-size:14px}body[fds] .mat-menu-item .fa{font-size:14px;width:1em;height:1em}body[fds] .mat-menu-item[disabled] .mat-icon{color:rgba(0,0,0,0.38)}body[fds] .mat-menu-item[disabled] .fa{color:rgba(0,0,0,0.38)}body[fds] .mat-menu-item:hover:not([disabled]) .mat-icon{color:#ffffff}body[fds] .mat-menu-item:hover:not([disabled]) .fa{color:#ffffff}body[fds] .mat-menu-item:hover:not([disabled]),body[fds] .mat-menu-item:focus:not([disabled]){color:#ffffff;bac
 kground-color:#808793}body[fds] .fds-primary-dropdown-button-menu .mat-menu-item:hover:not([disabled]),body[fds] .fds-primary-dropdown-button-menu .mat-menu-item:focus:not([disabled]){color:#FFFFFF;background-color:#915D69}.mat-raised-button .mat-button-wrapper i{padding-left:10px}body[fds] .mat-option{font-size:14px;color:#333;text-transform:none;height:24px;line-height:24px}body[fds] .mat-autocomplete-panel.mat-autocomplete-panel-below{top:0}body[fds] .regular-button-menu .mat-option:hover{color:#ffffff;background-color:#808793}body[fds] .mat-option:hover:not([disabled]),body[fds] .mat-option:focus:not([disabled]){color:#ffffff;background-color:#808793}body[fds] .mat-select-underline{display:none}
+
+/*# sourceMappingURL=fds-demo.min.css.map */
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/webapp/css/fds-demo.min.css.gz
----------------------------------------------------------------------
diff --git a/webapp/css/fds-demo.min.css.gz b/webapp/css/fds-demo.min.css.gz
new file mode 100644
index 0000000..283e178
Binary files /dev/null and b/webapp/css/fds-demo.min.css.gz differ


[6/7] nifi-fds git commit: gh-pages update

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/a4b7aa82/package-lock.json
----------------------------------------------------------------------
diff --git a/package-lock.json b/package-lock.json
index 4a44e34..c82e7bc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,188 +1,122 @@
 {
-  "name": "nifi-fds",
+  "name": "nifi-fds-demo",
   "version": "0.0.0",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
     "@angular/animations": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.0.tgz",
-      "integrity": "sha512-JLR42YHiJppO4ruAkFxgbzghUDtHkXHkKPM8udd2qyt16T7e1OX7EEOrrmldUu59CC56tZnJ/32p4SrYmxyBSA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-4.4.6.tgz",
+      "integrity": "sha1-+mYYmaik44y3xYPHpcl85l1ZKjU=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/cdk": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.2.0.tgz",
-      "integrity": "sha1-Q2j2dJ6RXNzHXTJa4z/bP4WogQg=",
+      "version": "2.0.0-beta.12",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-2.0.0-beta.12.tgz",
+      "integrity": "sha1-OiQ8tiuT9OA5EgunD5ANyeI1Yi4=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/common": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.0.tgz",
-      "integrity": "sha512-yMFn2isC7/XOs56/2Kzzbb1AASHiwipAPOVFtKe7TdZQClO8fJXwCnk326rzr615+CG0eSBNQWeiFGyWN2riBA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.6.tgz",
+      "integrity": "sha1-S4FCByTggooOg5uVpV6xp+g5GPI=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/compiler": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.0.tgz",
-      "integrity": "sha512-RfYa4ESgjGX0T0ob/Xz00IF7nd2xZkoyRy6oKgL82q42uzB3xZUDMrFNgeGxAUs3H22IkL46/5SSPOMOTMZ0NA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.4.6.tgz",
+      "integrity": "sha1-LuH68lt1fh0SiXkHS+f65SmzvCA=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/core": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.0.tgz",
-      "integrity": "sha512-s2ne45DguNUubhC1YgybGECC4Tyx3G4EZCntUiRMDWWkmKXSK+6dgHMesyDo8R5Oat8VfN4Anf8l3JHS1He8kg==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.6.tgz",
+      "integrity": "sha1-EwMf0Q3P5DiHVBmzjyESCVi8I1Q=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/flex-layout": {
-      "version": "5.0.0-beta.14",
-      "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-5.0.0-beta.14.tgz",
-      "integrity": "sha512-/fsOqXFUKdCmzzZx0bZ0HCYwcV+BSbVuIgOhaCrZKHj2rqiWKKPgj1ErU3HMT68bBBGag0u0skTdLGtrBorRIA==",
+      "version": "2.0.0-beta.9",
+      "resolved": "https://registry.npmjs.org/@angular/flex-layout/-/flex-layout-2.0.0-beta.9.tgz",
+      "integrity": "sha1-PlT4mOgF0LFCbRXmE520FdBO518=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/forms": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.0.tgz",
-      "integrity": "sha512-g1/SF9lY0ZwzJ0w4NXbFsTGGEuUdgtaZny8DmkaqtmA7idby3FW398X0tv25KQfVYKtL+p9Jp1Y8EI0CvrIsvw==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.6.tgz",
+      "integrity": "sha1-/mSs5CQ1wbgPSQNLfEHOjK8UpEo=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/http": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/http/-/http-5.2.0.tgz",
-      "integrity": "sha512-V5Cl24dP3rCXTTQvDc0TIKoWqBRAa0DWAQbtr7iuDAt5a1vPGdKz5K1sEiiV6ziwX6gzjiwHjUvL+B+WbIUrQA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/http/-/http-4.4.6.tgz",
+      "integrity": "sha1-CvaAxnEL3AJtlA4iXP0PalwAXQw=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/material": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.2.0.tgz",
-      "integrity": "sha1-hZnjFJ1ISH4+kulB+p3FUXbjoM8=",
+      "version": "2.0.0-beta.12",
+      "resolved": "https://registry.npmjs.org/@angular/material/-/material-2.0.0-beta.12.tgz",
+      "integrity": "sha1-cbbQt7AhiR5dDjaIwdS9eMdFf1g=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/platform-browser": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.0.tgz",
-      "integrity": "sha512-c6cR15MfopPwGZ097HdRuAi9+R9BhA3bRRFpP2HmrSSB/BW4ZNovUYwB2QUMSYbd9s0lYTtnavqGm6DKcyF2QA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.6.tgz",
+      "integrity": "sha1-qYOcVH4bZU+h0kqJeAyLpquNzOA=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.0.tgz",
-      "integrity": "sha512-xG1eNoi8sm4Jcly2y98r5mqYVe3XV8sUJCtOhvGBYtvt4dKEQ5tOns6fWQ0nUbl6Vv3Y0xgGUS1JCtfut3DuaQ==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.6.tgz",
+      "integrity": "sha1-TT2aanvyzz3kBYphWuBZ7/ZB+jY=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@angular/router": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.0.tgz",
-      "integrity": "sha512-VXDXtp2A1GQEUEhXg0ZzqHdTUERLgDSo3/Mmpzt+dgLMKlXDSCykcm4gINwE5VQLGD1zQvDFCCRv3seGRNfrqA==",
+      "version": "4.4.6",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-4.4.6.tgz",
+      "integrity": "sha1-D2rSmuD/jSyeo3m9MgRHIXt+yGY=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
     "@covalent/core": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/@covalent/core/-/core-1.0.0.tgz",
-      "integrity": "sha512-qUGL6CtyHNa3ttKGrvuQY0lJyQR9Dxp04vP0vrXmYrKapVbfYZ82qwJ2+PrX1EcWAQ6b/B2giFe0Q83ePin04g==",
+      "version": "1.0.0-beta.8-1",
+      "resolved": "https://registry.npmjs.org/@covalent/core/-/core-1.0.0-beta.8-1.tgz",
+      "integrity": "sha1-GL8J+RLMAvOcHleCVcxCco2hBCY=",
       "requires": {
         "tslib": "1.9.0"
       }
     },
-    "@types/jasmine": {
-      "version": "2.8.6",
-      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz",
-      "integrity": "sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA==",
-      "dev": true
-    },
-    "@types/node": {
-      "version": "6.0.106",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.106.tgz",
-      "integrity": "sha512-U4Zv5fx7letrisRv6HgSSPSY00FZM4NMIkilt+IAExvQLuNa6jYVwCKcnSs2NqTN4+KDl9PskvcCiMce9iePCA==",
-      "dev": true
-    },
-    "@types/q": {
-      "version": "0.0.32",
-      "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
-      "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
-      "dev": true
-    },
-    "@types/selenium-webdriver": {
-      "version": "2.53.37",
-      "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.37.tgz",
-      "integrity": "sha1-NPdDwg5TrnEA7ekIcP3lVN8kR/g=",
-      "dev": true
-    },
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "dev": true
-    },
-    "accepts": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
-      "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
-      "dev": true,
-      "requires": {
-        "mime-types": "2.1.18",
-        "negotiator": "0.6.1"
-      }
-    },
-    "adm-zip": {
-      "version": "0.4.7",
-      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
-      "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
-      "dev": true
-    },
-    "after": {
-      "version": "0.8.2",
-      "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
-      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
-      "dev": true
-    },
-    "agent-base": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
-      "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
-      "dev": true,
-      "requires": {
-        "extend": "3.0.1",
-        "semver": "5.0.3"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "5.0.3",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
-          "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
-          "dev": true
-        }
-      }
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
     },
     "ajv": {
       "version": "5.5.2",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
       "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-      "dev": true,
       "requires": {
         "co": "4.6.0",
         "fast-deep-equal": "1.1.0",
@@ -190,17 +124,6 @@
         "json-schema-traverse": "0.3.1"
       }
     },
-    "align-text": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
-      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2",
-        "longest": "1.0.1",
-        "repeat-string": "1.6.1"
-      }
-    },
     "amdefine": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
@@ -210,8 +133,7 @@
     "ansi-regex": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
     },
     "ansi-styles": {
       "version": "2.2.1",
@@ -219,21 +141,10 @@
       "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
       "dev": true
     },
-    "anymatch": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
-      "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
-      "dev": true,
-      "requires": {
-        "micromatch": "2.3.11",
-        "normalize-path": "2.1.1"
-      }
-    },
     "aproba": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
-      "dev": true
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
     },
     "archiver": {
       "version": "1.3.0",
@@ -347,7 +258,6 @@
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
       "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
-      "dev": true,
       "requires": {
         "delegates": "1.0.0",
         "readable-stream": "2.3.6"
@@ -371,21 +281,6 @@
         }
       }
     },
-    "arr-diff": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
-      "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-      "dev": true,
-      "requires": {
-        "arr-flatten": "1.1.0"
-      }
-    },
-    "arr-flatten": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
-      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
-      "dev": true
-    },
     "array-differ": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
@@ -398,12 +293,6 @@
       "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
       "dev": true
     },
-    "array-slice": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
-      "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
-      "dev": true
-    },
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -419,18 +308,6 @@
       "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
       "dev": true
     },
-    "array-unique": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
-      "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-      "dev": true
-    },
-    "arraybuffer.slice": {
-      "version": "0.0.6",
-      "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
-      "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
-      "dev": true
-    },
     "arrify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -440,14 +317,12 @@
     "asn1": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
-      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
-      "dev": true
+      "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
     },
     "assert-plus": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
-      "dev": true
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
     },
     "async": {
       "version": "0.1.22",
@@ -455,12 +330,6 @@
       "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=",
       "dev": true
     },
-    "async-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
-      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
-      "dev": true
-    },
     "async-foreach": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
@@ -470,70 +339,32 @@
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
-      "dev": true
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
     },
     "aws-sign2": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
-      "dev": true
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
     },
     "aws4": {
       "version": "1.7.0",
       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
-      "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
-      "dev": true
-    },
-    "backo2": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
-      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
-      "dev": true
+      "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
     },
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "base64-arraybuffer": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
-      "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
-      "dev": true
-    },
-    "base64id": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
-      "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
-      "dev": true
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
     },
     "bcrypt-pbkdf": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
       "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
-      "dev": true,
       "optional": true,
       "requires": {
         "tweetnacl": "0.14.5"
       }
     },
-    "better-assert": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
-      "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
-      "dev": true,
-      "requires": {
-        "callsite": "1.0.0"
-      }
-    },
-    "binary-extensions": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
-      "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=",
-      "dev": true
-    },
     "bl": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
@@ -544,58 +375,18 @@
         "safe-buffer": "5.1.1"
       }
     },
-    "blob": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
-      "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
-      "dev": true
-    },
     "block-stream": {
       "version": "0.0.9",
       "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
       "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
       "requires": {
         "inherits": "2.0.3"
       }
     },
-    "bluebird": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
-      "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
-      "dev": true
-    },
-    "body-parser": {
-      "version": "1.18.2",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
-      "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
-      "dev": true,
-      "requires": {
-        "bytes": "3.0.0",
-        "content-type": "1.0.4",
-        "debug": "2.6.9",
-        "depd": "1.1.2",
-        "http-errors": "1.6.3",
-        "iconv-lite": "0.4.19",
-        "on-finished": "2.3.0",
-        "qs": "6.5.1",
-        "raw-body": "2.3.2",
-        "type-is": "1.6.16"
-      },
-      "dependencies": {
-        "iconv-lite": {
-          "version": "0.4.19",
-          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
-          "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
-          "dev": true
-        }
-      }
-    },
     "boom": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
       "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
-      "dev": true,
       "requires": {
         "hoek": "4.2.1"
       }
@@ -604,23 +395,11 @@
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
       "requires": {
         "balanced-match": "1.0.0",
         "concat-map": "0.0.1"
       }
     },
-    "braces": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
-      "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-      "dev": true,
-      "requires": {
-        "expand-range": "1.8.2",
-        "preserve": "0.2.0",
-        "repeat-element": "1.1.2"
-      }
-    },
     "buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
@@ -633,18 +412,6 @@
       "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
       "dev": true
     },
-    "bytes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-      "dev": true
-    },
-    "callsite": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
-      "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
-      "dev": true
-    },
     "camelcase": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
@@ -664,19 +431,7 @@
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
-      "dev": true
-    },
-    "center-align": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
-      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "align-text": "0.1.4",
-        "lazy-cache": "1.0.4"
-      }
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
     },
     "chalk": {
       "version": "1.1.3",
@@ -691,23 +446,6 @@
         "supports-color": "2.0.0"
       }
     },
-    "chokidar": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
-      "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
-      "dev": true,
-      "requires": {
-        "anymatch": "1.3.2",
-        "async-each": "1.0.1",
-        "fsevents": "1.2.2",
-        "glob-parent": "2.0.0",
-        "inherits": "2.0.3",
-        "is-binary-path": "1.0.1",
-        "is-glob": "2.0.1",
-        "path-is-absolute": "1.0.1",
-        "readdirp": "2.1.0"
-      }
-    },
     "chownr": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
@@ -729,14 +467,12 @@
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
     },
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
     },
     "coffee-script": {
       "version": "1.3.3",
@@ -750,28 +486,10 @@
       "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=",
       "dev": true
     },
-    "combine-lists": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
-      "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
-      "dev": true,
-      "requires": {
-        "lodash": "4.17.10"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "4.17.10",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
-          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
-          "dev": true
-        }
-      }
-    },
     "combined-stream": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
       "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
-      "dev": true,
       "requires": {
         "delayed-stream": "1.0.0"
       }
@@ -782,24 +500,6 @@
       "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
       "dev": true
     },
-    "component-bind": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
-      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
-      "dev": true
-    },
-    "component-emitter": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
-      "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=",
-      "dev": true
-    },
-    "component-inherit": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
-      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
-      "dev": true
-    },
     "compress-commons": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
@@ -815,50 +515,17 @@
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
-    },
-    "connect": {
-      "version": "3.6.6",
-      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
-      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "finalhandler": "1.1.0",
-        "parseurl": "1.3.2",
-        "utils-merge": "1.0.1"
-      }
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
     },
     "console-control-strings": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-      "dev": true
-    },
-    "content-type": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
-      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
-      "dev": true
-    },
-    "cookie": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
-      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
-      "dev": true
-    },
-    "core-js": {
-      "version": "2.5.5",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz",
-      "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=",
-      "dev": true
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
     },
     "core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
-      "dev": true
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
     },
     "crc": {
       "version": "3.5.0",
@@ -911,7 +578,6 @@
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
       "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
-      "dev": true,
       "requires": {
         "boom": "5.2.0"
       },
@@ -920,7 +586,6 @@
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
           "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
-          "dev": true,
           "requires": {
             "hoek": "4.2.1"
           }
@@ -936,17 +601,10 @@
         "array-find-index": "1.0.2"
       }
     },
-    "custom-event": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
-      "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
-      "dev": true
-    },
     "dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0"
       }
@@ -957,15 +615,6 @@
       "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=",
       "dev": true
     },
-    "debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-      "dev": true,
-      "requires": {
-        "ms": "2.0.0"
-      }
-    },
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@@ -989,69 +638,20 @@
       "dev": true,
       "optional": true
     },
-    "deep-is": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
-      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
-      "dev": true
-    },
-    "del": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
-      "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
-      "dev": true,
-      "requires": {
-        "globby": "5.0.0",
-        "is-path-cwd": "1.0.0",
-        "is-path-in-cwd": "1.0.1",
-        "object-assign": "4.1.1",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1",
-        "rimraf": "2.2.8"
-      }
-    },
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
-      "dev": true
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
     },
     "delegates": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-      "dev": true
-    },
-    "depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
-      "dev": true
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
     },
     "detect-libc": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz",
-      "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=",
-      "dev": true,
-      "optional": true
-    },
-    "di": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
-      "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
-      "dev": true
-    },
-    "dom-serialize": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
-      "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
-      "dev": true,
-      "requires": {
-        "custom-event": "1.0.1",
-        "ent": "2.2.0",
-        "extend": "3.0.1",
-        "void-elements": "2.0.1"
-      }
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
     },
     "each-async": {
       "version": "1.1.1",
@@ -1067,24 +667,11 @@
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
       "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
-      "dev": true,
       "optional": true,
       "requires": {
         "jsbn": "0.1.1"
       }
     },
-    "ee-first": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
-      "dev": true
-    },
-    "encodeurl": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
-      "dev": true
-    },
     "end-of-stream": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -1094,100 +681,6 @@
         "once": "1.4.0"
       }
     },
-    "engine.io": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz",
-      "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=",
-      "dev": true,
-      "requires": {
-        "accepts": "1.3.3",
-        "base64id": "1.0.0",
-        "cookie": "0.3.1",
-        "debug": "2.3.3",
-        "engine.io-parser": "1.3.2",
-        "ws": "1.1.2"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
-          "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
-          "dev": true,
-          "requires": {
-            "ms": "0.7.2"
-          }
-        },
-        "ms": {
-          "version": "0.7.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
-          "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
-          "dev": true
-        }
-      }
-    },
-    "engine.io-client": {
-      "version": "1.8.3",
-      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz",
-      "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=",
-      "dev": true,
-      "requires": {
-        "component-emitter": "1.2.1",
-        "component-inherit": "0.0.3",
-        "debug": "2.3.3",
-        "engine.io-parser": "1.3.2",
-        "has-cors": "1.1.0",
-        "indexof": "0.0.1",
-        "parsejson": "0.0.3",
-        "parseqs": "0.0.5",
-        "parseuri": "0.0.5",
-        "ws": "1.1.2",
-        "xmlhttprequest-ssl": "1.5.3",
-        "yeast": "0.1.2"
-      },
-      "dependencies": {
-        "component-emitter": {
-          "version": "1.2.1",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
-          "dev": true
-        },
-        "debug": {
-          "version": "2.3.3",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
-          "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
-          "dev": true,
-          "requires": {
-            "ms": "0.7.2"
-          }
-        },
-        "ms": {
-          "version": "0.7.2",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
-          "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
-          "dev": true
-        }
-      }
-    },
-    "engine.io-parser": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
-      "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
-      "dev": true,
-      "requires": {
-        "after": "0.8.2",
-        "arraybuffer.slice": "0.0.6",
-        "base64-arraybuffer": "0.1.5",
-        "blob": "0.0.4",
-        "has-binary": "0.1.7",
-        "wtf-8": "1.0.0"
-      }
-    },
-    "ent": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
-      "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
-      "dev": true
-    },
     "error-ex": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
@@ -1197,147 +690,30 @@
         "is-arrayish": "0.2.1"
       }
     },
-    "escape-html": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
-      "dev": true
-    },
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
       "dev": true
     },
-    "escodegen": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
-      "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
-      "dev": true,
-      "requires": {
-        "esprima": "2.7.3",
-        "estraverse": "1.9.3",
-        "esutils": "2.0.2",
-        "optionator": "0.8.2",
-        "source-map": "0.2.0"
-      },
-      "dependencies": {
-        "esprima": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-          "dev": true
-        },
-        "source-map": {
-          "version": "0.2.0",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
-          "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "amdefine": "1.0.1"
-          }
-        }
-      }
-    },
     "esprima": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz",
       "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=",
       "dev": true
     },
-    "estraverse": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
-      "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
-      "dev": true
-    },
-    "esutils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
-      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
-      "dev": true
-    },
     "eventemitter2": {
       "version": "0.4.14",
       "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
       "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
       "dev": true
     },
-    "eventemitter3": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.0.1.tgz",
-      "integrity": "sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA==",
-      "dev": true
-    },
     "exit": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
       "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
       "dev": true
     },
-    "expand-braces": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
-      "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
-      "dev": true,
-      "requires": {
-        "array-slice": "0.2.3",
-        "array-unique": "0.2.1",
-        "braces": "0.1.5"
-      },
-      "dependencies": {
-        "braces": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
-          "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
-          "dev": true,
-          "requires": {
-            "expand-range": "0.1.1"
-          }
-        },
-        "expand-range": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
-          "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
-          "dev": true,
-          "requires": {
-            "is-number": "0.1.1",
-            "repeat-string": "0.2.2"
-          }
-        },
-        "is-number": {
-          "version": "0.1.1",
-          "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
-          "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
-          "dev": true
-        },
-        "repeat-string": {
-          "version": "0.2.2",
-          "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
-          "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
-          "dev": true
-        }
-      }
-    },
-    "expand-brackets": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
-      "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-      "dev": true,
-      "requires": {
-        "is-posix-bracket": "0.1.1"
-      }
-    },
-    "expand-range": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
-      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
-      "dev": true,
-      "requires": {
-        "fill-range": "2.2.3"
-      }
-    },
     "expand-template": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.0.tgz",
@@ -1348,83 +724,22 @@
     "extend": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
-      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
-      "dev": true
-    },
-    "extglob": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
-      "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-      "dev": true,
-      "requires": {
-        "is-extglob": "1.0.0"
-      }
+      "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
     },
     "extsprintf": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
-      "dev": true
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
     },
     "fast-deep-equal": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
-      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-      "dev": true
+      "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
     },
     "fast-json-stable-stringify": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
-      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
-      "dev": true
-    },
-    "fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-      "dev": true
-    },
-    "filename-regex": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
-      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
-      "dev": true
-    },
-    "fill-range": {
-      "version": "2.2.3",
-      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
-      "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
-      "dev": true,
-      "requires": {
-        "is-number": "2.1.0",
-        "isobject": "2.1.0",
-        "randomatic": "1.1.7",
-        "repeat-element": "1.1.2",
-        "repeat-string": "1.6.1"
-      }
-    },
-    "finalhandler": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
-      "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "encodeurl": "1.0.2",
-        "escape-html": "1.0.3",
-        "on-finished": "2.3.0",
-        "parseurl": "1.3.2",
-        "statuses": "1.3.1",
-        "unpipe": "1.0.0"
-      },
-      "dependencies": {
-        "statuses": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
-          "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
-          "dev": true
-        }
-      }
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
     },
     "find-up": {
       "version": "1.1.2",
@@ -1474,811 +789,178 @@
         }
       }
     },
-    "follow-redirects": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz",
-      "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==",
-      "dev": true,
-      "requires": {
-        "debug": "3.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
-    "for-in": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
-      "dev": true
-    },
-    "for-own": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
-      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
-      "dev": true,
-      "requires": {
-        "for-in": "1.0.2"
-      }
+    "font-awesome": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
     },
     "forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
-      "dev": true
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
     },
     "form-data": {
       "version": "2.3.2",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
       "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
-      "dev": true,
       "requires": {
         "asynckit": "0.4.0",
         "combined-stream": "1.0.6",
         "mime-types": "2.1.18"
       }
     },
-    "fs-access": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
-      "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+    },
+    "fstream": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+      "requires": {
+        "graceful-fs": "4.1.11",
+        "inherits": "2.0.3",
+        "mkdirp": "0.5.1",
+        "rimraf": "2.2.8"
+      },
+      "dependencies": {
+        "graceful-fs": {
+          "version": "4.1.11",
+          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+        }
+      }
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "requires": {
+        "aproba": "1.2.0",
+        "console-control-strings": "1.1.0",
+        "has-unicode": "2.0.1",
+        "object-assign": "4.1.1",
+        "signal-exit": "3.0.2",
+        "string-width": "1.0.2",
+        "strip-ansi": "3.0.1",
+        "wide-align": "1.1.2"
+      }
+    },
+    "gaze": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+      "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
       "dev": true,
       "requires": {
-        "null-check": "1.0.0"
+        "globule": "1.2.0"
       }
     },
-    "fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+    "generate-function": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
+      "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
       "dev": true
     },
-    "fsevents": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.2.tgz",
-      "integrity": "sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ==",
+    "generate-object-property": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
+      "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "nan": "2.10.0",
-        "node-pre-gyp": "0.9.1"
+        "is-property": "1.0.2"
+      }
+    },
+    "get-caller-file": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+      "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true
+    },
+    "getobject": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
+      "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "requires": {
+        "assert-plus": "1.0.0"
+      }
+    },
+    "github-from-package": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+      "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
+      "dev": true,
+      "optional": true
+    },
+    "glob": {
+      "version": "3.1.21",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+      "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "1.2.3",
+        "inherits": "1.0.2",
+        "minimatch": "0.2.14"
       },
       "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true,
-          "dev": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "delegates": "1.0.0",
-            "readable-stream": "2.3.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
+        "inherits": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
+          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
           "dev": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
+        }
+      }
+    },
+    "globule": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+      "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+      "dev": true,
+      "requires": {
+        "glob": "7.1.2",
+        "lodash": "4.17.10",
+        "minimatch": "3.0.4"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
           "dev": true,
           "requires": {
-            "balanced-match": "1.0.0",
-            "concat-map": "0.0.1"
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
           }
         },
-        "chownr": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "dev": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
+        "lodash": {
+          "version": "4.17.10",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
           "dev": true
         },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "bundled": true,
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
           "dev": true,
-          "optional": true,
           "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "deep-extend": {
-          "version": "0.4.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "2.2.4"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "aproba": "1.2.0",
-            "console-control-strings": "1.1.0",
-            "has-unicode": "2.0.1",
-            "object-assign": "4.1.1",
-            "signal-exit": "3.0.2",
-            "string-width": "1.0.2",
-            "strip-ansi": "3.0.1",
-            "wide-align": "1.1.2"
-          }
-        },
-        "glob": {
-          "version": "7.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.21",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": "2.1.2"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "once": "1.4.0",
-            "wrappy": "1.0.2"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true,
-          "dev": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "number-is-nan": "1.0.1"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "dev": true
-        },
-        "minipass": {
-          "version": "2.2.4",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
-        },
-        "minizlib": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "2.2.4"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "debug": "2.6.9",
-            "iconv-lite": "0.4.21",
-            "sax": "1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.9.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "1.0.3",
-            "mkdirp": "0.5.1",
-            "needle": "2.2.0",
-            "nopt": "4.0.1",
-            "npm-packlist": "1.1.10",
-            "npmlog": "4.1.2",
-            "rc": "1.2.6",
-            "rimraf": "2.6.2",
-            "semver": "5.5.0",
-            "tar": "4.4.1"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1.1.1",
-            "osenv": "0.1.5"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.1.10",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "3.0.1",
-            "npm-bundled": "1.0.3"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "1.1.4",
-            "console-control-strings": "1.1.0",
-            "gauge": "2.7.4",
-            "set-blocking": "2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "wrappy": "1.0.2"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "1.0.2",
-            "os-tmpdir": "1.0.2"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "0.4.2",
-            "ini": "1.3.5",
-            "minimist": "1.2.0",
-            "strip-json-comments": "2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.1",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
-          }
-        },
-        "rimraf": {
-          "version": "2.6.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "glob": "7.1.2"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.1",
-          "bundled": true,
-          "dev": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.5.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "code-point-at": "1.1.0",
-            "is-fullwidth-code-point": "1.0.0",
-            "strip-ansi": "3.0.1"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "5.1.1"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "requires": {
-            "ansi-regex": "2.1.1"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chownr": "1.0.1",
-            "fs-minipass": "1.2.5",
-            "minipass": "2.2.4",
-            "minizlib": "1.1.0",
-            "mkdirp": "0.5.1",
-            "safe-buffer": "5.1.1",
-            "yallist": "3.0.2"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "string-width": "1.0.2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true
-        }
-      }
-    },
-    "fstream": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
-      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "4.1.11",
-        "inherits": "2.0.3",
-        "mkdirp": "0.5.1",
-        "rimraf": "2.2.8"
-      },
-      "dependencies": {
-        "graceful-fs": {
-          "version": "4.1.11",
-          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
-          "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
-          "dev": true
-        }
-      }
-    },
-    "gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-      "dev": true,
-      "requires": {
-        "aproba": "1.2.0",
-        "console-control-strings": "1.1.0",
-        "has-unicode": "2.0.1",
-        "object-assign": "4.1.1",
-        "signal-exit": "3.0.2",
-        "string-width": "1.0.2",
-        "strip-ansi": "3.0.1",
-        "wide-align": "1.1.2"
-      }
-    },
-    "gaze": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
-      "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
-      "dev": true,
-      "requires": {
-        "globule": "1.2.0"
-      }
-    },
-    "generate-function": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
-      "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
-      "dev": true
-    },
-    "generate-object-property": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
-      "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
-      "dev": true,
-      "requires": {
-        "is-property": "1.0.2"
-      }
-    },
-    "get-caller-file": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
-      "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
-      "dev": true
-    },
-    "get-stdin": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-      "dev": true
-    },
-    "getobject": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
-      "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
-      "dev": true
-    },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0"
-      }
-    },
-    "github-from-package": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
-      "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
-      "dev": true,
-      "optional": true
-    },
-    "glob": {
-      "version": "3.1.21",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
-      "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "1.2.3",
-        "inherits": "1.0.2",
-        "minimatch": "0.2.14"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz",
-          "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=",
-          "dev": true
-        }
-      }
-    },
-    "glob-base": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
-      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
-      "dev": true,
-      "requires": {
-        "glob-parent": "2.0.0",
-        "is-glob": "2.0.1"
-      }
-    },
-    "glob-parent": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
-      "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
-      "dev": true,
-      "requires": {
-        "is-glob": "2.0.1"
-      }
-    },
-    "globby": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
-      "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
-      "dev": true,
-      "requires": {
-        "array-union": "1.0.2",
-        "arrify": "1.0.1",
-        "glob": "7.1.2",
-        "object-assign": "4.1.1",
-        "pify": "2.3.0",
-        "pinkie-promise": "2.0.1"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
-          }
-        }
-      }
-    },
-    "globule": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
-      "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
-      "dev": true,
-      "requires": {
-        "glob": "7.1.2",
-        "lodash": "4.17.10",
-        "minimatch": "3.0.4"
-      },
-      "dependencies": {
-        "glob": {
-          "version": "7.1.2",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
-          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
-          "dev": true,
-          "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "lodash": {
-          "version": "4.17.10",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
-          "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
-          "dev": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "1.1.11"
+            "brace-expansion": "1.1.11"
           }
         }
       }
@@ -2312,18 +994,9 @@
         "lodash": "0.9.2",
         "minimatch": "0.2.14",
         "nopt": "1.0.10",
-        "rimraf": "2.2.8",
-        "underscore.string": "2.2.1",
-        "which": "1.0.9"
-      }
-    },
-    "grunt-bump": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/grunt-bump/-/grunt-bump-0.8.0.tgz",
-      "integrity": "sha1-0//gzzzws44JYHt4U49CpTHq/lU=",
-      "dev": true,
-      "requires": {
-        "semver": "5.5.0"
+        "rimraf": "2.2.8",
+        "underscore.string": "2.2.1",
+        "which": "1.0.9"
       }
     },
     "grunt-cli": {
@@ -2486,37 +1159,20 @@
         "object-assign": "4.1.1"
       }
     },
-    "handlebars": {
-      "version": "4.0.11",
-      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
-      "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
-      "dev": true,
-      "requires": {
-        "async": "1.5.2",
-        "optimist": "0.6.1",
-        "source-map": "0.4.4",
-        "uglify-js": "2.8.29"
-      },
-      "dependencies": {
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
-          "dev": true
-        }
-      }
+    "hammerjs": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
+      "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
     },
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-      "dev": true
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
     },
     "har-validator": {
       "version": "5.0.3",
       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
       "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
-      "dev": true,
       "requires": {
         "ajv": "5.5.2",
         "har-schema": "2.0.0"
@@ -2531,46 +1187,15 @@
         "ansi-regex": "2.1.1"
       }
     },
-    "has-binary": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
-      "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
-      "dev": true,
-      "requires": {
-        "isarray": "0.0.1"
-      },
-      "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
-          "dev": true
-        }
-      }
-    },
-    "has-cors": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
-      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
-      "dev": true
-    },
-    "has-flag": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
-      "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-      "dev": true
-    },
     "has-unicode": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-      "dev": true
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
     },
     "hawk": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
       "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
-      "dev": true,
       "requires": {
         "boom": "4.3.1",
         "cryptiles": "3.1.2",
@@ -2581,8 +1206,7 @@
     "hoek": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
-      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
-      "dev": true
+      "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
     },
     "hooker": {
       "version": "0.2.3",
@@ -2596,51 +1220,16 @@
       "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
       "dev": true
     },
-    "http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
-      "dev": true,
-      "requires": {
-        "depd": "1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": "1.5.0"
-      }
-    },
-    "http-proxy": {
-      "version": "1.17.0",
-      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
-      "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
-      "dev": true,
-      "requires": {
-        "eventemitter3": "3.0.1",
-        "follow-redirects": "1.4.1",
-        "requires-port": "1.0.0"
-      }
-    },
     "http-signature": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "dev": true,
       "requires": {
         "assert-plus": "1.0.0",
         "jsprim": "1.4.1",
         "sshpk": "1.14.1"
       }
     },
-    "https-proxy-agent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
-      "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
-      "dev": true,
-      "requires": {
-        "agent-base": "2.1.1",
-        "debug": "2.6.9",
-        "extend": "3.0.1"
-      }
-    },
     "iconv-lite": {
       "version": "0.2.11",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
@@ -2654,7 +1243,6 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "detect-libc": "0.2.0",
         "nan": "2.10.0",
         "node-gyp": "3.6.2",
         "prebuild-install": "2.5.3"
@@ -2675,17 +1263,10 @@
         "repeating": "2.0.1"
       }
     },
-    "indexof": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
-      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
-      "dev": true
-    },
     "inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
       "requires": {
         "once": "1.4.0",
         "wrappy": "1.0.2"
@@ -2694,14 +1275,14 @@
     "inherits": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-      "dev": true
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
     },
     "ini": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
       "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
-      "dev": true
+      "dev": true,
+      "optional": true
     },
     "invert-kv": {
       "version": "1.0.0",
@@ -2715,374 +1296,84 @@
       "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
       "dev": true
     },
-    "is-binary-path": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "dev": true,
-      "requires": {
-        "binary-extensions": "1.11.0"
-      }
-    },
-    "is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
     "is-builtin-module": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
-      "dev": true,
-      "requires": {
-        "builtin-modules": "1.1.1"
-      }
-    },
-    "is-dotfile": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
-      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
-      "dev": true
-    },
-    "is-equal-shallow": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
-      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
-      "dev": true,
-      "requires": {
-        "is-primitive": "2.0.0"
-      }
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-      "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-      "dev": true
-    },
-    "is-finite": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
-      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "1.0.1"
-      }
-    },
-    "is-fullwidth-code-point": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
-      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-      "dev": true,
-      "requires": {
-        "number-is-nan": "1.0.1"
-      }
-    },
-    "is-glob": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-      "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-      "dev": true,
-      "requires": {
-        "is-extglob": "1.0.0"
-      }
-    },
-    "is-my-ip-valid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
-      "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
-      "dev": true
-    },
-    "is-my-json-valid": {
-      "version": "2.17.2",
-      "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz",
-      "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==",
-      "dev": true,
-      "requires": {
-        "generate-function": "2.0.0",
-        "generate-object-property": "1.2.0",
-        "is-my-ip-valid": "1.0.0",
-        "jsonpointer": "4.0.1",
-        "xtend": "4.0.1"
-      }
-    },
-    "is-number": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
-      "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
-      "dev": true,
-      "requires": {
-        "kind-of": "3.2.2"
-      }
-    },
-    "is-path-cwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
-      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-      "dev": true
-    },
-    "is-path-in-cwd": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
-      "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
-      "dev": true,
-      "requires": {
-        "is-path-inside": "1.0.1"
-      }
-    },
-    "is-path-inside": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
-      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
-      "dev": true,
-      "requires": {
-        "path-is-inside": "1.0.2"
-      }
-    },
-    "is-posix-bracket": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
-      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
-      "dev": true
-    },
-    "is-primitive": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
-      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
-      "dev": true
-    },
-    "is-property": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
-      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
-      "dev": true
-    },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
-      "dev": true
-    },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
-    },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
-      "dev": true
-    },
-    "isbinaryfile": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
-      "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
-      "dev": true
-    },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
-    },
-    "isobject": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-      "dev": true,
-      "requires": {
-        "isarray": "1.0.0"
-      }
-    },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
-      "dev": true
-    },
-    "istanbul": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
-      "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
-      "dev": true,
-      "requires": {
-        "abbrev": "1.0.9",
-        "async": "1.5.2",
-        "escodegen": "1.8.1",
-        "esprima": "2.7.3",
-        "glob": "5.0.15",
-        "handlebars": "4.0.11",
-        "js-yaml": "3.11.0",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "once": "1.4.0",
-        "resolve": "1.1.7",
-        "supports-color": "3.2.3",
-        "which": "1.3.0",
-        "wordwrap": "1.0.0"
-      },
-      "dependencies": {
-        "abbrev": {
-          "version": "1.0.9",
-          "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
-          "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
-          "dev": true
-        },
-        "argparse": {
-          "version": "1.0.10",
-          "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-          "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-          "dev": true,
-          "requires": {
-            "sprintf-js": "1.0.3"
-          }
-        },
-        "async": {
-          "version": "1.5.2",
-          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
-          "dev": true
-        },
-        "esprima": {
-          "version": "2.7.3",
-          "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
-          "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
-          "dev": true
-        },
-        "glob": {
-          "version": "5.0.15",
-          "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-          "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
-          "dev": true,
-          "requires": {
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
-          }
-        },
-        "js-yaml": {
-          "version": "3.11.0",
-          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz",
-          "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
-          "dev": true,
-          "requires": {
-            "argparse": "1.0.10",
-            "esprima": "4.0.0"
-          },
-          "dependencies": {
-            "esprima": {
-              "version": "4.0.0",
-              "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
-              "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
-              "dev": true
-            }
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true

<TRUNCATED>