You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mc...@apache.org on 2018/06/07 20:39:07 UTC

nifi-fds git commit: [NIFI-5216] facilitate npm publish [NIFI-5216] update README and remove deploy:ghpages This closes #4

Repository: nifi-fds
Updated Branches:
  refs/heads/master 9a373b8bb -> 09e43612e


[NIFI-5216] facilitate npm publish
[NIFI-5216] update README and remove deploy:ghpages
This closes #4


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

Branch: refs/heads/master
Commit: 09e43612e7666f83e03dd6d20be809f41cbec476
Parents: 9a373b8
Author: Scott Aslan <sc...@gmail.com>
Authored: Wed Jun 6 19:19:17 2018 -0400
Committer: Matt Gilman <ma...@gmail.com>
Committed: Thu Jun 7 16:38:45 2018 -0400

----------------------------------------------------------------------
 .gitignore                                      |   3 +
 README.md                                       | 104 +++++++++------
 docs/CONTRIBUTING.md                            |  65 ++++++++++
 package-lock.json                               |  97 ++++++++++----
 package.json                                    |   5 +-
 scripts/clean-install                           |  33 ++++-
 scripts/clean-install-skipTests                 |  19 ++-
 scripts/deploy-gh-pages                         |  33 -----
 scripts/dev-install                             |  33 ++++-
 scripts/dev-install-skipTests                   |  24 +++-
 scripts/npm-publish                             |   7 +
 src/demo-app/gh-pages.index.html                |   2 +-
 src/demo-app/gh-pages.package.json              |  71 ----------
 src/demo-app/gh-pages.systemjs.config.js        | 129 -------------------
 src/demo-app/index.html                         |   5 +-
 src/demo-app/systemjs.config.js                 |  34 ++---
 src/demo-app/theming/fds-demo.scss              |   6 +-
 .../core/common/styles/_basicElements.scss      |  16 +--
 src/platform/core/common/styles/_inputs.scss    |   4 +-
 src/platform/core/package.json                  |  40 ++++++
 src/platform/core/theming/_all-theme.scss       |   4 +-
 test/karma.conf.js                              |   1 -
 22 files changed, 385 insertions(+), 350 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index e3a849c..e0d4bd2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,7 @@
 target/
+node_modules/
+demo-app/
+index.html
 npm-debug.log*
 
 # Intellij

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 5da3b19..5535e4f 100644
--- a/README.md
+++ b/README.md
@@ -1,18 +1,41 @@
 # Apache NiFi Flow Design System
 
