-
-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Auto styles are incorrect when printing #134
Comments
@MatthewHerbst https://stackoverflow.com/a/59223868/1334703
|
Hi @jaywcjlove I know that I can do that as a developer, but that solution isn't sufficient for an end-user of a website |
@MatthewHerbst https://codesandbox.io/embed/react-textarea-code-editor-for-example-github-com-uiwjs-react-textarea-code-editor-issues-134-ex2v6j?fontsize=14&hidenavigation=1&theme=dark This is an example, you need to improve import { useEffect, useState } from "react";
export function useTheme() {
const mode = getComputedStyle(document.documentElement).getPropertyValue(
"content"
);
const [theme, setTheme] = useState(mode === '"dark"' ? "dark" : "light");
useEffect(() => {
window.matchMedia("(prefers-color-scheme: light)").onchange = (event) => {
if (event.matches) {
setTheme("light");
}
};
window.matchMedia("(prefers-color-scheme: dark)").onchange = (event) => {
if (event.matches) {
setTheme("dark");
}
};
}, []);
return { theme, setTheme };
} import React from "react";
import ReactDOM from "react-dom";
import CodeEditor from "@uiw/react-textarea-code-editor";
import "./index.css";
import { useTheme } from "./useTheme";
function App() {
const { theme } = useTheme();
const [code, setCode] = React.useState(
`function add(a, b) {\n return a + b;\n}`
);
console.log("theme:", theme);
return (
<div data-color-mode={theme}>
<h3>Auto</h3>
<CodeEditor
value={code}
language="js"
placeholder="Please enter JS code."
onChange={(evn) => setCode(evn.target.value)}
padding={15}
style={{
fontFamily:
"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",
fontSize: 12
}}
/>
</div>
);
} /* Light mode */
@media (prefers-color-scheme: light) {
html {
content: "light"; /* (ab)using the content property */
}
}
/* Dark mode */
@media (prefers-color-scheme: dark), print {
html {
content: "dark"; /* (ab)using the content property */
}
} |
While this is at least an improvement since now all the text is legible, this still prints the light version instead of the dark version.
|
The print style is given by the Chrome browser. It needs to be set manually. |
I can't tell the end user who isn't a programmer how to set it. @media print {
/** Set print-only styles here */
} |
Although the printing theme is set, the browser theme is still @media print {
/** Set print-only styles here */
html {
content: "dark"; /* (ab)using the content property */
}
} |
Then please make the changes in be part of the code, that way it "works" even without being set. And please add instructions about this to the README so your users know what to do. |
@MatthewHerbst I tried integrating the system light and dark themes, but it will be missing some features. E.g: + <div data-color-mode="light">
<h3>Light</h3>
<CodeEditor
value={code}
ref={textRef}
language="js"
placeholder="Please enter JS code."
onChange={(evn) => setCode(evn.target.value)}
padding={15}
style={{
fontFamily:
"ui-monospace,SFMono-Regular,SF Mono,Consolas,Liberation Mono,Menlo,monospace",
fontSize: 12
}}
/>
+ </div> |
When printing, the colors of the code are incorrect when styles are using auto.
My system:
MacOS Ventura 13.1 set to Dark theme
Chrome 108.0.5359.124 (Official Build) (arm64)
To reproduce:
I am the maintainer of
react-to-print
, and this issue was discovered by one of our users: MatthewHerbst/react-to-print#540. I looked at the styles and didn't see anything obviously wrong, but I am not an expert in that area. If I can be of any assistance solving this, please let me know.The text was updated successfully, but these errors were encountered: