From e1fbe03606a2122c9bfd3ee7d57adab433de224b Mon Sep 17 00:00:00 2001 From: pirsquareff Date: Wed, 1 Jan 2020 19:20:19 +0700 Subject: [PATCH 1/8] Adjust colors for a dark theme and define mixins --- src/assets/styles/_mixins.scss | 41 +++++++++++++++++++ src/assets/styles/_variables.scss | 66 ++++++++++++++++++++++++++++++- 2 files changed, 105 insertions(+), 2 deletions(-) diff --git a/src/assets/styles/_mixins.scss b/src/assets/styles/_mixins.scss index 118d86f9..61c74f64 100644 --- a/src/assets/styles/_mixins.scss +++ b/src/assets/styles/_mixins.scss @@ -30,3 +30,44 @@ @content } } + +@mixin themed($attached: false) { + @each $theme, $map in $themes { + $wrapped-selector: ".theme--#{$theme} &"; + @if $attached { + $wrapped-selector: "&.theme--#{$theme}"; + } + #{$wrapped-selector} { + $theme-map: () !global; + + @each $key, $value in $map { + $theme-map: map-merge($theme-map, ($key: $value)) !global; + } + + @content; + $theme-map: null !global; + } + } +} + +@mixin themed-only($theme: default, $attached: false) { + $wrapped-selector: ".theme--#{$theme} &"; + @if $attached { + $wrapped-selector: "&.theme--#{$theme}"; + } + #{$wrapped-selector} { + $theme-map: () !global; + + $map: map-get($themes, $theme); + @each $key, $value in $map { + $theme-map: map-merge($theme-map, ($key: $value)) !global; + } + + @content; + $theme-map: null !global; + } +} + +@function tget($key) { + @return map-get($theme-map, $key); +} \ No newline at end of file diff --git a/src/assets/styles/_variables.scss b/src/assets/styles/_variables.scss index e4dc128f..e5a0dc7b 100644 --- a/src/assets/styles/_variables.scss +++ b/src/assets/styles/_variables.scss @@ -5,29 +5,91 @@ $bp-mobile: 480px; /* [-----------](-----------)[-----------> */ /* 480px 980px */ +$surface-color: #ffffff; +$surface-color--dark: #161616; + $body-color: #f7f8fa; +$body-color--dark: #0a0a0a; + $body-background-size: 100% 100%; $color-text: #1e375a; -$color-text-secondary: rgba(#1e375a, 0.6); +$color-text--dark: #e7f1ff; + +$color-text-secondary: rgba($color-text, 0.6); +$color-text-secondary--dark: rgba($color-text--dark, 0.6); + $color-primary: #2364d2; +$color-primary--dark: #4188ff; + $color-warning: #ffbe00; +$color-warning--dark: desaturate($color-warning, 20%); + $color-danger: #ff4164; +$color-danger--dark: desaturate($color-danger, 20%); + $color-success: #19d78c; +$color-success--dark: desaturate($color-success, 20%); + $color-info: #96a5be; +$color-info--dark: desaturate($color-info, 20%); $border-color: rgba($color-text, 0.05); +$border-color--dark: rgba($color-text--dark, 0.16); $header-color: rgba($color-text, 0.97); +$header-color--dark: rgb(24, 24, 24); + $header-height: 56px; $header-padding-side: 15px; $overlay-color: rgba($color-text, 0.9); +$overlay-color--dark: rgba($body-color--dark, 0.9); + $overlay-z-index: 10; $terminal-color: $color-text; +$terminal-color--dark: darken($color-text, 12%); $button-outline-hover-bg-opacity: 0.1; +$button-outline-hover-bg-opacity--dark: 0.15; -$step-selected-bg-color: rgba($color-text, 0.03) +$step-selected-bg-color: rgba($color-text, 0.03); +$step-selected-bg-color--dark: rgba($color-text--dark, 0.05); +$themes: ( + default: ( + surface-color: $surface-color, + body-color: $body-color, + color-text: $color-text, + color-text-secondary: $color-text-secondary, + color-primary: $color-primary, + color-warning: $color-warning, + color-danger: $color-danger, + color-success: $color-success, + color-info: $color-info, + border-color: $border-color, + header-color: $header-color, + overlay-color: $overlay-color, + terminal-color: $terminal-color, + button-outline-hover-bg-opacity: $button-outline-hover-bg-opacity, + step-selected-bg-color: $step-selected-bg-color + ), + dark: ( + surface-color: $surface-color--dark, + body-color: $body-color--dark, + color-text: $color-text--dark, + color-text-secondary: $color-text-secondary--dark, + color-primary: $color-primary--dark, + color-warning: $color-warning--dark, + color-danger: $color-danger--dark, + color-success: $color-success--dark, + color-info: $color-info--dark, + border-color: $border-color--dark, + header-color: $header-color--dark, + overlay-color: $overlay-color--dark, + terminal-color: $terminal-color--dark, + button-outline-hover-bg-opacity: $button-outline-hover-bg-opacity--dark, + step-selected-bg-color: $step-selected-bg-color--dark + ), +); \ No newline at end of file From ff4f7d2ec91bed3cb42e1987c77753cb4c625d2d Mon Sep 17 00:00:00 2001 From: pirsquareff Date: Wed, 1 Jan 2020 19:35:18 +0700 Subject: [PATCH 2/8] Apply the dark theme to components --- src/assets/styles/global.scss | 13 ++- src/components/Alert.vue | 21 +++-- src/components/Breadcrumb.vue | 6 +- src/components/BuildsFeedIndicator.vue | 29 +++++-- src/components/BuildsFeedPanel.vue | 16 +++- src/components/Card.vue | 22 +++-- src/components/CodeSnippet.vue | 24 ++++-- src/components/Footer.vue | 8 +- src/components/Header.vue | 22 ++++- src/components/Help.vue | 20 +++-- src/components/Hint.vue | 20 ++++- src/components/Link.vue | 9 +- src/components/Modal.vue | 6 +- src/components/NoRecentBuilds.vue | 7 +- src/components/Notifications.vue | 5 +- src/components/Overlay.vue | 5 +- src/components/Panel.vue | 11 ++- src/components/Popup.vue | 14 +++- src/components/RepoItem.vue | 41 +++++++--- src/components/RepoItemLabel.vue | 28 ++++--- src/components/RepoLink.vue | 17 +++- src/components/ReposPopup.vue | 9 +- src/components/Search.vue | 7 +- src/components/Stage.vue | 38 ++++++--- src/components/Status.vue | 13 ++- src/components/Step.vue | 27 ++++-- src/components/Tag.vue | 12 ++- src/components/UserMenu.vue | 13 ++- src/components/buttons/Button.vue | 82 ++++++++++++++----- src/components/buttons/MoreButton.vue | 9 +- src/components/editable-list/EditableList.vue | 18 +++- src/components/forms/BaseCheckbox.vue | 19 +++-- src/components/forms/BaseForm.vue | 12 ++- src/components/forms/BaseInput.vue | 17 ++-- src/components/forms/BaseRadioButtons.vue | 18 ++-- src/components/forms/BaseSelect.vue | 23 ++++-- src/components/forms/BaseTextArea.vue | 16 +++- src/views/Account.vue | 5 +- src/views/Build.vue | 32 ++++++-- src/views/Builds.vue | 21 ++++- src/views/Login.vue | 7 +- src/views/Logout.vue | 25 ++++-- src/views/Repo.vue | 34 ++++++-- src/views/Settings.vue | 5 +- 44 files changed, 608 insertions(+), 198 deletions(-) diff --git a/src/assets/styles/global.scss b/src/assets/styles/global.scss index 7658ab04..ce777c98 100644 --- a/src/assets/styles/global.scss +++ b/src/assets/styles/global.scss @@ -6,17 +6,26 @@ html { html, body { box-sizing: border-box; - color: $color-text; font-size: 14px; font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol; min-height: 100%; margin: 0px; padding: 0px; width: 100%; + + @include themed(true) { + color: tget("color-text"); + } } body { - background: $body-color; + @include themed(true) { + background: tget("body-color"); + } + + &.no-transition * { + transition: none !important; + } } a { diff --git a/src/components/Alert.vue b/src/components/Alert.vue index 9fa60fb2..99890b0d 100644 --- a/src/components/Alert.vue +++ b/src/components/Alert.vue @@ -26,6 +26,7 @@ export default { diff --git a/src/components/Breadcrumb.vue b/src/components/Breadcrumb.vue index fe82788e..fc338463 100644 --- a/src/components/Breadcrumb.vue +++ b/src/components/Breadcrumb.vue @@ -44,6 +44,8 @@ export default { diff --git a/src/components/BuildsFeedIndicator.vue b/src/components/BuildsFeedIndicator.vue index 42ddcdc0..90dfc88b 100644 --- a/src/components/BuildsFeedIndicator.vue +++ b/src/components/BuildsFeedIndicator.vue @@ -85,9 +85,12 @@ export default { diff --git a/src/components/CodeSnippet.vue b/src/components/CodeSnippet.vue index c4d34d68..f74d14fa 100644 --- a/src/components/CodeSnippet.vue +++ b/src/components/CodeSnippet.vue @@ -67,10 +67,13 @@ export default { diff --git a/src/components/Footer.vue b/src/components/Footer.vue index 328dc573..f35e9d0f 100644 --- a/src/components/Footer.vue +++ b/src/components/Footer.vue @@ -41,7 +41,9 @@ nav.nav-right { } nav a { - color: $color-text-secondary; + @include themed { + color: tget("color-text-secondary"); + } & + a { margin-left: 30px; @@ -50,7 +52,9 @@ nav a { nav a:hover, nav a:focus { - color: $color-text; outline: none; + @include themed { + color: tget("color-text"); + } } diff --git a/src/components/Header.vue b/src/components/Header.vue index 39743653..7a659278 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -104,12 +104,18 @@ export default { .header { height: $header-height; box-shadow: 0 2px 4px 0 $border-color; - background-color: $header-color; align-items: center; box-sizing: border-box; display: flex; padding: 0 $header-padding-side; justify-content: space-between; + @include themed { + background-color: tget("header-color"); + } + @include themed-only(dark) { + background-color: tget("header-color"); + box-shadow: 0 2px 4px 0 #000000; + } &.loading:before { content: ""; @@ -194,11 +200,15 @@ export default { border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 50%; color: #fff; - background-color: $header-color; + @include themed { + background-color: tget("header-color"); + } &.filled { - color: $header-color; background-color: #fff; + @include themed { + color: tget("header-color"); + } } svg { @@ -228,6 +238,7 @@ export default { diff --git a/src/components/NoRecentBuilds.vue b/src/components/NoRecentBuilds.vue index 0a51f101..9ec138e9 100644 --- a/src/components/NoRecentBuilds.vue +++ b/src/components/NoRecentBuilds.vue @@ -18,7 +18,8 @@ export default { diff --git a/src/components/Notifications.vue b/src/components/Notifications.vue index d0eb38c8..b9bbb3ae 100644 --- a/src/components/Notifications.vue +++ b/src/components/Notifications.vue @@ -33,6 +33,7 @@ export default { diff --git a/src/components/Panel.vue b/src/components/Panel.vue index 86a36964..34bbdd66 100644 --- a/src/components/Panel.vue +++ b/src/components/Panel.vue @@ -21,13 +21,16 @@ export default { diff --git a/src/components/Popup.vue b/src/components/Popup.vue index 83d42291..16d5e2fc 100644 --- a/src/components/Popup.vue +++ b/src/components/Popup.vue @@ -44,11 +44,19 @@ export default { @import "../assets/styles/mixins"; .popup { position: absolute; - background: #fff; z-index: 5; border-radius: 3px; - box-shadow: 0 2px 4px 0 rgba(25, 45, 70, 0.05); - border: solid 1px #edeef1; + @include themed { + background: tget("surface-color"); + } + @include themed-only(default) { + border: solid 1px #edeef1; + box-shadow: 0 2px 4px 0 rgba(25, 45, 70, 0.05); + } + @include themed-only(dark) { + border: solid 1px tget("border-color"); + box-shadow: 0 2px 4px 0 #000000; + } &.popup.evict { transform: translateX(-9999px); } diff --git a/src/components/RepoItem.vue b/src/components/RepoItem.vue index 93d29f4f..b320497a 100644 --- a/src/components/RepoItem.vue +++ b/src/components/RepoItem.vue @@ -116,12 +116,19 @@ export default { .repo-item { border-radius: 4px; box-sizing: border-box; - box-shadow: 0 2px 4px 0 rgba($color-text, 0.1); border: solid 1px $border-color; - background-color: #ffffff; - color: $color-text; padding: 15px; - transition: box-shadow linear 0.2s; + transition: box-shadow linear 0.2s, background linear 0.2s; + @include themed { + color: tget("color-text"); + background: tget("surface-color"); + } + @include themed-only(default) { + box-shadow: 0 2px 4px 0 rgba(tget("color-text"), 0.1); + } + @include themed-only(dark) { + box-shadow: 0 2px 4px 0 rgba(tget("body-color"), 0.5); + } @include mobile(true) { padding: 10px; @@ -179,7 +186,9 @@ export default { height: 22px; font-size: 18px; line-height: normal; - color: $color-text; + @include themed { + color: tget("color-text"); + } display: flex; align-items: flex-start; @@ -214,16 +223,20 @@ export default { height: 15px; opacity: 0.2; border-bottom-left-radius: 8px; - border-left: solid 1px $color-text; - border-bottom: solid 1px $color-text; margin-left: 9px; + @include themed { + border-left: solid 1px tget("color-text"); + border-bottom: solid 1px tget("color-text"); + } } .icon-repository { width: 20px; height: 20px; margin-right: 10px; - color: $color-info; + @include themed { + color: tget("color-info"); + } flex-shrink: 0; } @@ -239,7 +252,9 @@ export default { display: flex; align-items: center; justify-content: space-between; - color: $color-text-secondary; + @include themed { + color: tget("color-text-secondary"); + } .header + & { margin-top: 6px; @@ -260,7 +275,9 @@ export default { text-overflow: ellipsis; white-space: nowrap; line-height: normal; - color: $color-text-secondary; + @include themed { + color: tget("color-text-secondary"); + } margin-right: 15px; .divider { @@ -305,9 +322,11 @@ export default { display: inline-block; width: 3px; height: 3px; - background: rgba($color-text, 0.25); border-radius: 50%; margin: 0 6px; + @include themed { + background: rgba(tget("color-text"), 0.25); + } } diff --git a/src/components/RepoItemLabel.vue b/src/components/RepoItemLabel.vue index 3fd18622..f45cc289 100644 --- a/src/components/RepoItemLabel.vue +++ b/src/components/RepoItemLabel.vue @@ -45,20 +45,16 @@ export default { } }, hrefPR() { - return this.build && this.repo && - `/link/${this.repo.slug}/tree/${this.build.ref}`; + return this.build && this.repo && `/link/${this.repo.slug}/tree/${this.build.ref}`; }, hrefTag() { - return this.build && this.repo && - `/link/${this.repo.slug}/tree/${this.build.ref}`; + return this.build && this.repo && `/link/${this.repo.slug}/tree/${this.build.ref}`; }, hrefBranch() { - return this.build && this.repo && - `/link/${this.repo.slug}/tree/refs/heads/${this.build.target}`; + return this.build && this.repo && `/link/${this.repo.slug}/tree/refs/heads/${this.build.target}`; }, hrefCommit() { - return this.build && this.repo && - `/link/${this.repo.slug}/commit/${this.build.after}`; + return this.build && this.repo && `/link/${this.repo.slug}/commit/${this.build.after}`; }, branch() { return this.build.target; @@ -95,16 +91,26 @@ export default { diff --git a/src/components/RepoLink.vue b/src/components/RepoLink.vue index cae0b5ec..d96686b2 100644 --- a/src/components/RepoLink.vue +++ b/src/components/RepoLink.vue @@ -33,6 +33,7 @@ export default { diff --git a/src/components/ReposPopup.vue b/src/components/ReposPopup.vue index 633443c5..91710921 100644 --- a/src/components/ReposPopup.vue +++ b/src/components/ReposPopup.vue @@ -97,6 +97,7 @@ export default { diff --git a/src/components/Search.vue b/src/components/Search.vue index 16bc5d18..df808bbc 100644 --- a/src/components/Search.vue +++ b/src/components/Search.vue @@ -131,6 +131,7 @@ export default { diff --git a/src/components/Tag.vue b/src/components/Tag.vue index 4254335e..40b5dbf9 100644 --- a/src/components/Tag.vue +++ b/src/components/Tag.vue @@ -4,15 +4,23 @@ diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue index cbb77307..b7a44a96 100644 --- a/src/components/UserMenu.vue +++ b/src/components/UserMenu.vue @@ -55,6 +55,7 @@ export default { diff --git a/src/components/buttons/MoreButton.vue b/src/components/buttons/MoreButton.vue index bb0e99e0..3b73e7b8 100644 --- a/src/components/buttons/MoreButton.vue +++ b/src/components/buttons/MoreButton.vue @@ -20,6 +20,7 @@ export default { diff --git a/src/components/editable-list/EditableList.vue b/src/components/editable-list/EditableList.vue index 3e698f2f..0089170d 100644 --- a/src/components/editable-list/EditableList.vue +++ b/src/components/editable-list/EditableList.vue @@ -81,15 +81,18 @@ export default { diff --git a/src/components/forms/BaseCheckbox.vue b/src/components/forms/BaseCheckbox.vue index c40bf9ad..245ff9e3 100644 --- a/src/components/forms/BaseCheckbox.vue +++ b/src/components/forms/BaseCheckbox.vue @@ -25,6 +25,7 @@ export default { diff --git a/src/components/forms/BaseRadioButtons.vue b/src/components/forms/BaseRadioButtons.vue index e53c46e9..29c9ebbe 100644 --- a/src/components/forms/BaseRadioButtons.vue +++ b/src/components/forms/BaseRadioButtons.vue @@ -60,24 +60,32 @@ label:before { position: absolute; width: 18px; height: 18px; - border: 1px solid rgba($color-text, 0.25); border-radius: 50%; top: 0; left: 0; - background-color: #fff; + @include themed { + background-color: tget("surface-color"); + border: 1px solid rgba(tget("color-text"), 0.25); + } } label:hover:before { - border-color: $color-primary; + @include themed { + border-color: tget("color-primary"); + } } input:focus + label:before { - box-shadow: 0 0 4px 1px $color-primary; + @include themed { + box-shadow: 0 0 4px 1px tget("color-primary"); + } } input:checked + label:before { - background: $color-primary; border-color: transparent; + @include themed { + background: tget("color-primary"); + } } input:checked + label:after { diff --git a/src/components/forms/BaseSelect.vue b/src/components/forms/BaseSelect.vue index a83f457f..9107490e 100644 --- a/src/components/forms/BaseSelect.vue +++ b/src/components/forms/BaseSelect.vue @@ -16,10 +16,9 @@ export default { diff --git a/src/components/forms/BaseTextArea.vue b/src/components/forms/BaseTextArea.vue index 9c88c930..0fb2e891 100644 --- a/src/components/forms/BaseTextArea.vue +++ b/src/components/forms/BaseTextArea.vue @@ -13,10 +13,9 @@ export default { diff --git a/src/views/Account.vue b/src/views/Account.vue index 4e936844..cff5c027 100644 --- a/src/views/Account.vue +++ b/src/views/Account.vue @@ -80,6 +80,7 @@ export default { @@ -116,7 +119,9 @@ export default { } .empty-message { - color: $color-text-secondary; + @include themed { + color: tget("color-text-secondary"); + } } .build { @@ -130,7 +135,13 @@ export default { .build:hover .repo-item, .build:focus .repo-item { - box-shadow: 0 4px 10px 0 rgba($color-text, 0.25); + @include themed-only(dark) { + background: lighten(tget("surface-color"), 3%); + box-shadow: 0 4px 10px 0 darken(tget("body-color"), 20%); + } + @include themed-only(default) { + box-shadow: 0 4px 10px 0 rgba(tget("color-text"), 0.25); + } } .build + .build { @@ -139,7 +150,9 @@ export default { .loading { margin: 20px 0; - color: $color-text-secondary; + @include themed { + color: tget("color-text-secondary"); + } } .more-button { diff --git a/src/views/Login.vue b/src/views/Login.vue index ef0fa037..be606939 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -28,6 +28,7 @@ export default { diff --git a/src/views/Repo.vue b/src/views/Repo.vue index c179ae66..a3c2e8fe 100644 --- a/src/views/Repo.vue +++ b/src/views/Repo.vue @@ -193,10 +193,12 @@ h1 { } nav { - border-bottom: 1px solid $border-color; margin-bottom: 20px; padding-left: 15px; display: flex; + @include themed { + border-bottom: 1px solid tget("border-color"); + } svg { opacity: 0.6; @@ -210,7 +212,6 @@ nav { } nav a { - color: $color-text-secondary; height: 18px; line-height: 18px; padding-bottom: 11px; @@ -222,6 +223,9 @@ nav a { align-items: center; margin-right: 30px; border-bottom: 1px solid transparent; + @include themed { + color: tget("color-text-secondary"); + } @include mobile { letter-spacing: normal; @@ -231,12 +235,16 @@ nav a { } nav a.manually-active { - color: $color-text; + @include themed { + color: tget("color-text"); + } } nav a:hover, nav a:focus { - color: $color-text; + @include themed { + color: tget("color-text"); + } svg { opacity: 1; @@ -245,14 +253,18 @@ nav a:focus { nav a.manually-active:focus, nav a.manually-active:hover { - color: $color-primary; + @include themed { + color: tget("color-primary"); + } } nav a[disabled], nav a[disabled]:hover, nav a[disabled]:focus { pointer-events: none; - color: rgba($color-text, 0.25); + @include themed { + color: rgba(tget("color-text"), 0.25); + } } nav a svg { @@ -260,8 +272,10 @@ nav a svg { } nav .router-link-exact-active { - border-color: $color-text; - color: $color-text; + @include themed { + border-color: tget("color-text"); + color: tget("color-text"); + } } .fade-enter-active, @@ -290,7 +304,9 @@ nav .router-link-exact-active { max-width: 300px; line-height: 18px; display: block; - color: #2364d2; margin: 0px auto; + @include themed { + color: tget("color-primary"); + } } diff --git a/src/views/Settings.vue b/src/views/Settings.vue index bbb0e8b4..b830aaab 100644 --- a/src/views/Settings.vue +++ b/src/views/Settings.vue @@ -199,7 +199,6 @@ const timeouts = [15, 30, 60, 90, 120, 180, 240, 300, 360, 420, 480, 540, 600, 6 diff --git a/src/components/UserMenu.vue b/src/components/UserMenu.vue index b7a44a96..36e3ef1e 100644 --- a/src/components/UserMenu.vue +++ b/src/components/UserMenu.vue @@ -7,6 +7,7 @@ User settings + {{ $t("labels.logout") }} @@ -16,11 +17,13 @@ + + diff --git a/src/components/forms/BaseSwitch.vue b/src/components/forms/BaseSwitch.vue new file mode 100644 index 00000000..1acd88d4 --- /dev/null +++ b/src/components/forms/BaseSwitch.vue @@ -0,0 +1,92 @@ + + + + + From 2ddd1e17a0eec2fb693cf21b9f9530d385dbcf2b Mon Sep 17 00:00:00 2001 From: pirsquareff Date: Wed, 1 Jan 2020 20:27:59 +0700 Subject: [PATCH 5/8] Apply a dark theme to Modal --- src/components/Modal.vue | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/components/Modal.vue b/src/components/Modal.vue index 566423aa..f0c03643 100644 --- a/src/components/Modal.vue +++ b/src/components/Modal.vue @@ -38,12 +38,17 @@ export default { padding: $header-padding-side; } .modal-content { - box-shadow: 0 2px 4px 0 rgba(25, 45, 70, 0.05); - border: solid 1px #edeef1; border-radius: 3px; min-width: 0; @include themed { + border: solid 1px tget("border-color"); background: tget("surface-color"); } + @include themed-only(default) { + box-shadow: 0 2px 4px 0 rgba(25, 45, 70, 0.05); + } + @include themed-only(dark) { + box-shadow: 0 2px 4px 0 darken(tget("body-color"), 20%); + } } From 4c7168f64b8977c90716f53cc2d9435a4a26fabf Mon Sep 17 00:00:00 2001 From: pirsquareff Date: Wed, 1 Jan 2020 20:47:24 +0700 Subject: [PATCH 6/8] Apply a dark theme to login pages --- src/components/DarkThemeControl.vue | 2 +- src/views/Login.vue | 10 +++++++++- src/views/LoginErr.vue | 9 +++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/components/DarkThemeControl.vue b/src/components/DarkThemeControl.vue index 8b3d1f3b..98952555 100644 --- a/src/components/DarkThemeControl.vue +++ b/src/components/DarkThemeControl.vue @@ -2,7 +2,7 @@

Dark theme

- Dark theme setting will apply to this browser only + Dark theme setting will apply to this browser only.