diff --git a/ui/docs/containers/app/index.js b/ui/docs/containers/app/index.js
new file mode 100644
index 00000000..52afa66f
--- /dev/null
+++ b/ui/docs/containers/app/index.js
@@ -0,0 +1,24 @@
+const React = require('react');
+const ReactRouter = require('react-router');
+
+const Navigation = require('./navigation.js');
+const Home = require('../home');
+const Item = require('../item/');
+
+const {
+ Base
+} = require('../../../src');;
+
+const {
+ Match
+} = ReactRouter;
+
+module.exports = () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/ui/docs/containers/app/navigation.js b/ui/docs/containers/app/navigation.js
new file mode 100644
index 00000000..c29070ba
--- /dev/null
+++ b/ui/docs/containers/app/navigation.js
@@ -0,0 +1,52 @@
+const classNames = require('classnames');
+const paramCase = require('param-case');
+const React = require('react');
+const ReactRouter = require('react-router');
+
+const Docs = require('../../../src/docs');
+const styles = require('./style.css');
+
+const {
+ Link
+} = ReactRouter;
+
+const getList = (items, parent) => {
+ let isNested = false;
+
+ const lis = Object.keys(items).map((name) => {
+ const item = items[name];
+ const param = paramCase(name);
+ const href = parent ? `${parent}/${param}` : `/${param}`;
+
+ isNested = (typeof item !== 'string');
+
+ return (
+
+ {name}
+ {isNested ? getList(item, href) : null}
+
+ );
+ });
+
+ const cn = classNames(
+ isNested ? styles['is-nested'] : ''
+ );
+
+ return (
+
+ );
+};
+
+module.exports = () => {
+ return (
+
+
+
+
+
+ );
+};
diff --git a/ui/docs/containers/app/style.css b/ui/docs/containers/app/style.css
new file mode 100644
index 00000000..dd09320a
--- /dev/null
+++ b/ui/docs/containers/app/style.css
@@ -0,0 +1,108 @@
+/* based on:
+ *
+ * salesforce-ux/design-system v2.1.3
+ * BSD License Clause 2
+ * github.com/salesforce-ux/design-system
+ */
+
+
+.navigation {
+ padding-top: 1.5rem;
+ padding-bottom: 1.5rem;
+
+ /* Arrow Icon */
+ & .icon_svg {
+ width: .5rem;
+ height: .5rem;
+ display: inline-block;
+ opacity: .5;
+ }
+
+ /* Hide closed menu items */
+ & .is-closed ul {
+ display: none;
+ }
+
+ /* Links */
+ & a {
+ display: block;
+ padding: .75rem 2rem;
+ line-height: 1.28571428571429;
+ color: #16325c;
+
+ &:hover {
+ background-color: rgba(244, 246, 249, .5);
+ }
+ }
+
+ /* Active Link */
+ & .is-active > a {
+ background-color: #eef1f6;
+ color: #0070d2;
+ }
+
+ /* Open Menu Items */
+ & .is-open {
+ padding-bottom: .5rem;
+ }
+
+ /* Section Selected */
+ & .is-selected {
+ background-color: #f4f6f9;
+
+ & a:hover {
+ background-color: #eceff5;
+ }
+
+ & .icon__svg {
+ opacity: 1;
+ }
+ }
+
+ /* Nested List */
+ & .is-nested {
+ margin-left: 0;
+
+ & a {
+ padding-top: .5rem;
+ padding-bottom: .5rem;
+ padding-left: 3.5rem;
+ }
+
+ & .is-nested a {
+ padding-left: 5rem;
+ }
+ }
+
+ @media (min-width: 48em) {
+ position: fixed;
+ top: 6rem;
+ bottom: 0;
+ border-right: 1px solid #f4f6f9;
+ padding-top: 0;
+ width: 15rem;
+
+ & nav {
+ position: absolute;
+ width: 15rem;
+ height: 100%;
+ overflow: hidden;
+ overflow-y: auto;
+ outline: 0;
+ }
+
+ &.navigation--has-search nav {
+ top: calc(2.5rem + 2px);
+ bottom: 0;
+ height: auto;
+ }
+
+ &.site-navigation--internal {
+ top: 8rem;
+ }
+ }
+
+ & .item {
+ margin: 0 .5rem
+ }
+}
diff --git a/ui/docs/containers/home.js b/ui/docs/containers/home.js
new file mode 100644
index 00000000..edc65ecf
--- /dev/null
+++ b/ui/docs/containers/home.js
@@ -0,0 +1,5 @@
+const React = require('react');
+
+module.exports = () => {
+ return ();
+};
diff --git a/ui/docs/containers/item/index.js b/ui/docs/containers/item/index.js
new file mode 100644
index 00000000..ef59be97
--- /dev/null
+++ b/ui/docs/containers/item/index.js
@@ -0,0 +1,28 @@
+const get = require('lodash.get');
+const InnerHTML = require('dangerously-set-inner-html');
+const React = require('react');
+const styles = require('./style.css');
+const titleCase = require('title-case');
+
+const Docs = require('../../../src/docs');
+
+module.exports = ({
+ params
+}) => {
+ const path = (params.parent !== 'undefined')
+ ? `${titleCase(params.parent)}.${titleCase(params.name)}`
+ : `${titleCase(params.name)}`;
+
+ const body = get(Docs, path);
+ const item = body ? (
+
+ ) : (
+ {path} Not Found
+ );
+
+ return (
+
+ {item}
+
+ );
+};
diff --git a/ui/docs/containers/item/style.css b/ui/docs/containers/item/style.css
new file mode 100644
index 00000000..3c4a897b
--- /dev/null
+++ b/ui/docs/containers/item/style.css
@@ -0,0 +1,7 @@
+
+.item {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: auto;
+ margin-left: 15rem;
+}
diff --git a/ui/docs/root.js b/ui/docs/root.js
index cf432b94..337d93d7 100644
--- a/ui/docs/root.js
+++ b/ui/docs/root.js
@@ -1,16 +1,23 @@
const React = require('react');
const ReactHotLoader = require('react-hot-loader');
-const Button = require('../src/components/column/readme.md');
-const InnerHTML = require('dangerously-set-inner-html');
+const ReactRouter = require('react-router');
+
+const App = require('./containers/app/');
const {
AppContainer
} = ReactHotLoader;
+const {
+ BrowserRouter
+} = ReactRouter;
+
module.exports = () => {
return (
-
+
+
+
);
};
diff --git a/ui/package.json b/ui/package.json
index 09469aed..500ffa3d 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -29,7 +29,7 @@
"babel-preset-react": "^6.16.0",
"babel-register": "^6.16.3",
"css-loader": "^0.25.0",
- "dangerously-set-inner-html": "^1.0.0",
+ "dangerously-set-inner-html": "2.0.0",
"enzyme": "^2.5.1",
"eslint": "^3.8.1",
"eslint-config-semistandard": "^7.0.0",
@@ -40,7 +40,9 @@
"eslint-plugin-standard": "^2.0.1",
"extract-text-webpack-plugin": "^2.0.0-beta.4",
"json-loader": "^0.5.4",
+ "lodash.get": "^4.4.2",
"nyc": "^8.3.1",
+ "param-case": "^2.1.0",
"postcss-cssnext": "^2.8.0",
"postcss-loader": "^1.0.0",
"postcss-mixins": "^5.4.0",
@@ -52,6 +54,7 @@
"react-hot-loader": "^3.0.0-beta.6",
"react-router": "^4.0.0-alpha.4",
"style-loader": "^0.13.1",
+ "title-case": "^2.1.0",
"webpack": "^2.1.0-beta.25",
"webpack-dev-server": "^1.16.2",
"webpack-shell-plugin": "^0.4.3"
diff --git a/ui/src/components/column/readme.md b/ui/src/components/column/readme.md
index 0668b307..fb2ef870 100644
--- a/ui/src/components/column/readme.md
+++ b/ui/src/components/column/readme.md
@@ -41,7 +41,7 @@ nmodule.exports = ReactDOM.renderToString(
const React = require('react');
const Container = require('ui/container');
const Row = require('ui/row');
-const Column = require('ui/index');
+const Column = require('ui/column');
module.exports = () => {
return (
diff --git a/ui/src/components/container/readme.md b/ui/src/components/container/readme.md
index 8e051721..25501fd2 100644
--- a/ui/src/components/container/readme.md
+++ b/ui/src/components/container/readme.md
@@ -1,4 +1,4 @@
-# ``
+# ``
## demo
@@ -9,7 +9,9 @@ const Container = require('./index.js');
const Button = require('../button');
nmodule.exports = ReactDOM.renderToString(
-
+
+
+
);
```
diff --git a/ui/src/docs.js b/ui/src/docs.js
index ce2e8d4f..d9a0235a 100644
--- a/ui/src/docs.js
+++ b/ui/src/docs.js
@@ -1,8 +1,8 @@
module.exports = {
'Getting Started': require('./getting-started.md'),
- Layout: require('./layout.md'),
Guidelines: {
- Overview: require('./guidelines/overview.md')
+ Overview: require('./guidelines/overview.md'),
+ Layout: require('./guidelines/layout.md')
},
Components: {
Base: require('./components/base/readme.md'),
diff --git a/ui/src/layout.md b/ui/src/guidelines/layout.md
similarity index 100%
rename from ui/src/layout.md
rename to ui/src/guidelines/layout.md
diff --git a/ui/yarn.lock b/ui/yarn.lock
index c18ac9fa..47070bc1 100644
--- a/ui/yarn.lock
+++ b/ui/yarn.lock
@@ -1856,12 +1856,13 @@ d@^0.1.1, d@~0.1.1:
dependencies:
es5-ext "~0.10.2"
-dangerously-set-inner-html@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dangerously-set-inner-html/-/dangerously-set-inner-html-1.0.0.tgz#87c4a8ef1c41452e4b671dca77947512afab3806"
+dangerously-set-inner-html@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/dangerously-set-inner-html/-/dangerously-set-inner-html-2.0.0.tgz#da73f26330c9ef0b6b12ca443091904406ddb73a"
dependencies:
lodash.flatten "^4.4.0"
parse5 "^2.2.3"
+ uuid "^2.0.3"
dashdash@^1.12.0:
version "1.14.0"
@@ -3459,6 +3460,10 @@ lodash.foreach@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+lodash.get:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
+
lodash.indexof@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/lodash.indexof/-/lodash.indexof-4.0.5.tgz#53714adc2cddd6ed87638f893aa9b6c24e31ef3c"
@@ -3539,6 +3544,10 @@ loud-rejection@^1.0.0, loud-rejection@^1.2.0:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
+lower-case@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.3.tgz#c92393d976793eee5ba4edb583cf8eae35bd9bfb"
+
lowercase-keys@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
@@ -3720,6 +3729,12 @@ negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+no-case@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.0.tgz#ca2825ccb76b18e6f79d573dcfbf1eace33dd164"
+ dependencies:
+ lower-case "^1.1.1"
+
node-fetch@^1.0.1:
version "1.6.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
@@ -4027,6 +4042,12 @@ pako@~0.2.0:
version "0.2.9"
resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
+param-case:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.0.tgz#2619f90fd6c829ed0b958f1c84ed03a745a6d70a"
+ dependencies:
+ no-case "^2.2.0"
+
parse-asn1@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.0.0.tgz#35060f6d5015d37628c770f4e091a0b5a278bc23"
@@ -5613,6 +5634,13 @@ timers-browserify@^1.0.1:
dependencies:
process "~0.11.0"
+title-case:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.0.tgz#c68ccb4232079ded64f94b91b4941ade91391979"
+ dependencies:
+ no-case "^2.2.0"
+ upper-case "^1.0.3"
+
to-fast-properties@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
@@ -5734,6 +5762,10 @@ update-notifier@^1.0.0:
semver-diff "^2.0.0"
xdg-basedir "^2.0.0"
+upper-case@^1.0.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+
url-parse-lax@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
@@ -5785,7 +5817,7 @@ utils-merge@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8"
-uuid@^2.0.1, uuid@^2.0.2:
+uuid@^2.0.1, uuid@^2.0.2, uuid@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"