From 9fb11c887af1c86d4eea9c8622fb5da5a122fbff Mon Sep 17 00:00:00 2001 From: Xavier Lozinguez Date: Mon, 26 Sep 2016 17:22:29 -0400 Subject: [PATCH 1/6] Hooked up redux-observables --- .../src/common/services/companies.service.js | 111 +++++++++++++----- client/src/common/services/constants.js | 3 + client/src/common/services/rootEpic.js | 13 ++ .../companies/companies.component.js | 32 +++-- client/src/main.js | 8 +- client/src/reduxConfig.js | 7 +- package.json | 9 +- 7 files changed, 128 insertions(+), 55 deletions(-) create mode 100644 client/src/common/services/rootEpic.js diff --git a/client/src/common/services/companies.service.js b/client/src/common/services/companies.service.js index 196589e..3fc7dee 100644 --- a/client/src/common/services/companies.service.js +++ b/client/src/common/services/companies.service.js @@ -1,28 +1,83 @@ -import { Observable } from '@reactivex/rxjs'; -import { API_COMPANIES_PATH } from 'client/src/common/api/constants'; -import { FETCH_COMPANIES, FETCH_COMPANY } from './constants'; -import { Company } from 'client/src/common/models/company.model'; - -export class CompaniesService { - static $inject = [ - 'APIService', - '$ngRedux' - ]; - - constructor(api, $ngRedux) { - this.api = api; - this.$ngRedux = $ngRedux; - } - - fetchCompanies() { - Observable.fromPromise(this.api.fetch(API_COMPANIES_PATH)) - .map(payload => ({ type: FETCH_COMPANIES, payload })) - .subscribe(action => this.$ngRedux.dispatch(action)); - } - - fetchCompany(id) { - Observable.fromPromise(this.api.fetch(API_COMPANIES_PATH + '/' + id)) - .map(payload => ({ type: FETCH_COMPANY, payload })) - .subscribe(action => this.$ngRedux.dispatch(action)); - } -} \ No newline at end of file +import { + ajax +} +from 'rxjs/Rx'; + +import { + API_BASE_URL, + API_COMPANIES_PATH +} +from 'client/src/common/api/constants'; + +import { + FETCH_COMPANIES, + FETCH_COMPANIES_FULFILLED, + FETCH_COMPANY, + FETCH_COMPANY_FULFILLED +} +from './constants'; + +// import { Company } from 'client/src/common/models/company.model'; + +// Action Creators +const fetchCompanies = payload => ({ + type: FETCH_COMPANIES, + payload +}); +const fetchCompaniesFullfilled = payload => ({ + type: FETCH_COMPANIES_FULLFILLED, + payload +}); + +const fetchCompany = company_id => ({ + type: FETCH_COMPANY, + payload: company_id +}); +const fetchCompanyFullfilled = payload => ({ + type: FETCH_COMPANY_FULLFILLED, + payload +}); + +// Epics +export function fetchCompaniesEpic (action$) { + return action$ + .ofType(FETCH_COMPANIES) + .mergeMap(action => + ajax.getJSON(`${API_BASE_URL}${API_COMPANIES_PATH}`) + .map(fetchCompaniesFullfilled) + ); +} + +export function fetchCompanyEpic (action$) { + return action$ + .ofType(FETCH_COMPANY) + .mergeMap(action => + ajax.getJSON(`${API_BASE_URL}${API_COMPANIES_PATH}/${action.payload}`) + .map(fetchCompanyFullfilled) + ); +} + +// export class CompaniesService { +// static $inject = [ +// 'APIService', +// '$ngRedux' +// ]; + +// constructor(api, $ngRedux) { +// this.api = api; +// this.$ngRedux = $ngRedux; +// } + +// fetchCompanies() { +// // Observable.fromPromise(this.api.fetch(API_COMPANIES_PATH)) +// // .filter(r => r.name === "Axial") +// // .map(payload => ({ type: FETCH_COMPANIES, payload })) +// // .subscribe(action => this.$ngRedux.dispatch(action)); +// } + +// fetchCompany(id) { +// // Observable.fromPromise(this.api.fetch(API_COMPANIES_PATH + '/' + id)) +// // .map(payload => ({ type: FETCH_COMPANY, payload })) +// // .subscribe(action => this.$ngRedux.dispatch(action)); +// } +// } \ No newline at end of file diff --git a/client/src/common/services/constants.js b/client/src/common/services/constants.js index 422e220..981442d 100644 --- a/client/src/common/services/constants.js +++ b/client/src/common/services/constants.js @@ -1,6 +1,9 @@ // Companies export const FETCH_COMPANIES = 'FETCH_COMPANIES'; +export const FETCH_COMPANIES_FULFILLED = 'FETCH_COMPANIES_FULFILLED'; + export const FETCH_COMPANY = 'FETCH_COMPANY'; +export const FETCH_COMPANY_FULFILLED = 'FETCH_COMPANY_FULFILLED'; // Members export const FETCH_MEMBERS = 'FETCH_MEMBERS'; diff --git a/client/src/common/services/rootEpic.js b/client/src/common/services/rootEpic.js new file mode 100644 index 0000000..e2cc589 --- /dev/null +++ b/client/src/common/services/rootEpic.js @@ -0,0 +1,13 @@ +/** + * Combine all epics in this file and export the combined epic. + */ + +import { combineEpics } from 'redux-observable'; + +// our custom data reducer for the data points +import { fetchCompaniesEpic, fetchCompanyEpic } from './companies.service'; + +export default combineEpics( + fetchCompaniesEpic, + fetchCompanyEpic +); \ No newline at end of file diff --git a/client/src/components/companies/companies.component.js b/client/src/components/companies/companies.component.js index 8d9aa93..bc58c32 100644 --- a/client/src/components/companies/companies.component.js +++ b/client/src/components/companies/companies.component.js @@ -1,4 +1,3 @@ -import { Observable } from '@reactivex/rxjs'; import { Component } from 'client/src/utils'; import template from './companies.html'; @@ -13,38 +12,35 @@ import './companies.scss'; export class CompaniesComponent { static $inject = [ - '$ngRedux', - 'CompaniesService' + '$ngRedux' ]; - constructor($ngRedux, CompaniesService) { + constructor($ngRedux) { this.$ngRedux = $ngRedux; - this.companiesService = CompaniesService; - this.list = Observable.from([]); - this.currentCompany = Observable.of({}); + // this.companiesService = CompaniesService; } $onInit() { // Connect to the store - this.disconnect = this.$ngRedux.connect(state => ({ - companies: state.companies, - currentCompany: state.currentCompany - }))((state, actions) => { - this.actions = actions; - this.list = state.companies; - this.currentCompany = state.currentCompany; - }); + // this.disconnect = this.$ngRedux.connect(state => ({ + // companies: state.companies, + // currentCompany: state.currentCompany + // }))((state, actions) => { + // this.actions = actions; + // this.list = state.companies; + // this.currentCompany = state.currentCompany; + // }); // Fetch Companies - this.companies = this.companiesService.fetchCompanies(); + // this.companies = this.companiesService.fetchCompanies(); } $onDestroy() { // Disconnect from the store - this.disconnect(); + // this.disconnect(); } onCompanySelected(company) { - this.companiesService.fetchCompany(company.id); + // this.companiesService.fetchCompany(company.id); } } \ No newline at end of file diff --git a/client/src/main.js b/client/src/main.js index e53af76..80aed4a 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -4,10 +4,10 @@ import ngRedux from 'ng-redux'; import ngReduxUiRouter from 'redux-ui-router'; // https://github.com/neilff/redux-ui-router#listener // Core -import { APIService } from './common/api/api-service'; +// import { APIService } from './common/api/api-service'; // Services -import { CompaniesService } from './common/services/companies.service'; +// import { CompaniesService } from './common/services/companies.service'; // Router import { routerConfig } from './routeConfig'; @@ -33,8 +33,8 @@ app.component('companyItem', CompanyItemComponent); app.component('companies', CompaniesComponent); app.component('companyDetails', CompanyDetailsComponent); -app.service('APIService', APIService); -app.service('CompaniesService', CompaniesService); +// app.service('APIService', APIService); +// app.service('CompaniesService', CompaniesService); // Load config for ui-router app.config(routerConfig); diff --git a/client/src/reduxConfig.js b/client/src/reduxConfig.js index 26a7273..f3b3191 100644 --- a/client/src/reduxConfig.js +++ b/client/src/reduxConfig.js @@ -7,7 +7,10 @@ */ import createLogger from 'redux-logger'; +import { createEpicMiddleware } from 'redux-observable'; + import reducers from './common/stores/rootReducer'; +import epics from './common/services/rootEpic'; store.$inject = ['$ngReduxProvider']; @@ -18,7 +21,9 @@ export default function store($ngReduxProvider) { collapsed: true }); - const middlewares = ['ngUiRouterMiddleware', logger]; + const epicMiddleware = createEpicMiddleware(epics); + + const middlewares = [epicMiddleware, 'ngUiRouterMiddleware', logger]; const enhancers = [ window.devToolsExtension ? window.devToolsExtension() : f => f ]; diff --git a/package.json b/package.json index 7a1165f..d4fe1a9 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,13 @@ "main": "app.js", "dependencies": { "angular": "1.5.8", - "angular-ui-router": "^0.3.0", + "angular-ui-router": "^0.2.8", "ng-redux": "^3.4.0-beta.1", - "redux-ui-router": "^0.6.0", "redux": "^3.6.0", - "webpack": "^1.13.2", - "@reactivex/rxjs": "5.0.0-beta.12" + "redux-observable": "^0.12.0", + "redux-ui-router": "^0.6.0", + "rxjs": "^5.0.0-beta.12", + "webpack": "^1.13.2" }, "devDependencies": { "angular-mocks": "^1.5.8", From d942aeeac16f216896fc4fb675a330d143400dbf Mon Sep 17 00:00:00 2001 From: Xavier Lozinguez Date: Mon, 26 Sep 2016 18:13:53 -0400 Subject: [PATCH 2/6] Adding Styles --- client/src/components/styles/index.js | 1 + .../src/components/styles/styles.component.js | 12 ++++ client/src/components/styles/styles.html | 53 +++++++++++++++ client/src/components/styles/styles.scss | 51 +++++++++++++++ client/src/main.js | 2 + client/src/routeConfig.js | 11 ++++ client/src/styles/_settings.scss | 60 ----------------- client/src/styles/atoms/_buttons.scss | 29 +++++++++ client/src/styles/atoms/_cards.scss | 6 ++ client/src/styles/atoms/_growler.scss | 9 +++ client/src/styles/atoms/_typography.scss | 65 +++++++++++++++++++ .../styles/experiments/_colors.generator.scss | 30 +++++++++ .../font-smoothing.scss} | 7 +- client/src/styles/settings/_colors.scss | 19 ++++++ client/src/styles/settings/_fonts.scss | 29 +++++++++ client/src/styles/settings/_settings.scss | 7 ++ client/src/styles/settings/_states.scss | 7 ++ client/src/styles/styles.scss | 59 +++-------------- 18 files changed, 342 insertions(+), 115 deletions(-) create mode 100644 client/src/components/styles/index.js create mode 100644 client/src/components/styles/styles.component.js create mode 100644 client/src/components/styles/styles.html create mode 100644 client/src/components/styles/styles.scss delete mode 100644 client/src/styles/_settings.scss create mode 100644 client/src/styles/atoms/_buttons.scss create mode 100644 client/src/styles/atoms/_cards.scss create mode 100644 client/src/styles/atoms/_growler.scss create mode 100644 client/src/styles/atoms/_typography.scss create mode 100644 client/src/styles/experiments/_colors.generator.scss rename client/src/styles/{_mixins.scss => mixins/font-smoothing.scss} (58%) create mode 100644 client/src/styles/settings/_colors.scss create mode 100644 client/src/styles/settings/_fonts.scss create mode 100644 client/src/styles/settings/_settings.scss create mode 100644 client/src/styles/settings/_states.scss diff --git a/client/src/components/styles/index.js b/client/src/components/styles/index.js new file mode 100644 index 0000000..3ac08b8 --- /dev/null +++ b/client/src/components/styles/index.js @@ -0,0 +1 @@ +export * from './styles.component'; \ No newline at end of file diff --git a/client/src/components/styles/styles.component.js b/client/src/components/styles/styles.component.js new file mode 100644 index 0000000..21a9bc6 --- /dev/null +++ b/client/src/components/styles/styles.component.js @@ -0,0 +1,12 @@ +import { Component } from 'client/src/utils'; + +import template from './styles.html'; + +import './styles.scss'; + +@Component({ + template, + controllerAs: 'stylesCtrl' +}) + +export class StylesComponent {} \ No newline at end of file diff --git a/client/src/components/styles/styles.html b/client/src/components/styles/styles.html new file mode 100644 index 0000000..036fd5b --- /dev/null +++ b/client/src/components/styles/styles.html @@ -0,0 +1,53 @@ +
+

