import { FunctionComponent } from "preact" import { PageLayout, SharedLayout } from "./quartz/cfg" import * as Component from "./quartz/components" import { QuartzComponentProps } from "./quartz/components/types" // components shared across all pages export const sharedPageComponents: SharedLayout = { head: Component.Head(), header: [], afterBody: [], footer: Component.Footer({ links: { Top: "https://matsuuratomoya.com", Mastodon: "https://social.matsuuratomoya.com/@tomoya", Twitter: "https://twitter.com/tomoya_nonymous", GitHub: "https://github.com/tomoyanonymous", }, }), } // components for pages that display a single page (e.g. a single note) const graph_cfg = { localGraph: { drag: true, // whether to allow panning the view around zoom: true, // whether to allow zooming in and out depth: 2, // how many hops of notes to display scale: 1.1, // default view scale repelForce: 0.5, // how much nodes should repel each other centerForce: 0.3, // how much force to use when trying to center the nodes linkDistance: 30, // how long should the links be by default? fontSize: 0.6, // what size should the node labels be? opacityScale: 1, // how quickly do we fade out the labels when zooming out? }, globalGraph: { drag: true, zoom: true, depth: -1, scale: 0.9, repelForce: 0.5, centerForce: 0.3, linkDistance: 30, fontSize: 0.6, opacityScale: 1, }, } function IndexOnly( c: FunctionComponent, ): FunctionComponent { return Component.ConditionalRender({ component: c, condition: (page) => page.fileData.slug === "index", }) } function LeafOnly( c: FunctionComponent, ): FunctionComponent { return Component.ConditionalRender({ component: c, condition: (page) => page.fileData.slug !== "index", }) } export const defaultContentPageLayout: PageLayout = { beforeBody: [ LeafOnly(Component.Breadcrumbs()), Component.ArticleTitle(), Component.ContentMeta() /*Component.TagList()*/, ], left: [ Component.PageTitle(), Component.MobileOnly(Component.Spacer()), Component.Flex({ components: [ { Component: Component.Search(), grow: true, }, { Component: Component.Darkmode() }, { Component: Component.ReaderMode() }, ], }), Component.DesktopOnly(IndexOnly(Component.Explorer())), Component.DesktopOnly(LeafOnly(Component.TableOfContents())), ], right: [Component.Graph(graph_cfg), IndexOnly(Component.RecentNotes()), Component.Backlinks()], } // components for pages that display lists of pages (e.g. tags or folders) export const defaultListPageLayout: PageLayout = { beforeBody: [Component.Breadcrumbs(), Component.ArticleTitle(), Component.ContentMeta()], left: [ Component.PageTitle(), Component.MobileOnly(Component.Spacer()), Component.Flex({ components: [ { Component: Component.Search(), grow: true, }, { Component: Component.Darkmode() }, { Component: Component.ReaderMode() }, ], }), ], right: [Component.Graph(graph_cfg)], }