-
{this.props.language.time.title}
+ SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[0], document.getElementsByClassName('expandIcons')[0])}>{this.props.language.time.title}
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[0], document.getElementsByClassName('expandIcons')[0])} />
@@ -147,7 +145,7 @@ export default class Settings extends React.PureComponent {
-
{this.props.language.greeting.title}
+ SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[1], document.getElementsByClassName('expandIcons')[1])}>{this.props.language.greeting.title}
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[1], document.getElementsByClassName('expandIcons')[1])} />
@@ -160,7 +158,7 @@ export default class Settings extends React.PureComponent {
-
{this.props.language.quote.title}
+ SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[2], document.getElementsByClassName('expandIcons')[2])}>{this.props.language.quote.title}
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[2], document.getElementsByClassName('expandIcons')[2])} />
@@ -168,7 +166,7 @@ export default class Settings extends React.PureComponent {
-
{this.props.language.background.title}
+ SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[3], document.getElementsByClassName('expandIcons')[3])}>{this.props.language.background.title}
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[3], document.getElementsByClassName('expandIcons')[3])} />
@@ -203,7 +201,7 @@ export default class Settings extends React.PureComponent {
-
{this.props.language.searchbar.title}
+
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[4], document.getElementsByClassName('expandIcons')[4])}>{this.props.language.searchbar.title}
SettingsFunctions.toggleExtra(document.getElementsByClassName('extraSettings')[4], document.getElementsByClassName('expandIcons')[4])} />
@@ -213,11 +211,17 @@ export default class Settings extends React.PureComponent {
DuckDuckGo
Google
Bing
- { /* Custom */ }
+ Yahoo
+ Ecosia
+ Yandex
+ Qwant
+ Ask
+ Startpage
+ {/* Custom */}
@@ -243,8 +247,10 @@ export default class Settings extends React.PureComponent {
{this.props.language.language}
localStorage.setItem('language', document.getElementById('language').value)}>
English
- Dutch
- French
+ Nederlands
+ Français
+ Norsk
+ Russian
SettingsFunctions.saveStuff()}>{this.props.language.apply}
diff --git a/src/components/Update.jsx b/src/components/modals/Update.jsx
similarity index 78%
rename from src/components/Update.jsx
rename to src/components/modals/Update.jsx
index 93fbb782..fa63e26f 100644
--- a/src/components/Update.jsx
+++ b/src/components/modals/Update.jsx
@@ -1,5 +1,5 @@
import React from 'react';
-import * as Constants from '../modules/constants';
+import * as Constants from '../../modules/constants';
export default class Update extends React.PureComponent {
constructor(...args) {
@@ -33,15 +33,18 @@ export default class Update extends React.PureComponent {
}
componentDidMount() {
+ localStorage.setItem('viewedUpdate', true);
this.getUpdate();
}
render() {
- return
+ return
×
By Mue •
-
+
+
Image of JIF.
+
;
}
}
\ No newline at end of file
diff --git a/src/components/modals/Welcome.jsx b/src/components/modals/Welcome.jsx
new file mode 100644
index 00000000..0720d1c4
--- /dev/null
+++ b/src/components/modals/Welcome.jsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import EmailIcon from '@material-ui/icons/Email';
+
+export default class Welcome extends React.PureComponent {
+ render() {
+ return
;
+ }
+}
\ No newline at end of file
diff --git a/src/components/modals/marketplace/Item.jsx b/src/components/modals/marketplace/Item.jsx
new file mode 100644
index 00000000..dbd65585
--- /dev/null
+++ b/src/components/modals/marketplace/Item.jsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import ArrowBackIcon from '@material-ui/icons/ArrowBack';
+
+export default class Item extends React.PureComponent {
+ render() {
+ return (
+
+
+
+
+
{this.props.data.name}
+ {this.props.button}
+
+
+
+
+
{this.props.language.information}
+
+
+ {this.props.language.last_updated}
+ {this.props.data.updated}
+
+ {this.props.language.version}
+ {this.props.data.version}
+
+ {this.props.language.author}
+ {this.props.data.author}
+
+
+
+
+ {this.props.language.notice.title}
+ {this.props.language.notice.description}
+
+
+
+
+
{this.props.language.overview}
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/modals/marketplace/Items.jsx b/src/components/modals/marketplace/Items.jsx
new file mode 100644
index 00000000..1ddf5560
--- /dev/null
+++ b/src/components/modals/marketplace/Items.jsx
@@ -0,0 +1,25 @@
+import React from 'react';
+
+export default class Items extends React.PureComponent {
+ render() {
+ let seeMoreHTML;
+ if (this.props.seeMore === true) seeMoreHTML =
{this.props.seeMoreTitle} ;
+
+ return (
+
+ {seeMoreHTML}
+
{this.props.title}
+
+ {this.props.items.map((item) =>
+
this.props.toggleFunction(item.name)}>
+
+
+
{item.display_name}
+
{item.author}
+
+
)}
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/modals/settings/Checkbox.jsx b/src/components/modals/settings/Checkbox.jsx
new file mode 100644
index 00000000..2949ca69
--- /dev/null
+++ b/src/components/modals/settings/Checkbox.jsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import SettingsFunctions from '../../../modules/settingsFunctions';
+import CheckboxUI from '@material-ui/core/Checkbox';
+import FormControlLabel from '@material-ui/core/FormControlLabel';
+
+export default class Checkbox extends React.PureComponent {
+ constructor(...args) {
+ super(...args);
+ this.state = {
+ checked: true
+ }
+ }
+
+ render() {
+ const handleChange = () => {
+ SettingsFunctions.setItem(this.props.name);
+ let checked;
+ if (this.state.checked === true) checked = false;
+ else checked = true;
+ this.setState({ checked: checked });
+ }
+
+ let value = localStorage.getItem(this.props.name);
+
+ switch (value) {
+ case 'true': value = true; break;
+ case 'false': value = false; break;
+ default: value = false;
+ }
+
+ this.setState({ checked: value });
+
+ return (
+
+ }
+ label={this.props.text}
+ />
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/settings/Slider.jsx b/src/components/modals/settings/Slider.jsx
similarity index 85%
rename from src/components/settings/Slider.jsx
rename to src/components/modals/settings/Slider.jsx
index 5e9b3b7d..b48cca11 100644
--- a/src/components/settings/Slider.jsx
+++ b/src/components/modals/settings/Slider.jsx
@@ -1,5 +1,5 @@
import React from 'react';
-import * as SettingsFunctions from '../../modules/settingsFunctions';
+import SettingsFunctions from '../../../modules/settingsFunctions';
export default class Slider extends React.PureComponent {
render() {
diff --git a/src/components/settings/Checkbox.jsx b/src/components/settings/Checkbox.jsx
deleted file mode 100644
index db9e8bf4..00000000
--- a/src/components/settings/Checkbox.jsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import React from 'react';
-import * as SettingsFunctions from '../../modules/settingsFunctions';
-
-export default class Checkbox extends React.PureComponent {
- render() {
- return (
-
- );
- }
-}
\ No newline at end of file
diff --git a/src/components/Background.jsx b/src/components/widgets/Background.jsx
similarity index 83%
rename from src/components/Background.jsx
rename to src/components/widgets/Background.jsx
index 987fd883..3f87df64 100644
--- a/src/components/Background.jsx
+++ b/src/components/widgets/Background.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import supportsWebP from 'supports-webp';
-import * as Constants from '../modules/constants';
+import * as Constants from '../../modules/constants';
export default class Background extends React.PureComponent {
doOffline() {
@@ -24,7 +24,15 @@ export default class Background extends React.PureComponent {
}
async setBackground() {
- if (localStorage.getItem('offlineMode')=== 'true') return this.doOffline();
+ if (localStorage.getItem('offlineMode') === 'true') return this.doOffline();
+
+ const photoPack = JSON.parse(localStorage.getItem('photo_packs'));
+ if (photoPack) {
+ let background = photoPack[Math.floor(Math.random() * photoPack.length)];
+ document.getElementById('backgroundCredits').style.display = 'none'; // Hide the location icon
+ document.getElementById('photographer').style.display = 'none';
+ return document.getElementById('backgroundImage').setAttribute('style', `-webkit-filter:blur(${localStorage.getItem('blur')}px); background-image: url(${background.url.default})`); // Set background and blur etc
+ }
const colour = localStorage.getItem('customBackgroundColour');
if (colour) {
@@ -54,7 +62,7 @@ export default class Background extends React.PureComponent {
requestURL = 'https://unsplash.muetab.xyz/getImage';
break;
default:
- if (await supportsWebP && enabled === 'true') requestURL = Constants.API_URL +'/getImage?webp=true';
+ if (await supportsWebP && enabled === 'true') requestURL = Constants.API_URL +'/getImage?webp=true';
else requestURL = Constants.API_URL + '/getImage?category=Outdoors';
break;
}
@@ -79,6 +87,6 @@ export default class Background extends React.PureComponent {
}
render() {
- return null; // React gets annoyed if I don't put anything here or use "return;"
+ return
;
}
}
\ No newline at end of file
diff --git a/src/components/Clock.jsx b/src/components/widgets/Clock.jsx
similarity index 95%
rename from src/components/Clock.jsx
rename to src/components/widgets/Clock.jsx
index 27664dd3..fde01b1d 100644
--- a/src/components/Clock.jsx
+++ b/src/components/widgets/Clock.jsx
@@ -69,7 +69,7 @@ export default class Clock extends React.PureComponent {
render() {
let clockHTML =
{this.state.time}{this.state.ampm} ;
- if (localStorage.getItem('analog') === 'true') clockHTML =
;
+ if (localStorage.getItem('analog') === 'true') clockHTML = ;
return clockHTML;
}
}
diff --git a/src/components/Greeting.jsx b/src/components/widgets/Greeting.jsx
similarity index 100%
rename from src/components/Greeting.jsx
rename to src/components/widgets/Greeting.jsx
diff --git a/src/components/Quote.jsx b/src/components/widgets/Quote.jsx
similarity index 74%
rename from src/components/Quote.jsx
rename to src/components/widgets/Quote.jsx
index 3b3b0b93..3cfcd6fa 100644
--- a/src/components/Quote.jsx
+++ b/src/components/widgets/Quote.jsx
@@ -1,9 +1,8 @@
import React from 'react';
import Quotes from '@muetab/quotes';
-import copy from 'copy-text-to-clipboard';
import FileCopy from '@material-ui/icons/FilterNone';
import { toast } from 'react-toastify';
-import * as Constants from '../modules/constants';
+import * as Constants from '../../modules/constants';
export default class Quote extends React.PureComponent {
constructor(...args) {
@@ -23,10 +22,19 @@ export default class Quote extends React.PureComponent {
}
async getQuote() {
+ const quotePack = JSON.parse(localStorage.getItem('quote_packs'));
+ if (quotePack) {
+ const data = quotePack[Math.floor(Math.random() * quotePack.length)]
+ return this.setState({
+ quote: '"' + data.quote + '"',
+ author: data.author
+ });
+ }
+
if (localStorage.getItem('offlineMode') === 'true') return this.doOffline();
try { // First we try and get a quote from the API...
- let data = await fetch(Constants.API_URL +'/getQuote');
+ let data = await fetch(Constants.API_URL + '/getQuote');
data = await data.json();
if (data.statusCode === 429) this.doOffline(); // If we hit the ratelimit, we fallback to local quotes
this.setState({
@@ -39,8 +47,8 @@ export default class Quote extends React.PureComponent {
}
copyQuote() {
- copy(`${this.state.quote} - ${this.state.author}`);
- toast('Quote copied!');
+ navigator.clipboard.writeText(`${this.state.quote} - ${this.state.author}`);
+ toast(this.props.language.quote);
}
componentDidMount() {
diff --git a/src/components/widgets/Search.jsx b/src/components/widgets/Search.jsx
new file mode 100644
index 00000000..2a937246
--- /dev/null
+++ b/src/components/widgets/Search.jsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import SearchIcon from '@material-ui/icons/Search';
+
+export default class Search extends React.PureComponent {
+ render() {
+ if (localStorage.getItem('searchBar') === 'false') return
;
+
+ let url;
+ let query = 'q';
+
+ switch (localStorage.getItem('searchEngine')) {
+ case 'duckduckgo': url = 'https://duckduckgo.com'; break;
+ case 'google': url = 'https://google.com/search'; break;
+ case 'bing': url = 'https://bing.com/search'; break;
+ case 'yahoo': url ='https://search.yahoo.com/search'; break;
+ case 'ecosia': url = 'https://ecosia.org/search'; break;
+ case 'yandex': url = 'https://yandex.ru/search'; query = 'text'; break;
+ case 'qwant': url = 'https://www.qwant.com/'; break;
+ case 'ask': url = 'https://ask.com/web'; break;
+ case 'startpage': url = 'https://www.startpage.com/sp/search'; break;
+ default: url = 'https://duckduckgo.com'; break;
+ }
+
+ const searchButton = () => {
+ let value = document.getElementById('searchtext').value;
+ if (!value) value = 'mue fast';
+ window.location.href = url + '?q=' + value;
+ }
+
+ return
+ }
+}
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 8d993b54..1bb908fd 100644
--- a/src/index.js
+++ b/src/index.js
@@ -2,6 +2,9 @@ import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
+import './scss/index.scss';
+import 'react-toastify/dist/ReactToastify.css';
+
ReactDOM.render(
,
document.getElementById('root')
diff --git a/src/modules/constants.js b/src/modules/constants.js
index c8ad7242..7ef8eec1 100644
--- a/src/modules/constants.js
+++ b/src/modules/constants.js
@@ -1,2 +1,4 @@
export const API_URL = 'https://api.muetab.xyz';
+export const UNSPLASH_URL = 'https://unsplash.muetab.xyz';
+export const MARKETPLACE_URL = 'https://marketplace.muetab.xyz';
export const OFFLINE_IMAGES = 20;
\ No newline at end of file
diff --git a/src/modules/defaultSettings.json b/src/modules/defaultSettings.json
index d103c2b0..4f6f3909 100644
--- a/src/modules/defaultSettings.json
+++ b/src/modules/defaultSettings.json
@@ -43,10 +43,6 @@
"name": "defaultGreetingMessage",
"value": true
},
- {
- "name": "language",
- "value": "en"
- },
{
"name": "backgroundAPI",
"value": "mue"
@@ -58,5 +54,13 @@
{
"name": "copyButton",
"value": false
+ },
+ {
+ "name": "installed",
+ "value": "[]"
+ },
+ {
+ "name": "searchEngine",
+ "value": "duckduckgo"
}
]
\ No newline at end of file
diff --git a/src/modules/marketplaceFunctions.js b/src/modules/marketplaceFunctions.js
new file mode 100644
index 00000000..220ed6a0
--- /dev/null
+++ b/src/modules/marketplaceFunctions.js
@@ -0,0 +1,6 @@
+export default class MarketplaceFunctions {
+ static urlParser (input) { // based on https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
+ let urlPattern = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/;
+ return input.replace(urlPattern, '$& ');
+ }
+}
\ No newline at end of file
diff --git a/src/modules/settingsFunctions.js b/src/modules/settingsFunctions.js
index 47fd959e..c87f0717 100644
--- a/src/modules/settingsFunctions.js
+++ b/src/modules/settingsFunctions.js
@@ -1,4 +1,6 @@
-function saveFile(data, filename = 'file') {
+import detectBrowserLanguage from 'detect-browser-language';
+
+const saveFile = (data, filename = 'file') => {
if (!data) return console.error('No data');
if (typeof data === 'object') data = JSON.stringify(data, undefined, 4);
@@ -14,47 +16,78 @@ function saveFile(data, filename = 'file') {
a.dispatchEvent(e);
}
-export function exportSettings() {
- let settings = {};
- for (const key of Object.keys(localStorage)) settings[key] = localStorage.getItem(key);
- saveFile(settings, 'mue-settings.json');
-}
+const defaultSettings = require('./defaultSettings.json');
-export function setItem(key, value) {
- let old = localStorage.getItem(key);
- let val = true;
-
- if (old !== null && !value) {
- if (old === 'true') val = false;
- if (old === 'false') val = true;
+export default class SettingsFunctions {
+ static exportSettings() {
+ let settings = {};
+ for (const key of Object.keys(localStorage)) settings[key] = localStorage.getItem(key);
+ saveFile(settings, 'mue-settings.json');
}
- localStorage.setItem(key, val);
-}
+ static setItem(key, value) {
+ let old = localStorage.getItem(key);
+ let val = true;
-export function toggleExtra(element, element2) {
- (element.style.display === 'none' || !element.style.display) ? element.style.display = 'block' : element.style.display = 'none';
- (element2.style.transform === 'rotate(-180deg)') ? element2.style.transform = 'rotate(0)' : element2.style.transform = 'rotate(-180deg)';
-}
+ if (old !== null && !value) {
+ if (old === 'true') val = false;
+ if (old === 'false') val = true;
+ }
-export function setSearchEngine(input) {
- const searchEngineInput = document.getElementById('searchEngineInput');
- if (input === 'custom') {
- searchEngineInput.enabled = 'false';
- searchEngineInput.style.display = 'block';
- } else {
- searchEngineInput.style.display = 'none';
- searchEngineInput.enabled = 'true';
- localStorage.setItem('searchEngine', input);
+ localStorage.setItem(key, val);
}
-}
-export function saveStuff() {
- localStorage.setItem('blur', document.getElementById('blurRange').value); // this is better than inline onChange for performance
- localStorage.setItem('greetingName', document.getElementById('greetingName').value);
- localStorage.setItem('customBackground', document.getElementById('customBackground').value);
- if (!document.getElementById('searchEngineInput').enabled === 'false') {
- localStorage.setItem('customSearchEngine', document.getElementById('searchEngineInput').value);
+ static toggleExtra(element, element2) {
+ (element.style.display === 'none' || !element.style.display) ? element.style.display = 'block' : element.style.display = 'none';
+ (element2.style.transform === 'rotate(-180deg)') ? element2.style.transform = 'rotate(0)' : element2.style.transform = 'rotate(-180deg)';
+ }
+
+ static setSearchEngine(input) {
+ const searchEngineInput = document.getElementById('searchEngineInput');
+ if (input === 'custom') {
+ searchEngineInput.enabled = 'false';
+ searchEngineInput.style.display = 'block';
+ } else {
+ searchEngineInput.style.display = 'none';
+ searchEngineInput.enabled = 'true';
+ localStorage.setItem('searchEngine', input);
+ }
+ }
+
+ static saveStuff() {
+ localStorage.setItem('blur', document.getElementById('blurRange').value); // this is better than inline onChange for performance
+ localStorage.setItem('greetingName', document.getElementById('greetingName').value);
+ localStorage.setItem('customBackground', document.getElementById('customBackground').value);
+ if (!document.getElementById('searchEngineInput').enabled === 'false') {
+ localStorage.setItem('customSearchEngine', document.getElementById('searchEngineInput').value);
+ }
+ window.location.reload();
+ }
+
+ static setDefaultSettings() {
+ localStorage.clear();
+ defaultSettings.forEach(element => localStorage.setItem(element.name, element.value));
+
+ // Set theme depending on user preferred
+ // if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) localStorage.setItem('darkTheme', true);
+ //else localStorage.setItem('darkTheme', false);
+
+ switch(detectBrowserLanguage()) {
+ case 'nl':
+ localStorage.setItem('language', 'nl');
+ break;
+ case 'no':
+ localStorage.setItem('language', 'no');
+ break;
+ case 'fr':
+ localStorage.setItem('language', 'fr');
+ break;
+ default:
+ localStorage.setItem('language', 'en');
+ }
+
+ // Finally we set this to true so it doesn't run the function on every load
+ localStorage.setItem('firstRun', true);
+ window.location.reload();
}
- window.location.reload();
}
\ No newline at end of file
diff --git a/src/scss/_mixins.scss b/src/scss/_mixins.scss
new file mode 100644
index 00000000..5e3f28e7
--- /dev/null
+++ b/src/scss/_mixins.scss
@@ -0,0 +1,28 @@
+// credit: https://joshbroton.com/quick-fix-sass-mixins-for-css-keyframe-animations/
+@mixin animation($animate...) {
+ $max: length($animate);
+ $animations: '';
+
+ @for $i from 1 through $max {
+ $animations: #{$animations + nth($animate, $i)};
+
+ @if $i < $max {
+ $animations: #{$animations + ', '};
+ }
+ }
+ -webkit-animation: $animations;
+ -moz-animation: $animations;
+ animation: $animations;
+}
+
+@mixin keyframes($animationName) {
+ @-webkit-keyframes #{$animationName} {
+ @content;
+ }
+ @-moz-keyframes #{$animationName} {
+ @content;
+ }
+ @keyframes #{$animationName} {
+ @content;
+ }
+}
\ No newline at end of file
diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss
new file mode 100644
index 00000000..3c7b5b81
--- /dev/null
+++ b/src/scss/_variables.scss
@@ -0,0 +1,31 @@
+@use 'sass:map';
+
+$theme-colours: (
+ 'gradient': linear-gradient(90deg, #ffb032 0%, #dd3b67 100%),
+ 'main': rgba(242, 243, 244, 1),
+ 'secondary': rgba(0, 0, 0, 1),
+ 'main-text-color': rgba(242, 243, 244, 1),
+);
+
+$modal: (
+ 'background': #fff,
+ 'text': rgba(0, 0, 0, 1),
+ 'tab-underline': rgba(204, 204, 204, 1),
+ 'tab-underline-active': rgba(0, 0, 0, 1),
+ 'border-radius': 12px,
+);
+
+$marketplace: (
+ 'item-background': rgba(242, 243, 244, 1),
+ 'product-information-backgroud': rgba(242, 243, 244, 1),
+);
+
+$button-colours: (
+ 'confirm': rgba(46, 213, 115, 1),
+ 'reset': rgba(255, 71, 87, 1),
+ 'other': rgba(83, 82, 237, 1),
+);
+
+$main-parts: (
+ 'shadow': 0 0 1rem 0 rgba(0, 0, 0, .2),
+);
\ No newline at end of file
diff --git a/src/scss/index.scss b/src/scss/index.scss
index 60227267..ffdc4d67 100644
--- a/src/scss/index.scss
+++ b/src/scss/index.scss
@@ -1,4 +1,6 @@
-/* Imports */
+@import 'variables';
+@import 'mixins';
+
@import 'modules/clock';
@import 'modules/greeting';
@import 'modules/quote';
@@ -8,6 +10,10 @@
@import 'modules/modal';
@import 'modules/settings';
@import 'modules/toast';
+@import 'modules/marketplace';
+@import 'modules/checkbox';
+@import 'modules/buttons';
+@import 'modules/welcome';
body {
background: #2f3640;
@@ -18,6 +24,16 @@ body {
overflow: hidden;
}
+* {
+ font-family: 'Lexend Deca' !important;
+ outline: none;
+}
+
+@font-face {
+ font-family: 'Lexend Deca';
+ src: url('/./fonts/LexendDeca-Regular.woff2') format('woff2');
+}
+
#center {
margin-left: 2vw;
margin-right: 2vw;
@@ -36,14 +52,14 @@ body {
}
::placeholder {
- color: #ffffff;
+ color: map-get($theme-colours, 'main');
opacity: 1;
}
#root {
min-height: 100vh;
display: grid;
- color: white;
+ color: map-get($theme-colours, 'main-text-color');
}
#backgroundImage {
@@ -52,37 +68,17 @@ body {
background-repeat: no-repeat;
background-position: center;
background-attachment: fixed;
- z-index: 0;
- border: none;
- transform: scale(1.1);
}
.fade-in {
- -webkit-animation: fadein 2s;
- animation: fadein 2s;
- -moz-animation: fadein 2s;
+ @include animation('fadein 2s');
}
-@-webkit-keyframes fadein {
+@include keyframes(fadein) {
from { opacity: 0; }
to { opacity: 1; }
}
-@keyframes fadein {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-@-moz-keyframes fadein {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-@font-face {
- font-family: 'Lexend Deca';
- src: url('/./fonts/LexendDeca-Regular.woff2') format('woff2');
-}
-
.backgroundEffects {
opacity: .7;
transition: ease 0.6s;
@@ -90,15 +86,4 @@ body {
#searchEngine {
width: 130px;
-}
-
-.select-css {
- background: none;
- backdrop-filter: blur(10em);
- height: 34px;
- width: 100px;
- border-image-slice: 1;
- border-image-source: linear-gradient(180deg, #ffb032 0%, #dd3b67 100%);
- border-left: 10px solid;
- font-weight: 400;
}
\ No newline at end of file
diff --git a/src/scss/modules/_buttons.scss b/src/scss/modules/_buttons.scss
new file mode 100644
index 00000000..ec74781c
--- /dev/null
+++ b/src/scss/modules/_buttons.scss
@@ -0,0 +1,160 @@
+%settingsButton {
+ text-align: center;
+ border: none;
+ transition: ease 0.33s;
+ color: map-get($theme-colours, "main");
+ cursor: pointer;
+ display: inline-block;
+ position: relative;
+ padding: 10px 30px;
+ font-size: 20px;
+ border-radius: 24px;
+ background: none;
+ &:hover {
+ outline: none;
+ }
+
+ &:active {
+ outline: none;
+ }
+}
+
+.apply {
+ @extend %settingsButton;
+ margin-right: 20px;
+ background-color: map-get($button-colours, "confirm");
+ border: 2px solid map-get($button-colours, "confirm");
+
+ &:hover {
+ border: 2px solid map-get($button-colours, "confirm");
+ color: map-get($button-colours, "confirm");
+ background: none;
+ }
+}
+
+
+.reset {
+ @extend %settingsButton;
+ background-color: map-get($button-colours, "reset");
+ border: 2px solid map-get($button-colours, "reset");
+ margin-left: 5px;
+
+ &:hover {
+ border: 2px solid map-get($button-colours, "reset");
+ color: map-get($button-colours, "reset");
+ background: none;
+ }
+}
+
+.close {
+ @extend %settingsButton;
+ padding: 10px 50px 10px 50px;
+ background-color: map-get($button-colours, "other");
+ border: 2px solid map-get($button-colours, "other");
+
+ &:hover {
+ color: map-get($button-colours, "other");
+ border: 2px solid map-get($button-colours, "other");
+ background: none;
+ }
+}
+
+.export,
+.uploadbg,
+.import {
+ @extend %settingsButton;
+ background-color: map-get($button-colours, "other");
+ border: 2px solid map-get($button-colours, "other");
+ color: map-get($theme-colours, "main");
+
+ &:hover {
+ color: map-get($button-colours, "other");
+ border: 2px solid map-get($button-colours, "other");
+ background: none;
+ }
+}
+
+.export,
+.import {
+ float: right;
+ margin-left: 20px;
+}
+
+.storebutton {
+ cursor: pointer;
+ font-size: 18px;
+ float: right;
+ vertical-align: middle;
+ padding: 5px 30px;
+ background: none;
+ outline: none;
+ border: none;
+ border: 2px solid #2d3436;
+ border-radius: 24px;
+ font-family: 'Lexend Deca', sans-serif;
+ transition: ease 0.33s;
+
+ &:hover {
+ background: #2d3436;
+ color: map-get($theme-colours, "main");;
+ border: 2px solid #2d3436;
+ }
+}
+
+.dark .storebutton {
+ border: 2px solid map-get($theme-colours, "main");
+ color: map-get($theme-colours, "main");
+
+ &:hover {
+ background: map-get($theme-colours, "main");
+ color: #2d3436;
+ border: 2px solid map-get($theme-colours, "main");
+ }
+}
+
+#item >.removeFromMue {
+ border: 2px solid #ff4757;
+ color: #ff4757;
+
+ &:hover {
+ background: #ff4757;
+ color: map-get($theme-colours, "main");;
+ border: 2px solid #ff4757;
+ }
+
+ @extend .storebutton;
+}
+
+#item .addToMue,
+#item .removeFromMue {
+ margin-top: 5px;
+}
+
+.addToMue {
+ @extend .storebutton;
+}
+
+.goToMarket {
+ float: none;
+ @extend .storebutton;
+}
+
+.sideload {
+ margin-top: 12px;
+}
+
+.seemore {
+ margin-top: 12px;
+}
+
+.seemore {
+ @extend %settingsButton;
+ background-color: #2d3436;
+ border: 2px solid #2d3436;
+
+ &:hover {
+ color: #2d3436;
+ border: 2px solid #2d3436;
+ background: none;
+ }
+}
\ No newline at end of file
diff --git a/src/scss/modules/_checkbox.scss b/src/scss/modules/_checkbox.scss
new file mode 100644
index 00000000..8a4a95f2
--- /dev/null
+++ b/src/scss/modules/_checkbox.scss
@@ -0,0 +1,3 @@
+.MuiCheckbox-colorPrimary.Mui-checked {
+ color: map-get($button-colours, "reset") !important;
+}
\ No newline at end of file
diff --git a/src/scss/modules/_clock.scss b/src/scss/modules/_clock.scss
index cb165118..1a972b5b 100644
--- a/src/scss/modules/_clock.scss
+++ b/src/scss/modules/_clock.scss
@@ -1,39 +1,20 @@
.clock {
font-size: 4em;
- //text-shadow: 5px 2px rgba(0, 0, 0, 0.8);
margin: 0;
- // text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
}
.ampm {
font-size: 0.5em;
}
-.analogclock {
- font-size: 4em;
+.analogclock, .react-clock__face {
margin: 0 auto;
- box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
border-radius: 100%;
box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.3);
+ border: 1px solid map-get($theme-colours, "main");
}
-.react-clock__face {
- border: none;
- outline: none;
- border: 3px #fff solid;
- transition: 2s;
-}
-
-.react-clock__second-hand__body {
- background: #e84118;
- box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
- transition: 2s;
-}
.react-clock__hand__body {
- background: #fff;
+ background: map-get($theme-colours, "main");;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
- transition: 2s;
-}
-.react-clock__mark__body {
- display: none;
}
\ No newline at end of file
diff --git a/src/scss/modules/_credit.scss b/src/scss/modules/_credit.scss
index 51ccc400..8bf8bacd 100644
--- a/src/scss/modules/_credit.scss
+++ b/src/scss/modules/_credit.scss
@@ -21,7 +21,7 @@
cursor: pointer;
}
-.MuiSvgIcon-root {
+.navbar-container > svg, #backgroundCredits > svg {
font-size: calc(10px + 1.5vmin) !important;
position: absolute;
bottom: 2px;
@@ -45,12 +45,13 @@
left: 10px;
-webkit-filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
filter: drop-shadow(0px 3px 3px rgba(0, 0, 0, 0.4));
+
.tooltiptext {
width: 200px;
display: inline-block;
visibility: hidden;
border-radius: 12px;
- background-color: #fff;
+ background-color: map-get($theme-colours, "main");;
color: #000;
font-size: calc(10px + 1.2vmin);
position: absolute;
@@ -63,11 +64,11 @@
transition: opacity 1s;
box-sizing: border-box;
}
-}
-.tooltip:hover .tooltiptext {
- visibility: visible;
- opacity: 1;
+ &:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
+ }
}
#photographer, .locationicon {
diff --git a/src/scss/modules/_marketplace.scss b/src/scss/modules/_marketplace.scss
new file mode 100644
index 00000000..d42db799
--- /dev/null
+++ b/src/scss/modules/_marketplace.scss
@@ -0,0 +1,287 @@
+.tab,
+button.tablinks {
+ margin-top: -10px;
+ font-size: 24px;
+ background: none;
+ border: none;
+ outline: none;
+ color: map-get($modal, "text");
+}
+
+button.tablinks {
+ cursor: pointer;
+ padding: 6px;
+ border-radius: 12px;
+ padding: 10px 30px 10px 30px;
+
+ &:hover {
+ background: rgba(189, 195, 199, .075);
+ }
+
+ &:after {
+ content: "";
+ display: block;
+ margin: 0 auto;
+ width: 50%;
+ padding-top: 10px;
+ border-bottom: 3px solid map-get($modal, "tab-underline");
+ }
+}
+
+#item a {
+ color: map-get($button-colours, "other");
+ cursor: pointer;
+
+ &:hover {
+ opacity: 0.8;
+ }
+}
+
+
+#active:after {
+ content: "";
+ display: block;
+ margin: 0 auto;
+ width: 50%;
+ padding-top: 10px;
+ border-bottom: 3px solid map-get($modal, "tab-underline-active");
+}
+
+.dark {
+
+ .tab,
+ button.tablinks {
+ color: white;
+ }
+
+ #active:after {
+ border-image-slice: 1;
+ border-image-source: map-get($theme-colours, "gradient");
+ border-bottom: 3px solid;
+ }
+}
+
+.tab {
+ margin-left: -3px;
+}
+
+.items {
+ display: flex;
+ flex-flow: wrap;
+ align-items: left;
+ justify-content: left;
+ margin-top: -10px;
+
+ .item {
+ position: relative;
+ border-radius: 12px;
+ height: 80px;
+ width: 270px;
+ background: map-get($marketplace, "item-background");
+ transition: 0.5s;
+ cursor: pointer;
+ margin-right: 20px;
+ margin-bottom: 20px;
+ overflow: none;
+
+ img {
+ height: 100%;
+ width: auto;
+ border-radius: 12px 0 0 12px;
+ background: white;
+ }
+
+ h4 {
+ font-size: 20px;
+ line-height: 20px;
+ font-weight: 600;
+ }
+
+ img,
+ .details {
+ display: inline;
+ }
+
+ .details {
+ position: absolute;
+ left: 90px;
+ top: 15px;
+
+ img {
+ margin-left: 10px;
+ height: 15px;
+ }
+ }
+
+ p {
+ margin-top: 5px;
+ }
+
+ p.desc {
+ margin-top: -14px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ &:hover {
+ transform: scale(1.1);
+ }
+ }
+}
+
+.dark .items .item {
+ background: #2d3436;
+}
+
+p.author {
+ margin-top: -5px;
+}
+
+#item {
+ display: none;
+
+ h1 {
+ font-size: 40px;
+ }
+}
+
+#item>h1,
+#item>.MuiSvgIcon-root {
+ display: inline;
+ font-size: 35px !important;
+}
+
+
+p.description {
+ margin-top: 0px;
+}
+
+.emptyMessage {
+ margin: 0 auto;
+ text-align: center;
+ transform: translateY(30%);
+
+ svg {
+ font-size: 50px;
+ line-height: 0px;
+ margin: 0;
+ margin-bottom: -20px;
+ }
+}
+
+.backArrow {
+ position: relative;
+ cursor: pointer;
+
+ &:hover {
+ color: grey;
+ }
+}
+
+.informationContainer {
+ float: right;
+}
+
+.productInformation {
+ margin-bottom: 20px;
+ padding: 20px;
+ background: map-get($marketplace, "product-information-backgroud");
+ width: 200px;
+ border-radius: 12px;
+
+ li {
+ margin-left: -4px;
+ list-style: none;
+ }
+
+ li.header {
+ text-transform: uppercase;
+ color: #787878;
+ list-style: none;
+ margin-left: -5px;
+ }
+}
+
+.dark .productInformation {
+ background: #2d3436;
+}
+
+#item>img {
+ border-radius: 24px;
+ height: 200px;
+ width: auto;
+}
+
+#marketplace {
+ -webkit-animation: content 0.5s;
+ -moz-animation: content 0.5s;
+ -ms-animation: content 0.5s;
+ -o-animation: content 0.5s;
+ animation: content 0.5s;
+}
+
+@keyframes content {
+ from {
+ opacity: 0;
+ transform: translateY(5%);
+ }
+
+ to {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+
+.banner {
+ text-align: center;
+ background: #54a0ff;
+ border-radius: 24px;
+ padding: 10px;
+ margin: 0;
+ color: map-get($theme-colours, "main");
+ display: none !important;
+}
+
+.featured {
+ background: #2d3436;
+ margin-top: 20px;
+ border-radius: 24px;
+ padding: 50px;
+ color: map-get($theme-colours, "main");
+
+ button {
+ float: left;
+ margin-top: -20px;
+ border: 2px solid map-get($theme-colours, "main");
+ color: map-get($theme-colours, "main");
+
+ &:hover {
+ border: 2px solid map-get($theme-colours, "main");
+ background: map-get($theme-colours, "main");
+ color: #2d3436;
+ }
+ }
+
+ h1 {
+ margin-top: -20px;
+ }
+}
+
+.dark .featured {
+ background: black;
+ color: white;
+}
+
+.requires {
+ float: right;
+}
+
+#seemore {
+ display: none;
+}
+
+#seemore svg {
+ font-size: 35px !important;
+ margin-bottom: -30px;
+}
\ No newline at end of file
diff --git a/src/scss/modules/_modal.scss b/src/scss/modules/_modal.scss
index 7793d183..8c226a4a 100644
--- a/src/scss/modules/_modal.scss
+++ b/src/scss/modules/_modal.scss
@@ -1,6 +1,6 @@
.Modal {
- color: #000;
- background-color: #fff;
+ color: map-get($modal, "text");
+ background-color: map-get($modal, "background");
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
border: none;
opacity: 1;
@@ -9,12 +9,17 @@
cursor: hand;
transition: 0.6s;
transition-timing-function: ease-in;
- border-radius: 12px;
+ border-radius: map-get($modal, "border-radius");
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ user-select: none;
+
&:focus {
outline: 0;
}
}
+
.modalLink {
color: #5352ed;
cursor: pointer;
@@ -42,7 +47,6 @@
.ReactModal__Html--open,
.ReactModal__Body--open {
overflow: hidden;
- /* prevents background page from scrolling when the modal is open */
}
@-webkit-keyframes zoom-in {
@@ -73,11 +77,9 @@
}
}
-
-
.Overlay {
position: fixed;
- z-index: 999999;
+ z-index: 100;
top: 0;
left: 0;
right: 0;
@@ -96,25 +98,44 @@
}
.ReactModal__Content {
- width: 500px;
- max-width: 600px;
+ min-height: calc(100vh - 30vh);
max-height: calc(100vh - 10vh);
box-shadow: 0 0 30px 0 rgba(0, 0, 0, 0.25);
overflow-y: auto;
position: relative;
}
+@media only screen and (max-height: 700px) {
+ .ReactModal__Content {
+ min-height: 500px;
+ max-height: calc(100vh - 30vh);
+ }
+}
+
+@media only screen and (min-height: 700px){
+ .ReactModal__Content {
+ min-height: 600px;
+ }
+}
+
.content {
margin-top: -20px;
+ width: 900px;
+
h1 {
font-size: 35px;
}
+
p {
- margin-top: -20px;
font-size: 16px;
}
+
.columns {
font-size: 15px;
+
+ li {
+ padding-left: 10px;
+ }
}
}
@@ -149,4 +170,17 @@
100% {
-webkit-transform: scale(0);
}
+}
+
+.updateContent {
+ width: 400px;
+ padding: 5px;
+ .closeModal {
+ margin-top: 10px;
+ font-size: 45px;
+ }
+ img {
+ width: 100%;
+ height: auto;
+ }
}
\ No newline at end of file
diff --git a/src/scss/modules/_navbar.scss b/src/scss/modules/_navbar.scss
index 1e936d98..54fc00f1 100644
--- a/src/scss/modules/_navbar.scss
+++ b/src/scss/modules/_navbar.scss
@@ -5,21 +5,24 @@
cursor: pointer;
-webkit-filter: drop-shadow(0 0 6px rgba(0,0,0,.3));
filter: drop-shadow(0 0 6px rgba(0,0,0,.3));
- top: 50px;
+ top: 20px;
+
svg {
transition: ease 0.2s;
+ font-size: calc(10px + 1.5vmin) !important;
}
+
&:hover {
svg {
transform: scale(1.1);
- color: #fff;
+ color: map-get($theme-colours, "main");;
}
}
}
.navbar1 {
@extend %navbar;
- right: 0px;
+ right: 20px;
svg {
-webkit-backface-visibility: hidden;
-webkit-transform: translateZ(0) scale(1.0, 1.0);
@@ -30,7 +33,7 @@
.navbar2 {
@extend %navbar;
- right: 50px;
+ right: 60px;
}
.navbar3 {
diff --git a/src/scss/modules/_quote.scss b/src/scss/modules/_quote.scss
index 69664438..a4f0803c 100644
--- a/src/scss/modules/_quote.scss
+++ b/src/scss/modules/_quote.scss
@@ -1,6 +1,6 @@
.quote {
font-size: 0.8em;
- text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
+ text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
}
@media screen and (min-width: 600px) {
@@ -30,7 +30,10 @@
float: middle;
margin: 0 auto;
text-align: right;
- // transform: rotate(45deg);
+ transition: ease 0.2s !important;
+ &:hover {
+ transform: scale(1.1);
+ }
}
i.material-icons,
@@ -41,7 +44,7 @@ h1.quoteauthor {
button.copyButton {
background: transparent;
border: none;
- color: #fff;
+ color: map-get($theme-colours, "main");;
padding: 20px 20px;
text-align: center;
text-decoration: none;
diff --git a/src/scss/modules/_search.scss b/src/scss/modules/_search.scss
index e653b8bf..6e52fdee 100644
--- a/src/scss/modules/_search.scss
+++ b/src/scss/modules/_search.scss
@@ -5,26 +5,35 @@
display: flex;
flex-direction: row;
display: block;
- color: #ffff;
- font-family: 'Lexend Deca', sans-serif;;
+ color: map-get($theme-colours, "main-text-color");
input[type=text] {
+ width: 140px;
+ margin-left: 12px;
+ border-radius: 24px;
font-size: calc(5px + 1.2vmin);
background: transparent;
- border: 2px solid #ffff;
- padding: 10px;
- color: #ffff;
+ border: none;
+ color: map-get($theme-colours, "main-text-color");
position: absolute;
- box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
+ background-color: rgba(0, 0, 0, 0.1);
+ -webkit-transition: width 0.5s ease-in-out;
+ transition: width 0.5s ease-in-out;
+
+ &:focus {
+ width: 400px;
+ background-color: rgba(0, 0, 0, .3);
+ }
+ }
+
+ .MuiSvgIcon-root {
+ margin-top: 4px;
+ font-size: 30px;
+ filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.3));
+ cursor: pointer;
}
}
.input.searchtext {
border: none;
}
-
-.searchbarform {
- display: flex;
- flex-direction: row;
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, .25);
-}
\ No newline at end of file
diff --git a/src/scss/modules/_settings.scss b/src/scss/modules/_settings.scss
index 0cea8f3a..989171a4 100644
--- a/src/scss/modules/_settings.scss
+++ b/src/scss/modules/_settings.scss
@@ -1,8 +1,5 @@
-$gradient: linear-gradient(90deg, #ffb032 0%, #dd3b67 100%);
-
.switch {
position: relative;
- /* display: inline-block; */
width: 60px;
height: 34px;
float: right;
@@ -35,7 +32,7 @@ $gradient: linear-gradient(90deg, #ffb032 0%, #dd3b67 100%);
width: 26px;
left: 4px;
bottom: 4px;
- background-color: white;
+ background-color: #fff;
-webkit-transition: 0.4s;
transition: 0.4s;
border-radius: 50%;
@@ -52,14 +49,13 @@ input {
padding: 0.5rem 1rem;
box-sizing: border-box;
border-image-slice: 1;
- border-image-source: $gradient;
+ border-image-source: map-get($theme-colours, "gradient");
outline: none;
- font-family: 'Lexend Deca', sans-serif;
background: transparent;
}
- &:checked + .slider {
- background: $gradient;
+ &:checked+.slider {
+ background: map-get($theme-colours, "gradient");
&:before {
-webkit-transform: translateX(26px);
@@ -68,7 +64,7 @@ input {
}
}
- &:focus + .slider {
+ &:focus+.slider {
box-shadow: 0 0 1px #e67e22;
}
}
@@ -83,13 +79,16 @@ input {
background: #34495e;
}
-h4, .switch, .expandIcons {
+h4,
+.switch,
+.expandIcons {
display: inline;
font-size: 1.4em;
font-weight: 100;
}
-h4, #engines {
+h4,
+#engines {
display: inline;
}
@@ -97,101 +96,15 @@ h4, #engines {
margin-bottom: 20px;
}
-%settingsButton {
- text-align: center;
- border: none;
- transition: 0.25s;
- color: #fff;
- cursor: pointer;
- display: inline-block;
- box-shadow: 20px #000;
- position: relative;
- padding: 15px;
- width: 120px;
- font-size: 1.1em;
- font-family: 'Lexend Deca', sans-serif;
-
- &:hover {
- transform: translateY(-0.10em);
- outline: none;
- }
-
- &:before {
- content: '';
- position: absolute;
- width: 0%;
- top: 0;
- left: 0;
- height: 100%;
- transition: 0.3s linear;
- z-index: -1;
- color: #fff;
- }
-
- &:hover:before {
- width: 100%;
- }
-
- &:active {
- outline: none;
- }
-}
-
-.apply {
- @extend %settingsButton;
- background-color: #dd3b67;
- &:before {
- background: $gradient;
- }
-}
-
-.import {
- float: right;
- @extend %settingsButton;
- background-color: #dd3b67;
- margin-right: 5px;
-
- &:before {
- background: $gradient;
- }
-}
-
-.export {
- float: right;
- @extend %settingsButton;
- background-color: #dd3b67;
-
- &:before {
- background: $gradient;
- }
-}
-
-.uploadbg {
- @extend %settingsButton;
- background-color: #dd3b67;
- width: auto;
- height: auto;
- padding: 5px 18px;
-
- &:before {
- background: $gradient;
- }
-}
-
-.reset {
- @extend %settingsButton;
- background-color: #ffb032;
- margin-left: 5px;
- &:before {
- background: linear-gradient(90deg, #dd3b67 0%, #ffb032 100%);
- }
-}
-
.expandIcons {
position: relative;
font-size: 25px;
vertical-align: middle;
display: inline-flex;
+}
+
+h4,
+.expandIcons {
cursor: pointer;
}
@@ -202,17 +115,28 @@ h4, #engines {
border-width: 5px;
border-image-source: linear-gradient(to bottom, #ffb032 0%, #dd3b67 100%);
- > p {
+ p {
margin: 0;
padding: 0;
}
+
+ select {
+ margin-left: 20px;
+ }
+
+ input[type=text],
+ input[type=range],
+ p,
+ button {
+ margin-top: 10px;
+ }
}
ul {
padding-left: 5px;
margin: 0;
- > label {
+ >label {
vertical-align: middle;
}
}
@@ -238,7 +162,7 @@ li {
width: 25px;
height: 25px;
border-radius: 12px;
- background: $gradient;
+ background: map-get($theme-colours, "gradient");
cursor: pointer;
}
@@ -246,7 +170,7 @@ li {
width: 25px;
height: 25px;
border-radius: 12px;
- background: $gradient;
+ background: map-get($theme-colours, "gradient");
cursor: pointer;
}
}
@@ -255,7 +179,7 @@ input[type=color] {
border-radius: 100%;
height: 30px;
width: 30px;
- box-shadow: 0 0 1rem 0 rgba(0, 0, 0, .2);
+ box-shadow: map-get($main-parts, "shadow");
border: none;
outline: none;
-webkit-appearance: none;
@@ -280,15 +204,16 @@ input[type=checkbox] {
padding-left: 7px;
}
-select#language {
- float: right;
+select {
background: none;
- backdrop-filter: blur(10em);
height: 34px;
- width: 100px;
+ width: 120px;
border-image-slice: 1;
border-image-source: linear-gradient(180deg, #ffb032 0%, #dd3b67 100%);
border-left: 10px solid;
- font-weight: 400;
- font-family: 'Lexend Deca', sans-serif;
+ color: map-get($modal, "text");
+}
+
+select#language {
+ float: right;
}
\ No newline at end of file
diff --git a/src/scss/modules/_toast.scss b/src/scss/modules/_toast.scss
index 9fe4bf61..25b5b3a8 100644
--- a/src/scss/modules/_toast.scss
+++ b/src/scss/modules/_toast.scss
@@ -1,5 +1,4 @@
.Toastify__toast-body {
- font-family: 'Lexend Deca', sans-serif !important;
color: #000 !important;
font-size: 16px !important;
padding: 15px 20px !important;
diff --git a/src/scss/modules/_welcome.scss b/src/scss/modules/_welcome.scss
new file mode 100644
index 00000000..76b6c4e4
--- /dev/null
+++ b/src/scss/modules/_welcome.scss
@@ -0,0 +1,42 @@
+.welcomeModalText {
+ line-height: 2px;
+ h2.subtitle {
+ font-size: 24px;
+ color: #535353;
+ text-transform: uppercase;
+ }
+ h1.welcometitle {
+ font-size: 50px;
+ }
+}
+
+.welcomeContent {
+ text-align: center;
+ padding: 25px;
+ a {
+ text-decoration: none;
+ line-height: 20px !important;
+ color: #5352ED;
+ cursor: pointer;
+ &:hover {
+ opacity: 0.8;
+ }
+ }
+ img.icon, svg {
+ margin-top: -12px;
+ padding: 10px;
+ cursor: pointer;
+ transition: ease 0.2s;
+ &:hover {
+ transform: scale(1.1);
+ }
+ }
+ p {
+ margin-top: 0.7rem;
+ line-height: 1em;
+ }
+ img, svg {
+ height: 24px;
+ width: auto;
+ }
+}
\ No newline at end of file
diff --git a/src/translations/en.json b/src/translations/en.json
index fb63f262..43ff2cc1 100644
--- a/src/translations/en.json
+++ b/src/translations/en.json
@@ -9,15 +9,19 @@
},
"credit": "Photo by",
"search": "Search",
+ "modals": {
+ "title": "Options",
+ "settings": "Settings",
+ "addons": "My Add-ons",
+ "marketplace": "Marketplace"
+ },
"settings": {
- "title": "Settings",
- "description": "Edit different components to make Mue your new tab.",
"time": {
"title": "Time",
"seconds": "Seconds",
"twentyfourhour": "24 Hour",
"ampm": "AM/PM (12 hour)",
- "zero": "Extra Zero",
+ "zero": "Zero-padded",
"analog": "Analog"
},
"greeting": {
@@ -68,7 +72,59 @@
"loading": "Loading..."
},
"toasts": {
- "quote": "Quote Copied!",
- "reset": "Reset successfully!"
+ "quote": "Quote Copied",
+ "reset": "Reset successfully",
+ "installed": "Successfully installed",
+ "removed": "Successfully removed",
+ "error": "Something went wrong"
+ },
+ "marketplace": {
+ "photo_packs": "Photo Packs",
+ "quote_packs": "Quote Packs",
+ "preset_settings": "Preset Settings",
+ "themes": "Themes",
+ "product": {
+ "overview": "Overview",
+ "information": "Information",
+ "last_updated": "Last Updated",
+ "version": "Version",
+ "author": "Author",
+ "notice": {
+ "title": "Notice",
+ "description": "In order for the change to take place, the page must be refreshed."
+ },
+ "buttons": {
+ "addtomue": "Add To Mue",
+ "remove": "Remove"
+ }
+ },
+ "offline": {
+ "title": "Looks like you're offline",
+ "description": "Please connect to the internet."
+ },
+ "see_more": "See More"
+ },
+ "addons": {
+ "added": "Added",
+ "product": {
+ "overview": "Overview",
+ "information": "Information",
+ "last_updated": "Last Updated",
+ "version": "Version",
+ "author": "Author",
+ "notice": {
+ "title": "Notice",
+ "description": "In order for the change to take place, the page must be refreshed."
+ },
+ "buttons": {
+ "addtomue": "Add To Mue",
+ "remove": "Remove"
+ }
+ },
+ "empty": {
+ "title": "It's empty here",
+ "description": "Head to the marketplace to add some.",
+ "button": "Take me there"
+ }
}
}
\ No newline at end of file
diff --git a/src/translations/fr.json b/src/translations/fr.json
index fb63f262..4fc12325 100644
--- a/src/translations/fr.json
+++ b/src/translations/fr.json
@@ -1,74 +1,130 @@
{
"greeting": {
- "morning": "Good Morning",
- "afternoon": "Good Afternoon",
- "evening": "Good Evening",
- "christmas": "Merry Christmas",
- "newyear": "Happy new year",
- "halloween": "Happy Halloween"
+ "morning": "Bonjour",
+ "afternoon": "Bonne après-midi",
+ "evening": "Bonsoir",
+ "christmas": "Bonne Noël",
+ "newyear": "Bonne année",
+ "halloween": "Joyeux Halloween"
+ },
+ "credit": "Photo par",
+ "search": "Trouver",
+ "modals": {
+ "title": "Options",
+ "settings": "Parametres",
+ "addons": "Mes Options",
+ "marketplace": "Marché"
},
- "credit": "Photo by",
- "search": "Search",
"settings": {
- "title": "Settings",
- "description": "Edit different components to make Mue your new tab.",
"time": {
- "title": "Time",
+ "title": "Temps",
"seconds": "Seconds",
- "twentyfourhour": "24 Hour",
+ "twentyfourhour": "24 Heures",
"ampm": "AM/PM (12 hour)",
- "zero": "Extra Zero",
- "analog": "Analog"
+ "zero": "Zero-padded",
+ "analog": "Analogue"
},
"greeting": {
- "title": "Greeting",
- "events": "Events",
- "default": "Default Greeting Message",
- "name": "Name for greeting"
+ "title": "Salutation",
+ "events": "Événements",
+ "default": "Défaut Salutation",
+ "name": "Nom Pour Salutation"
},
"quote": {
- "title": "Quote",
- "copy": "Copy Button"
+ "title": "Citation",
+ "copy": "Au bouton copie"
},
"background": {
- "title": "Background",
- "API": "Background API",
- "blur": "Adjust Blur",
- "customURL": "Custom Background URL",
- "custombackground": "Custom Background",
- "customcolour": "Custom Background Colour"
+ "title": "Fond",
+ "API": "Fond API",
+ "blur": "Ajuster le flou",
+ "customURL": "URL D'arrière-plan personnalisée",
+ "custombackground": "D'arrière-plan personnalisée",
+ "customcolour": "Couleur d'arrière-plan personnalisée"
},
"searchbar": {
- "title": "Search Bar",
- "searchengine": "Search Engine"
+ "title": "Barre de Recherche",
+ "searchengine": "Moteur de recherche"
},
- "offline": "Offline Mode",
+ "offline": "Mode Hors-Ligne",
"experimental": {
- "title": "Experimental",
- "webp": "Enable WebP",
- "dark": "Dark Theme",
+ "title": "Expérimental",
+ "webp": "Activer WebP",
+ "dark": "Thème sombre",
"animations": "Animations"
},
- "language": "Language",
- "apply": "Apply",
+ "language": "Langue",
+ "apply": "Appliquer",
"reset": "Reset",
- "import": "Import",
- "export": "Export"
+ "import": "Importer",
+ "export": "Exporter"
},
"update": {
- "title": "Update",
+ "title": "Actualiser",
"offline": {
- "title": "Offline",
- "description": "Cannot get update logs while in offline mode"
+ "title": "Hors ligne",
+ "description": "Peut pas se connecter à Internet"
},
"error": {
- "title": "Error",
+ "title": "Erreur",
"content": "Could not connect to the server"
},
- "loading": "Loading..."
+ "loading": "Chargement..."
},
"toasts": {
- "quote": "Quote Copied!",
- "reset": "Reset successfully!"
+ "quote": "Citation Copié",
+ "reset": "Réinitaliser avec succès",
+ "installed": "Installé avec succès",
+ "removed": "Enlevée avec succès",
+ "error": "Quelque chose a mal tourné."
+ },
+ "marketplace": {
+ "photo_packs": "Des Photos Packs",
+ "quote_packs": "Des Citation Packs",
+ "preset_settings": "Paramètres de prédéterminée",
+ "themes": "Thème",
+ "product": {
+ "overview": "Aperçu",
+ "information": "Information",
+ "last_updated": "Dernière mise à jour",
+ "version": "Version",
+ "author": "Auteur",
+ "notice": {
+ "title": "Écriteau",
+ "description": "S'il vous plait, recharger la page."
+ },
+ "buttons": {
+ "addtomue": "Ajouter au Mue",
+ "remove": "Enlever"
+ }
+ },
+ "offline": {
+ "title": "Vous êtes hors ligne",
+ "description": "Veuillez vous connecter à l'internet."
+ },
+ "see_more": "Voir de Plus"
+ },
+ "addons": {
+ "added": "Ajoutée",
+ "product": {
+ "overview": "Aperçu",
+ "information": "Informations",
+ "last_updated": "Dernière mise à jour",
+ "version": "Version",
+ "author": "Auteure",
+ "notice": {
+ "title": "Écriteau",
+ "description": "S'il vous plait, recharger la page."
+ },
+ "buttons": {
+ "addtomue": "Ajouter au Mue",
+ "remove": "Enlever"
+ }
+ },
+ "empty": {
+ "title": "Il est vide ici",
+ "description": "Aller su le marché pour en ajouter.",
+ "button": "Naviguer vers le marché"
+ }
}
}
\ No newline at end of file
diff --git a/src/translations/nl.json b/src/translations/nl.json
index fb63f262..0045fd0a 100644
--- a/src/translations/nl.json
+++ b/src/translations/nl.json
@@ -1,74 +1,130 @@
{
"greeting": {
- "morning": "Good Morning",
- "afternoon": "Good Afternoon",
- "evening": "Good Evening",
- "christmas": "Merry Christmas",
- "newyear": "Happy new year",
- "halloween": "Happy Halloween"
+ "morning": "Goedemorgen",
+ "afternoon": "Goedemiddag",
+ "evening": "Goedenavond",
+ "christmas": "Fijne kerstdagen",
+ "newyear": "Gelukkig nieuw jaar",
+ "halloween": "Fijne halloween"
+ },
+ "credit": "Afbeelding door",
+ "search": "Zoeken",
+ "modals": {
+ "title": "Opties",
+ "settings": "Instellingen",
+ "addons": "Mijn Extensies",
+ "marketplace": "Marktplaats"
},
- "credit": "Photo by",
- "search": "Search",
"settings": {
- "title": "Settings",
- "description": "Edit different components to make Mue your new tab.",
"time": {
- "title": "Time",
- "seconds": "Seconds",
- "twentyfourhour": "24 Hour",
- "ampm": "AM/PM (12 hour)",
- "zero": "Extra Zero",
- "analog": "Analog"
+ "title": "Tijd",
+ "seconds": "Seconden",
+ "twentyfourhour": "24 uurs",
+ "ampm": "AM/PM (12 uurs)",
+ "zero": "Nul Opvulling",
+ "analog": "Analoog"
},
"greeting": {
- "title": "Greeting",
- "events": "Events",
- "default": "Default Greeting Message",
- "name": "Name for greeting"
+ "title": "Groeten",
+ "events": "Evenementen",
+ "default": "Standaard begroetingsnaam",
+ "name": "Naam Voor Groet"
},
"quote": {
- "title": "Quote",
- "copy": "Copy Button"
+ "title": "Citaat",
+ "copy": "Kopieer Knop"
},
"background": {
- "title": "Background",
- "API": "Background API",
- "blur": "Adjust Blur",
- "customURL": "Custom Background URL",
- "custombackground": "Custom Background",
- "customcolour": "Custom Background Colour"
+ "title": "Achtergrond",
+ "API": "Achtergrond API",
+ "blur": "Onscherpte Aanpassen",
+ "customURL": "Aangepaste Achtergrond URL",
+ "custombackground": "Aangepaste Achtergrond",
+ "customcolour": "Aangepaste Achtergrondkleur"
},
"searchbar": {
- "title": "Search Bar",
- "searchengine": "Search Engine"
+ "title": "Zoekbalk",
+ "searchengine": "Zoekmachine"
},
- "offline": "Offline Mode",
+ "offline": "Offline Modus",
"experimental": {
- "title": "Experimental",
- "webp": "Enable WebP",
- "dark": "Dark Theme",
- "animations": "Animations"
+ "title": "Experimenteel",
+ "webp": "WebP Gebruiken",
+ "dark": "Donker Thema",
+ "animations": "Animaties"
},
- "language": "Language",
- "apply": "Apply",
- "reset": "Reset",
- "import": "Import",
- "export": "Export"
+ "language": "Taal",
+ "apply": "Toepassen",
+ "reset": "Resetten",
+ "import": "Importeren",
+ "export": "Exporteren"
},
"update": {
- "title": "Update",
+ "title": "Veranderingen",
"offline": {
"title": "Offline",
- "description": "Cannot get update logs while in offline mode"
+ "description": "Kan veranderingen logboek niet verkrijgen in offline modus"
},
"error": {
- "title": "Error",
- "content": "Could not connect to the server"
+ "title": "Fout",
+ "content": "Kon niet verbinden met de servers"
},
- "loading": "Loading..."
+ "loading": "Aan het laden..."
},
"toasts": {
- "quote": "Quote Copied!",
- "reset": "Reset successfully!"
+ "quote": "Quote Copied",
+ "reset": "Reset successfully",
+ "installed": "Successvol geïnstalleerd",
+ "removed": "Successvol verwijderd",
+ "error": "Iets is verkeerd gegaan"
+ },
+ "marketplace": {
+ "photo_packs": "Afbeelding Pakketten",
+ "quote_packs": "Citaat Pakketten",
+ "preset_settings": "Vooraf ingestelde instellingen",
+ "themes": "Themas",
+ "product": {
+ "overview": "Overzicht",
+ "information": "Informatie",
+ "last_updated": "Laatst Geüpdatet",
+ "version": "Versie",
+ "author": "Auteur",
+ "notice": {
+ "title": "Aankondiging",
+ "description": "De veranderingen gaan in zodra je de pagina herlaad."
+ },
+ "buttons": {
+ "addtomue": "Voeg aan Mue toe",
+ "remove": "Verwijder"
+ }
+ },
+ "offline": {
+ "title": "Het ziet er uit dat je offline bent",
+ "description": "Verbind met het internet."
+ },
+ "see_more": "Zie Meer"
+ },
+ "addons": {
+ "added": "Toegevoegd",
+ "product": {
+ "overview": "Overzicht",
+ "information": "Informatie",
+ "last_updated": "Laatst Geüpdatet",
+ "version": "Versie",
+ "author": "Auteur",
+ "notice": {
+ "title": "Aankondiging",
+ "description": "De veranderingen gaan in zodra je de pagina herlaad."
+ },
+ "buttons": {
+ "addtomue": "Voeg aan Mue toe",
+ "remove": "Verwijder"
+ }
+ },
+ "empty": {
+ "title": "Het is hier leeg",
+ "description": "Ga naar de marktplaats om een paar extensies toe te veogen.",
+ "button": "Breng me naar de marktplaats"
+ }
}
-}
\ No newline at end of file
+}
diff --git a/src/translations/no.json b/src/translations/no.json
new file mode 100644
index 00000000..16a46b84
--- /dev/null
+++ b/src/translations/no.json
@@ -0,0 +1,130 @@
+{
+ "greeting": {
+ "morning": "God Morgen",
+ "afternoon": "God Ettermiddag",
+ "evening": "God Kveld",
+ "christmas": "God Jul",
+ "newyear": "Godt Nyttår",
+ "halloween": "Ha en god Halloween"
+ },
+ "credit": "Bilde av",
+ "search": "Søk",
+ "modals": {
+ "title": "Options",
+ "settings": "Instillinger",
+ "addons": "Mine add-ons",
+ "marketplace": "Markedsplass"
+ },
+ "settings": {
+ "time": {
+ "title": "Tid",
+ "seconds": "Sekunder",
+ "twentyfourhour": "24 Timer",
+ "ampm": "AM/PM (12 Timer)",
+ "zero": "Ekstra Null",
+ "analog": "Analog"
+ },
+ "greeting": {
+ "title": "Hallo",
+ "events": "Planer",
+ "default": "Standard Hallo Melding",
+ "name": "Navn for Hallo"
+ },
+ "quote": {
+ "title": "Sitat",
+ "copy": "Kopier knapp"
+ },
+ "background": {
+ "title": "Bakgrunn",
+ "API": "Bakgrunn API",
+ "blur": "Juster Blur",
+ "customURL": "Personlig bakgrunn URL",
+ "custombackground": "Personlig bakgrunn",
+ "customcolour": "Personlig Bakgrunn Farge"
+ },
+ "searchbar": {
+ "title": "Søkebar",
+ "searchengine": "Søkemotor"
+ },
+ "offline": "Frakoblet Modus",
+ "experimental": {
+ "title": "Eksperimental",
+ "webp": "Skru på WebP",
+ "dark": "Mørkt tema",
+ "animations": "Animasjoner"
+ },
+ "language": "Språk",
+ "apply": "Bruk",
+ "reset": "Nullstill",
+ "import": "Importer",
+ "export": "Eksporter"
+ },
+ "update": {
+ "title": "Oppdater",
+ "offline": {
+ "title": "Offline",
+ "description": "Kan ikke få oppdatering loggene når i offline modus."
+ },
+ "error": {
+ "title": "Error",
+ "content": "Kan ikke koble til serveren."
+ },
+ "loading": "Laster..."
+ },
+ "toasts": {
+ "quote": "Sitat kopiert",
+ "reset": "Tilbakestillte vellykket",
+ "installed": "Installert",
+ "removed": "Fjernet",
+ "error": "Noe gikk galt"
+ },
+ "marketplace": {
+ "photo_packs": "Bilde pakker",
+ "quote_packs": "Sitat pakker",
+ "preset_settings": "Preset instillinger",
+ "themes": "Themes",
+ "product": {
+ "overview": "Oversikt",
+ "information": "Informasjon",
+ "last_updated": "Sist oppdatert",
+ "version": "Versjon",
+ "author": "Forfatter",
+ "notice": {
+ "title": "Vær oppmerksom",
+ "description": "For at endringen skal ta skje, må siden relastes."
+ },
+ "buttons": {
+ "addtomue": "Legg Til Mue",
+ "remove": "Fjern"
+ }
+ },
+ "offline": {
+ "title": "Ser ut som at du er offiline.",
+ "description": "Vær så snill, koble til internettet."
+ },
+ "see_more": "Se mer"
+ },
+ "addons": {
+ "added": "Lagt til",
+ "product": {
+ "overview": "Oversikt",
+ "information": "Informasjon",
+ "last_updated": "Sist oppdatert",
+ "version": "Versjon",
+ "author": "Forfatter",
+ "notice": {
+ "title": "Vær oppmerksom",
+ "description": "For at endringen skal ta skje, må siden relastes."
+ },
+ "buttons": {
+ "addtomue": "Legg Til Mue",
+ "remove": "Fjern"
+ }
+ },
+ "empty": {
+ "title": "Det er tomt her.",
+ "description": "Gå til markedsplassen å legg til noe.",
+ "button": "Ta meg der"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/translations/ru.json b/src/translations/ru.json
new file mode 100644
index 00000000..bee579b1
--- /dev/null
+++ b/src/translations/ru.json
@@ -0,0 +1,74 @@
+{
+ "greeting": {
+ "morning": "Доброе утро",
+ "afternoon": "Добрый день",
+ "evening": "Добрый вечер",
+ "christmas": "С Рождеством",
+ "newyear": "С Новым Годом",
+ "halloween": "Счастливого Хэллоуина"
+ },
+ "credit": "Фото",
+ "search": "Поиск",
+ "settings": {
+ "title": "Настройки",
+ "description": "Измените компоненты Mue по своему вкусу.",
+ "time": {
+ "title": "Время",
+ "seconds": "Секунды",
+ "twentyfourhour": "24 Часа",
+ "ampm": "AM/PM (12 часов)",
+ "zero": "Дополнительный ноль",
+ "analog": "Аналоговое"
+ },
+ "greeting": {
+ "title": "Приветствие",
+ "events": "События",
+ "default": "Сообщение с приветствием по-умолчанию",
+ "name": "Имя для приветствия"
+ },
+ "quote": {
+ "title": "Цитата",
+ "copy": "Кнопка копирования"
+ },
+ "background": {
+ "title": "Фон",
+ "API": "API для фона",
+ "blur": "Размытие",
+ "customURL": "Ссылка для пользовательского фона",
+ "custombackground": "Пользовательский фон",
+ "customcolour": "Пользовательский цвет фона"
+ },
+ "searchbar": {
+ "title": "Панель поиска",
+ "searchengine": "Поисковый движок"
+ },
+ "offline": "Офлайн режим",
+ "experimental": {
+ "title": "Экспериментальные настройки",
+ "webp": "Включить WebP",
+ "dark": "Тёмная тема",
+ "animations": "Анимации"
+ },
+ "language": "Язык",
+ "apply": "Применить",
+ "reset": "Сбросить",
+ "import": "Импорт",
+ "export": "Экспорт"
+ },
+ "update": {
+ "title": "Обновление",
+ "offline": {
+ "title": "Офлайн",
+ "description": "Не удалось получить журнал обновления в офлайн режиме"
+ },
+ "error": {
+ "title": "Ошибка",
+ "content": "Не удалось подключиться к серверу"
+ },
+ "loading": "Загрузка..."
+ },
+ "toasts": {
+ "quote": "Цитата скопирована!",
+ "reset": "Сброшено!"
+ }
+}
\ No newline at end of file