create-riebeckite 0.0.31 → 0.0.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/src/arguments.d.ts +2 -0
  2. package/dist/src/index.js +380 -44
  3. package/dist/src/interactive.d.ts +7 -5
  4. package/dist/src/package-manager.d.ts +2 -1
  5. package/dist/src/publish.d.ts +2 -1
  6. package/dist/src/scaffold/deployment.d.ts +0 -1
  7. package/dist/src/scaffold/features.d.ts +12 -0
  8. package/dist/src/scaffold/index.d.ts +1 -0
  9. package/dist/src/scaffold/index.js +330 -38
  10. package/dist/src/scaffold/options.d.ts +2 -0
  11. package/dist/src/scaffold/presets.d.ts +9 -5
  12. package/dist/src/scaffold/readme_demos.d.ts +2 -1
  13. package/dist/src/scaffold/template_options.d.ts +1 -6
  14. package/dist/src/scaffold/utilities.d.ts +0 -1
  15. package/dist/src/scaffold/version.d.ts +1 -1
  16. package/dist/src/scaffold/wrangler-defaults.d.ts +0 -1
  17. package/package.json +3 -3
  18. package/templates/scaffold/presets/blog/app/components/article.tsx +33 -0
  19. package/templates/scaffold/presets/blog/app/components/site-header.tsx +37 -0
  20. package/templates/scaffold/presets/blog/app/routes/[slug{.+}].tsx +10 -0
  21. package/templates/scaffold/presets/blog/app/routes/_404.tsx +18 -0
  22. package/templates/scaffold/presets/blog/app/routes/_renderer.tsx +42 -0
  23. package/templates/scaffold/presets/blog/app/routes/index.tsx +10 -0
  24. package/templates/scaffold/presets/blog/app/style.css +152 -0
  25. package/templates/scaffold/presets/blog/content/index.md +8 -0
  26. package/templates/scaffold/presets/blog/content/posts/editing-before-publishing.md +12 -0
  27. package/templates/scaffold/presets/blog/content/posts/writing-a-useful-post.md +12 -0
  28. package/templates/scaffold/presets/digital-garden/app/components/article.tsx +31 -0
  29. package/templates/scaffold/presets/digital-garden/app/components/site-header.tsx +37 -0
  30. package/templates/scaffold/presets/digital-garden/app/routes/[slug{.+}].tsx +10 -0
  31. package/templates/scaffold/presets/digital-garden/app/routes/_404.tsx +18 -0
  32. package/templates/scaffold/presets/digital-garden/app/routes/_renderer.tsx +42 -0
  33. package/templates/scaffold/presets/digital-garden/app/routes/index.tsx +10 -0
  34. package/templates/scaffold/presets/digital-garden/app/style.css +152 -0
  35. package/templates/scaffold/presets/digital-garden/content/index.md +10 -0
  36. package/templates/scaffold/presets/digital-garden/content/notes/how-this-garden-works.md +11 -0
  37. package/templates/scaffold/presets/digital-garden/content/notes/seed-idea.md +9 -0
  38. package/templates/scaffold/presets/docs/app/components/article.tsx +26 -0
  39. package/templates/scaffold/presets/docs/app/components/site-header.tsx +37 -0
  40. package/templates/scaffold/presets/docs/app/routes/[slug{.+}].tsx +10 -0
  41. package/templates/scaffold/presets/docs/app/routes/_404.tsx +18 -0
  42. package/templates/scaffold/presets/docs/app/routes/_renderer.tsx +42 -0
  43. package/templates/scaffold/presets/docs/app/routes/index.tsx +10 -0
  44. package/templates/scaffold/presets/docs/app/style.css +169 -0
  45. package/templates/scaffold/presets/docs/content/docs/configuration.md +8 -0
  46. package/templates/scaffold/presets/docs/content/docs/getting-started.md +15 -0
  47. package/templates/scaffold/presets/docs/content/index.md +7 -0
  48. package/templates/scaffold/presets/empty/app/routes/_404.tsx +2 -2
  49. package/templates/scaffold/presets/empty/app/routes/_renderer.tsx +5 -1
  50. package/templates/scaffold/presets/empty/app/routes/index.tsx +2 -2
  51. package/templates/scaffold/presets/minimal/app/routes/_404.tsx +2 -2
  52. package/templates/scaffold/presets/minimal/app/routes/_renderer.tsx +5 -1
  53. package/templates/scaffold/presets/portfolio/app/components/article.tsx +29 -0
  54. package/templates/scaffold/presets/portfolio/app/components/site-header.tsx +37 -0
  55. package/templates/scaffold/presets/portfolio/app/routes/[slug{.+}].tsx +10 -0
  56. package/templates/scaffold/presets/portfolio/app/routes/_404.tsx +18 -0
  57. package/templates/scaffold/presets/portfolio/app/routes/_renderer.tsx +42 -0
  58. package/templates/scaffold/presets/portfolio/app/routes/index.tsx +10 -0
  59. package/templates/scaffold/presets/portfolio/app/style.css +152 -0
  60. package/templates/scaffold/presets/portfolio/content/about.md +7 -0
  61. package/templates/scaffold/presets/portfolio/content/contact.md +7 -0
  62. package/templates/scaffold/presets/portfolio/content/index.en.md +18 -0
  63. package/templates/scaffold/presets/portfolio/content/projects/field-notes.md +20 -0
  64. package/templates/scaffold/presets/portfolio/content/projects/small-tools.md +10 -0
  65. package/templates/scaffold/presets/showcase/content/deck.md +24 -0
  66. package/templates/scaffold/presets/showcase/content/demo/planning.md +2 -1
  67. package/templates/scaffold/presets/showcase/content/demo/writing.md +4 -1
