@kamod-ch/preactpress 1.0.0 → 1.0.2

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 (521) hide show
  1. package/README.md +87 -49
  2. package/bin/preactpress.mjs +5 -5
  3. package/dist/client/app.d.ts +1 -1
  4. package/dist/client/app.d.ts.map +1 -1
  5. package/dist/client/app.js +34 -38
  6. package/dist/client/app.js.map +1 -1
  7. package/dist/client/entry-client.js +11 -12
  8. package/dist/client/entry-client.js.map +1 -1
  9. package/dist/client/entry-ssr.d.ts +2 -2
  10. package/dist/client/entry-ssr.d.ts.map +1 -1
  11. package/dist/client/entry-ssr.js +16 -16
  12. package/dist/client/entry-ssr.js.map +1 -1
  13. package/dist/client/index.d.ts +3 -2
  14. package/dist/client/index.d.ts.map +1 -1
  15. package/dist/client/index.js +2 -1
  16. package/dist/client/index.js.map +1 -1
  17. package/dist/client/loadPage.d.ts +1 -1
  18. package/dist/client/loadPage.d.ts.map +1 -1
  19. package/dist/client/loadPage.js +12 -12
  20. package/dist/client/loadPage.js.map +1 -1
  21. package/dist/client/prefetchLinks.js +4 -4
  22. package/dist/client/prefetchLinks.js.map +1 -1
  23. package/dist/client/theme-default/AlgoliaSearch.d.ts +3 -3
  24. package/dist/client/theme-default/AlgoliaSearch.d.ts.map +1 -1
  25. package/dist/client/theme-default/AlgoliaSearch.js +15 -15
  26. package/dist/client/theme-default/AlgoliaSearch.js.map +1 -1
  27. package/dist/client/theme-default/Features.d.ts +2 -2
  28. package/dist/client/theme-default/Features.d.ts.map +1 -1
  29. package/dist/client/theme-default/Features.js +10 -8
  30. package/dist/client/theme-default/Features.js.map +1 -1
  31. package/dist/client/theme-default/Hero.d.ts +2 -2
  32. package/dist/client/theme-default/Hero.d.ts.map +1 -1
  33. package/dist/client/theme-default/Hero.js +9 -7
  34. package/dist/client/theme-default/Hero.js.map +1 -1
  35. package/dist/client/theme-default/Layout.d.ts +3 -3
  36. package/dist/client/theme-default/Layout.d.ts.map +1 -1
  37. package/dist/client/theme-default/Layout.js +56 -99
  38. package/dist/client/theme-default/Layout.js.map +1 -1
  39. package/dist/client/theme-default/Logo.d.ts +2 -2
  40. package/dist/client/theme-default/Logo.d.ts.map +1 -1
  41. package/dist/client/theme-default/Logo.js +8 -8
  42. package/dist/client/theme-default/Logo.js.map +1 -1
  43. package/dist/client/theme-default/NavLinks.d.ts +2 -2
  44. package/dist/client/theme-default/NavLinks.d.ts.map +1 -1
  45. package/dist/client/theme-default/NavLinks.js +3 -3
  46. package/dist/client/theme-default/NavLinks.js.map +1 -1
  47. package/dist/client/theme-default/SidebarNav.d.ts +2 -2
  48. package/dist/client/theme-default/SidebarNav.d.ts.map +1 -1
  49. package/dist/client/theme-default/SidebarNav.js +3 -3
  50. package/dist/client/theme-default/SidebarNav.js.map +1 -1
  51. package/dist/client/theme-default/SocialLinks.d.ts +2 -2
  52. package/dist/client/theme-default/SocialLinks.d.ts.map +1 -1
  53. package/dist/client/theme-default/SocialLinks.js +1 -1
  54. package/dist/client/theme-default/SocialLinks.js.map +1 -1
  55. package/dist/client/theme-default/ThemeToggle.d.ts +2 -3
  56. package/dist/client/theme-default/ThemeToggle.d.ts.map +1 -1
  57. package/dist/client/theme-default/ThemeToggle.js +2 -30
  58. package/dist/client/theme-default/ThemeToggle.js.map +1 -1
  59. package/dist/client/theme-default/index.d.ts +1 -1
  60. package/dist/client/theme-default/index.d.ts.map +1 -1
  61. package/dist/client/theme-default/index.js +1 -1
  62. package/dist/client/theme-default/index.js.map +1 -1
  63. package/dist/client/theme-utils.d.ts +24 -0
  64. package/dist/client/theme-utils.d.ts.map +1 -0
  65. package/dist/client/theme-utils.js +107 -0
  66. package/dist/client/theme-utils.js.map +1 -0
  67. package/dist/client/types.d.ts +5 -5
  68. package/dist/client/types.d.ts.map +1 -1
  69. package/dist/client/usePageHead.d.ts +2 -2
  70. package/dist/client/usePageHead.d.ts.map +1 -1
  71. package/dist/client/usePageHead.js +61 -56
  72. package/dist/client/usePageHead.js.map +1 -1
  73. package/dist/client/useSiteSearch.d.ts.map +1 -1
  74. package/dist/client/useSiteSearch.js +8 -8
  75. package/dist/client/useSiteSearch.js.map +1 -1
  76. package/dist/node/build.d.ts +1 -1
  77. package/dist/node/build.d.ts.map +1 -1
  78. package/dist/node/build.js +105 -96
  79. package/dist/node/build.js.map +1 -1
  80. package/dist/node/buildCache.d.ts.map +1 -1
  81. package/dist/node/buildCache.js +7 -7
  82. package/dist/node/buildCache.js.map +1 -1
  83. package/dist/node/check.d.ts +1 -1
  84. package/dist/node/check.d.ts.map +1 -1
  85. package/dist/node/check.js +52 -52
  86. package/dist/node/check.js.map +1 -1
  87. package/dist/node/cli.js +61 -64
  88. package/dist/node/cli.js.map +1 -1
  89. package/dist/node/config-helpers.d.ts +4 -4
  90. package/dist/node/config-helpers.d.ts.map +1 -1
  91. package/dist/node/config-helpers.js +1 -1
  92. package/dist/node/config-helpers.js.map +1 -1
  93. package/dist/node/config.d.ts +4 -4
  94. package/dist/node/config.d.ts.map +1 -1
  95. package/dist/node/config.js +37 -40
  96. package/dist/node/config.js.map +1 -1
  97. package/dist/node/content.d.ts +4 -4
  98. package/dist/node/content.d.ts.map +1 -1
  99. package/dist/node/content.js +28 -28
  100. package/dist/node/content.js.map +1 -1
  101. package/dist/node/createContentLoader.d.ts +1 -1
  102. package/dist/node/createContentLoader.d.ts.map +1 -1
  103. package/dist/node/createContentLoader.js +3 -3
  104. package/dist/node/createContentLoader.js.map +1 -1
  105. package/dist/node/devCss.d.ts +1 -1
  106. package/dist/node/devCss.d.ts.map +1 -1
  107. package/dist/node/devCss.js +5 -6
  108. package/dist/node/devCss.js.map +1 -1
  109. package/dist/node/devSsr.d.ts +3 -3
  110. package/dist/node/devSsr.d.ts.map +1 -1
  111. package/dist/node/devSsr.js +32 -32
  112. package/dist/node/devSsr.js.map +1 -1
  113. package/dist/node/dynamicRoutes.d.ts +2 -2
  114. package/dist/node/dynamicRoutes.d.ts.map +1 -1
  115. package/dist/node/dynamicRoutes.js +24 -24
  116. package/dist/node/dynamicRoutes.js.map +1 -1
  117. package/dist/node/favicon.d.ts +2 -2
  118. package/dist/node/favicon.d.ts.map +1 -1
  119. package/dist/node/favicon.js +26 -24
  120. package/dist/node/favicon.js.map +1 -1
  121. package/dist/node/feed.d.ts +2 -2
  122. package/dist/node/feed.d.ts.map +1 -1
  123. package/dist/node/feed.js +18 -16
  124. package/dist/node/feed.js.map +1 -1
  125. package/dist/node/hooks.d.ts +2 -2
  126. package/dist/node/hooks.d.ts.map +1 -1
  127. package/dist/node/hooks.js +1 -1
  128. package/dist/node/hooks.js.map +1 -1
  129. package/dist/node/html.d.ts +8 -8
  130. package/dist/node/html.d.ts.map +1 -1
  131. package/dist/node/html.js +75 -64
  132. package/dist/node/html.js.map +1 -1
  133. package/dist/node/index.d.ts +11 -11
  134. package/dist/node/index.d.ts.map +1 -1
  135. package/dist/node/index.js +8 -8
  136. package/dist/node/index.js.map +1 -1
  137. package/dist/node/init.d.ts +2 -0
  138. package/dist/node/init.d.ts.map +1 -1
  139. package/dist/node/init.js +59 -27
  140. package/dist/node/init.js.map +1 -1
  141. package/dist/node/lastUpdated.d.ts +2 -2
  142. package/dist/node/lastUpdated.d.ts.map +1 -1
  143. package/dist/node/lastUpdated.js +7 -4
  144. package/dist/node/lastUpdated.js.map +1 -1
  145. package/dist/node/loadSiteModule.js +2 -2
  146. package/dist/node/loadSiteModule.js.map +1 -1
  147. package/dist/node/markdown.d.ts +2 -2
  148. package/dist/node/markdown.d.ts.map +1 -1
  149. package/dist/node/markdown.js +110 -110
  150. package/dist/node/markdown.js.map +1 -1
  151. package/dist/node/markdownHeadings.d.ts +1 -1
  152. package/dist/node/markdownHeadings.d.ts.map +1 -1
  153. package/dist/node/markdownHeadings.js +11 -11
  154. package/dist/node/markdownHeadings.js.map +1 -1
  155. package/dist/node/markdownInclude.d.ts.map +1 -1
  156. package/dist/node/markdownInclude.js +11 -11
  157. package/dist/node/markdownInclude.js.map +1 -1
  158. package/dist/node/markdownSnippets.d.ts.map +1 -1
  159. package/dist/node/markdownSnippets.js +34 -34
  160. package/dist/node/markdownSnippets.js.map +1 -1
  161. package/dist/node/mdx.d.ts +1 -1
  162. package/dist/node/mdx.d.ts.map +1 -1
  163. package/dist/node/mdx.js +4 -4
  164. package/dist/node/mdx.js.map +1 -1
  165. package/dist/node/packageRoot.d.ts.map +1 -1
  166. package/dist/node/packageRoot.js +4 -4
  167. package/dist/node/packageRoot.js.map +1 -1
  168. package/dist/node/pageDataLoaders.d.ts +2 -2
  169. package/dist/node/pageDataLoaders.d.ts.map +1 -1
  170. package/dist/node/pageDataLoaders.js +24 -20
  171. package/dist/node/pageDataLoaders.js.map +1 -1
  172. package/dist/node/paths.d.ts.map +1 -1
  173. package/dist/node/paths.js +4 -4
  174. package/dist/node/paths.js.map +1 -1
  175. package/dist/node/plugin.d.ts +3 -3
  176. package/dist/node/plugin.d.ts.map +1 -1
  177. package/dist/node/plugin.js +66 -66
  178. package/dist/node/plugin.js.map +1 -1
  179. package/dist/node/resolveDeps.js +10 -10
  180. package/dist/node/resolveDeps.js.map +1 -1
  181. package/dist/node/serve.d.ts.map +1 -1
  182. package/dist/node/serve.js +13 -15
  183. package/dist/node/serve.js.map +1 -1
  184. package/dist/node/server.d.ts +3 -3
  185. package/dist/node/server.d.ts.map +1 -1
  186. package/dist/node/server.js +28 -25
  187. package/dist/node/server.js.map +1 -1
  188. package/dist/node/siteConfig.d.ts +12 -12
  189. package/dist/node/siteConfig.d.ts.map +1 -1
  190. package/dist/node/tagIndex.d.ts +5 -5
  191. package/dist/node/tagIndex.d.ts.map +1 -1
  192. package/dist/node/tagIndex.js +10 -10
  193. package/dist/node/tagIndex.js.map +1 -1
  194. package/dist/shared/contentChunk.d.ts.map +1 -1
  195. package/dist/shared/contentChunk.js +6 -6
  196. package/dist/shared/contentChunk.js.map +1 -1
  197. package/dist/shared/contentSchema.d.ts.map +1 -1
  198. package/dist/shared/contentSchema.js +11 -11
  199. package/dist/shared/contentSchema.js.map +1 -1
  200. package/dist/shared/deadLinks.d.ts.map +1 -1
  201. package/dist/shared/deadLinks.js +6 -6
  202. package/dist/shared/deadLinks.js.map +1 -1
  203. package/dist/shared/escapeHtml.js +4 -4
  204. package/dist/shared/escapeHtml.js.map +1 -1
  205. package/dist/shared/index.d.ts +14 -14
  206. package/dist/shared/index.d.ts.map +1 -1
  207. package/dist/shared/index.js +14 -14
  208. package/dist/shared/index.js.map +1 -1
  209. package/dist/shared/locale.d.ts +1 -1
  210. package/dist/shared/locale.d.ts.map +1 -1
  211. package/dist/shared/locale.js +10 -10
  212. package/dist/shared/locale.js.map +1 -1
  213. package/dist/shared/pageChrome.d.ts +4 -4
  214. package/dist/shared/pageChrome.d.ts.map +1 -1
  215. package/dist/shared/pageChrome.js +21 -21
  216. package/dist/shared/pageChrome.js.map +1 -1
  217. package/dist/shared/pageHead.d.ts +1 -1
  218. package/dist/shared/pageHead.d.ts.map +1 -1
  219. package/dist/shared/pageHead.js +4 -4
  220. package/dist/shared/pageHead.js.map +1 -1
  221. package/dist/shared/pageMeta.d.ts +5 -5
  222. package/dist/shared/pageMeta.d.ts.map +1 -1
  223. package/dist/shared/pageMeta.js +15 -17
  224. package/dist/shared/pageMeta.js.map +1 -1
  225. package/dist/shared/rewrites.d.ts +1 -1
  226. package/dist/shared/rewrites.d.ts.map +1 -1
  227. package/dist/shared/rewrites.js +2 -2
  228. package/dist/shared/rewrites.js.map +1 -1
  229. package/dist/shared/route.js +5 -5
  230. package/dist/shared/route.js.map +1 -1
  231. package/dist/shared/search.d.ts +3 -3
  232. package/dist/shared/search.d.ts.map +1 -1
  233. package/dist/shared/search.js +14 -14
  234. package/dist/shared/search.js.map +1 -1
  235. package/dist/shared/sidebar.d.ts +1 -1
  236. package/dist/shared/sidebar.d.ts.map +1 -1
  237. package/dist/shared/sidebar.js +4 -4
  238. package/dist/shared/sidebar.js.map +1 -1
  239. package/dist/shared/slug.d.ts +1 -1
  240. package/dist/shared/slug.d.ts.map +1 -1
  241. package/dist/shared/slug.js +5 -5
  242. package/dist/shared/slug.js.map +1 -1
  243. package/dist/shared/socialIcons.d.ts.map +1 -1
  244. package/dist/shared/socialIcons.js +4 -4
  245. package/dist/shared/socialIcons.js.map +1 -1
  246. package/dist/shared/tags.js +8 -8
  247. package/dist/shared/tags.js.map +1 -1
  248. package/dist/shared/theme.d.ts +1 -1
  249. package/dist/shared/theme.d.ts.map +1 -1
  250. package/dist/shared/theme.js +16 -10
  251. package/dist/shared/theme.js.map +1 -1
  252. package/dist/shared/themeLabels.d.ts +1 -1
  253. package/dist/shared/themeLabels.d.ts.map +1 -1
  254. package/dist/shared/themeLabels.js +26 -26
  255. package/dist/shared/themeLabels.js.map +1 -1
  256. package/dist/shared/url.d.ts.map +1 -1
  257. package/dist/shared/url.js +3 -3
  258. package/dist/shared/url.js.map +1 -1
  259. package/package.json +33 -9
  260. package/src/client/app.tsx +89 -92
  261. package/src/client/entry-client.tsx +17 -19
  262. package/src/client/entry-ssr.tsx +33 -33
  263. package/src/client/index.ts +16 -2
  264. package/src/client/loadPage.ts +37 -38
  265. package/src/client/prefetchLinks.ts +30 -30
  266. package/src/client/theme-default/AlgoliaSearch.tsx +46 -46
  267. package/src/client/theme-default/Features.tsx +27 -21
  268. package/src/client/theme-default/Hero.tsx +22 -18
  269. package/src/client/theme-default/Layout.tsx +189 -244
  270. package/src/client/theme-default/Logo.tsx +30 -40
  271. package/src/client/theme-default/NavLinks.tsx +21 -21
  272. package/src/client/theme-default/SidebarNav.tsx +29 -29
  273. package/src/client/theme-default/SocialLinks.tsx +11 -11
  274. package/src/client/theme-default/ThemeToggle.tsx +2 -78
  275. package/src/client/theme-default/index.ts +1 -1
  276. package/src/client/theme-default/styles.css +30 -21
  277. package/src/client/theme-utils.tsx +184 -0
  278. package/src/client/types.ts +30 -24
  279. package/src/client/usePageHead.ts +128 -128
  280. package/src/client/useSiteSearch.ts +34 -34
  281. package/src/client/virtual.d.ts +76 -76
  282. package/src/shared/contentChunk.ts +6 -6
  283. package/src/shared/contentSchema.ts +52 -49
  284. package/src/shared/deadLinks.ts +16 -16
  285. package/src/shared/escapeHtml.ts +5 -5
  286. package/src/shared/index.ts +21 -25
  287. package/src/shared/locale.ts +46 -46
  288. package/src/shared/pageChrome.ts +123 -123
  289. package/src/shared/pageHead.ts +16 -16
  290. package/src/shared/pageMeta.ts +79 -79
  291. package/src/shared/rewrites.ts +14 -16
  292. package/src/shared/route.ts +7 -7
  293. package/src/shared/search.ts +52 -52
  294. package/src/shared/sidebar.ts +28 -28
  295. package/src/shared/slug.ts +13 -13
  296. package/src/shared/socialIcons.ts +12 -14
  297. package/src/shared/tags.ts +20 -20
  298. package/src/shared/theme.ts +22 -13
  299. package/src/shared/themeLabels.ts +45 -45
  300. package/src/shared/url.ts +6 -10
  301. package/templates/default/.preactpress/config.ts +17 -17
  302. package/templates/default/README.md +16 -16
  303. package/templates/default/guide/first-five-minutes.md +21 -21
  304. package/templates/default/index.html +1 -1
  305. package/templates/default/index.md +9 -9
  306. package/templates/default/package.json +1 -1
  307. package/templates/default/pnpm-lock.yaml +5 -5
  308. package/templates/docs/.preactpress/config.ts +76 -56
  309. package/templates/docs/README.md +6 -6
  310. package/templates/docs/components/BenefitsGrid.tsx +45 -0
  311. package/templates/docs/components/CliBlock.tsx +38 -0
  312. package/templates/docs/components/ComparisonTable.tsx +60 -0
  313. package/templates/docs/components/CopyableCommand.tsx +86 -0
  314. package/templates/docs/components/Counter.tsx +7 -5
  315. package/templates/docs/components/MarketingHero.tsx +63 -0
  316. package/templates/docs/components/MdxDemo.tsx +96 -0
  317. package/templates/docs/components/References.tsx +62 -0
  318. package/templates/docs/components/TemplateGallery.tsx +46 -0
  319. package/templates/docs/components/marketing.css +992 -0
  320. package/templates/docs/examples/algolia-docsearch.md +33 -0
  321. package/templates/docs/examples/content-loader.data.ts +11 -0
  322. package/templates/docs/examples/content-loader.md +29 -0
  323. package/templates/docs/examples/dynamic-routes.md +16 -0
  324. package/templates/docs/examples/static-assets.md +13 -0
  325. package/templates/docs/guide/advanced.md +4 -4
  326. package/templates/docs/guide/commands.md +10 -10
  327. package/templates/docs/guide/configuration.md +43 -43
  328. package/templates/docs/guide/creating-pages.md +60 -39
  329. package/templates/docs/guide/custom-themes.md +9 -9
  330. package/templates/docs/guide/deploy.md +29 -29
  331. package/templates/docs/guide/first-five-minutes.md +22 -22
  332. package/templates/docs/guide/getting-started.md +29 -31
  333. package/templates/docs/guide/markdown-and-mdx.md +1 -1
  334. package/templates/docs/guide/routing.md +40 -40
  335. package/templates/docs/guide/what-is-preactpress.md +18 -18
  336. package/templates/docs/index.html +1 -1
  337. package/templates/docs/index.mdx +25 -0
  338. package/templates/docs/interactive.mdx +1 -1
  339. package/templates/docs/markdown-examples.md +73 -21
  340. package/templates/docs/package.json +1 -1
  341. package/templates/docs/packages/[pkg].md +15 -0
  342. package/templates/docs/packages/[pkg].paths.ts +20 -0
  343. package/templates/docs/parts/include-body.md +1 -0
  344. package/templates/docs/pnpm-lock.yaml +5 -5
  345. package/templates/docs/public/preactpress-example.txt +1 -0
  346. package/templates/docs/snippets/greet.ts +1 -1
  347. package/templates/hono/.preactpress/config.ts +65 -65
  348. package/templates/hono/.preactpress/theme/CodeSnippet.tsx +15 -15
  349. package/templates/hono/.preactpress/theme/FeatureGrid.tsx +7 -7
  350. package/templates/hono/.preactpress/theme/Hero.tsx +13 -13
  351. package/templates/hono/.preactpress/theme/Layout.tsx +122 -164
  352. package/templates/hono/.preactpress/theme/Logo.tsx +6 -6
  353. package/templates/hono/.preactpress/theme/ThemeToggle.tsx +3 -70
  354. package/templates/hono/.preactpress/theme/hono.css +31 -14
  355. package/templates/hono/README.md +17 -15
  356. package/templates/hono/components/Counter.tsx +7 -5
  357. package/templates/hono/de/guide/configuration.md +18 -20
  358. package/templates/hono/de/guide/deploy.md +29 -29
  359. package/templates/hono/de/guide/first-five-minutes.md +21 -21
  360. package/templates/hono/de/guide/getting-started.md +29 -29
  361. package/templates/hono/de/guide/routing.md +26 -25
  362. package/templates/hono/de/guide/seiten-erstellen.md +39 -39
  363. package/templates/hono/de/guide/what-is-preactpress.md +18 -18
  364. package/templates/hono/de/index.mdx +20 -17
  365. package/templates/hono/de/interactive.mdx +1 -1
  366. package/templates/hono/de/markdown-examples.md +6 -6
  367. package/templates/hono/de/parts/include-body.md +1 -0
  368. package/templates/hono/de/snippets/greet.ts +1 -1
  369. package/templates/hono/guide/configuration.md +25 -25
  370. package/templates/hono/guide/creating-pages.md +39 -39
  371. package/templates/hono/guide/deploy.md +29 -29
  372. package/templates/hono/guide/first-five-minutes.md +21 -21
  373. package/templates/hono/guide/getting-started.md +29 -29
  374. package/templates/hono/guide/routing.md +40 -40
  375. package/templates/hono/guide/what-is-preactpress.md +18 -18
  376. package/templates/hono/index.html +1 -1
  377. package/templates/hono/index.mdx +21 -17
  378. package/templates/hono/interactive.mdx +1 -1
  379. package/templates/hono/markdown-examples.md +6 -6
  380. package/templates/hono/package.json +1 -1
  381. package/templates/hono/parts/include-body.md +1 -0
  382. package/templates/hono/pnpm-lock.yaml +5 -5
  383. package/templates/hono/snippets/greet.ts +1 -1
  384. package/templates/magazine/.preactpress/config.ts +19 -19
  385. package/templates/magazine/.preactpress/theme/Layout.tsx +69 -172
  386. package/templates/magazine/.preactpress/theme/TeaserGrid.tsx +14 -14
  387. package/templates/magazine/.preactpress/theme/ThemeToggle.tsx +4 -70
  388. package/templates/magazine/.preactpress/theme/magazine.css +13 -8
  389. package/templates/magazine/README.md +30 -0
  390. package/templates/magazine/article-markets.md +2 -2
  391. package/templates/magazine/article-tech.mdx +10 -10
  392. package/templates/magazine/index.data.ts +9 -9
  393. package/templates/magazine/index.html +5 -1
  394. package/templates/magazine/index.mdx +1 -1
  395. package/templates/magazine/package.json +1 -1
  396. package/templates/magazine/pnpm-lock.yaml +2917 -0
  397. package/templates/docs/about.md +0 -10
  398. package/templates/docs/dist/404.html +0 -29
  399. package/templates/docs/dist/about/index.html +0 -32
  400. package/templates/docs/dist/assets/esm-DzlBxN5p.js +0 -110
  401. package/templates/docs/dist/assets/interactive-64o6YwrR.js +0 -9
  402. package/templates/docs/dist/assets/interactive-BedCloEw.js +0 -9
  403. package/templates/docs/dist/assets/main-BVLeh8GO.js +0 -1
  404. package/templates/docs/dist/assets/main-CreUBb3N.js +0 -1
  405. package/templates/docs/dist/assets/main-oodK-zZy.css +0 -2
  406. package/templates/docs/dist/de/guide/getting-started/index.html +0 -36
  407. package/templates/docs/dist/de/guide/what-is-preactpress/index.html +0 -38
  408. package/templates/docs/dist/de/index.html +0 -29
  409. package/templates/docs/dist/favicon-32.png +0 -0
  410. package/templates/docs/dist/favicon.png +0 -0
  411. package/templates/docs/dist/favicon.svg +0 -28
  412. package/templates/docs/dist/guide/advanced/index.html +0 -53
  413. package/templates/docs/dist/guide/commands/index.html +0 -89
  414. package/templates/docs/dist/guide/configuration/index.html +0 -196
  415. package/templates/docs/dist/guide/creating-pages/index.html +0 -234
  416. package/templates/docs/dist/guide/custom-themes/index.html +0 -52
  417. package/templates/docs/dist/guide/default-theme/index.html +0 -53
  418. package/templates/docs/dist/guide/deploy/index.html +0 -195
  419. package/templates/docs/dist/guide/first-five-minutes/index.html +0 -99
  420. package/templates/docs/dist/guide/getting-started/index.html +0 -173
  421. package/templates/docs/dist/guide/markdown-and-mdx/index.html +0 -59
  422. package/templates/docs/dist/guide/routing/index.html +0 -192
  423. package/templates/docs/dist/guide/what-is-preactpress/index.html +0 -141
  424. package/templates/docs/dist/index.html +0 -30
  425. package/templates/docs/dist/interactive/index.html +0 -37
  426. package/templates/docs/dist/markdown-examples/index.html +0 -231
  427. package/templates/docs/dist/preactpress-content/404.json +0 -8
  428. package/templates/docs/dist/preactpress-content/_index.json +0 -50
  429. package/templates/docs/dist/preactpress-content/about.json +0 -15
  430. package/templates/docs/dist/preactpress-content/de.json +0 -45
  431. package/templates/docs/dist/preactpress-content/de__guide__getting-started.json +0 -26
  432. package/templates/docs/dist/preactpress-content/de__guide__what-is-preactpress.json +0 -21
  433. package/templates/docs/dist/preactpress-content/guide__advanced.json +0 -46
  434. package/templates/docs/dist/preactpress-content/guide__commands.json +0 -26
  435. package/templates/docs/dist/preactpress-content/guide__configuration.json +0 -51
  436. package/templates/docs/dist/preactpress-content/guide__creating-pages.json +0 -71
  437. package/templates/docs/dist/preactpress-content/guide__custom-themes.json +0 -15
  438. package/templates/docs/dist/preactpress-content/guide__default-theme.json +0 -36
  439. package/templates/docs/dist/preactpress-content/guide__deploy.json +0 -56
  440. package/templates/docs/dist/preactpress-content/guide__first-five-minutes.json +0 -36
  441. package/templates/docs/dist/preactpress-content/guide__getting-started.json +0 -51
  442. package/templates/docs/dist/preactpress-content/guide__markdown-and-mdx.json +0 -31
  443. package/templates/docs/dist/preactpress-content/guide__routing.json +0 -71
  444. package/templates/docs/dist/preactpress-content/guide__what-is-preactpress.json +0 -51
  445. package/templates/docs/dist/preactpress-content/markdown-examples.json +0 -71
  446. package/templates/docs/dist/preactpress-content/tags__markdown.json +0 -16
  447. package/templates/docs/dist/preactpress-search.json +0 -166
  448. package/templates/docs/dist/preactpress-theme.js +0 -1
  449. package/templates/docs/dist/tags/markdown/index.html +0 -32
  450. package/templates/docs/index.md +0 -28
  451. package/templates/hono/dist/404.html +0 -29
  452. package/templates/hono/dist/README/index.html +0 -104
  453. package/templates/hono/dist/about/index.html +0 -32
  454. package/templates/hono/dist/assets/Counter-CCEByS-J.js +0 -1
  455. package/templates/hono/dist/assets/Hero--o6WMNvm.js +0 -2
  456. package/templates/hono/dist/assets/de-D5r6Ye70.js +0 -10
  457. package/templates/hono/dist/assets/hono-BXWYYdyv.js +0 -10
  458. package/templates/hono/dist/assets/interactive-Bxo-WBpC.js +0 -9
  459. package/templates/hono/dist/assets/interactive-BznI4IQ3.js +0 -9
  460. package/templates/hono/dist/assets/main-Bqi-VFEk.js +0 -2
  461. package/templates/hono/dist/assets/main-DIIN7FO0.css +0 -1
  462. package/templates/hono/dist/de/about/index.html +0 -32
  463. package/templates/hono/dist/de/guide/commands/index.html +0 -41
  464. package/templates/hono/dist/de/guide/configuration/index.html +0 -105
  465. package/templates/hono/dist/de/guide/deploy/index.html +0 -195
  466. package/templates/hono/dist/de/guide/first-five-minutes/index.html +0 -99
  467. package/templates/hono/dist/de/guide/getting-started/index.html +0 -173
  468. package/templates/hono/dist/de/guide/routing/index.html +0 -165
  469. package/templates/hono/dist/de/guide/seiten-erstellen/index.html +0 -234
  470. package/templates/hono/dist/de/guide/what-is-preactpress/index.html +0 -141
  471. package/templates/hono/dist/de/index.html +0 -30
  472. package/templates/hono/dist/de/interactive/index.html +0 -37
  473. package/templates/hono/dist/de/markdown-examples/index.html +0 -97
  474. package/templates/hono/dist/de/parts/include-body/index.html +0 -36
  475. package/templates/hono/dist/de/tags/markdown/index.html +0 -32
  476. package/templates/hono/dist/favicon-32.png +0 -0
  477. package/templates/hono/dist/favicon.png +0 -0
  478. package/templates/hono/dist/favicon.svg +0 -28
  479. package/templates/hono/dist/guide/commands/index.html +0 -41
  480. package/templates/hono/dist/guide/configuration/index.html +0 -158
  481. package/templates/hono/dist/guide/creating-pages/index.html +0 -234
  482. package/templates/hono/dist/guide/deploy/index.html +0 -195
  483. package/templates/hono/dist/guide/first-five-minutes/index.html +0 -99
  484. package/templates/hono/dist/guide/getting-started/index.html +0 -173
  485. package/templates/hono/dist/guide/routing/index.html +0 -165
  486. package/templates/hono/dist/guide/what-is-preactpress/index.html +0 -141
  487. package/templates/hono/dist/index.html +0 -30
  488. package/templates/hono/dist/interactive/index.html +0 -37
  489. package/templates/hono/dist/markdown-examples/index.html +0 -105
  490. package/templates/hono/dist/partials/shared-note/index.html +0 -30
  491. package/templates/hono/dist/parts/include-body/index.html +0 -36
  492. package/templates/hono/dist/preactpress-content/404.json +0 -8
  493. package/templates/hono/dist/preactpress-content/README.json +0 -26
  494. package/templates/hono/dist/preactpress-content/about.json +0 -15
  495. package/templates/hono/dist/preactpress-content/de__about.json +0 -15
  496. package/templates/hono/dist/preactpress-content/de__guide__commands.json +0 -36
  497. package/templates/hono/dist/preactpress-content/de__guide__configuration.json +0 -41
  498. package/templates/hono/dist/preactpress-content/de__guide__deploy.json +0 -56
  499. package/templates/hono/dist/preactpress-content/de__guide__first-five-minutes.json +0 -36
  500. package/templates/hono/dist/preactpress-content/de__guide__getting-started.json +0 -51
  501. package/templates/hono/dist/preactpress-content/de__guide__routing.json +0 -61
  502. package/templates/hono/dist/preactpress-content/de__guide__seiten-erstellen.json +0 -71
  503. package/templates/hono/dist/preactpress-content/de__guide__what-is-preactpress.json +0 -51
  504. package/templates/hono/dist/preactpress-content/de__markdown-examples.json +0 -131
  505. package/templates/hono/dist/preactpress-content/de__parts__include-body.json +0 -16
  506. package/templates/hono/dist/preactpress-content/de__tags__markdown.json +0 -16
  507. package/templates/hono/dist/preactpress-content/guide__commands.json +0 -36
  508. package/templates/hono/dist/preactpress-content/guide__configuration.json +0 -51
  509. package/templates/hono/dist/preactpress-content/guide__creating-pages.json +0 -71
  510. package/templates/hono/dist/preactpress-content/guide__deploy.json +0 -56
  511. package/templates/hono/dist/preactpress-content/guide__first-five-minutes.json +0 -36
  512. package/templates/hono/dist/preactpress-content/guide__getting-started.json +0 -51
  513. package/templates/hono/dist/preactpress-content/guide__routing.json +0 -61
  514. package/templates/hono/dist/preactpress-content/guide__what-is-preactpress.json +0 -51
  515. package/templates/hono/dist/preactpress-content/markdown-examples.json +0 -141
  516. package/templates/hono/dist/preactpress-content/partials__shared-note.json +0 -10
  517. package/templates/hono/dist/preactpress-content/parts__include-body.json +0 -16
  518. package/templates/hono/dist/preactpress-content/tags__markdown.json +0 -16
  519. package/templates/hono/dist/preactpress-search.json +0 -242
  520. package/templates/hono/dist/preactpress-theme.js +0 -1
  521. package/templates/hono/dist/tags/markdown/index.html +0 -32
