diff --git a/web/public/index.html b/web/public/index.html
index 6f22205..4d5b7b5 100644
--- a/web/public/index.html
+++ b/web/public/index.html
@@ -7,7 +7,7 @@
Doorlock
diff --git a/web/src/App.jsx b/web/src/App.jsx
index a297819..85733a3 100644
--- a/web/src/App.jsx
+++ b/web/src/App.jsx
@@ -4,7 +4,7 @@ import {
Route,
} from "react-router-dom";
import { ThemeProvider } from "styled-components";
-import {CreateUserWidget, RecentActivityWidget, SystemStatusWidget} from './components'
+import {CreateUserWidget, RecentActivityWidget, SystemStatusWidget, ColourPalette} from './components'
import {AccountManager, AdminUI, Logs, System} from './views'
import theme from './theme';
function App() {
@@ -14,7 +14,8 @@ function App() {
-
+
+
diff --git a/web/src/components/Button.jsx b/web/src/components/Button.jsx
new file mode 100644
index 0000000..be449a8
--- /dev/null
+++ b/web/src/components/Button.jsx
@@ -0,0 +1,22 @@
+import styled from 'styled-components'
+
+const Button = styled.button`
+font-size: 1em;
+font-weight: bold;
+color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color3};
+display: inline-block;
+padding: 0.3em 0.5em;
+border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color3};
+background: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color4};
+transition: ease-in-out 225ms;
+&:hover{
+ background-color: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color3};
+ color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color6};
+ border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color10};
+ text-shadow: 0 0 .2em ${props=>props.disabled?"transparent":props.theme.colours.color9};
+}
+`;
+
+
+
+export default Button
diff --git a/web/src/components/Card.jsx b/web/src/components/Card.jsx
index 59aae88..b4512fc 100644
--- a/web/src/components/Card.jsx
+++ b/web/src/components/Card.jsx
@@ -7,6 +7,8 @@ background: ${props=>props.theme.colours.color1};
border-radius: 1em;
padding: 1em;
margin: 1em;
+display: block;
+flex-direction: column;
h4 {
margin: 0;
}
diff --git a/web/src/components/Checkbox.jsx b/web/src/components/Checkbox.jsx
new file mode 100644
index 0000000..5d931ad
--- /dev/null
+++ b/web/src/components/Checkbox.jsx
@@ -0,0 +1,50 @@
+import styled from "styled-components";
+import Hook from './Checkbox.svg'
+const CheckboxOrigin = styled.input.attrs({ type: 'checkbox' })`
+ visibility: hidden;
+`;
+
+
+const CheckboxStyled = styled.div`
+position: absolute;
+top: 0;
+right: 0;
+font-size: 1em;
+width: 1em;
+height: 1em;
+font-weight: bold;
+color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color3};
+border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color3};
+background: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color4};
+transition: ease-in-out 125ms;
+
+${CheckboxOrigin}:checked +&{
+ border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color3};
+ background-color: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color3};
+ color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color6};
+ background-image: url(${Hook});
+ background-position: center;
+ background-repeat: no-repeat;
+}
+${CheckboxOrigin}:hover +&{
+ background-color: ${props => props.disabled ? props.theme.colours.color9 : props.theme.colours.color3};
+ color: ${props => props.disabled ? props.theme.colours.color1 : props.theme.colours.color6};
+ border: solid .1em ${props => props.disabled ? props.theme.colours.color7 : props.theme.colours.color10};
+
+}
+`;
+const CheckboxWrapper = styled.label`
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+`;
+
+
+const Checkbox = ({ className, checked, ...props }) => (
+
+
+
+
+
+);
+export default Checkbox;
\ No newline at end of file
diff --git a/web/src/components/Checkbox.svg b/web/src/components/Checkbox.svg
new file mode 100644
index 0000000..c8b3e5b
--- /dev/null
+++ b/web/src/components/Checkbox.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/web/src/components/ColourPalette.jsx b/web/src/components/ColourPalette.jsx
new file mode 100644
index 0000000..cc6ad3b
--- /dev/null
+++ b/web/src/components/ColourPalette.jsx
@@ -0,0 +1,25 @@
+import React from 'react'
+import styled from 'styled-components'
+import { useContext } from 'react';
+import { ThemeContext } from 'styled-components';
+const Element = styled.div`
+//width: 1em;
+height: 2em;
+display: block;
+background: ${props=> props.bg};
+color: #707070;
+padding: .5em;
+
+`;
+export default function ColourPalette() {
+ var colours = useContext(ThemeContext).colours;
+ return (
+
+
+
+ {Object.keys(colours).map((name, index) => (
+ {name}
+ ))}
+
+ )
+}
diff --git a/web/src/components/CreateUserWidget.jsx b/web/src/components/CreateUserWidget.jsx
index e204e5b..52943b4 100644
--- a/web/src/components/CreateUserWidget.jsx
+++ b/web/src/components/CreateUserWidget.jsx
@@ -1,6 +1,7 @@
import React, { Component } from 'react'
import TextInput from './TextInput'
import Card from './Card'
+import Button from './Button'
export class CreateUserWidget extends Component {
render() {
return (
@@ -13,7 +14,7 @@ export class CreateUserWidget extends Component {
{console.log("Button Pressed",e)}}/>
-
+
)
}
diff --git a/web/src/components/SearchBox.jsx b/web/src/components/SearchBox.jsx
index 725f549..321665d 100644
--- a/web/src/components/SearchBox.jsx
+++ b/web/src/components/SearchBox.jsx
@@ -9,7 +9,7 @@ export class SearchBox extends Component {
border-radius: .5rem;
display: inline-flex;
white-space: nowrap;
- margin-left: auto;
+ //margin-left: auto;
transition: ease-in-out all 500ms;
flex-grow: 0;
max-width: 20em;
@@ -28,7 +28,7 @@ export class SearchBox extends Component {
background: ${this.props.theme.colours.color3};
border: none;
outline: none;
- color: ${this.props.theme.colours.color6};
+ color: ${this.props.theme.colours.color10};
flex-grow: 0;
margin-left: auto;
width: 100%;
@@ -41,6 +41,7 @@ export class SearchBox extends Component {
+ button{
height: 2rem;
border: none;
+ transition: ease-in-out all 100ms;
color: ${this.props.theme.colours.color6};
border-radius: 0 .5rem .5rem 0;
display: inline-flex;
diff --git a/web/src/components/Select.jsx b/web/src/components/Select.jsx
new file mode 100644
index 0000000..71492bb
--- /dev/null
+++ b/web/src/components/Select.jsx
@@ -0,0 +1,22 @@
+import styled from "styled-components";
+
+const Select = styled.select`
+font-size: 1em;
+font-weight: bold;
+color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color3};
+display: inline-block;
+padding: 0.3em 0.5em;
+border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color3};
+background: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color4};
+transition: ease-in-out 225ms;
+
+option {
+ background-color: ${props=>props.disabled?props.theme.colours.color9:props.theme.colours.color3};
+ color: ${props=>props.disabled?props.theme.colours.color1:props.theme.colours.color6};
+ border: solid .1em ${props=>props.disabled?props.theme.colours.color7:props.theme.colours.color10};
+ text-shadow: 0 0 .2em ${props=>props.disabled?"transparent":props.theme.colours.color9};
+}
+
+`;
+
+export default Select;
\ No newline at end of file
diff --git a/web/src/components/Table.jsx b/web/src/components/Table.jsx
new file mode 100644
index 0000000..70ae645
--- /dev/null
+++ b/web/src/components/Table.jsx
@@ -0,0 +1,21 @@
+import styled from "styled-components";
+const Table = styled.table`
+width: 100%;
+border-spacing: 0;
+border-collapse: collapse;
+thead{
+ background-color: ${props=>props.theme.colours.color9};
+ font-weight: bold;
+
+}
+tbody tr:not(:last-child){
+ border-bottom: 1px solid ${props=>props.theme.colours.color9};
+}
+tr:nth-child(2){
+ background-color: ${props=>props.theme.colours.color1};
+}
+td{
+ padding: 0.5em 1em;
+}
+`;
+export default Table;
\ No newline at end of file
diff --git a/web/src/components/TextInput.jsx b/web/src/components/TextInput.jsx
index ed2fa61..7afd0bb 100644
--- a/web/src/components/TextInput.jsx
+++ b/web/src/components/TextInput.jsx
@@ -99,7 +99,7 @@ export class TextInput extends Component {
`;
return (
-
+
{this.props.label != null ? : ""}
{this.props.button != null ? : ""}
diff --git a/web/src/components/index.js b/web/src/components/index.js
index 6a9d2fe..4d15bcb 100644
--- a/web/src/components/index.js
+++ b/web/src/components/index.js
@@ -2,4 +2,11 @@ import CreateUserWidget from "./CreateUserWidget";
import RecentActivityWidget from "./RecentActivityWidget";
import SystemStatusWidget from "./SystemStatusWidget";
import SearchBox from "./SearchBox";
-export { CreateUserWidget, RecentActivityWidget, SystemStatusWidget, SearchBox }
\ No newline at end of file
+import Card from "./Card";
+import TextInput from "./TextInput";
+import Button from "./Button";
+import Select from "./Select";
+import Checkbox from "./Checkbox";
+import ColourPalette from "./ColourPalette";
+import Table from "./Table";
+export { CreateUserWidget, RecentActivityWidget, SystemStatusWidget, SearchBox, Card, TextInput, Button, Select, Checkbox, Table, ColourPalette}
\ No newline at end of file
diff --git a/web/src/theme/index.js b/web/src/theme/index.js
index 3601ca1..bed5837 100644
--- a/web/src/theme/index.js
+++ b/web/src/theme/index.js
@@ -13,7 +13,7 @@ const colours1 = {
const colours2 = {
color1: "#1e2e2e",
color2: "#273a37",
- color3: "#43f48d",
+ color3: "#18cb64",
color4: "#012400be",
color5: "#254904c6",
color6: "#daebd9bf",
diff --git a/web/src/views/AccountEdit.jsx b/web/src/views/AccountEdit.jsx
new file mode 100644
index 0000000..09456f8
--- /dev/null
+++ b/web/src/views/AccountEdit.jsx
@@ -0,0 +1,13 @@
+import React, { Component } from 'react'
+
+export class AccountEdit extends Component {
+ render() {
+ return (
+
+
+
+ )
+ }
+}
+
+export default AccountEdit
diff --git a/web/src/views/AccountManager.jsx b/web/src/views/AccountManager.jsx
index 6909946..3f68fec 100644
--- a/web/src/views/AccountManager.jsx
+++ b/web/src/views/AccountManager.jsx
@@ -1,15 +1,72 @@
import React, { Component } from 'react'
import Card from '../components/Card'
+import styled, { withTheme } from 'styled-components'
+import { Button, Table, Select, Checkbox } from '../components';
+
export class AccountManager extends Component {
render() {
+ const ActionSelect = styled.div`
+ width: 100%;
+
+ display: flex;
+ justify-content: flex-end;
+ `;
+
return (
-
- Account Manager
-
- Hello World
-
+ <>
+
+ Account Manager
+
+
+
+ UserID |
+ First Name |
+ Last Name |
+ Last Access |
+ |
+ |
+
+
+
+
+ 001 |
+ Anton |
+ Stigloher |
+ 06.10.2021 |
+ |
+ |
+
+
+ 002 |
+ Max |
+ Mustermann |
+ 07.10.2021 |
+ |
+ |
+
+
+ 003 |
+ Peter |
+ Lustig |
+ 08.10.2021 |
+ |
+ |
+
+
+
+
+
+
+
+
+ >
)
}
}
-export default AccountManager
+export default withTheme(AccountManager)
diff --git a/web/src/views/AdminUI.jsx b/web/src/views/AdminUI.jsx
index 56fcb90..890f916 100644
--- a/web/src/views/AdminUI.jsx
+++ b/web/src/views/AdminUI.jsx
@@ -30,37 +30,28 @@ export class AdminUI extends Component {
-ms-grid-column: 1;
-ms-grid-column-span: 3;
grid-area: header;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
+
display: inline-flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
+ flex-wrap: wrap;
+ flex-direction: row;
min-height: auto;
padding: .5em;
- -webkit-box-pack: end;
- -ms-flex-pack: end;
- justify-content: flex-end;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
+ justify-content: space-between;
+ align-items: center;
background: ${this.props.theme.colours.color1};
color: ${this.props.theme.colours.color7};
h1 {
-ms-flex-wrap: nowrap;
flex-wrap: nowrap;
white-space: nowrap;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
display: inline-flex;
font-size: 1.5em;
+ margin: .5em;
+ margin-right: auto;
+ padding-right: 2em;
}
&::after {
- -ms-grid-column-align: start;
justify-self: start;
position: absolute;
display: block;
@@ -73,6 +64,7 @@ export class AdminUI extends Component {
z-index: 1;
}
nav{
+ margin-left: auto;
display: inline-flex;
flex-wrap: nowrap;
flex-shrink: 1;
@@ -207,6 +199,7 @@ export class AdminUI extends Component {
align-items: flex-start;
flex-wrap: wrap;
padding: 1em;
+ color: ${props=>props.theme.colours.color6};
background: ${this.props.theme.colours.color2};
`;
return (
@@ -217,7 +210,7 @@ export class AdminUI extends Component {
@@ -225,9 +218,9 @@ export class AdminUI extends Component {
- - Status
- - Account
- - Log
+ - Dashboard
+ - Accounts
+ - Logs
- System
diff --git a/web/src/views/Logs.jsx b/web/src/views/Logs.jsx
index 199569f..fc6dfbd 100644
--- a/web/src/views/Logs.jsx
+++ b/web/src/views/Logs.jsx
@@ -1,15 +1,42 @@
import React, { Component } from 'react'
+import styled, {withTheme} from 'styled-components'
+import { Table, Button } from '../components'
import Card from '../components/Card'
export class Logs extends Component {
render() {
return (
-
- Logs
-
- Hello World
-
+ <>
+ Logs
+
+
+
+ Time |
+ Type |
+ Info |
+
+
+
+
+ 12.12.12 08:12 |
+ Authentication |
+ [NFC] Max Mustermann |
+
+
+ 12.12.12 08:12 |
+ Authentication Error |
+ [NFC] 92:23:c3:32 |
+
+
+ 12.12.12 08:12 |
+ Admin Login |
+ Toni Stigloher |
+
+
+
+
+ >
)
}
}
-export default Logs
+export default withTheme(Logs)
diff --git a/web/src/views/Overlay.jsx b/web/src/views/Overlay.jsx
new file mode 100644
index 0000000..8a34bed
--- /dev/null
+++ b/web/src/views/Overlay.jsx
@@ -0,0 +1,41 @@
+import React, { Children, Component } from 'react'
+import styled, {withTheme, createGlobalStyle} from 'styled-components'
+
+export class Overlay extends Component {
+ render() {
+ const GlobalStyle = createGlobalStyle`
+ #root{
+ overflow : hidden ;
+ //pointer-events:none;
+ //user-select: none;
+ }
+ `;
+ const OverlayWrapper = styled.div`
+ user-select: all;
+ pointer-events: all;
+ filter: blur(0);
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: calc(100vw - 4em);
+ margin: 2em;
+ height: calc(100vh - 4em);
+ z-index: 2;
+ border-radius: 1em;
+ padding: 1em;
+ color: ${this.props.theme.colours.color3};
+ background: ${this.props.theme.colours.color9};
+ box-shadow: 0 0 2em ${this.props.theme.colours.color3};
+ border: 1px solid ${this.props.theme.colours.color3};
+ overflow: auto;
+ `;
+ return (
+
+
+ {this.props.children}
+
+ )
+ }
+}
+
+export default withTheme(Overlay)
diff --git a/web/src/views/System.jsx b/web/src/views/System.jsx
index 703c3d0..0348d66 100644
--- a/web/src/views/System.jsx
+++ b/web/src/views/System.jsx
@@ -1,6 +1,6 @@
import React, { Component } from 'react'
-import Card from '../components/Card'
-import TextInput from '../components/TextInput'
+import styled, {withTheme} from 'styled-components'
+import {Button, Card, TextInput} from '../components'
export class System extends Component {
render() {
return (
@@ -15,7 +15,7 @@ export class System extends Component {
-
+
>
@@ -23,4 +23,4 @@ export class System extends Component {
}
}
-export default System
+export default withTheme(System)
diff --git a/web/src/views/index.js b/web/src/views/index.js
index 3aacf28..4481902 100644
--- a/web/src/views/index.js
+++ b/web/src/views/index.js
@@ -2,4 +2,5 @@ import AdminUI from "./AdminUI";
import AccountManager from "./AccountManager";
import Logs from "./Logs";
import System from "./System";
-export {AccountManager, AdminUI, Logs, System}
\ No newline at end of file
+import Overlay from "./Overlay";
+export {AccountManager, AdminUI, Logs, System, Overlay}
\ No newline at end of file