@@ -0,0 +1,152 @@
1
+ @import "./.riebeckite/framework-styles.css";
2
+ @import "./.riebeckite/plugin-styles.css";
3
+ @import "./.riebeckite/theme-styles.css";
4
+
5
+ .riebeckite-page {
6
+ --site-toc-sticky-top: var(--rb-space-3, 1.5rem);
7
+ display: flex;
8
+ min-height: 100vh;
9
+ width: 100%;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ padding-block: var(--rb-space-8, 4rem);
13
+ }
14
+
15
+ .riebeckite-main {
16
+ display: flex;
17
+ width: 100%;
18
+ flex-direction: column;
19
+ align-items: center;
20
+ }
21
+
22
+ .riebeckite-main:has(> .not-found) {
23
+ flex: 1 1 auto;
24
+ }
25
+
26
+ .site-header {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: var(--rb-space-3, 1.5rem);
30
+ padding-block: var(--rb-space-3, 1.5rem);
31
+ border-bottom: 1px solid var(--rb-color-border);
32
+ }
33
+
34
+ .site-header,
35
+ .site-footer {
36
+ width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
37
+ }
38
+
39
+ .site-header__home {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ gap: 0.5rem;
43
+ margin-right: auto;
44
+ color: var(--rb-color-ink);
45
+ font-weight: 700;
46
+ text-decoration: none;
47
+ }
48
+
49
+ .site-header__mobile-navigation {
50
+ display: none;
51
+ }
52
+
53
+ .site-footer {
54
+ margin-top: 1rem;
55
+ border-top: 1px solid var(--rb-color-border);
56
+ }
57
+
58
+ @media (min-width: 30.001rem) and (max-width: 48rem) {
59
+ .site-header {
60
+ flex-wrap: wrap;
61
+ }
62
+ }
63
+
64
+ @media (max-width: 30rem) {
65
+ .riebeckite-page {
66
+ padding-block: var(--rb-space-3, 1.5rem);
67
+ }
68
+
69
+ .site-header {
70
+ flex-wrap: wrap;
71
+ }
72
+
73
+ .site-header__primary-navigation {
74
+ display: none;
75
+ }
76
+
77
+ .site-header__mobile-navigation {
78
+ display: block;
79
+ }
80
+ }
81
+
82
+ .site-header__logo {
83
+ width: 1.75rem;
84
+ height: 1.75rem;
85
+ object-fit: contain;
86
+ }
87
+
88
+ .site-article {
89
+ width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
90
+ padding-block: 2rem;
91
+ }
92
+
93
+ .site-article__layout {
94
+ width: min(100%, var(--rb-layout-article-max, 48rem));
95
+ margin: 0 auto;
96
+ }
97
+
98
+ .rb-article-body {
99
+ min-width: 0;
100
+ padding-inline: var(--rb-space-2, 1rem);
101
+ }
102
+
103
+ .site-article__footer {
104
+ min-width: 0;
105
+ }
106
+
107
+ .site-article__aside {
108
+ display: none;
109
+ }
110
+
111
+ @media (min-width: 80rem) {
112
+ .site-article__layout {
113
+ display: grid;
114
+ width: 100%;
115
+ grid-template-columns: minmax(0, 1fr) minmax(0, var(--rb-layout-article-max, 48rem)) minmax(0, 1fr);
116
+ align-items: start;
117
+ }
118
+
119
+ .site-article__layout > .rb-article-body {
120
+ grid-column: 2;
121
+ }
122
+
123
+ .site-article__aside {
124
+ display: block;
125
+ min-width: 0;
126
+ align-self: stretch;
127
+ grid-column: 3;
128
+ padding-inline-start: var(--rb-layout-gap, 2rem);
129
+ }
130
+
131
+ .site-article__aside > .rr-table-of-contents--desktop {
132
+ position: sticky;
133
+ top: var(--site-toc-sticky-top);
134
+ max-height: calc(100dvh - var(--site-toc-sticky-top) - var(--rb-space-4, 2rem));
135
+ overflow-y: auto;
136
+ overscroll-behavior: contain;
137
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 18%, transparent);
138
+ padding-inline-start: 1rem;
139
+ }
140
+ }
141
+
142
+ .not-found {
143
+ width: min(100% - 2rem, var(--rb-layout-article-max, 48rem));
144
+ margin-block: auto;
145
+ padding-block: 2rem;
146
+ }
147
+
148
+ .not-found__status {
149
+ margin: 0;
150
+ color: var(--rb-color-accent);
151
+ font-weight: 700;
152
+ }
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: Welcome to {{title}}
3
+ tags: [garden, welcome]
4
+ ---
5
+
6
+ # Welcome to {{title}}
7
+
8
+ This is a small, connected set of notes. Start with [[notes/how-this-garden-works]] or [[notes/seed-idea]].
9
+
10
+ ![[notes/how-this-garden-works]]
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: How this garden works
3
+ aliases: [Garden guide]
4
+ tags: [garden, notes]
5
+ ---
6
+
7
+ # How this garden works
8
+
9
+ Every Markdown file is a note. Link ideas with `[[wiki links]]`, then use backlinks and the local graph to find the connections.
10
+
11
+ This note begins at [[Welcome to {{title}}]] and points to [[seed-idea]].
@@ -0,0 +1,9 @@
1
+ ---
2
+ title: Seed idea
3
+ created: 2026-10-25
4
+ tags: [idea]
5
+ ---
6
+
7
+ # Seed idea
8
+
9
+ Small notes become useful when they are connected. See [[how-this-garden-works]].
@@ -0,0 +1,26 @@
1
+ import { Article, ArticleBody, ArticleContent, ArticleFooter } from "@riebeckite/honox/ui";
2
+ import { Breadcrumbs } from "@riebeckite/plugin-breadcrumbs";
3
+ import { DocsPrevNext, DocsSidebar } from "@riebeckite/plugin-docs";
4
+ import { TableOfContents } from "@riebeckite/plugin-toc";
5
+
6
+ export function SiteArticle() {
7
+ return (
8
+ <Article class="site-article">
9
+ <div class="site-article__layout">
10
+ <aside class="site-article__sidebar">
11
+ <DocsSidebar />
12
+ </aside>
13
+ <ArticleContent>
14
+ <Breadcrumbs />
15
+ <ArticleBody />
16
+ <ArticleFooter class="site-article__footer">
17
+ <DocsPrevNext />
18
+ </ArticleFooter>
19
+ </ArticleContent>
20
+ <aside class="site-article__aside">
21
+ <TableOfContents className="rr-table-of-contents--desktop" />
22
+ </aside>
23
+ </div>
24
+ </Article>
25
+ );
26
+ }
@@ -0,0 +1,37 @@
1
+ import { MobileSiteNav, SiteNav } from "@riebeckite/plugin-navigation";
2
+ import { ColorModeToggle } from "@riebeckite/plugin-color-mode";
3
+ import { useSiteContext } from "@riebeckite/ui";
4
+
5
+ export function SiteHeader() {
6
+ const site = useSiteContext();
7
+
8
+ return (
9
+ <header class="site-header rb-site-header">
10
+ <a href="/" class="site-header__home rb-site-header__home">
11
+ <img
12
+ src="/riebeckite-logo.png"
13
+ alt=""
14
+ class="site-header__logo"
15
+ width="28"
16
+ height="28"
17
+ />
18
+ {site?.config.site.title}
19
+ </a>
20
+ <div class="site-header__primary-navigation">
21
+ <SiteNav placement="primary" omitHome />
22
+ </div>
23
+ <div class="site-header__mobile-navigation">
24
+ <MobileSiteNav placement="primary" omitHome />
25
+ </div>
26
+ <ColorModeToggle />
27
+ </header>
28
+ );
29
+ }
30
+
31
+ export function SiteFooter() {
32
+ return (
33
+ <footer class="site-footer rb-site-footer">
34
+ <SiteNav placement="secondary" />
35
+ </footer>
36
+ );
37
+ }
@@ -0,0 +1,10 @@
1
+ import { createContentRoute } from "@riebeckite/honox/server";
2
+ import { SiteArticle } from "../components/article";
3
+ import { config } from "virtual:riebeckite/config";
4
+ import { content } from "virtual:riebeckite/content";
5
+
6
+ export default createContentRoute({
7
+ content,
8
+ config,
9
+ render: () => <SiteArticle />,
10
+ });
@@ -0,0 +1,18 @@
1
+ import type { Context } from "hono";
2
+
3
+ const handler = (c: Context) => {
4
+ c.status(404);
5
+
6
+ return c.render(
7
+ <div class="not-found">
8
+ <p class="not-found__status">404</p>
9
+ <h1>Page not found</h1>
10
+ <p>The page you requested does not exist or is not available.</p>
11
+ <p>
12
+ <a href="/">Back to home</a>
13
+ </p>
14
+ </div>,
15
+ );
16
+ };
17
+
18
+ export default handler;
@@ -0,0 +1,42 @@
1
+ import { RiebeckiteHead, ThemeRoot } from "@riebeckite/honox/ui";
2
+ import { createPublicContentView } from "@riebeckite/core";
3
+ import { SiteProvider } from "@riebeckite/ui";
4
+ import { jsxRenderer } from "hono/jsx-renderer";
5
+ import { SearchBar } from "@riebeckite/plugin-search";
6
+ import { SiteFooter, SiteHeader } from "../components/site-header";
7
+ import { content } from "virtual:riebeckite/content";
8
+ import { config } from "virtual:riebeckite/config";
9
+
10
+ // Riebeckite plugin client entries need the HonoX client bundle even without
11
+ // an island component.
12
+ export const __importing_islands = true;
13
+
14
+ export default jsxRenderer(async ({ children }, c) => {
15
+ const manifest = await content.getManifest();
16
+
17
+ return (
18
+ <SiteProvider
19
+ config={config}
20
+ manifest={manifest}
21
+ view={createPublicContentView(manifest)}
22
+ path={c.req.path}
23
+ language={c.get("htmlLanguage")}
24
+ headTags={c.get("headTags")}
25
+ >
26
+ <ThemeRoot>
27
+ <head>
28
+ <RiebeckiteHead />
29
+ </head>
30
+ <body class="riebeckite-page rb-site">
31
+ <a class="rb-skip-link" href="#main-content">Skip to main content</a>
32
+ <SiteHeader />
33
+ <SearchBar />
34
+ <main id="main-content" tabindex={-1} class="riebeckite-main">
35
+ {children}
36
+ </main>
37
+ <SiteFooter />
38
+ </body>
39
+ </ThemeRoot>
40
+ </SiteProvider>
41
+ );
42
+ });
@@ -0,0 +1,10 @@
1
+ import { createHomeRoute } from "@riebeckite/honox/server";
2
+ import { SiteArticle } from "../components/article";
3
+ import { config } from "virtual:riebeckite/config";
4
+ import { content } from "virtual:riebeckite/content";
5
+
6
+ export default createHomeRoute({
7
+ content,
8
+ config,
9
+ render: () => <SiteArticle />,
10
+ });
@@ -0,0 +1,169 @@
1
+ @import "./.riebeckite/framework-styles.css";
2
+ @import "./.riebeckite/plugin-styles.css";
3
+ @import "./.riebeckite/theme-styles.css";
4
+
5
+ .riebeckite-page {
6
+ --site-toc-sticky-top: var(--rb-space-3, 1.5rem);
7
+ display: flex;
8
+ min-height: 100vh;
9
+ width: 100%;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ padding-block: var(--rb-space-8, 4rem);
13
+ }
14
+
15
+ .riebeckite-main {
16
+ display: flex;
17
+ width: 100%;
18
+ flex-direction: column;
19
+ align-items: center;
20
+ }
21
+
22
+ .riebeckite-main:has(> .not-found) {
23
+ flex: 1 1 auto;
24
+ }
25
+
26
+ .site-header {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: var(--rb-space-3, 1.5rem);
30
+ padding-block: var(--rb-space-3, 1.5rem);
31
+ border-bottom: 1px solid var(--rb-color-border);
32
+ }
33
+
34
+ .site-header,
35
+ .site-footer {
36
+ width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
37
+ }
38
+
39
+ .site-header__home {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ gap: 0.5rem;
43
+ margin-right: auto;
44
+ color: var(--rb-color-ink);
45
+ font-weight: 700;
46
+ text-decoration: none;
47
+ }
48
+
49
+ .site-header__mobile-navigation {
50
+ display: none;
51
+ }
52
+
53
+ .site-footer {
54
+ margin-top: 1rem;
55
+ border-top: 1px solid var(--rb-color-border);
56
+ }
57
+
58
+ @media (min-width: 30.001rem) and (max-width: 48rem) {
59
+ .site-header {
60
+ flex-wrap: wrap;
61
+ }
62
+ }
63
+
64
+ @media (max-width: 30rem) {
65
+ .riebeckite-page {
66
+ padding-block: var(--rb-space-3, 1.5rem);
67
+ }
68
+
69
+ .site-header {
70
+ flex-wrap: wrap;
71
+ }
72
+
73
+ .site-header__primary-navigation {
74
+ display: none;
75
+ }
76
+
77
+ .site-header__mobile-navigation {
78
+ display: block;
79
+ }
80
+ }
81
+
82
+ .site-header__logo {
83
+ width: 1.75rem;
84
+ height: 1.75rem;
85
+ object-fit: contain;
86
+ }
87
+
88
+ .site-article {
89
+ width: min(100% - 2rem, var(--rb-layout-page-max, 80rem));
90
+ padding-block: 2rem;
91
+ }
92
+
93
+ .site-article__layout {
94
+ width: min(100%, var(--rb-layout-article-max, 48rem));
95
+ margin: 0 auto;
96
+ }
97
+
98
+ .rb-article-body {
99
+ min-width: 0;
100
+ padding-inline: var(--rb-space-2, 1rem);
101
+ }
102
+
103
+ .site-article__footer {
104
+ min-width: 0;
105
+ }
106
+
107
+ .site-article__aside {
108
+ display: none;
109
+ }
110
+
111
+ .site-article__sidebar {
112
+ display: none;
113
+ }
114
+
115
+ @media (min-width: 80rem) {
116
+ .site-article__layout {
117
+ display: grid;
118
+ width: 100%;
119
+ grid-template-columns: minmax(14rem, 1fr) minmax(0, var(--rb-layout-article-max, 48rem)) minmax(14rem, 1fr);
120
+ align-items: start;
121
+ }
122
+
123
+ .site-article__layout > .rb-article-body {
124
+ grid-column: 2;
125
+ }
126
+
127
+ .site-article__sidebar {
128
+ display: block;
129
+ grid-column: 1;
130
+ grid-row: 1;
131
+ padding-inline-end: var(--rb-layout-gap, 2rem);
132
+ }
133
+
134
+ .site-article__sidebar > .rb-docs-sidebar-details {
135
+ position: sticky;
136
+ top: var(--site-toc-sticky-top);
137
+ }
138
+
139
+ .site-article__aside {
140
+ display: block;
141
+ min-width: 0;
142
+ align-self: stretch;
143
+ grid-column: 3;
144
+ padding-inline-start: var(--rb-layout-gap, 2rem);
145
+ }
146
+
147
+ .site-article__aside > .rr-table-of-contents--desktop {
148
+ position: sticky;
149
+ top: var(--site-toc-sticky-top);
150
+ max-height: calc(100dvh - var(--site-toc-sticky-top) - var(--rb-space-4, 2rem));
151
+ overflow-y: auto;
152
+ overscroll-behavior: contain;
153
+ border-inline-start: 1px solid color-mix(in oklab, currentColor 18%, transparent);
154
+ padding-inline-start: 1rem;
155
+ }
156
+
157
+ }
158
+
159
+ .not-found {
160
+ width: min(100% - 2rem, var(--rb-layout-article-max, 48rem));
161
+ margin-block: auto;
162
+ padding-block: 2rem;
163
+ }
164
+
165
+ .not-found__status {
166
+ margin: 0;
167
+ color: var(--rb-color-accent);
168
+ font-weight: 700;
169
+ }
@@ -0,0 +1,8 @@
1
+ ---
2
+ title: Configuration
3
+ order: 2
4
+ ---
5
+
6
+ # Configuration
7
+
8
+ Edit `riebeckite.config.ts` to set your site metadata and registered plugins.
@@ -0,0 +1,15 @@
1
+ ---
2
+ title: Getting started
3
+ order: 1
4
+ ---
5
+
6
+ # Getting started
7
+
8
+ Install dependencies and start the development server:
9
+
10
+ ```sh
11
+ npm install
12
+ npm exec riebeckite dev
13
+ ```
14
+
15
+ Next: [[configuration]].
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: {{title}}
3
+ ---
4
+
5
+ # {{title}}
6
+
7
+ Clear documentation starts with a working example. Continue to [[docs/getting-started]].
@@ -4,14 +4,14 @@ const handler = (c: Context) => {
4
4
  c.status(404);
5
5
 
6
6
  return c.render(
7
- <main class="not-found">
7
+ <div class="not-found">
8
8
  <p class="not-found__status">404</p>
9
9
  <h1>Page not found</h1>
10
10
  <p>The page you requested does not exist or is not available.</p>
11
11
  <p>
12
12
  <a href="/">Back to home</a>
13
13
  </p>
14
- </main>,
14
+ </div>,
15
15
  );
16
16
  };