@@ -1,143 +1,82 @@
1
- import type { ComponentChildren, FunctionalComponent, JSX } from 'preact'
2
- import { useEffect, useMemo, useState } from 'preact/hooks'
3
- import type { LayoutProps } from '@kamod-ch/preactpress/client'
4
- import Logo from './Logo.js'
5
- import ThemeToggle from './ThemeToggle.js'
6
- import './hono.css'
1
+ import type { FunctionalComponent } from "preact";
2
+ import { useEffect, useMemo, useState } from "preact/hooks";
3
+ import {
4
+ createMdxHeadingComponents,
5
+ isActive,
6
+ normalizeLink,
7
+ slugifyHeading,
8
+ withBase,
9
+ type LayoutProps,
10
+ } from "@kamod-ch/preactpress/client";
11
+ import Logo from "./Logo.js";
12
+ import ThemeToggle from "./ThemeToggle.js";
13
+ import "./hono.css";
7
14
 
8
15
  interface SidebarItem {
9
- text: string
10
- link?: string
11
- items?: SidebarItem[]
16
+ text: string;
17
+ link?: string;
18
+ items?: SidebarItem[];
12
19
  }
13
20
 
14
21
  interface SidebarGroup {
15
- text?: string
16
- items: SidebarItem[]
22
+ text?: string;
23
+ items: SidebarItem[];
17
24
  }
