UNPKG

@brendonovich/kobalte__solidbase

Version:

Fully featured, fully customisable static site generation for SolidStart

49 lines 2.11 kB
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