The docs site's page title read "punktfunk docs". Fixed that and swept the rest of the tree for the same defect, capitalizing the brand wherever it is shown to a human and leaving it lowercase where it is a technical identifier (CLI/package names, `punktfunk://` scheme, PnP enumerator, TLS SNI, logcat tag, config paths, CMS tenant id). User-visible fixes: - docs-site: page title -> "Punktfunk Docs"; API reference title, meta description and the branded bar's aria-label; the BrandMark/Wordmark SVG accessible names (the web console already had these capitalized -- the docs site had drifted from it). - Android: six strings of live UI copy -- the local-network permission dialog (x2), the connect-screen error banner, and the no-controller explainer. - Apple: the "No Hosts" empty-state text and the fallback display name for a host that advertises no instance name. - Windows client: the `--discover` progress line. - KWin fake-input: the application name passed to `authenticate()` (the grant is cached per-exe, so the string is display-only). - THIRD-PARTY-NOTICES: fixed in both generators (about.hbs and gen-third-party-notices.py) and applied to the three checked-in outputs so they match what a regeneration now produces. Every changed line differs from the original only by letter case, so line lengths are unchanged and no formatter width rule is affected. `cargo fmt --all --check` passes.
67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
/// <reference types="vite/client" />
|
|
import { createRootRoute, HeadContent, Outlet, Scripts } from '@tanstack/react-router'
|
|
import { createServerFn } from '@tanstack/react-start'
|
|
import * as React from 'react'
|
|
import { RootProvider } from 'fumadocs-ui/provider/tanstack'
|
|
import '@fontsource-variable/geist'
|
|
import Footer from '@/components/Footer'
|
|
import { type Footer as FooterData, findFooter } from '@/lib/cms'
|
|
import appCss from '@/styles/app.css?url'
|
|
|
|
// The footer is global and shared with the marketing site (one CMS global).
|
|
// Fetch it once at the root, server-side, falling back to null so a CMS hiccup
|
|
// never breaks the page.
|
|
const getFooter = createServerFn({ method: 'GET' }).handler(
|
|
async (): Promise<FooterData | null> => {
|
|
try {
|
|
return await findFooter()
|
|
} catch {
|
|
return null
|
|
}
|
|
},
|
|
)
|
|
|
|
export const Route = createRootRoute({
|
|
loader: async (): Promise<{ footer: FooterData | null }> => ({
|
|
footer: await getFooter(),
|
|
}),
|
|
head: () => ({
|
|
meta: [
|
|
{ charSet: 'utf-8' },
|
|
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
|
|
{ name: 'color-scheme', content: 'dark light' },
|
|
{ title: 'Punktfunk Docs' },
|
|
],
|
|
links: [
|
|
{ rel: 'stylesheet', href: appCss },
|
|
{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },
|
|
],
|
|
}),
|
|
component: RootComponent,
|
|
})
|
|
|
|
function RootComponent() {
|
|
return (
|
|
<RootDocument>
|
|
<Outlet />
|
|
</RootDocument>
|
|
)
|
|
}
|
|
|
|
function RootDocument({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en" suppressHydrationWarning>
|
|
<head>
|
|
<HeadContent />
|
|
</head>
|
|
<body className="flex flex-col min-h-screen">
|
|
<RootProvider>
|
|
{children}
|
|
<Footer />
|
|
</RootProvider>
|
|
<Scripts />
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|