18
25
 
19
- type SocialLink = NonNullable<LayoutProps['themeConfig']['socialLinks']>[number]
26
+ type SocialLink = NonNullable<LayoutProps["themeConfig"]["socialLinks"]>[number];
20
27
 
21
28
  const GITHUB_SVG =
22
- '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.404 1.02.005 2.04.137 3 .404 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>'
23
-
24
- function withBase(base: string, link: string): string {
25
- if (/^(?:[a-z]+:)?\/\//i.test(link) || /^(?:data|mailto|tel):/i.test(link) || link.startsWith('#')) {
26
- return link
27
- }
28
- const b = base === '/' ? '' : base.replace(/\/$/, '')
29
- const l = link.startsWith('/') ? link : `/${link}`
30
- return `${b}${l}`
31
- }
32
-
33
- function normalizeLink(link: string): string {
34
- const clean = link.split(/[?#]/, 1)[0] || '/'
35
- const prefixed = clean.startsWith('/') ? clean : `/${clean}`
36
- return prefixed.replace(/\/$/, '') || '/'
37
- }
38
-
39
- function isActive(routePath: string, link: string | undefined): boolean {
40
- if (!link || /^(?:[a-z]+:)?\/\//i.test(link)) return false
41
- const route = normalizeLink(routePath)
42
- const target = normalizeLink(link)
43
- return route === target || (target !== '/' && route.startsWith(`${target}/`))
44
- }
45
-
46
- function childText(children: ComponentChildren): string {
47
- if (children == null || typeof children === 'boolean') return ''
48
- if (typeof children === 'string' || typeof children === 'number') return String(children)
49
- if (Array.isArray(children)) return children.map(childText).join('')
50
- if (typeof children === 'object' && 'props' in children) {
51
- return childText(children.props.children as ComponentChildren)
52
- }
53
- return ''
54
- }
55
-
56
- function slugify(text: string): string {
57
- const slug = text
58
- .toLowerCase()
59
- .trim()
60
- .replace(/<[^>]+>/g, '')
61
- .replace(/&[a-z0-9#]+;/gi, '')
62
- .replace(/[^a-z0-9]+/g, '-')
63
- .replace(/^-+|-+$/g, '')
64
- return slug || 'section'
65
- }
29
+ '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>GitHub</title><path fill="currentColor" d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.404 1.02.005 2.04.137 3 .404 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>';
66
30
 
67
31
  function tagRoute(tag: string): string {
68
- return `/tags/${slugify(tag)}`
32
+ return `/tags/${slugifyHeading(tag)}`;
69
33
  }
70
34
 
71
35
  function resolveSidebar(
72
- sidebar: LayoutProps['themeConfig']['sidebar'],
73
- routePath: string
36
+ sidebar: LayoutProps["themeConfig"]["sidebar"],
37
+ routePath: string,
74
38
  ): SidebarGroup[] {
75
- if (!sidebar) return []
76
- if (Array.isArray(sidebar)) return sidebar
39
+ if (!sidebar) return [];
40
+ if (Array.isArray(sidebar)) return sidebar;
77
41
 
78
- const route = normalizeLink(routePath)
42
+ const route = normalizeLink(routePath);
79
43
  const entries = Object.entries(sidebar)
80
44
  .map(([prefix, groups]) => ({ prefix: normalizeLink(prefix), groups }))
81
- .filter(({ prefix }) => prefix !== '/')
82
- .sort((a, b) => b.prefix.length - a.prefix.length)
45
+ .filter(({ prefix }) => prefix !== "/")
46
+ .sort((a, b) => b.prefix.length - a.prefix.length);
83
47
 
84
48
  for (const { prefix, groups } of entries) {
85
- if (route === prefix || route.startsWith(`${prefix}/`)) return groups
49
+ if (route === prefix || route.startsWith(`${prefix}/`)) return groups;
86
50
  }
87
51
 
88
- return sidebar['/'] ?? sidebar[''] ?? []
52
+ return sidebar["/"] ?? sidebar[""] ?? [];
89
53
  }
90
54
 
91
55
  function flattenItems(items: SidebarItem[]): Array<{ text: string; link: string }> {
92
- const out: Array<{ text: string; link: string }> = []
56
+ const out: Array<{ text: string; link: string }> = [];
93
57
  for (const item of items) {
94
- if (item.link) out.push({ text: item.text, link: item.link })
95
- if (item.items?.length) out.push(...flattenItems(item.items))
58
+ if (item.link) out.push({ text: item.text, link: item.link });
59
+ if (item.items?.length) out.push(...flattenItems(item.items));
96
60
  }
97
- return out
61
+ return out;
98
62
  }
99
63
 
100
64
  function flattenSidebarItems(sidebar: SidebarGroup[]): Array<{ text: string; link: string }> {
101
- return sidebar.flatMap((group) => flattenItems(group.items))
65
+ return sidebar.flatMap((group) => flattenItems(group.items));
102
66
  }
103
67
 
104
- function socialIconSvg(icon: SocialLink['icon']): string | undefined {
105
- if (typeof icon === 'object') return icon.svg
106
- return icon.toLowerCase() === 'github' ? GITHUB_SVG : undefined
68
+ function socialIconSvg(icon: SocialLink["icon"]): string | undefined {
69
+ if (typeof icon === "object") return icon.svg;
70
+ return icon.toLowerCase() === "github" ? GITHUB_SVG : undefined;
107
71
  }
108
72
 
109
- function socialLinkLabel(icon: SocialLink['icon'], ariaLabel?: string): string {
110
- if (ariaLabel) return ariaLabel
111
- return typeof icon === 'string' ? icon : 'Social link'
112
- }
113
-
114
- function createMdxHeadingComponents() {
115
- const used = new Map<string, number>()
116
- const heading =
117
- (Tag: 'h2' | 'h3') =>
118
- ({ children, ...props }: JSX.HTMLAttributes<HTMLHeadingElement>) => {
119
- const base = slugify(childText(children))
120
- const count = used.get(base) ?? 0
121
- used.set(base, count + 1)
122
- const id = count === 0 ? base : `${base}-${count + 1}`
123
- return (
124
- <Tag {...props} id={id} class={`hn-heading ${props.class ?? ''}`.trim()}>
125
- {children}
126
- <a class="hn-heading-anchor" href={`#${id}`} aria-label="Link to section">
127
- #
128
- </a>
129
- </Tag>
130
- )
131
- }
132
-
133
- return {
134
- h2: heading('h2'),
135
- h3: heading('h3')
136
- }
73
+ function socialLinkLabel(icon: SocialLink["icon"], ariaLabel?: string): string {
74
+ if (ariaLabel) return ariaLabel;
75
+ return typeof icon === "string" ? icon : "Social link";
137
76
  }
138
77
 
139
78
  function isHomeRoute(routePath: string, prefix: string | undefined): boolean {
140
- return normalizeLink(routePath) === normalizeLink(prefix || '/')
79
+ return normalizeLink(routePath) === normalizeLink(prefix || "/");
141
80
  }
142
81
 
143
82
  const Layout: FunctionalComponent<LayoutProps> = ({
@@ -147,75 +86,88 @@ const Layout: FunctionalComponent<LayoutProps> = ({
147
86
  page,
148
87
  locale,
149
88
  locales = [],
150
- localizeRoute
89
+ localizeRoute,
151
90
  }) => {
152
- const [query, setQuery] = useState('')
153
- const [sidebarOpen, setSidebarOpen] = useState(false)
154
- const isHome = isHomeRoute(routePath, locale?.prefix)
155
- const activeSidebar = resolveSidebar(themeConfig.sidebar, routePath)
156
- const sidebarItems = flattenSidebarItems(activeSidebar)
157
- const normalizedQuery = query.trim().toLowerCase()
91
+ const [query, setQuery] = useState("");
92
+ const [sidebarOpen, setSidebarOpen] = useState(false);
93
+ const isHome = isHomeRoute(routePath, locale?.prefix);
94
+ const activeSidebar = resolveSidebar(themeConfig.sidebar, routePath);
95
+ const sidebarItems = flattenSidebarItems(activeSidebar);
96
+ const normalizedQuery = query.trim().toLowerCase();
158
97
  const visibleSidebar = useMemo(() => {
159
- if (!normalizedQuery) return activeSidebar
98
+ if (!normalizedQuery) return activeSidebar;
160
99
  return activeSidebar
161
100
  .map((group) => ({
162
101
  ...group,
163
- items: group.items.filter((item) => item.text.toLowerCase().includes(normalizedQuery))
102
+ items: group.items.filter((item) => item.text.toLowerCase().includes(normalizedQuery)),
164
103
  }))
165
- .filter((group) => group.items.length > 0)
166
- }, [activeSidebar, normalizedQuery])
167
- const activeIndex = sidebarItems.findIndex((item) => isActive(routePath, item.link))
168
- const previous = activeIndex > 0 ? sidebarItems[activeIndex - 1] : undefined
104
+ .filter((group) => group.items.length > 0);
105
+ }, [activeSidebar, normalizedQuery]);
106
+ const activeIndex = sidebarItems.findIndex((item) => isActive(routePath, item.link));
107
+ const previous = activeIndex > 0 ? sidebarItems[activeIndex - 1] : undefined;
169
108
  const next =
170
- activeIndex >= 0 && activeIndex < sidebarItems.length - 1 ? sidebarItems[activeIndex + 1] : undefined
171
- const mdxComponents = createMdxHeadingComponents()
172
- const MdxComponent = page?.kind === 'mdx' ? page.Component : undefined
173
- const pageTags = page?.tags ?? []
174
- const showTags = themeConfig.tags !== false && pageTags.length > 0 && !Boolean(page?.meta.tagIndex)
109
+ activeIndex >= 0 && activeIndex < sidebarItems.length - 1
110
+ ? sidebarItems[activeIndex + 1]
111
+ : undefined;
112
+ const mdxComponents = createMdxHeadingComponents({
113
+ headingClass: "hn-heading",
114
+ anchorClass: "hn-heading-anchor",
115
+ anchorLabel: "Link to section",
116
+ });
117
+ const MdxComponent = page?.kind === "mdx" ? page.Component : undefined;
118
+ const pageTags = page?.tags ?? [];
119
+ const showTags = themeConfig.tags !== false && pageTags.length > 0 && !page?.meta.tagIndex;
175
120
  const editHref =
176
121
  themeConfig.editLink && page?.relativePath
177
122
  ? themeConfig.editLink.pattern.replace(/:path/g, page.relativePath)
178
- : undefined
123
+ : undefined;
179
124
  const lastUpdated = page?.lastUpdated
180
- ? new Date(page.lastUpdated).toLocaleDateString(site.lang || 'en', {
181
- year: 'numeric',
182
- month: 'short',
183
- day: 'numeric'
125
+ ? new Date(page.lastUpdated).toLocaleDateString(site.lang || "en", {
126
+ year: "numeric",
127
+ month: "short",
128
+ day: "numeric",
184
129
  })
185
- : undefined
186
- const outlineItems = themeConfig.outline === false || isHome ? [] : page?.headings ?? []
187
- const contentClass = isHome ? 'hn-home-content' : 'hn-doc-content'
130
+ : undefined;
131
+ const outlineItems = themeConfig.outline === false || isHome ? [] : (page?.headings ?? []);
132
+ const contentClass = isHome ? "hn-home-content" : "hn-doc-content";
188
133
  const renderedContent = MdxComponent ? (
189
134
  <div class={contentClass}>
190
135
  <MdxComponent components={mdxComponents} />
191
136
  </div>
192
137
  ) : (
193
- <div class={contentClass} dangerouslySetInnerHTML={{ __html: page?.kind === 'markdown' ? page.html : '' }} />
194
- )
138
+ <div
139
+ class={contentClass}
140
+ dangerouslySetInnerHTML={{ __html: page?.kind === "markdown" ? page.html : "" }}
141
+ />
142
+ );
195
143
 
196
144
  useEffect(() => {
197
- setQuery('')
198
- if (window.matchMedia('(max-width: 820px)').matches) {
199
- setSidebarOpen(false)
145
+ setQuery("");
146
+ if (window.matchMedia("(max-width: 820px)").matches) {
147
+ setSidebarOpen(false);
200
148
  }
201
- }, [routePath])
149
+ }, [routePath]);
202
150
 
203
151
  useEffect(() => {
204
- const media = window.matchMedia('(max-width: 820px)')
205
- const syncSidebar = () => setSidebarOpen(!media.matches)
206
- syncSidebar()
207
- media.addEventListener('change', syncSidebar)
208
- return () => media.removeEventListener('change', syncSidebar)
209
- }, [])
152
+ const media = window.matchMedia("(max-width: 820px)");
153
+ const syncSidebar = () => setSidebarOpen(!media.matches);
154
+ syncSidebar();
155
+ media.addEventListener("change", syncSidebar);
156
+ return () => media.removeEventListener("change", syncSidebar);
157
+ }, []);
210
158
 
211
159
  return (
212
- <div class={`hn-site${isHome ? ' is-home' : ''}`}>
160
+ <div class={`hn-site${isHome ? " is-home" : ""}`}>
213
161
  <a class="hn-skip" href="#content">
214
162
  Skip to content
215
163
  </a>
216
164
  <header class="hn-header">
217
165
  <div class="hn-header-inner">
218
- <a class="hn-brand" href={withBase(site.base, locale?.prefix || '/')} aria-label={site.title}>
166
+ <a
167
+ class="hn-brand"
168
+ href={withBase(site.base, locale?.prefix || "/")}
169
+ aria-label={site.title}
170
+ >
219
171
  <Logo label={site.title} />
220
172
  </a>
221
173
  <div class="hn-header-actions">
@@ -224,47 +176,51 @@ const Layout: FunctionalComponent<LayoutProps> = ({
224
176
  item.link ? (
225
177
  <a
226
178
  key={item.link}
227
- class={isActive(routePath, item.link) ? 'active' : ''}
179
+ class={isActive(routePath, item.link) ? "active" : ""}
228
180
  href={withBase(site.base, item.link)}
229
- aria-current={isActive(routePath, item.link) ? 'page' : undefined}
181
+ aria-current={isActive(routePath, item.link) ? "page" : undefined}
230
182
  >
231
183
  {item.text}
232
184
  </a>
233
- ) : null
185
+ ) : null,
234
186
  )}
235
187
  </nav>
236
188
  {themeConfig.socialLinks?.length ? (
237
189
  <div class="hn-social" aria-label="Social links">
238
190
  {themeConfig.socialLinks.map((link) => {
239
- const svg = socialIconSvg(link.icon)
191
+ const svg = socialIconSvg(link.icon);
240
192
  return (
241
193
  <a
242
194
  href={withBase(site.base, link.link)}
243
195
  aria-label={socialLinkLabel(link.icon, link.ariaLabel)}
244
196
  key={`${socialLinkLabel(link.icon, link.ariaLabel)}:${link.link}`}
245
197
  >
246
- {svg ? <span dangerouslySetInnerHTML={{ __html: svg }} /> : socialLinkLabel(link.icon, link.ariaLabel)}
198
+ {svg ? (
199
+ <span dangerouslySetInnerHTML={{ __html: svg }} />
200
+ ) : (
201
+ socialLinkLabel(link.icon, link.ariaLabel)
202
+ )}
247
203
  </a>
248
- )
204
+ );
249
205
  })}
250
206
  </div>
251
207
  ) : null}
252
208
  {locales.length > 1 && localizeRoute ? (
253
209
  <details class="hn-locale-switcher">
254
- <summary>{locale?.label ?? 'Language'}</summary>
210
+ <summary>{locale?.label ?? "Language"}</summary>
255
211
  <div class="hn-locale-menu">
256
212
  {locales.map((item) => {
257
- const active = item.key === locale?.key
213
+ const active = item.key === locale?.key;
258
214
  return (
259
215
  <a
260
216
  key={item.key}
261
217
  href={withBase(site.base, localizeRoute(item))}
262
- aria-current={active ? 'page' : undefined}
263
- class={active ? 'active' : ''}
218
+ aria-current={active ? "page" : undefined}
219
+ class={active ? "active" : ""}
264
220
  >
265
221
  {item.label}
266
222
  </a>
267
- )
223
+ );
268
224
  })}
269
225
  </div>
270
226
  </details>
@@ -298,21 +254,21 @@ const Layout: FunctionalComponent<LayoutProps> = ({
298
254
  </label>
299
255
  ) : null}
300
256
  {visibleSidebar.map((group, groupIndex) => (
301
- <div class="hn-sidebar-group" key={`${group.text ?? 'group'}:${groupIndex}`}>
257
+ <div class="hn-sidebar-group" key={`${group.text ?? "group"}:${groupIndex}`}>
302
258
  {group.text ? <h2>{group.text}</h2> : null}
303
259
  <ul>
304
260
  {group.items.map((item) =>
305
261
  item.link ? (
306
262
  <li key={item.link}>
307
263
  <a
308
- class={isActive(routePath, item.link) ? 'active' : ''}
264
+ class={isActive(routePath, item.link) ? "active" : ""}
309
265
  href={withBase(site.base, item.link)}
310
- aria-current={isActive(routePath, item.link) ? 'page' : undefined}
266
+ aria-current={isActive(routePath, item.link) ? "page" : undefined}
311
267
  >
312
268
  {item.text}
313
269
  </a>
314
270
  </li>
315
- ) : null
271
+ ) : null,
316
272
  )}
317
273
  </ul>
318
274
  </div>
@@ -353,11 +309,13 @@ const Layout: FunctionalComponent<LayoutProps> = ({
353
309
  ) : null}
354
310
  {themeConfig.lastUpdated || editHref ? (
355
311
  <footer class="hn-doc-meta">
356
- {themeConfig.lastUpdated && lastUpdated ? <span>Updated {lastUpdated}</span> : null}
312
+ {themeConfig.lastUpdated && lastUpdated ? (
313
+ <span>Updated {lastUpdated}</span>
314
+ ) : null}
357
315
  {editHref ? (
358
316
  <span>
359
- {themeConfig.lastUpdated && lastUpdated ? ' · ' : null}
360
- <a href={editHref}>{themeConfig.editLink?.text ?? 'Edit this page'}</a>
317
+ {themeConfig.lastUpdated && lastUpdated ? " · " : null}
318
+ <a href={editHref}>{themeConfig.editLink?.text ?? "Edit this page"}</a>
361
319
  </span>
362
320
  ) : null}
363
321
  </footer>
@@ -382,7 +340,7 @@ const Layout: FunctionalComponent<LayoutProps> = ({
382
340
  )}
383
341
  {themeConfig.footer ? <footer class="hn-footer">{themeConfig.footer}</footer> : null}
384
342
  </div>
385
- )
386
- }
343
+ );
344
+ };
387
345
 
388
- export default Layout
346
+ export default Layout;
@@ -1,12 +1,12 @@
1
- import type { FunctionalComponent } from 'preact'
1
+ import type { FunctionalComponent } from "preact";
2
2
 
3
3
  interface LogoProps {
4
- class?: string
5
- label: string
4
+ class?: string;
5
+ label: string;
6
6
  }
7
7
 
8
8
  const Logo: FunctionalComponent<LogoProps> = ({ class: className, label }) => (
9
- <span class={`hn-logo ${className ?? ''}`.trim()} aria-label={label}>
9
+ <span class={`hn-logo ${className ?? ""}`.trim()} aria-label={label}>
10
10
  <svg aria-hidden="true" viewBox="0 0 36 36" width="36" height="36">
11
11
  <rect width="36" height="36" rx="11" fill="currentColor" opacity="0.12" />
12
12
  <path
@@ -21,6 +21,6 @@ const Logo: FunctionalComponent<LogoProps> = ({ class: className, label }) => (
21
21
  </svg>
22
22
  <span>{label}</span>
23
23
  </span>
24
- )
24
+ );
25
25
 
26
- export default Logo
26
+ export default Logo;
@@ -1,72 +1,5 @@
1
- import type { FunctionalComponent } from 'preact'
2
- import { useEffect } from 'preact/hooks'
1
+ import { ThemeToggle as BaseThemeToggle } from "@kamod-ch/preactpress/client";
3
2
 
4
- const THEME_STORAGE_KEY = 'preactpress-theme'
5
- type StoredTheme = 'light' | 'dark'
6
-
7
- function readStoredTheme(): StoredTheme | null {
8
- try {
9
- const value = localStorage.getItem(THEME_STORAGE_KEY)
10
- return value === 'light' || value === 'dark' ? value : null
11
- } catch {
12
- return null
13
- }
14
- }
15
-
16
- function applyTheme(theme: StoredTheme | null): void {
17
- if (theme === null) document.documentElement.removeAttribute('data-theme')
18
- else document.documentElement.setAttribute('data-theme', theme)
19
- }
20
-
21
- function toggleTheme(): void {
22
- const stored = readStoredTheme()
23
- const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches
24
- const isDark = stored === 'dark' || (stored === null && prefersDark)
25
- const next: StoredTheme = isDark ? 'light' : 'dark'
26
- applyTheme(next)
27
- try {
28
- localStorage.setItem(THEME_STORAGE_KEY, next)
29
- } catch {
30
- /* Ignore private mode or storage quota failures. */
31
- }
3
+ export default function ThemeToggle() {
4
+ return <BaseThemeToggle className="hn-theme-toggle" ariaLabel="Toggle theme" />;
32
5
  }
33
-
34
- const ThemeToggle: FunctionalComponent = () => {
35
- useEffect(() => {
36
- function onStorage(event: StorageEvent): void {
37
- if (event.key !== THEME_STORAGE_KEY) return
38
- const value = event.newValue
39
- applyTheme(value === 'light' || value === 'dark' ? value : null)
40
- }
41
-
42
- window.addEventListener('storage', onStorage)
43
- return () => window.removeEventListener('storage', onStorage)
44
- }, [])
45
-
46
- return (
47
- <button type="button" class="hn-theme-toggle" onClick={toggleTheme} aria-label="Toggle theme">
48
- <span class="hn-theme-toggle-moon" aria-hidden="true">
49
- <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor">
50
- <path
51
- d="M21 14.8A8.5 8.5 0 0 1 9.2 3a7 7 0 1 0 11.8 11.8Z"
52
- strokeLinecap="round"
53
- strokeLinejoin="round"
54
- strokeWidth="1.7"
55
- />
56
- </svg>
57
- </span>
58
- <span class="hn-theme-toggle-sun" aria-hidden="true">
59
- <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor">
60
- <circle cx="12" cy="12" r="3.5" strokeWidth="1.7" />
61
- <path
62
- d="M12 2.5v2M12 19.5v2M4.6 4.6 6 6M18 18l1.4 1.4M2.5 12h2M19.5 12h2M4.6 19.4 6 18M18 6l1.4-1.4"
63
- strokeLinecap="round"
64
- strokeWidth="1.7"
65
- />
66
- </svg>
67
- </span>
68
- </button>
69
- )
70
- }
71
-
72
- export default ThemeToggle
@@ -15,7 +15,8 @@
15
15
  --hono-code-text: #f3f4f6;
16
16
  --hono-radius: 1.1rem;
17
17
  --hono-shadow: 0 24px 80px rgba(0, 0, 0, 0.42);
18
- --hono-font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
18
+ --hono-font-sans:
19
+ ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
19
20
  --hono-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
20
21
  --hono-layout-max: 1360px;
21
22
  --hono-layout-gutter: 2rem;
@@ -23,7 +24,7 @@
23
24
  color-scheme: dark;
24
25
  }
25
26
 
26
- :root[data-theme='light'] {
27
+ :root[data-theme="light"] {
27
28
  --hono-bg: #ffffff;
28
29
  --hono-bg-soft: #f7f7f8;
29
30
  --hono-panel: rgba(15, 23, 42, 0.04);
@@ -56,7 +57,11 @@ body {
56
57
  margin: 0;
57
58
  min-width: 320px;
58
59
  background:
59
- radial-gradient(circle at 70% 0, color-mix(in srgb, var(--hono-accent) 16%, transparent), transparent 24rem),
60
+ radial-gradient(
61
+ circle at 70% 0,
62
+ color-mix(in srgb, var(--hono-accent) 16%, transparent),
63
+ transparent 24rem
64
+ ),
60
65
  linear-gradient(180deg, var(--hono-bg-soft), var(--hono-bg) 22rem);
61
66
  color: var(--hono-text);
62
67
  font-family: var(--hono-font-sans);
@@ -240,8 +245,8 @@ a {
240
245
  color: var(--hono-text-strong);
241
246
  }
242
247
 
243
- :root[data-theme='light'] .hn-theme-toggle-sun,
244
- :root:not([data-theme='light']) .hn-theme-toggle-moon {
248
+ :root[data-theme="light"] .hn-theme-toggle-sun,
249
+ :root:not([data-theme="light"]) .hn-theme-toggle-moon {
245
250
  display: none;
246
251
  }
247
252
 
@@ -655,8 +660,8 @@ a {
655
660
  min-width: 100%;
656
661
  }
657
662
 
658
- :root:not([data-theme='light']) .hn-doc-content .shiki,
659
- :root:not([data-theme='light']) .hn-doc-content .shiki span {
663
+ :root:not([data-theme="light"]) .hn-doc-content .shiki,
664
+ :root:not([data-theme="light"]) .hn-doc-content .shiki span {
660
665
  color: var(--shiki-dark) !important;
661
666
  background-color: var(--shiki-dark-bg) !important;
662
667
  }
@@ -780,12 +785,24 @@ a {
780
785
  display: none;
781
786
  }
782
787
 
783
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(1):checked) .pp-code-group-block:nth-child(1),
784
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(2):checked) .pp-code-group-block:nth-child(2),
785
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(3):checked) .pp-code-group-block:nth-child(3),
786
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(4):checked) .pp-code-group-block:nth-child(4),
787
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(5):checked) .pp-code-group-block:nth-child(5),
788
- .hn-doc-content .pp-code-group:has(.pp-code-group-input:nth-of-type(6):checked) .pp-code-group-block:nth-child(6) {
788
+ .hn-doc-content
789
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(1):checked)
790
+ .pp-code-group-block:nth-child(1),
791
+ .hn-doc-content
792
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(2):checked)
793
+ .pp-code-group-block:nth-child(2),
794
+ .hn-doc-content
795
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(3):checked)
796
+ .pp-code-group-block:nth-child(3),
797
+ .hn-doc-content
798
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(4):checked)
799
+ .pp-code-group-block:nth-child(4),
800
+ .hn-doc-content
801
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(5):checked)
802
+ .pp-code-group-block:nth-child(5),
803
+ .hn-doc-content
804
+ .pp-code-group:has(.pp-code-group-input:nth-of-type(6):checked)
805
+ .pp-code-group-block:nth-child(6) {
789
806
  display: block;
790
807
  }
791
808
 
@@ -971,7 +988,7 @@ a {
971
988
  }
972
989
 
973
990
  .hn-sidebar-panel > summary::after {
974
- content: '';
991
+ content: "";
975
992
  color: var(--hono-muted);
976
993
  font-size: 0.85rem;
977
994
  transition: transform 0.15s ease;