@brendonovich/kobalte__solidbase
Version:
Fully featured, fully customisable static site generation for SolidStart
49 lines • 2.11 kB
JSX
import { Layout, mdxComponents } from "virtual:solidbase/components";
import { Meta, MetaProvider, Title } from "@solidjs/meta";
import { Suspense, createMemo, onMount } from "solid-js";
import { MDXProvider } from "solid-mdx";
import { useRouteSolidBaseConfig } from "./config.js";
import { SolidBaseContext } from "./context.jsx";
export function SolidBaseRoot(props) {
onMount(() => {
const { $$SolidBase } = window;
$$SolidBase?.initTwoslashPopups?.();
});
const base = () => (<Suspense>
<LocaleContextProvider>
<CurrentPageDataProvider {...props.currentPageData}>
<MDXProvider components={mdxComponents}>
<Inner>{props.children}</Inner>
</MDXProvider>
</CurrentPageDataProvider>
</LocaleContextProvider>
</Suspense>);
const withMeta = () => (props.meta?.provider ?? true) ? (<MetaProvider>{base()}</MetaProvider>) : (<>{base()}</>);
return <>{withMeta()}</>;
}
import { LocaleContextProvider } from "./locale.js";
import { CurrentPageDataProvider, useCurrentPageData } from "./page-data.js";
export function Inner(props) {
const config = useRouteSolidBaseConfig();
const pageData = useCurrentPageData();
const metaTitle = createMemo(() => {
const titleTemplate = pageData()?.frontmatter.titleTemplate ?? config().titleTemplate;
const title = pageData()?.frontmatter?.title;
if (!title) {
const title = config().title;
if (titleTemplate)
return `${title} - ${titleTemplate}`;
return title;
}
if (titleTemplate?.includes(":title"))
return titleTemplate.replace(":title", title);
return `${title} - ${titleTemplate ?? config().title}`;
});
const description = () => pageData()?.frontmatter?.description ?? config().description;
return (<SolidBaseContext.Provider value={{ config, metaTitle }}>
<Title>{metaTitle()}</Title>
{description() && <Meta name="description" content={description()}/>}
<Layout>{props.children}</Layout>
</SolidBaseContext.Provider>);
}
//# sourceMappingURL=Root.jsx.map