From 9026ba6d34a3d0b3b5e78c93ba12d0352231a8fc Mon Sep 17 00:00:00 2001
From: Bram Wiepjes <bramw@protonmail.com>
Date: Sat, 16 Feb 2019 19:49:50 +0100
Subject: [PATCH] created box and box-page component

---
 web-frontend/.stylelintrc                     |  3 +-
 web-frontend/package.json                     |  1 +
 web-frontend/public/login.html                | 37 +++++++++++++++++++
 .../src/scss/abstracts/_placeholders.scss     |  9 +++++
 web-frontend/src/scss/base/_base.scss         |  9 ++++-
 web-frontend/src/scss/base/_typography.scss   | 10 ++++-
 web-frontend/src/scss/components/_alert.scss  |  2 +-
 web-frontend/src/scss/components/_box.scss    | 11 ++++++
 .../src/scss/components/_box_page.scss        | 31 ++++++++++++++++
 web-frontend/src/scss/components/_button.scss |  7 ++--
 web-frontend/src/scss/components/_form.scss   |  4 --
 web-frontend/src/scss/default.scss            |  4 ++
 web-frontend/webpack/webpack.common.js        |  5 +++
 13 files changed, 121 insertions(+), 12 deletions(-)
 create mode 100644 web-frontend/public/login.html
 create mode 100644 web-frontend/src/scss/abstracts/_placeholders.scss
 create mode 100644 web-frontend/src/scss/components/_box.scss
 create mode 100644 web-frontend/src/scss/components/_box_page.scss

diff --git a/web-frontend/.stylelintrc b/web-frontend/.stylelintrc
index 892231dc6..ef2d20c3a 100755
--- a/web-frontend/.stylelintrc
+++ b/web-frontend/.stylelintrc
@@ -11,7 +11,8 @@
           "each",
           "include",
           "mixin",
-          "return"
+          "return",
+          "extend"
         ]
       }
     ]
diff --git a/web-frontend/package.json b/web-frontend/package.json
index 710b0b18d..61cd1da4c 100755
--- a/web-frontend/package.json
+++ b/web-frontend/package.json
@@ -14,6 +14,7 @@
   "scripts": {
     "eslint": "eslint src",
     "stylelint": "stylelint src/scss/**/*.scss",
+    "stylelint --fix": "stylelint src/scss/**/*.scss --fix",
     "build": "webpack -p --progress --config webpack/webpack.prod.js",
     "dev": "webpack-dev-server -d --progress --color --open --config webpack/webpack.dev.js"
   },
diff --git a/web-frontend/public/login.html b/web-frontend/public/login.html
new file mode 100644
index 000000000..1832e2a64
--- /dev/null
+++ b/web-frontend/public/login.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <title>Login</title>
+    </head>
+    <body>
+        <div class="box-page-header"></div>
+        <div class="box-page">
+            <div class="box">
+                <h1 class="box-title">Baserow</h1>
+                <div class="alert alert-error alert-has-icon">
+                    <div class="alert-icon">
+                        <i class="fas fa-exclamation"></i>
+                    </div>
+                    <div class="alert-title">Incorrect credentials</div>
+                    <p class="alert-content">The provided e-mail address or password is incorrect.</p>
+                </div>
+                <form>
+                    <div class="control">
+                        <label class="control-label">E-mail address</label>
+                        <div class="control-elements">
+                            <input type="text" class="input input-error input-large" />
+                            <div class="error">Please enter a valid e-mail address</div>
+                        </div>
+                    </div>
+                    <div class="control">
+                        <label class="control-label">Password</label>
+                        <div class="control-elements">
+                            <input type="password" class="input input-large" />
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/web-frontend/src/scss/abstracts/_placeholders.scss b/web-frontend/src/scss/abstracts/_placeholders.scss
new file mode 100644
index 000000000..e0260b625
--- /dev/null
+++ b/web-frontend/src/scss/abstracts/_placeholders.scss
@@ -0,0 +1,9 @@
+%first-last-no-margin {
+  &:first-child {
+    margin-top: 0;
+  }
+
+  &:last-child {
+    margin-bottom: 0;
+  }
+}
diff --git a/web-frontend/src/scss/base/_base.scss b/web-frontend/src/scss/base/_base.scss
index 96d988502..52b9444b5 100644
--- a/web-frontend/src/scss/base/_base.scss
+++ b/web-frontend/src/scss/base/_base.scss
@@ -1,5 +1,5 @@
 html,
