API / Minn\Front / Renderer

Renderer final readonly class

Minn\Front\Renderer · public/minn/src/Minn/Front/Renderer.php · 90 lines

The interim public theme: one clean template until the block-theme reader lands. The body-class tokens are the contract (stylesheets and crawlers key off them); the markup around them is engine-defined.

Constants and properties

privateCSS = ':root { color-scheme: light dark; } body { margin: 0; font: 17px/1.6 "Hanken Grotesk", "Helvetica Neue", sans-serif; background: #fbfbfc; color: #1a1a1f; } @media (prefers-color-scheme: dark) { body { background: #0b0b0d; color: #ececed; } } .site-header, main, .site-footer { max-width: 680px; margin: 0 auto; padding: 0 24px; } .site-header { padding-top: 32px; } .site-title { font-weight: 800; letter-spacing: -0.02em; text-decoration: none; color: inherit; font-size: 20px; } main { padding-top: 40px; padding-bottom: 40px; } h1 { font-size: 36px; letter-spacing: -0.02em; line-height: 1.15; margin: 0 0 24px; } .post-list { list-style: none; margin: 0; padding: 0; } .post-list li { padding: 18px 0; border-top: 1px solid rgba(128,128,140,0.25); } .post-list a { font-weight: 600; color: inherit; text-decoration: none; font-size: 20px; } .post-list time { display: block; font-size: 13px; opacity: 0.6; } .post-list p { margin: 6px 0 0; opacity: 0.85; } .entry-content img { max-width: 100%; height: auto; } .site-footer { padding-bottom: 32px; font: 12px/1.6 "JetBrains Mono", monospace; opacity: 0.6; }'
privatereadonly Minn\Db $db

Promoted from the constructor.

privatereadonly Minn\Front\Permalinks $permalinks

Promoted from the constructor.

Public

new__construct(Minn\Db $db, Minn\Front\Permalinks $permalinks)#
methodbodyClasses(): array#

The body classes the main query stands for (Theme\QueryClasses); none before one stands.

@return list<string>
methodrender(Minn\Front\Resolution $resolution, Minn\Content\Page $page): string#

The interim page for a resolution, without a theme: a listing shows the main query's page of posts.

Internals 2

Private and protected methods: how the class does its work. Not a contract; they change whenever the code is tidied.

privatearticle(Minn\Content\PostRecord $post): string#
privatearchive(Minn\Front\Resolution $resolution, Minn\Content\Page $page): array#
@return array{0: string, 1: string} title and markup