17
17
 
@@ -25,7 +25,11 @@ export default jsxRenderer(async ({ children }, c) => {
25
25
  <head>
26
26
  <RiebeckiteHead colorModeScript={false} />
27
27
  </head>
28
- <body class="riebeckite-page rb-site">{children}</body>
28
+ <body class="riebeckite-page rb-site">
29
+ <main id="main-content" tabindex={-1} class="riebeckite-main">
30
+ {children}
31
+ </main>
32
+ </body>
29
33
  </ThemeRoot>
30
34
  </SiteProvider>
31
35
  );
@@ -3,9 +3,9 @@ import { config } from "virtual:riebeckite/config";
3
3
 
4
4
  export default createRoute((c) =>
5
5
  c.render(
6
- <main class="riebeckite-empty">
6
+ <div class="riebeckite-empty">
7
7
  <h1>{config.site.title}</h1>
8
8
  <p>This is a blank Riebeckite site. Add Markdown files under content/ to get started.</p>
9
- </main>,
9
+ </div>,
10
10
  ),
11
11
  );
@@ -4,14 +4,14 @@ const handler = (c: Context) => {
4
4
  c.status(404);
5
5
 
6
6
  return c.render(
7
- <main class="not-found">
7
+ <div class="not-found">
8
8
  <p class="not-found__status">404</p>
9
9
  <h1>Page not found</h1>
10
10
  <p>The page you requested does not exist or is not available.</p>
11
11
  <p>
12
12
  <a href="/">Back to home</a>
13
13
  </p>
14
- </main>,
14
+ </div>,
15
15
  );
16
16
  };
17
17
 
@@ -25,7 +25,11 @@ export default jsxRenderer(async ({ children }, c) => {
25
25
  <head>
26
26
  <RiebeckiteHead colorModeScript={false} />
27
27
  </head>
28
- <body class="riebeckite-page rb-site">{children}</body>
28
+ <body class="riebeckite-page rb-site">
29
+ <main id="main-content" tabindex={-1} class="riebeckite-main">
30
+ {children}
31
+ </main>
32
+ </body>
29
33
  </ThemeRoot>
30
34
  </SiteProvider>
31
35
  );
@@ -0,0 +1,29 @@
1
+ import { Article, ArticleBody, ArticleContent, ArticleFooter } from "@riebeckite/honox/ui";
2
+ import { Backlinks } from "@riebeckite/plugin-backlinks";
3
+ import { Breadcrumbs } from "@riebeckite/plugin-breadcrumbs";
4
+ import { Properties } from "@riebeckite/plugin-properties";
5
+ import { RecentPosts } from "@riebeckite/plugin-recent-posts";
6
+ import { RelatedPosts } from "@riebeckite/plugin-related-posts";
7
+ import { TableOfContents } from "@riebeckite/plugin-toc";
8
+
9
+ export function SiteArticle() {
10
+ return (
11
+ <Article class="site-article">
12
+ <div class="site-article__layout">
13
+ <ArticleContent>
14
+ <Breadcrumbs />
15
+ <Properties />
16
+ <ArticleBody />
17
+ <RecentPosts />
18
+ <ArticleFooter class="site-article__footer">
19
+ <Backlinks />
20
+ <RelatedPosts />
21
+ </ArticleFooter>
22
+ </ArticleContent>
23
+ <aside class="site-article__aside">
24
+ <TableOfContents className="rr-table-of-contents--desktop" />
25
+ </aside>
26
+ </div>
27
+ </Article>
28
+ );
29
+ }
@@ -0,0 +1,37 @@
1
+ import { MobileSiteNav, SiteNav } from "@riebeckite/plugin-navigation";
2
+ import { ColorModeToggle } from "@riebeckite/plugin-color-mode";
3
+ import { useSiteContext } from "@riebeckite/ui";
4
+
5
+ export function SiteHeader() {
6
+ const site = useSiteContext();
7
+
8
+ return (
9
+ <header class="site-header rb-site-header">
10
+ <a href="/" class="site-header__home rb-site-header__home">
11
+ <img
12
+ src="/riebeckite-logo.png"
13
+ alt=""
14
+ class="site-header__logo"
15
+ width="28"
16
+ height="28"
17
+ />
18
+ {site?.config.site.title}
19
+ </a>
20
+ <div class="site-header__primary-navigation">
21
+ <SiteNav placement="primary" omitHome />
22
+ </div>
23
+ <div class="site-header__mobile-navigation">
24
+ <MobileSiteNav placement="primary" omitHome />
25
+ </div>
26
+ <ColorModeToggle />
27
+ </header>
28
+ );
29
+ }
30
+
31
+ export function SiteFooter() {
32
+ return (
33
+ <footer class="site-footer rb-site-footer">
34
+ <SiteNav placement="secondary" />
35
+ </footer>
36
+ );
37
+ }