-The Apache NiFi Flow Design System module is an atomic reusable platform providing consistent set of UI/UX components for open source friendly web applications to consume. Users can interact with this design system by running the demo-app locally or by visiting: [https://apache.github.io/nifi-fds/](https://apache.github.io/nifi-fds/). This demo application also provides an example of how an Angular application would leverage the nifi-fds NgModule.
+The Apache NiFi Flow Design System is an atomic reusable platform for providing a consistent set of UI/UX components for open source friendly web applications to consume. Users can interact with this design system by running the demo-app locally or by visiting: [https://apache.github.io/nifi-fds/](https://apache.github.io/nifi-fds/).
 
-#### npm
+The demo application serves 2 main purposes
+* As a way for code reviewers to validate code changes as well as each `@nifi-fds/core` release 
+* Provides a working example of how an Angular application should leverage the `@nifi-fds/core`.
 
-For developers not interested in building the FDS NgModule you can use **npm** to install the distribution files. (TBD: awaiting 0.1 release)
+## Quick Start
+For developers not interested in building the FDS NgModule you can use **npm** to install the distribution files.
 
 ```bash
-npm install nifi-fds
+npm install @nifi-fds/core
 ```
 
-## Setup
+#### SystemJS
+If your project is using the SystemJS module loader, you will need to add `@nifi-fds/core` to the configuration:
 
-Import the **Apache NiFi Flow Design System** NgModule into your angular application:
+```javascript
+System.config({
+  // existing configuration options
+  map: {
+    ...,
+    '@flow-design-system/core': 'node_modules/@nifi-fds/core/flow-design-system.module.js',
+    '@flow-design-system/dialogs': 'node_modules/@nifi-fds/core/dialogs/fds-dialogs.module.js',
+    '@flow-design-system/dialog-component': 'node_modules/@nifi-fds/core/dialogs/fds-dialog.component.js',
+    '@flow-design-system/dialog-service': 'node_modules/@nifi-fds/core/dialogs/services/dialog.service.js',
+    '@flow-design-system/confirm-dialog-component': 'node_modules/@nifi-fds/core/dialogs/confirm-dialog/confirm-dialog.component.js',
+    '@flow-design-system/snackbars': 'node_modules/@nifi-fds/core/snackbars/fds-snackbars.module.js',
+    '@flow-design-system/snackbar-component': 'node_modules/@nifi-fds/core/snackbars/fds-snackbar.component.js',
+    '@flow-design-system/snackbar-service': 'node_modules/@nifi-fds/core/snackbars/services/snackbar.service.js',
+    '@flow-design-system/coaster-component': 'node_modules/@nifi-fds/core/snackbars/coaster/coaster.component.js',
+    '@flow-design-system/common/storage-service': 'node_modules/@nifi-fds/core/common/services/fds-storage.service.js'
+  }
+});
+```
+
+Next, import the **Apache NiFi Flow Design System** NgModule into your angular application. 
 
 ```javascript
 var fdsCore = require('flow-design-system/core');
@@ -24,24 +47,28 @@ AppModule.annotations = [
     new ngCore.NgModule({
         imports: [
             fdsCore,
-    ...
-  ],
-  ...
-})
+            ...
+        ],
+        ...
+    })
 ...
 ```
 
-## Styles, Icons and Theming
+#### Style and Theming
+The Apache NiFi Flow Design System comes with a base CSS file `node_modules/@nifi-fds/core/common/styles/css/flow-design-system.min.css` (includes icons). This file must be included in the head of the HTML document before the theme file.
 
-A typical theme file will look something like this:
 
-```javascript
-@import '../../platform/core/theming/all-theme';
+NiFi FDS is also a themeable UI/UX component platform. To customize the core FDS components create a simple Sass file that defines your palettes and passes them to mixins that output the corresponding styles. A typical theme file will look something like this:
 
-$primaryColor: #9E737D;
-$primaryColorHover: #915D69;
-$accentColor: #d0dbe0;
-$accentColorHover: #CCCCCC;
+```sass
+@import '../../node_modules/@nifi-fds/core/common/styles/globalVars';
+@import '../../node_modules/@nifi-fds/core/theming/all-theme';
+
+//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.
@@ -62,38 +89,41 @@ $fds-theme: mat-light-theme($fds-primary, $fds-accent, $fds-warn);
 @include fds-theme($fds-theme);
 ```
 
-The Apache NiFi Flow Design System UI/UX Platform comes with a base CSS file `node_modules/flow-design-system/core/common/styles/css/flow-design-system.min.css` (includes icons) that should be included in the head of your HTML document.
+You don't have to use Sass to style the rest of your application but you will need to compile this one. Angular CLI, grunt-sass, gulp-sass, and node-sass are all great options; the output of which will be a CSS file that must be included in the head of the HTML document after the base NiFi FDS CSS styles:
+
+```html
+<link rel="stylesheet" href='node_modules/@nifi-fds/core/common/styles/css/flow-design-system.min.css'/>
+<link rel="stylesheet" href='demo-app/css/fds-demo.min.css'/>
+```
 
-## Building
+NOTE: The theme file may be concatenated and minified with the rest of the application's CSS.
 
-Developers can easily build this project using **npm** from the root nifi-fds directory via:
+#### Building
+Developers can perform code changes and easily build this project using **npm** from the root nifi-fds directory via:
 
 ```bash
 npm run clean:install
 ```
 
-or to run without unit tests run:
+or to build without running unit tests run:
 
 ```bash
 npm run clean:install:skipTests
 ```
 
-## Developing
-
-Developers can easily skip the re-instalation of node_modules and run unit tests in development mode using **npm**.
+Developers can speed up development time by skipping the re-installation of all node_modules:
 
 ```bash
 npm run dev:install
 ```
 
-or to run without unit tests run:
+or to skip re-installation of node_modules as well as building without running unit tests:
 
 ```bash
 npm run dev:install:skipTests
 ```
 
-## Running locally
-
+#### Running locally
 Once built you can start the application from the target directory via:
 
 ```bash
@@ -101,18 +131,10 @@ cd target
 npm start
 ```
 
-The demo application should now be availalbe at: [http://127.0.0.1:8080/](http://127.0.0.1:8080/). The port may differ if there is a conflict on 8080. See the output of the start command for the 
-available URLs.
-
-## Release Managment
-
-For developers with permissions releasing a new version of the NiFi Flow Design System is simple with [grunt bump](https://github.com/vojtajina/grunt-bump).
-
-## Deploying github.io demo
+The demo application should now be availalbe at: [http://127.0.0.1:8080/](http://127.0.0.1:8080/). The port may differ if there is a conflict on 8080. See the output of the start command for the available URLs.
 
-The nifi-fds github.io demo can be deployed from the root nifi-fds directory via: (TBD: awaiting 0.1 release)
-
-```bash
-npm run deploy:ghpages
-```
+## Contact us!
+The developer mailing list (dev@nifi.apache.org) is monitored pretty closely, and we tend to respond quickly.  If you have a question, don't hesitate to shoot us an e-mail - we're here to help! Unfortunately, though, e-mails can get lost in the shuffle, so if you do send an e-mail and don't get a response within a day or two, it's our fault - don't worry about bothering us. Just ping the mailing list again.
 
+## Documentation
+* [Contributing Guidelines](docs/CONTRIBUTING.md)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/docs/CONTRIBUTING.md
----------------------------------------------------------------------
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
new file mode 100644
index 0000000..a3e7b3a
--- /dev/null
+++ b/docs/CONTRIBUTING.md
@@ -0,0 +1,65 @@
+## Contributors
+We are always excited to have contributions from the community - especially from new contributors!
+We are interested in accepting contributions of code, as well as documentation and even artwork that can be applied as icons or styling to the application.
+
+#### Getting started...
+NiFi's JIRA page can be used to find tickets:  
+
+[NiFi Flow Design System Unassigned Issues](https://issues.apache.org/jira/issues/?filter=12331670&jql=project%20%3D%20NIFI%20AND%20resolution%20%3D%20Unresolved%20AND%20component%20%3D%20FDS%20AND%20assignee%20in%20(EMPTY)%20ORDER%20BY%20priority%20DESC)
+
+#### Create a ticket for new bugs or features
+Run into a bug or think there is something that would benefit the project?  Regardless if you have the time to provide the fix or implementation, we encourage any such items to be filed as an issue at the Apache NiFi JIRA.
+
+#### Providing contributions
+The source is hosted at https://git-wip-us.apache.org/repos/asf/nifi-fds.git
+
+Like all Apache projects, a mirror of the git repository is also located on GitHub at https://github.com/apache/nifi-fds which provides ease in forking and generating pull requests (PRs).
+
+#### Configure your git client
+Ensure your git user name and email are configured
+ The following lines ensure your commits are appropriately annotated with your information
+```bash
+git config --global user.name "User Name"
+git config --global user.email user.name@email.org
+```
+ 
+##### Windows Specific configuration
+The following options provide handling of long file paths that can be troublesome as well as not using Windows style line returns.
+```bash
+git config --global core.longpaths true
+git config --global core.autocrlf false
+```
+ 
+#### Clone a copy of the repository
+From the Apache Hosted Repository
+```bash
+git clone https://git-wip-us.apache.org/repos/asf/nifi-fds.git
+```
+
+From the GitHub Mirror
+```bash
+git clone https://github.com/apache/nifi-fds.git
+```
+
+From your GitHub Fork
+```bash
+git clone git@github.com:<account name>/nifi-fds.git
+```
+
+#### Retrieval of upstream changes
+Additionally, it is beneficial to add a git remote for the mirror to allow the retrieval of upstream changes
+```bash
+git remote add upstream https://github.com/apache/nifi.git
+```
+
+### The NiFi community uses a modified Gitflow development model.  A summary:
+* Use of a central repository
+* Branch per feature similar to the Feature Branch Workflow
+* Work is done locally and then pushed to the central repo
+* 'master' branch contains the official release history.  Code changes (not code formatting, administrative updates) require Review-Then-Commit (RTC) by another committer to get incorporated.
+
+Apache NIFI has a Review-Then-Commit (RTC) philosophy for handling all contributions.  Reviewers first ensure that the code applies and builds appropriately.  From here, code is evaluated to ensure best practices within the NiFi FDS are applied and, where applicable, that the user experience of interfacing with the contribution is consistent and any changes are backwards compatible.  This process may be iterative but works toward a final product that is then merged into the codebase. 
+
+While only committers can actively promote contributions into the repository, feedback on issues, regardless of committer status, is appreciated and valued in the review process.
+
+If you are interested in facilitating the review process, a listing of all code contributions with a patch are available via a JIRA filter, NIFI Patch Available.

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/package-lock.json
----------------------------------------------------------------------
diff --git a/package-lock.json b/package-lock.json
index b280440..bddc961 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -645,11 +645,15 @@
       "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
       "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
       "dev": true,
+      "requires": {
+        "hoek": "5.0.3"
+      },
       "dependencies": {
         "hoek": {
           "version": "5.0.3",
           "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+          "dev": true
         }
       }
     },
@@ -995,7 +999,18 @@
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
           "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
-          "dev": true
+          "dev": true,
+          "requires": {
+            "hoek": "5.0.3"
+          },
+          "dependencies": {
+            "hoek": {
+              "version": "5.0.3",
+              "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true
+            }
+          }
         },
         "hoek": {
           "version": "5.0.3",
@@ -2616,13 +2631,15 @@
       "requires": {
         "boom": "4.3.1",
         "cryptiles": "3.1.2",
+        "hoek": "5.0.3",
         "sntp": "2.1.0"
       },
       "dependencies": {
         "hoek": {
           "version": "5.0.3",
           "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+          "dev": true
         }
       }
     },
@@ -3151,22 +3168,13 @@
       }
     },
     "jasmine": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz",
-      "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.1.0.tgz",
+      "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=",
       "dev": true,
       "requires": {
-        "exit": "0.1.2",
         "glob": "7.0.6",
-        "jasmine-core": "2.8.0"
-      },
-      "dependencies": {
-        "jasmine-core": {
-          "version": "2.8.0",
-          "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
-          "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
-          "dev": true
-        }
+        "jasmine-core": "3.1.0"
       }
     },
     "jasmine-core": {
@@ -3544,6 +3552,7 @@
         "hipchat-notifier": "1.1.0",
         "loggly": "1.1.1",
         "mailgun-js": "0.7.15",
+        "nodemailer": "4.0.1",
         "redis": "2.8.0",
         "semver": "5.5.0",
         "slack-node": "0.2.0",
@@ -3553,7 +3562,9 @@
         "nodemailer": {
           "version": "4.0.1",
           "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.0.1.tgz",
-          "integrity": "sha1-uVhksH+s7oKH6CMu/9bx1W7HWrI="
+          "integrity": "sha1-uVhksH+s7oKH6CMu/9bx1W7HWrI=",
+          "dev": true,
+          "optional": true
         }
       }
     },
@@ -3598,11 +3609,15 @@
           "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
           "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
           "dev": true,
+          "requires": {
+            "hoek": "5.0.3"
+          },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true
             }
           }
         },
@@ -3657,13 +3672,16 @@
           "requires": {
             "boom": "2.10.1",
             "cryptiles": "2.0.5",
+            "hoek": "5.0.3",
             "sntp": "1.0.9"
           },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true,
+              "optional": true
             }
           }
         },
@@ -3756,11 +3774,16 @@
           "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
           "dev": true,
           "optional": true,
+          "requires": {
+            "hoek": "5.0.3"
+          },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true,
+              "optional": true
             }
           }
         },
@@ -4096,11 +4119,15 @@
           "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
           "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
           "dev": true,
+          "requires": {
+            "hoek": "5.0.3"
+          },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true
             }
           }
         },
@@ -4150,13 +4177,15 @@
           "requires": {
             "boom": "2.10.1",
             "cryptiles": "2.0.5",
+            "hoek": "5.0.3",
             "sntp": "1.0.9"
           },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true
             }
           }
         },
@@ -4215,11 +4244,15 @@
           "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
           "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
           "dev": true,
+          "requires": {
+            "hoek": "5.0.3"
+          },
           "dependencies": {
             "hoek": {
               "version": "5.0.3",
               "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+              "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+              "dev": true
             }
           }
         },
@@ -4700,7 +4733,7 @@
         "blocking-proxy": "1.0.1",
         "chalk": "1.1.3",
         "glob": "7.0.6",
-        "jasmine": "2.8.0",
+        "jasmine": "3.1.0",
         "jasminewd2": "2.2.0",
         "optimist": "0.6.1",
         "q": "1.4.1",
@@ -4717,6 +4750,16 @@
           "integrity": "sha512-eknaJ3Io/JasGGinVeqY5TsPlQgHbiNlHnK5zdFPRNs9XRggDykKz8zPesneOMEZJxWji7G3CfsUW0Ds9Dw0Bw==",
           "dev": true
         },
+        "jasmine": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.1.0.tgz",
+          "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=",
+          "dev": true,
+          "requires": {
+            "glob": "7.0.6",
+            "jasmine-core": "3.1.0"
+          }
+        },
         "rimraf": {
           "version": "2.6.2",
           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
@@ -5310,11 +5353,15 @@
       "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
       "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
       "dev": true,
+      "requires": {
+        "hoek": "5.0.3"
+      },
       "dependencies": {
         "hoek": {
           "version": "5.0.3",
           "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.3.tgz",
-          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw=="
+          "integrity": "sha512-Bmr56pxML1c9kU+NS51SMFkiVQAb+9uFfXwyqR2tn4w2FPvmPt65eZ9aCcEfRXd9G74HkZnILC6p967pED4aiw==",
+          "dev": true
         }
       }
     },

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index 7e988fb..a73ea81 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
     "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",
+    "publish": "bash ./scripts/npm-publish",
     "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"
   },
@@ -36,6 +36,7 @@
     "material design",
     "components",
     "reusable",
+    "nifi-fds",
     "covalent"
   ],
   "repository": {
@@ -77,7 +78,7 @@
     "grunt-contrib-compress": "1.4.3",
     "grunt-sass": "2.1.0",
     "http-server": "0.11.1",
-    "jasmine-core": "3.1.0",
+    "jasmine": "3.1.0",
     "karma": "2.0.2",
     "karma-chrome-launcher": "2.2.0",
     "karma-cli": "1.0.1",

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/clean-install
----------------------------------------------------------------------
diff --git a/scripts/clean-install b/scripts/clean-install
index e1337dc..9a9a20d 100644
--- a/scripts/clean-install
+++ b/scripts/clean-install
@@ -16,8 +16,39 @@
 set -e
 
 # build
-bash ./scripts/clean-install-skipTests
+rm -rf ./target
+mkdir target
+cp -R ./src/demo-app/ ./target/demo-app
+cp -R ./src/platform/ ./target/platform
+cp package.json ./target/package.json
+cp package-lock.json ./target/package-lock.json
+cp README.md ./target/README.md
+cp LICENSE ./target/LICENSE
+cp NOTICE ./target/NOTICE
+cp ./src/demo-app/index.html ./target/index.html
+cp ./test/karma.conf.js ./target/karma.conf.js
+cp ./test/karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp ./src/demo-app/gh-pages.* ./target/
 cd ./target
+npm install
+
+# build platform base styles
+npm run build:platform
 
 # test
 npm test
+
+# simulate npm install of @nifi-fds/core
+mkdir ./node_modules/@nifi-fds
+mv ./platform/core/ ./node_modules/@nifi-fds
+cp ../README.md ./node_modules/@nifi-fds/core/
+cp ../LICENSE ./node_modules/@nifi-fds/core/
+cp ../NOTICE ./node_modules/@nifi-fds/core/
+
+# build demo theme
+npm run build:demo-app
+
+# clean up
+rm -rf ./platform
+

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/clean-install-skipTests
----------------------------------------------------------------------
diff --git a/scripts/clean-install-skipTests b/scripts/clean-install-skipTests
index 903e185..e45cfeb 100644
--- a/scripts/clean-install-skipTests
+++ b/scripts/clean-install-skipTests
@@ -22,6 +22,9 @@ cp -R ./src/demo-app/ ./target/demo-app
 cp -R ./src/platform/ ./target/platform
 cp package.json ./target/package.json
 cp package-lock.json ./target/package-lock.json
+cp README.md ./target/README.md
+cp LICENSE ./target/LICENSE
+cp NOTICE ./target/NOTICE
 cp ./src/demo-app/index.html ./target/index.html
 cp ./test/karma.conf.js ./target/karma.conf.js
 cp ./test/karma-test-shim.js ./target/karma-test-shim.js
@@ -29,5 +32,19 @@ cp Gruntfile.js ./target/Gruntfile.js
 cp ./src/demo-app/gh-pages.* ./target/
 cd ./target
 npm install
-npm run build:demo-app
+
+# build platform base styles
 npm run build:platform
+
+# simulate npm install of @nifi-fds/core
+mkdir ./node_modules/@nifi-fds
+mv ./platform/core/ ./node_modules/@nifi-fds
+cp ../README.md ./node_modules/@nifi-fds/core/
+cp ../LICENSE ./node_modules/@nifi-fds/core/
+cp ../NOTICE ./node_modules/@nifi-fds/core/
+
+# build demo theme
+npm run build:demo-app
+
+# clean up
+rm -rf ./platform

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/deploy-gh-pages
----------------------------------------------------------------------
diff --git a/scripts/deploy-gh-pages b/scripts/deploy-gh-pages
deleted file mode 100644
index 61c799f..0000000
--- a/scripts/deploy-gh-pages
+++ /dev/null
@@ -1,33 +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.
-#!/bin/bash
-npm run clean:install
-echo 'Build Complete'
-git checkout gh-pages
-echo 'Created and Checked out gh-pages branch'
-
-cp -f ./target/gh-pages.package.json ./package.json
-npm install
-mkdir ./node_modules/nifi-fds
-cp -Rf ./target/platform/ ./node_modules/nifi-fds/platform
-cp -Rf ./target/demo-app/ ./demo-app
-cp -f ./target/gh-pages.index.html ./index.html
-cp -f ./target/gh-pages.systemjs.config.js ./demo-app/systemjs.config.js
-echo 'Tracking files'
-git add -A .
-echo 'Commiting files'
-git commit -m 'gh-pages update'
-echo 'Pushing files into gh-pages branch'
-git push apache gh-pages:gh-pages

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/dev-install
----------------------------------------------------------------------
diff --git a/scripts/dev-install b/scripts/dev-install
index e29fd8f..345a728 100644
--- a/scripts/dev-install
+++ b/scripts/dev-install
@@ -16,8 +16,37 @@
 set -e
 
 # build
-bash ./scripts/dev-install-skipTests
+cp -Rf ./src/demo-app/ ./target/demo-app
+cp -Rf ./src/platform/ ./target/platform
+cp package.json ./target/package.json
+cp package-lock.json ./target/package-lock.json
+cp README.md ./target/README.md
+cp LICENSE ./target/LICENSE
+cp NOTICE ./target/NOTICE
+cp ./src/demo-app/index.html ./target/index.html
+cp ./test/karma.conf.js ./target/karma.conf.js
+cp ./test/karma-test-shim.js ./target/karma-test-shim.js
+cp Gruntfile.js ./target/Gruntfile.js
+cp ./src/demo-app/gh-pages.* ./target/
 cd ./target
+npm install
+
+# build platform base styles
+npm run build:platform
 
 # test
-npm run test:dev
+npm test
+
+# simulate npm install of @nifi-fds/core
+rm -rf ./node_modules/@nifi-fds
+mkdir ./node_modules/@nifi-fds
+mv ./platform/core/ ./node_modules/@nifi-fds
+cp ../README.md ./node_modules/@nifi-fds/core/
+cp ../LICENSE ./node_modules/@nifi-fds/core/
+cp ../NOTICE ./node_modules/@nifi-fds/core/
+
+# build demo theme
+npm run build:demo-app
+
+# clean up
+rm -rf ./platform

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/dev-install-skipTests
----------------------------------------------------------------------
diff --git a/scripts/dev-install-skipTests b/scripts/dev-install-skipTests
index ba9c142..31c58c3 100644
--- a/scripts/dev-install-skipTests
+++ b/scripts/dev-install-skipTests
@@ -16,10 +16,13 @@
 set -e
 
 # build
-cp -R ./src/demo-app/ ./target/demo-app
-cp -R ./src/platform/ ./target/platform
+cp -Rf ./src/demo-app/ ./target/demo-app
+cp -Rf ./src/platform/ ./target/platform
 cp package.json ./target/package.json
 cp package-lock.json ./target/package-lock.json
+cp README.md ./target/README.md
+cp LICENSE ./target/LICENSE
+cp NOTICE ./target/NOTICE
 cp ./src/demo-app/index.html ./target/index.html
 cp ./test/karma.conf.js ./target/karma.conf.js
 cp ./test/karma-test-shim.js ./target/karma-test-shim.js
@@ -27,5 +30,20 @@ cp Gruntfile.js ./target/Gruntfile.js
 cp ./src/demo-app/gh-pages.* ./target/
 cd ./target
 npm install
-npm run build:demo-app
+
+# build platform base styles
 npm run build:platform
+
+# simulate npm install of @nifi-fds/core
+rm -rf ./node_modules/@nifi-fds
+mkdir ./node_modules/@nifi-fds
+mv ./platform/core/ ./node_modules/@nifi-fds
+cp ../README.md ./node_modules/@nifi-fds/core/
+cp ../LICENSE ./node_modules/@nifi-fds/core/
+cp ../NOTICE ./node_modules/@nifi-fds/core/
+
+# build demo theme
+npm run build:demo-app
+
+# clean up
+rm -rf ./platform

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/scripts/npm-publish
----------------------------------------------------------------------
diff --git a/scripts/npm-publish b/scripts/npm-publish
new file mode 100644
index 0000000..bb261b6
--- /dev/null
+++ b/scripts/npm-publish
@@ -0,0 +1,7 @@
+#!/usr/bin/env bash
+set -e
+
+# build
+bash ./scripts/clean-install
+cd ./target/node_modules/@nifi-fds/core
+npm publish --access public
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/demo-app/gh-pages.index.html
----------------------------------------------------------------------
diff --git a/src/demo-app/gh-pages.index.html b/src/demo-app/gh-pages.index.html
index 8e3ce02..b5c94b7 100644
--- a/src/demo-app/gh-pages.index.html
+++ b/src/demo-app/gh-pages.index.html
@@ -21,7 +21,7 @@
     <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/flow-design-system.min.css'/>
+    <link rel="stylesheet" href='node_modules/@nifi-fds/core/common/styles/css/flow-design-system.min.css'/>
     <link rel="stylesheet" href='demo-app/css/fds-demo.min.css'/>
     <link rel='stylesheet' href='node_modules/font-awesome/css/font-awesome.css'/>
 </head>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/demo-app/gh-pages.package.json
----------------------------------------------------------------------
diff --git a/src/demo-app/gh-pages.package.json b/src/demo-app/gh-pages.package.json
deleted file mode 100644
index 00753cc..0000000
--- a/src/demo-app/gh-pages.package.json
+++ /dev/null
@@ -1,71 +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.",
-  "name": "nifi-fds-demo",
-  "version": "0.0.0",
-  "scripts": {
-    "start": "./node_modules/http-server/bin/http-server ."
-  },
-  "description": "The Apache NiFi Flow 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": [
-    "flow 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-2.0",
-  "dependencies": {
-    "core-js": "2.5.5",
-    "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",
-    "detect-libc": "1.0.3",
-    "font-awesome": "4.7.0",
-    "hammerjs": "2.0.8",
-    "roboto-fontface": "0.7.0"
-  },
-  "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/09e43612/src/demo-app/gh-pages.systemjs.config.js
----------------------------------------------------------------------
diff --git a/src/demo-app/gh-pages.systemjs.config.js b/src/demo-app/gh-pages.systemjs.config.js
deleted file mode 100644
index 3fc22e9..0000000
--- a/src/demo-app/gh-pages.systemjs.config.js
+++ /dev/null
@@ -1,129 +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.
- */
-
-(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': './demo-app',
-
-            // 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',
-
-            // Flow Design System
-            '@flow-design-system/core': 'npm:nifi-fds/platform/core/flow-design-system.module.js',
-            '@flow-design-system/dialogs': 'npm:nifi-fds/platform/core/dialogs/fds-dialogs.module.js',
-            '@flow-design-system/dialog-component': 'npm:nifi-fds/platform/core/dialogs/fds-dialog.component.js',
-            '@flow-design-system/dialog-service': 'npm:nifi-fds/platform/core/dialogs/services/dialog.service.js',
-            '@flow-design-system/confirm-dialog-component': 'npm:nifi-fds/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
-            '@flow-design-system/snackbars': 'npm:nifi-fds/platform/core/snackbars/fds-snackbars.module.js',
-            '@flow-design-system/snackbar-component': 'npm:nifi-fds/platform/core/snackbars/fds-snackbar.component.js',
-            '@flow-design-system/snackbar-service': 'npm:nifi-fds/platform/core/snackbars/services/snackbar.service.js',
-            '@flow-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: 'demo-app/systemjs-angular-loader.js'
-                    }
-                }
-            },
-            'demo-app/systemjs-angular-loader.js': {
-                loader: false
-            },
-            'rxjs': {
-                defaultExtension: 'js'
-            }
-        }
-    });
-})(this);

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/demo-app/index.html
----------------------------------------------------------------------
diff --git a/src/demo-app/index.html b/src/demo-app/index.html
index 29b0f25..ce269ea 100644
--- a/src/demo-app/index.html
+++ b/src/demo-app/index.html
@@ -21,7 +21,6 @@
     <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/flow-design-system.min.css'/>
     <link rel="stylesheet" href='demo-app/css/fds-demo.min.css'/>
     <link rel='stylesheet' href='node_modules/font-awesome/css/font-awesome.css'/>
 </head>
@@ -31,6 +30,8 @@
 <script src="node_modules/systemjs/dist/system.src.js"></script>
 <script src="demo-app/systemjs.config.js?"></script>
 <script>
-    System.import('demo-app/fds-bootstrap.js').catch(function(err) {console.error(err);});
+    System.import('demo-app/fds-bootstrap.js').catch(function (err) {
+        console.error(err);
+    });
 </script>
 </html>

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/demo-app/systemjs.config.js
----------------------------------------------------------------------
diff --git a/src/demo-app/systemjs.config.js b/src/demo-app/systemjs.config.js
index 8065cca..f9bfb96 100644
--- a/src/demo-app/systemjs.config.js
+++ b/src/demo-app/systemjs.config.js
@@ -93,21 +93,19 @@
             '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',
 
             // Flow Design System
-            '@flow-design-system/core': 'platform/core/flow-design-system.module.js',
-            '@flow-design-system/dialogs': 'platform/core/dialogs/fds-dialogs.module.js',
-            '@flow-design-system/dialog-component': 'platform/core/dialogs/fds-dialog.component.js',
-            '@flow-design-system/dialog-service': 'platform/core/dialogs/services/dialog.service.js',
-            '@flow-design-system/confirm-dialog-component': 'platform/core/dialogs/confirm-dialog/confirm-dialog.component.js',
-            '@flow-design-system/snackbars': 'platform/core/snackbars/fds-snackbars.module.js',
-            '@flow-design-system/snackbar-component': 'platform/core/snackbars/fds-snackbar.component.js',
-            '@flow-design-system/snackbar-service': 'platform/core/snackbars/services/snackbar.service.js',
-            '@flow-design-system/coaster-component': 'platform/core/snackbars/coaster/coaster.component.js',
-            '@flow-design-system/common/storage-service': 'platform/core/common/services/fds-storage.service.js'
+            '@flow-design-system/core': 'npm:@nifi-fds/core/flow-design-system.module.js',
+            '@flow-design-system/dialogs': 'npm:@nifi-fds/core/dialogs/fds-dialogs.module.js',
+            '@flow-design-system/dialog-component': 'npm:@nifi-fds/core/dialogs/fds-dialog.component.js',
+            '@flow-design-system/dialog-service': 'npm:@nifi-fds/core/dialogs/services/dialog.service.js',
+            '@flow-design-system/confirm-dialog-component': 'npm:@nifi-fds/core/dialogs/confirm-dialog/confirm-dialog.component.js',
+            '@flow-design-system/snackbars': 'npm:@nifi-fds/core/snackbars/fds-snackbars.module.js',
+            '@flow-design-system/snackbar-component': 'npm:@nifi-fds/core/snackbars/fds-snackbar.component.js',
+            '@flow-design-system/snackbar-service': 'npm:@nifi-fds/core/snackbars/services/snackbar.service.js',
+            '@flow-design-system/coaster-component': 'npm:@nifi-fds/core/snackbars/coaster/coaster.component.js',
+            '@flow-design-system/common/storage-service': 'npm:@nifi-fds/core/common/services/fds-storage.service.js'
         },
         // packages tells the System loader how to load when no filename and/or no extension
         packages: {
@@ -124,18 +122,6 @@
             },
             'rxjs': {
                 defaultExtension: 'js'
-            },
-            'querystring': {
-                main: './index.js',
-                defaultExtension: 'js'
-            },
-            'moment': {
-                main: './moment.js',
-                defaultExtension: 'js'
-            },
-            'angular2-moment': {
-                main: './index.js',
-                defaultExtension: 'js'
             }
         }
     });

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/demo-app/theming/fds-demo.scss
----------------------------------------------------------------------
diff --git a/src/demo-app/theming/fds-demo.scss b/src/demo-app/theming/fds-demo.scss
index 3668229..3ef54f6 100644
--- a/src/demo-app/theming/fds-demo.scss
+++ b/src/demo-app/theming/fds-demo.scss
@@ -19,8 +19,10 @@
  * In this file you should centralize your imports. After compilation simply import this file using the following HTML or equivalent:
  * <link href='demo-app/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 '../../node_modules/@nifi-fds/core/common/styles/globalVars';
+// Include the base styles for Nifi FDS core. We include this here so that you only
+// have to load a single css file for Nifi FDS in your app.
+@import '../../node_modules/@nifi-fds/core/theming/all-theme';
 @import 'structureElements';
 @import 'helperClasses';
 

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/platform/core/common/styles/_basicElements.scss
----------------------------------------------------------------------
diff --git a/src/platform/core/common/styles/_basicElements.scss b/src/platform/core/common/styles/_basicElements.scss
index 76c3a58..333729e 100644
--- a/src/platform/core/common/styles/_basicElements.scss
+++ b/src/platform/core/common/styles/_basicElements.scss
@@ -19,56 +19,56 @@
   font-family: 'Roboto';
   font-style: normal;
   font-weight: 300;
-  src: local("Roboto Light"), local("Roboto-Light"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-Light.ttf") format("truetype");
+  src: local("Roboto Light"), local("Roboto-Light"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-Light.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto';
   font-style: italic;
   font-weight: 300;
-  src: local("Roboto LightItalic"), local("Roboto-LightItalic"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-LightItalic.ttf") format("truetype");
+  src: local("Roboto LightItalic"), local("Roboto-LightItalic"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-LightItalic.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto';
   font-style: normal;
   font-weight: normal;
-  src: local("Roboto Regular"), local("Roboto-Regular"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-Regular.ttf") format("truetype");
+  src: local("Roboto Regular"), local("Roboto-Regular"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-Regular.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto';
   font-style: normal;
   font-weight: 500;
-  src: local("Roboto Medium"), local("Roboto-Medium"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-Medium.ttf") format("truetype");
+  src: local("Roboto Medium"), local("Roboto-Medium"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-Medium.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto';
   font-style: normal;
   font-weight: bold;
-  src: local("Roboto Bold"), local("Roboto-Bold"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-Bold.ttf") format("truetype");
+  src: local("Roboto Bold"), local("Roboto-Bold"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-Bold.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto';
   font-style: italic;
   font-weight: normal;
-  src: local("Roboto Italic"), local("Roboto-Italic"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto/Roboto-RegularItalic.ttf") format("truetype");
+  src: local("Roboto Italic"), local("Roboto-Italic"), url("../../../../../roboto-fontface/fonts/roboto/Roboto-RegularItalic.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto Slab';
   font-style: normal;
   font-weight: normal;
-  src: local("RobotoSlab Regular"), local("RobotoSlab-Regular"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto-Slab/Roboto-Slab-Regular.ttf") format("truetype");
+  src: local("RobotoSlab Regular"), local("RobotoSlab-Regular"), url("../../../../../roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.ttf") format("truetype");
 }
 
 @font-face {
   font-family: 'Roboto Slab';
   font-style: normal;
   font-weight: bold;
-  src: local("RobotoSlab Bold"), local("RobotoSlab-Bold"), url("../../../../../../../node_modules/roboto-fontface/fonts/Roboto-Slab/Roboto-Slab-Bold.ttf") format("truetype");
+  src: local("RobotoSlab Bold"), local("RobotoSlab-Bold"), url("../../../../../roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.ttf") format("truetype");
 }
 
 body,

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/platform/core/common/styles/_inputs.scss
----------------------------------------------------------------------
diff --git a/src/platform/core/common/styles/_inputs.scss b/src/platform/core/common/styles/_inputs.scss
index cbcd08e..c7131cf 100644
--- a/src/platform/core/common/styles/_inputs.scss
+++ b/src/platform/core/common/styles/_inputs.scss
@@ -19,6 +19,7 @@
 
 body[fds] .mat-input-container {
   min-width: 200px;
+  width: 100%;
 }
 
 body[fds] .mat-input-wrapper {
@@ -32,7 +33,7 @@ body[fds] input.mat-input-element, body[fds] textarea.mat-input-element {
   border: 1px solid $grey8;
   height: 32px;
   padding: 0px 10px;
-  width: calc(100% - 26px);
+  width: calc(100% - 20px);
 }
 
 body[fds] textarea.mat-input-element {
@@ -87,7 +88,6 @@ body[fds] .mat-form-field-can-float .mat-form-field-autofill-control:-webkit-aut
 
 body[fds] .input-button {
   top: 5px;
-  left: -4px;
   border-left: none !important;
 }
 

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/platform/core/package.json
----------------------------------------------------------------------
diff --git a/src/platform/core/package.json b/src/platform/core/package.json
new file mode 100644
index 0000000..c59dc1e
--- /dev/null
+++ b/src/platform/core/package.json
@@ -0,0 +1,40 @@
+{
+  "name": "@nifi-fds/core",
+  "version": "0.0.0",
+  "description": "Flow Design System —a subproject of Apache NiFi— is an atomic reusable platform for providing a common set of UI/UX components for Apache NiFi, Apache NiFi Registry, Apache NiFi MiNiFi, and any other open source web applications to consume.",
+  "keywords": [
+    "angular",
+    "material",
+    "material design",
+    "components",
+    "covalent",
+    "reusable",
+    "nifi-fds",
+    "flow design system"
+  ],
+  "scripts": {
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/apache/nifi-fds.git"
+  },
+  "bugs": {
+    "url": "https://github.com/apache/nifi-fds/issues"
+  },
+  "license": "Apache-2.0",
+  "peerDependencies": {
+    "@covalent/core": "1.0.0",
+    "@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"
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-fds/blob/09e43612/src/platform/core/theming/_all-theme.scss
----------------------------------------------------------------------
diff --git a/src/platform/core/theming/_all-theme.scss b/src/platform/core/theming/_all-theme.scss
index 747ab8b..c0c1594 100644
--- a/src/platform/core/theming/_all-theme.scss
+++ b/src/platform/core/theming/_all-theme.scss
@@ -15,8 +15,8 @@
 * limitations under the License.
 */
 
-@import '../../../node_modules/@angular/material/theming';
-@import '../../../node_modules/@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/09e43612/test/karma.conf.js
----------------------------------------------------------------------
diff --git a/test/karma.conf.js b/test/karma.conf.js
index 929ce85..dde26dd 100644
--- a/test/karma.conf.js
+++ b/test/karma.conf.js
@@ -84,7 +84,6 @@ module.exports = function (config) {
             },
 
             // Paths for debugging with source maps in dev tools
-            {pattern: appBase + '**/*.css.map', included: false, watched: false},
             {pattern: appBase + '**/*.js', included: false, watched: false}
         ],