+

STYLES:

+
+ +

H1: Open Sans Light 36px

+

H2: Open Sans Light 24px

+

H3: Open Sans Light 18px

+

H4: Open Sans Regular 16px

+
H5: Open Sans Semibold 14px
+
H6: Open Sans Bold 12px Uppercase
+ +

+ Paragraph Large: Opens Sans Regular 16px FS/ 21px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

+ +

+ Paragraph Normal: Opens Sans Regular 14px FS/ 21px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

+ +

+ Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

+ +
    +
  • li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
  • +
+ + a: Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ Color: rgba(25, 131, 179, 100) +

+ +
+

+ Bacon ipsum dolor amet kevin pancetta tri-tip corned beef capicola rump tenderloin. Shoulder porchetta corned beef swine, alcatra landjaeger brisket meatloaf tongue bacon meatball picanha pork ball tip prosciutto. Chicken pancetta burgdoggen, pork chop salami corned beef turducken shank cow picanha. Pastrami kielbasa shank meatball rump drumstick sausage ham hock shankle tri-tip spare ribs brisket venison ribeye. Turkey cow brisket chicken tail chuck ribeye andouille shankle. Venison short ribs short loin, beef cupim corned beef pastrami brisket ham hock. +

+

+ Chuck shank andouille ball tip drumstick pancetta, leberkas porchetta ham hock brisket turkey. Rump pig sirloin beef ribs porchetta bresaola, meatloaf short loin kevin turkey swine ground round burgdoggen. Picanha prosciutto corned beef rump sausage pork belly. Short loin filet mignon boudin ribeye, meatball pork chop tail pork loin beef ribs porchetta. Drumstick prosciutto kevin chuck landjaeger. +