-body{
+body {
   height: 100%;
 }
 
@@ -7,7 +7,12 @@ html {
   box-sizing: border-box;
 }
 
-*, *::before,
+body {
+  background-color: $color-neutral-100;
+}
+
+*,
+*::before,
 *::after {
   box-sizing: inherit;
 }
diff --git a/web-frontend/src/scss/base/_typography.scss b/web-frontend/src/scss/base/_typography.scss
index 85cab7a71..8339d154b 100644
--- a/web-frontend/src/scss/base/_typography.scss
+++ b/web-frontend/src/scss/base/_typography.scss
@@ -1,4 +1,4 @@
-html{
+html {
   font-size: 62.5%;
 }
 
@@ -18,6 +18,8 @@ a {
 }
 
 p {
+  @extend %first-last-no-margin;
+
   color: $color-neutral-500;
   line-height: 170%;
   margin-bottom: 30px;
@@ -25,18 +27,24 @@ p {
 
 h1,
 .heading-1 {
+  @extend %first-last-no-margin;
+
   font-size: 33px;
   margin: 30px 0;
 }
 
 h2,
 .heading-2 {
+  @extend %first-last-no-margin;
+
   font-size: 22px;
   margin: 20px 0;
 }
 
 h3,
 .heading-3 {
+  @extend %first-last-no-margin;
+
   font-size: 14px;
   margin: 10px 0;
 }
diff --git a/web-frontend/src/scss/components/_alert.scss b/web-frontend/src/scss/components/_alert.scss
index 562b9642f..3f36ec74e 100644
--- a/web-frontend/src/scss/components/_alert.scss
+++ b/web-frontend/src/scss/components/_alert.scss
@@ -16,7 +16,7 @@
   position: absolute;
   left: 16px;
   top: 16px;
-  background-color: #ffffff;
+  background-color: #fff;
   border: 4px solid;
   width: 40px;
   height: 40px;
diff --git a/web-frontend/src/scss/components/_box.scss b/web-frontend/src/scss/components/_box.scss
new file mode 100644
index 000000000..5db576db9
--- /dev/null
+++ b/web-frontend/src/scss/components/_box.scss
@@ -0,0 +1,11 @@
+.box {
+  background-color: #fff;
+  border-radius: 6px;
+  box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.16);
+  padding: 32px 40px;
+}
+
+.box-title {
+  padding-bottom: 20px;
+  border-bottom: 1px solid $color-neutral-200;
+}
diff --git a/web-frontend/src/scss/components/_box_page.scss b/web-frontend/src/scss/components/_box_page.scss
new file mode 100644
index 000000000..25e908f6f
--- /dev/null
+++ b/web-frontend/src/scss/components/_box_page.scss
@@ -0,0 +1,31 @@
+.box-page-header {
+  background: $color-primary-600;
+  position: absolute;
+  z-index: 0;
+  left: 0;
+  right: 0;
+  height: 124px;
+
+  &::after {
+    content: "";
+    position: absolute;
+    left: 0;
+    right: 0;
+    display: block;
+    background: inherit;
+    bottom: 0;
+    height: 200%;
+    transform: skewY(-4deg);
+    transform-origin: 100%;
+    z-index: -1;
+  }
+}
+
+.box-page {
+  position: relative;
+  z-index: 1;
+  margin: 0 auto;
+  padding: 80px 0;
+  max-width: 92%;
+  width: 520px;
+}
diff --git a/web-frontend/src/scss/components/_button.scss b/web-frontend/src/scss/components/_button.scss
index 9afb0e081..ab489a39b 100644
--- a/web-frontend/src/scss/components/_button.scss
+++ b/web-frontend/src/scss/components/_button.scss
@@ -1,8 +1,8 @@
 .button {
-  cursor:pointer;
+  cursor: pointer;
   display: inline-block;
   margin-bottom: 0;
-  color: #ffffff;
+  color: #fff;
   border: 1px solid transparent;
   white-space: nowrap;
   text-align: center;
@@ -16,7 +16,7 @@
   &:hover,
   &:focus {
     text-decoration: none;
-    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4)
+    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.4);
   }
 
   &.disabled,
@@ -45,6 +45,7 @@
 
 .button-ghost {
   @include button-style(#ffffff, $color-neutral-100, $color-primary-900);
+
   border-color: $color-neutral-400;
 }
 
diff --git a/web-frontend/src/scss/components/_form.scss b/web-frontend/src/scss/components/_form.scss
index 8675bc710..bf5538b7d 100644
--- a/web-frontend/src/scss/components/_form.scss
+++ b/web-frontend/src/scss/components/_form.scss
@@ -9,10 +9,6 @@
   margin-bottom: 16px;
 }
 
-.control-elements {
-
-}
-
 .input {
   display: block;
   width: 100%;
diff --git a/web-frontend/src/scss/default.scss b/web-frontend/src/scss/default.scss
index c618b52ff..d8da67523 100755
--- a/web-frontend/src/scss/default.scss
+++ b/web-frontend/src/scss/default.scss
@@ -1,5 +1,6 @@
 @import "abstracts/variables";
 @import "abstracts/mixins";
+@import "abstracts/placeholders";
 
 @import "vendors";
 
@@ -9,3 +10,6 @@
 @import "components/button";
 @import "components/alert";
 @import "components/form";
+@import "components/box";
+
+@import "components/box_page";
diff --git a/web-frontend/webpack/webpack.common.js b/web-frontend/webpack/webpack.common.js
index 70e353571..dfdbba179 100755
--- a/web-frontend/webpack/webpack.common.js
+++ b/web-frontend/webpack/webpack.common.js
@@ -113,7 +113,12 @@ const plugins = [
   new ExtractTextPlugin(config.cssFilename),
   new HtmlWebpackPlugin({
     template: `${config.output}/index.html`,
+    filename: 'index.html'
   }),
+  new HtmlWebpackPlugin({
+    template: `${config.output}/login.html`,
+    filename: 'login.html'
+  })
 ];
 
 const webpackConfig = {