diff --git a/client/src/components/forms/AssigneesForm/assignees-form.scss b/client/src/components/forms/AssigneesForm/assignees-form.scss index e630123ba7e48c359945668df5b9e0f54885e68e..66de42f7c95e28e47e5da1524242aada28035847 100644 --- a/client/src/components/forms/AssigneesForm/assignees-form.scss +++ b/client/src/components/forms/AssigneesForm/assignees-form.scss @@ -6,7 +6,7 @@ width: 100%; padding: 20px; border-radius: 15px; - background: s.$background-light; + background: s.$background-white; position: relative; margin: 10px 0; diff --git a/client/src/components/forms/AssigneesForm/index.tsx b/client/src/components/forms/AssigneesForm/index.tsx index 3a7ee9cd8900985f5b36bfa80ee3ceaa75c08b38..195bdb3190e4e19c2cceab433faf494a39ddf280 100644 --- a/client/src/components/forms/AssigneesForm/index.tsx +++ b/client/src/components/forms/AssigneesForm/index.tsx @@ -85,7 +85,7 @@ export default function AssigneesForm({ assignees, members, onNew, onDelete }: P } </select> <TimeInput onChange={value => setSelectedTime(value)} /> - <Button type="submit" onClick={addAssignee} className="Expanded"> + <Button type="submit" onClick={addAssignee} className="expanded"> Add the assignee </Button> </Popup> diff --git a/client/src/components/forms/RequirementsForm/requirements-form.scss b/client/src/components/forms/RequirementsForm/requirements-form.scss index 65141feadc59c29f9f7603f6a8777cb66c9c5510..e7dcfcba6f703c212d573dd1f04ba63b13390ceb 100644 --- a/client/src/components/forms/RequirementsForm/requirements-form.scss +++ b/client/src/components/forms/RequirementsForm/requirements-form.scss @@ -6,7 +6,7 @@ width: 100%; padding: 20px; border-radius: 15px; - background: s.$background-light; + background: s.$background-white; position: relative; margin: 10px 0; diff --git a/client/src/components/forms/TaskForm/task-form.scss b/client/src/components/forms/TaskForm/task-form.scss index e464d10dc3521e41e6d603f61a1cbc1956a1e437..93c6ce11846ed946cf16ec4671524ef7cda014b4 100644 --- a/client/src/components/forms/TaskForm/task-form.scss +++ b/client/src/components/forms/TaskForm/task-form.scss @@ -1,10 +1,13 @@ +@use 'styles/settings' as s; + .task-form { .emoji-mart { width: 100% !important; height: 340px; border-radius: 15px; overflow: hidden; + background: s.$background-white; .emoji-mart-scroll { height: 247.5px; @@ -17,6 +20,15 @@ .emoji-mart-emoji span { cursor: pointer; } + + .emoji-mart-category-label span { + background: rgba(s.$background-white-rgb, 0.95); + color: s.$text; + } + + .emoji-mart-category .emoji-mart-emoji:hover::before { + background: s.$background-input; + } } .current-icon { diff --git a/client/src/components/forms/UserForm/user-form.scss b/client/src/components/forms/UserForm/user-form.scss index f17b30a0b1d8094513b24365126b6483baf4645d..aed014d01c77f50cd206d0a5dc572c7f5e570dc3 100644 --- a/client/src/components/forms/UserForm/user-form.scss +++ b/client/src/components/forms/UserForm/user-form.scss @@ -27,13 +27,9 @@ width: 100%; height: 140px; margin-bottom: 20px; - background: rgba(s.$black, 0.025); + background: s.$background-input; font-size: 18px; - &:hover { - background: rgba(s.$black, 0.04); - } - @include mx.breakpoint(large) { margin-top: 30px; } diff --git a/client/src/components/forms/form.scss b/client/src/components/forms/form.scss index a6c3d14853c91e750f7d3ce506ec6154f82026e7..d00f83cd074960d7533e02d0076bd38842a94c82 100644 --- a/client/src/components/forms/form.scss +++ b/client/src/components/forms/form.scss @@ -50,7 +50,8 @@ form { } select, - input { + input, + textarea { width: 100%; font-size: 16px; border: none; @@ -63,7 +64,7 @@ form { color: s.$text; font-weight: s.$weight-regular; font-family: s.$body-font; - background: rgba(s.$black, 0.025); + background: s.$background-input; } h2 { diff --git a/client/src/components/graphs/CircularProgress/circular-progress.scss b/client/src/components/graphs/CircularProgress/circular-progress.scss index 0e91af668921f68fd049c9c0047826998ebe5f47..7bcc31ee3c76aa9c9f156e58f960cd2922c47f12 100644 --- a/client/src/components/graphs/CircularProgress/circular-progress.scss +++ b/client/src/components/graphs/CircularProgress/circular-progress.scss @@ -44,7 +44,7 @@ circle { fill: none; - stroke: #F3F3F3; + stroke: s.$background; stroke-width: 8; } } diff --git a/client/src/components/graphs/LinearProgress/linear-progress.scss b/client/src/components/graphs/LinearProgress/linear-progress.scss index 81fd29c4cb90494eac162092c076dacc162560bd..dbe1ad2a8705fecc260e480392eabc43518aa749 100644 --- a/client/src/components/graphs/LinearProgress/linear-progress.scss +++ b/client/src/components/graphs/LinearProgress/linear-progress.scss @@ -3,7 +3,7 @@ .linear-progress { width: 120px; - background: s.$background-light; + background: s.$background; position: relative; height: 10px; border-radius: 5px; diff --git a/client/src/components/helpers/Filter/filter.scss b/client/src/components/helpers/Filter/filter.scss index f14e23afeecbde1168bcffe8e3acf2f9327e8817..c111333afeb2cbc710645c3b151e082de841bc45 100644 --- a/client/src/components/helpers/Filter/filter.scss +++ b/client/src/components/helpers/Filter/filter.scss @@ -23,6 +23,8 @@ outline: none; border-radius: 15px; box-shadow: 0 0 15px rgba(s.$black, 0.05); + background: s.$background-white; + color: s.$text; } label { position: absolute; diff --git a/client/src/components/layout/CommentList/comment-list.scss b/client/src/components/layout/CommentList/comment-list.scss index c71021d445640f151e3dbb6fab2f3e9853640dcb..9f464bc1d3fbb1a9fef82b5f75d5389884332812 100644 --- a/client/src/components/layout/CommentList/comment-list.scss +++ b/client/src/components/layout/CommentList/comment-list.scss @@ -1,4 +1,5 @@ -@use 'styles/settings.scss'as s; + +@use 'styles/settings.scss' as s; .comment-list { .comment-container { @@ -16,6 +17,7 @@ position: relative; label { + z-index: 10; position: absolute; left: 30px; top: 0; @@ -40,4 +42,4 @@ transform: translateY(50%); } } -} \ No newline at end of file +} diff --git a/client/src/components/navigation/Sidebar/index.tsx b/client/src/components/navigation/Sidebar/index.tsx index b34b94f0a4024851de2bcf8eeb60896441bea400..68aaea56796aab774d3eabb396d1b844ed4bd9cc 100644 --- a/client/src/components/navigation/Sidebar/index.tsx +++ b/client/src/components/navigation/Sidebar/index.tsx @@ -2,9 +2,10 @@ import { NavLink, useHistory } from 'react-router-dom'; import { useEffect, useState } from 'react'; +import { subtractTime } from 'timely'; +import { getTheme, toggleTheme } from 'index'; import { clearToken, isLoggedIn } from 'adapters/auth'; import { getCurrentUser, getUserActivity, User } from 'adapters/user'; -import { subtractTime } from 'timely'; import Navigation from 'components/navigation/Navigation'; import Avatar from 'components/ui/Avatar'; @@ -21,6 +22,7 @@ interface Props { export default function Sidebar({ mobileShown, setMobileShown }: Props) { const [user, setUser] = useState<User>(); const [activity, setActivity] = useState<ChartItem[]>(); + const [theme, setTheme] = useState(getTheme()); useEffect(() => { if (isLoggedIn()) { @@ -39,14 +41,8 @@ export default function Sidebar({ mobileShown, setMobileShown }: Props) { } const changeTheme = () => { - const root = document.getElementsByTagName('html')[0]; - if (root.classList.contains('dark-theme')) { - root.classList.remove('dark-theme'); - localStorage.setItem('selected-theme', 'light'); - } else { - root.classList.add('dark-theme'); - localStorage.setItem('selected-theme', 'dark'); - } + toggleTheme(); + setTheme(getTheme()); } return ( @@ -75,7 +71,7 @@ export default function Sidebar({ mobileShown, setMobileShown }: Props) { <nav className="secondary-nav"> <button className="nav-link" onClick={changeTheme}> <span className="icon material-icons-outlined"> - dark_mode + {theme + '_mode'} </span> Change theme </button> diff --git a/client/src/components/ui/Avatar/avatar.scss b/client/src/components/ui/Avatar/avatar.scss index 99b3e6a8f9007b24175d8c765d84ca2a98f43b15..80e9b0de118a1db01b618667c3a1dbec6c0c31fa 100644 --- a/client/src/components/ui/Avatar/avatar.scss +++ b/client/src/components/ui/Avatar/avatar.scss @@ -5,7 +5,12 @@ border-radius: 50%; overflow: hidden; - img, .standard-image { + img { + width: 100%; + height: 100%; + } + + .standard-image { width: 100%; height: 100%; background: s.$secondary; diff --git a/client/src/components/ui/Comment/comment.scss b/client/src/components/ui/Comment/comment.scss index a9950073899748c04bd1a60546f112e5a5016ee6..74f3123669312847cc5ec84e96d02b18916fa222 100644 --- a/client/src/components/ui/Comment/comment.scss +++ b/client/src/components/ui/Comment/comment.scss @@ -67,7 +67,7 @@ textarea { transition: none; - background: s.$background-light; + background: s.$background-input; border: none; border-radius: 25px; width: 100%; @@ -79,6 +79,7 @@ resize: vertical; outline: none; min-height: 150px; + color: s.$text; } .buttons { diff --git a/client/src/components/ui/LongText/markdown.scss b/client/src/components/ui/LongText/markdown.scss index 518888ea41d0f515cd949007f883c5f1810d216c..fca352089b625c377875db4c3b528c64445cbf2d 100644 --- a/client/src/components/ui/LongText/markdown.scss +++ b/client/src/components/ui/LongText/markdown.scss @@ -1,4 +1,6 @@ +@use 'styles/settings.scss' as s; + .markdown { font-size: 1rem; line-height: 150%; @@ -9,7 +11,7 @@ .md-header-1, .md-header-2 { padding-bottom: 0.1rem; - border-bottom: 1px solid #00000015; + border-bottom: 1px solid rgba(s.$black, 0.1); } .md-header-1 { @@ -59,8 +61,8 @@ display: flex; flex-flow: row nowrap; overflow-x: auto; - color: #abb2bf; - background: #282c34; + color: #bbc2cf; + background: s.$background-dark; } .md-code .md-code-content { @@ -72,7 +74,7 @@ display: flex; flex-flow: column; padding: 1rem 0.5rem; - border-right: 1px solid #ffffff20; + border-right: 1px solid rgba(s.$white, 0.15); user-select: none; text-align: right; } @@ -83,7 +85,7 @@ } .md-inline-code { - background: #00000010; + background: rgba(s.$black, 0.05); padding: 0.1rem 0.25rem; border-radius: 4px; font-family: 'IBM Plex Mono', monospace; @@ -92,12 +94,12 @@ } .md-quote { - border-left: 0.25rem solid #00000018; + border-left: 0.25rem solid rgba(s.$black, 0.1); padding-left: 1.25rem; } .md-hrule { - border: 0.125rem solid #00000018; + border: 0.125rem solid rgba(s.$black, 0.1); height: 0; } @@ -156,7 +158,7 @@ li > span > .md-paragraph { .md-table, .md-table-row, .md-table-data, .md-table-header { border-collapse: collapse; - border: 1px solid #00000018; + border: 1px solid rgba(s.$black, 0.1); } .md-table-data, .md-table-header { @@ -165,11 +167,11 @@ li > span > .md-paragraph { .md-table-header { font-weight: 500; - background: #0000000a; + background: s.$background-input; } .md-table-row:nth-child(odd) { - background: #00000005; + background: rgba(s.$background-input-rgb, 0.5); } .md-info-wrap { diff --git a/client/src/components/ui/Popup/popup.scss b/client/src/components/ui/Popup/popup.scss index 5d798967fc165d20b4e7f604b741161cd2ae61b5..bf6e8379d7d665376d42cb4e4b3e37e0be1ca610 100644 --- a/client/src/components/ui/Popup/popup.scss +++ b/client/src/components/ui/Popup/popup.scss @@ -17,7 +17,7 @@ animation: moveup 300ms ease; max-height: 100vh; overflow: auto; - padding: 30px; + padding: 50px; max-width: 960px; background: s.$background-white; border-radius: 25px; @@ -26,8 +26,6 @@ @include mx.breakpoint(medium) { margin: -20px 0; - width: 50%; - padding: 15px; padding: 75px 100px; } } diff --git a/client/src/components/ui/TextInput/text-input.scss b/client/src/components/ui/TextInput/text-input.scss index b7a2ef59688173739d46f0ff60e773761b8704cf..f9a2a87cf7e741bb9fe536fd47d4ae211c35bfd6 100644 --- a/client/src/components/ui/TextInput/text-input.scss +++ b/client/src/components/ui/TextInput/text-input.scss @@ -52,7 +52,7 @@ color: s.$text; font-weight: s.$weight-regular; font-family: s.$body-font; - background: rgba(s.$black, 0.025); + background: s.$background-input; } } diff --git a/client/src/components/ui/TimeInput/index.tsx b/client/src/components/ui/TimeInput/index.tsx index be8facf032e26cb6028e5cc486dcdeb8225c3590..f9acbe76bcdaa2743e21795919b66817d6065036 100644 --- a/client/src/components/ui/TimeInput/index.tsx +++ b/client/src/components/ui/TimeInput/index.tsx @@ -26,7 +26,8 @@ export default function TimeInput({ onChange: userOnChange }: Props) { return ( <div className="time-field"> - <input type="number" min={0} onChange={onChange} /> + <label htmlFor="time">Time in hours</label> + <input type="number" name="time" min={0} onChange={onChange} /> <span className="formatted">{formatted}</span> </div> ); diff --git a/client/src/components/ui/TimeInput/time-input.scss b/client/src/components/ui/TimeInput/time-input.scss index 565c14952aca602bde074063a47cadf5e4ae37dc..83cb451067587bdf259e55d87d8a1686692ec38a 100644 --- a/client/src/components/ui/TimeInput/time-input.scss +++ b/client/src/components/ui/TimeInput/time-input.scss @@ -1,5 +1,8 @@ +@use 'styles/settings.scss' as s; + .time-field { + position: relative; margin: 20px 0; display: flex; align-items: baseline; @@ -12,5 +15,31 @@ white-space: nowrap; text-align: center; } + + input::-webkit-outer-spin-button, + input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + + /* Firefox */ + input[type=number] { + -moz-appearance: textfield; + } + + + label { + &:after { + content: ' *'; + color: s.$primary; + } + + font-size: 16px; + position: absolute; + left: 20px; + font-weight: s.$weight-bold; + z-index: 20; + transform: translateY(-50%); + } } diff --git a/client/src/index.tsx b/client/src/index.tsx index 015fe8aedd0eab253fa24c7a660d2b521f2ee3d3..4295a85f57c5827ccb73e7dc6f494617967c9a8c 100644 --- a/client/src/index.tsx +++ b/client/src/index.tsx @@ -26,6 +26,22 @@ export function reload() { render(); +export function getTheme() { + const root = document.getElementsByTagName('html')[0]; + return root.classList.contains('dark-theme') ? 'dark' : 'light'; +} + +export function toggleTheme() { + const root = document.getElementsByTagName('html')[0]; + if (root.classList.contains('dark-theme')) { + root.classList.remove('dark-theme'); + localStorage.setItem('selected-theme', 'light'); + } else { + root.classList.add('dark-theme'); + localStorage.setItem('selected-theme', 'dark'); + } +} + if (localStorage.getItem('selected-theme') === 'dark') { const root = document.getElementsByTagName('html')[0]; root.classList.add('dark-theme'); diff --git a/client/src/pages/Home/home.scss b/client/src/pages/Home/home.scss index 5a493065c69680ed653254ccf3eeebbade875376..478a096bf45ffe5cb45d372a7875dd113f807974 100644 --- a/client/src/pages/Home/home.scss +++ b/client/src/pages/Home/home.scss @@ -206,7 +206,7 @@ grid-gap: 24px; justify-content: center; align-items: center; - background: rgba(s.$white, 0.5); + background: rgba(s.$background-white-rgb, 0.5); border-radius: 25px; padding: 24px; diff --git a/client/src/styles/settings.scss b/client/src/styles/settings.scss index 309ba8660c40b895de80bb36e029eecdb204586b..20d59225508503e1c0c606455996ecffa7d27e82 100644 --- a/client/src/styles/settings.scss +++ b/client/src/styles/settings.scss @@ -7,6 +7,7 @@ $light-colors: ( 'background-dark': #11061A, 'background-light': #f9f9f9, 'background-white': #ffffff, + 'background-input': #f4f4f4, 'background': #EEF5F5, 'text': #3A5255, ); @@ -19,6 +20,7 @@ $dark-colors: ( 'background-dark': #000000, 'background-light': #090909, 'background-white': #151515, + 'background-input': #181818, 'background': #0a0a0a, 'text': #eAe2e5, ); @@ -31,6 +33,7 @@ $background: var(--background); $background-dark: var(--background-dark); $background-light: var(--background-light); $background-white: var(--background-white); +$background-input: var(--background-input); $text: var(--text); $primary-rgb: var(--primary-rgb); @@ -41,6 +44,7 @@ $background-rgb: var(--background-rgb); $background-dark-rgb: var(--background-dark-rgb); $background-light-rgb: var(--background-light-rgb); $background-white-rgb: var(--background-white-rgb); +$background-input-rgb: var(--background-input-rgb); $text-rgb: var(--text-rgb); $white: #fff;