From 315c2e1b88ab30d0a05b419787878504c6da7685 Mon Sep 17 00:00:00 2001 From: nitsua Date: Wed, 10 Nov 2021 21:35:25 -0500 Subject: [PATCH] Add support for template switching using Theme Park templates --- frontend/.stylelintrc | 1 + frontend/build/webpack.config.js | 27 + frontend/src/App/ThemeSelector.js | 29 + .../src/Components/Form/FormInputGroup.js | 7 + .../Theme.Park/Resources/blur-noise.png | Bin 0 -> 94668 bytes .../Content/Theme.Park/Themes/aquamarine.css | 30 + .../src/Content/Theme.Park/Themes/dark.css | 30 + .../src/Content/Theme.Park/Themes/dracula.css | 30 + .../src/Content/Theme.Park/Themes/hotline.css | 30 + .../src/Content/Theme.Park/Themes/hotpink.css | 30 + .../src/Content/Theme.Park/Themes/nord.css | 30 + .../Content/Theme.Park/Themes/organizr.css | 30 + .../Content/Theme.Park/Themes/overseerr.css | 30 + .../src/Content/Theme.Park/Themes/plex.css | 28 + .../Theme.Park/Themes/radarr-darker.css | 124 ++ .../Content/Theme.Park/Themes/space-gray.css | 30 + .../src/Content/Theme.Park/radarr-base.css | 1101 +++++++++++++++++ frontend/src/Settings/UI/UISettings.js | 30 + frontend/src/index.js | 11 +- .../Configuration/ConfigFileProvider.cs | 3 + src/NzbDrone.Core/Localization/Core/en.json | 3 + src/Radarr.Api.V3/Config/ConfigController.cs | 4 +- .../Config/HostConfigController.cs | 2 +- .../Config/UiConfigController.cs | 24 +- src/Radarr.Api.V3/Config/UiConfigResource.cs | 24 +- .../Frontend/InitializeJsController.cs | 1 + 26 files changed, 1669 insertions(+), 20 deletions(-) create mode 100644 frontend/src/App/ThemeSelector.js create mode 100644 frontend/src/Content/Theme.Park/Resources/blur-noise.png create mode 100644 frontend/src/Content/Theme.Park/Themes/aquamarine.css create mode 100644 frontend/src/Content/Theme.Park/Themes/dark.css create mode 100644 frontend/src/Content/Theme.Park/Themes/dracula.css create mode 100644 frontend/src/Content/Theme.Park/Themes/hotline.css create mode 100644 frontend/src/Content/Theme.Park/Themes/hotpink.css create mode 100644 frontend/src/Content/Theme.Park/Themes/nord.css create mode 100644 frontend/src/Content/Theme.Park/Themes/organizr.css create mode 100644 frontend/src/Content/Theme.Park/Themes/overseerr.css create mode 100644 frontend/src/Content/Theme.Park/Themes/plex.css create mode 100644 frontend/src/Content/Theme.Park/Themes/radarr-darker.css create mode 100644 frontend/src/Content/Theme.Park/Themes/space-gray.css create mode 100644 frontend/src/Content/Theme.Park/radarr-base.css diff --git a/frontend/.stylelintrc b/frontend/.stylelintrc index fb0d550bf..019d72ae1 100644 --- a/frontend/.stylelintrc +++ b/frontend/.stylelintrc @@ -4,6 +4,7 @@ ], "ignoreFiles": [ "frontend/src/Styles/scaffolding.css", + "**/Theme.Park/**/*.css", "**/*.js" ], "rules": { diff --git a/frontend/build/webpack.config.js b/frontend/build/webpack.config.js index 6f324ac95..1c44380f1 100644 --- a/frontend/build/webpack.config.js +++ b/frontend/build/webpack.config.js @@ -124,6 +124,20 @@ module.exports = (env) => { { source: 'frontend/src/Content/robots.txt', destination: path.join(distFolder, 'Content/robots.txt') + }, + + // Theme.Park + { + source: 'frontend/src/Content/Theme.Park/*', + destination: path.join(distFolder, 'Content/Theme.Park') + }, + { + source: 'frontend/src/Content/Theme.Park/Themes/*', + destination: path.join(distFolder, 'Content/Theme.Park/Themes') + }, + { + source: 'frontend/src/Content/Theme.Park/Resources/*', + destination: path.join(distFolder, 'Content/Theme.Park/Resources') } ] } @@ -243,6 +257,19 @@ module.exports = (env) => { } } ] + }, + + { + test: /\.(png)?$/, + use: [ + { + loader: 'file-loader', + options: { + emitFile: false, + name: 'Content/Theme.Park/Resources/[name].[ext]' + } + } + ] } ] } diff --git a/frontend/src/App/ThemeSelector.js b/frontend/src/App/ThemeSelector.js new file mode 100644 index 000000000..f60e2da0f --- /dev/null +++ b/frontend/src/App/ThemeSelector.js @@ -0,0 +1,29 @@ +import PropTypes from 'prop-types'; +import React from 'react'; + +const theme = window.Radarr.theme; + +function ThemeSelector({ children }) { + return ( + <> + { + theme !== 'default' && + <> + + + + } + {children} + + ); +} + +ThemeSelector.propTypes = { + children: PropTypes.object.isRequired +}; + +export default ThemeSelector; diff --git a/frontend/src/Components/Form/FormInputGroup.js b/frontend/src/Components/Form/FormInputGroup.js index 1c50e3398..c097624dd 100644 --- a/frontend/src/Components/Form/FormInputGroup.js +++ b/frontend/src/Components/Form/FormInputGroup.js @@ -113,6 +113,8 @@ function FormInputGroup(props) { helpTexts, helpTextWarning, helpLink, + inlineLink, + tooltip, pending, errors, warnings, @@ -182,6 +184,9 @@ function FormInputGroup(props) { !checkInput && helpText && } @@ -263,6 +268,8 @@ FormInputGroup.propTypes = { helpTexts: PropTypes.arrayOf(PropTypes.string), helpTextWarning: PropTypes.string, helpLink: PropTypes.string, + inlineLink: PropTypes.string, + tooltip: PropTypes.string, pending: PropTypes.bool, errors: PropTypes.arrayOf(PropTypes.object), warnings: PropTypes.arrayOf(PropTypes.object) diff --git a/frontend/src/Content/Theme.Park/Resources/blur-noise.png b/frontend/src/Content/Theme.Park/Resources/blur-noise.png new file mode 100644 index 0000000000000000000000000000000000000000..45e67618646050d09b473e5bc2bc39cf66b9e5b2 GIT binary patch literal 94668 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∾R5j+eBC@q+j{CXnt6xN>gBJr{Rq^9kLlr4 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 literal 0 HcmV?d00001 diff --git a/frontend/src/Content/Theme.Park/Themes/aquamarine.css b/frontend/src/Content/Theme.Park/Themes/aquamarine.css new file mode 100644 index 000000000..88dd6fe68 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/aquamarine.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(ellipse at center, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: radial-gradient(ellipse at top, #47918a 0%, #0b3161 100%) center center/cover no-repeat fixed; + + --button-color: #009688; + --button-color-hover: #12afa0; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 18, 175, 160; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #0ed2bf; + --link-color-hover: #36e7d6; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #009688; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: rgb(21, 213, 194); + --petio-spinner: invert(39%) sepia(98%) saturate(527%) hue-rotate(129deg) brightness(94%) contrast(101%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 18, 175, 160; +} diff --git a/frontend/src/Content/Theme.Park/Themes/dark.css b/frontend/src/Content/Theme.Park/Themes/dark.css new file mode 100644 index 000000000..d3ecc7ac6 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/dark.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(circle, #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(circle , #3a3a3a, #2d2d2d, #202020, #141414, #000000) center center/cover no-repeat fixed; + + --drop-down-menu-bg: #2d2d2d; + + --button-color: #7a7a7a; + --button-color-hover: #9b9b9b; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 170, 170, 170; + --accent-color-hover: rgba(255, 255, 255, 0.45); + --link-color: #7a7a7a; + --link-color-hover: #fff; + --label-text-color: black; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #6b5; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #e5a00d; + --petio-spinner: invert(35%) sepia(12%) saturate(4%) hue-rotate(2deg) brightness(104%) contrast(86%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 255, 255, 255; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/dracula.css b/frontend/src/Content/Theme.Park/Themes/dracula.css new file mode 100644 index 000000000..f7fbf04f6 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/dracula.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #282a36; + + --modal-bg-color: #1e2029; + --modal-header-color: #1e2029; + --modal-footer-color: #1e2029; + + --drop-down-menu-bg: #1e2029; + + --button-color: #bd93f9; + --button-color-hover: #ff79c6; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 80, 250, 123; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #ff79c6; + --link-color-hover: #8be9fd; + --label-text-color: #282a36; + + --text:#6272a4; + --text-hover: #95adfa; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #50fa7b; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #bd93f9; + --petio-spinner: invert(79%) sepia(27%) saturate(1033%) hue-rotate(74deg) brightness(104%) contrast(96%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 80, 250, 123; + } \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/hotline.css b/frontend/src/Content/Theme.Park/Themes/hotline.css new file mode 100644 index 000000000..f576a9d6c --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/hotline.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --modal-bg-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + --modal-header-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + --modal-footer-color: linear-gradient(0deg, rgba(247,101,184,1) 0%, rgb(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: linear-gradient(90deg, rgba(247,101,184,1) 0%, rgba(21, 95, 165) 100%) center center/cover no-repeat fixed; + + --button-color: #f98dc9; + --button-color-hover: #ff4cb1; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 249, 141, 201; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color:rgb(255, 179, 222); + --link-color-hover: #d7fffe; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #f98dc9; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #f765b8; + --petio-spinner: invert(78%) sepia(17%) saturate(4447%) hue-rotate(290deg) brightness(109%) contrast(95%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 215,255,254; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/hotpink.css b/frontend/src/Content/Theme.Park/Themes/hotpink.css new file mode 100644 index 000000000..864dc7f67 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/hotpink.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(45deg, #fb3f62 0%, #204c80 37%, #004249 97%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(circle, #204c80 0%, #000 100%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: #204c80; + + --button-color: #fb3f62; + --button-color-hover: #cd4164; + --button-text: #eee; + --button-text-hover: #FFF; + + --accent-color: 251, 63, 98; + --accent-color-hover: rgba(var(--accent-color), .8); + --link-color: rgb(0, 255, 157); + --link-color-hover: rgba(0, 255, 157, 0.8); + --label-text-color: #282a36; + + --text:#eee; + --text-hover: #fff; + --text-muted: #999; + + --arr-queue-color: rgb(0, 255, 157); + --plex-poster-unwatched: #fb3f62; + --petio-spinner: invert(29%) sepia(87%) saturate(2199%) hue-rotate(331deg) brightness(115%) contrast(97%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 251, 63, 98; + } + diff --git a/frontend/src/Content/Theme.Park/Themes/nord.css b/frontend/src/Content/Theme.Park/Themes/nord.css new file mode 100644 index 000000000..2de36393c --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/nord.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #2E3440; + + --modal-bg-color: #3B4252; + --modal-header-color: #434C5E; + --modal-footer-color: #434C5E; + + --drop-down-menu-bg: #3B4252; + + --button-color: #79b8ca; + --button-color-hover: #6a9daf; + --button-text: #2E3440; + --button-text-hover: #D8DEE9; + + --accent-color: 121, 184, 202; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #81A1C1; + --link-color-hover: #88C0D0; + --label-text-color: #222730; + + --text:#D8DEE9; + --text-hover: #ECEFF4; + --text-muted: #81A1C1; + + /*Specials*/ + --arr-queue-color: #A3BE8C; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #D08770; + --petio-spinner: invert(83%) sepia(9%) saturate(1787%) hue-rotate(156deg) brightness(85%) contrast(83%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 121, 184, 202; + } \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/organizr.css b/frontend/src/Content/Theme.Park/Themes/organizr.css new file mode 100644 index 000000000..279336e25 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/organizr.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: #1f1f1f; + + --modal-bg-color: #333; + --modal-header-color: #232323; + --modal-footer-color: #232323; + + --drop-down-menu-bg: #1b1b1b; + + --button-color: #2cabe3; + --button-color-hover: #298fbc; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 44, 171, 227; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #2cabe3; + --link-color-hover: #3cc5ff; + --label-text-color: #fff; + + --text:#96a2b4; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #2cabe3; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #2cabe3; + --petio-spinner: invert(65%) sepia(83%) saturate(2026%) hue-rotate(167deg) brightness(90%) contrast(97%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 44, 171, 227; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/overseerr.css b/frontend/src/Content/Theme.Park/Themes/overseerr.css new file mode 100644 index 000000000..7cffcc5ed --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/overseerr.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: linear-gradient(360deg, hsl(221, 39%, 11%) 65%, hsl(215, 28%, 17%) 100%); + + --modal-bg-color: #1f2937; + --modal-header-color: #1f2937; + --modal-footer-color: #1f2937; + + --drop-down-menu-bg: #374151; + + --button-color: #4f46e5; + --button-color-hover: #6366f1; + --button-text: #e5e7eb; + --button-text-hover: #fff; + + --accent-color: 167, 139, 250; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #6366f1; + --link-color-hover: #a78bfa; + --label-text-color: #000; + + --text: #d1d5db; + --text-hover: #fff; + --text-muted: #9ca3af; + + /*Specials*/ + --arr-queue-color: #6366f1; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #6366f1; + --petio-spinner: invert(24%) sepia(59%) saturate(3411%) hue-rotate(237deg) brightness(91%) contrast(96%); /* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 98, 116, 145; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/plex.css b/frontend/src/Content/Theme.Park/Themes/plex.css new file mode 100644 index 000000000..4dfde0f1f --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/plex.css @@ -0,0 +1,28 @@ +:root { + --main-bg-color: url("Resources/blur-noise.png") repeat scroll 0% 0%, radial-gradient(circle at 0% 100%, rgba(54, 66, 84, 0.55) 0%, rgba(54, 66, 84, 0.043) 70%, rgba(54, 66, 84, 0) 80%), radial-gradient(circle at 100% 100%, rgba(113, 135, 153, 0.55) 0%, rgba(113, 135, 153, 0.043) 70%, rgba(113, 135, 153, 0) 80%), radial-gradient(circle at 100% 0%, rgba(54, 66, 84, 0.55) 0%, rgba(54, 66, 84, 0.043) 70%, rgba(54, 66, 84, 0) 80%), radial-gradient(circle at 0% 0%, rgba(91, 114, 135, 0.55) 0%, rgba(91, 114, 135, 0.043) 70%, rgba(91, 114, 135, 0) 80%), rgb(0, 0, 0) center center/cover no-repeat fixed; + + --modal-bg-color: #1f2326; + --modal-header-color: #1f2326; + --modal-footer-color: #323232; + + --drop-down-menu-bg: #191a1c; + + --button-color: #cc7b19; + --button-color-hover: #e59029; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 229, 160, 13; + --accent-color-hover: #ffc107; + --link-color: #e5a00d; + --link-color-hover: #fff; + --label-text-color: #fff; + + --text:#ddd; + --text-hover: #fff; + --text-muted: #999; + + --arr-queue-color: #27c24c; + --petio-spinner: invert(0%) sepia(0%) saturate(100%) hue-rotate(0deg) brightness(100%) contrast(100%); + --gitea-color-primary-dark-4: 255, 193, 7; +} diff --git a/frontend/src/Content/Theme.Park/Themes/radarr-darker.css b/frontend/src/Content/Theme.Park/Themes/radarr-darker.css new file mode 100644 index 000000000..1b7f3bca4 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/radarr-darker.css @@ -0,0 +1,124 @@ +:root { + --main-bg-color: #454545; + + --modal-bg-color: #595959; + --modal-header-color: #595959; + --modal-footer-color: #595959; + + --drop-down-menu-bg: #606060; + + --button-color: #5899eb; + --button-color-hover: #4b91ea; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 255, 194, 48; + --accent-color-hover: rgb(255, 194, 48, .8); + --link-color: rgb(255, 194, 48); + --link-color-hover: rgb(255, 194, 48, .8); + --label-text-color: #eee; + + --text: #ccc; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #5d9cec; + --side-menu-active: #333333; + --scroller-hover: #606060; + --scroller: #707070; + --border-color: #606060; + --label-color: #707070; + --label-info: #5d9cec; + --header-color: #464b51; + --side-menu-color: #595959; +} + +/* HEADER */ + +[class*="PageHeader-header-"] { + background-color: var(--header-color); + color: #fff; +} + +[class*="PageToolbar-toolbar-"] { + background-color: #707070; + color: var(--text); +} + +/* SIDE MENU */ + +[class*="PageSidebar-sidebar-"] { + background-color: var(--side-menu-color); + color: #fff; +} + +[class*=PageSidebarItem-link-]:focus { + color: rgb(var(--accent-color)) !important; +} + +[class*=PageSidebarItem-isActiveLink-] { + color: var(--link-color) !important; +} + +[class*=PageSidebarItem-isActiveParentLink-] { + background-color: var(--side-menu-active); +} + +/* SCROLLER */ +[class*=ImportSeriesSelectSeries-results-]::-webkit-scrollbar-thumb:hover, +[class*=OverlayScroller-thumb-]:hover { + background-color: var(--scroller-hover) !important; +} + +[class*="OverlayScroller-thumb-"], +[class*=Scroller-scroller-]::-webkit-scrollbar-thumb { + background-color: var(--scroller) !important; +} + +/* MODALS */ + +[class*=ModalHeader-modalHeader-], +[class*=FieldSet-legend-] { + border-bottom: 1px solid var(--border-color); +} + +[class*=ModalFooter-modalFooter-] { + border-top: 1px solid var(--border-color); +} + +/* LABLES */ + +[class*="Label-default-"] { + border-color: var(--label-color); + background-color: var(--label-color); + color: white; +} + +[class*="Label-info-"]:not([class*="PageSidebarItem-status-"] [class*="Label-info-"]) { + border-color: var(--label-info); + background-color: var(--label-info); + color: #fff; +} + +/* SETTINGS */ + +[class*=Settings-link-] { + border-bottom: 1px solid var(--border-color); +} + +/* SEARCH DROP DOWN */ + +[class*="MovieSearchInput-containerOpen-"] [class*="MovieSearchInput-movieContainer-"] { + border: 1px solid var(--drop-down-menu-bg); + background-color: var(--drop-down-menu-bg); + box-shadow: inset 0 1px 1px rgb(0 0 0 / 8%); + color: #e1e2e3; +} + +/* SERIES PAGE */ + +[class*="MovieIndexPoster-controls-"] { + background-color: var(--label-color) !important; + color: #fff !important; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/Themes/space-gray.css b/frontend/src/Content/Theme.Park/Themes/space-gray.css new file mode 100644 index 000000000..bcfda52b0 --- /dev/null +++ b/frontend/src/Content/Theme.Park/Themes/space-gray.css @@ -0,0 +1,30 @@ +:root { + --main-bg-color: radial-gradient(ellipse at center, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --modal-bg-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + --modal-header-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + --modal-footer-color: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --drop-down-menu-bg: radial-gradient(ellipse at top, rgba(87, 108, 117, 1) 0%, rgba(37, 50, 55, 1) 100.2%) center center/cover no-repeat fixed; + + --button-color: #607D8B; + --button-color-hover: #81a6b7; + --button-text: #eee; + --button-text-hover: #fff; + + --accent-color: 129, 166, 183; + --accent-color-hover: rgb(var(--accent-color),.8); + --link-color: #81a6b7; + --link-color-hover: #9adfff; + --label-text-color: #fff; + + --text:#bbb; + --text-hover: #fff; + --text-muted: #999; + + /*Specials*/ + --arr-queue-color: #81a6b7; /* Servarr apps + Bazarr*/ + --plex-poster-unwatched: #70aeca; + --petio-spinner: invert(50%) sepia(31%) saturate(341%) hue-rotate(155deg) brightness(88%) contrast(85%);/* Made with https://codepen.io/jsm91/embed/ZEEawyZ */ + --gitea-color-primary-dark-4: 129, 166, 183; +} \ No newline at end of file diff --git a/frontend/src/Content/Theme.Park/radarr-base.css b/frontend/src/Content/Theme.Park/radarr-base.css new file mode 100644 index 000000000..7e122cbc4 --- /dev/null +++ b/frontend/src/Content/Theme.Park/radarr-base.css @@ -0,0 +1,1101 @@ +/* dP dP dP */ +/* 88 88 88 */ +/* d8888P 88d888b. .d8888b. 88d8b.d8b. .d8888b. 88d888b. .d8888b. 88d888b. 88 .dP */ +/* 88 88' `88 88ooood8 88'`88'`88 88ooood8 88' `88 88' `88 88' `88 88888" */ +/* 88 88 88 88. ... 88 88 88 88. ... 88. .88 88. .88 88 88 `8b. */ +/* dP dP dP `88888P' dP dP dP `88888P' 88 88Y888P' `88888P8 dP dP `YP */ +/* 88 */ +/* dP */ + +/* Made by @gilbN */ +/* https://github.com/gilbN/theme.park */ +:root { + --calendar-in-cinemas: 53, 197, 244; + --calendar-downloading: 122 67 182; + --calendar-unmonitored: 173 173 173; + --calendar-unaired: 93 156 236; + --calendar-missing: 240 80 80; + --calendar-available: 39 194 76; + } + +body { + background: var(--main-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +/* Froms */ + +[class*="FormInputHelpText-helpText-"] { + color: var(--text); +} + +[class*="FormInputGroup-inputUnit-"] { + color: var(--text) !important; +} + +/* LINKS */ +[class*="Link-to-"] { + color: var(--text); +} + +[class*="Link-to-"]:hover { + color: var(--text-hover); + text-decoration: none; +} + +a { + color: var(--link-color); +} + +a:hover { + color: var(--link-color-hover); +} + +[class*="TableRowCell-cell-"] [class*="Link-to-"] { + color: var(--link-color) !important; +} + +[class*="TableRowCell-cell-"] [class*="Link-to-"]:hover { + color: var(--link-color-hover) !important; +} + +/* Buttons */ + +[class*="Button-default-"] { + color: var(--button-text); + background-color: var(--button-color); + border-color: transparent; +} + +[class*="Button-default-"]:hover { + border-color: transparent; + background-color: var(--button-color-hover) !important; + color: var(--button-text-hover); +} + +[class*="Button-primary-"] { + border-color: transparent; + background-color: var(--button-color); + color: var(--button-text); +} + +[class*="Button-primary-"]:hover { + border-color: transparent; + background-color: var(--button-color-hover) !important; + color: var(--button-text-hover); +} + +[class*="Button-success-"] { + border-color: var(--button-color); + background-color: var(--button-color); + color: var(--button-text); +} + +[class*="Button-success-"]:hover { + border-color: var(--button-color-hover); + background-color: var(--button-color-hover); + color: var(--button-text-hover); +} + +/* LOADING PAGE */ +[class*="ErrorPage-page-"], +[class*="ErrorPage-version-"], +[class*="LoadingMessage-loadingMessage-"] { + color: var(--text); +} + +[class*="LoadingIndicator-ripple-"] { + border: 2px solid #fff; +} + +/* MODAL */ +[class*="ModalHeader-modalHeader-"] { + background: var(--modal-header-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="ModalContent-modalContent-"] { + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="ModalFooter-modalFooter-"] { + background: var(--modal-footer-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: #fff; + border-top: 1px solid rgb(var(--accent-color)); +} + +[class*="ModalContent-closeButton-"]:hover { + color: #fff; +} + +/* INPUT */ +[class*="TagInput-internalInput-"] { + background-color: transparent; + color: #fff; +} + +[class*="SelectInput-select-"] { + background-color: rgba(0, 0, 0, 0.25) !important; +} + +[class*="SelectInput-select-"]:active, +[class*="SelectInput-select-"]:focus { + background: #1e1e1e !important; +} + +[class*="AutoSuggestInput-suggestionsList-"], +[class*="AutoSuggestInput-suggestionsContainerOpen-"], +[class*="AutoSuggestInput-suggestionsContainer-"] { + background-color: #323232 !important; + color: white; + border: none !important; +} + +[class*="AutoSuggestInput-suggestionHighlighted-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="CheckInput-primaryIsChecked-"] { + border-color: rgb(var(--accent-color)) !important; + background-color: rgb(var(--accent-color)) !important; + color: var(--label-text-color) !important; +} + +[class*="CheckInput-input-"][class*="CheckInput-isNotChecked-"] { + background: #fff; +} + +/* HEADER */ + +[class*="PageHeader-header-"] { + background-color: rgba(0, 0, 0, .35); +} + +/* SEARCH DROPDOWN HEADER */ + +[class*="PageHeader-donate-"] { + color: #c4273c !important; +} + +/* RADARR SPECIFIC */ +[class*="MovieSearchInput-sectionTitle-"] { + color: #fff; +} + +[class*="MovieSearchInput-containerOpen-"] [class*="MovieSearchInput-movieContainer-"] { + border: none !important; + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: #fff !important; + box-shadow: 0 0 10px 1px transparent !important; +} + +[class*="MovieSearchInput-highlighted-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="MovieSearchInput-movieContainer-"]::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.25); +} + +/* SIDE MENU */ +[class*="PageSidebar-sidebarContainer-"] { + background-color: rgba(0, 0, 0, .25); +} + +[class*="PageSidebar-sidebar-"] { + background-color: transparent; +} + +[class*="PageSidebarItem-link-"]:hover { + color: rgb(var(--accent-color)); + text-decoration: none; +} + +[class*="PageSidebarItem-isActiveLink-"], +[class*="PageSidebarItem-isActiveLink-"]:hover, +[class*="PageSidebarItem-link-"]:focus { + color: rgb(var(--accent-color)) !important; +} + +[class*="PageSidebarItem-isActiveParentLink-"] { + background-color: rgba(0, 0, 0, 0.15); +} + +@media only screen and (max-width: 768px) { + [class*="PageSidebar-sidebarContainer-"] { + background: var(--main-bg-color) !important; + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + } +} + +[class*="PageSidebarItem-isActiveItem-"] { + border-left: 3px solid rgb(var(--accent-color)); +} + +/* MOVIES PAGE */ +/* RADARR SPECIFIC */ +[class*="MovieIndexPoster-controls-"] { + background-color: rgb(var(--accent-color)) !important; +} + +[class*="MovieTitlesTableContent-blankpad-"], +[class*="ExtraFileTableContent-blankpad-"], +[class*="MovieHistoryTableContent-blankpad-"] { + color: var(--text); +} + +/* OVERVIEW PAGE */ + +[class*="MovieIndexOverviews-container-"], +[class*="MovieIndexOverviews-container-"]:hover { + background-color: transparent !important; +} + +[class*="MovieIndexOverview-container-"]:hover [class*="MovieIndexOverview-content-"] { + background-color: transparent; +} + +[class*="AddListMovieOverview-container-"]:hover [class*="AddListMovieOverview-content-"] { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="AddListMoviePoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="MovieIndexOverview-content-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="MovieIndexOverview-link-"]:hover { + text-decoration: none; +} + +[class*="ProgressBar-container-"] { + background-color: rgba(0, 0, 0, 0.25); +} + +[class*=".ProgressBar-purple-"] { + background-color: rgb(var(--accent-color)); +} + +/* MOVIE PAGE */ +[class*="MovieDetailsSeason-season-"], +[class*="MovieDetailsSeason-collapseButtonContainer-"] { + border: none !important; + background-color: rgba(0, 0, 0, .25) !important; +} + +[class*="MovieDetailsSeason-actionButton-"], +[class*="MovieDetailsSeason-collapseButtonIcon-"] { + color: var(--text) !important; +} + +.fa-search:hover { + color: var(--text-hover) !important; +} + +[class*="Icon-default-"]:hover:not([class*="Label-large-"] [class*="Icon-default-"], [class*="PathInput-fileBrowserButton-"]svg) { + color: var(--text-hover); +} + +[class*="MonitorToggleButton-toggleButton-"] { + color: #dadada; +} + + +[class*="ProtocolLabel-torrent-"] { + border-color: #00853d !important; + background-color: #00853d !important; + color: #fff !important; +} + +[class*="ProtocolLabel-usenet-"] { + border-color: #17b1d9 !important; + background-color: #17b1d9 !important; + color: #fff !important; +} + +[class*="MovieDetailsSeason-seasonNumber-"] { + color: #fff; +} + +[class*="MovieDetailsSeason-collapseButtonContainer-"] { + border: none !important; + background-color: rgba(0, 0, 0, .25) !important; +} + +[class*="MovieFileEditorTable-container-"] { + border: 1px solid transparent; + background-color: rgba(0, 0, 0, 0.25); +} + +[class*="ExtraFileTable-container-"] { + border: 1px solid transparent; + background-color: rgba(0, 0, 0, .25); +} + +[class*="Popover-title-"], +[class*="SeasonInfo-title-"], +[class*="Popover-body-"], +[class*="Tooltip-body-"] { + background: var(--modal-bg-color) !important; + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; +} + +[class*="Tooltip-tooltipContainer-"] { + color: #fff; +} + +[class*="Tooltip-bottom-"][class*="Tooltip-default-"] { + border-bottom-color: var(--text); +} + +[class*="Tooltip-right-"][class*="Tooltip-default-"] { + border-right-color: var(--text); +} + +[class*="EpisodeTitleLink-link-"]:hover { + color: #fff; + text-decoration: none; +} + +[class*="IconButton-button-"] { + color: var(--text); +} + +[class*="Label-default-"] [class*="IconButton-button-"], +[class*="Label-small-"] [class*="IconButton-button-"]:hover { + color: var(--label-text-color); +} + +[class*="IconButton-button-"]:hover { + background-color: transparent; + color: var(--text-hover); +} + +[class*="Table-tableContainer-"] [class*="IconButton-button-"]:hover { + background-color: transparent; + color: var(--text-hover); +} + +[class*="Label-default-"] { + border-color: rgb(var(--accent-color)); + background-color: rgb(var(--accent-color)); + color: var(--label-text-color); +} + +[class*="Label-info-"] { + border-color: rgb(var(--accent-color)); + background-color: rgb(var(--accent-color)); + color: var(--label-text-color); +} + +[class*="PageSidebarItem-status-"][class*="Label-info-"] { + border-color: var(--arr-queue-color); + background-color: var(--arr-queue-color); + color: var(--label-text-color); +} + +[class*="MovieDetails-selectedTab-"] { + border-bottom: 4px solid rgb(var(--accent-color)); +} + +[class*="MovieDetails-tabList-"] { + color: var(--text-hover); +} + +/* Table options*/ +[class*="TableOptionsColumn-column-"] { + background: rgba(0, 0, 0, .25); + color: var(--text-hover); + border: none; +} + +[class*="TableHeaderCell-headerCell-"] { + color: var(--text-hover); +} + +[class*="Table-table-"] { + color: var(--text); +} + +[class*="TableRow-row-"]:hover { + background-color: hsla(0, 0%, 100%, .08); + color: var(--text-hover); +} + +[class*="TableRowCell-cell-"] { + border-top: 1px solid rgb(255 255 255 / 25%); +} + +/* TOP MENU SERIES */ +[class*="PageToolbar-toolbar-"] { + background-color: rgba(0, 0, 0, .25); + color: var(--text); +} + +[class*="PageToolbarButton-label-"] { + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"][class*="PageToolbarButton-isDisabled-"] { + opacity: .5; + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"][class*="PageToolbarButton-isDisabled-"]:hover, +[class*="PageToolbarButton-isDisabled-"]:hover { + color: var(--text) !important; +} + +[class*="PageToolbarButton-label-"] { + color: var(--text); +} + +[class*="PageToolbarButton-toolbarButton-"]:hover { + color: rgb(var(--accent-color)); +} + +[class*="MenuButton-menuButton-"]:hover { + color: rgb(var(--accent-color)); +} + +/* POSTERS */ +[class*="MovieIndexPoster-title-"], +[class*="MovieIndexPoster-nextAiring-"], +[class*="MovieIndexPosterInfo-info-"], +[class*="MovieIndexPosterInfo-info-"], +[class*="MovieCreditPoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); + color: var(--text-hover); +} + +/* LIBRARY TOP HEADER DROPDOWN */ +[class*="MenuItem-menuItem-"], +[class*="MenuContent-menuContent-"] { + background: var(--drop-down-menu-bg); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="MenuContent-scroller-"] { + box-shadow: black 0 0 5px 0px; +} + +[class*="MenuItem-menuItem-"]:hover, +[class*="MenuItem-menuItem-"]:focus { + background: hsla(0, 0%, 100%, .08) !important; + color: var(--text-hover); + text-decoration: none; +} + +[class*="MenuItemSeparator-separator-"] { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +/* ALPHABET JUMP BAR */ +[class*="PageJumpBar-jumpBar-"] { + color: #FFF; +} + +/* MINI RIGHT SCROLL BAR */ +[class*="OverlayScroller-thumb-"], +[class*="Scroller-scroller-"]::-webkit-scrollbar-thumb { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="OverlayScroller-thumb-"]:hover, +[class*="Scroller-scroller-"]::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.25) !important; +} + +/* ADD NEW */ + +[class*="EnhancedSelectInput-options-"] { + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 4px; + background: var(--drop-down-menu-bg); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: var(--text); +} + +[class*="EnhancedSelectInputOption-isSelected-"], +[class*="EnhancedSelectInputOption-isSelected-"]:hover { + background-color: rgba(255, 255, 255, 0.20) !important; + color: var(--text-hover); +} + +[class*="EnhancedSelectInputOption-option-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="HintedSelectInputOption-hintText-"] { + color: var(--text); +} + +/* SEARCH BAR */ +[class*="Input-input-"], +[class*="AddNewMovie-searchIconContainer-"], +[class*="CheckInput-isIndeterminate-"] { + border: none; + background-color: rgba(255, 255, 255, 0.08); + color: #fff; +} + +[class*="MovieSearchInput-container-"] [class*="Input-input-"] { + background: transparent; + border-bottom: solid 1px #fff; +} + +[class*="MovieSearchInput-container-"] [class*="Input-input-"]:focus { + border-bottom: none; + background: transparent; +} + +[class*="MovieSearchResult-alternateTitle-"] { + color: #fff; + font-size: 12px; +} + +[class*="AddNewMovieSearchResult-year-"] { + color: #fff !important; +} + +[class*="Input-input-"]:focus { + outline: 0; + border-color: #fff; + box-shadow: none; + background-color: rgba(255, 255, 255, 0.25); +} + +[class*="TagInput-input-"][class*="TagInput-isFocused-"] { + outline: 0; + border-color: #fff; + box-shadow: none; +} + +/* TEXT COLOR */ + +[class*="PageContentBody-innerContentBody-"], +[class*="PageContentBody-contentBody-"], +.react-tabs__tab-panel .react-tabs__tab-panel--selected>div { + color: var(--text); +} + +/* SEARCH RESULTS */ +[class*="AddNewMovieSearchResult-searchResult-"], +[class*="AddNewMovieSearchResult-underlay-"] { + background-color: transparent !important; +} + +[class*="AddNewMovieSearchResult-searchResult-"]:hover, +[class*="AddNewMovieSearchResult-underlay-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="AddNewmovieModalContent-year-"] { + color: #fff; +} + +[class*="RootFolderSelectInputSelectedValue-movieFolder-"], +[class*="RootFolderSelectInputSelectedValue-freeSpace-"] { + color: #fff; +} + +[class*="RootFolderSelectInputOption-freeSpace-"], +[class*="RootFolderSelectInputOption-movieFolder-"] { + color: var(--text-muted); +} + +/* MOVE THIS */ +input::-webkit-input-placeholder { + color: var(--text); +} + +input:focus::-webkit-input-placeholder { + color: var(--text-hover); +} + +/* Firefox < 19 */ +input:-moz-placeholder { + color: var(--text); +} + +input:focus:-moz-placeholder { + color: var(--text-hover); +} + +/* Firefox > 19 */ +input::-moz-placeholder { + color: var(--text); +} + +input:focus::-moz-placeholder { + color: var(--text-hover); +} + +/* Internet Explorer 10 */ +input:-ms-input-placeholder { + color: var(--text); +} + +input:focus:-ms-input-placeholder { + color: var(--text-hover); +} + +/* IMPORT */ + +[class*="FieldSet-legend-"] { + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="VirtualTableRow-row-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +/* Drop down menu/button*/ +[class*="ImportMovieSelectMovie-button-"] { + border: none !important; + background-color: rgba(0, 0, 0, 0.25) !important; +} + +[class*="ImportMovieSelectMovie-content-"], +[class*="ImportMovieSelectMovie-searchIconContainer-"] { + border: none; + background: var(--modal-bg-color); + background-repeat: repeat, no-repeat; + background-attachment: fixed, fixed; + background-position: center center, center center; + background-size: auto, cover; + -webkit-background-size: auto, cover; + -moz-background-size: auto, cover; + -o-background-size: auto, cover; + color: white; +} + +[class*="ImportMovieSearchResult-movie-"]:hover { + background-color: rgba(255, 255, 255, 0.08); +} + +[class*="ImportMovieTitle-year-"] { + color: var(--text-muted); +} + +/* DISCOVER */ +[class*="DiscoverMovieOverview-link-"] { + color: var(--text); +} + +[class*="DiscoverMovieOverview-link-"]:hover { + color: var(--text-hover); + text-decoration: none; +} + +[class*="DiscoverMoviePoster-title-"], +[class*="DiscoverMoviePosterInfo-info-"] { + background-color: rgba(255, 255, 255, 0.08); + color: var(--text-hover); +} + +/*Title*/ +[class*="AddListMovieOverview-link-"] { + color: var(--text); +} + +[class*="AddListMovieOverview-link-"]:hover { + color: #fff; +} + +[class*="AddListMovieOverview-content-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +[class*="PageJumpBarItem-jumpBarItem-"]:hover { + color: #fff; + background: hsla(0, 0%, 100%, .08); +} + +/*Posters*/ +[class*="AddListMoviePoster-title-"] { + background-color: rgba(255, 255, 255, 0.08); + color: #fff; +} + +/* MASS EDITOR */ +/* FOOTER */ +[class*="PageContentFooter-contentFooter-"] { + border: none; + background-color: rgba(0, 0, 0, .25); + color: #FFF; +} + +/* CALENDAR */ +[class*="CalendarEvent-downloaded-"] { + background: rgb(var(--calendar-available) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-downloaded-"]:hover { + background: rgb(var(--calendar-available) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-missing-"] { + background: rgb(var(--calendar-missing) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-missing-"]:hover { + background: rgba(var(--calendar-missing) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-unreleased-"] { + background: rgb(var(--calendar-unaired) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-unreleased-"]:hover { + background: rgb(var(--calendar-unaired) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-unmonitored-"] { + background: rgb(var(--calendar-unmonitored) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-unmonitored-"]:hover { + background: rgb(var(--calendar-unmonitored) / .5) !important; + border-left-color: transparent !important; +} + +[class*="CalendarEvent-downloading-"] { + background: rgb(var(--calendar-downloading) / .7) !important; + border-left-color: transparent !important; +} + +[class*="Calendar-calendar-"] [class*="CalendarEvent-downloading-"]:hover { + background: rgb(var(--calendar-downloading) / .5) !important; + border-left-color: transparent !important; +} + +[class*="DayOfWeek-dayOfWeek-"] { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="CalendarDay-dayOfMonth-"] { + border-bottom: 1px solid hsla(0, 0%, 100%, .08); + background-color: rgba(0, 0, 0, .25); +} + +[class*="CalendarDay-isToday-"], +[class*="DayOfWeek-isToday-"] { + background-color: hsla(0, 0%, 100%, .25) !important; +} + +[class*="CalendarDay-day-"], +[class*="CalendarDays-days-"] { + -webkit-box-flex: 1; + -webkit-flex: 1 0 14.28%; + flex: 1 0 14.28%; + overflow: hidden; + min-height: 70px; + border-bottom: 1px solid hsla(0, 0%, 100%, .08); + border-left: 1px solid hsla(0, 0%, 100%, .08); + border-right: 1px solid hsla(0, 0%, 100%, .08); +} + +[class*="CalendarEvent-movieTitle-"], +[class*="CalendarEvent-movieInfo-"], +[class*="CalendarEvent-episodeInfo-"], +[class*="CalendarEvent-airTime-"] { + color: #fff !important; +} + +[class*="CalendarEvent-event-"] { + border-bottom: 1px solid transparent; +} + +[class*="CalendarEventGroup-eventGroup-"] { + border-bottom: 1px solid hsla(0, 0%, 100%, .08) !important; +} + +[class*="CalendarEventGroup-movieTitle-"] { + color: #fff !important; +} + +[class*="CalendarEventGroup-airTime-"] { + color: var(--text); +} + +[class*="CalendarEventGroup-episodeInfo-"] { + color: var(--text); +} + +/* calendar agenda */ +[class*="AgendaEvent-event-"]:hover { + background-color: hsla(0, 0%, 100%, .08) !important; +} + +/* SETTINGS */ +[class*="Settings-link-"] { + color: var(--text-hover); + border-bottom: 1px solid rgb(var(--accent-color)); +} + +[class*="Settings-summary-"] { + color: var(--text); +} + +[class*="FormLabel-large-"] { + color: var(--text-hover); +} + +[class*="FormLabel-isAdvanced-"] { + color: #ff902b; +} + +/* MEDIA MANAGEMENT - FILE NAME TOKENS */ +[class*="NamingOption-small-"] { + border: 1px solid transparent; +} + +[class*="NamingOption-token-"] { + background-color: rgba(255, 255, 255, 0.15); +} + +[class*="NamingOption-token-"] { + background-color: rgba(255, 255, 255, 0.15); +} + +[class*="NamingOption-example-"] { + background-color: rgba(255, 255, 255, 0.25); +} + +[class*="NamingOption-option-"] { + border: 1px solid transparent; +} + +[class*="NamingOption-option-"]:hover [class*="NamingOption-token-"] { + background-color: rgba(255, 255, 2550, 0.25); +} + +[class*="NamingOption-option-"]:hover [class*="NamingOption-example-"] { + background-color: rgba(255, 255, 2550, 0.35); +} + +/* PROFILES */ +[class*="Card-card-"], +[class*="QualityProfiles-addQualityProfile-"] { + background-color: rgba(0, 0, 0, .45); + box-shadow: 0 0 10px 1px #000000; + color: var(--text); +} + +[class*="Card-card-"]:hover { + color: var(--text-hover); +} + +[class*="QualityProfiles-center-"], +[class*="LanguageProfiles-center-"], +[class*="ReleaseProfiles-center-"] { + background-color: transparent; + border: none; +} + +[class*="QualityProfileItem-qualityProfileItem-"], +[class*="QualityProfileItemGroup-qualityProfileItemGroup-"], +[class*="LanguageProfileItem-languageProfileItem-"] { + border: none; + background-color: rgba(0, 0, 0, .25); + color: #FFF; +} + +[class*="QualityProfileItemGroup-qualityProfileItemGroup-"][class*="QualityProfileItemGroup-editGroups-"] { + background: rgba(0, 0, 0, 0.25); +} + +[class*="KeyValueListInputItem-keyInput-"], +[class*="KeyValueListInputItem-valueInput-"] { + border: none; + background: transparent; + color: white; +} + +[class*="QualityProfileFormatItem-qualityProfileFormatItem-"] { + border: 1px solid transparent; + background: rgba(0, 0, 0, .25); +} + +[class*="QualityDefinitions-sizeLimitHelpText-"] { + color: var(--text); +} + +/* PROFILES */ +[class*="Indexers-center-"] { + background-color: transparent; + border: none; +} + +/* DOWNLOAD CLIENTS */ +[class*="DownloadClients-center-"] { + background-color: transparent; + border: none; +} + +/* CONNECTIONS */ +[class*="Notifications-center-"] { + background-color: transparent; + border: none; +} + +/* LISTS */ +[class*="ImportLists-center-"] { + background-color: transparent; + border: none; +} + +/* LOG */ +[class*="Alert-info-"] { + border-color: transparent; + background-color: rgba(0, 0, 0, 0.25); + color: #FFC107; +} + +/* INDEXER */ +[class*="Restrictions-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* LISTS */ +[class*="NetImports-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* CUSTOM FORMAT */ +[class*="CustomFormats-center-"], +[class*="EditCustomFormatModalContent-center-"] { + border: 1px solid transparent; + background-color: transparent; +} + +/* Login Page */ + +.panel-body { + background-color: rgba(0, 0, 0, 0.25); + color: var(--text); +} + +.panel-header { + background-color: rgba(0, 0, 0, 0.45); +} + +.forgot-password { + color: var(--text) !important; +} + +input[type=email], +input[type=password] { + border: none; + background-color: rgba(255, 255, 255, 0.08); + color: #FFF; +} + +.button { + border-color: var(--button-color); + background-color: var(--button-color); + cursor: pointer; +} + +.button:hover { + border-color: var(--button-color-hover); + background-color: var(--button-color-hover); + color: #fff; + text-decoration: none; +} + +.form-input:focus { + outline: 0; + border-color: #fff; + box-shadow: none; + background-color: rgba(255, 255, 255, 0.25); +} + +/* Custom filter */ +[class*="FilterBuilderRow-filterRow-"]:hover { + background-color: transparent; +} + +[class*="CustomFilter-customFilter-"]:hover { + background-color: hsla(0, 0%, 100%, .08); +} + +[class*="SelectMovieModalContent-path-"] { + color: var(--text); +} \ No newline at end of file diff --git a/frontend/src/Settings/UI/UISettings.js b/frontend/src/Settings/UI/UISettings.js index 65462863c..1fda7c4b8 100644 --- a/frontend/src/Settings/UI/UISettings.js +++ b/frontend/src/Settings/UI/UISettings.js @@ -48,6 +48,21 @@ export const movieRuntimeFormatOptions = [ { key: 'minutes', value: '75 mins' } ]; +export const themeOptions = [ + { key: 'default', value: 'Default' }, + { key: 'aquamarine', value: 'Aquamarine' }, + { key: 'dark', value: 'Dark' }, + { key: 'dracula', value: 'Dracula' }, + { key: 'hotline', value: 'Hotline' }, + { key: 'hotpink', value: 'Hotpink' }, + { key: 'nord', value: 'Nord' }, + { key: 'organizr', value: 'Organizr' }, + { key: 'overseerr', value: 'Overseerr' }, + { key: 'plex', value: 'Plex' }, + { key: 'radarr-darker', value: 'Radarr Darker' }, + { key: 'space-gray', value: 'Space Gray' } +]; + class UISettings extends Component { // @@ -184,6 +199,21 @@ class UISettings extends Component {
+ + {translate('Theme')} + + + {translate('SettingsEnableColorImpairedMode')} , + + + , document.getElementById('root') ); diff --git a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs index 46e2f396c..550ce05a7 100644 --- a/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs +++ b/src/NzbDrone.Core/Configuration/ConfigFileProvider.cs @@ -43,6 +43,7 @@ namespace NzbDrone.Core.Configuration string SslCertPassword { get; } string UrlBase { get; } string UiFolder { get; } + string Theme { get; } bool UpdateAutomatically { get; } UpdateMechanism UpdateMechanism { get; } string UpdateScriptPath { get; } @@ -140,6 +141,8 @@ namespace NzbDrone.Core.Configuration public int SslPort => GetValueInt("SslPort", 9898); + public string Theme => GetValue("Theme", "default"); + public bool EnableSsl => GetValueBoolean("EnableSsl", false); public bool LaunchBrowser => GetValueBoolean("LaunchBrowser", true); diff --git a/src/NzbDrone.Core/Localization/Core/en.json b/src/NzbDrone.Core/Localization/Core/en.json index c41194e9f..109188fe6 100644 --- a/src/NzbDrone.Core/Localization/Core/en.json +++ b/src/NzbDrone.Core/Localization/Core/en.json @@ -976,6 +976,9 @@ "TestAllIndexers": "Test All Indexers", "TestAllLists": "Test All Lists", "TheLogLevelDefault": "The log level defaults to 'Info' and can be changed in", + "Theme": "Theme", + "ThemeHelpText": "Themes maintained by {0}!", + "ThemeHelpTextWarning": "Reload required after saving", "ThisCannotBeCancelled": "This cannot be cancelled once started without restarting Radarr.", "ThisConditionMatchesUsingRegularExpressions": "This condition matches using Regular Expressions. Note that the characters {0} have special meanings and need escaping with a {1}", "Time": "Time", diff --git a/src/Radarr.Api.V3/Config/ConfigController.cs b/src/Radarr.Api.V3/Config/ConfigController.cs index e9ab4cbfe..e630612ed 100644 --- a/src/Radarr.Api.V3/Config/ConfigController.cs +++ b/src/Radarr.Api.V3/Config/ConfigController.cs @@ -10,7 +10,7 @@ namespace Radarr.Api.V3.Config public abstract class ConfigController : RestController where TResource : RestResource, new() { - private readonly IConfigService _configService; + protected readonly IConfigService _configService; protected ConfigController(IConfigService configService) { @@ -32,7 +32,7 @@ namespace Radarr.Api.V3.Config } [RestPutById] - public ActionResult SaveConfig(TResource resource) + public virtual ActionResult SaveConfig(TResource resource) { var dictionary = resource.GetType() .GetProperties(BindingFlags.Instance | BindingFlags.Public) diff --git a/src/Radarr.Api.V3/Config/HostConfigController.cs b/src/Radarr.Api.V3/Config/HostConfigController.cs index 21d381820..ee3fa7bed 100644 --- a/src/Radarr.Api.V3/Config/HostConfigController.cs +++ b/src/Radarr.Api.V3/Config/HostConfigController.cs @@ -86,7 +86,7 @@ namespace Radarr.Api.V3.Config [HttpGet] public HostConfigResource GetHostConfig() { - var resource = _configFileProvider.ToResource(_configService); + var resource = HostConfigResourceMapper.ToResource(_configFileProvider, _configService); resource.Id = 1; var user = _userService.FindUser(); diff --git a/src/Radarr.Api.V3/Config/UiConfigController.cs b/src/Radarr.Api.V3/Config/UiConfigController.cs index 9904c15ea..3c6c22200 100644 --- a/src/Radarr.Api.V3/Config/UiConfigController.cs +++ b/src/Radarr.Api.V3/Config/UiConfigController.cs @@ -1,19 +1,39 @@ +using System.Linq; +using System.Reflection; +using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Configuration; using Radarr.Http; +using Radarr.Http.REST.Attributes; namespace Radarr.Api.V3.Config { [V3ApiController("config/ui")] public class UiConfigController : ConfigController { - public UiConfigController(IConfigService configService) + private readonly IConfigFileProvider _configFileProvider; + + public UiConfigController(IConfigService configService, IConfigFileProvider configFileProvider) : base(configService) { + _configFileProvider = configFileProvider; } protected override UiConfigResource ToResource(IConfigService model) { - return UiConfigResourceMapper.ToResource(model); + return UiConfigResourceMapper.ToResource(_configFileProvider, model); + } + + [RestPutById] + public override ActionResult SaveConfig(UiConfigResource resource) + { + var dictionary = resource.GetType() + .GetProperties(BindingFlags.Instance | BindingFlags.Public) + .ToDictionary(prop => prop.Name, prop => prop.GetValue(resource, null)); + + _configFileProvider.SaveConfigDictionary(dictionary); + _configService.SaveConfigDictionary(dictionary); + + return Accepted(resource.Id); } } } diff --git a/src/Radarr.Api.V3/Config/UiConfigResource.cs b/src/Radarr.Api.V3/Config/UiConfigResource.cs index bb1fef871..a7f773024 100644 --- a/src/Radarr.Api.V3/Config/UiConfigResource.cs +++ b/src/Radarr.Api.V3/Config/UiConfigResource.cs @@ -21,27 +21,29 @@ namespace Radarr.Api.V3.Config public bool EnableColorImpairedMode { get; set; } public int MovieInfoLanguage { get; set; } public int UILanguage { get; set; } + public string Theme { get; set; } } public static class UiConfigResourceMapper { - public static UiConfigResource ToResource(IConfigService model) + public static UiConfigResource ToResource(this IConfigFileProvider model, IConfigService configService) { return new UiConfigResource { - FirstDayOfWeek = model.FirstDayOfWeek, - CalendarWeekColumnHeader = model.CalendarWeekColumnHeader, + FirstDayOfWeek = configService.FirstDayOfWeek, + CalendarWeekColumnHeader = configService.CalendarWeekColumnHeader, - MovieRuntimeFormat = model.MovieRuntimeFormat, + MovieRuntimeFormat = configService.MovieRuntimeFormat, - ShortDateFormat = model.ShortDateFormat, - LongDateFormat = model.LongDateFormat, - TimeFormat = model.TimeFormat, - ShowRelativeDates = model.ShowRelativeDates, + ShortDateFormat = configService.ShortDateFormat, + LongDateFormat = configService.LongDateFormat, + TimeFormat = configService.TimeFormat, + ShowRelativeDates = configService.ShowRelativeDates, - EnableColorImpairedMode = model.EnableColorImpairedMode, - MovieInfoLanguage = model.MovieInfoLanguage, - UILanguage = model.UILanguage + EnableColorImpairedMode = configService.EnableColorImpairedMode, + MovieInfoLanguage = configService.MovieInfoLanguage, + UILanguage = configService.UILanguage, + Theme = model.Theme }; } } diff --git a/src/Radarr.Http/Frontend/InitializeJsController.cs b/src/Radarr.Http/Frontend/InitializeJsController.cs index e06343e2e..2e06d4623 100644 --- a/src/Radarr.Http/Frontend/InitializeJsController.cs +++ b/src/Radarr.Http/Frontend/InitializeJsController.cs @@ -46,6 +46,7 @@ namespace Radarr.Http.Frontend builder.AppendLine("window.Radarr = {"); builder.AppendLine($" apiRoot: '{_urlBase}/api/v3',"); builder.AppendLine($" apiKey: '{_apiKey}',"); + builder.AppendLine($" theme: '{_configFileProvider.Theme}',"); builder.AppendLine($" release: '{BuildInfo.Release}',"); builder.AppendLine($" version: '{BuildInfo.Version.ToString()}',"); builder.AppendLine($" branch: '{_configFileProvider.Branch.ToLower()}',");