diff --git a/packages/contented-preview/public/favicon/apple-touch-icon.png b/packages/contented-preview/public/favicon/apple-touch-icon.png deleted file mode 100644 index 6ee86b8f..00000000 Binary files a/packages/contented-preview/public/favicon/apple-touch-icon.png and /dev/null differ diff --git a/packages/contented-preview/public/favicon/favicon-16x16.png b/packages/contented-preview/public/favicon/favicon-16x16.png deleted file mode 100644 index fd6bf706..00000000 Binary files a/packages/contented-preview/public/favicon/favicon-16x16.png and /dev/null differ diff --git a/packages/contented-preview/public/favicon/favicon-32x32.png b/packages/contented-preview/public/favicon/favicon-32x32.png deleted file mode 100644 index 053c7239..00000000 Binary files a/packages/contented-preview/public/favicon/favicon-32x32.png and /dev/null differ diff --git a/packages/contented-preview/src/errors/PipelineCollectionNotFoundException.js b/packages/contented-preview/src/errors/PipelineCollectionNotFoundException.js deleted file mode 100644 index 64a59445..00000000 --- a/packages/contented-preview/src/errors/PipelineCollectionNotFoundException.js +++ /dev/null @@ -1,5 +0,0 @@ -export class PipelineCollectionNotFoundException extends Error { - constructor(pipelineName){ - super(`Pipeline type '${pipelineName}' cannot resolve its collection. Please check if contented.config.mjs is properly configured.`) - } -} \ No newline at end of file diff --git a/packages/contented-preview/src/pages/_app.page.jsx b/packages/contented-preview/src/pages/_app.page.jsx index a8a0ee02..619c8f9d 100755 --- a/packages/contented-preview/src/pages/_app.page.jsx +++ b/packages/contented-preview/src/pages/_app.page.jsx @@ -15,7 +15,9 @@ export default function App({ Component, pageProps }) {
- +
+ +
diff --git a/packages/contented-preview/src/pages/_components/ContentNavigation.jsx b/packages/contented-preview/src/pages/_components/ContentNavigation.jsx index 20af61c6..7d3c467c 100644 --- a/packages/contented-preview/src/pages/_components/ContentNavigation.jsx +++ b/packages/contented-preview/src/pages/_components/ContentNavigation.jsx @@ -75,7 +75,9 @@ export default function ContentNavigation({ sections, className }) {
{pipelines.map(([type, pipeline]) => { if (pipeline.collection[0] === undefined || pipeline.collection[0] === null) { - throw new PipelineCollectionNotFoundException(type); + throw new Error( + `Pipeline type '${type}' cannot resolve its collection. Please check if contented.config.mjs is properly configured.`, + ); } return ( diff --git a/packages/contented-preview/src/pages/_components/Header.jsx b/packages/contented-preview/src/pages/_components/Header.jsx index c6087c72..7e0faee4 100644 --- a/packages/contented-preview/src/pages/_components/Header.jsx +++ b/packages/contented-preview/src/pages/_components/Header.jsx @@ -1,11 +1,10 @@ -import { Bars3Icon, DocumentTextIcon, XMarkIcon } from '@heroicons/react/24/outline'; +import { Bars3Icon, DocumentTextIcon, MoonIcon, SunIcon, XMarkIcon } from '@heroicons/react/24/outline'; import clsx from 'clsx'; import Link from 'next/link'; import { Pipelines } from '../../../../index.js'; -import { PipelineCollectionNotFoundException } from '../../errors/PipelineCollectionNotFoundException.js'; import { useMenu } from './MenuContext'; -import ThemeButton from './ThemeButton'; +import { useTheme } from './ThemeContext'; export default function Header() { const { isOpen, setIsOpen } = useMenu(); @@ -37,7 +36,9 @@ export default function Header() {
{pipelines.map(([type, pipeline]) => { if (pipeline.collection[0] === undefined || pipeline.collection[0] === null) { - throw new PipelineCollectionNotFoundException(type); + throw new Error( + `Pipeline type '${type}' cannot resolve its collection. Please check if contented.config.mjs is properly configured.`, + ); } return ( @@ -71,7 +72,7 @@ export default function Header() { ); } -export function GitHubButton(props) { +function GitHubButton(props) { return ( ); } + +function ThemeButton(props) { + const { setTheme } = useTheme(); + + return ( +
+ +
+ ); +} diff --git a/packages/contented-preview/src/pages/_components/ThemeButton.jsx b/packages/contented-preview/src/pages/_components/ThemeButton.jsx deleted file mode 100644 index c816bc52..00000000 --- a/packages/contented-preview/src/pages/_components/ThemeButton.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import { MoonIcon, SunIcon } from '@heroicons/react/24/outline'; -import { useTheme } from './ThemeContext'; - -export default function ThemeButton(props) { - const { setTheme } = useTheme(); - - return ( -
- -
- ); -} diff --git a/packages/contented-preview/src/pages/_components/ThemeContext.jsx b/packages/contented-preview/src/pages/_components/ThemeContext.jsx index d6d55a7d..eef73c13 100644 --- a/packages/contented-preview/src/pages/_components/ThemeContext.jsx +++ b/packages/contented-preview/src/pages/_components/ThemeContext.jsx @@ -1,4 +1,59 @@ import { createContext, useState, useEffect, useContext } from 'react'; +import Script from 'next/script'; + +/* +let mQ = window.matchMedia('(prefers-color-scheme: dark)'); +let dE = document.documentElement; +let dEC = dE.classList; + +function update(savedTheme) { + let theme = 'system' + try { + if (!savedTheme) { + savedTheme = window.localStorage.theme + } + if (savedTheme === 'dark') { + theme = 'dark' + dEC.add('dark') + } else if (savedTheme === 'light') { + theme = 'light' + dEC.remove('dark') + } else if (mQ.matches) { + dEC.add('dark') + } else { + dEC.remove('dark') + } + } catch { + theme = 'light' + dEC.remove('dark') + } + return theme +} + +function updateWT(savedTheme) { + update(savedTheme) + dEC.add('[&_*]:!transition-none') + window.setTimeout(() => { + dEC.remove('[&_*]:!transition-none') + }, 0) +} + +dE.setAttribute('data-theme', update()) + +new MutationObserver(([{ oldValue }]) => { + let newValue = dE.getAttribute('data-theme') + if (newValue !== oldValue) { + try { + window.localStorage.setItem('theme', newValue) + } catch {} + updateWT(newValue) + } +}).observe(dE, { attributeFilter: ['data-theme'], attributeOldValue: true }) + +mQ.addEventListener('change', updateWT) +window.addEventListener('storage', updateWT) + */ +const colorSchemeScript = `let mQ=window.matchMedia("(prefers-color-scheme: dark)"),dE=document.documentElement,dEC=dE.classList;function update(e){let t="system";try{e||(e=window.localStorage.theme),"dark"===e?(t="dark",dEC.add("dark")):"light"===e?(t="light",dEC.remove("dark")):mQ.matches?dEC.add("dark"):dEC.remove("dark")}catch{t="light",dEC.remove("dark")}return t}function updateWT(e){update(e),dEC.add("[&_*]:!transition-none"),window.setTimeout((()=>{dEC.remove("[&_*]:!transition-none")}),0)}dE.setAttribute("data-theme",update()),new MutationObserver((([{oldValue:e}])=>{let t=dE.getAttribute("data-theme");if(t!==e){try{window.localStorage.setItem("theme",t)}catch{}updateWT(t)}})).observe(dE,{attributeFilter:["data-theme"],attributeOldValue:!0}),mQ.addEventListener("change",updateWT),window.addEventListener("storage",updateWT);`; const ThemeContext = createContext(undefined); @@ -13,7 +68,12 @@ export function ThemeProvider(props) { } }, [theme]); - return {props.children}; + return ( + <> + {props.children} +