You've already forked nginx-proxy-manager
							
							
				mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-30 18:05:34 +03:00 
			
		
		
		
	Dark UI for react-select
This commit is contained in:
		| @@ -1,3 +1,14 @@ | ||||
| :root { | ||||
| 	color-scheme: light dark; | ||||
| } | ||||
|  | ||||
| .light { | ||||
| 	color-scheme: light; | ||||
| } | ||||
| .dark { | ||||
| 	color-scheme: dark; | ||||
| } | ||||
|  | ||||
| .modal-backdrop { | ||||
| 	--tblr-backdrop-opacity: 0.8 !important; | ||||
| } | ||||
| @@ -12,3 +23,45 @@ | ||||
| .ml-1 { | ||||
| 	margin-left: 0.25rem; | ||||
| } | ||||
|  | ||||
| .react-select-container { | ||||
| 	.react-select__control  { | ||||
| 		color: var(--tblr-body-color); | ||||
| 		background-color: var(--tblr-bg-forms); | ||||
| 		border: var(--tblr-border-width) solid var(--tblr-border-color); | ||||
|  | ||||
| 		.react-select__input { | ||||
| 			color: var(--tblr-body-color) !important; | ||||
| 		} | ||||
|  | ||||
| 		.react-select__single-value { | ||||
| 			color: var(--tblr-body-color); | ||||
| 		} | ||||
|  | ||||
| 		.react-select__multi-value { | ||||
| 			border: 1px solid var(--tblr-border-color); | ||||
| 			background-color: var(--tblr-bg-surface-tertiary); | ||||
| 			color: var(--tblr-secondary) !important; | ||||
|  | ||||
| 			.react-select__multi-value__label { | ||||
| 				color: var(--tblr-secondary) !important; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	.react-select__menu { | ||||
| 		background-color: var(--tblr-bg-forms); | ||||
|  | ||||
| 		.react-select__option { | ||||
| 			background: rgba(var(--tblr-primary-rgb), .04); | ||||
| 			color: inherit !important; | ||||
| 			&.react-select__option--is-focused { | ||||
| 				background: rgba(var(--tblr-primary-rgb), .1); | ||||
| 			} | ||||
|  | ||||
| 			&.react-select__option--is-focused.react-select__option--is-selected { | ||||
| 				background: rgba(var(--tblr-primary-rgb), .2); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -46,6 +46,8 @@ export function DNSProviderFields() { | ||||
| 							DNS Provider | ||||
| 						</label> | ||||
| 						<Select | ||||
| 							className="react-select-container" | ||||
| 							classNamePrefix="react-select" | ||||
| 							name={field.name} | ||||
| 							id="dnsProvider" | ||||
| 							closeMenuOnSelect={true} | ||||
|   | ||||
| @@ -91,6 +91,8 @@ export function DomainNamesField({ | ||||
| 						{intl.formatMessage({ id: label })} | ||||
| 					</label> | ||||
| 					<CreatableSelect | ||||
| 						className="react-select-container" | ||||
| 						classNamePrefix="react-select" | ||||
| 						name={field.name} | ||||
| 						id={id} | ||||
| 						closeMenuOnSelect={true} | ||||
|   | ||||
| @@ -103,6 +103,8 @@ export function SSLCertificateField({ | ||||
| 					{isError ? <div className="invalid-feedback">{`${error}`}</div> : null} | ||||
| 					{!isLoading && !isError ? ( | ||||
| 						<Select | ||||
| 							className="react-select-container" | ||||
| 							classNamePrefix="react-select" | ||||
| 							defaultValue={options[0]} | ||||
| 							options={options} | ||||
| 							components={{ Option }} | ||||
|   | ||||
| @@ -107,7 +107,7 @@ export function SSLOptionsFields() { | ||||
|  | ||||
| 					<Field name="letsencryptEmail"> | ||||
| 						{({ field }: any) => ( | ||||
| 							<div className="row mt-5"> | ||||
| 							<div className="mt-5"> | ||||
| 								<label htmlFor="letsencryptEmail" className="form-label"> | ||||
| 									Email Address for Let's Encrypt | ||||
| 								</label> | ||||
|   | ||||
| @@ -1,13 +1,6 @@ | ||||
| .darkBtn { | ||||
| 	color: var(--tblr-light) !important; | ||||
| 	&:hover { | ||||
| 		border: var(--tblr-btn-border-width) solid transparent !important; | ||||
| 		background: color-mix(in srgb, var(--tblr-btn-hover-bg) 10%, transparent) !important; | ||||
| 	} | ||||
| } | ||||
| .btn { | ||||
| 	color: light-dark(var(--tblr-dark), var(--tblr-light)) !important; | ||||
|  | ||||
| .lightBtn { | ||||
| 	color: var(--tblr-dark) !important; | ||||
| 	&:hover { | ||||
| 		border: var(--tblr-btn-border-width) solid transparent !important; | ||||
| 		background: color-mix(in srgb, var(--tblr-btn-hover-bg) 10%, transparent) !important; | ||||
|   | ||||
| @@ -15,11 +15,8 @@ function LocalePicker() { | ||||
| 		location.reload(); | ||||
| 	}; | ||||
|  | ||||
| 	const classes = ["btn", "dropdown-toggle", "btn-sm"]; | ||||
| 	let cns = cn(...classes, "btn-ghost-light", styles.lightBtn); | ||||
| 	if (getTheme() === "dark") { | ||||
| 		cns = cn(...classes, "btn-ghost-dark", styles.darkBtn); | ||||
| 	} | ||||
| 	const classes = ["btn", "dropdown-toggle", "btn-sm", styles.btn]; | ||||
| 	const cns = cn(...classes, getTheme() === "dark" ? "btn-ghost-dark" : "btn-ghost-light"); | ||||
|  | ||||
| 	return ( | ||||
| 		<div className="dropdown"> | ||||
|   | ||||
| @@ -40,6 +40,8 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => { | ||||
|  | ||||
| 	useEffect(() => { | ||||
| 		document.body.dataset.theme = theme; | ||||
| 		document.body.classList.remove(theme === Light ? Dark : Light); | ||||
| 		document.body.classList.add(theme); | ||||
| 		localStorage.setItem(StorageKey, theme); | ||||
| 	}, [theme]); | ||||
|  | ||||
| @@ -53,7 +55,7 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => { | ||||
|  | ||||
| 	const getTheme = () => { | ||||
| 		return theme; | ||||
| 	} | ||||
| 	}; | ||||
|  | ||||
| 	document.documentElement.setAttribute("data-bs-theme", theme); | ||||
| 	return <ThemeContext.Provider value={{ theme, toggleTheme, setTheme, getTheme }}>{children}</ThemeContext.Provider>; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user