feat: unify layout slot architecture - make header/footer configurable positions, footer as array, add defaultPosition fallback, add tests, update docs

This commit is contained in:
saberzero1
2026-07-27 17:32:40 +02:00
parent e37b4888f3
commit a121fd2e96
20 changed files with 1180 additions and 57 deletions
+4 -2
View File
@@ -19,7 +19,7 @@ export const DefaultFrame: PageFrame = {
afterBody,
left,
right,
footer: Footer,
footer,
}: PageFrameProps) {
return (
<>
@@ -54,7 +54,9 @@ export const DefaultFrame: PageFrame = {
<BodyComponent {...componentData} />
))}
</div>
<Footer {...componentData} />
{footer.map((FooterComponent) => (
<FooterComponent {...componentData} />
))}
</>
)
},
+4 -2
View File
@@ -19,7 +19,7 @@ export const FullWidthFrame: PageFrame = {
beforeBody,
pageBody: Content,
afterBody,
footer: Footer,
footer,
}: PageFrameProps) {
return (
<>
@@ -44,7 +44,9 @@ export const FullWidthFrame: PageFrame = {
))}
</div>
</div>
<Footer {...componentData} />
{footer.map((FooterComponent) => (
<FooterComponent {...componentData} />
))}
</>
)
},
+4 -2
View File
@@ -10,13 +10,15 @@ import { PageFrame, PageFrameProps } from "./types"
*/
export const MinimalFrame: PageFrame = {
name: "minimal",
render({ componentData, pageBody: Content, footer: Footer }: PageFrameProps) {
render({ componentData, pageBody: Content, footer }: PageFrameProps) {
return (
<>
<div class="center minimal">
<Content {...componentData} />
</div>
<Footer {...componentData} />
{footer.map((FooterComponent) => (
<FooterComponent {...componentData} />
))}
</>
)
},
+2 -2
View File
@@ -22,8 +22,8 @@ export interface PageFrameProps {
left: QuartzComponent[]
/** Right sidebar components */
right: QuartzComponent[]
/** Footer component */
footer: QuartzComponent
/** Footer components */
footer: QuartzComponent[]
}
/**
+2
View File
@@ -8,6 +8,8 @@ export interface ComponentManifest {
quartzVersion?: string
author?: string
homepage?: string
defaultPosition?: string
defaultPriority?: number
}
export interface RegisteredComponent {
+3 -3
View File
@@ -25,7 +25,7 @@ interface RenderComponents {
afterBody: QuartzComponent[]
left: QuartzComponent[]
right: QuartzComponent[]
footer: QuartzComponent
footer: QuartzComponent[]
frame?: string
}
@@ -329,7 +329,7 @@ export function renderPage(
afterBody,
left,
right,
footer: Footer,
footer,
frame: frameName,
} = components
const Body = BodyConstructor()
@@ -360,7 +360,7 @@ export function renderPage(
afterBody,
left,
right,
footer: Footer,
footer,
}),
]}
</Body>