@kobalte/solidbase
Version:
Fully featured, fully customisable static site generation for SolidStart
62 lines • 2.15 kB
JSX
import { createContextProvider } from "@solid-primitives/context";
import { createSignal } from "solid-js";
import Article from "./components/Article";
import Features from "./components/Features";
import Footer from "./components/Footer";
import Header from "./components/Header";
import Hero from "./components/Hero";
import LastUpdated from "./components/LastUpdated";
import Link from "./components/Link";
import LocaleSelector from "./components/LocaleSelector";
import TableOfContents from "./components/TableOfContents";
import ThemeSelector from "./components/ThemeSelector";
import { useDefaultThemeFrontmatter } from "./frontmatter";
const defaultComponents = {
Article,
Footer,
Header,
LastUpdated,
Link,
LocaleSelector,
TableOfContents,
ThemeSelector,
Hero,
Features,
};
const [DefaultThemeComponentsProvider, useDefaultThemeComponentsContext] = createContextProvider((props) => {
const parent = useDefaultThemeComponentsContext();
return {
...defaultComponents,
...parent,
...props.components,
};
});
export function useDefaultThemeComponents() {
return (useDefaultThemeComponentsContext() ??
(() => {
throw new Error("useDefaultThemeComponents must be used within a DefaultThemeComponentsContextProvider");
})());
}
const [DefaultThemeStateProvider, useDefaultThemeStateContext] = createContextProvider(() => {
const [sidebarOpen, setSidebarOpen] = createSignal(false);
const [tocOpen, setTocOpen] = createSignal(false);
const [navOpen, setNavOpen] = createSignal(false);
const frontmatter = useDefaultThemeFrontmatter();
return {
sidebarOpen,
setSidebarOpen,
tocOpen,
setTocOpen,
navOpen,
setNavOpen,
frontmatter,
};
});
export function useDefaultThemeState() {
return (useDefaultThemeStateContext() ??
(() => {
throw new Error("useDefaultThemeContext must be used within a DefaultThemeContextProvider");
})());
}
export { DefaultThemeComponentsProvider, DefaultThemeStateProvider };
//# sourceMappingURL=context.jsx.map