From: ARULNA Date: Fri, 2 Jun 2017 20:27:25 +0000 (-0400) Subject: Initial coomit for AAI-UI(sparky-fe) X-Git-Tag: v1.0.0~17 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=aai%2Fsparky-fe.git;a=commitdiff_plain;h=refs%2Fchanges%2F23%2F4623%2F1 Initial coomit for AAI-UI(sparky-fe) Change-Id: I9f8482824a52bac431c100939899e760c0fa4fdb Signed-off-by: ARULNA --- diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..8fe34b4 --- /dev/null +++ b/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015", "react", "stage-0"], + "plugins": ["react-hot-loader/babel"] +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..64f008a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +# tab indentation +[src/**.js] +[src/**.jsx] +indent_style = space + + diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..bd11f6e --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +webpack.config*.js +gulpfile.js +fixture +tools diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..b21e1dc --- /dev/null +++ b/.eslintrc @@ -0,0 +1,177 @@ +{ + "parser": "babel-eslint", + "env": { + "es6": true, + "jquery": true, + "node": true + }, + "plugins": [ + "react", + "import" + ], + "ecmaFeatures": { + "jsx": true, + "classes": true, + "modules": true + }, + "globals": { + "window": true, + "navigator": true, + "System": true, + "document": true, + "localStorage": true, + "sessionStorage": true, + "Image": true, + "requestAnimationFrame": true, + "cancelAnimationFrame": true, + "DEBUG": true, + "SVGElement": true, + "FormData": true, + "DEV": true, + "Blob": true, + "XMLHttpRequest": true, + "URL": true, + "PunchOutRegistry": true, + "it": true, + "describe": true, + "fetch": false + }, + "rules": { + "linebreak-style": 0, + "no-unused-vars": 2, + "no-bitwise": 0, + "no-eq-null": 2, + "eqeqeq": 2, + "wrap-iife": [ + 2, + "any" + ], + "no-unused-expressions": 2, + "indent": [ + 2, + 2, + { + "SwitchCase": 1 + } + ], + "no-use-before-define": 2, + "new-cap": [ + 2, + { + "capIsNewExceptions": [ + "DataTable", + "V" + ] + } + ], + "no-caller": 2, + "no-empty": 2, + "no-undef": 2, + "quotes": [ + 2, + "single", + "avoid-escape" + ], + "jsx-quotes": [ + 2, + "prefer-single" + ], + "no-plusplus": 0, + "no-cond-assign": [ + 2, + "except-parens" + ], + "comma-style": [ + 2, + "last" + ], + "no-invalid-this": 0, + "dot-notation": 0, + "max-len": [ + //Default is 80 words in a line + 1, + 120, + { + "ignoreStrings": true, + "ignoreUrls": true, + "ignoreRegExpLiterals": true, + //"ignorePattern": "^\\s*case\\s.+:" + "ignorePattern": "^\\s*var\\s.+:\\s*require\\s*\\(/|^\\s*type\\s*:\\s*|^\\s*case\\s.+:" + } + ], + "camelcase": [ + 2, + { + "properties": "never" + } + ], + "curly": 2, + "brace-style": 0, + "semi": [ + 2, + "always" + ], + "space-in-brackets": [ + 0, + "never" + ], + "space-infix-ops": 2, + //This rule is aimed at ensuring there are spaces around infix operators. + "import/default": 0, + "import/no-unresolved": 0, + "import/no-named-as-default": 2, + "import/no-duplicates": 0, + "import/imports-first": 2, + "import/export": 2, + "react/display-name": 0, + "react/forbid-prop-types": 0, + "react/jsx-boolean-value": 0, + "react/jsx-closing-bracket-location": [ + 1, + { + "nonEmpty": "after-props", + "selfClosing": "after-props" + } + ], + "react/jsx-curly-spacing": 0, + //disallow spaces inside of curly braces in JSX attributes + "react/jsx-max-props-per-line": 0, + "react/jsx-no-duplicate-props": 1, + "react/jsx-no-literals": 0, + "react/jsx-no-undef": 1, + "react/jsx-sort-prop-types": 0, + "react/jsx-sort-props": 0, + "react/jsx-uses-react": 1, + "react/jsx-uses-vars": 1, + "react/no-danger": 1, + "react/no-did-mount-set-state": 2, + "react/no-did-update-set-state": 2, + "react/no-direct-mutation-state": 1, + "react/no-multi-comp": 0, + "react/no-set-state": 0, + "react/no-unknown-property": 1, + "react/prop-types": 0, + "react/react-in-jsx-scope": 1, + "react/require-extension": 1, + "react/self-closing-comp": 1, + "react/sort-comp": 0, + "react/wrap-multilines": [ + 1, + { + "declaration": true, + "assignment": false, + "return": true + } + ], + "constructor-super": 2, + "valid-jsdoc": 0, // Ensure JSDoc comments are valid (off by default): Uncomment this after the js docs are added + "default-case": 0, + // require default case in switch statements (off by default) + "no-array-constructor": 0, + // disallow use of the Array constructor + "no-comma-dangle": 0, + // disallow trailing commas in object literals + "no-var": 0 + // require let or const instead of var (off by default) + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c06b3a9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ + +.idea + +dist +node_modules +.npmrc +test/coverage +npm-debug.log +.vscode +scripts/elasticsearch/auditBulkLoad.json diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..4f67d27 --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=gerrit.onap.org +port=29418 +project=aai/sparky-fe diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7f4ec50 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +============LICENSE_START=================================================== +SPARKY (AAI UI service) +============================================================================ +Copyright © 2017 AT&T Intellectual Property. +Copyright © 2017 Amdocs +All rights reserved. +============================================================================ +Licensed 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. +============LICENSE_END===================================================== + +ECOMP and OpenECOMP are trademarks +and service marks of AT&T Intellectual Property. \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..c74b23f --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,152 @@ +/* + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed 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. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +'use strict'; + +var localPath = require('path'); +var gulp = require('gulp'); +var gulpHelpers = require('gulp-helpers'); +var taskMaker = gulpHelpers.taskMaker(gulp); +var runSequence = gulpHelpers.framework('run-sequence'); +var gulpCssUsage = require('gulp-css-usage').default; +var webpack = require('webpack'); +var WebpackDevServer = require('webpack-dev-server'); +var devWebpackConfig = require('./webpack.devConfig.js'); +var webpackConfig = require('./webpack.config'); + +let appName = 'aai'; +let dist = 'dist/'; + +let path = { + output: dist, + aaiOutput: dist + '/aai/', + assets: './resources/**/*.{css,png,svg,eot,ttf,woff,woff2,otf}', + json: './src/**/*.json', + aaiIndex: './src/index.html', + scss: './resources/scss/**/*.scss', + aaiCss: dist + '/css', + war: [dist + '**/*.html', dist + '**/*.js', dist + '**/*.{css,png,svg,eot,ttf,woff,woff2,otf}', dist + '**/*.json', 'webapp/**'], + wardest: dist +}; + +taskMaker.defineTask('clean', {taskName: 'clean', src: path.output}); +taskMaker.defineTask('copy', {taskName: 'copy-aai-index.html', src: path.aaiIndex, dest: path.output, rename: 'index.html'}); + +gulp.task('copy-dev-stuff', callback => { + return runSequence(['copy-aai-index.html'], callback); +}); + +gulp.task('copy-stuff', callback => { + return runSequence(['copy-aai-index.html'], callback); +}); + +gulp.task('dev', callback => { + return runSequence('clean', 'copy-dev-stuff', 'webpack-dev-server', callback); +}); + +// Production build +gulp.task('build', callback => { + return runSequence('clean', ['copy-stuff'], 'prod', callback); +}); + +gulp.task('default', ['dev']); + +gulp.task('prod', () => { + + return new Promise((resolve, reject)=> { + // configure webpack for production + let webpackProductionConfig = Object.create(webpackConfig); + + for (let name in webpackProductionConfig.entry) { + webpackProductionConfig.entry[name] = webpackProductionConfig.entry[name].filter(path => !path.startsWith('webpack')); + } + + webpackProductionConfig.cache = true; + webpackProductionConfig.output = { + path: localPath.join(__dirname, 'dist'), + publicPath: '/services/aai/webapp/', + filename: '[name].js' + }; + webpackProductionConfig.resolveLoader = { + root: [localPath.resolve('.')], + alias: { + 'config-json-loader': 'tools/webpack/config-json-loader/index.js' + } + }; + + // remove source maps + webpackProductionConfig.devtool = undefined; + webpackProductionConfig.module.preLoaders = webpackProductionConfig.module.preLoaders.filter(preLoader => preLoader.loader != 'source-map-loader'); + webpackProductionConfig.module.loaders.forEach(loader => { + if (loader.loaders && loader.loaders[0] === 'style') { + loader.loaders = loader.loaders.map(loaderName => loaderName.replace('?sourceMap', '')); + } + }); + + webpackProductionConfig.module.loaders.push({test: /config.json$/, loaders: ['config-json-loader']}); + webpackProductionConfig.eslint = { + configFile: './.eslintrc', + failOnError: true + }; + webpackProductionConfig.plugins = [ + new webpack.DefinePlugin({ + 'process.env': { + // This has effect on the react lib size + 'NODE_ENV': JSON.stringify('production') + }, + DEBUG: false, + DEV: false + }), + new webpack.optimize.DedupePlugin(), + new webpack.optimize.UglifyJsPlugin() + ]; + + // run production build + webpack(webpackProductionConfig, function (err, stats) { + console.log('[webpack:build]', stats.toString()); + if (err || stats.hasErrors()) { + console.log('bundleJS : Failure!!'); + reject(); + } + else { + console.log('bundleJS : Done'); + resolve(); + } + }); + }); + +}); + +gulp.task('webpack-dev-server', () => { + let myConfig = Object.create(devWebpackConfig); + + // Start a webpack-dev-server + let server = new WebpackDevServer(webpack(myConfig), myConfig.devServer); + server.listen(myConfig.devServer.port, '0.0.0.0', err => { + if (err) { + throw new Error('webpack-dev-server' + err); + } + }); +}); diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..dd0a9cb --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,113 @@ +/* + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed 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. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +var path = require('path'); +var webpack = require('webpack'); +var isparta = require('isparta'); + +module.exports = function (config) { + config.set({ + + browsers: [process.env.CONTINUOUS_INTEGRATION ? 'Firefox' : 'Chrome'], + + singleRun: true, + + frameworks: ['mocha'], + + files: ['tests.webpack.js'], + + preprocessors: { + 'tests.webpack.js': ['webpack', 'sourcemap'], + 'src/**/*.jsx': ['coverage'] + }, + + reporters: ['progress', 'coverage'], + + coverageReporter: { + dir: 'dist/coverage/', + reporters: [ + {type: 'html'}, + {type: 'text-summary'} + ], + includeAllSources: true, + instrumenters: {isparta: isparta}, + instrumenter: { + '**/*.js': 'isparta', + '**/*.jsx': 'isparta' + }, + instrumenterOptions: { + isparta: { + embedSource: true, + noAutoWrap: true + } + } + }, + + webpack: { + babel: { + presets: ['es2015', 'stage-0', 'react'] + }, + isparta: { + embedSource: true, + noAutoWrap: true, + // these babel options will be passed only to isparta and not to babel-loader + babel: { + presets: ['es2015', 'stage-0', 'react'] + } + }, + devtool: 'inline-source-map', + resolve: { + root: [path.resolve('.')], + alias: { + app: 'src/app', + 'generic-components': 'src/generic-components', + utils: 'src/utils', + 'test-utils': 'test/utils' + } + }, + module: { + preLoaders: [ + {test: /\.(js|jsx)$/, exclude: /node_modules/, loader: 'babel-loader'}, + {test: /\.(js|jsx)$/, exclude: /(test|test\.js|node_modules)/, loader: 'isparta'} + ], + loaders: [ + {test: /\.css$/, loaders: ['style', 'css', 'resolve-url']}, + {test: /\.scss$/, loaders: ['style', 'css', 'resolve-url', 'sass?sourceMap']}, + // required for font icons + {test: /\.(woff|woff2)(\?.*)?$/, loader: 'url-loader?limit=16384&mimetype=application/font-woff'}, + {test: /\.(ttf|eot|otf)(\?.*)?$/, loader: 'file-loader'}, + {test: /\.(png|jpg|svg)(\?.*)?$/, loader: 'url-loader?limit=16384'}, + + {test: /\.json$/, loaders: ['json']} + ] + } + }, + + webpackServer: { + noInfo: true + } + + }); +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..1c6925c --- /dev/null +++ b/package.json @@ -0,0 +1,117 @@ +{ + "name": "audit-ui", + "version": "1.0.0", + "description": "", + "main": "bundle.js", + "directories": { + "test": "test" + }, + "scripts": { + "start": "gulp", + "build": "gulp build", + "attBuild": "gulp attBuild", + "test": "karma start" + }, + "author": "", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "core-js": "^2.4.0", + "d3": "^4.9.1", + "es6-promise": "^3.2.1", + "jquery": "^2.2.2", + "lodash": "^4.13.1", + "lodash.debounce": "^4.0.8", + "md5": "^2.1.0", + "moment": "^2.13.0", + "moment-timezone": "^0.5.5", + "node-fetch": "^1.5.3", + "react": "^15.4.0", + "react-autosuggest": "^6.0.4", + "react-bootstrap": "^0.30.0-rc.1", + "react-datepicker": "^0.27.0", + "react-dom": "^15.1.0", + "react-fontawesome": "^0.3.3", + "react-grid-layout": "^0.14.4", + "react-highlight-words": "^0.4.1", + "react-redux": "^4.4.1", + "react-router-dom": "^4.1.1", + "react-select": "^1.0.0-beta13", + "react-split-pane": "^0.1.51", + "redux": "^3.3.1", + "redux-form": "^6.2.1", + "redux-thunk": "^2.1.0", + "topojson": "^2.2.0", + "uuid-js": "^0.7.5", + "validator": "^4.3.0" + }, + "devDependencies": { + "babel-core": "^6.9.1", + "babel-eslint": "^6.0.2", + "babel-loader": "^6.2.4", + "babel-preset-es2015": "^6.9.0", + "babel-preset-react": "^6.5.0", + "babel-preset-stage-0": "^6.5.0", + "chai": "^3.5.0", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.23.1", + "enzyme": "^2.5.1", + "eslint": "^3.1.1", + "eslint-loader": "^1.3.0", + "eslint-plugin-import": "^0.8.1", + "eslint-plugin-react": "^3.14.0", + "expect": "^1.20.1", + "express": "^4.13.3", + "file-loader": "^0.8.5", + "gulp": "^3.9.1", + "gulp-clean": "^0.3.1", + "gulp-css-usage": "^2.0.0", + "gulp-helpers": "^5.0.0", + "gulp-jsx-coverage": "^0.3.8", + "gulp-rename": "^1.2.2", + "gulp-replace": "^0.5.4", + "http-proxy-middleware": "^0.8.2", + "isparta": "^4.0.0", + "isparta-loader": "^2.0.0", + "istanbul": "^1.0.0-alpha.2", + "istanbul-instrumenter-loader": "^0.2.0", + "json-loader": "^0.5.4", + "jsx-loader": "^0.13.2", + "karma": "^0.13.22", + "karma-babel-preprocessor": "^6.0.1", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^1.0.1", + "karma-cli": "^1.0.0", + "karma-coverage": "^1.0.0", + "karma-firefox-launcher": "^1.0.0", + "karma-jasmine": "^1.1.0", + "karma-jasmine-html-reporter": "^0.2.2", + "karma-mocha": "^1.0.1", + "karma-sinon-chai": "^1.2.3", + "karma-sourcemap-loader": "^0.3.7", + "karma-verbose-reporter": "0.0.5", + "karma-webpack": "^1.7.0", + "mocha": "^2.4.5", + "mock-require": "^1.2.1", + "nock": "^8.0.0", + "node-sass": "^3.8.0", + "node-watch": "^0.3.5", + "prompt": "^0.2.14", + "react-addons-test-utils": "^15.1.0", + "react-bootstrap": "^0.30.0-rc.1", + "react-hot-loader": "^3.0.0-beta.6", + "react-split-pane": "^0.1.51", + "recharts": "^0.20.5", + "redux-mock-store": "^1.1.2", + "sass-loader": "^3.1.2", + "sinon": "^2.0.0-pre", + "source-map-loader": "^0.1.5", + "style-loader": "^0.13.1", + "url-loader": "^0.5.7", + "webpack": "^1.13.1", + "webpack-dev-server": "^1.14.1" + }, + "engines": { + "node": ">=5.1", + "npm": ">=3.3" + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..92fc2fb --- /dev/null +++ b/pom.xml @@ -0,0 +1,80 @@ + + 4.0.0 + org.openecomp.aai + sparky-fe + war + 1.0.0-SNAPSHOT + Sparky FE + http://maven.apache.org + + + + + + + + + org.apache.maven.plugins + maven-war-plugin + + false + + + dist + + + + + + + com.github.eirslett + frontend-maven-plugin + 1.4 + + + install node and npm + + install-node-and-npm + + generate-resources + + v6.2.2 + 3.10.3 + + + + npm config + + npm + + generate-resources + + config set cache node\npm-cache + + + + npm install + + npm + + generate-resources + + + gulp build + + gulp + + generate-resources + + + build + + + + + + + + + diff --git a/resources/css/font-awesome.min.css b/resources/css/font-awesome.min.css new file mode 100644 index 0000000..24fcc04 --- /dev/null +++ b/resources/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.3.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transform:translate(0, 0)}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-genderless:before,.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"} \ No newline at end of file diff --git a/resources/css/react-datepicker.min.css b/resources/css/react-datepicker.min.css new file mode 100644 index 0000000..783275a --- /dev/null +++ b/resources/css/react-datepicker.min.css @@ -0,0 +1 @@ +.react-datepicker__tether-element-attached-top .react-datepicker__triangle,.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle,.react-datepicker__year-read-view--down-arrow{margin-left:-8px;position:absolute}.react-datepicker__tether-element-attached-top .react-datepicker__triangle,.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle,.react-datepicker__year-read-view--down-arrow,.react-datepicker__tether-element-attached-top .react-datepicker__triangle::before,.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle::before,.react-datepicker__year-read-view--down-arrow::before{box-sizing:content-box;position:absolute;border:8px solid transparent;height:0;width:1px}.react-datepicker__tether-element-attached-top .react-datepicker__triangle::before,.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle::before,.react-datepicker__year-read-view--down-arrow::before{content:"";z-index:-1;border-width:8px;left:-8px;border-bottom-color:#aeaeae}.react-datepicker__tether-element-attached-top .react-datepicker__triangle{top:0;margin-top:-8px}.react-datepicker__tether-element-attached-top .react-datepicker__triangle,.react-datepicker__tether-element-attached-top .react-datepicker__triangle::before{border-top:none;border-bottom-color:#f0f0f0}.react-datepicker__tether-element-attached-top .react-datepicker__triangle::before{top:-1px;border-bottom-color:#aeaeae}.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle,.react-datepicker__year-read-view--down-arrow{bottom:0;margin-bottom:-8px}.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle,.react-datepicker__year-read-view--down-arrow,.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle::before,.react-datepicker__year-read-view--down-arrow::before{border-bottom:none;border-top-color:#fff}.react-datepicker__tether-element-attached-bottom .react-datepicker__triangle::before,.react-datepicker__year-read-view--down-arrow::before{bottom:-1px;border-top-color:#aeaeae}.react-datepicker{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:11px;background-color:#fff;color:#000;border:1px solid #aeaeae;border-radius:4px;display:inline-block;position:relative}.react-datepicker__triangle{position:absolute;left:50px}.react-datepicker__tether-element-attached-bottom.react-datepicker__tether-element{margin-top:-20px}.react-datepicker__header{text-align:center;background-color:#f0f0f0;border-bottom:1px solid #aeaeae;border-top-left-radius:4px;border-top-right-radius:4px;padding-top:8px;position:relative}.react-datepicker__current-month{margin-top:0;color:#000;font-weight:bold;font-size:13px}.react-datepicker__current-month--hasYearDropdown{margin-bottom:16px}.react-datepicker__navigation{line-height:24px;text-align:center;cursor:pointer;position:absolute;top:10px;width:0;border:6px solid transparent}.react-datepicker__navigation--previous{left:10px;border-right-color:#ccc}.react-datepicker__navigation--previous:hover{border-right-color:#b3b3b3}.react-datepicker__navigation--next{right:10px;border-left-color:#ccc}.react-datepicker__navigation--next:hover{border-left-color:#b3b3b3}.react-datepicker__navigation--years{position:relative;top:0;display:block;margin-left:auto;margin-right:auto}.react-datepicker__navigation--years-previous{top:4px;border-top-color:#ccc}.react-datepicker__navigation--years-previous:hover{border-top-color:#b3b3b3}.react-datepicker__navigation--years-upcoming{top:-4px;border-bottom-color:#ccc}.react-datepicker__navigation--years-upcoming:hover{border-bottom-color:#b3b3b3}.react-datepicker__month{margin:5px;text-align:center}.react-datepicker__day-name,.react-datepicker__day{color:#000;display:inline-block;width:24px;line-height:24px;text-align:center;margin:2px}.react-datepicker__day{cursor:pointer}.react-datepicker__day:hover{border-radius:4px;background-color:#f0f0f0}.react-datepicker__day--today{font-weight:bold}.react-datepicker__day--selected,.react-datepicker__day--in-range{border-radius:4px;background-color:#216ba5;color:#fff}.react-datepicker__day--selected:hover,.react-datepicker__day--in-range:hover{background-color:#1d5d90}.react-datepicker__day--disabled{cursor:default;color:#ccc}.react-datepicker__day--disabled:hover{background-color:transparent}.react-datepicker__input-container{position:relative;display:inline-block}.react-datepicker__year-read-view{width:50%;left:25%;position:absolute;bottom:25px;border:1px solid transparent;border-radius:4px}.react-datepicker__year-read-view:hover{cursor:pointer}.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow{border-top-color:#b3b3b3}.react-datepicker__year-read-view--down-arrow{border-top-color:#ccc;margin-bottom:3px;left:5px;top:9px;position:relative;border-width:6px}.react-datepicker__year-read-view--selected-year{right:6px;position:relative}.react-datepicker__year-dropdown{background-color:#f0f0f0;position:absolute;width:50%;left:25%;top:30px;text-align:center;border-radius:4px;border:1px solid #aeaeae}.react-datepicker__year-dropdown:hover{cursor:pointer}.react-datepicker__year-option{line-height:20px;width:100%;display:block;margin-left:auto;margin-right:auto}.react-datepicker__year-option:first-of-type{border-top-left-radius:4px;border-top-right-radius:4px}.react-datepicker__year-option:last-of-type{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.react-datepicker__year-option:hover{background-color:#ccc}.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming{border-bottom-color:#b3b3b3}.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous{border-top-color:#b3b3b3}.react-datepicker__year-option--selected{position:absolute;left:30px}.react-datepicker__close-icon{background-color:transparent;border:0;cursor:pointer;display:inline-block;height:0;outline:0;padding:0;vertical-align:middle}.react-datepicker__close-icon::after{background-color:#216ba5;border-radius:50%;bottom:0;box-sizing:border-box;color:#fff;content:"\00d7";cursor:pointer;font-size:12px;height:16px;width:16px;line-height:1;margin:-8px auto 0;padding:2px;position:absolute;right:7px;text-align:center;top:50%}.react-datepicker__today-button{background:#f0f0f0;border-top:1px solid #aeaeae;cursor:pointer;text-align:center;font-weight:bold;padding:5px 0}.react-datepicker__tether-element{z-index:2147483647} diff --git a/resources/css/react-select.min.css b/resources/css/react-select.min.css new file mode 100644 index 0000000..c3b07ec --- /dev/null +++ b/resources/css/react-select.min.css @@ -0,0 +1 @@ +.Select,.Select-control{position:relative}.Select-arrow-zone,.Select-clear-zone,.Select-loading-zone{text-align:center;cursor:pointer}.Select,.Select div,.Select input,.Select span{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.Select.is-disabled>.Select-control{background-color:#f9f9f9}.Select.is-disabled>.Select-control:hover{box-shadow:none}.Select.is-disabled .Select-arrow-zone{cursor:default;pointer-events:none}.Select-control{background-color:#fff;border-radius:4px;border:1px solid #ccc;color:#333;cursor:default;display:table;height:36px;outline:0;overflow:hidden;width:100%}.is-searchable.is-focused:not(.is-open)>.Select-control,.is-searchable.is-open>.Select-control{cursor:text}.Select-control:hover{box-shadow:0 1px 0 rgba(0,0,0,.06)}.is-open>.Select-control{border-bottom-right-radius:0;border-bottom-left-radius:0;background:#fff;border-color:#b3b3b3 #ccc #d9d9d9}.is-open>.Select-control>.Select-arrow{border-color:transparent transparent #999;border-width:0 5px 5px}.is-focused:not(.is-open)>.Select-control{border-color:#007eff;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 3px rgba(0,126,255,.1)}.Select--single>.Select-control .Select-value,.Select-placeholder{bottom:0;color:#aaa;left:0;line-height:34px;padding-left:10px;padding-right:10px;position:absolute;right:0;top:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.has-value.Select--single>.Select-control>.Select-value .Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control>.Select-value .Select-value-label{color:#333}.has-value.Select--single>.Select-control>.Select-value a.Select-value-label,.has-value.is-pseudo-focused.Select--single>.Select-control>.Select-value a.Select-value-label{cursor:pointer;text-decoration:none}.has-value.Select--single>.Select-control>.Select-value a.Select-value-label:focus,.has-value.Select--single>.Select-control>.Select-value a.Select-value-label:hover,.has-value.is-pseudo-focused.Select--single>.Select-control>.Select-value a.Select-value-label:focus,.has-value.is-pseudo-focused.Select--single>.Select-control>.Select-value a.Select-value-label:hover{color:#007eff;outline:0;text-decoration:underline}.Select-input{height:34px;padding-left:10px;padding-right:10px;vertical-align:middle}.Select-input>input{width:100%;background:none;border:0;box-shadow:none;cursor:default;display:inline-block;font-family:inherit;font-size:inherit;margin:0;outline:0;line-height:14px;padding:8px 0 12px;-webkit-appearance:none}.Select-loading,.Select-loading-zone{width:16px;position:relative;vertical-align:middle}.is-focused .Select-input>input{cursor:text}.has-value.is-pseudo-focused .Select-input{opacity:0}.Select-control:not(.is-searchable)>.Select-input{outline:0}.Select-loading-zone{display:table-cell}.Select-loading{-webkit-animation:Select-animation-spin .4s infinite linear;-o-animation:Select-animation-spin .4s infinite linear;animation:Select-animation-spin .4s infinite linear;height:16px;box-sizing:border-box;border-radius:50%;border:2px solid #ccc;border-right-color:#333;display:inline-block}.Select-clear-zone{-webkit-animation:Select-animation-fadeIn .2s;-o-animation:Select-animation-fadeIn .2s;animation:Select-animation-fadeIn .2s;color:#999;display:table-cell;position:relative;vertical-align:middle;width:17px}.Select-clear-zone:hover{color:#D0021B}.Select-clear{display:inline-block;font-size:18px;line-height:1}.Select--multi .Select-clear-zone{width:17px}.Select-arrow-zone{display:table-cell;position:relative;vertical-align:middle;width:25px;padding-right:5px}.Select-arrow{border-color:#999 transparent transparent;border-style:solid;border-width:5px 5px 2.5px;display:inline-block;height:0;width:0}.Select-noresults,.Select-option{box-sizing:border-box;display:block;padding:8px 10px}.Select-arrow-zone:hover>.Select-arrow,.is-open .Select-arrow{border-top-color:#666}@-webkit-keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}@keyframes Select-animation-fadeIn{from{opacity:0}to{opacity:1}}.Select-menu-outer{border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:#fff;border:1px solid #ccc;border-top-color:#e6e6e6;box-shadow:0 1px 0 rgba(0,0,0,.06);box-sizing:border-box;margin-top:-1px;max-height:200px;position:absolute;top:100%;width:100%;z-index:1;-webkit-overflow-scrolling:touch}.Select-menu{max-height:198px;overflow-y:auto}.Select-option{background-color:#fff;color:#666;cursor:pointer}.Select-option:last-child{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.Select-option.is-selected{background-color:#f5faff;background-color:rgba(0,126,255,.04);color:#333}.Select-option.is-focused{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);color:#333}.Select-option.is-disabled{color:#ccc;cursor:default}.Select-noresults{color:#999;cursor:default}.Select--multi .Select-input{vertical-align:middle;margin-left:10px;padding:0}.Select--multi.has-value .Select-input{margin-left:5px}.Select--multi .Select-value{background-color:#ebf5ff;background-color:rgba(0,126,255,.08);border-radius:2px;border:1px solid rgba(0,126,255,.24);color:#007eff;display:inline-block;font-size:.9em;line-height:1.4;margin-left:5px;margin-top:5px;vertical-align:top}.Select--multi .Select-value-icon,.Select--multi .Select-value-label{display:inline-block;vertical-align:middle}.Select--multi .Select-value-label{border-bottom-right-radius:2px;border-top-right-radius:2px;cursor:default;padding:2px 5px}.Select--multi a.Select-value-label{color:#007eff;cursor:pointer;text-decoration:none}.Select--multi a.Select-value-label:hover{text-decoration:underline}.Select--multi .Select-value-icon{cursor:pointer;border-bottom-left-radius:2px;border-top-left-radius:2px;border-right:1px solid #c2e0ff;border-right:1px solid rgba(0,126,255,.24);padding:1px 5px 3px}.Select--multi .Select-value-icon:focus,.Select--multi .Select-value-icon:hover{background-color:#d8eafd;background-color:rgba(0,113,230,.08);color:#0071e6}.Select--multi .Select-value-icon:active{background-color:#c2e0ff;background-color:rgba(0,126,255,.24)}.Select--multi.is-disabled .Select-value{background-color:#fcfcfc;border:1px solid #e3e3e3;color:#333}.Select--multi.is-disabled .Select-value-icon{cursor:not-allowed;border-right:1px solid #e3e3e3}.Select--multi.is-disabled .Select-value-icon:active,.Select--multi.is-disabled .Select-value-icon:focus,.Select--multi.is-disabled .Select-value-icon:hover{background-color:#fcfcfc}@keyframes Select-animation-spin{to{transform:rotate(1turn)}}@-webkit-keyframes Select-animation-spin{to{-webkit-transform:rotate(1turn)}} \ No newline at end of file diff --git a/resources/fonts/fontawesome-webfont.eot b/resources/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..33b2bb8 Binary files /dev/null and b/resources/fonts/fontawesome-webfont.eot differ diff --git a/resources/fonts/fontawesome-webfont.svg b/resources/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..1ee89d4 --- /dev/null +++ b/resources/fonts/fontawesome-webfont.svg @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/fonts/fontawesome-webfont.ttf b/resources/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..ed9372f Binary files /dev/null and b/resources/fonts/fontawesome-webfont.ttf differ diff --git a/resources/fonts/fontawesome-webfont.woff b/resources/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..8b280b9 Binary files /dev/null and b/resources/fonts/fontawesome-webfont.woff differ diff --git a/resources/fonts/fontawesome-webfont.woff2 b/resources/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..3311d58 Binary files /dev/null and b/resources/fonts/fontawesome-webfont.woff2 differ diff --git a/resources/images/att/sprite-resource-icons.png b/resources/images/att/sprite-resource-icons.png new file mode 100644 index 0000000..e7716b7 Binary files /dev/null and b/resources/images/att/sprite-resource-icons.png differ diff --git a/resources/images/att/sprite-services-icons.png b/resources/images/att/sprite-services-icons.png new file mode 100644 index 0000000..afb3cbc Binary files /dev/null and b/resources/images/att/sprite-services-icons.png differ diff --git a/resources/images/icons/binocularicon.png b/resources/images/icons/binocularicon.png new file mode 100644 index 0000000..ad0ea59 Binary files /dev/null and b/resources/images/icons/binocularicon.png differ diff --git a/resources/images/icons/binocularicon_active.png b/resources/images/icons/binocularicon_active.png new file mode 100644 index 0000000..94dc9fd Binary files /dev/null and b/resources/images/icons/binocularicon_active.png differ diff --git a/resources/images/icons/binocularicon_hover.png b/resources/images/icons/binocularicon_hover.png new file mode 100644 index 0000000..0477ef8 Binary files /dev/null and b/resources/images/icons/binocularicon_hover.png differ diff --git a/resources/images/icons/favicon.ico b/resources/images/icons/favicon.ico new file mode 100644 index 0000000..c59a7aa Binary files /dev/null and b/resources/images/icons/favicon.ico differ diff --git a/resources/images/icons/favicon.png b/resources/images/icons/favicon.png new file mode 100644 index 0000000..c59a7aa Binary files /dev/null and b/resources/images/icons/favicon.png differ diff --git a/resources/images/icons/inventoryicon.png b/resources/images/icons/inventoryicon.png new file mode 100644 index 0000000..a4f5b09 Binary files /dev/null and b/resources/images/icons/inventoryicon.png differ diff --git a/resources/images/icons/nodedetails_selected.png b/resources/images/icons/nodedetails_selected.png new file mode 100644 index 0000000..ddae869 Binary files /dev/null and b/resources/images/icons/nodedetails_selected.png differ diff --git a/resources/images/icons/vnfSearchicon.png b/resources/images/icons/vnfSearchicon.png new file mode 100644 index 0000000..54ab5ff Binary files /dev/null and b/resources/images/icons/vnfSearchicon.png differ diff --git a/resources/images/icons/vnfSearchicon_active.png b/resources/images/icons/vnfSearchicon_active.png new file mode 100644 index 0000000..14c3812 Binary files /dev/null and b/resources/images/icons/vnfSearchicon_active.png differ diff --git a/resources/images/icons/vnfSearchicon_hover.png b/resources/images/icons/vnfSearchicon_hover.png new file mode 100644 index 0000000..f26dded Binary files /dev/null and b/resources/images/icons/vnfSearchicon_hover.png differ diff --git a/resources/images/onboarding/vendor-license-model.svg b/resources/images/onboarding/vendor-license-model.svg new file mode 100644 index 0000000..f23c30e --- /dev/null +++ b/resources/images/onboarding/vendor-license-model.svg @@ -0,0 +1 @@ +vendoe license model icon \ No newline at end of file diff --git a/resources/images/onboarding/vendor-software-product.svg b/resources/images/onboarding/vendor-software-product.svg new file mode 100644 index 0000000..a547c4a --- /dev/null +++ b/resources/images/onboarding/vendor-software-product.svg @@ -0,0 +1 @@ +vendor software product \ No newline at end of file diff --git a/resources/images/plus-circle-icon.svg b/resources/images/plus-circle-icon.svg new file mode 100644 index 0000000..352dcad --- /dev/null +++ b/resources/images/plus-circle-icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/resources/scss/_common.scss b/resources/scss/_common.scss new file mode 100644 index 0000000..44177e9 --- /dev/null +++ b/resources/scss/_common.scss @@ -0,0 +1,31 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +@import "common/variables"; +@import "common/typography"; +@import "common/base"; +@import "common/layout"; +@import "common/utils"; + diff --git a/resources/scss/_components.scss b/resources/scss/_components.scss new file mode 100644 index 0000000..2b0a911 --- /dev/null +++ b/resources/scss/_components.scss @@ -0,0 +1,81 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +@import "components/punchOut"; +@import "components/buttons"; +@import "components/validationForm"; +@import "components/slidePanel"; +@import "components/toggleInput"; +@import "components/notifications"; +@import "components/inputOptions"; +@import "components/progressBar"; +@import "components/dropdownMultiSelect"; +@import "components/inlineMessage"; +@import "components/dateRange"; +@import "components/dateRangeSelector"; +@import "components/toggleButtonGroup"; +@import "components/titledComponent"; +@import "components/containerPanel"; + +%noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.clickable { + cursor: pointer; +} + +.no-padding { + padding: 0; +} + +.next-to-icon-label { + $margin: 10px; + margin-left: $margin; + &.right { + margin-left: 0; + margin-right: $margin; + } +} + +.search-wrapper { + display: flex; + .search-input-control { + flex: 1 1; + margin: 0; + } + .search-icon { + position: relative; + left: -20px; + align-self: center; + width: 0; + color: $dark-gray; + } +} + diff --git a/resources/scss/_modules.scss b/resources/scss/_modules.scss new file mode 100644 index 0000000..d9c497b --- /dev/null +++ b/resources/scss/_modules.scss @@ -0,0 +1,33 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +@import "header/layout"; +@import "audit-table/layout"; +@import "visualizations/layout"; +@import "tier-support/search"; +@import "tier-support/selectedNodeDetails"; +@import "tier-support/splitPane"; +@import "d3/_forceDirectedGraph.scss"; +@import "d3/_aggregationMap.scss"; diff --git a/resources/scss/audit-table/_layout.scss b/resources/scss/audit-table/_layout.scss new file mode 100644 index 0000000..514ee81 --- /dev/null +++ b/resources/scss/audit-table/_layout.scss @@ -0,0 +1,45 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +.audit-table { + margin: 10px 20px 0px 20px; +} + +.audit-table td { + font-size: 12px; +} + +.notification { + font-size: 15px; +} + +.audit-pagination { + text-align: center; +} + +.table-column-json-blob{ + white-space: pre; + width: 20%; +} diff --git a/resources/scss/audit/_layout.scss b/resources/scss/audit/_layout.scss new file mode 100644 index 0000000..f6bf63b --- /dev/null +++ b/resources/scss/audit/_layout.scss @@ -0,0 +1,28 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +#audit-report-ui { + min-width: 1280px; +} diff --git a/resources/scss/bootstrap-cust/_buttons.scss b/resources/scss/bootstrap-cust/_buttons.scss new file mode 100644 index 0000000..52bcb2e --- /dev/null +++ b/resources/scss/bootstrap-cust/_buttons.scss @@ -0,0 +1,7 @@ +.btn-default .fa { + color: $brand-primary; +} + +.btn-info { + @include button-variant($text-black, $tlv-gray, $light-gray); +} diff --git a/resources/scss/bootstrap-cust/_close.scss b/resources/scss/bootstrap-cust/_close.scss new file mode 100644 index 0000000..38d7138 --- /dev/null +++ b/resources/scss/bootstrap-cust/_close.scss @@ -0,0 +1,7 @@ +// +// Close icons +// -------------------------------------------------- + +.close { + font-size: $heading-font-1; +} diff --git a/resources/scss/bootstrap-cust/_dropdowns.scss b/resources/scss/bootstrap-cust/_dropdowns.scss new file mode 100644 index 0000000..d6f8952 --- /dev/null +++ b/resources/scss/bootstrap-cust/_dropdowns.scss @@ -0,0 +1,16 @@ + +.caret { + right: 8px; + top: 12px; + position: absolute; +} + +.dropdown-menu { + padding: 0; + li a { + height: 30px; + } + .divider { + margin: 0; + } +} diff --git a/resources/scss/bootstrap-cust/_forms.scss b/resources/scss/bootstrap-cust/_forms.scss new file mode 100644 index 0000000..cb19964 --- /dev/null +++ b/resources/scss/bootstrap-cust/_forms.scss @@ -0,0 +1,84 @@ +.form-group { + .control-label { + @extend .body-2-medium; + } + &.required { + label:before { + content: "*"; + color: $red; + } + } +} +.form-control { + border-radius: 2px; + height: 30px; + @include box-shadow(none); + &:focus { + @include box-shadow(none); + } + &:hover { + border-color: $gray; + } +} + +label { + @extend .body-3; +} + +select.form-control { + display: block; + width: 215px; +} + +select[multiple] { + background: none; +} + +input[type="radio"], input[type="checkbox"] { + margin: 0; + + &:before { + content: ""; + display: inline-block; + width: 14px; + height: 14px; + margin-right: 10px; + position: absolute; + left: -1px; + bottom: -1px; + background-color: $white; + border: 1px solid $blue; + } +} + +.radio, .checkbox label { + font-weight: normal; + display: inline-block; + cursor: pointer; + margin-right: 15px; + font-size: 13px; +} + +.radio input:before { + border-radius: 8px; +} + +.checkbox input:before { + border-radius: 3px; +} + +input[type=radio]:checked:before { + content: "\2022"; + color: $blue; + font-size: 32px; + text-align: center; + line-height: 16px; +} + +input[type=checkbox]:checked:before { + content: "\2713"; + font-size: 12px; + color: $blue; + text-align: center; + line-height: 16px; +} diff --git a/resources/scss/bootstrap-cust/_list-group.scss b/resources/scss/bootstrap-cust/_list-group.scss new file mode 100644 index 0000000..b94f91b --- /dev/null +++ b/resources/scss/bootstrap-cust/_list-group.scss @@ -0,0 +1,5 @@ + +.list-group-item { + border: none; + border-top: 3px solid $list-group-border; +} diff --git a/resources/scss/bootstrap-cust/_mixins.scss b/resources/scss/bootstrap-cust/_mixins.scss new file mode 100644 index 0000000..774e662 --- /dev/null +++ b/resources/scss/bootstrap-cust/_mixins.scss @@ -0,0 +1,3 @@ + + +@import "mixins/buttons"; \ No newline at end of file diff --git a/resources/scss/bootstrap-cust/_modals.scss b/resources/scss/bootstrap-cust/_modals.scss new file mode 100644 index 0000000..6bc6e46 --- /dev/null +++ b/resources/scss/bootstrap-cust/_modals.scss @@ -0,0 +1,18 @@ +.modal-content { + .modal-header { + border-top: 3px solid $blue; + .modal-title { + @extend .heading-2; + } + } + + .modal-body{ + padding: 15px; + } + + .modal-footer { + padding: 15px; + border-top: 0; + background-color: $tlv-gray; + } +} diff --git a/resources/scss/bootstrap-cust/_navbar.scss b/resources/scss/bootstrap-cust/_navbar.scss new file mode 100644 index 0000000..acf2024 --- /dev/null +++ b/resources/scss/bootstrap-cust/_navbar.scss @@ -0,0 +1,3 @@ +.navbar { + border: none; +} diff --git a/resources/scss/bootstrap-cust/_navs.scss b/resources/scss/bootstrap-cust/_navs.scss new file mode 100644 index 0000000..7b9cff9 --- /dev/null +++ b/resources/scss/bootstrap-cust/_navs.scss @@ -0,0 +1,30 @@ +.nav { + > li { + > a { + padding: 10px 10px 3px; + } + } +} + +.nav-tabs { + @include box-shadow(0px 2px 1px -1px $gray); + padding: 0 28px; + + > li { + @extend .body-1; + + > a { + color: $dark-gray; + text-transform: uppercase; + } + + &.active > a { + &, + &:hover, + &:focus { + @extend .body-1-medium; + border-bottom: 3px solid $blue; + } + } + } +} diff --git a/resources/scss/bootstrap-cust/_panels.scss b/resources/scss/bootstrap-cust/_panels.scss new file mode 100644 index 0000000..9ee5622 --- /dev/null +++ b/resources/scss/bootstrap-cust/_panels.scss @@ -0,0 +1,3 @@ +.panel { + border: none; +} \ No newline at end of file diff --git a/resources/scss/bootstrap-cust/_tables.scss b/resources/scss/bootstrap-cust/_tables.scss new file mode 100644 index 0000000..dc2e0c2 --- /dev/null +++ b/resources/scss/bootstrap-cust/_tables.scss @@ -0,0 +1,40 @@ +.table { + // Cells + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border-top: none; + } + } + } + // Bottom align for column headings + > thead > tr > th { + border-bottom: none; + } + // Account for multiple tbody instances + > tbody + tbody { + border-top: none; + } +} + +.table-striped { + > tbody > tr:nth-of-type( odd ) { + background-color: $background-gray; + } +} + +.table-striped { + > tbody > tr:nth-of-type( even ) { + background-color: $gray; + } +} + +.table-hover { + > tbody > tr:hover { + background-color: $tlv-hover; + cursor: pointer; + } +} diff --git a/resources/scss/bootstrap-cust/_variables.scss b/resources/scss/bootstrap-cust/_variables.scss new file mode 100644 index 0000000..1623e72 --- /dev/null +++ b/resources/scss/bootstrap-cust/_variables.scss @@ -0,0 +1,126 @@ + +//== Colors +// +//## Gray and brand colors for use across Bootstrap. + +$gray-darker: $dark-gray; +$gray-dark: $dark-gray; +$gray: $gray; +$gray-light: $light-gray; +$gray-lighter: $light-gray; + +$brand-primary: $blue; +$brand-success: $green; +$brand-info: $light-gray; +$brand-warning: $yellow; +$brand-danger: $red; + + +//== Scaffolding +// +//## Settings for some of the most global styles. + +$body-bg: $white; +$text-color: $text-black; +$link-color: $link-blue; +$link-hover-color: $blue; + +//== Typography +// +//## Font, line-height, and color for body text, headings, and more. + +$font-size-base: $body-font-2; +$font-size-large: $body-font-1; +$font-size-small: $body-font-3; +$font-size-h1: $heading-font-1; +$font-size-h2: $heading-font-2; +$font-size-h3: $heading-font-3; +$font-size-h4: $heading-font-4; + + + +//== Components +// +//## Define common padding and border radius sizes and more. +$border-radius-base: 0; +$border-radius-large: 0; +$border-radius-small: 0; + + +//== Buttons +// +//## For each of Bootstrap's buttons, define text, background and border color. + +// $btn-font-weight: normal !default; +$btn-default-color: $text-color; +$btn-default-bg: $white; +$btn-default-border: $light-gray; + +$btn-success-color: $white; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius-base: 2px; +$btn-border-radius-large: 2px; +$btn-border-radius-small: 2px; + +//== Dropdowns +// +$dropdown-bg: $white; +$dropdown-border: $link-blue; +$dropdown-link-color: $text-black; +$dropdown-divider-bg: $gray; +//** Hover color for dropdown links. +$dropdown-link-hover-color: $black; +//** Hover background for dropdown links. +$dropdown-link-hover-bg: $tlv-hover; + +//** Active dropdown menu item text color. +$dropdown-link-active-color: $black; +//** Active dropdown menu item background color. +$dropdown-link-active-bg: $tlv-hover; + +//== Forms +// +//## +$form-group-margin-bottom: 24px; + + +$input-bg: $white; +$input-bg-disabled: $tlv-light-gray; +$input-color: $dark-gray; +$input-border: $light-gray; +$input-border-focus: $dark-blue; + +//== Modals +// +//## +$modal-content-bg: $white; +$modal-inner-padding: 0 15px; +$modal-title-padding: 30px 25px 10px 25px; + + +//== Close +// +//## +$close-color: $tlv-light-gray; + +//== Navs +// +//## +//=== Shared nav styles +$nav-link-hover-bg: transparent; + +$navbar-inverse-bg: $gray; + +//== Tabs +$nav-tabs-border-color: transparent; +$nav-tabs-link-hover-border-color: transparent; +$nav-tabs-active-link-hover-bg: transparent; +$nav-tabs-active-link-hover-color: $text-black; +$nav-tabs-active-link-hover-border-color: transparent; + + +//== Popovers +// +//## +$popover-bg: $background-gray; diff --git a/resources/scss/bootstrap.scss b/resources/scss/bootstrap.scss new file mode 100644 index 0000000..af016b0 --- /dev/null +++ b/resources/scss/bootstrap.scss @@ -0,0 +1,86 @@ +/* +* ============LICENSE_START======================================================= +* SPARKY (AAI UI service) +* ================================================================================ +* Copyright © 2017 AT&T Intellectual Property. +* Copyright © 2017 Amdocs +* All rights reserved. +* ================================================================================ +* Licensed 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. +* ============LICENSE_END========================================================= +* +* ECOMP and OpenECOMP are trademarks +* and service marks of AT&T Intellectual Property. +*/ + +// DOX CORE +@import "common/variables"; +@import "common/typography"; + +// Core variables and mixins +@import "bootstrap-cust/variables"; +@import "bootstrap/variables"; +@import "bootstrap/mixins"; +// Reset and dependencies +@import "bootstrap/normalize"; +//@import "bootstrap/print"; +//@import "bootstrap/glyphicons"; + +// Core CSS +@import "bootstrap/scaffolding"; +@import "bootstrap/type"; +@import "bootstrap/code"; +@import "bootstrap/grid"; +@import "bootstrap/tables"; +@import "bootstrap-cust/tables"; +@import "bootstrap/forms"; +@import "bootstrap-cust/forms"; +@import "bootstrap/buttons"; +@import "bootstrap-cust/buttons"; +// Components +@import "bootstrap/component-animations"; +@import "bootstrap/dropdowns"; +@import "bootstrap-cust/dropdowns"; +@import "bootstrap/button-groups"; +@import "bootstrap/input-groups"; +@import "bootstrap/navs"; +@import "bootstrap-cust/navs"; +@import "bootstrap/navbar"; +@import "bootstrap-cust/navbar"; +@import "bootstrap/breadcrumbs"; +@import "bootstrap/pagination"; +@import "bootstrap/pager"; +@import "bootstrap/labels"; +@import "bootstrap/badges"; +@import "bootstrap/jumbotron"; +// @import "bootstrap/thumbnails"; +@import "bootstrap/alerts"; +@import "bootstrap/progress-bars"; +@import "bootstrap/media"; +@import "bootstrap/list-group"; +@import "bootstrap-cust/list-group"; +@import "bootstrap/panels"; +@import "bootstrap-cust/panels"; +// @import "bootstrap/responsive-embed"; +//@import "bootstrap/wells"; +@import "bootstrap/close"; +@import "bootstrap-cust/close"; +// Components w/ JavaScript +@import "bootstrap/modals"; +@import "bootstrap-cust/modals"; +@import "bootstrap/tooltip"; +@import "bootstrap/popovers"; +// @import "bootstrap/carousel"; +// Utility classes +@import "bootstrap/utilities"; +@import "bootstrap/responsive-utilities"; diff --git a/resources/scss/bootstrap/_alerts.scss b/resources/scss/bootstrap/_alerts.scss new file mode 100644 index 0000000..206ec32 --- /dev/null +++ b/resources/scss/bootstrap/_alerts.scss @@ -0,0 +1,72 @@ +// +// Alerts +// -------------------------------------------------- + +// Base styles +// ------------------------- + +.alert { + padding: $alert-padding; + margin-bottom: $line-height-computed; + border: 1px solid transparent; + border-radius: $alert-border-radius; + + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing $headings-color + color: inherit; + } + + // Provide class for links that match alerts + .alert-link { + font-weight: $alert-link-font-weight; + } + + // Improve alignment and spacing of inner content + > p, + > ul { + margin-bottom: 0; + } + + > p + p { + margin-top: 5px; + } +} + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. +.alert-dismissible { + padding-right: ($alert-padding + 20); + + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} + +// Alternate styles +// +// Generate contextual modifier classes for colorizing the alert. + +.alert-success { + @include alert-variant($alert-success-bg, $alert-success-border, $alert-success-text); +} + +.alert-info { + @include alert-variant($alert-info-bg, $alert-info-border, $alert-info-text); +} + +.alert-warning { + @include alert-variant($alert-warning-bg, $alert-warning-border, $alert-warning-text); +} + +.alert-danger { + @include alert-variant($alert-danger-bg, $alert-danger-border, $alert-danger-text); +} diff --git a/resources/scss/bootstrap/_badges.scss b/resources/scss/bootstrap/_badges.scss new file mode 100644 index 0000000..ad595a9 --- /dev/null +++ b/resources/scss/bootstrap/_badges.scss @@ -0,0 +1,67 @@ +// +// Badges +// -------------------------------------------------- + +// Base class +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: $font-size-small; + font-weight: $badge-font-weight; + color: $badge-color; + line-height: $badge-line-height; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: $badge-bg; + border-radius: $badge-border-radius; + + // Empty badges collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for badges in buttons + .btn & { + position: relative; + top: -1px; + } + + .btn-xs &, + .btn-group-xs > .btn & { + top: 0; + padding: 1px 5px; + } + + // [converter] extracted a& to a.badge + + // Account for badges in navs + .list-group-item.active > &, + .nav-pills > .active > a > & { + color: $badge-active-color; + background-color: $badge-active-bg; + } + + .list-group-item > & { + float: right; + } + + .list-group-item > & + & { + margin-right: 5px; + } + + .nav-pills > li > a > & { + margin-left: 3px; + } +} + +// Hover state, but only for links +a.badge { + &:hover, + &:focus { + color: $badge-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} diff --git a/resources/scss/bootstrap/_breadcrumbs.scss b/resources/scss/bootstrap/_breadcrumbs.scss new file mode 100644 index 0000000..2041f0d --- /dev/null +++ b/resources/scss/bootstrap/_breadcrumbs.scss @@ -0,0 +1,25 @@ +// +// Breadcrumbs +// -------------------------------------------------- + +.breadcrumb { + padding: $breadcrumb-padding-vertical $breadcrumb-padding-horizontal; + margin-bottom: $line-height-computed; + list-style: none; + background-color: $breadcrumb-bg; + border-radius: $border-radius-base; + + > li { + display: inline-block; + + + li:before { + content: "#{$breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: $breadcrumb-color; + } + } + + > .active { + color: $breadcrumb-active-color; + } +} diff --git a/resources/scss/bootstrap/_button-groups.scss b/resources/scss/bootstrap/_button-groups.scss new file mode 100644 index 0000000..dc2906e --- /dev/null +++ b/resources/scss/bootstrap/_button-groups.scss @@ -0,0 +1,256 @@ +// +// Button groups +// -------------------------------------------------- + +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; // match .btn alignment given font-size hack above + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:focus, + &:active, + &.active { + z-index: 2; + } + } +} + +// Prevent double borders when buttons are next to each other +.btn-group { + .btn + .btn, + .btn + .btn-group, + .btn-group + .btn, + .btn-group + .btn-group { + margin-left: -1px; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + margin-left: -5px; // Offset the first child's margin + @include clearfix; + + .btn, + .btn-group, + .input-group { + float: left; + } + > .btn, + > .btn-group, + > .input-group { + margin-left: 5px; + } +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match +.btn-group > .btn:first-child { + margin-left: 0; + &:not(:last-child):not(.dropdown-toggle) { + @include border-right-radius(0); + } +} + +// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + @include border-left-radius(0); +} + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-right-radius(0); + } +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-left-radius(0); +} + +// On active and open, don't show outline +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-xs > .btn { + @extend .btn-xs; +} + +.btn-group-sm > .btn { + @extend .btn-sm; +} + +.btn-group-lg > .btn { + @extend .btn-lg; +} + +// Split button dropdowns +// ---------------------- + +// Give the line between buttons some depth +.btn-group > .btn + .dropdown-toggle { + padding-left: 8px; + padding-right: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-left: 12px; + padding-right: 12px; +} + +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125)); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + +// Reposition the caret +.btn .caret { + margin-left: 0; +} + +// Carets in other button sizes +.btn-lg .caret { + border-width: $caret-width-large $caret-width-large 0; + border-bottom-width: 0; +} + +// Upside down carets for .dropup +.dropup .btn-lg .caret { + border-width: 0 $caret-width-large $caret-width-large; +} + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + > .btn, + > .btn-group, + > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + } + + // Clear floats so dropdown menus can be properly placed + > .btn-group { + @include clearfix; + > .btn { + float: none; + } + } + + > .btn + .btn, + > .btn + .btn-group, + > .btn-group + .btn, + > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; + } +} + +.btn-group-vertical > .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child:not(:last-child) { + border-top-right-radius: $btn-border-radius-base; + @include border-bottom-radius(0); + } + &:last-child:not(:first-child) { + border-bottom-left-radius: $btn-border-radius-base; + @include border-top-radius(0); + } +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) { + > .btn:last-child, + > .dropdown-toggle { + @include border-bottom-radius(0); + } +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + @include border-top-radius(0); +} + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; + > .btn, + > .btn-group { + float: none; + display: table-cell; + width: 1%; + } + > .btn-group .btn { + width: 100%; + } + + > .btn-group .dropdown-menu { + left: auto; + } +} + +// Checkbox and radio options +// +// In order to support the browser's form validation feedback, powered by the +// `required` attribute, we have to "hide" the inputs via `clip`. We cannot use +// `display: none;` or `visibility: hidden;` as that also hides the popover. +// Simply visually hiding the inputs via `opacity` would leave them clickable in +// certain cases which is prevented by using `clip` and `pointer-events`. +// This way, we ensure a DOM element is visible to position the popover from. +// +// See https://github.com/twbs/bootstrap/pull/12794 and +// https://github.com/twbs/bootstrap/pull/14559 for more information. + +[data-toggle="buttons"] { + > .btn, + > .btn-group > .btn { + input[type="radio"], + input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; + } + } +} diff --git a/resources/scss/bootstrap/_buttons.scss b/resources/scss/bootstrap/_buttons.scss new file mode 100644 index 0000000..a9c3f34 --- /dev/null +++ b/resources/scss/bootstrap/_buttons.scss @@ -0,0 +1,170 @@ +// +// Buttons +// -------------------------------------------------- + +// Base styles +// -------------------------------------------------- + +.btn { + display: inline-block; + margin-bottom: 0; // For input.btn + font-weight: $btn-font-weight; + text-align: center; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid transparent; + white-space: nowrap; + @include button-size($padding-base-vertical, $padding-base-horizontal, $font-size-base, $line-height-base, $btn-border-radius-base); + @include user-select(none); + + &, + &:active, + &.active { + &:focus, + &.focus { + @include tab-focus; + } + } + + &:hover, + &:focus, + &.focus { + color: $btn-default-color; + text-decoration: none; + } + + &:active, + &.active { + outline: 0; + background-image: none; + @include box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125)); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + cursor: $cursor-disabled; + @include opacity(.65); + @include box-shadow(none); + } + + // [converter] extracted a& to a.btn +} + +a.btn { + &.disabled, + fieldset[disabled] & { + pointer-events: none; // Future-proof disabling of clicks on `` elements + } +} + +// Alternate buttons +// -------------------------------------------------- + +.btn-default { + @include button-variant($btn-default-color, $btn-default-bg, $btn-default-border); +} + +.btn-primary { + @include button-variant($btn-primary-color, $btn-primary-bg, $btn-primary-border); +} + +// Success appears as green +.btn-success { + @include button-variant($btn-success-color, $btn-success-bg, $btn-success-border); +} + +// Info appears as blue-green +.btn-info { + @include button-variant($btn-info-color, $btn-info-bg, $btn-info-border); +} + +// Warning appears as orange +.btn-warning { + @include button-variant($btn-warning-color, $btn-warning-bg, $btn-warning-border); +} + +// Danger and error appear as red +.btn-danger { + @include button-variant($btn-danger-color, $btn-danger-bg, $btn-danger-border); +} + +// Link buttons +// ------------------------- + +// Make a button look and behave like a link +.btn-link { + color: $link-color; + font-weight: normal; + border-radius: 0; + + &, + &:active, + &.active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + @include box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: $link-hover-color; + text-decoration: $link-hover-decoration; + background-color: transparent; + } + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: $btn-link-disabled-color; + text-decoration: none; + } + } +} + +// Button Sizes +// -------------------------------------------------- + +.btn-lg { + // line-height: ensure even-numbered height of button next to large input + @include button-size($padding-large-vertical, $padding-large-horizontal, $font-size-large, $line-height-large, $btn-border-radius-large); +} + +.btn-sm { + // line-height: ensure proper height of button next to small input + @include button-size($padding-small-vertical, $padding-small-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); +} + +.btn-xs { + @include button-size($padding-xs-vertical, $padding-xs-horizontal, $font-size-small, $line-height-small, $btn-border-radius-small); +} + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } +} diff --git a/resources/scss/bootstrap/_carousel.scss b/resources/scss/bootstrap/_carousel.scss new file mode 100644 index 0000000..5542ceb --- /dev/null +++ b/resources/scss/bootstrap/_carousel.scss @@ -0,0 +1,266 @@ +// +// Carousel +// -------------------------------------------------- + +// Wrapper for the slide container and indicators +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + overflow: hidden; + width: 100%; + + > .item { + display: none; + position: relative; + @include transition(.6s ease-in-out left); + + // Account for jankitude on images + > img, + > a > img { + @include img-responsive; + line-height: 1; + } + + // WebKit CSS3 transforms for supported devices + @media all and (transform-3d), (-webkit-transform-3d) { + @include transition-transform(0.6s ease-in-out); + @include backface-visibility(hidden); + @include perspective(1000px); + + &.next, + &.active.right { + @include translate3d(100%, 0, 0); + left: 0; + } + &.prev, + &.active.left { + @include translate3d(-100%, 0, 0); + left: 0; + } + &.next.left, + &.prev.right, + &.active { + @include translate3d(0, 0, 0); + left: 0; + } + } + } + + > .active, + > .next, + > .prev { + display: block; + } + + > .active { + left: 0; + } + + > .next, + > .prev { + position: absolute; + top: 0; + width: 100%; + } + + > .next { + left: 100%; + } + > .prev { + left: -100%; + } + > .next.left, + > .prev.right { + left: 0; + } + + > .active.left { + left: -100%; + } + > .active.right { + left: 100%; + } + +} + +// Left/right controls for nav +// --------------------------- + +.carousel-control { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: $carousel-control-width; + @include opacity($carousel-control-opacity); + font-size: $carousel-control-font-size; + color: $carousel-control-color; + text-align: center; + text-shadow: $carousel-text-shadow; + // We can't have this transition here because WebKit cancels the carousel + // animation if you trip this while in the middle of another animation. + + // Set gradients for backgrounds + &.left { + @include gradient-horizontal($start-color: rgba(0, 0, 0, .5), $end-color: rgba(0, 0, 0, .0001)); + } + &.right { + left: auto; + right: 0; + @include gradient-horizontal($start-color: rgba(0, 0, 0, .0001), $end-color: rgba(0, 0, 0, .5)); + } + + // Hover/focus state + &:hover, + &:focus { + outline: 0; + color: $carousel-control-color; + text-decoration: none; + @include opacity(.9); + } + + // Toggles + .icon-prev, + .icon-next, + .glyphicon-chevron-left, + .glyphicon-chevron-right { + position: absolute; + top: 50%; + margin-top: -10px; + z-index: 5; + display: inline-block; + } + .icon-prev, + .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; + } + .icon-next, + .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; + } + .icon-prev, + .icon-next { + width: 20px; + height: 20px; + line-height: 1; + font-family: serif; + } + + .icon-prev { + &:before { + content: '\2039'; // SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a'; // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } +} + +// Optional indicator pips +// +// Add an unordered list with the following class and add a list item for each +// slide your carousel holds. + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + margin-left: -30%; + padding-left: 0; + list-style: none; + text-align: center; + + li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + border: 1px solid $carousel-indicator-border-color; + border-radius: 10px; + cursor: pointer; + + // IE8-9 hack for event handling + // + // Internet Explorer 8-9 does not support clicks on elements without a set + // `background-color`. We cannot use `filter` since that's not viewed as a + // background color by the browser. Thus, a hack is needed. + // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer + // + // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we + // set alpha transparency for the best results possible. + background-color: #000 \9; // IE8 + background-color: rgba(0, 0, 0, 0); // IE9 + } + .active { + margin: 0; + width: 12px; + height: 12px; + background-color: $carousel-indicator-active-bg; + } +} + +// Optional captions +// ----------------------------- +// Hidden by default for smaller viewports +.carousel-caption { + position: absolute; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: $carousel-caption-color; + text-align: center; + text-shadow: $carousel-text-shadow; + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } +} + +// Scale up controls for tablets and up +@media screen and (min-width: $screen-sm-min) { + + // Scale up the controls a smidge + .carousel-control { + .glyphicon-chevron-left, + .glyphicon-chevron-right, + .icon-prev, + .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .glyphicon-chevron-left, + .icon-prev { + margin-left: -15px; + } + .glyphicon-chevron-right, + .icon-next { + margin-right: -15px; + } + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } +} diff --git a/resources/scss/bootstrap/_close.scss b/resources/scss/bootstrap/_close.scss new file mode 100644 index 0000000..d3ea6ab --- /dev/null +++ b/resources/scss/bootstrap/_close.scss @@ -0,0 +1,35 @@ +// +// Close icons +// -------------------------------------------------- + +.close { + float: right; + font-size: ($font-size-base * 1.5); + font-weight: $close-font-weight; + line-height: 1; + color: $close-color; + text-shadow: $close-text-shadow; + @include opacity(.2); + + &:hover, + &:focus { + color: $close-color; + text-decoration: none; + cursor: pointer; + @include opacity(.5); + } + + // [converter] extracted button& to button.close +} + +// Additional properties for button version +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} diff --git a/resources/scss/bootstrap/_code.scss b/resources/scss/bootstrap/_code.scss new file mode 100644 index 0000000..ab74c19 --- /dev/null +++ b/resources/scss/bootstrap/_code.scss @@ -0,0 +1,68 @@ +// +// Code (inline and block) +// -------------------------------------------------- + +// Inline and block code styles +code, +kbd, +pre, +samp { + font-family: $font-family-monospace; +} + +// Inline code +code { + padding: 2px 4px; + font-size: 90%; + color: $code-color; + background-color: $code-bg; + border-radius: $border-radius-base; +} + +// User input typically entered via keyboard +kbd { + padding: 2px 4px; + font-size: 90%; + color: $kbd-color; + background-color: $kbd-bg; + border-radius: $border-radius-small; + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + + kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + box-shadow: none; + } +} + +// Blocks of code +pre { + display: block; + padding: (($line-height-computed - 1) / 2); + margin: 0 0 ($line-height-computed / 2); + font-size: ($font-size-base - 1); // 14px to 13px + line-height: $line-height-base; + word-break: break-all; + word-wrap: break-word; + color: $pre-color; + background-color: $pre-bg; + border: 1px solid $pre-border-color; + border-radius: $border-radius-base; + + // Account for some code outputs that place code tags in pre tags + code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; + } +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: $pre-scrollable-max-height; + overflow-y: scroll; +} diff --git a/resources/scss/bootstrap/_component-animations.scss b/resources/scss/bootstrap/_component-animations.scss new file mode 100644 index 0000000..58befaa --- /dev/null +++ b/resources/scss/bootstrap/_component-animations.scss @@ -0,0 +1,43 @@ +// +// Component animations +// -------------------------------------------------- + +// Heads up! +// +// We don't use the `.opacity()` mixin here since it causes a bug with text +// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. + +.fade { + opacity: 0; + @include transition(opacity .15s linear); + &.in { + opacity: 1; + } +} + +.collapse { + display: none; + + &.in { + display: block; + } + // [converter] extracted tr&.in to tr.collapse.in + // [converter] extracted tbody&.in to tbody.collapse.in +} + +tr.collapse.in { + display: table-row; +} + +tbody.collapse.in { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + @include transition-property(height, visibility); + @include transition-duration(.35s); + @include transition-timing-function(ease); +} diff --git a/resources/scss/bootstrap/_dropdowns.scss b/resources/scss/bootstrap/_dropdowns.scss new file mode 100644 index 0000000..6fcfb9f --- /dev/null +++ b/resources/scss/bootstrap/_dropdowns.scss @@ -0,0 +1,217 @@ +// +// Dropdown menus +// -------------------------------------------------- + +// Dropdown arrow/caret +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: $caret-width-base dashed; + border-top: $caret-width-base solid \9; // IE8 + border-right: $caret-width-base solid transparent; + border-left: $caret-width-base solid transparent; +} + +// The dropdown wrapper (div) +.dropup, +.dropdown { + position: relative; +} + +// Prevent the focus on the dropdown toggle when closing dropdowns +.dropdown-toggle:focus { + outline: 0; +} + +// The dropdown menu (ul) +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: $zindex-dropdown; + display: none; // none by default, but block on "open" of the menu + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; // override default ul + list-style: none; + font-size: $font-size-base; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + background-color: $dropdown-bg; + border: 1px solid $dropdown-fallback-border; // IE8 fallback + border: 1px solid $dropdown-border; + border-radius: $border-radius-base; + @include box-shadow(0 6px 12px rgba(0, 0, 0, .175)); + background-clip: padding-box; + + // Aligns the dropdown menu to right + // + // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` + &.pull-right { + right: 0; + left: auto; + } + + // Dividers (basically an hr) within the dropdown + .divider { + @include nav-divider($dropdown-divider-bg); + } + + // Links within the dropdown menu + > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: $line-height-base; + color: $dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines + } +} + +// Hover/Focus state +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: $dropdown-link-hover-color; + background-color: $dropdown-link-hover-bg; + } +} + +// Active state +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: $dropdown-link-active-color; + text-decoration: none; + outline: 0; + background-color: $dropdown-link-active-bg; + } +} + +// Disabled state +// +// Gray out text and ensure the hover/focus state remains gray + +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: $dropdown-link-disabled-color; + } + + // Nuke hover/focus effects + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + @include reset-filter; + cursor: $cursor-disabled; + } +} + +// Open state for the dropdown +.open { + // Show the menu + > .dropdown-menu { + display: block; + } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + +// Menu positioning +// +// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown +// menu with the parent. +.dropdown-menu-right { + left: auto; // Reset the default from `.dropdown-menu` + right: 0; +} + +// With v3, we enabled auto-flipping if you have a dropdown within a right +// aligned nav component. To enable the undoing of that, we provide an override +// to restore the default dropdown menu alignment. +// +// This is only for left-aligning a dropdown menu within a `.navbar-right` or +// `.pull-right` nav component. +.dropdown-menu-left { + left: 0; + right: auto; +} + +// Dropdown section headers +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: $font-size-small; + line-height: $line-height-base; + color: $dropdown-header-color; + white-space: nowrap; // as with > li > a +} + +// Backdrop to catch body clicks on mobile, etc. +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: ($zindex-dropdown - 10); +} + +// Right aligned dropdowns +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// +// Just add .dropup after the standard .dropdown class and you're set, bro. +// TODO: abstract this so that the navbar fixed styles are not placed here? + +.dropup, +.navbar-fixed-bottom .dropdown { + // Reverse the caret + .caret { + border-top: 0; + border-bottom: $caret-width-base dashed; + border-bottom: $caret-width-base solid \9; // IE8 + content: ""; + } + // Different positioning for bottom up menu + .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; + } +} + +// Component alignment +// +// Reiterate per navbar.less and the modified component alignment there. + +@media (min-width: $grid-float-breakpoint) { + .navbar-right { + .dropdown-menu { + right: 0; + left: auto; + } + // Necessary for overrides of the default right aligned menu. + // Will remove come v4 in all likelihood. + .dropdown-menu-left { + left: 0; + right: auto; + } + } +} diff --git a/resources/scss/bootstrap/_forms.scss b/resources/scss/bootstrap/_forms.scss new file mode 100644 index 0000000..042d4ec --- /dev/null +++ b/resources/scss/bootstrap/_forms.scss @@ -0,0 +1,607 @@ +// +// Forms +// -------------------------------------------------- + +// Normalize non-controls +// +// Restyle and baseline non-control form elements. + +fieldset { + padding: 0; + margin: 0; + border: 0; + // Chrome and Firefox set a `min-width: min-content;` on fieldsets, + // so we reset that to ensure it behaves more like a standard block element. + // See https://github.com/twbs/bootstrap/issues/12359. + min-width: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: $line-height-computed; + font-size: ($font-size-base * 1.5); + line-height: inherit; + color: $legend-color; + border: 0; + border-bottom: 1px solid $legend-border-color; +} + +label { + display: inline-block; + max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141) + margin-bottom: 5px; + font-weight: bold; +} + +// Normalize form controls +// +// While most of our form styles require extra classes, some basic normalization +// is required to ensure optimum display with or without those classes to better +// address browser inconsistencies. + +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + @include box-sizing(border-box); +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; // IE8-9 + line-height: normal; +} + +input[type="file"] { + display: block; +} + +// Make range inputs behave like textual form controls +input[type="range"] { + display: block; + width: 100%; +} + +// Make multiple select elements height not fixed +select[multiple], +select[size] { + height: auto; +} + +// Focus for file, radio, and checkbox +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + @include tab-focus; +} + +// Adjust output element +output { + display: block; + padding-top: ($padding-base-vertical + 1); + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; +} + +// Common form controls +// +// Shared size and type resets for form controls. Apply `.form-control` to any +// of the following form controls: +// +// select +// textarea +// input[type="text"] +// input[type="password"] +// input[type="datetime"] +// input[type="datetime-local"] +// input[type="date"] +// input[type="month"] +// input[type="time"] +// input[type="week"] +// input[type="number"] +// input[type="email"] +// input[type="url"] +// input[type="search"] +// input[type="tel"] +// input[type="color"] + +.form-control { + display: block; + width: 100%; + height: $input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + line-height: $line-height-base; + color: $input-color; + background-color: $input-bg; + background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 + border: 1px solid $input-border; + border-radius: $input-border-radius; // Note: This has no effect on s in CSS. + @include box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075)); + @include transition(border-color ease-in-out .15s, box-shadow ease-in-out .15s); + + // Customize the `:focus` state to imitate native WebKit styles. + @include form-control-focus; + + // Placeholder + @include placeholder; + + // Disabled and read-only inputs + // + // HTML5 says that controls under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, we + // don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + background-color: $input-bg-disabled; + opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655 + } + + &[disabled], + fieldset[disabled] & { + cursor: $cursor-disabled; + } + + // [converter] extracted textarea& to textarea.form-control +} + +// Reset height for `textarea`s +textarea.form-control { + height: auto; +} + +// Search inputs in iOS +// +// This overrides the extra rounded corners on search inputs in iOS so that our +// `.form-control` class can properly style them. Note that this cannot simply +// be added to `.form-control` as it's not specific enough. For details, see +// https://github.com/twbs/bootstrap/issues/11586. + +input[type="search"] { + -webkit-appearance: none; +} + +// Special styles for iOS temporal inputs +// +// In Mobile Safari, setting `display: block` on temporal inputs causes the +// text within the input to become vertically misaligned. As a workaround, we +// set a pixel line-height that matches the given height of the input, but only +// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848 +// +// Note that as of 8.3, iOS doesn't support `datetime` or `week`. + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + &.form-control { + line-height: $input-height-base; + } + + &.input-sm, + .input-group-sm & { + line-height: $input-height-small; + } + + &.input-lg, + .input-group-lg & { + line-height: $input-height-large; + } + } +} + +// Form groups +// +// Designed to help with the organization and spacing of vertical forms. For +// horizontal forms, use the predefined grid classes. + +.form-group { + margin-bottom: $form-group-margin-bottom; +} + +// Checkboxes and radios +// +// Indent the labels to position radios/checkboxes as hanging controls. + +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; + + label { + min-height: $line-height-computed; // Ensure the input doesn't jump when there is no text + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-left: -20px; + margin-top: 4px \9; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing +} + +// Radios and checkboxes on same line +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + vertical-align: middle; + font-weight: normal; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; // space out consecutive inline controls +} + +// Apply same disabled cursor tweak as for inputs +// Some special care is needed because Star + +@at-root { + // Import the fonts + @font-face { + font-family: 'Glyphicons Halflings'; + src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot'), '#{$icon-font-path}#{$icon-font-name}.eot')); + src: url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.eot?#iefix'), '#{$icon-font-path}#{$icon-font-name}.eot?#iefix')) format('embedded-opentype'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff2'), '#{$icon-font-path}#{$icon-font-name}.woff2')) format('woff2'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.woff'), '#{$icon-font-path}#{$icon-font-name}.woff')) format('woff'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.ttf'), '#{$icon-font-path}#{$icon-font-name}.ttf')) format('truetype'), + url(if($bootstrap-sass-asset-helper, twbs-font-path('#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}'), '#{$icon-font-path}#{$icon-font-name}.svg##{$icon-font-svg-id}')) format('svg'); + } +} + +// Catchall baseclass +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// Individual icons +.glyphicon-asterisk { + &:before { + content: "\2a"; + } +} + +.glyphicon-plus { + &:before { + content: "\2b"; + } +} + +.glyphicon-euro, +.glyphicon-eur { + &:before { + content: "\20ac"; + } +} + +.glyphicon-minus { + &:before { + content: "\2212"; + } +} + +.glyphicon-cloud { + &:before { + content: "\2601"; + } +} + +.glyphicon-envelope { + &:before { + content: "\2709"; + } +} + +.glyphicon-pencil { + &:before { + content: "\270f"; + } +} + +.glyphicon-glass { + &:before { + content: "\e001"; + } +} + +.glyphicon-music { + &:before { + content: "\e002"; + } +} + +.glyphicon-search { + &:before { + content: "\e003"; + } +} + +.glyphicon-heart { + &:before { + content: "\e005"; + } +} + +.glyphicon-star { + &:before { + content: "\e006"; + } +} + +.glyphicon-star-empty { + &:before { + content: "\e007"; + } +} + +.glyphicon-user { + &:before { + content: "\e008"; + } +} + +.glyphicon-film { + &:before { + content: "\e009"; + } +} + +.glyphicon-th-large { + &:before { + content: "\e010"; + } +} + +.glyphicon-th { + &:before { + content: "\e011"; + } +} + +.glyphicon-th-list { + &:before { + content: "\e012"; + } +} + +.glyphicon-ok { + &:before { + content: "\e013"; + } +} + +.glyphicon-remove { + &:before { + content: "\e014"; + } +} + +.glyphicon-zoom-in { + &:before { + content: "\e015"; + } +} + +.glyphicon-zoom-out { + &:before { + content: "\e016"; + } +} + +.glyphicon-off { + &:before { + content: "\e017"; + } +} + +.glyphicon-signal { + &:before { + content: "\e018"; + } +} + +.glyphicon-cog { + &:before { + content: "\e019"; + } +} + +.glyphicon-trash { + &:before { + content: "\e020"; + } +} + +.glyphicon-home { + &:before { + content: "\e021"; + } +} + +.glyphicon-file { + &:before { + content: "\e022"; + } +} + +.glyphicon-time { + &:before { + content: "\e023"; + } +} + +.glyphicon-road { + &:before { + content: "\e024"; + } +} + +.glyphicon-download-alt { + &:before { + content: "\e025"; + } +} + +.glyphicon-download { + &:before { + content: "\e026"; + } +} + +.glyphicon-upload { + &:before { + content: "\e027"; + } +} + +.glyphicon-inbox { + &:before { + content: "\e028"; + } +} + +.glyphicon-play-circle { + &:before { + content: "\e029"; + } +} + +.glyphicon-repeat { + &:before { + content: "\e030"; + } +} + +.glyphicon-refresh { + &:before { + content: "\e031"; + } +} + +.glyphicon-list-alt { + &:before { + content: "\e032"; + } +} + +.glyphicon-lock { + &:before { + content: "\e033"; + } +} + +.glyphicon-flag { + &:before { + content: "\e034"; + } +} + +.glyphicon-headphones { + &:before { + content: "\e035"; + } +} + +.glyphicon-volume-off { + &:before { + content: "\e036"; + } +} + +.glyphicon-volume-down { + &:before { + content: "\e037"; + } +} + +.glyphicon-volume-up { + &:before { + content: "\e038"; + } +} + +.glyphicon-qrcode { + &:before { + content: "\e039"; + } +} + +.glyphicon-barcode { + &:before { + content: "\e040"; + } +} + +.glyphicon-tag { + &:before { + content: "\e041"; + } +} + +.glyphicon-tags { + &:before { + content: "\e042"; + } +} + +.glyphicon-book { + &:before { + content: "\e043"; + } +} + +.glyphicon-bookmark { + &:before { + content: "\e044"; + } +} + +.glyphicon-print { + &:before { + content: "\e045"; + } +} + +.glyphicon-camera { + &:before { + content: "\e046"; + } +} + +.glyphicon-font { + &:before { + content: "\e047"; + } +} + +.glyphicon-bold { + &:before { + content: "\e048"; + } +} + +.glyphicon-italic { + &:before { + content: "\e049"; + } +} + +.glyphicon-text-height { + &:before { + content: "\e050"; + } +} + +.glyphicon-text-width { + &:before { + content: "\e051"; + } +} + +.glyphicon-align-left { + &:before { + content: "\e052"; + } +} + +.glyphicon-align-center { + &:before { + content: "\e053"; + } +} + +.glyphicon-align-right { + &:before { + content: "\e054"; + } +} + +.glyphicon-align-justify { + &:before { + content: "\e055"; + } +} + +.glyphicon-list { + &:before { + content: "\e056"; + } +} + +.glyphicon-indent-left { + &:before { + content: "\e057"; + } +} + +.glyphicon-indent-right { + &:before { + content: "\e058"; + } +} + +.glyphicon-facetime-video { + &:before { + content: "\e059"; + } +} + +.glyphicon-picture { + &:before { + content: "\e060"; + } +} + +.glyphicon-map-marker { + &:before { + content: "\e062"; + } +} + +.glyphicon-adjust { + &:before { + content: "\e063"; + } +} + +.glyphicon-tint { + &:before { + content: "\e064"; + } +} + +.glyphicon-edit { + &:before { + content: "\e065"; + } +} + +.glyphicon-share { + &:before { + content: "\e066"; + } +} + +.glyphicon-check { + &:before { + content: "\e067"; + } +} + +.glyphicon-move { + &:before { + content: "\e068"; + } +} + +.glyphicon-step-backward { + &:before { + content: "\e069"; + } +} + +.glyphicon-fast-backward { + &:before { + content: "\e070"; + } +} + +.glyphicon-backward { + &:before { + content: "\e071"; + } +} + +.glyphicon-play { + &:before { + content: "\e072"; + } +} + +.glyphicon-pause { + &:before { + content: "\e073"; + } +} + +.glyphicon-stop { + &:before { + content: "\e074"; + } +} + +.glyphicon-forward { + &:before { + content: "\e075"; + } +} + +.glyphicon-fast-forward { + &:before { + content: "\e076"; + } +} + +.glyphicon-step-forward { + &:before { + content: "\e077"; + } +} + +.glyphicon-eject { + &:before { + content: "\e078"; + } +} + +.glyphicon-chevron-left { + &:before { + content: "\e079"; + } +} + +.glyphicon-chevron-right { + &:before { + content: "\e080"; + } +} + +.glyphicon-plus-sign { + &:before { + content: "\e081"; + } +} + +.glyphicon-minus-sign { + &:before { + content: "\e082"; + } +} + +.glyphicon-remove-sign { + &:before { + content: "\e083"; + } +} + +.glyphicon-ok-sign { + &:before { + content: "\e084"; + } +} + +.glyphicon-question-sign { + &:before { + content: "\e085"; + } +} + +.glyphicon-info-sign { + &:before { + content: "\e086"; + } +} + +.glyphicon-screenshot { + &:before { + content: "\e087"; + } +} + +.glyphicon-remove-circle { + &:before { + content: "\e088"; + } +} + +.glyphicon-ok-circle { + &:before { + content: "\e089"; + } +} + +.glyphicon-ban-circle { + &:before { + content: "\e090"; + } +} + +.glyphicon-arrow-left { + &:before { + content: "\e091"; + } +} + +.glyphicon-arrow-right { + &:before { + content: "\e092"; + } +} + +.glyphicon-arrow-up { + &:before { + content: "\e093"; + } +} + +.glyphicon-arrow-down { + &:before { + content: "\e094"; + } +} + +.glyphicon-share-alt { + &:before { + content: "\e095"; + } +} + +.glyphicon-resize-full { + &:before { + content: "\e096"; + } +} + +.glyphicon-resize-small { + &:before { + content: "\e097"; + } +} + +.glyphicon-exclamation-sign { + &:before { + content: "\e101"; + } +} + +.glyphicon-gift { + &:before { + content: "\e102"; + } +} + +.glyphicon-leaf { + &:before { + content: "\e103"; + } +} + +.glyphicon-fire { + &:before { + content: "\e104"; + } +} + +.glyphicon-eye-open { + &:before { + content: "\e105"; + } +} + +.glyphicon-eye-close { + &:before { + content: "\e106"; + } +} + +.glyphicon-warning-sign { + &:before { + content: "\e107"; + } +} + +.glyphicon-plane { + &:before { + content: "\e108"; + } +} + +.glyphicon-calendar { + &:before { + content: "\e109"; + } +} + +.glyphicon-random { + &:before { + content: "\e110"; + } +} + +.glyphicon-comment { + &:before { + content: "\e111"; + } +} + +.glyphicon-magnet { + &:before { + content: "\e112"; + } +} + +.glyphicon-chevron-up { + &:before { + content: "\e113"; + } +} + +.glyphicon-chevron-down { + &:before { + content: "\e114"; + } +} + +.glyphicon-retweet { + &:before { + content: "\e115"; + } +} + +.glyphicon-shopping-cart { + &:before { + content: "\e116"; + } +} + +.glyphicon-folder-close { + &:before { + content: "\e117"; + } +} + +.glyphicon-folder-open { + &:before { + content: "\e118"; + } +} + +.glyphicon-resize-vertical { + &:before { + content: "\e119"; + } +} + +.glyphicon-resize-horizontal { + &:before { + content: "\e120"; + } +} + +.glyphicon-hdd { + &:before { + content: "\e121"; + } +} + +.glyphicon-bullhorn { + &:before { + content: "\e122"; + } +} + +.glyphicon-bell { + &:before { + content: "\e123"; + } +} + +.glyphicon-certificate { + &:before { + content: "\e124"; + } +} + +.glyphicon-thumbs-up { + &:before { + content: "\e125"; + } +} + +.glyphicon-thumbs-down { + &:before { + content: "\e126"; + } +} + +.glyphicon-hand-right { + &:before { + content: "\e127"; + } +} + +.glyphicon-hand-left { + &:before { + content: "\e128"; + } +} + +.glyphicon-hand-up { + &:before { + content: "\e129"; + } +} + +.glyphicon-hand-down { + &:before { + content: "\e130"; + } +} + +.glyphicon-circle-arrow-right { + &:before { + content: "\e131"; + } +} + +.glyphicon-circle-arrow-left { + &:before { + content: "\e132"; + } +} + +.glyphicon-circle-arrow-up { + &:before { + content: "\e133"; + } +} + +.glyphicon-circle-arrow-down { + &:before { + content: "\e134"; + } +} + +.glyphicon-globe { + &:before { + content: "\e135"; + } +} + +.glyphicon-wrench { + &:before { + content: "\e136"; + } +} + +.glyphicon-tasks { + &:before { + content: "\e137"; + } +} + +.glyphicon-filter { + &:before { + content: "\e138"; + } +} + +.glyphicon-briefcase { + &:before { + content: "\e139"; + } +} + +.glyphicon-fullscreen { + &:before { + content: "\e140"; + } +} + +.glyphicon-dashboard { + &:before { + content: "\e141"; + } +} + +.glyphicon-paperclip { + &:before { + content: "\e142"; + } +} + +.glyphicon-heart-empty { + &:before { + content: "\e143"; + } +} + +.glyphicon-link { + &:before { + content: "\e144"; + } +} + +.glyphicon-phone { + &:before { + content: "\e145"; + } +} + +.glyphicon-pushpin { + &:before { + content: "\e146"; + } +} + +.glyphicon-usd { + &:before { + content: "\e148"; + } +} + +.glyphicon-gbp { + &:before { + content: "\e149"; + } +} + +.glyphicon-sort { + &:before { + content: "\e150"; + } +} + +.glyphicon-sort-by-alphabet { + &:before { + content: "\e151"; + } +} + +.glyphicon-sort-by-alphabet-alt { + &:before { + content: "\e152"; + } +} + +.glyphicon-sort-by-order { + &:before { + content: "\e153"; + } +} + +.glyphicon-sort-by-order-alt { + &:before { + content: "\e154"; + } +} + +.glyphicon-sort-by-attributes { + &:before { + content: "\e155"; + } +} + +.glyphicon-sort-by-attributes-alt { + &:before { + content: "\e156"; + } +} + +.glyphicon-unchecked { + &:before { + content: "\e157"; + } +} + +.glyphicon-expand { + &:before { + content: "\e158"; + } +} + +.glyphicon-collapse-down { + &:before { + content: "\e159"; + } +} + +.glyphicon-collapse-up { + &:before { + content: "\e160"; + } +} + +.glyphicon-log-in { + &:before { + content: "\e161"; + } +} + +.glyphicon-flash { + &:before { + content: "\e162"; + } +} + +.glyphicon-log-out { + &:before { + content: "\e163"; + } +} + +.glyphicon-new-window { + &:before { + content: "\e164"; + } +} + +.glyphicon-record { + &:before { + content: "\e165"; + } +} + +.glyphicon-save { + &:before { + content: "\e166"; + } +} + +.glyphicon-open { + &:before { + content: "\e167"; + } +} + +.glyphicon-saved { + &:before { + content: "\e168"; + } +} + +.glyphicon-import { + &:before { + content: "\e169"; + } +} + +.glyphicon-export { + &:before { + content: "\e170"; + } +} + +.glyphicon-send { + &:before { + content: "\e171"; + } +} + +.glyphicon-floppy-disk { + &:before { + content: "\e172"; + } +} + +.glyphicon-floppy-saved { + &:before { + content: "\e173"; + } +} + +.glyphicon-floppy-remove { + &:before { + content: "\e174"; + } +} + +.glyphicon-floppy-save { + &:before { + content: "\e175"; + } +} + +.glyphicon-floppy-open { + &:before { + content: "\e176"; + } +} + +.glyphicon-credit-card { + &:before { + content: "\e177"; + } +} + +.glyphicon-transfer { + &:before { + content: "\e178"; + } +} + +.glyphicon-cutlery { + &:before { + content: "\e179"; + } +} + +.glyphicon-header { + &:before { + content: "\e180"; + } +} + +.glyphicon-compressed { + &:before { + content: "\e181"; + } +} + +.glyphicon-earphone { + &:before { + content: "\e182"; + } +} + +.glyphicon-phone-alt { + &:before { + content: "\e183"; + } +} + +.glyphicon-tower { + &:before { + content: "\e184"; + } +} + +.glyphicon-stats { + &:before { + content: "\e185"; + } +} + +.glyphicon-sd-video { + &:before { + content: "\e186"; + } +} + +.glyphicon-hd-video { + &:before { + content: "\e187"; + } +} + +.glyphicon-subtitles { + &:before { + content: "\e188"; + } +} + +.glyphicon-sound-stereo { + &:before { + content: "\e189"; + } +} + +.glyphicon-sound-dolby { + &:before { + content: "\e190"; + } +} + +.glyphicon-sound-5-1 { + &:before { + content: "\e191"; + } +} + +.glyphicon-sound-6-1 { + &:before { + content: "\e192"; + } +} + +.glyphicon-sound-7-1 { + &:before { + content: "\e193"; + } +} + +.glyphicon-copyright-mark { + &:before { + content: "\e194"; + } +} + +.glyphicon-registration-mark { + &:before { + content: "\e195"; + } +} + +.glyphicon-cloud-download { + &:before { + content: "\e197"; + } +} + +.glyphicon-cloud-upload { + &:before { + content: "\e198"; + } +} + +.glyphicon-tree-conifer { + &:before { + content: "\e199"; + } +} + +.glyphicon-tree-deciduous { + &:before { + content: "\e200"; + } +} + +.glyphicon-cd { + &:before { + content: "\e201"; + } +} + +.glyphicon-save-file { + &:before { + content: "\e202"; + } +} + +.glyphicon-open-file { + &:before { + content: "\e203"; + } +} + +.glyphicon-level-up { + &:before { + content: "\e204"; + } +} + +.glyphicon-copy { + &:before { + content: "\e205"; + } +} + +.glyphicon-paste { + &:before { + content: "\e206"; + } +} + +// The following 2 Glyphicons are omitted for the time being because +// they currently use Unicode codepoints that are outside the +// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle +// non-BMP codepoints in CSS string escapes, and thus can't display these two icons. +// Notably, the bug affects some older versions of the Android Browser. +// More info: https://github.com/twbs/bootstrap/issues/10106 +// .glyphicon-door { &:before { content: "\1f6aa"; } } +// .glyphicon-key { &:before { content: "\1f511"; } } +.glyphicon-alert { + &:before { + content: "\e209"; + } +} + +.glyphicon-equalizer { + &:before { + content: "\e210"; + } +} + +.glyphicon-king { + &:before { + content: "\e211"; + } +} + +.glyphicon-queen { + &:before { + content: "\e212"; + } +} + +.glyphicon-pawn { + &:before { + content: "\e213"; + } +} + +.glyphicon-bishop { + &:before { + content: "\e214"; + } +} + +.glyphicon-knight { + &:before { + content: "\e215"; + } +} + +.glyphicon-baby-formula { + &:before { + content: "\e216"; + } +} + +.glyphicon-tent { + &:before { + content: "\26fa"; + } +} + +.glyphicon-blackboard { + &:before { + content: "\e218"; + } +} + +.glyphicon-bed { + &:before { + content: "\e219"; + } +} + +.glyphicon-apple { + &:before { + content: "\f8ff"; + } +} + +.glyphicon-erase { + &:before { + content: "\e221"; + } +} + +.glyphicon-hourglass { + &:before { + content: "\231b"; + } +} + +.glyphicon-lamp { + &:before { + content: "\e223"; + } +} + +.glyphicon-duplicate { + &:before { + content: "\e224"; + } +} + +.glyphicon-piggy-bank { + &:before { + content: "\e225"; + } +} + +.glyphicon-scissors { + &:before { + content: "\e226"; + } +} + +.glyphicon-bitcoin { + &:before { + content: "\e227"; + } +} + +.glyphicon-btc { + &:before { + content: "\e227"; + } +} + +.glyphicon-xbt { + &:before { + content: "\e227"; + } +} + +.glyphicon-yen { + &:before { + content: "\00a5"; + } +} + +.glyphicon-jpy { + &:before { + content: "\00a5"; + } +} + +.glyphicon-ruble { + &:before { + content: "\20bd"; + } +} + +.glyphicon-rub { + &:before { + content: "\20bd"; + } +} + +.glyphicon-scale { + &:before { + content: "\e230"; + } +} + +.glyphicon-ice-lolly { + &:before { + content: "\e231"; + } +} + +.glyphicon-ice-lolly-tasted { + &:before { + content: "\e232"; + } +} + +.glyphicon-education { + &:before { + content: "\e233"; + } +} + +.glyphicon-option-horizontal { + &:before { + content: "\e234"; + } +} + +.glyphicon-option-vertical { + &:before { + content: "\e235"; + } +} + +.glyphicon-menu-hamburger { + &:before { + content: "\e236"; + } +} + +.glyphicon-modal-window { + &:before { + content: "\e237"; + } +} + +.glyphicon-oil { + &:before { + content: "\e238"; + } +} + +.glyphicon-grain { + &:before { + content: "\e239"; + } +} + +.glyphicon-sunglasses { + &:before { + content: "\e240"; + } +} + +.glyphicon-text-size { + &:before { + content: "\e241"; + } +} + +.glyphicon-text-color { + &:before { + content: "\e242"; + } +} + +.glyphicon-text-background { + &:before { + content: "\e243"; + } +} + +.glyphicon-object-align-top { + &:before { + content: "\e244"; + } +} + +.glyphicon-object-align-bottom { + &:before { + content: "\e245"; + } +} + +.glyphicon-object-align-horizontal { + &:before { + content: "\e246"; + } +} + +.glyphicon-object-align-left { + &:before { + content: "\e247"; + } +} + +.glyphicon-object-align-vertical { + &:before { + content: "\e248"; + } +} + +.glyphicon-object-align-right { + &:before { + content: "\e249"; + } +} + +.glyphicon-triangle-right { + &:before { + content: "\e250"; + } +} + +.glyphicon-triangle-left { + &:before { + content: "\e251"; + } +} + +.glyphicon-triangle-bottom { + &:before { + content: "\e252"; + } +} + +.glyphicon-triangle-top { + &:before { + content: "\e253"; + } +} + +.glyphicon-console { + &:before { + content: "\e254"; + } +} + +.glyphicon-superscript { + &:before { + content: "\e255"; + } +} + +.glyphicon-subscript { + &:before { + content: "\e256"; + } +} + +.glyphicon-menu-left { + &:before { + content: "\e257"; + } +} + +.glyphicon-menu-right { + &:before { + content: "\e258"; + } +} + +.glyphicon-menu-down { + &:before { + content: "\e259"; + } +} + +.glyphicon-menu-up { + &:before { + content: "\e260"; + } +} diff --git a/resources/scss/bootstrap/_grid.scss b/resources/scss/bootstrap/_grid.scss new file mode 100644 index 0000000..75f3822 --- /dev/null +++ b/resources/scss/bootstrap/_grid.scss @@ -0,0 +1,76 @@ +// +// Grid system +// -------------------------------------------------- + +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +.container { + @include container-fixed; + + @media (min-width: $screen-sm-min) { + width: $container-sm; + } + @media (min-width: $screen-md-min) { + width: $container-md; + } + @media (min-width: $screen-lg-min) { + width: $container-lg; + } +} + +// Fluid container +// +// Utilizes the mixin meant for fixed width containers, but without any defined +// width for fluid, full width layouts. + +.container-fluid { + @include container-fixed; +} + +// Row +// +// Rows contain and clear the floats of your columns. + +.row { + @include make-row; +} + +// Columns +// +// Common styles for small and large grid columns + +@include make-grid-columns; + +// Extra small grid +// +// Columns, offsets, pushes, and pulls for extra small devices like +// smartphones. + +@include make-grid(xs); + +// Small grid +// +// Columns, offsets, pushes, and pulls for the small device range, from phones +// to tablets. + +@media (min-width: $screen-sm-min) { + @include make-grid(sm); +} + +// Medium grid +// +// Columns, offsets, pushes, and pulls for the desktop device range. + +@media (min-width: $screen-md-min) { + @include make-grid(md); +} + +// Large grid +// +// Columns, offsets, pushes, and pulls for the large desktop device range. + +@media (min-width: $screen-lg-min) { + @include make-grid(lg); +} diff --git a/resources/scss/bootstrap/_input-groups.scss b/resources/scss/bootstrap/_input-groups.scss new file mode 100644 index 0000000..4a160e0 --- /dev/null +++ b/resources/scss/bootstrap/_input-groups.scss @@ -0,0 +1,171 @@ +// +// Input groups +// -------------------------------------------------- + +// Base styles +// ------------------------- +.input-group { + position: relative; // For dropdowns + display: table; + border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table + + // Undo padding and float of grid classes + &[class*="col-"] { + float: none; + padding-left: 0; + padding-right: 0; + } + + .form-control { + // Ensure that the input is always above the *appended* addon button for + // proper border colors. + position: relative; + z-index: 2; + + // IE9 fubars the placeholder attribute in text inputs and the arrows on + // select elements in input groups. To fix it, we float the input. Details: + // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855 + float: left; + + width: 100%; + margin-bottom: 0; + } +} + +// Sizing options +// +// Remix the default form control sizing classes into new ones for easier +// manipulation. + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + @extend .input-lg; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + @extend .input-sm; +} + +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; + + &:not(:first-child):not(:last-child) { + border-radius: 0; + } +} + +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; // Match the inputs +} + +// Text input groups +// ------------------------- +.input-group-addon { + padding: $padding-base-vertical $padding-base-horizontal; + font-size: $font-size-base; + font-weight: normal; + line-height: 1; + color: $input-color; + text-align: center; + background-color: $input-group-addon-bg; + border: 1px solid $input-group-addon-border-color; + border-radius: $border-radius-base; + + // Sizing + &.input-sm { + padding: $padding-small-vertical $padding-small-horizontal; + font-size: $font-size-small; + border-radius: $border-radius-small; + } + &.input-lg { + padding: $padding-large-vertical $padding-large-horizontal; + font-size: $font-size-large; + border-radius: $border-radius-large; + } + + // Nuke default margins from checkboxes and radios to vertically center within. + input[type="radio"], + input[type="checkbox"] { + margin-top: 0; + } +} + +// Reset rounded corners +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + @include border-right-radius(0); +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + @include border-left-radius(0); +} + +.input-group-addon:last-child { + border-left: 0; +} + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + // Jankily prevent input button groups from wrapping with `white-space` and + // `font-size` in combination with `inline-block` on buttons. + font-size: 0; + white-space: nowrap; + + // Negative margin for spacing, position for bringing hovered/focused/actived + // element above the siblings. + > .btn { + position: relative; + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:focus, + &:active { + z-index: 2; + } + } + + // Negative margin to only have a 1px border between the two + &:first-child { + > .btn, + > .btn-group { + margin-right: -1px; + } + } + &:last-child { + > .btn, + > .btn-group { + z-index: 2; + margin-left: -1px; + } + } +} diff --git a/resources/scss/bootstrap/_jumbotron.scss b/resources/scss/bootstrap/_jumbotron.scss new file mode 100644 index 0000000..e311371 --- /dev/null +++ b/resources/scss/bootstrap/_jumbotron.scss @@ -0,0 +1,51 @@ +// +// Jumbotron +// -------------------------------------------------- + +.jumbotron { + padding-top: $jumbotron-padding; + padding-bottom: $jumbotron-padding; + margin-bottom: $jumbotron-padding; + color: $jumbotron-color; + background-color: $jumbotron-bg; + + h1, + .h1 { + color: $jumbotron-heading-color; + } + + p { + margin-bottom: ($jumbotron-padding / 2); + font-size: $jumbotron-font-size; + font-weight: 200; + } + + > hr { + border-top-color: darken($jumbotron-bg, 10%); + } + + .container &, + .container-fluid & { + border-radius: $border-radius-large; // Only round corners at higher resolutions if contained in a container + } + + .container { + max-width: 100%; + } + + @media screen and (min-width: $screen-sm-min) { + padding-top: ($jumbotron-padding * 1.6); + padding-bottom: ($jumbotron-padding * 1.6); + + .container &, + .container-fluid & { + padding-left: ($jumbotron-padding * 2); + padding-right: ($jumbotron-padding * 2); + } + + h1, + .h1 { + font-size: $jumbotron-heading-font-size; + } + } +} diff --git a/resources/scss/bootstrap/_labels.scss b/resources/scss/bootstrap/_labels.scss new file mode 100644 index 0000000..4fea19d --- /dev/null +++ b/resources/scss/bootstrap/_labels.scss @@ -0,0 +1,66 @@ +// +// Labels +// -------------------------------------------------- + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: $label-color; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; + + // [converter] extracted a& to a.label + + // Empty labels collapse automatically (not available in IE8) + &:empty { + display: none; + } + + // Quick fix for labels in buttons + .btn & { + position: relative; + top: -1px; + } +} + +// Add hover effects, but only for links +a.label { + &:hover, + &:focus { + color: $label-link-hover-color; + text-decoration: none; + cursor: pointer; + } +} + +// Colors +// Contextual variations (linked labels get darker on :hover) + +.label-default { + @include label-variant($label-default-bg); +} + +.label-primary { + @include label-variant($label-primary-bg); +} + +.label-success { + @include label-variant($label-success-bg); +} + +.label-info { + @include label-variant($label-info-bg); +} + +.label-warning { + @include label-variant($label-warning-bg); +} + +.label-danger { + @include label-variant($label-danger-bg); +} diff --git a/resources/scss/bootstrap/_list-group.scss b/resources/scss/bootstrap/_list-group.scss new file mode 100644 index 0000000..d04b72e --- /dev/null +++ b/resources/scss/bootstrap/_list-group.scss @@ -0,0 +1,126 @@ +// +// List groups +// -------------------------------------------------- + +// Base class +// +// Easily usable on