From a554c0e660056f9ec0f547ea6aae457bbc96f441 Mon Sep 17 00:00:00 2001 From: Chad Scharf <3904944+cscharf@users.noreply.github.com> Date: Thu, 3 Jun 2021 15:49:14 -0400 Subject: [PATCH] Revert "Theme Support with a Dark Mode (#974)" (#1011) This reverts commit cf24113924eda7f53d5b690117d092ac19f088eb. --- src/app/accounts/login.component.html | 2 +- src/app/services/services.module.ts | 13 +- src/app/settings/options.component.html | 11 - src/app/settings/options.component.ts | 27 -- src/app/vault/add-edit.component.html | 2 +- src/images/loading-white.svg | 6 - src/images/loading.svg | 4 +- src/images/logo-white@2x.png | Bin 38605 -> 0 bytes src/images/totp-countdown.png | Bin 2208 -> 1636 bytes src/index.html | 2 +- src/locales/en/messages.json | 18 -- src/scss/styles.scss | 379 +++++++----------------- src/scss/variables.scss | 150 ---------- src/services/htmlStorage.service.ts | 8 +- webpack.config.js | 2 +- 15 files changed, 114 insertions(+), 510 deletions(-) delete mode 100644 src/images/loading-white.svg delete mode 100644 src/images/logo-white@2x.png delete mode 100644 src/scss/variables.scss diff --git a/src/app/accounts/login.component.html b/src/app/accounts/login.component.html index a130ff117f..97d5c4783a 100644 --- a/src/app/accounts/login.component.html +++ b/src/app/accounts/login.component.html @@ -1,7 +1,7 @@
- +

{{'loginOrCreateNewAccount' | i18n}}

diff --git a/src/app/services/services.module.ts b/src/app/services/services.module.ts index 505c212cc2..eb11b91d14 100644 --- a/src/app/services/services.module.ts +++ b/src/app/services/services.module.ts @@ -167,18 +167,11 @@ export function initFactory(): Function { authService.init(); const htmlEl = window.document.documentElement; htmlEl.classList.add('locale_' + i18nService.translationLocale); - const theme = await storageService.get(ConstantsService.themeKey); + let theme = await storageService.get(ConstantsService.themeKey); if (theme == null) { - htmlEl.classList.add('themeDefaultSet'); - } else { - htmlEl.classList.add(theme); - } - if (window.matchMedia('(prefers-color-scheme: dark)').matches && htmlEl.classList.contains('themeDefaultSet')) { - htmlEl.classList.add('themeDark'); - } - if (window.matchMedia('(prefers-color-scheme: light)').matches && htmlEl.classList.contains('themeDefaultSet')) { - htmlEl.classList.add('themeLight'); + theme = 'light'; } + htmlEl.classList.add('theme_' + theme); stateService.save(ConstantsService.disableFaviconKey, await storageService.get(ConstantsService.disableFaviconKey)); stateService.save('enableGravatars', await storageService.get('enableGravatars')); diff --git a/src/app/settings/options.component.html b/src/app/settings/options.component.html index 7fba5cf07a..b369b90f6f 100644 --- a/src/app/settings/options.component.html +++ b/src/app/settings/options.component.html @@ -87,17 +87,6 @@
{{'enableFullWidthDesc' | i18n}}
-
-
-
- - - {{'themeDesc' | i18n}} -
-
-
diff --git a/src/app/settings/options.component.ts b/src/app/settings/options.component.ts index ca1cbfb1ca..3ad8be69a7 100644 --- a/src/app/settings/options.component.ts +++ b/src/app/settings/options.component.ts @@ -26,11 +26,9 @@ export class OptionsComponent implements OnInit { disableIcons: boolean; enableGravatars: boolean; enableFullWidth: boolean; - theme: string; locale: string; vaultTimeouts: any[]; localeOptions: any[]; - themeOptions: any[]; private startingLocale: string; @@ -62,11 +60,6 @@ export class OptionsComponent implements OnInit { localeOptions.sort(Utils.getSortFunction(i18nService, 'name')); localeOptions.splice(0, 0, { name: i18nService.t('default'), value: null }); this.localeOptions = localeOptions; - this.themeOptions = [ - { name: i18nService.t('themeDefault'), value: 'themeDefaultSet' }, - { name: i18nService.t('themeLight'), value: 'themeLight' }, - { name: i18nService.t('themeDark'), value: 'themeDark' }, - ]; } async ngOnInit() { @@ -76,7 +69,6 @@ export class OptionsComponent implements OnInit { this.enableGravatars = await this.storageService.get('enableGravatars'); this.enableFullWidth = await this.storageService.get('enableFullWidth'); this.locale = this.startingLocale = await this.storageService.get(ConstantsService.localeKey); - this.theme = await this.storageService.get(ConstantsService.themeKey); } async submit() { @@ -88,7 +80,6 @@ export class OptionsComponent implements OnInit { await this.stateService.save('enableGravatars', this.enableGravatars); await this.storageService.save('enableFullWidth', this.enableFullWidth); this.messagingService.send('setFullWidth'); - await this.storageService.save('theme', this.theme); await this.storageService.save(ConstantsService.localeKey, this.locale); if (this.locale !== this.startingLocale) { window.location.reload(); @@ -110,22 +101,4 @@ export class OptionsComponent implements OnInit { } this.vaultTimeoutAction = newValue; } - - async themeChanged(themeUpdate: string) { - const theme = ['themeDefaultSet', 'themeDark', 'themeLight']; - const htmlEl = window.document.documentElement; - theme.forEach(element => { - htmlEl.classList.remove(element); - }); - if (themeUpdate === 'themeDefaultSet') { - if (window.matchMedia('(prefers-color-scheme: dark)').matches) { - htmlEl.classList.add('themeDark', themeUpdate); - } - if (window.matchMedia('(prefers-color-scheme: light)').matches) { - htmlEl.classList.add('themeLight', themeUpdate); - } - } else { - htmlEl.classList.add(themeUpdate); - } - } } diff --git a/src/app/vault/add-edit.component.html b/src/app/vault/add-edit.component.html index fb162ec01f..d31b95feba 100644 --- a/src/app/vault/add-edit.component.html +++ b/src/app/vault/add-edit.component.html @@ -103,7 +103,7 @@
- diff --git a/src/images/loading-white.svg b/src/images/loading-white.svg deleted file mode 100644 index f7cf7935b0..0000000000 --- a/src/images/loading-white.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - Loading... - - \ No newline at end of file diff --git a/src/images/loading.svg b/src/images/loading.svg index 0ca7925a24..7076310516 100644 --- a/src/images/loading.svg +++ b/src/images/loading.svg @@ -1,6 +1,6 @@  - Loading... - \ No newline at end of file + diff --git a/src/images/logo-white@2x.png b/src/images/logo-white@2x.png deleted file mode 100644 index 718a31bdee9895a00b2310ab5c252dc653aa74f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38605 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Ν>MyJdp+ln<+$@oTA7Y{mGh~~tA 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 qh&xe_hT3ST;VgkklQeSaefwW^{L9 za%BKPWN%_+AW3auXJt}lVPtu6$z?nM00s6*L_t(|+U#0QZ`xQCeIa~>#37+++-B&Y z8M#qVRW>M#5$XtOc3Jv|vdn50Y$8>vydev!%9@G^O@cxR#D9tT$k&|bXT!rb#t>MI zuOh|9e$UVM+;i@|wpX5?pUGr9Z+DwF{f<7ke|&1|_xNQi5s9pZl8NZfW^8Y3jRdx6 zTXBU10H}>y^-{xz$6#P1y%8jF0~>)Wmk3F%c~|+j&A>>mMfSE6J3?$dwwj2AOJB}L z=V9E62~7UC)PLS~z?j8Y*tQQa)P{x)z>wWbzTS*YM$-fa;C)t`k|^YU-3lDKV3sJ~ zTc8Lw5cQdz^+{upRGK$EAg2!=`QI@F0|TEf3=+lx{6L#xn13PX|C!x2QL)s|yG{#iIwb1l zEu4sa?vX#dOW{A>@0fM4k?k>I;Mtc!Vn`P1tGQZ@<%dT0^KW-scxD!w{|g03P8n-fYU0?6-)^r_NPo=UW#Eq?je0}O=dGp2#k5G2j*czo zYQ8C>Q(JWvkvhD3DlHLJ(|RNopT$dKQ<79pmPg=aC8b<%^fKHX_G*gKkcvf8F3$nU zpv*t}@W>^4pSFAJu~nD&t-}5JG=B?qRZ6EU=Mm*wiyvTBYm_DrGZbA73V~^Qr$NMI z!helTh)*fYhX94ZI;tUiS<&v-T&DC`nFZkfqMPAC{n`e};DP05H!Hy|)N<*h)-#w_p5P?v4q}A^jp+Tn*iep3m6oYEvpdT^r426%G9Mfe z2o;RV#1{brMC_eR|B@1_A@!_sJ^2~eG=JkFF_9E!mkOs*xky7Hk4uV?H4AP&qB=G1 zbD9=JD)=SU$ZPVfzH&}EMj(aaHBv^#sN!M(vBUE*Ts=LjNbhpn21^oADp`8}!QXgJ zEWn>}sjxakDqMW?IK?%U5=+#wT$I2UMwqDz14fmMY%I%1c>=yL!Yo9z4AudFVSlk; zCXw8d9^l1a6+R|3iz^`}S$F+MKSKp!q^<_D#~(-D-4BH;5)SzUgvxP}p3Gk3U|8`Z>J1bi6fFPiO(wx0cE(~s~Mg%VpEUHABM*n@p$ z?p3vucSg}$uB6Rdb2^J9VY`UaqPMJ!s&IBzHszZlu6e;M6YR|h&2~AjUVm-D-8&k( z$Z7}$($$SCQLvtr*ZPL4#g$l?&~NJw(K#Y!k|xd$)P%^X8CXVuJ;lyVtvo>S#2ucTggOp)>kIXpnDij zjF&FK2P^YFT#2S%_@bA`1BgPnf)~Au$tA-b<)2pV=k(7ZYzDbw{K&jo&;K5L4zW;3 z2=~ztvi*VgM?(fVzMglkjK}*yN?#TvEK3jHpF_dkZYKawcs0b-3|GbO!{ZZRxVY9? z;TwEfw{%EYIjdgYf-ciPKotelS3y2sIwU+}np(fD5AGkHI$g?%N;iK@@Zf zYp@kJ14~*eh+&xsVHcN>5S?mF)=B2;!<|2OZf261I9gNY2Y-RNC-<&YgF&SYxuB zFcEbZ)S^lpml35Z7S&JA#!Dq=nO93*#gO*ldQ=+I3X#wl>Uv1Rm}BYDf?hrQOxlNA zvns6s70KT!aeq`Mbfj!SHY2WFh0-?Ch+rZLFh|^dUqAoF?7FR`lwt*_P&cA}X&Z^^ z@Tt2cleo+)VU@*@_F*4TpS+yVp|RorR~hxG)i8YmQr{b*OFP#lo6d z%TlO`N}MfKxAnr$9~a%A(*>p6i%QvYY$A-*4{0B+M}O1=*r-wf=uq1Aq0*Qvo7kvQq|mEppRsM>A8F-CA?lNJ=L=iil=+`xS&Uds zYB@SrNK8=(`pMZi3k&0@SWDIwK-5jF#w6<4HO zN~*6iuYWbd$&pQx31)4|1E|2LZzANk%ML*p4{DCfE%Z;D=g)d zdqAUlhTOq;TDIb4${^dk^4q-++J5}@+V|~%p?|=tK3s^_0-&z72Wn6nr88(c1&wq` zYf~tBVIL$r3HLM=EBkDLXf05rVkBQ~!#H}wKMEuj!So5ygWBu8LyJz|P*%A@YXBQO zwD2VJECJK5D3LB{Z4#QLh=K6->K*OPCuakeQb43DTkfeIIcRnsF=fwA!_Y;B#gPdZKqx&kr`)s6XU4*M?ork#PrEwtzY%9Ra?I2`Llf) znUZ}L!x)~=!U6c5Ka&q>Vdg{t!i%#W@aCx~JO1290nAcB|X*pU6E-_WPsOl`ehI4P1-(oGoNl zIZ2bDD>*Z+>l20t)YuBP{yPj*)y?FqG1bGq5JBkmX2(yHlL%C%?|VQsG?2C`8-F4> z+Z{@mm&I9!8_Fp0nT-okB=hhoyPc&5qFW&uDCR_$dUgDc@*5WM+a5$JuZEam59uYT zch7n+btPG~qIiqZqSGG*fle`{XX;?mWH;v=^o)$wiw>T^Zc6>{F%bxNfOH)d*ukJQ znhvY7AqIJ;BMh0zl7}&>Ct;OBM}N9#4h1eiulFTpiFd$I+btbx8`YuqFZT@p^IQHl zY|5uJ+V3**RWA&G_6*xYjL_8?`%Ek){(c?R0iyJo9+9Nq*8b7FgE`3V5CM44pZ%h( zSmgSJKnO&dt$0Hxa>hqR5V?m*-~ycCoBVf4<;9Qjg`EmLCiQ;^0q>uVrhj6SSHs&> z|D^rzbpNs1t{euMcm^QH&ga_WSceFVQJubgKn=lT9_NE)l3Gbu;!J!M+FO^jrUy~E z6$~{Ya->zp(tA7hUh|vvF{wY2RxBNjc86y;BtGeiw61QaKnfh#NLO-oGSDB*D0EU; zg5%^}sk}s<{7O}Oem`kf4u1nNEEiJw)|=g7*+es99bppRpGDpDE>Q;A`tzws|GA z_raeIZZ%M`mZ`?`oqzco$io@EJKoR%B1c6y+Ht@!6Eb9*`c$7q;62QD0YcCfX-*fW z2IPQaKvF?qPP4A_CxSrVhaS5Nid;+j{WE-5tZeDJ`GVkdaGN{N)E2y zH*N|?4mJ5CL?#wk^|DjeBEMPp_v`35(%O_YLpL}p)7B#2ibi&HrScJdrbqg0vOBY} zuMwiE$jQ(4QL(a*L}FG)etEm(ot!)GCidoGDx`{)iu-!$L`nB#%H$$nN<3dCG*u_G z_ksR;%1SiV#DAhZsWvf;I%yxSFVzlfnx{Y7MFmx;#Hop`y~Zz7BAoF9qz8T|ux{=2 z2`)Kx$=XZi=N3ycX0f29q#zMzzb}il_?E{Y^+%prQ}EZvcx!kxenK|A5nMt zXy4{y^=_9R|+XaQkpQslYDIw0>Sb47{1h`F~wW+HwFS60@vqnJnn@0g_gt z;)ezdqYj`PY;I2Se{gi_(k?`O>C@i2@)*|}-?N;UWlPm^%FRf}mF@hn=)z^xvHW~z z=F`RU2S=Nk^*>RJ)tDGXexjH#qSTZ>QQXX|sTf%|S{9@h(d{JEjUm<^NkU^75=Z4R hDsyEE@fiQXe*se04y?%)p-un*002ovPDHLkV1fV_O#%P_ diff --git a/src/index.html b/src/index.html index 4d1673acf9..3c663967f4 100644 --- a/src/index.html +++ b/src/index.html @@ -19,7 +19,7 @@
- +

diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json index c0b8ed19f2..57147e0ae4 100644 --- a/src/locales/en/messages.json +++ b/src/locales/en/messages.json @@ -3969,24 +3969,6 @@ "removeSelectedUsersConfirmation": { "message": "Are you sure you want to remove the selected users?" }, - "usersHasBeenRemoved": { - "message": "The selected users have been removed." - }, - "theme": { - "message": "Theme" - }, - "themeDesc": { - "message": "Choose a theme for your web vault. This setting will preview the theme however it still requires you to save." - }, - "themeDefault": { - "message": "Default" - }, - "themeDark": { - "message": "Dark" - }, - "themeLight": { - "message": "Light" - }, "confirmSelected": { "message": "Confirm Selected" }, diff --git a/src/scss/styles.scss b/src/scss/styles.scss index 5bfc2f3b4b..598fea83b3 100644 --- a/src/scss/styles.scss +++ b/src/scss/styles.scss @@ -1,5 +1,77 @@ @import "../css/webfonts.css"; -@import "variables.scss"; + +$primary: #175DDC; +$primary-accent: #1252A3; +$secondary: #ced4da; +$secondary-alt: #1A3B66; +$success: #00a65a; +$info: #555555; +$warning: #bf7e16; +$danger: #dd4b39; + +$theme-colors: ( + "primary-accent": $primary-accent, + "secondary-alt": $secondary-alt, +); + +$body-bg: #ffffff; +$body-color: #333333; + +$font-family-sans-serif: 'Open Sans','Helvetica Neue',Helvetica, + Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'; + +$h1-font-size: 1.7rem; +$h2-font-size: 1.3rem; +$h3-font-size: 1rem; +$h4-font-size: 1rem; +$h5-font-size: 1rem; +$h6-font-size: 1rem; + +$small-font-size: 90%; +$font-size-lg: 1.15rem; +$code-font-size: 100%; + +$navbar-padding-y: .75rem; +$grid-gutter-width: 20px; +$card-spacer-y: .6rem; + +$list-group-item-padding-y: .6rem; +$list-group-active-color: $body-color; +$list-group-active-bg: #ffffff; +$list-group-active-border-color: rgba(#000000, .125); + +$dropdown-link-color: $body-color; +$dropdown-link-hover-bg: rgba(#000000, .06); +$dropdown-link-active-color: $dropdown-link-color; +$dropdown-link-active-bg: rgba(#000000, .1); +$dropdown-item-padding-x: 1rem; + +$navbar-brand-font-size: 35px; +$navbar-brand-height: 35px; +$navbar-brand-padding-y: 0; +$navbar-dark-color: rgba(#ffffff, .7); +$navbar-dark-hover-color: rgba(#ffffff, .9); +$navbar-nav-link-padding-x: 0.8rem; + +$input-bg: #fbfbfb; +$input-focus-bg: #ffffff; +$input-disabled-bg: #e0e0e0; +$input-placeholder-color: #b4b4b4; + +$table-accent-bg: rgba(#000000, .02); +$table-hover-bg: rgba(#000000, .03); + +$modal-backdrop-opacity: 0.3; +$btn-font-weight: 600; +$lead-font-weight: normal; + +$grid-breakpoints: ( + xs: 0, + sm: 1px, + md: 2px, + lg: 3px, + xl: 4px +); //@import "~bootstrap/scss/bootstrap"; @import "~bootstrap/scss/_functions"; @@ -47,9 +119,9 @@ html { body { min-width: 1010px; - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); + + &.layout_frontend { + background-color: #ecf0f5; } &.full-width:not(.layout_frontend) { @@ -74,15 +146,6 @@ h1, h2, h3, h4, h5 { small { font-size: 80%; } - @include themify($themes) { - color: themed('textColor'); - } -} - -a { - @include themify($themes) { - color: themed('linkColor'); - } } input, select, textarea { @@ -91,36 +154,6 @@ input, select, textarea { } } -.text-body { - @include themify($themes) { - color: themed('textColor') !important; - } -} - -.bg-primary { - @include themify($themes) { - background-color: themed('bgPrimaryColor') !important; - } -} - -.bg-warning { - @include themify($themes) { - background-color: themed('warning') !important; - } -} - -.border-primary { - @include themify($themes) { - border-color: themed('borderPrimaryColor') !important; - } -} - -.border-warning { - @include themify($themes) { - border-color: themed('warning') !important; - } -} - .secondary-header, .spaced-header { margin-top: 4rem; } @@ -132,22 +165,9 @@ input, select, textarea { .dropdown-menu { min-width: 200px; max-width: 300px; - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } - - .dropdown-item { - @include themify($themes) { - color: themed('textColor'); - } - } .dropdown-item-text { line-height: 1.3; - @include themify($themes) { - color: themed('textColor'); - } span, small { display: block; @@ -192,27 +212,14 @@ input, select, textarea { } .list-group-item.active { + border-left: 3px solid theme-color("primary"); font-weight: bold; padding-left: calc(#{$list-group-item-padding-x} - 3px); - border-color: rgba(0,0,0,0.125); - @include themify($themes) { - border-left: 3px solid themed('borderPrimaryColor'); - } -} - -.text-muted { - @include themify($themes) { - color: themed('textMuted') !important; - } } .card-header, .modal-header { font-weight: bold; text-transform: uppercase; - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } small { font-weight: normal; @@ -272,16 +279,10 @@ input, select, textarea { } .modal-body { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } h3, .section-header > * { font-weight: normal; text-transform: uppercase; - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; } } .modal .list-group-flush { @@ -295,11 +296,8 @@ input, select, textarea { .modal-footer { justify-content: flex-start; + background-color: $input-bg; @include border-radius($modal-content-border-radius); - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } } label:not(.form-check-label):not(.btn), label.bold { @@ -310,34 +308,10 @@ input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: searchfield-cancel-button; } -.btn-primary { - @include themify($themes) { - border-color: themed('buttonBorderColor'); - background-color: themed('buttonBackgroundColor'); - } - &:hover { - @include themify($themes) { - border-color: themed('buttonBorderColorHover'); - background-color: themed('buttonBackgroundColorHover'); - } - color: #FFFFFF; - } -} - .btn[class*="btn-outline-"] { - &:not(:hover):not(.btn-outline-danger):not(.dropdown-toggle) { - @include themify($themes) { - border-color: themed('buttonBorderColor'); - background-color: themed('backgroundColor'); - color: themed('buttonTextColor'); - } - } - &:hover:not(.btn-outline-danger):not(.dropdown-toggle) { - @include themify($themes) { - border-color: themed('buttonBorderColorHover'); - background-color: themed('buttonBackgroundColorHover'); - color: #fff; - } + &:not(:hover) { + border-color: $secondary; + background-color: #fbfbfb; } } @@ -349,21 +323,10 @@ input[type="search"]::-webkit-search-cancel-button { outline-style: auto; outline-width: 1px; } - &:not(.text-danger):not(.cursor-move) { - @include themify($themes) { - border-color: themed('buttonBorderColor'); - color: themed('buttonBackgroundColor'); - } - } - @include themify($themes) { - color: themed('buttonBackgroundColor'); - } } .btn-outline-secondary { - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; &:hover:not(:disabled) { color: $body-color; @@ -409,10 +372,6 @@ input[type="search"]::-webkit-search-cancel-button { &.focus { z-index: 100; } - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } } .fa-icon-above-input { @@ -420,10 +379,6 @@ input[type="search"]::-webkit-search-cancel-button { } .table.table-list { - @include themify($themes) { - color: themed('textColor'); - } - thead th { border-top: none; } @@ -445,9 +400,7 @@ input[type="search"]::-webkit-search-cancel-button { } small, > .fa, .icon { - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; } } @@ -500,20 +453,11 @@ input[type="search"]::-webkit-search-cancel-button { } td.table-list-strike { - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; text-decoration: line-through; } } -.table-hover tbody tr:hover { - @include themify($themes) { - color: themed('tableHover'); - background-color: rgba(0, 0, 0, 0.03) - } -} - .text-lg { font-size: $font-size-lg; } @@ -537,59 +481,11 @@ input[type="search"]::-webkit-search-cancel-button { } .password-number { - @include themify($themes) { - color: themed('pwNumber'); - } + color: #007fde; } .password-special { - @include themify($themes) { - color: themed('pwSpecial'); - } -} - -.card { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - border-color: themed('borderColor'); - } -} - -.card-body { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } -} - -.badge[class*="badge-"] { - @include themify($themes) { - color: #FFFFFF; - background-color: themed('buttonBackgroundColor'); - } -} - -[class*="swal2-"] { - &:not(.swal2-container) { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } - } -} - -.close { - @include themify($themes) { - color: themed('textColor'); - } -} - -.dropdown-menu, .dropdown-item { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } + color: #c40800; } app-vault-groupings, app-org-vault-groupings, .groupings { @@ -601,9 +497,7 @@ app-vault-groupings, app-org-vault-groupings, .groupings { h3 { font-weight: normal; text-transform: uppercase; - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; } ul:last-child { @@ -611,16 +505,11 @@ app-vault-groupings, app-org-vault-groupings, .groupings { } .card-body a { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } + color: $body-color; &:hover { &.text-muted { - @include themify($themes) { - color: themed('iconHover') !important; - } + color: $body-color !important; } } } @@ -644,15 +533,11 @@ app-vault-groupings, app-org-vault-groupings, .groupings { li.active { > a:first-of-type, > div a:first-of-type { font-weight: bold; - @include themify($themes) { - color: themed('linkColor'); - } + color: theme-color("primary"); } > .fa, > div > .fa { - @include themify($themes) { - color: themed('linkColor'); - } + color: theme-color("primary"); } } } @@ -720,9 +605,7 @@ app-user-billing { } #web-authn-frame { - @include themify($themes) { - background: themed('imgLoading') 0 0 no-repeat; - } + background: url('../images/loading.svg') 0 0 no-repeat; height: 290px; iframe { @@ -733,11 +616,8 @@ app-user-billing { } #bt-dropin-container { -/* @include themify($themes) { - background: themed('imgLoading') 0 0 no-repeat; - } - */min-height: 50px; - background: url('../images/loading-white.svg') 0 0 no-repeat; + background: url('../images/loading.svg') 0 0 no-repeat; + min-height: 50px; } .braintree-placeholder, .braintree-sheet__header { @@ -758,18 +638,6 @@ app-user-billing { border: none; } -[data-braintree-id="upper-container"]::before { - @include themify($themes) { - background-color: themed('backgroundColor'); - } -} - -#totpImage { - @include themify($themes) { - filter: themed('imgFilter'); - } -} - .totp { .totp-code { @extend .text-monospace; @@ -834,10 +702,7 @@ app-user-billing { border: 1px solid $card-border-color; border-left-width: 5px; border-radius: $card-inner-border-radius; - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - } + background-color: #fafafa; .callout-heading { margin-top: 0; @@ -901,9 +766,7 @@ app-user-billing { > small { display: block; - @include themify($themes) { - color: themed('textMuted'); - } + color: $text-muted; font-weight: normal; } @@ -927,18 +790,6 @@ app-user-billing { } } -.form-control { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('inputBackgroundColor'); - border-color: themed('inputBorderColor'); - } -} - -input[type="radio"], input[type="checkbox"] { - cursor: pointer; -} - .form-control.stripe-form-control { padding-top: 0.55rem; @@ -960,11 +811,8 @@ input[type="radio"], input[type="checkbox"] { } .org-nav { - @include themify($themes) { - color: themed('textColor'); - background-color: themed('backgroundColor'); - border-bottom: 1px solid themed('borderColor'); - } + background-color: $input-bg; + border-bottom: 1px solid $border-color; height: 100px; min-height: 100px; @@ -976,18 +824,14 @@ input[type="radio"], input[type="checkbox"] { border-bottom: none; a { - @include themify($themes) { - color: themed('textColor'); - } + color: $body-color; &:not(.active) { border-color: transparent; } &.active { - @include themify($themes) { - border-top: 3px solid themed('primary'); - } + border-top: 3px solid theme-color("primary"); font-weight: bold; padding-top: calc(#{$nav-link-padding-y} - 2px); } @@ -1006,24 +850,12 @@ input[type="radio"], input[type="checkbox"] { } } } -.nav-tabs .nav-link.active { - @include themify($themes) { - background: themed('navActiveBackground'); - border-color: themed('borderColor'); - } -} -img.logo, .logo#loginLogo { +img.logo { width: 284px; height: 43px; margin: 0 auto; display: block; - @include themify($themes) { - background: themed('loginLogo') no-repeat center center; - background-size: cover; - } - background: url("../images/logo-dark@2x.png") no-repeat center center; - background-size: cover; } .min-height-fix { @@ -1037,15 +869,12 @@ img.logo, .logo#loginLogo { .cdk-drag-preview { z-index: $zindex-tooltip !important; opacity: 0.8; - /*background-color: $white;*/ + background-color: $white; border-radius: $border-radius; - @include themify($themes) { - background: themed('cdkDraggingBackground'); - } } .cursor-move { cursor: move !important; } -@import "./register-layout"; \ No newline at end of file +@import "./register-layout"; diff --git a/src/scss/variables.scss b/src/scss/variables.scss deleted file mode 100644 index 8084633f07..0000000000 --- a/src/scss/variables.scss +++ /dev/null @@ -1,150 +0,0 @@ -$primary: #175DDC; -$primary-accent: #1252A3; -$secondary: #ced4da; -$secondary-alt: #1A3B66; -$success: #00a65a; -$info: #555555; -$warning: #bf7e16; -$danger: #dd4b39; - -$theme-colors: ( - "primary-accent": $primary-accent, - "secondary-alt": $secondary-alt, -); - -$body-bg: #ffffff; -$body-color: #333333; - -$font-family-sans-serif: 'Open Sans','Helvetica Neue',Helvetica, - Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol'; - -$h1-font-size: 1.7rem; -$h2-font-size: 1.3rem; -$h3-font-size: 1rem; -$h4-font-size: 1rem; -$h5-font-size: 1rem; -$h6-font-size: 1rem; - -$small-font-size: 90%; -$font-size-lg: 1.15rem; -$code-font-size: 100%; - -$navbar-padding-y: .75rem; -$grid-gutter-width: 20px; -$card-spacer-y: .6rem; - -$list-group-item-padding-y: .6rem; -$list-group-active-color: $body-color; -$list-group-active-bg: #ffffff; -$list-group-active-border-color: rgba(#000000, .125); - -$dropdown-link-color: $body-color; -$dropdown-link-hover-bg: rgba(#000000, .06); -$dropdown-link-active-color: $dropdown-link-color; -$dropdown-link-active-bg: rgba(#000000, .1); -$dropdown-item-padding-x: 1rem; - -$navbar-brand-font-size: 35px; -$navbar-brand-height: 35px; -$navbar-brand-padding-y: 0; -$navbar-dark-color: rgba(#ffffff, .7); -$navbar-dark-hover-color: rgba(#ffffff, .9); -$navbar-nav-link-padding-x: 0.8rem; - -$input-bg: #fbfbfb; -$input-focus-bg: #ffffff; -$input-disabled-bg: #e0e0e0; -$input-placeholder-color: #b4b4b4; - -$table-accent-bg: rgba(#000000, .02); -$table-hover-bg: rgba(#000000, .03); - -$modal-backdrop-opacity: 0.3; -$btn-font-weight: 600; -$lead-font-weight: normal; - -$grid-breakpoints: ( - xs: 0, - sm: 1px, - md: 2px, - lg: 3px, - xl: 4px -); - -$text-color: #333333; -$border-color: #ced4da; - -$themes: ( - Light: ( - primary: $primary, - textColor: $text-color, - textMuted: #6c757d, - linkColor: $primary, - iconHover: $body-color, - borderColor: $border-color, - backgroundColor: $body-bg, - inputBackgroundColor: #fbfbfb, - inputBorderColor: $border-color, - bgPrimaryColor: $primary, - borderPrimaryColor: $primary, - buttonBorderColor: $secondary, - buttonBackgroundColor: $primary, - buttonBackgroundColorHover: $primary, - buttonBorderColorHover: $primary, - buttonTextColor: $primary, - warning: $warning, - loginLogo: url("../images/logo-dark@2x.png"), - totpFilter: invert(0) grayscale(0), - imgLoading: url('../images/loading.svg'), - cdkDraggingBackground: #FFFFFF, - tableHover: #333333, - navActiveBackground: #FFFFFF, - pwNumber: #007fde, - pwSpecial: #c40800 - ), - Dark: ( - primary: $secondary-alt, - textColor: #fbfbfb, - textMuted: #C1C4C8, - linkColor: #46ace7, - iconHover: #555555, - borderColor: #111111, - backgroundColor: #222222, - inputBackgroundColor: #1A1A1A, - inputBorderColor: #111111, - bgPrimaryColor: $secondary-alt, - borderPrimaryColor: $secondary-alt, - buttonBorderColor: $secondary-alt, - buttonBackgroundColor: $secondary-alt, - buttonBackgroundColorHover: $primary-accent, - buttonBorderColorHover: $secondary-alt, - buttonTextColor: $secondary, - warning: $warning, - loginLogo: url("../images/logo-white@2x.png"), - imgFilter: invert(1) grayscale(1), - imgLoading: url('../images/loading-white.svg'), - cdkDraggingBackground: #000000, - tableHover: $secondary, - navActiveBackground: #1A1A1A, - pwNumber: #51b5ff, - pwSpecial: #ff8c87 - ), -); - -@mixin themify($themes: $themes) { - @each $theme, $map in $themes { - html.theme#{$theme} & { - $theme-map: () !global; - @each $key, $submap in $map { - $value: map-get(map-get($themes, $theme), '#{$key}'); - $theme-map: map-merge($theme-map, ($key: $value)) !global; - } - @content; - $theme-map: null !global; - } - } -} - -@function themed($key) { - @return map-get($theme-map, $key); -} \ No newline at end of file diff --git a/src/services/htmlStorage.service.ts b/src/services/htmlStorage.service.ts index 771c917f88..2af52b9e2f 100644 --- a/src/services/htmlStorage.service.ts +++ b/src/services/htmlStorage.service.ts @@ -5,7 +5,7 @@ import { ConstantsService } from 'jslib/services'; export class HtmlStorageService implements StorageService { private localStorageKeys = new Set(['appId', 'anonymousAppId', 'rememberedEmail', 'passwordGenerationOptions', ConstantsService.disableFaviconKey, 'rememberEmail', 'enableGravatars', 'enableFullWidth', - ConstantsService.themeKey, ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints, + ConstantsService.localeKey, ConstantsService.autoConfirmFingerprints, ConstantsService.vaultTimeoutKey, ConstantsService.vaultTimeoutActionKey, ConstantsService.ssoCodeVerifierKey, ConstantsService.ssoStateKey, 'ssoOrgIdentifier']); private localStorageStartsWithKeys = ['twoFactorToken_', ConstantsService.collapsedGroupingsKey + '_']; @@ -26,12 +26,6 @@ export class HtmlStorageService implements StorageService { if (vaultTimeoutAction == null) { await this.save(ConstantsService.vaultTimeoutActionKey, 'lock'); } - - // Default theme to match the browser if the theme isn't set - const theme = await this.get(ConstantsService.themeKey); - if (theme == null) { - await this.save(ConstantsService.themeKey, 'themeDefaultSet'); - } } get(key: string): Promise { diff --git a/webpack.config.js b/webpack.config.js index ae959b375a..9aad213860 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -28,7 +28,7 @@ const moduleRules = [ }, { test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/, - exclude: /loading(|-white).svg/, + exclude: /loading.svg/, use: [{ loader: 'file-loader', options: {