+
+ +
+ + + + +
+ +
+ +
\ No newline at end of file diff --git a/client/src/components/styles/styles.scss b/client/src/components/styles/styles.scss new file mode 100644 index 0000000..7a80e28 --- /dev/null +++ b/client/src/components/styles/styles.scss @@ -0,0 +1,51 @@ +// Default for Styleguide purposes +.styleguide { + background-color: #F7F7F7; + + .color-examples > li { + float: left; + margin-left: 10px; + display: inline-block; + font-weight: bold; + color: #4a4a4a; + } + + .color-list { + width: auto; + padding-left: 8px; + color: #fff; + float: left; + display: inline-block; + } + + .color-list > li { + padding: 12px; + width: 200px; + font-weight: 600; + letter-spacing: .4px; + text-transform: uppercase; + float: left; + clear: left; + } + + .card-example { + max-width: 500px; + margin: 0 auto; + } +} + +// // LIVE STYLEGUIDE +// .styles { +// // COLORS +// ul.colors { +// font-size: 24px; + +// li { +// display: inline-block; +// width: 60px; +// height: 30px; +// font-size: .5rem; +// color: white; +// } +// } +// } \ No newline at end of file diff --git a/client/src/main.js b/client/src/main.js index 80aed4a..82d6269 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -18,6 +18,7 @@ import reduxConfig from './reduxConfig'; // Components import { AppComponent } from './components/app'; import { CompanyItemComponent, CompanyDetailsComponent, CompaniesComponent } from './components/companies'; +import { StylesComponent } from './components/styles'; // Styles import './styles/styles.scss'; @@ -32,6 +33,7 @@ app.component('app', AppComponent); app.component('companyItem', CompanyItemComponent); app.component('companies', CompaniesComponent); app.component('companyDetails', CompanyDetailsComponent); +app.component('styles', StylesComponent); // app.service('APIService', APIService); // app.service('CompaniesService', CompaniesService); diff --git a/client/src/routeConfig.js b/client/src/routeConfig.js index cd91ecc..cfb0913 100644 --- a/client/src/routeConfig.js +++ b/client/src/routeConfig.js @@ -50,9 +50,20 @@ export function routerConfig($stateProvider, $urlRouterProvider) { // } // } + var styleState = { + name: 'app.styles', + url: '/styles', + views: { + '@app': { + template: '' + } + } + } + $stateProvider.state(appState); $stateProvider.state(companiesState); // $stateProvider.state(companyState); + $stateProvider.state(styleState); $urlRouterProvider.otherwise('/companies'); } \ No newline at end of file diff --git a/client/src/styles/_settings.scss b/client/src/styles/_settings.scss deleted file mode 100644 index 1d8ad88..0000000 --- a/client/src/styles/_settings.scss +++ /dev/null @@ -1,60 +0,0 @@ -// FONTS -$font-family: 'Open Sans'; -$font-size: 1rem; -$base-ratio: .125; -$default-font-size: $font-size - $base-ratio; -$default-letter-spacing: .2px; - -$font-weight-light: 300; -$font-weight-regular: 400; -$font-weight-semibold: 500; -$font-weight-bold: 800; - -$h1-font-size: ($font-size + $base-ratio) * 2; -$h2-font-size: $font-size * (2 - (2 * $base-ratio)); -$h3-font-size: $font-size + ($base-ratio * 2); -$h4-font-size: $font-size; -$h5-font-size: $font-size - ($base-ratio * 2); -$h6-font-size: $font-size - ($base-ratio * 4); - -$h6-letter-spacing: .3px; - -$p-font-size: $font-size - $base-ratio; -$p-padding-bottom: 8px; - -// COLORS -$blue: (name: 'blue', r: 25, g: 131, b: 179, shade_count: 4); -$orange: (name: 'orange', r: 216, g: 89, b: 0, shade_count: 4); -$green: (name: 'green', r: 40, g: 120, b: 43, shade_count: 4); -$colors: $blue $orange $green; - -// Below generates color shades -@each $color in ($colors) { - .default-bkg-color-#{map-get($color, "name")}{ - background-color: rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")); - } - .default-color-#{map-get($color, "name")} { - color: rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")); - } - - @for $i from 1 through map-get($color, "shade_count") { - .lighter-bkg-color-#{map-get($color, "name")}-#{$i} { - background-color: lighten(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); - } - .lighter-color-#{map-get($color, "name")}-#{$i} { - color: lighten(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); - } - .darker-bkg-color-#{map-get($color, "name")}-#{$i} { - background-color: darken(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); - } - .darker-color-#{map-get($color, "name")}-#{$i} { - color: darken(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); - } - } -} - -$default-opacity: 100; - -$default-blue: rgb(map-get($blue, "r"), map-get($blue, "g"), map-get($blue, "b")); - -$a-default-color: $default-blue; \ No newline at end of file diff --git a/client/src/styles/atoms/_buttons.scss b/client/src/styles/atoms/_buttons.scss new file mode 100644 index 0000000..4035be2 --- /dev/null +++ b/client/src/styles/atoms/_buttons.scss @@ -0,0 +1,29 @@ +button{ + cursor: pointer; + transition: background .25s ease-in-out; + border-radius: $default-border-radius; + opacity: $default-opacity; + line-height: 1; + color: $default-white; + border: none; + + &.button-sm { + font-size: $small-button-font-size; + padding: $small-button-font-size * 0.5, $font-size; + } + + &.button-med { + font-size: $medium-button-font-size; + padding: $medium-button-font-size * 0.75, $medium-button-font-size * 1.5;} + + &.button-lrg { + font-size: $large-button-font-size; + padding: $large-button-font-size, $large-button-font-size * ($base-ratio + 0.5); + } + + &.inactive { + opacity: $disabled-opacity; + } + + &:hover {} +} \ No newline at end of file diff --git a/client/src/styles/atoms/_cards.scss b/client/src/styles/atoms/_cards.scss new file mode 100644 index 0000000..ba1bb3a --- /dev/null +++ b/client/src/styles/atoms/_cards.scss @@ -0,0 +1,6 @@ +.card { + box-shadow: $shadow-style-1; + min-width: 500px; + background-color: $default-white; + padding: 20px; +} \ No newline at end of file diff --git a/client/src/styles/atoms/_growler.scss b/client/src/styles/atoms/_growler.scss new file mode 100644 index 0000000..e12e395 --- /dev/null +++ b/client/src/styles/atoms/_growler.scss @@ -0,0 +1,9 @@ +.growler { + border-radius: $default-border-radius * 3; + padding: 1.5em; + box-shadow: $shadow-style-3; + + &.green { + background-color: $default-green; + } +} \ No newline at end of file diff --git a/client/src/styles/atoms/_typography.scss b/client/src/styles/atoms/_typography.scss new file mode 100644 index 0000000..a172245 --- /dev/null +++ b/client/src/styles/atoms/_typography.scss @@ -0,0 +1,65 @@ +body { + font-family: $font-family; + @include font-smoothing('antialiased'); + font-size: $default-font-size; + letter-spacing: $default-letter-spacing; +} + +h1 { + font-size: $h1-font-size; + font-weight: $font-weight-light; +} + +h2 { + font-size: $h2-font-size; + font-weight: $font-weight-light; +} + +h3 { + font-size: $h3-font-size; + font-weight: $font-weight-light; +} + +h4 { + font-size: $h4-font-size; + font-weight: $font-weight-regular; +} + +h5 { + font-size: $h5-font-size; + font-weight: $font-weight-semibold; +} + +h6 { + font-size: $h6-font-size; + font-weight: $font-weight-bold; + text-transform: uppercase; + letter-spacing: $h6-letter-spacing; +} + +p { + padding-bottom: $p-padding-bottom; + + &.p-lrg { + font-size: $font-size; + } + + &.p-sm { + font-size: .813rem; + line-height: $font-size + $base-ratio; + } +} + +ul { + li { + list-style-type: none; + } +} + +a, +a:visited, +a:hover { + color: $a-default-color; + cursor: pointer; + transition: background .25s ease-in-out; +} \ No newline at end of file diff --git a/client/src/styles/experiments/_colors.generator.scss b/client/src/styles/experiments/_colors.generator.scss new file mode 100644 index 0000000..f12eaed --- /dev/null +++ b/client/src/styles/experiments/_colors.generator.scss @@ -0,0 +1,30 @@ + +// $blue: (name: 'blue', r: 25, g: 131, b: 179, shade_count: 4); +// $orange: (name: 'orange', r: 216, g: 89, b: 0, shade_count: 4); +// $green: (name: 'green', r: 40, g: 120, b: 43, shade_count: 4); +// $colors: $blue $orange $green; + +// Below generates color shades +// @each $color in ($colors) { +// .default-bkg-color-#{map-get($color, "name")}{ +// background-color: rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")); +// } +// .default-color-#{map-get($color, "name")} { +// color: rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")); +// } + +// @for $i from 1 through map-get($color, "shade_count") { +// .lighter-bkg-color-#{map-get($color, "name")}-#{$i} { +// background-color: lighten(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); +// } +// .lighter-color-#{map-get($color, "name")}-#{$i} { +// color: lighten(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); +// } +// .darker-bkg-color-#{map-get($color, "name")}-#{$i} { +// background-color: darken(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); +// } +// .darker-color-#{map-get($color, "name")}-#{$i} { +// color: darken(rgb(map-get($color, "r"), map-get($color, "g"), map-get($color, "b")), ($i * 5)); +// } +// } +// } \ No newline at end of file diff --git a/client/src/styles/_mixins.scss b/client/src/styles/mixins/font-smoothing.scss similarity index 58% rename from client/src/styles/_mixins.scss rename to client/src/styles/mixins/font-smoothing.scss index 32e6642..6b34aea 100644 --- a/client/src/styles/_mixins.scss +++ b/client/src/styles/mixins/font-smoothing.scss @@ -7,9 +7,4 @@ -webkit-font-smoothing: subpixel-antialiased; -moz-osx-font-smoothing: auto; } -} - -// I wish they had computed properties in sass... -// @mixin generate-color($color, $opacity: 100) { -// rgba(map-get($color, "r"), map-get($color, "g"), map-get($color, "b"), $opacity); -// } +} \ No newline at end of file diff --git a/client/src/styles/settings/_colors.scss b/client/src/styles/settings/_colors.scss new file mode 100644 index 0000000..734ce3c --- /dev/null +++ b/client/src/styles/settings/_colors.scss @@ -0,0 +1,19 @@ +$blue: (name: "blue", r: 17, g: 91, b: 124); +$orange: (name: "orange", r: 227, g: 139, b: 77); +$green: (name: "green", r: 104, g: 160, b: 107); +$gray: (name: "gray", r: 130, g: 130, b: 130); +$black: (name: "black", r: 0, g: 0, b: 0); +$white: (name: "white", r: 255, g: 255, b: 255); + +// $colors: $blue $orange $green $gray $black $white; + +$default-blue: rgb(map-get($blue, "r"), map-get($blue, "g"), map-get($blue, "b")); +$default-green: rgb(map-get($green, "r"), map-get($green, "g"), map-get($green, "b")); +$default-white: rgb(map-get($white, "r"), map-get($white, "g"), map-get($white, "b")); + +$a-default-color: $default-blue; + +//SHADOWS +$shadow-style-1: 0px 41px 80px -55px rgba(0, 0, 0, 0.55), 0px 41px 80px -55px rgba(255, 255, 255, 0.55); +$shadow-style-2: 0px 2px 12px 15px rgba(0, 0, 0, 0.2); +$shadow-style-3: 0px 3px 15px 0px rgba(0, 0, 0, 0.2); \ No newline at end of file diff --git a/client/src/styles/settings/_fonts.scss b/client/src/styles/settings/_fonts.scss new file mode 100644 index 0000000..d437988 --- /dev/null +++ b/client/src/styles/settings/_fonts.scss @@ -0,0 +1,29 @@ +// FONTS +$font-family: "Open Sans"; +$font-size: 1rem; +$base-ratio: 0.125; +$default-font-size: $font-size - $base-ratio; +$default-letter-spacing: 0.2px; +$default-line-height: 1.5em; + +$font-weight-light: 300; +$font-weight-regular: 400; +$font-weight-semibold: 500; +$font-weight-bold: 800; + +$h1-font-size: ($font-size + $base-ratio) * 2; +$h2-font-size: $font-size * (2 - 4 * $base-ratio); +$h3-font-size: $font-size + $base-ratio; +$h4-font-size: $font-size; +$h5-font-size: $font-size - $base-ratio; +$h6-font-size: $font-size - $base-ratio * 2; + +$h6-letter-spacing: 0.3px; + +$small-button-font-size: $font-size - $base-ratio; +$medium-button-font-size: $font-size; +$large-button-font-size: $font-size; + +$p-font-size: $font-size - $base-ratio; + +$p-padding-bottom: 8px; \ No newline at end of file diff --git a/client/src/styles/settings/_settings.scss b/client/src/styles/settings/_settings.scss new file mode 100644 index 0000000..f90ed05 --- /dev/null +++ b/client/src/styles/settings/_settings.scss @@ -0,0 +1,7 @@ +// Opacity +$default-opacity: 100; +$disabled-opacity: 0.3; +$secondary-opacity: 0.7; + +// Borders +$default-border-radius: 2px; \ No newline at end of file diff --git a/client/src/styles/settings/_states.scss b/client/src/styles/settings/_states.scss new file mode 100644 index 0000000..087797d --- /dev/null +++ b/client/src/styles/settings/_states.scss @@ -0,0 +1,7 @@ +.disabled { + opacity: $disabled-opacity; +} + +.fade { + opacity: $secondary-opacity; +} \ No newline at end of file diff --git a/client/src/styles/styles.scss b/client/src/styles/styles.scss index ea4d0b2..b8addd3 100644 --- a/client/src/styles/styles.scss +++ b/client/src/styles/styles.scss @@ -1,50 +1,11 @@ -@import - 'mixins', - 'settings'; +@import 'mixins/font-smoothing'; + +@import 'settings/fonts', + 'settings/colors', + 'settings/settings', + 'settings/states'; -body { - font-family: $font-family; - @include font-smoothing('antialiased'); - font-size: $default-font-size; - letter-spacing: $default-letter-spacing; - - h1 { - font-size: $h1-font-size; - font-weight: $font-weight-light; - } - h2 { - font-size: $h2-font-size; - font-weight: $font-weight-light; - } - h3 { - font-size: $h3-font-size; - font-weight: $font-weight-light; - } - h4 { - font-size: $h4-font-size; - font-weight: $font-weight-regular; - } - h5 { - font-size: $h5-font-size; - font-weight: $font-weight-semibold; - } - h6 { - font-size: $h6-font-size; - font-weight: $font-weight-bold; - text-transform: uppercase; - letter-spacing: $h6-letter-spacing; - } - p { - padding-bottom: $p-padding-bottom; - } - ul { - li { - list-style-type: none; - } - } - a, - a:visited, - a:hover { - color: $a-default-color; - } -} \ No newline at end of file +@import 'atoms/typography', + 'atoms/buttons', + 'atoms/cards', + 'atoms/growler'; \ No newline at end of file From 0bc06fe54bfd60302d522b9122f7e0881bdb579d Mon Sep 17 00:00:00 2001 From: Alex Gitlin Date: Tue, 27 Sep 2016 10:36:31 -0400 Subject: [PATCH 3/6] Test --- client/src/components/styles/styles.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/styles/styles.html b/client/src/components/styles/styles.html index 036fd5b..2c81323 100644 --- a/client/src/components/styles/styles.html +++ b/client/src/components/styles/styles.html @@ -1,6 +1,6 @@

