-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
/** @jsxImportSource ./jsx */
/// <reference types="bun-types" />
/// <reference lib="dom" />
import "./happy-dom.js";
import { derived, fragment } from "./ef.js";
import { app, route, title } from "./app.js";
import { type RouteContext } from "./route.js";
import globalStyles from "./styles.css";
import componentStyles from "./components/styles.js";
import appStyles from "./app.module.css";
const DOCTYPE = "<!doctype html>";
export async function page(path: string, ctx: RouteContext): Promise<string> {
const { title: routTitle, content, outline, head = [] } = await route(path);
const $html = derived(
() =>
(
<html lang="en-US">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1"
/>
<title>{title(routTitle)}</title>
<meta
name="description"
content="Documentation for ef.js, a JavaScript library for declarative DOM manipulation."
/>
<link rel="stylesheet" href="/styles.css" />
<script type="module" defer src="/client.js" />
{/* ESBuild quirk (implicit CSS generation) */}
<link rel="stylesheet" href="/client.css" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link
rel="icon"
type="image/png"
sizes="100x100"
href="/favicon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/favicon-16x16.png"
/>
<script type="application/json" data-ef-head-mk />
{fragment(head)}
</head>
<body>{app(content(ctx), outline?.(ctx))}</body>
</html>
) as HTMLHtmlElement,
);
const html = DOCTYPE + $html.get().outerHTML;
$html.dispose();
return html;
}
export const styles = globalStyles + appStyles + componentStyles;