From daec1d9b6ad62eb1cc48ba6363c1908575a98562 Mon Sep 17 00:00:00 2001 From: saberzero1 Date: Sat, 28 Feb 2026 04:30:44 +0100 Subject: [PATCH] feat: add PageFrame system for custom page layouts --- quartz/components/frames/DefaultFrame.tsx | 61 +++++++++++++++++++++ quartz/components/frames/FullWidthFrame.tsx | 51 +++++++++++++++++ quartz/components/frames/MinimalFrame.tsx | 23 ++++++++ quartz/components/frames/index.ts | 40 ++++++++++++++ quartz/components/frames/types.ts | 43 +++++++++++++++ 5 files changed, 218 insertions(+) create mode 100644 quartz/components/frames/DefaultFrame.tsx create mode 100644 quartz/components/frames/FullWidthFrame.tsx create mode 100644 quartz/components/frames/MinimalFrame.tsx create mode 100644 quartz/components/frames/index.ts create mode 100644 quartz/components/frames/types.ts diff --git a/quartz/components/frames/DefaultFrame.tsx b/quartz/components/frames/DefaultFrame.tsx new file mode 100644 index 000000000..d46c120d4 --- /dev/null +++ b/quartz/components/frames/DefaultFrame.tsx @@ -0,0 +1,61 @@ +import { PageFrame, PageFrameProps } from "./types" +import HeaderConstructor from "../Header" + +const Header = HeaderConstructor() + +/** + * The default page frame — three-column layout with left sidebar, center + * content (header + body + afterBody), and right sidebar, followed by a footer. + * + * This is the original Quartz layout, extracted from renderPage.tsx. + */ +export const DefaultFrame: PageFrame = { + name: "default", + render({ + componentData, + header, + beforeBody, + pageBody: Content, + afterBody, + left, + right, + footer: Footer, + }: PageFrameProps) { + return ( + <> + +
+ + +
+ +
+ +