-

STYLES:

+

Alex:


H1: Open Sans Light 36px

From 509f6f4e4cbee75973716d4f8b93fe645f0cd659 Mon Sep 17 00:00:00 2001 From: Alex Gitlin Date: Wed, 5 Oct 2016 18:03:41 -0400 Subject: [PATCH 4/6] Base Atom Structure baseline atoms elements and molecule items --- .../src/components/styles/styles.component.js | 2 +- client/src/components/styles/styles.html | 386 +++++++++++++++++- client/src/components/styles/styles.scss | 37 ++ client/src/index.html | 1 + client/src/main.js | 3 +- client/src/styles/atoms/_buttons.scss | 64 ++- client/src/styles/atoms/_cards.scss | 13 +- client/src/styles/atoms/_form-atoms.scss | 222 ++++++++++ client/src/styles/atoms/_growler.scss | 11 +- client/src/styles/atoms/_logos.scss | 73 ++++ client/src/styles/atoms/_modal.scss | 3 + client/src/styles/atoms/_profiles.scss | 35 ++ client/src/styles/atoms/_sidebar.scss | 31 ++ client/src/styles/atoms/_signifiers.scss | 122 ++++++ client/src/styles/atoms/_tags.scss | 43 ++ client/src/styles/atoms/_typography.scss | 152 ++++++- client/src/styles/images/muster.jpg | Bin 0 -> 39435 bytes .../src/styles/molecules/_announcements.scss | 11 + client/src/styles/molecules/_forms.scss | 11 + .../src/styles/molecules/_modal-elements.scss | 67 +++ client/src/styles/molecules/_sidebar-nav.scss | 32 ++ client/src/styles/settings/_colors.scss | 143 ++++++- .../src/styles/settings/_font-settings.scss | 54 +++ client/src/styles/settings/_fonts.scss | 29 -- client/src/styles/settings/_reset.scss | 48 +++ client/src/styles/settings/_settings.scss | 93 ++++- client/src/styles/settings/_states.scss | 10 +- client/src/styles/styles-guide.js | 13 + client/src/styles/styles.scss | 22 +- 29 files changed, 1633 insertions(+), 98 deletions(-) create mode 100644 client/src/styles/atoms/_form-atoms.scss create mode 100644 client/src/styles/atoms/_logos.scss create mode 100644 client/src/styles/atoms/_modal.scss create mode 100644 client/src/styles/atoms/_profiles.scss create mode 100644 client/src/styles/atoms/_sidebar.scss create mode 100644 client/src/styles/atoms/_signifiers.scss create mode 100644 client/src/styles/atoms/_tags.scss create mode 100644 client/src/styles/images/muster.jpg create mode 100644 client/src/styles/molecules/_announcements.scss create mode 100644 client/src/styles/molecules/_forms.scss create mode 100644 client/src/styles/molecules/_modal-elements.scss create mode 100644 client/src/styles/molecules/_sidebar-nav.scss create mode 100644 client/src/styles/settings/_font-settings.scss delete mode 100644 client/src/styles/settings/_fonts.scss create mode 100644 client/src/styles/settings/_reset.scss create mode 100644 client/src/styles/styles-guide.js diff --git a/client/src/components/styles/styles.component.js b/client/src/components/styles/styles.component.js index 21a9bc6..41d5dfb 100644 --- a/client/src/components/styles/styles.component.js +++ b/client/src/components/styles/styles.component.js @@ -9,4 +9,4 @@ import './styles.scss'; controllerAs: 'stylesCtrl' }) -export class StylesComponent {} \ No newline at end of file +export class StylesComponent {} diff --git a/client/src/components/styles/styles.html b/client/src/components/styles/styles.html index 2c81323..72439a1 100644 --- a/client/src/components/styles/styles.html +++ b/client/src/components/styles/styles.html @@ -1,38 +1,117 @@ -
+

