@@ -0,0 +1,145 @@ | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 400; | |||||
src: | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 700; | |||||
src: | |||||
local('Encode Sans Semi Expanded Bold'), | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 100; | |||||
src: | |||||
local('Encode Sans Condensed Thin'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 200; | |||||
src: | |||||
local('Encode Sans Condensed ExtraLight'), | |||||
local('Encode Sans Condensed Extra Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 300; | |||||
src: | |||||
local('Encode Sans Condensed Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
:root { | |||||
--font-family-base: 'Encode Sans Semi Expanded', 'Encode Sans', system-ui; | |||||
--font-stretch-base: semi-expanded; | |||||
--font-weight-base: 400; | |||||
--line-height-base: 2; | |||||
--font-family-headings:'Encode Sans Condensed', 'Encode Sans', system-ui; | |||||
--font-stretch-headings: condensed; | |||||
--font-weight-headings: 100; | |||||
--line-height-headings: 1.5; | |||||
--font-family-monospace: 'mononoki'; | |||||
--font-size-root: 16px; | |||||
--opacity-light: 0.25; | |||||
--opacity-lighter: 0.5; | |||||
--opacity-lightest: 0.75; | |||||
} | |||||
:root { | |||||
--color-bg: var(--color-negative, white); | |||||
--color-fg: var(--color-positive, black); | |||||
} | |||||
@media (prefers-color-scheme: dark) { | |||||
:root { | |||||
--color-bg: var(--color-negative, black); | |||||
--color-fg: var(--color-positive, white); | |||||
} | |||||
} | |||||
:root { | |||||
background-color: var(--color-bg); | |||||
color: var(--color-fg); | |||||
font-size: var(--font-size-root); | |||||
font-family: var(--font-family-base), sans-serif; | |||||
font-stretch: var(--font-stretch-base, normal); | |||||
font-weight: var(--font-weight-base, 400); | |||||
line-height: var(--line-height-base, 2); | |||||
transition-property: color, background-color; | |||||
transition-timing-function: ease; | |||||
transition-duration: 350ms; | |||||
} | |||||
h1 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h2 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h3 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h4 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h5 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h6 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
code { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} | |||||
pre { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} | |||||
a { | |||||
color: var(--color-accent); | |||||
} |
@@ -1,73 +1,9 @@ | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 400; | |||||
src: | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 700; | |||||
src: | |||||
local('Encode Sans Semi Expanded Bold'), | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 100; | |||||
src: | |||||
local('Encode Sans Condensed Thin'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 200; | |||||
src: | |||||
local('Encode Sans Condensed ExtraLight'), | |||||
local('Encode Sans Condensed Extra Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 300; | |||||
src: | |||||
local('Encode Sans Condensed Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
:root { | :root { | ||||
--color-shade: #000; | --color-shade: #000; | ||||
--color-active: #f90; | |||||
--font-family-base: 'Encode Sans Semi Expanded', 'Encode Sans', system-ui; | |||||
--font-stretch-base: semi-expanded; | |||||
--font-weight-base: 400; | |||||
--line-height-base: 2; | |||||
--font-family-headings:'Encode Sans Condensed', 'Encode Sans', system-ui; | |||||
--font-stretch-headings: condensed; | |||||
--font-weight-headings: 100; | |||||
--line-height-headings: 1.5; | |||||
--font-family-monospace: 'mononoki'; | |||||
--font-size-root: 16px; | |||||
--color-negative: #222; | --color-negative: #222; | ||||
--color-positive: #eee; | --color-positive: #eee; | ||||
--color-accent: #C78AB3; | --color-accent: #C78AB3; | ||||
--opacity-light: 0.25; | --color-active: #f90; | ||||
--opacity-lighter: 0.5; | |||||
--opacity-lightest: 0.75; | |||||
--color-code-number: #74f95e; | --color-code-number: #74f95e; | ||||
--color-code-keyword: #ff4389; | --color-code-keyword: #ff4389; | ||||
--color-code-type: #5097D2; | --color-code-type: #5097D2; | ||||
@@ -81,72 +17,3 @@ | |||||
--color-code-url: #0099CC; | --color-code-url: #0099CC; | ||||
--color-code-global: #C28050; | --color-code-global: #C28050; | ||||
} | } | ||||
:root { | |||||
--color-bg: var(--color-negative, white); | |||||
--color-fg: var(--color-positive, black); | |||||
background-color: var(--color-bg); | |||||
color: var(--color-fg); | |||||
font-size: var(--font-size-root); | |||||
font-family: var(--font-family-base), sans-serif; | |||||
font-stretch: var(--font-stretch-base, normal); | |||||
font-weight: var(--font-weight-base, 400); | |||||
line-height: var(--line-height-base, 2); | |||||
transition-property: color, background-color; | |||||
transition-timing-function: ease; | |||||
transition-duration: 350ms; | |||||
} | |||||
h1 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h2 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h3 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h4 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h5 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h6 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
a { | |||||
color: var(--color-accent); | |||||
} | |||||
code { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} | |||||
pre { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} |
@@ -1,73 +1,9 @@ | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 400; | |||||
src: | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: semi-expanded; | |||||
font-weight: 700; | |||||
src: | |||||
local('Encode Sans Semi Expanded Bold'), | |||||
local('Encode Sans Semi Expanded'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 100; | |||||
src: | |||||
local('Encode Sans Condensed Thin'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 200; | |||||
src: | |||||
local('Encode Sans Condensed ExtraLight'), | |||||
local('Encode Sans Condensed Extra Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
@font-face { | |||||
font-family: 'Encode Sans'; | |||||
font-stretch: condensed; | |||||
font-weight: 300; | |||||
src: | |||||
local('Encode Sans Condensed Light'), | |||||
local('Encode Sans Condensed'), | |||||
local('Encode Sans'); | |||||
} | |||||
:root { | :root { | ||||
--color-shade: #fff; | --color-shade: #fff; | ||||
--color-negative: #f8f8f8; | --color-negative: #f8f8f8; | ||||
--color-positive: #333; | --color-positive: #333; | ||||
--color-accent: #ba6a9c; | --color-accent: #ba6a9c; | ||||
--color-active: #f90; | --color-active: #f90; | ||||
--font-family-base: 'Encode Sans Semi Expanded', 'Encode Sans', system-ui; | |||||
--font-stretch-base: semi-expanded; | |||||
--font-weight-base: 400; | |||||
--line-height-base: 2; | |||||
--font-family-headings:'Encode Sans Condensed', 'Encode Sans', system-ui; | |||||
--font-stretch-headings: condensed; | |||||
--font-weight-headings: 100; | |||||
--line-height-headings: 1.5; | |||||
--font-family-monospace: 'mononoki'; | |||||
--font-size-root: 16px; | |||||
--opacity-light: 0.5; | |||||
--opacity-lighter: 0.75; | |||||
--opacity-lightest: 0.875; | |||||
--color-code-number: #72b507; | --color-code-number: #72b507; | ||||
--color-code-keyword: #ee5189; | --color-code-keyword: #ee5189; | ||||
--color-code-type: #427fb1; | --color-code-type: #427fb1; | ||||
@@ -81,80 +17,3 @@ | |||||
--color-code-url: #0099CC; | --color-code-url: #0099CC; | ||||
--color-code-global: #C28050; | --color-code-global: #C28050; | ||||
} | } | ||||
/*@media (prefers-color-scheme: dark) {*/ | |||||
/* :root {*/ | |||||
/* --color-negative: #222;*/ | |||||
/* --color-positive: #eee;*/ | |||||
/* --color-accent: #C78AB3;*/ | |||||
/* --opacity-light: 0.25;*/ | |||||
/* --opacity-lighter: 0.5;*/ | |||||
/* --opacity-lightest: 0.75;*/ | |||||
/* }*/ | |||||
/*}*/ | |||||
:root { | |||||
--color-bg: var(--color-negative, white); | |||||
--color-fg: var(--color-positive, black); | |||||
background-color: var(--color-bg); | |||||
color: var(--color-fg); | |||||
font-size: var(--font-size-root); | |||||
font-family: var(--font-family-base), sans-serif; | |||||
font-stretch: var(--font-stretch-base, normal); | |||||
font-weight: var(--font-weight-base, 400); | |||||
line-height: var(--line-height-base, 2); | |||||
} | |||||
h1 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h2 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h3 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h4 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h5 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
h6 { | |||||
font-family: var(--font-family-headings), sans-serif; | |||||
font-stretch: var(--font-stretch-headings, normal); | |||||
font-weight: var(--font-weight-headings, 400); | |||||
line-height: var(--line-height-headings, 1.5); | |||||
} | |||||
a { | |||||
color: var(--color-accent); | |||||
} | |||||
code { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} | |||||
pre { | |||||
font-family: var(--font-family-monospace), monospace; | |||||
} |
@@ -35,61 +35,41 @@ const applyStyles = (theme) => { | |||||
}) | }) | ||||
} | } | ||||
const handleInitializeTheme = (initialTheme: string) => () => { | |||||
applyStyles(getTheme() || initialTheme) | |||||
} | |||||
const ThemeToggle = ({ | const ThemeToggle = ({ | ||||
initialTheme, | initialTheme, | ||||
}) => { | }) => { | ||||
const [theme, setTheme] = React.useState(initialTheme!) | const [theme, setTheme] = React.useState(null) | ||||
const handleSetTheme = (t: string) => () => { | const handleSetTheme = (e) => { | ||||
setTheme(t) | setTheme(e.target.checked ? 'Light' : 'Dark') | ||||
} | } | ||||
React.useEffect(() => { | React.useEffect(() => { | ||||
window.localStorage.setItem('tesseract-theme', theme as string) | if (theme as string) { | ||||
}, [theme]) | window.localStorage.setItem('tesseract-theme', theme) | ||||
return | |||||
React.useEffect(() => { | } | ||||
applyStyles(theme) | setTheme(getTheme()) | ||||
}, [theme]) | }, [theme]) | ||||
React.useEffect(() => { | React.useEffect(() => { | ||||
const handler = handleInitializeTheme(initialTheme) | if (theme as string) { | ||||
window.addEventListener('load', handler) | applyStyles(theme) | ||||
return () => { | |||||
window.removeEventListener('load', handler) | |||||
} | } | ||||
}, [initialTheme]) | }, [theme]) | ||||
return ( | return ( | ||||
<ToggleWrapper> | <ToggleWrapper> | ||||
<ToggleInput | <ToggleInput | ||||
type="checkbox" | type="checkbox" | ||||
defaultChecked={theme === 'Dark'} | checked={theme === 'Light'} | ||||
onChange={handleSetTheme(theme === 'Dark' ? 'Light' : 'Dark')} | onChange={handleSetTheme} | ||||
/> | /> | ||||
<span> | <span> | ||||
{ | <Icon | ||||
theme === 'Dark' | label="Toggle Theme" | ||||
&& ( | name={theme === 'Dark' ? 'moon' : 'sun'} | ||||
<Icon | /> | ||||
label="Set Light Mode" | |||||
name="moon" | |||||
/> | |||||
) | |||||
} | |||||
{ | |||||
theme === 'Light' | |||||
&& ( | |||||
<Icon | |||||
label="Set Dark Mode" | |||||
name="sun" | |||||
/> | |||||
) | |||||
} | |||||
</span> | </span> | ||||
</ToggleWrapper> | </ToggleWrapper> | ||||
) | ) | ||||
@@ -24,7 +24,8 @@ export default class MyDocument extends Document { | |||||
<> | <> | ||||
{initialProps.styles} | {initialProps.styles} | ||||
<link rel="stylesheet" href={`${publicUrl}/global.css`} /> | <link rel="stylesheet" href={`${publicUrl}/global.css`} /> | ||||
<link rel="stylesheet" title="Dark" href={`${publicUrl}/theme/dark.css`} /> | <link rel="stylesheet" href={`${publicUrl}/theme.css`} /> | ||||
<link rel="alternate stylesheet" title="Dark" href={`${publicUrl}/theme/dark.css`} /> | |||||
<link rel="alternate stylesheet" title="Light" href={`${publicUrl}/theme/light.css`} /> | <link rel="alternate stylesheet" title="Light" href={`${publicUrl}/theme/light.css`} /> | ||||
{sheet.getStyleElement()} | {sheet.getStyleElement()} | ||||
</> | </> | ||||