-

Alex:

+

ATOMS:


H1: Open Sans Light 36px

-

H2: Open Sans Light 24px

+

H2: Open Sans Light 36px

+

H2B: Open Sans Light 24px

H3: Open Sans Light 18px

H4: Open Sans Regular 16px

H5: Open Sans Semibold 14px
H6: Open Sans Bold 12px Uppercase
- -

- Paragraph Large: Opens Sans Regular 16px FS/ 21px LH/ .2 LS / bottom-padding:8px; + +

+ Paragraph Small: Opens Sans Regular 11px FS/ 16px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

- -

+ +

+ Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

+ +

Paragraph Normal: Opens Sans Regular 14px FS/ 21px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

- Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / bottom-padding:8px; +

+ Paragraph Large: Opens Sans Regular 16px FS/ 24px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-
    -
  • li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
  • +

    + Paragraph Large: Opens Sans Regular 16px FS/ 24px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

    + + +

    + Paragraph Normal: Opens Sans Regular 14px FS/ 21px LH/ .2 LS / bottom-padding:8px; + Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa. +

    + +

    + Help text - Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / #828282 +

    + +

    + Help text - Paragraph X Small: Opens Sans Regular 11px FS/ 16px LH/ .2 LS / #828282 +

    + +
      +
    • li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
    +
      +
    • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    • +
    + +
      +
    • li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
    • +
    + +
      +
    • li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
    • +
    + +
      +
    • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    • +
    + +
      +
    • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    • +
    + +
      +
    1. li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
    2. +
    + +
      +
    1. li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    2. +
    + +
      +
    1. li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
    2. +
    + +
      +
    1. li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
    2. +
    + a: Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ Color: rgba(25, 131, 179, 100)

    +
    + +
    +
    +

    Stylized List Signifiers

    +
    +
      +
    • +
      +
    • +
    • +
      +
    • +
    + +
    +
    +
    I'm Mr.Meseeks! Look at me!

    Bacon ipsum dolor amet kevin pancetta tri-tip corned beef capicola rump tenderloin. Shoulder porchetta corned beef swine, alcatra landjaeger brisket meatloaf tongue bacon meatball picanha pork ball tip prosciutto. Chicken pancetta burgdoggen, pork chop salami corned beef turducken shank cow picanha. Pastrami kielbasa shank meatball rump drumstick sausage ham hock shankle tri-tip spare ribs brisket venison ribeye. Turkey cow brisket chicken tail chuck ribeye andouille shankle. Venison short ribs short loin, beef cupim corned beef pastrami brisket ham hock.

    @@ -42,12 +121,283 @@
    H6: Open Sans Bold 12px Uppercase
    - - - - + + + + + +
    -
    +
    +

    Hey Hey Hey! Imma growler! BLAHRRRRRG!

    +

    + +
    +
    +
    Text Input Small
    + + +
    + +
    +
    Text Input Medium
    + + +
    + +
    +
    Text Input Large
    + + +
    + +
    +
    Text Input Large
    + + +
    + +
    +
    Text Input Perforated
    + + +
    + +
    +
    Text Input Error
    + + +
    + +
    +
    Text Input Warning
    + + +
    + +
    + pill + pill +
    + +
    +
    Select Input Base
    + + +
    + +
    +
    Text Area
    + + + textarea should autoexpand +
    + +
    +
    Text Area Edit
    + +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    + +
    108px

    +
    80px

    +
    64px

    +
    44px

    + +
    Advisor
    +
    Investor
    +
    Lender
    +
    Buyer
    + +
    Premium
    + +
    44px

    +
    64px

    +
    88px

    +
    108px

    +
    132px

    +
    152px

    + +
    +
    +
    +
    +
    +
    +
    + + + 10 + + +
    + Motorhead + Anthrax + Sepultura + Cannibal Corpse +
    + + + + -
\ No newline at end of file +
+
+ + +
+
+ + +
+

Main container

+

+ We're no strangers to love. + You know the rules and so do I. + A full commitment's what I'm thinking of + You wouldn't get this from any other guy. +

+ +

+ I just want to tell you how I'm feeling + Gotta make you understand +

+ +

+ Never gonna give you up, never gonna let you down + Never gonna run around and desert you + Never gonna make you cry, never gonna say goodbye + Never gonna tell a lie and hurt you +

+ +

+ We've known each other for so long + Your heart's been aching but you're too shy to say it + Inside we both know what's been going on + We know the game and we're gonna play it + And if you ask me how I'm feeling + Don't tell me you're too blind to see +

+ + +
+
+
+ + + + +
+ + + diff --git a/client/src/components/styles/styles.scss b/client/src/components/styles/styles.scss index 7a80e28..d0bd7b5 100644 --- a/client/src/components/styles/styles.scss +++ b/client/src/components/styles/styles.scss @@ -34,6 +34,43 @@ } } +.style-note { + margin-left:6em; + font-weight: 800; +} + +#border-example{ + + .border{ + margin: 12px; + } +} + +.Form-example > div { + margin-bottom: 12px; +} + +.user-tag { + margin:0 0 8px 0; +} + +nav > li { + position: relative; + display:inline-block; + width:auto; + float: left; + padding-right:5em; + text-align: center; +} + +#modal-header-eg { + margin: 12px 0; +} + +.Form-example h5 { + margin-bottom:.5rem; +} + // // LIVE STYLEGUIDE // .styles { // // COLORS diff --git a/client/src/index.html b/client/src/index.html index 40f3974..7d38856 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -8,4 +8,5 @@ Loading the app... + \ No newline at end of file diff --git a/client/src/main.js b/client/src/main.js index 82d6269..f21eb80 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -42,4 +42,5 @@ app.component('styles', StylesComponent); app.config(routerConfig); // Load Redux store config -app.config(reduxConfig); \ No newline at end of file +app.config(reduxConfig); + diff --git a/client/src/styles/atoms/_buttons.scss b/client/src/styles/atoms/_buttons.scss index 4035be2..fc2c54b 100644 --- a/client/src/styles/atoms/_buttons.scss +++ b/client/src/styles/atoms/_buttons.scss @@ -1,29 +1,77 @@ button{ + font-family: $font-family; cursor: pointer; - transition: background .25s ease-in-out; - border-radius: $default-border-radius; + transition: $hover-transition-default; + border-radius: $rounded-border-radius; opacity: $default-opacity; line-height: 1; - color: $default-white; + color: $base-white; border: none; + outline:none; &.button-sm { font-size: $small-button-font-size; - padding: $small-button-font-size * 0.5, $font-size; + padding: .538em $font-size; } &.button-med { font-size: $medium-button-font-size; - padding: $medium-button-font-size * 0.75, $medium-button-font-size * 1.5;} + padding: $medium-button-font-size * 0.75 $medium-button-font-size * 1.5;} &.button-lrg { font-size: $large-button-font-size; - padding: $large-button-font-size, $large-button-font-size * ($base-ratio + 0.5); + padding: $large-button-font-size $large-button-font-size * 1.75; } + // States + &.inactive { opacity: $disabled-opacity; } - &:hover {} -} \ No newline at end of file + //Colors & Hovers + + &.green { + background-color: $base-green; + + &:hover { + background-color: darken($base-green, 10%); + } + } + + &.blue-steel { + background-color: $base-blue; + + &:hover { + background-color: darken($base-blue, 10%); + } + } + + &.blue-midnight { + background-color: $blue-midnight; + + &:hover { + background-color: darken($blue-midnight, 10%); + } + } + + &.orange { + background-color: $base-orange; + + &:hover { + background-color: darken($base-orange, 10%); + } + } + + &.grey-light { + background-color: $grey-light; + color:$text-default-color; + + &:hover { + background-color: darken($grey-light, 10%); + } + } + + + +} diff --git a/client/src/styles/atoms/_cards.scss b/client/src/styles/atoms/_cards.scss index ba1bb3a..4cbed68 100644 --- a/client/src/styles/atoms/_cards.scss +++ b/client/src/styles/atoms/_cards.scss @@ -1,6 +1,9 @@ +//Width based on column .card { - box-shadow: $shadow-style-1; - min-width: 500px; - background-color: $default-white; - padding: 20px; -} \ No newline at end of file + box-shadow: $shadow-style-card; + background-color: $base-white; + padding: 1.25rem 1.25rem 2.5rem 1.25rem;//20px; + margin-bottom: 2.5em;//40px; + font-size: $default-font-size; +} + diff --git a/client/src/styles/atoms/_form-atoms.scss b/client/src/styles/atoms/_form-atoms.scss new file mode 100644 index 0000000..c0ee2af --- /dev/null +++ b/client/src/styles/atoms/_form-atoms.scss @@ -0,0 +1,222 @@ +input, +select, +textarea, +keygen { + display:block; + font-family: "Open Sans"; + letter-spacing: $default-letter-spacing; + color: $text-default-color; + border:$default-border; + background-color: transparent; + font-size: $default-font-size; + height:$font-size*2;/*32px*/ + padding:0 0.625em; /*10px*/ + transition:$border-color-transition, $border-width-transition; + box-sizing: $default-box-sizing; + + &:focus { + outline: none; + border: 2px solid $base-blue; + } + + &.inactive { + + } + + &.edit{ + border-style: dotted; + } + + &.edit:focus { + border-style: dotted; + } + + &.error, &.error:focus { + border: 1px solid $axial-red; + background-color: $error-background; + color:$axial-red; + } + + &.error:focus { + border-width: 2px; + background-color: $white; + //color:$text-default-color; + } + + &.warning { + border: 1px solid $orange-tiger; + } + + &.warning:focus { + border-width: 2px; + } + +} +input, +select, +input { + + font-size: $default-font-size; //$px-14; + + &.input-sm { + + } + + &.input-med { + font-size: inherit; + min-height: 2.429em;/*34px*/ + } + + &.input-lrg { + font-size: $large-text; + min-height: 2.250em;/*36px*/ + } + +} + + +//Labels +label{ + + font-size: $default-font-size; //$px-14; + display: inline-block; + + &.error{ + color:$axial-red; + } + + &.warning { + color:$orange-tiger; + } + + &.sm, &.label-sm{ + font-size: $small-text; + + } + //standard + &.med, &.label-med{ + font-size: inherit; + } + + &.lrg, &.label-lrg{ + font-size:$large-text; + } + + &.xl, &.label-xl{ + font-size:$x-large-text; + } + +} + +.check-box-button-style, +.check-box-list-style { + transition:$hover-transition-default, $border-color-transition; + position: relative; + display: inline-block; +} + +.check-box-button-style { + font-size: $large-text; + height:2em; + width:14.25em; + background-color: $white; + border: 1px solid $grey-mid-light; + border-radius: $rounded-border-radius; + + .check-box-button-style label { + text-align: $center; + vertical-align: middle; + line-height: 100%; + } + + &:hover { + background-color: $grey-mid-light; + border-color: transparent; + } + + &.checked, &.darkbutton, &.checked:hover { + background-color: $blue-midnight; + border-color: transparent; + color:$white; + } +} + +.check-box-list-style { + width:392px; + height:44px; + background-color: $grey-background; + border:none; + padding:15px 20px; + + &.checked, &:hover { + background:$blue-artic; + cursor: pointer; + color:$blue-midnight; + } + + &.checked label { + color:$blue-midnight; + } +} + + .check-box-list-style input, .check-box-button-style input { + position: absolute; + opacity:0; + width:100%; + height: 100%; + padding: 0; + margin: 0; + top:0; + left: 0; + cursor: pointer; + } + +.check-box-list-style label, .check-box-button-style label { + position: absolute; + line-height:1; + width:100%; + vertical-align: middle; +} + +.check-box-list-style label { + +} + +.check-box-button-style label { + text-align: center; + line-height: 2.2em; +} + + +textarea { + min-height: 5em; + display: block; + resize:auto; + box-sizing:padding-box; + overflow: hidden; + padding:.5em; +} + +.pill { + display: $inline-block; + width:auto; + min-width: 5em; + padding:0 8px; + line-height:$default-line-height + ($base-ratio*2); + text-transform: capitalize; + + &.sm { + font-size: $small-text; + } +} + +.validation-text { + &.green, &.valid { + color:$green-mint; + } + + &.red, &.error { + color:$axial-red; + } +} + diff --git a/client/src/styles/atoms/_growler.scss b/client/src/styles/atoms/_growler.scss index e12e395..6d9aec5 100644 --- a/client/src/styles/atoms/_growler.scss +++ b/client/src/styles/atoms/_growler.scss @@ -1,9 +1,14 @@ .growler { - border-radius: $default-border-radius * 3; + //border-radius: $default-border-radius * 3; padding: 1.5em; - box-shadow: $shadow-style-3; + box-shadow: $shadow-style-growler; + border-radius: $growler-border-radius; + width:21.438em;/*343 - 3.5columns */ + min-height:7.750em;/*124px;*/ + font-size:$default-font-size; + color:$white; &.green { - background-color: $default-green; + background-color: $base-green; } } \ No newline at end of file diff --git a/client/src/styles/atoms/_logos.scss b/client/src/styles/atoms/_logos.scss new file mode 100644 index 0000000..bb2f553 --- /dev/null +++ b/client/src/styles/atoms/_logos.scss @@ -0,0 +1,73 @@ +// Logos +.logo-wrapper{ + + +} + + +.logo { + overflow: hidden; + box-sizing:inherit; + line-height: 0; + background-color: $white; + background-repeat: no-repeat; + background-color: $white; + background-repeat: no-repeat; + overflow: hidden; + display: block; + position: relative; + padding:4px; + + + &.xs { + width:2.750rem;//44px + height: 2.750rem;//44px + } + + &.sm { + width:4rem;//64px + height: 4rem;//64px + } + + &.med { + width:5.5rem;//88px; + height: 5.5rem;//88px; + } + + &.lrg { + width:6.750rem;//108px; + height: 6.750rem;//108px; + } + + &.x-lrg { + width:8.250rem;//132px; + height: 8.250rem;//132px; + } + + &.xx-lrg { + width:9.5rem;//152px; + height: 9.5rem;//152px; + } +} + +.logo a { + display: block; + height: 100%; + position: relative; +} + +.logo img { + width: 100%; + height: auto; + position: absolute; + top:0; + right:0; + bottom:0; + left:0; + margin: auto; + border:none; +} + +/* + Container is 8px greater in size on all ends in addition to logo size +*/ \ No newline at end of file diff --git a/client/src/styles/atoms/_modal.scss b/client/src/styles/atoms/_modal.scss new file mode 100644 index 0000000..1be2896 --- /dev/null +++ b/client/src/styles/atoms/_modal.scss @@ -0,0 +1,3 @@ +.modal { + +} \ No newline at end of file diff --git a/client/src/styles/atoms/_profiles.scss b/client/src/styles/atoms/_profiles.scss new file mode 100644 index 0000000..feb7a47 --- /dev/null +++ b/client/src/styles/atoms/_profiles.scss @@ -0,0 +1,35 @@ +//User Images + +.user-img { + display: block; + background-image: url('http://vignette3.wikia.nocookie.net/thebiglebowski/images/7/7e/The_Dude.jpeg/revision/latest?cb=20111216183045'); + background-origin: content-box; + background-repeat: no-repeat; + background-position-x: 50%; + background-position-y: 50%; + border-radius: $circle; + background-size: $bg-size-full; + box-shadow: $shadow-style-user-img; + width:auto; + height: 100%; + + &.lrg { + width:6.750em;//108px; + height: 6.750em;//108px; + } + + &.med { + width:5em;//80px; + height: 5em;//80px; + } + + &.sm { + width:4em;//64px + height: 4em;//64px + } + + &.xs { + width:2.750em;//44px + height: 2.750em;//44px + } +} diff --git a/client/src/styles/atoms/_sidebar.scss b/client/src/styles/atoms/_sidebar.scss new file mode 100644 index 0000000..4402b44 --- /dev/null +++ b/client/src/styles/atoms/_sidebar.scss @@ -0,0 +1,31 @@ +.sidebar { + width:243px; + height: 100%; + overflow: hidden; + + &.left, &.sidebar-left { + box-shadow: $shadow-style-sidebar-left; + } + + &.blue { + background-color: $blue-sky; + } + + &.green { + background-color: $green-sea; + } + + &.grey { + background-color: $grey-mid-light; + } +} + + +.sidebar.blue li a, +.sidebar.green li a, { + color:$white; +} + +.sidebar-inner { + padding:1.25rem 1.25rem 2.5rem 1.25rem;//20px; +} \ No newline at end of file diff --git a/client/src/styles/atoms/_signifiers.scss b/client/src/styles/atoms/_signifiers.scss new file mode 100644 index 0000000..aef50a8 --- /dev/null +++ b/client/src/styles/atoms/_signifiers.scss @@ -0,0 +1,122 @@ +// Signifiers +// Global ornamental elements (e.g. borders, colors decorations) + +$default-border-color:$grey; +$default-border-size: 1px; +$default-border-style: solid; +$border-none:none; + + +$default-border: $default-border-size $default-border-style $default-border-color; + +hr { + height:1px; + border:$default-border; + border-top:$border-none; + border-right:$border-none; + border-left:$border-none; +} + +.border { + border:$default-border; + + &[data-btm]{ + border-top:$border-none; + border-right:$border-none; + border-left:$border-none; + } + + &[data-top]{ + border-bottom:$border-none; + border-right:$border-none; + border-left:$border-none; + } + + &[data-right]{ + border-top:$border-none; + border-bottom:$border-none; + border-left:$border-none; + } + + &[data-left]{ + border-top:$border-none; + border-right:$border-none; + border-bottom:$border-none; + } +} + +.blue-dot { + background-color: $blue-sky; + display: inline-block; + height: 11px; + width: 11px; + border-radius: $circle; + + &:after { + content: ""; + width: 1px; + height: 95px; + background-color: $grey; + display: flex; + margin: 19px auto; + } +} + +.beta { + font-size: $h6-font-size; + font-weight: $font-weight-bold; +} + +.counter { + display:block; + border-radius: $circle; + font-size: $x-small-text; + font-weight: $font-weight-bold; + text-align: $center; + color:$white; + line-height: 1.25rem; + width: 1.25rem; + background-color: $grey; + + &.orange { + background-color: $orange-melon; + } +} + +.nav-on { + height:3px; + content: ""; + display: block; + width:100%; + background-color:$orange-melon; + margin-top: 4px; +} + +.progress-wrapper { + display: inline-block; + border-bottom: 2px solid rgba(0,0,0,.28); +} + +.progress-bar-step { + padding: 2px .625em; + width:auto; + font-size: $small-text; + text-transform: $uppercase; + opacity: $disabled-opacity; + text-align: $center; + color:$grey-shadow; +} + +.progress-bar-step.active { + opacity: $default-opacity; + border-bottom: 2px $default-border-style $blue-navy; + color:$blue-navy; +} + +.previous > p { + text-align: left; +} + +.next > p { + text-align:right; +} \ No newline at end of file diff --git a/client/src/styles/atoms/_tags.scss b/client/src/styles/atoms/_tags.scss new file mode 100644 index 0000000..749c7c1 --- /dev/null +++ b/client/src/styles/atoms/_tags.scss @@ -0,0 +1,43 @@ +//Tags +.tag { + color:$white; + text-align: $center; + font-size: $h6-font-size; + background-color: $grey-medium; + + + &.user-tag { + line-height: 2em; + min-width:7.333em; + width:7.333em; + font-weight: $font-weight-bold; + text-transform: uppercase; + letter-spacing: $tag-letter-spacing; + + &[data-role="advisor"]{ + background-color: $orange-melon; + } + + &[data-role="lender"]{ + background-color: $green-sea; + } + + &[data-role="buyer"]{ + background-color: $blue-midnight; + } + + &[data-role="investor"]{ + background-color: $blue-sky; + } + } + + &.premium-tag { + background-color: $admin-gold; + font-weight: $font-weight-semibold; + min-width:6em; + width:6em; + } +} + + + diff --git a/client/src/styles/atoms/_typography.scss b/client/src/styles/atoms/_typography.scss index a172245..e5e8a8e 100644 --- a/client/src/styles/atoms/_typography.scss +++ b/client/src/styles/atoms/_typography.scss @@ -3,16 +3,27 @@ body { @include font-smoothing('antialiased'); font-size: $default-font-size; letter-spacing: $default-letter-spacing; + color:$text-default-color; + line-height: $default-line-height; } -h1 { +h1, h2, h3,h4,h6,h6 { + margin:0; + line-height: $default-line-height; +} + +h1 { font-size: $h1-font-size; font-weight: $font-weight-light; } h2 { - font-size: $h2-font-size; + font-size: $h1-font-size; font-weight: $font-weight-light; + + &.h2b{ + font-size: $h2-font-size; + } } h3 { @@ -35,31 +46,144 @@ h6 { font-weight: $font-weight-bold; text-transform: uppercase; letter-spacing: $h6-letter-spacing; + margin:0 0 8px 0; +} + +.text { + font-size: $default-font-size; + line-height: $default-line-height; +} + +.text-xs { + font-size: $xx-small-text; + line-height: 1rem; + } + +.text-sm { + font-size: $small-text; //.813rem; + line-height: $font-size + $base-ratio; +} + +//Default +.text-med { + font-size: $default-font-size; +} + +.text-lrg { + font-size: $large-text;//16px; +} + +.text-xlrg { + font-size: $x-large-text; //18px } p { padding-bottom: $p-padding-bottom; + font-size: $default-font-size; + line-height: $default-line-height; - &.p-lrg { - font-size: $font-size; + &.text-lrg { + font-size: $large-text;//16px; } - &.p-sm { - font-size: .813rem; + &.text-sm { + font-size: $small-text; //.813rem line-height: $font-size + $base-ratio; } + + &.text-xs { + font-size: $xx-small-text; + line-height: 1rem; + } } -ul { +ul, ol { + + &.ul-ol-sm li { + + list-style-type: none; + font-size: $small-text; + } + + &.ul-ol-med li, + &.ul-ol li { + + list-style-type: none; + font-size: $default-font-size; + } + + &.ul-ol-lrg li { + + list-style-type: none; + font-size: $large-text; + } + + &.ul-ol-xlrg li { + + list-style-type: none; + font-size: $x-large-text; + } + li { list-style-type: none; + + &.text-xs { + + } + + &.text-sm { + + } + + &.text-med { + + } + + &.text-lrg { + + } + + } + + &.bullet-list li { + list-style-type: disc; + list-style-position:outside; + } + + &.bullet-list.bullet-list-indent li { + list-style-position:inside; + } +} + +ol { + li { + list-style-type: decimal; } } -a, -a:visited, -a:hover { - color: $a-default-color; - cursor: pointer; - transition: background .25s ease-in-out; -} \ No newline at end of file +.tetx-italic { + font-style: $italic; +} + +.text-help { + font-size: $help-text-standard; + color: $grey-smoke; + + &.text-xs { + font-size: $help-text-x-small; + line-height: 1.1em; + } + +} + +.text-bold { + font-weight: $font-weight-semibold; +} + + + + + + + + diff --git a/client/src/styles/images/muster.jpg b/client/src/styles/images/muster.jpg new file mode 100644 index 0000000000000000000000000000000000000000..08a6a7b2648a9a41a1a68006f7f0f15da831ba55 GIT binary patch literal 39435 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 Date: Wed, 12 Oct 2016 14:14:15 -0400 Subject: [PATCH 5/6] Additional Style Guide Edits 10.12.16 --- client/src/components/styles/styles.html | 67 +++++++++++++------ client/src/components/styles/styles.scss | 8 +++ client/src/styles/atoms/_typography.scss | 26 +++++-- client/src/styles/molecules/_expand-list.scss | 14 ++++ .../src/styles/settings/_font-settings.scss | 3 +- client/src/styles/settings/_settings.scss | 5 ++ client/src/styles/styles.scss | 1 + 7 files changed, 96 insertions(+), 28 deletions(-) create mode 100644 client/src/styles/molecules/_expand-list.scss diff --git a/client/src/components/styles/styles.html b/client/src/components/styles/styles.html index 72439a1..fa18e45 100644 --- a/client/src/components/styles/styles.html +++ b/client/src/components/styles/styles.html @@ -11,27 +11,27 @@

H4: Open Sans Regular 16px

H5: Open Sans Semibold 14px
H6: Open Sans Bold 12px Uppercase
-

+

Paragraph Small: Opens Sans Regular 11px FS/ 16px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

+

Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

+

Paragraph Normal: Opens Sans Regular 14px FS/ 21px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

+

Paragraph Large: Opens Sans Regular 16px FS/ 24px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

+

Paragraph Large: Opens Sans Regular 16px FS/ 24px LH/ .2 LS / bottom-padding:8px; Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

@@ -42,32 +42,32 @@
H6: Open Sans Bold 12px Uppercase
Eg., Bacon ipsum dolor amet fugiat tri-tip magna meatball est aute. Culpa sausage magna tenderloin ham, do meatloaf veniam meatball frankfurter kielbasa.

-

+

Help text - Paragraph Small: Opens Sans Regular 13px FS/ 18px LH/ .2 LS / #828282

-

+

Help text - Paragraph X Small: Opens Sans Regular 11px FS/ 16px LH/ .2 LS / #828282

    -
  • li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
  • +
  • li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
    -
  • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
  • +
  • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    -
  • li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
  • +
  • li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
    -
  • li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
  • +
  • li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
    -
  • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
  • +
  • li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    @@ -75,24 +75,40 @@
    H6: Open Sans Bold 12px Uppercase
    -
  1. li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
  2. +
  3. li:Opens Sans W Regular 13px FS/ 18px LH/ .2 LS/ no list-item
    -
  1. li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
  2. +
  3. li:Opens Sans W Regular 14px FS/ 21px LH/ .2 LS/ no list-item
    -
  1. li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
  2. +
  3. li:Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ no list-item
    -
  1. li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
  2. +
  3. li:Opens Sans W Regular 18px FS/ 27px LH/ .2 LS/ no list-item
a: Opens Sans W Regular 16px FS/ 24px LH/ .2 LS/ Color: rgba(25, 131, 179, 100)

+ + + + + + + + +
+ I'm the Header of the table +
+ I'm trapped in this table cell + + I'm trapped in this table cell +
+
@@ -295,8 +311,8 @@

Modal Header

@@ -333,18 +349,19 @@

Main container

-