@kamod-ch/preactpress 1.0.0

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 (546) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +165 -0
  3. package/assets/favicon-32.png +0 -0
  4. package/assets/favicon.png +0 -0
  5. package/assets/favicon.svg +28 -0
  6. package/assets/logo-dark.svg +5 -0
  7. package/assets/logo-light.svg +5 -0
  8. package/assets/logo.svg +5 -0
  9. package/bin/preactpress.mjs +13 -0
  10. package/dist/client/app.d.ts +6 -0
  11. package/dist/client/app.d.ts.map +1 -0
  12. package/dist/client/app.js +168 -0
  13. package/dist/client/app.js.map +1 -0
  14. package/dist/client/entry-client.d.ts +2 -0
  15. package/dist/client/entry-client.d.ts.map +1 -0
  16. package/dist/client/entry-client.js +27 -0
  17. package/dist/client/entry-client.js.map +1 -0
  18. package/dist/client/entry-ssr.d.ts +14 -0
  19. package/dist/client/entry-ssr.d.ts.map +1 -0
  20. package/dist/client/entry-ssr.js +59 -0
  21. package/dist/client/entry-ssr.js.map +1 -0
  22. package/dist/client/index.d.ts +3 -0
  23. package/dist/client/index.d.ts.map +1 -0
  24. package/dist/client/index.js +2 -0
  25. package/dist/client/index.js.map +1 -0
  26. package/dist/client/loadPage.d.ts +5 -0
  27. package/dist/client/loadPage.d.ts.map +1 -0
  28. package/dist/client/loadPage.js +62 -0
  29. package/dist/client/loadPage.js.map +1 -0
  30. package/dist/client/prefetchLinks.d.ts +2 -0
  31. package/dist/client/prefetchLinks.d.ts.map +1 -0
  32. package/dist/client/prefetchLinks.js +55 -0
  33. package/dist/client/prefetchLinks.js.map +1 -0
  34. package/dist/client/theme-default/AlgoliaSearch.d.ts +12 -0
  35. package/dist/client/theme-default/AlgoliaSearch.d.ts.map +1 -0
  36. package/dist/client/theme-default/AlgoliaSearch.js +66 -0
  37. package/dist/client/theme-default/AlgoliaSearch.js.map +1 -0
  38. package/dist/client/theme-default/Features.d.ts +9 -0
  39. package/dist/client/theme-default/Features.d.ts.map +1 -0
  40. package/dist/client/theme-default/Features.js +25 -0
  41. package/dist/client/theme-default/Features.js.map +1 -0
  42. package/dist/client/theme-default/Hero.d.ts +9 -0
  43. package/dist/client/theme-default/Hero.d.ts.map +1 -0
  44. package/dist/client/theme-default/Hero.js +23 -0
  45. package/dist/client/theme-default/Hero.js.map +1 -0
  46. package/dist/client/theme-default/Layout.d.ts +6 -0
  47. package/dist/client/theme-default/Layout.d.ts.map +1 -0
  48. package/dist/client/theme-default/Layout.js +224 -0
  49. package/dist/client/theme-default/Layout.js.map +1 -0
  50. package/dist/client/theme-default/Logo.d.ts +16 -0
  51. package/dist/client/theme-default/Logo.d.ts.map +1 -0
  52. package/dist/client/theme-default/Logo.js +30 -0
  53. package/dist/client/theme-default/Logo.js.map +1 -0
  54. package/dist/client/theme-default/NavLinks.d.ts +12 -0
  55. package/dist/client/theme-default/NavLinks.d.ts.map +1 -0
  56. package/dist/client/theme-default/NavLinks.js +18 -0
  57. package/dist/client/theme-default/NavLinks.js.map +1 -0
  58. package/dist/client/theme-default/SidebarNav.d.ts +12 -0
  59. package/dist/client/theme-default/SidebarNav.d.ts.map +1 -0
  60. package/dist/client/theme-default/SidebarNav.js +21 -0
  61. package/dist/client/theme-default/SidebarNav.js.map +1 -0
  62. package/dist/client/theme-default/SocialLinks.d.ts +8 -0
  63. package/dist/client/theme-default/SocialLinks.d.ts.map +1 -0
  64. package/dist/client/theme-default/SocialLinks.js +13 -0
  65. package/dist/client/theme-default/SocialLinks.js.map +1 -0
  66. package/dist/client/theme-default/ThemeToggle.d.ts +4 -0
  67. package/dist/client/theme-default/ThemeToggle.d.ts.map +1 -0
  68. package/dist/client/theme-default/ThemeToggle.js +31 -0
  69. package/dist/client/theme-default/ThemeToggle.js.map +1 -0
  70. package/dist/client/theme-default/index.d.ts +2 -0
  71. package/dist/client/theme-default/index.d.ts.map +1 -0
  72. package/dist/client/theme-default/index.js +2 -0
  73. package/dist/client/theme-default/index.js.map +1 -0
  74. package/dist/client/types.d.ts +36 -0
  75. package/dist/client/types.d.ts.map +1 -0
  76. package/dist/client/types.js +2 -0
  77. package/dist/client/types.js.map +1 -0
  78. package/dist/client/usePageHead.d.ts +10 -0
  79. package/dist/client/usePageHead.d.ts.map +1 -0
  80. package/dist/client/usePageHead.js +182 -0
  81. package/dist/client/usePageHead.js.map +1 -0
  82. package/dist/client/useSiteSearch.d.ts +10 -0
  83. package/dist/client/useSiteSearch.d.ts.map +1 -0
  84. package/dist/client/useSiteSearch.js +54 -0
  85. package/dist/client/useSiteSearch.js.map +1 -0
  86. package/dist/node/build.d.ts +15 -0
  87. package/dist/node/build.d.ts.map +1 -0
  88. package/dist/node/build.js +310 -0
  89. package/dist/node/build.js.map +1 -0
  90. package/dist/node/buildCache.d.ts +15 -0
  91. package/dist/node/buildCache.d.ts.map +1 -0
  92. package/dist/node/buildCache.js +41 -0
  93. package/dist/node/buildCache.js.map +1 -0
  94. package/dist/node/check.d.ts +11 -0
  95. package/dist/node/check.d.ts.map +1 -0
  96. package/dist/node/check.js +228 -0
  97. package/dist/node/check.js.map +1 -0
  98. package/dist/node/cli.d.ts +2 -0
  99. package/dist/node/cli.d.ts.map +1 -0
  100. package/dist/node/cli.js +157 -0
  101. package/dist/node/cli.js.map +1 -0
  102. package/dist/node/config-helpers.d.ts +8 -0
  103. package/dist/node/config-helpers.d.ts.map +1 -0
  104. package/dist/node/config-helpers.js +5 -0
  105. package/dist/node/config-helpers.js.map +1 -0
  106. package/dist/node/config.d.ts +13 -0
  107. package/dist/node/config.d.ts.map +1 -0
  108. package/dist/node/config.js +167 -0
  109. package/dist/node/config.js.map +1 -0
  110. package/dist/node/content.d.ts +16 -0
  111. package/dist/node/content.d.ts.map +1 -0
  112. package/dist/node/content.js +72 -0
  113. package/dist/node/content.js.map +1 -0
  114. package/dist/node/createContentLoader.d.ts +19 -0
  115. package/dist/node/createContentLoader.d.ts.map +1 -0
  116. package/dist/node/createContentLoader.js +11 -0
  117. package/dist/node/createContentLoader.js.map +1 -0
  118. package/dist/node/devCss.d.ts +7 -0
  119. package/dist/node/devCss.d.ts.map +1 -0
  120. package/dist/node/devCss.js +70 -0
  121. package/dist/node/devCss.js.map +1 -0
  122. package/dist/node/devSsr.d.ts +6 -0
  123. package/dist/node/devSsr.d.ts.map +1 -0
  124. package/dist/node/devSsr.js +112 -0
  125. package/dist/node/devSsr.js.map +1 -0
  126. package/dist/node/dynamicRoutes.d.ts +21 -0
  127. package/dist/node/dynamicRoutes.d.ts.map +1 -0
  128. package/dist/node/dynamicRoutes.js +120 -0
  129. package/dist/node/dynamicRoutes.js.map +1 -0
  130. package/dist/node/favicon.d.ts +9 -0
  131. package/dist/node/favicon.d.ts.map +1 -0
  132. package/dist/node/favicon.js +71 -0
  133. package/dist/node/favicon.js.map +1 -0
  134. package/dist/node/feed.d.ts +7 -0
  135. package/dist/node/feed.d.ts.map +1 -0
  136. package/dist/node/feed.js +37 -0
  137. package/dist/node/feed.js.map +1 -0
  138. package/dist/node/hooks.d.ts +9 -0
  139. package/dist/node/hooks.d.ts.map +1 -0
  140. package/dist/node/hooks.js +20 -0
  141. package/dist/node/hooks.js.map +1 -0
  142. package/dist/node/html.d.ts +56 -0
  143. package/dist/node/html.d.ts.map +1 -0
  144. package/dist/node/html.js +222 -0
  145. package/dist/node/html.js.map +1 -0
  146. package/dist/node/index.d.ts +12 -0
  147. package/dist/node/index.d.ts.map +1 -0
  148. package/dist/node/index.js +9 -0
  149. package/dist/node/index.js.map +1 -0
  150. package/dist/node/init.d.ts +12 -0
  151. package/dist/node/init.d.ts.map +1 -0
  152. package/dist/node/init.js +93 -0
  153. package/dist/node/init.js.map +1 -0
  154. package/dist/node/lastUpdated.d.ts +3 -0
  155. package/dist/node/lastUpdated.d.ts.map +1 -0
  156. package/dist/node/lastUpdated.js +24 -0
  157. package/dist/node/lastUpdated.js.map +1 -0
  158. package/dist/node/loadSiteModule.d.ts +2 -0
  159. package/dist/node/loadSiteModule.d.ts.map +1 -0
  160. package/dist/node/loadSiteModule.js +10 -0
  161. package/dist/node/loadSiteModule.js.map +1 -0
  162. package/dist/node/markdown.d.ts +31 -0
  163. package/dist/node/markdown.d.ts.map +1 -0
  164. package/dist/node/markdown.js +508 -0
  165. package/dist/node/markdown.js.map +1 -0
  166. package/dist/node/markdownHeadings.d.ts +12 -0
  167. package/dist/node/markdownHeadings.d.ts.map +1 -0
  168. package/dist/node/markdownHeadings.js +70 -0
  169. package/dist/node/markdownHeadings.js.map +1 -0
  170. package/dist/node/markdownInclude.d.ts +6 -0
  171. package/dist/node/markdownInclude.d.ts.map +1 -0
  172. package/dist/node/markdownInclude.js +74 -0
  173. package/dist/node/markdownInclude.js.map +1 -0
  174. package/dist/node/markdownSnippets.d.ts +32 -0
  175. package/dist/node/markdownSnippets.d.ts.map +1 -0
  176. package/dist/node/markdownSnippets.js +172 -0
  177. package/dist/node/markdownSnippets.js.map +1 -0
  178. package/dist/node/mdx.d.ts +3 -0
  179. package/dist/node/mdx.d.ts.map +1 -0
  180. package/dist/node/mdx.js +9 -0
  181. package/dist/node/mdx.js.map +1 -0
  182. package/dist/node/packageRoot.d.ts +4 -0
  183. package/dist/node/packageRoot.d.ts.map +1 -0
  184. package/dist/node/packageRoot.js +7 -0
  185. package/dist/node/packageRoot.js.map +1 -0
  186. package/dist/node/pageDataLoaders.d.ts +6 -0
  187. package/dist/node/pageDataLoaders.d.ts.map +1 -0
  188. package/dist/node/pageDataLoaders.js +68 -0
  189. package/dist/node/pageDataLoaders.js.map +1 -0
  190. package/dist/node/paths.d.ts +5 -0
  191. package/dist/node/paths.d.ts.map +1 -0
  192. package/dist/node/paths.js +12 -0
  193. package/dist/node/paths.js.map +1 -0
  194. package/dist/node/plugin.d.ts +7 -0
  195. package/dist/node/plugin.d.ts.map +1 -0
  196. package/dist/node/plugin.js +282 -0
  197. package/dist/node/plugin.js.map +1 -0
  198. package/dist/node/resolveDeps.d.ts +5 -0
  199. package/dist/node/resolveDeps.d.ts.map +1 -0
  200. package/dist/node/resolveDeps.js +25 -0
  201. package/dist/node/resolveDeps.js.map +1 -0
  202. package/dist/node/serve.d.ts +6 -0
  203. package/dist/node/serve.d.ts.map +1 -0
  204. package/dist/node/serve.js +41 -0
  205. package/dist/node/serve.js.map +1 -0
  206. package/dist/node/server.d.ts +7 -0
  207. package/dist/node/server.d.ts.map +1 -0
  208. package/dist/node/server.js +55 -0
  209. package/dist/node/server.js.map +1 -0
  210. package/dist/node/siteConfig.d.ts +206 -0
  211. package/dist/node/siteConfig.d.ts.map +1 -0
  212. package/dist/node/siteConfig.js +2 -0
  213. package/dist/node/siteConfig.js.map +1 -0
  214. package/dist/node/tagIndex.d.ts +27 -0
  215. package/dist/node/tagIndex.d.ts.map +1 -0
  216. package/dist/node/tagIndex.js +84 -0
  217. package/dist/node/tagIndex.js.map +1 -0
  218. package/dist/shared/contentChunk.d.ts +4 -0
  219. package/dist/shared/contentChunk.d.ts.map +1 -0
  220. package/dist/shared/contentChunk.js +14 -0
  221. package/dist/shared/contentChunk.js.map +1 -0
  222. package/dist/shared/contentSchema.d.ts +43 -0
  223. package/dist/shared/contentSchema.d.ts.map +1 -0
  224. package/dist/shared/contentSchema.js +44 -0
  225. package/dist/shared/contentSchema.js.map +1 -0
  226. package/dist/shared/deadLinks.d.ts +9 -0
  227. package/dist/shared/deadLinks.d.ts.map +1 -0
  228. package/dist/shared/deadLinks.js +27 -0
  229. package/dist/shared/deadLinks.js.map +1 -0
  230. package/dist/shared/escapeHtml.d.ts +3 -0
  231. package/dist/shared/escapeHtml.d.ts.map +1 -0
  232. package/dist/shared/escapeHtml.js +11 -0
  233. package/dist/shared/escapeHtml.js.map +1 -0
  234. package/dist/shared/index.d.ts +15 -0
  235. package/dist/shared/index.d.ts.map +1 -0
  236. package/dist/shared/index.js +15 -0
  237. package/dist/shared/index.js.map +1 -0
  238. package/dist/shared/locale.d.ts +11 -0
  239. package/dist/shared/locale.d.ts.map +1 -0
  240. package/dist/shared/locale.js +84 -0
  241. package/dist/shared/locale.js.map +1 -0
  242. package/dist/shared/pageChrome.d.ts +80 -0
  243. package/dist/shared/pageChrome.d.ts.map +1 -0
  244. package/dist/shared/pageChrome.js +160 -0
  245. package/dist/shared/pageChrome.js.map +1 -0
  246. package/dist/shared/pageHead.d.ts +3 -0
  247. package/dist/shared/pageHead.d.ts.map +1 -0
  248. package/dist/shared/pageHead.js +28 -0
  249. package/dist/shared/pageHead.js.map +1 -0
  250. package/dist/shared/pageMeta.d.ts +60 -0
  251. package/dist/shared/pageMeta.d.ts.map +1 -0
  252. package/dist/shared/pageMeta.js +72 -0
  253. package/dist/shared/pageMeta.js.map +1 -0
  254. package/dist/shared/rewrites.d.ts +5 -0
  255. package/dist/shared/rewrites.d.ts.map +1 -0
  256. package/dist/shared/rewrites.js +23 -0
  257. package/dist/shared/rewrites.js.map +1 -0
  258. package/dist/shared/route.d.ts +5 -0
  259. package/dist/shared/route.d.ts.map +1 -0
  260. package/dist/shared/route.js +15 -0
  261. package/dist/shared/route.js.map +1 -0
  262. package/dist/shared/search.d.ts +39 -0
  263. package/dist/shared/search.d.ts.map +1 -0
  264. package/dist/shared/search.js +63 -0
  265. package/dist/shared/search.js.map +1 -0
  266. package/dist/shared/sidebar.d.ts +18 -0
  267. package/dist/shared/sidebar.d.ts.map +1 -0
  268. package/dist/shared/sidebar.js +51 -0
  269. package/dist/shared/sidebar.js.map +1 -0
  270. package/dist/shared/slug.d.ts +4 -0
  271. package/dist/shared/slug.d.ts.map +1 -0
  272. package/dist/shared/slug.js +21 -0
  273. package/dist/shared/slug.js.map +1 -0
  274. package/dist/shared/socialIcons.d.ts +13 -0
  275. package/dist/shared/socialIcons.d.ts.map +1 -0
  276. package/dist/shared/socialIcons.js +27 -0
  277. package/dist/shared/socialIcons.js.map +1 -0
  278. package/dist/shared/tags.d.ts +6 -0
  279. package/dist/shared/tags.d.ts.map +1 -0
  280. package/dist/shared/tags.js +39 -0
  281. package/dist/shared/tags.js.map +1 -0
  282. package/dist/shared/theme.d.ts +8 -0
  283. package/dist/shared/theme.d.ts.map +1 -0
  284. package/dist/shared/theme.js +25 -0
  285. package/dist/shared/theme.js.map +1 -0
  286. package/dist/shared/themeLabels.d.ts +18 -0
  287. package/dist/shared/themeLabels.d.ts.map +1 -0
  288. package/dist/shared/themeLabels.js +51 -0
  289. package/dist/shared/themeLabels.js.map +1 -0
  290. package/dist/shared/url.d.ts +7 -0
  291. package/dist/shared/url.d.ts.map +1 -0
  292. package/dist/shared/url.js +10 -0
  293. package/dist/shared/url.js.map +1 -0
  294. package/package.json +108 -0
  295. package/src/client/app.tsx +194 -0
  296. package/src/client/entry-client.tsx +27 -0
  297. package/src/client/entry-ssr.tsx +77 -0
  298. package/src/client/index.ts +2 -0
  299. package/src/client/loadPage.ts +68 -0
  300. package/src/client/prefetchLinks.ts +60 -0
  301. package/src/client/theme-default/AlgoliaSearch.tsx +89 -0
  302. package/src/client/theme-default/Features.tsx +75 -0
  303. package/src/client/theme-default/Hero.tsx +60 -0
  304. package/src/client/theme-default/Layout.tsx +525 -0
  305. package/src/client/theme-default/Logo.tsx +104 -0
  306. package/src/client/theme-default/NavLinks.tsx +65 -0
  307. package/src/client/theme-default/SidebarNav.tsx +103 -0
  308. package/src/client/theme-default/SocialLinks.tsx +41 -0
  309. package/src/client/theme-default/ThemeToggle.tsx +79 -0
  310. package/src/client/theme-default/index.ts +1 -0
  311. package/src/client/theme-default/styles.css +1450 -0
  312. package/src/client/types.ts +37 -0
  313. package/src/client/usePageHead.ts +212 -0
  314. package/src/client/useSiteSearch.ts +57 -0
  315. package/src/client/virtual.d.ts +103 -0
  316. package/src/shared/contentChunk.ts +14 -0
  317. package/src/shared/contentSchema.ts +85 -0
  318. package/src/shared/deadLinks.ts +33 -0
  319. package/src/shared/escapeHtml.ts +11 -0
  320. package/src/shared/index.ts +83 -0
  321. package/src/shared/locale.ts +116 -0
  322. package/src/shared/pageChrome.ts +244 -0
  323. package/src/shared/pageHead.ts +26 -0
  324. package/src/shared/pageMeta.ts +136 -0
  325. package/src/shared/rewrites.ts +35 -0
  326. package/src/shared/route.ts +14 -0
  327. package/src/shared/search.ts +105 -0
  328. package/src/shared/sidebar.ts +67 -0
  329. package/src/shared/slug.ts +23 -0
  330. package/src/shared/socialIcons.ts +44 -0
  331. package/src/shared/tags.ts +36 -0
  332. package/src/shared/theme.ts +26 -0
  333. package/src/shared/themeLabels.ts +72 -0
  334. package/src/shared/url.ts +14 -0
  335. package/templates/default/.preactpress/config.ts +31 -0
  336. package/templates/default/README.md +45 -0
  337. package/templates/default/about.md +11 -0
  338. package/templates/default/guide/first-five-minutes.md +83 -0
  339. package/templates/default/index.html +18 -0
  340. package/templates/default/index.md +55 -0
  341. package/templates/default/package.json +15 -0
  342. package/templates/default/pnpm-lock.yaml +2917 -0
  343. package/templates/docs/.preactpress/config.ts +94 -0
  344. package/templates/docs/README.md +21 -0
  345. package/templates/docs/about.md +10 -0
  346. package/templates/docs/components/Counter.tsx +25 -0
  347. package/templates/docs/de/guide/getting-started.md +19 -0
  348. package/templates/docs/de/guide/what-is-preactpress.md +15 -0
  349. package/templates/docs/de/index.md +23 -0
  350. package/templates/docs/dist/404.html +29 -0
  351. package/templates/docs/dist/about/index.html +32 -0
  352. package/templates/docs/dist/assets/esm-DzlBxN5p.js +110 -0
  353. package/templates/docs/dist/assets/interactive-64o6YwrR.js +9 -0
  354. package/templates/docs/dist/assets/interactive-BedCloEw.js +9 -0
  355. package/templates/docs/dist/assets/main-BVLeh8GO.js +1 -0
  356. package/templates/docs/dist/assets/main-CreUBb3N.js +1 -0
  357. package/templates/docs/dist/assets/main-oodK-zZy.css +2 -0
  358. package/templates/docs/dist/de/guide/getting-started/index.html +36 -0
  359. package/templates/docs/dist/de/guide/what-is-preactpress/index.html +38 -0
  360. package/templates/docs/dist/de/index.html +29 -0
  361. package/templates/docs/dist/favicon-32.png +0 -0
  362. package/templates/docs/dist/favicon.png +0 -0
  363. package/templates/docs/dist/favicon.svg +28 -0
  364. package/templates/docs/dist/guide/advanced/index.html +53 -0
  365. package/templates/docs/dist/guide/commands/index.html +89 -0
  366. package/templates/docs/dist/guide/configuration/index.html +196 -0
  367. package/templates/docs/dist/guide/creating-pages/index.html +234 -0
  368. package/templates/docs/dist/guide/custom-themes/index.html +52 -0
  369. package/templates/docs/dist/guide/default-theme/index.html +53 -0
  370. package/templates/docs/dist/guide/deploy/index.html +195 -0
  371. package/templates/docs/dist/guide/first-five-minutes/index.html +99 -0
  372. package/templates/docs/dist/guide/getting-started/index.html +173 -0
  373. package/templates/docs/dist/guide/markdown-and-mdx/index.html +59 -0
  374. package/templates/docs/dist/guide/routing/index.html +192 -0
  375. package/templates/docs/dist/guide/what-is-preactpress/index.html +141 -0
  376. package/templates/docs/dist/index.html +30 -0
  377. package/templates/docs/dist/interactive/index.html +37 -0
  378. package/templates/docs/dist/markdown-examples/index.html +231 -0
  379. package/templates/docs/dist/preactpress-content/404.json +8 -0
  380. package/templates/docs/dist/preactpress-content/_index.json +50 -0
  381. package/templates/docs/dist/preactpress-content/about.json +15 -0
  382. package/templates/docs/dist/preactpress-content/de.json +45 -0
  383. package/templates/docs/dist/preactpress-content/de__guide__getting-started.json +26 -0
  384. package/templates/docs/dist/preactpress-content/de__guide__what-is-preactpress.json +21 -0
  385. package/templates/docs/dist/preactpress-content/guide__advanced.json +46 -0
  386. package/templates/docs/dist/preactpress-content/guide__commands.json +26 -0
  387. package/templates/docs/dist/preactpress-content/guide__configuration.json +51 -0
  388. package/templates/docs/dist/preactpress-content/guide__creating-pages.json +71 -0
  389. package/templates/docs/dist/preactpress-content/guide__custom-themes.json +15 -0
  390. package/templates/docs/dist/preactpress-content/guide__default-theme.json +36 -0
  391. package/templates/docs/dist/preactpress-content/guide__deploy.json +56 -0
  392. package/templates/docs/dist/preactpress-content/guide__first-five-minutes.json +36 -0
  393. package/templates/docs/dist/preactpress-content/guide__getting-started.json +51 -0
  394. package/templates/docs/dist/preactpress-content/guide__markdown-and-mdx.json +31 -0
  395. package/templates/docs/dist/preactpress-content/guide__routing.json +71 -0
  396. package/templates/docs/dist/preactpress-content/guide__what-is-preactpress.json +51 -0
  397. package/templates/docs/dist/preactpress-content/markdown-examples.json +71 -0
  398. package/templates/docs/dist/preactpress-content/tags__markdown.json +16 -0
  399. package/templates/docs/dist/preactpress-search.json +166 -0
  400. package/templates/docs/dist/preactpress-theme.js +1 -0
  401. package/templates/docs/dist/tags/markdown/index.html +32 -0
  402. package/templates/docs/guide/advanced.md +44 -0
  403. package/templates/docs/guide/commands.md +41 -0
  404. package/templates/docs/guide/configuration.md +130 -0
  405. package/templates/docs/guide/creating-pages.md +171 -0
  406. package/templates/docs/guide/custom-themes.md +39 -0
  407. package/templates/docs/guide/default-theme.md +41 -0
  408. package/templates/docs/guide/deploy.md +197 -0
  409. package/templates/docs/guide/first-five-minutes.md +82 -0
  410. package/templates/docs/guide/getting-started.md +146 -0
  411. package/templates/docs/guide/markdown-and-mdx.md +59 -0
  412. package/templates/docs/guide/routing.md +263 -0
  413. package/templates/docs/guide/what-is-preactpress.md +87 -0
  414. package/templates/docs/index.html +18 -0
  415. package/templates/docs/index.md +28 -0
  416. package/templates/docs/interactive.mdx +32 -0
  417. package/templates/docs/markdown-examples.md +72 -0
  418. package/templates/docs/package.json +15 -0
  419. package/templates/docs/partials/shared-note.md +3 -0
  420. package/templates/docs/parts/include-body.md +9 -0
  421. package/templates/docs/pnpm-lock.yaml +2917 -0
  422. package/templates/docs/snippets/greet.ts +3 -0
  423. package/templates/hono/.preactpress/config.ts +100 -0
  424. package/templates/hono/.preactpress/theme/CodeSnippet.tsx +41 -0
  425. package/templates/hono/.preactpress/theme/FeatureGrid.tsx +27 -0
  426. package/templates/hono/.preactpress/theme/Hero.tsx +45 -0
  427. package/templates/hono/.preactpress/theme/Layout.tsx +388 -0
  428. package/templates/hono/.preactpress/theme/Logo.tsx +26 -0
  429. package/templates/hono/.preactpress/theme/ThemeToggle.tsx +72 -0
  430. package/templates/hono/.preactpress/theme/hono.css +1058 -0
  431. package/templates/hono/README.md +41 -0
  432. package/templates/hono/about.md +10 -0
  433. package/templates/hono/components/Counter.tsx +25 -0
  434. package/templates/hono/de/about.md +10 -0
  435. package/templates/hono/de/guide/commands.md +44 -0
  436. package/templates/hono/de/guide/configuration.md +64 -0
  437. package/templates/hono/de/guide/deploy.md +197 -0
  438. package/templates/hono/de/guide/first-five-minutes.md +82 -0
  439. package/templates/hono/de/guide/getting-started.md +146 -0
  440. package/templates/hono/de/guide/routing.md +220 -0
  441. package/templates/hono/de/guide/seiten-erstellen.md +171 -0
  442. package/templates/hono/de/guide/what-is-preactpress.md +87 -0
  443. package/templates/hono/de/index.mdx +51 -0
  444. package/templates/hono/de/interactive.mdx +32 -0
  445. package/templates/hono/de/markdown-examples.md +142 -0
  446. package/templates/hono/de/parts/include-body.md +9 -0
  447. package/templates/hono/de/snippets/greet.ts +3 -0
  448. package/templates/hono/dist/404.html +29 -0
  449. package/templates/hono/dist/README/index.html +104 -0
  450. package/templates/hono/dist/about/index.html +32 -0
  451. package/templates/hono/dist/assets/Counter-CCEByS-J.js +1 -0
  452. package/templates/hono/dist/assets/Hero--o6WMNvm.js +2 -0
  453. package/templates/hono/dist/assets/de-D5r6Ye70.js +10 -0
  454. package/templates/hono/dist/assets/hono-BXWYYdyv.js +10 -0
  455. package/templates/hono/dist/assets/interactive-Bxo-WBpC.js +9 -0
  456. package/templates/hono/dist/assets/interactive-BznI4IQ3.js +9 -0
  457. package/templates/hono/dist/assets/main-Bqi-VFEk.js +2 -0
  458. package/templates/hono/dist/assets/main-DIIN7FO0.css +1 -0
  459. package/templates/hono/dist/de/about/index.html +32 -0
  460. package/templates/hono/dist/de/guide/commands/index.html +41 -0
  461. package/templates/hono/dist/de/guide/configuration/index.html +105 -0
  462. package/templates/hono/dist/de/guide/deploy/index.html +195 -0
  463. package/templates/hono/dist/de/guide/first-five-minutes/index.html +99 -0
  464. package/templates/hono/dist/de/guide/getting-started/index.html +173 -0
  465. package/templates/hono/dist/de/guide/routing/index.html +165 -0
  466. package/templates/hono/dist/de/guide/seiten-erstellen/index.html +234 -0
  467. package/templates/hono/dist/de/guide/what-is-preactpress/index.html +141 -0
  468. package/templates/hono/dist/de/index.html +30 -0
  469. package/templates/hono/dist/de/interactive/index.html +37 -0
  470. package/templates/hono/dist/de/markdown-examples/index.html +97 -0
  471. package/templates/hono/dist/de/parts/include-body/index.html +36 -0
  472. package/templates/hono/dist/de/tags/markdown/index.html +32 -0
  473. package/templates/hono/dist/favicon-32.png +0 -0
  474. package/templates/hono/dist/favicon.png +0 -0
  475. package/templates/hono/dist/favicon.svg +28 -0
  476. package/templates/hono/dist/guide/commands/index.html +41 -0
  477. package/templates/hono/dist/guide/configuration/index.html +158 -0
  478. package/templates/hono/dist/guide/creating-pages/index.html +234 -0
  479. package/templates/hono/dist/guide/deploy/index.html +195 -0
  480. package/templates/hono/dist/guide/first-five-minutes/index.html +99 -0
  481. package/templates/hono/dist/guide/getting-started/index.html +173 -0
  482. package/templates/hono/dist/guide/routing/index.html +165 -0
  483. package/templates/hono/dist/guide/what-is-preactpress/index.html +141 -0
  484. package/templates/hono/dist/index.html +30 -0
  485. package/templates/hono/dist/interactive/index.html +37 -0
  486. package/templates/hono/dist/markdown-examples/index.html +105 -0
  487. package/templates/hono/dist/partials/shared-note/index.html +30 -0
  488. package/templates/hono/dist/parts/include-body/index.html +36 -0
  489. package/templates/hono/dist/preactpress-content/404.json +8 -0
  490. package/templates/hono/dist/preactpress-content/README.json +26 -0
  491. package/templates/hono/dist/preactpress-content/about.json +15 -0
  492. package/templates/hono/dist/preactpress-content/de__about.json +15 -0
  493. package/templates/hono/dist/preactpress-content/de__guide__commands.json +36 -0
  494. package/templates/hono/dist/preactpress-content/de__guide__configuration.json +41 -0
  495. package/templates/hono/dist/preactpress-content/de__guide__deploy.json +56 -0
  496. package/templates/hono/dist/preactpress-content/de__guide__first-five-minutes.json +36 -0
  497. package/templates/hono/dist/preactpress-content/de__guide__getting-started.json +51 -0
  498. package/templates/hono/dist/preactpress-content/de__guide__routing.json +61 -0
  499. package/templates/hono/dist/preactpress-content/de__guide__seiten-erstellen.json +71 -0
  500. package/templates/hono/dist/preactpress-content/de__guide__what-is-preactpress.json +51 -0
  501. package/templates/hono/dist/preactpress-content/de__markdown-examples.json +131 -0
  502. package/templates/hono/dist/preactpress-content/de__parts__include-body.json +16 -0
  503. package/templates/hono/dist/preactpress-content/de__tags__markdown.json +16 -0
  504. package/templates/hono/dist/preactpress-content/guide__commands.json +36 -0
  505. package/templates/hono/dist/preactpress-content/guide__configuration.json +51 -0
  506. package/templates/hono/dist/preactpress-content/guide__creating-pages.json +71 -0
  507. package/templates/hono/dist/preactpress-content/guide__deploy.json +56 -0
  508. package/templates/hono/dist/preactpress-content/guide__first-five-minutes.json +36 -0
  509. package/templates/hono/dist/preactpress-content/guide__getting-started.json +51 -0
  510. package/templates/hono/dist/preactpress-content/guide__routing.json +61 -0
  511. package/templates/hono/dist/preactpress-content/guide__what-is-preactpress.json +51 -0
  512. package/templates/hono/dist/preactpress-content/markdown-examples.json +141 -0
  513. package/templates/hono/dist/preactpress-content/partials__shared-note.json +10 -0
  514. package/templates/hono/dist/preactpress-content/parts__include-body.json +16 -0
  515. package/templates/hono/dist/preactpress-content/tags__markdown.json +16 -0
  516. package/templates/hono/dist/preactpress-search.json +242 -0
  517. package/templates/hono/dist/preactpress-theme.js +1 -0
  518. package/templates/hono/dist/tags/markdown/index.html +32 -0
  519. package/templates/hono/guide/commands.md +44 -0
  520. package/templates/hono/guide/configuration.md +177 -0
  521. package/templates/hono/guide/creating-pages.md +171 -0
  522. package/templates/hono/guide/deploy.md +197 -0
  523. package/templates/hono/guide/first-five-minutes.md +82 -0
  524. package/templates/hono/guide/getting-started.md +146 -0
  525. package/templates/hono/guide/routing.md +263 -0
  526. package/templates/hono/guide/what-is-preactpress.md +87 -0
  527. package/templates/hono/index.html +18 -0
  528. package/templates/hono/index.mdx +51 -0
  529. package/templates/hono/interactive.mdx +32 -0
  530. package/templates/hono/markdown-examples.md +160 -0
  531. package/templates/hono/package.json +15 -0
  532. package/templates/hono/partials/shared-note.md +3 -0
  533. package/templates/hono/parts/include-body.md +9 -0
  534. package/templates/hono/pnpm-lock.yaml +2917 -0
  535. package/templates/hono/snippets/greet.ts +3 -0
  536. package/templates/magazine/.preactpress/config.ts +36 -0
  537. package/templates/magazine/.preactpress/theme/Layout.tsx +319 -0
  538. package/templates/magazine/.preactpress/theme/TeaserGrid.tsx +39 -0
  539. package/templates/magazine/.preactpress/theme/ThemeToggle.tsx +73 -0
  540. package/templates/magazine/.preactpress/theme/magazine.css +587 -0
  541. package/templates/magazine/article-markets.md +24 -0
  542. package/templates/magazine/article-tech.mdx +35 -0
  543. package/templates/magazine/index.data.ts +19 -0
  544. package/templates/magazine/index.html +14 -0
  545. package/templates/magazine/index.mdx +13 -0
  546. package/templates/magazine/package.json +15 -0
@@ -0,0 +1,31 @@
1
+ {
2
+ "kind": "markdown",
3
+ "meta": {
4
+ "title": "Markdown and MDX",
5
+ "description": "Author static Markdown pages and interactive MDX pages."
6
+ },
7
+ "html": "<p>Use <code>.md</code> for content that does not need browser-side components. Use <code>.mdx</code> when a page imports and renders Preact components.</p>\n<h2 id=\"markdown\" class=\"pp-heading\">Markdown<a class=\"pp-heading-anchor\" href=\"#markdown\" aria-label=\"Link to this section\">#</a></h2>\n<p>Markdown pages support frontmatter, heading anchors, syntax highlighting, tables, containers, GFM alerts, code groups, file includes, snippet imports, emoji, optional MathJax, and <code>[[toc]]</code>.</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">---</span></span>\n<span class=\"line\"><span style=\"color:#22863A;--shiki-dark:#85E89D\">title</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">API guide</span></span>\n<span class=\"line\"><span style=\"color:#22863A;--shiki-dark:#85E89D\">description</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">Integrate the API</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">---</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\">## Authentication</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">::: warning</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">Never commit production credentials.</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">:::</span></span></code></pre><p>Raw HTML is disabled by default. Enable <code>markdown.html</code> only when every author is trusted.</p>\n<h2 id=\"mdx\" class=\"pp-heading\">MDX<a class=\"pp-heading-anchor\" href=\"#mdx\" aria-label=\"Link to this section\">#</a></h2>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">---</span></span>\n<span class=\"line\"><span style=\"color:#22863A;--shiki-dark:#85E89D\">title</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">Counter demo</span></span>\n<span class=\"line\"><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">---</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> Counter </span><span style=\"color:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> './components/Counter.tsx'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\">## Demo</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">Counter</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> initial</span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">{</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">3</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">} /></span></span></code></pre><p>MDX pages hydrate in the browser. Regular Markdown payloads are loaded as HTML, which keeps larger documentation sites from bundling every page body into JavaScript.</p>\n<h2 id=\"reusing-content\" class=\"pp-heading\">Reusing content<a class=\"pp-heading-anchor\" href=\"#reusing-content\" aria-label=\"Link to this section\">#</a></h2>\n<p>Import a source snippet relative to <code>srcDir</code>:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;&#x3C;&#x3C; @/snippets/example.ts{2,4}</span></span></code></pre><p>Include a Markdown fragment:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">::: tip Shared fragment</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">This note is pulled in via </span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">`&#x3C;!-- include cycle detected: /home/watzak/master/kamod/preactpress/templates/docs/partials/shared-note.md -->`</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">.</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">:::</span></span></code></pre><p>Exclude fragments from routing with <code>srcExclude</code>.</p>\n<p>See <a href=\"/markdown-examples\">Markdown examples</a> for rendered examples.</p>\n",
8
+ "title": "Markdown and MDX",
9
+ "description": "Author static Markdown pages and interactive MDX pages.",
10
+ "tags": [],
11
+ "pageType": "website",
12
+ "headings": [
13
+ {
14
+ "id": "markdown",
15
+ "text": "Markdown",
16
+ "level": 2
17
+ },
18
+ {
19
+ "id": "mdx",
20
+ "text": "MDX",
21
+ "level": 2
22
+ },
23
+ {
24
+ "id": "reusing-content",
25
+ "text": "Reusing content",
26
+ "level": 2
27
+ }
28
+ ],
29
+ "relativePath": "guide/markdown-and-mdx.md",
30
+ "lastUpdated": "2026-06-08T15:16:59.429Z"
31
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "kind": "markdown",
3
+ "meta": {
4
+ "title": "Routing",
5
+ "description": "Understand how PreactPress maps files to URLs"
6
+ },
7
+ "html": "<h1 id=\"routing\" class=\"pp-heading\">Routing<a class=\"pp-heading-anchor\" href=\"#routing\" aria-label=\"Link to this section\">#</a></h1>\n<p>PreactPress uses file-based routing. Every <code>.md</code> and <code>.mdx</code> file under <code>srcDir</code> becomes a route, and production builds write each route as static HTML.</p>\n<h2 id=\"file-based-routing\" class=\"pp-heading\">File-based routing<a class=\"pp-heading-anchor\" href=\"#file-based-routing\" aria-label=\"Link to this section\">#</a></h2>\n<p>Given this structure:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>.</span></span>\n<span class=\"line\"><span>├── index.md</span></span>\n<span class=\"line\"><span>├── about.md</span></span>\n<span class=\"line\"><span>├── guide/</span></span>\n<span class=\"line\"><span>│ ├── index.md</span></span>\n<span class=\"line\"><span>│ └── getting-started.md</span></span>\n<span class=\"line\"><span>└── interactive.mdx</span></span></code></pre><p>PreactPress creates these routes:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>index.md -> /</span></span>\n<span class=\"line\"><span>about.md -> /about</span></span>\n<span class=\"line\"><span>guide/index.md -> /guide</span></span>\n<span class=\"line\"><span>guide/getting-started.md -> /guide/getting-started</span></span>\n<span class=\"line\"><span>interactive.mdx -> /interactive</span></span></code></pre><p>During production builds, routes are written as directory indexes:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>/ -> dist/index.html</span></span>\n<span class=\"line\"><span>/about -> dist/about/index.html</span></span>\n<span class=\"line\"><span>/guide/getting-started -> dist/guide/getting-started/index.html</span></span></code></pre><p>By default (<code>cleanUrls: true</code>), builds emit directory indexes so hosts can serve extensionless URLs.</p>\n<h2 id=\"project-root-and-source-directory\" class=\"pp-heading\">Project root and source directory<a class=\"pp-heading-anchor\" href=\"#project-root-and-source-directory\" aria-label=\"Link to this section\">#</a></h2>\n<p>The project root is where PreactPress looks for <code>.preactpress/config.ts</code>.</p>\n<p>By default, source files also live in the project root:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>.</span></span>\n<span class=\"line\"><span>├── .preactpress/</span></span>\n<span class=\"line\"><span>│ └── config.ts</span></span>\n<span class=\"line\"><span>├── index.md</span></span>\n<span class=\"line\"><span>└── guide/</span></span>\n<span class=\"line\"><span> └── getting-started.md</span></span></code></pre><p>You can move content into a nested source directory with <code>srcDir</code>:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> srcDir: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'docs'</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>That produces this shape:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>.</span></span>\n<span class=\"line\"><span>├── .preactpress/</span></span>\n<span class=\"line\"><span>│ └── config.ts</span></span>\n<span class=\"line\"><span>└── docs/</span></span>\n<span class=\"line\"><span> ├── index.md</span></span>\n<span class=\"line\"><span> └── guide/</span></span>\n<span class=\"line\"><span> └── getting-started.md</span></span></code></pre><p>The resulting routes stay the same:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>docs/index.md -> /</span></span>\n<span class=\"line\"><span>docs/guide/getting-started.md -> /guide/getting-started</span></span></code></pre><h2 id=\"linking-between-pages\" class=\"pp-heading\">Linking between pages<a class=\"pp-heading-anchor\" href=\"#linking-between-pages\" aria-label=\"Link to this section\">#</a></h2>\n<p>Use absolute or relative links. The recommended style is to omit file extensions:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[</span><span style=\"color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline\">Getting Started</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">](</span><span style=\"color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#E1E4E8;--shiki-dark-text-decoration:underline\">/guide/getting-started</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[</span><span style=\"color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline\">Routing</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">](</span><span style=\"color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#E1E4E8;--shiki-dark-text-decoration:underline\">./routing</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[</span><span style=\"color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline\">Home</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">](</span><span style=\"color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#E1E4E8;--shiki-dark-text-decoration:underline\">../</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)</span></span></code></pre><p>Avoid linking directly to generated HTML or source Markdown:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">&#x3C;!-- Avoid --></span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[</span><span style=\"color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline\">Getting Started</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">](</span><span style=\"color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#E1E4E8;--shiki-dark-text-decoration:underline\">/guide/getting-started.md</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">[</span><span style=\"color:#032F62;--shiki-light-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline\">Getting Started</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">](</span><span style=\"color:#24292E;--shiki-light-text-decoration:underline;--shiki-dark:#E1E4E8;--shiki-dark-text-decoration:underline\">/guide/getting-started.html</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">)</span></span></code></pre><p><code>preactpress check</code> validates local Markdown links that use <code>.md</code>, <code>.mdx</code>, or <code>.html</code> extensions and reports missing pages.</p>\n<h2 id=\"locale-routes\" class=\"pp-heading\">Locale routes<a class=\"pp-heading-anchor\" href=\"#locale-routes\" aria-label=\"Link to this section\">#</a></h2>\n<p>PreactPress supports VitePress-style locale folders. Keep the default language at the root and put translations in locale folders:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>index.md -> /</span></span>\n<span class=\"line\"><span>guide/getting-started.md -> /guide/getting-started</span></span>\n<span class=\"line\"><span>de/index.md -> /de</span></span>\n<span class=\"line\"><span>de/guide/getting-started.md -> /de/guide/getting-started</span></span></code></pre><p>Configure locale labels, language codes, and locale-specific nav in <code>.preactpress/config.ts</code>:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> locales: {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> root: {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> label: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'English'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> lang: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'en'</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> },</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> de: {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> label: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'Deutsch'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> lang: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'de'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> link: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'/de/'</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>The default theme shows a language switcher when multiple locales are configured.</p>\n<h2 id=\"tag-routes\" class=\"pp-heading\">Tag routes<a class=\"pp-heading-anchor\" href=\"#tag-routes\" aria-label=\"Link to this section\">#</a></h2>\n<p>Pages can define tags in frontmatter:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">---</span></span>\n<span class=\"line\"><span style=\"color:#22863A;--shiki-dark:#85E89D\">title</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">Release notes</span></span>\n<span class=\"line\"><span style=\"color:#22863A;--shiki-dark:#85E89D\">tags</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: [</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">release</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">changelog</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">]</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">---</span></span></code></pre><p>Each tag receives an index page:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>release -> /tags/release</span></span>\n<span class=\"line\"><span>changelog -> /tags/changelog</span></span></code></pre><p>For localized content, tag pages are scoped to the locale:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>de/guide/intro.md with tag \"Markdown\" -> /de/tags/markdown</span></span></code></pre><p>If a real Markdown or MDX page exists at the same route as a generated tag index, the real page wins.</p>\n<h2 id=\"base-path\" class=\"pp-heading\">Base path<a class=\"pp-heading-anchor\" href=\"#base-path\" aria-label=\"Link to this section\">#</a></h2>\n<p>Use <code>site.base</code> when the site is served from a subpath, for example GitHub Pages project sites:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> site: {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> base: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'/my-repo/'</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>You can also override it for one build:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> exec</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> preactpress</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> build</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\"> --base</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> /my-repo/</span></span></code></pre><h2 id=\"route-rewrites\" class=\"pp-heading\">Route rewrites<a class=\"pp-heading-anchor\" href=\"#route-rewrites\" aria-label=\"Link to this section\">#</a></h2>\n<p>Map a public URL to existing content without duplicating files:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> rewrites: {</span></span>\n<span class=\"line\"><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> '/docs'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'/guide'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">,</span></span>\n<span class=\"line\"><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> '/getting-started'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'/guide/intro'</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>Keys are the routes visitors use; values must point at routes that already exist from your Markdown files. <code>preactpress check</code> validates rewrite sources and collisions.</p>\n<h2 id=\"clean-urls-and-hosting\" class=\"pp-heading\">Clean URLs and hosting<a class=\"pp-heading-anchor\" href=\"#clean-urls-and-hosting\" aria-label=\"Link to this section\">#</a></h2>\n<table>\n<thead>\n<tr>\n<th><code>cleanUrls</code></th>\n<th>Output for <code>/about</code></th>\n<th>Typical host</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>true</code> (default)</td>\n<td><code>dist/about/index.html</code></td>\n<td>Netlify, Vercel, Cloudflare Pages, GitHub Pages</td>\n</tr>\n<tr>\n<td><code>false</code></td>\n<td><code>dist/about.html</code></td>\n<td>Static buckets without directory index support</td>\n</tr>\n</tbody>\n</table>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> cleanUrls: </span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">false</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>Most modern static hosts work with the default. Set <code>cleanUrls: false</code> only when your host cannot resolve <code>/about</code> to <code>about/index.html</code>.</p>\n<h2 id=\"dynamic-routes\" class=\"pp-heading\">Dynamic routes<a class=\"pp-heading-anchor\" href=\"#dynamic-routes\" aria-label=\"Link to this section\">#</a></h2>\n<p>Generate routes at build time with a bracket template and a colocated <code>.paths.ts</code> file:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">&#x3C;!-- packages/[pkg].md --></span></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\">---</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">title: \"{{ params.pkg }}\"</span></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\">---</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\"># {{ params.pkg }}</span></span></code></pre><pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">// packages/[pkg].paths.ts</span></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> {</span></span>\n<span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> paths</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">() {</span></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\"> return</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> [</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> { params: { pkg: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'preact'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> } },</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> { params: { pkg: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'vite'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }, props: { note: </span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'Build tool'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> } }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ]</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>This emits <code>/packages/preact</code> and <code>/packages/vite</code>. Use <code>{{ params.key }}</code> and <code>{{ props.key }}</code> in frontmatter and body.</p>\n<h2 id=\"data-loaders\" class=\"pp-heading\">Data loaders<a class=\"pp-heading-anchor\" href=\"#data-loaders\" aria-label=\"Link to this section\">#</a></h2>\n<p>Colocate <code>*.data.ts</code> with a page to load build-time data via <code>createContentLoader</code> from <code>preactpress/config</code>. The result is exposed on <code>page.meta.contentData</code> (and in themes through the <code>page</code> prop).</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6A737D;--shiki-dark:#6A737D\">// blog.data.ts</span></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> { createContentLoader } </span><span style=\"color:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> 'preactpress/config'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> default</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> createContentLoader</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">'posts/*.md'</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">, {</span></span>\n<span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> transform</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"color:#E36209;--shiki-dark:#FFAB70\">items</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\"> return</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> items.</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">map</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">((</span><span style=\"color:#E36209;--shiki-dark:#FFAB70\">item</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">) </span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=></span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> ({</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> title: item.title,</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> route: item.route</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }))</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> }</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">})</span></span></code></pre><p>Pair with <code>blog.md</code> or <code>blog/index.md</code> for route <code>/blog</code>.</p>\n<h2 id=\"current-limitations\" class=\"pp-heading\">Current limitations<a class=\"pp-heading-anchor\" href=\"#current-limitations\" aria-label=\"Link to this section\">#</a></h2>\n<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Dynamic MDX templates (<code>[id].mdx</code>)</td>\n<td>Not supported (use <code>.md</code> templates)</td>\n</tr>\n<tr>\n<td>Pattern-based rewrites with params</td>\n<td>Not supported</td>\n</tr>\n</tbody>\n</table>\n",
8
+ "title": "Routing",
9
+ "description": "Understand how PreactPress maps files to URLs",
10
+ "tags": [],
11
+ "pageType": "website",
12
+ "headings": [
13
+ {
14
+ "id": "file-based-routing",
15
+ "text": "File-based routing",
16
+ "level": 2
17
+ },
18
+ {
19
+ "id": "project-root-and-source-directory",
20
+ "text": "Project root and source directory",
21
+ "level": 2
22
+ },
23
+ {
24
+ "id": "linking-between-pages",
25
+ "text": "Linking between pages",
26
+ "level": 2
27
+ },
28
+ {
29
+ "id": "locale-routes",
30
+ "text": "Locale routes",
31
+ "level": 2
32
+ },
33
+ {
34
+ "id": "tag-routes",
35
+ "text": "Tag routes",
36
+ "level": 2
37
+ },
38
+ {
39
+ "id": "base-path",
40
+ "text": "Base path",
41
+ "level": 2
42
+ },
43
+ {
44
+ "id": "route-rewrites",
45
+ "text": "Route rewrites",
46
+ "level": 2
47
+ },
48
+ {
49
+ "id": "clean-urls-and-hosting",
50
+ "text": "Clean URLs and hosting",
51
+ "level": 2
52
+ },
53
+ {
54
+ "id": "dynamic-routes",
55
+ "text": "Dynamic routes",
56
+ "level": 2
57
+ },
58
+ {
59
+ "id": "data-loaders",
60
+ "text": "Data loaders",
61
+ "level": 2
62
+ },
63
+ {
64
+ "id": "current-limitations",
65
+ "text": "Current limitations",
66
+ "level": 2
67
+ }
68
+ ],
69
+ "relativePath": "guide/routing.md",
70
+ "lastUpdated": "2026-06-05T08:17:02.100Z"
71
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "kind": "markdown",
3
+ "meta": {
4
+ "title": "What is PreactPress?",
5
+ "description": "Learn what PreactPress is and when to use it"
6
+ },
7
+ "html": "<h1 id=\"what-is-preactpress\" class=\"pp-heading\">What is PreactPress?<a class=\"pp-heading-anchor\" href=\"#what-is-preactpress\" aria-label=\"Link to this section\">#</a></h1>\n<p>PreactPress is a static site generator for fast, content-focused websites. You write pages in Markdown or MDX, configure navigation and theme options in <code>.preactpress/config.ts</code>, and PreactPress generates static HTML that can be deployed to any static host.</p>\n<p>It is built with <a href=\"https://vite.dev/\" target=\"_blank\" rel=\"noopener noreferrer\">Vite</a> and <a href=\"https://preactjs.com/\" target=\"_blank\" rel=\"noopener noreferrer\">Preact</a>. The workflow is inspired by VitePress, but the component model is Preact instead of Vue.</p>\n<h2 id=\"use-cases\" class=\"pp-heading\">Use cases<a class=\"pp-heading-anchor\" href=\"#use-cases\" aria-label=\"Link to this section\">#</a></h2>\n<h3 id=\"documentation\" class=\"pp-heading\">Documentation<a class=\"pp-heading-anchor\" href=\"#documentation\" aria-label=\"Link to this section\">#</a></h3>\n<p>PreactPress ships with a small default theme for technical documentation. It includes navigation, sidebar groups, outline links, search, last-updated metadata, and Markdown rendering out of the box.</p>\n<p>Use it when your docs live naturally as files:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span>index.md</span></span>\n<span class=\"line\"><span>guide/getting-started.md</span></span>\n<span class=\"line\"><span>guide/routing.md</span></span>\n<span class=\"line\"><span>reference/api.md</span></span></code></pre><p>Every Markdown or MDX file becomes a page, so documentation grows by adding files and linking them from the sidebar.</p>\n<h3 id=\"blogs-portfolios-and-marketing-sites\" class=\"pp-heading\">Blogs, portfolios, and marketing sites<a class=\"pp-heading-anchor\" href=\"#blogs-portfolios-and-marketing-sites\" aria-label=\"Link to this section\">#</a></h3>\n<p>PreactPress can also power blogs, portfolios, and small marketing sites. Markdown handles content, MDX brings in interactive Preact components, and custom themes let you replace the default documentation shell.</p>\n<p>The separate <code>preactpress-examples</code> project includes a custom-theme example that shows a magazine-style layout with article teasers and tag pages.</p>\n<h2 id=\"developer-experience\" class=\"pp-heading\">Developer experience<a class=\"pp-heading-anchor\" href=\"#developer-experience\" aria-label=\"Link to this section\">#</a></h2>\n<p>PreactPress focuses on keeping content work simple:</p>\n<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>What it gives you</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Vite dev server</td>\n<td>Fast startup and hot updates while editing content</td>\n</tr>\n<tr>\n<td>Markdown frontmatter</td>\n<td>Page titles, descriptions, tags, draft status, and social metadata</td>\n</tr>\n<tr>\n<td>MDX</td>\n<td>Preact components inside content pages</td>\n</tr>\n<tr>\n<td>Default theme</td>\n<td>Nav, sidebar, outline, search, footer, locale switcher</td>\n</tr>\n<tr>\n<td><code>preactpress check</code></td>\n<td>Config, route, and link validation before release</td>\n</tr>\n</tbody>\n</table>\n<p>For regular content, use <code>.md</code>. When a page needs interactivity, use <code>.mdx</code> and import a Preact component:</p>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">import</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\"> Counter </span><span style=\"color:#D73A49;--shiki-dark:#F97583\">from</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> './components/Counter.tsx'</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#005CC5;--shiki-light-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold\">## Demo</span></span>\n<span class=\"line\"></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">Counter</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> initial</span><span style=\"color:#D73A49;--shiki-dark:#F97583\">=</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">{</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\">3</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">} /></span></span></code></pre><h2 id=\"performance\" class=\"pp-heading\">Performance<a class=\"pp-heading-anchor\" href=\"#performance\" aria-label=\"Link to this section\">#</a></h2>\n<p>PreactPress produces static HTML for every route during the production build. The first visit receives HTML that already contains the page content, which is good for loading speed and SEO.</p>\n<p>After hydration, client-side navigation takes over. Markdown pages are loaded as small JSON payloads from <code>preactpress-content/*.json</code>, so large sites do not need to ship every Markdown body in the initial JavaScript bundle.</p>\n<p>The production output is static files only:</p>\n<table>\n<thead>\n<tr>\n<th>Output</th>\n<th>Purpose</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>index.html</code>, <code>*/index.html</code></td>\n<td>One HTML file per route</td>\n</tr>\n<tr>\n<td><code>assets/*</code></td>\n<td>Hashed JavaScript and CSS from Vite</td>\n</tr>\n<tr>\n<td><code>preactpress-search.json</code></td>\n<td>Search data for the default theme</td>\n</tr>\n<tr>\n<td><code>preactpress-content/*.json</code></td>\n<td>Lazy-loaded Markdown page payloads</td>\n</tr>\n<tr>\n<td><code>404.html</code></td>\n<td>Not-found page</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"what-about-vitepress\" class=\"pp-heading\">What about VitePress?<a class=\"pp-heading-anchor\" href=\"#what-about-vitepress\" aria-label=\"Link to this section\">#</a></h2>\n<p>If you know VitePress, PreactPress should feel familiar: both use Vite, file-based Markdown routing, a default docs theme, and static output.</p>\n<p>The main difference is the UI stack. VitePress uses Vue. PreactPress uses Preact and MDX, so interactive content and custom themes are written as Preact components.</p>\n<p>PreactPress is also static-only in production. You build the site once, upload the output directory, and serve it from Netlify, Vercel, Cloudflare Pages, GitHub Pages, S3, Nginx, or another static host.</p>\n<h2 id=\"next-steps\" class=\"pp-heading\">Next steps<a class=\"pp-heading-anchor\" href=\"#next-steps\" aria-label=\"Link to this section\">#</a></h2>\n<table>\n<thead>\n<tr>\n<th>Page</th>\n<th>Why</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"/guide/getting-started\">Getting Started</a></td>\n<td>Install PreactPress and understand the starter structure</td>\n</tr>\n<tr>\n<td><a href=\"/guide/routing\">Routing</a></td>\n<td>Learn how files become URLs</td>\n</tr>\n<tr>\n<td><a href=\"/guide/deploy\">Deploy</a></td>\n<td>Build and publish a static site</td>\n</tr>\n</tbody>\n</table>\n",
8
+ "title": "What is PreactPress?",
9
+ "description": "Learn what PreactPress is and when to use it",
10
+ "tags": [],
11
+ "pageType": "website",
12
+ "headings": [
13
+ {
14
+ "id": "use-cases",
15
+ "text": "Use cases",
16
+ "level": 2
17
+ },
18
+ {
19
+ "id": "documentation",
20
+ "text": "Documentation",
21
+ "level": 3
22
+ },
23
+ {
24
+ "id": "blogs-portfolios-and-marketing-sites",
25
+ "text": "Blogs, portfolios, and marketing sites",
26
+ "level": 3
27
+ },
28
+ {
29
+ "id": "developer-experience",
30
+ "text": "Developer experience",
31
+ "level": 2
32
+ },
33
+ {
34
+ "id": "performance",
35
+ "text": "Performance",
36
+ "level": 2
37
+ },
38
+ {
39
+ "id": "what-about-vitepress",
40
+ "text": "What about VitePress?",
41
+ "level": 2
42
+ },
43
+ {
44
+ "id": "next-steps",
45
+ "text": "Next steps",
46
+ "level": 2
47
+ }
48
+ ],
49
+ "relativePath": "guide/what-is-preactpress.md",
50
+ "lastUpdated": "2026-06-04T07:32:52.322Z"
51
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "kind": "markdown",
3
+ "meta": {
4
+ "title": "Markdown examples",
5
+ "description": "Rendered examples of PreactPress Markdown extensions.",
6
+ "tags": [
7
+ "markdown"
8
+ ]
9
+ },
10
+ "html": "<h2 id=\"code-highlighting\" class=\"pp-heading\">Code highlighting<a class=\"pp-heading-anchor\" href=\"#code-highlighting\" aria-label=\"Link to this section\">#</a></h2>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> greet</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"color:#E36209;--shiki-dark:#FFAB70\">name</span><span style=\"color:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\"> string</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"line highlighted\"><span style=\"color:#D73A49;--shiki-dark:#F97583\"> return</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> `Hello, ${</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">name</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">}!`</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><p>Inline code such as <code>themeConfig.outline</code> uses the theme’s code tokens.</p>\n<h2 id=\"snippet-import\" class=\"pp-heading\">Snippet import<a class=\"pp-heading-anchor\" href=\"#snippet-import\" aria-label=\"Link to this section\">#</a></h2>\n<pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#D73A49;--shiki-dark:#F97583\">export</span><span style=\"color:#D73A49;--shiki-dark:#F97583\"> function</span><span style=\"color:#6F42C1;--shiki-dark:#B392F0\"> greet</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">(</span><span style=\"color:#E36209;--shiki-dark:#FFAB70\">name</span><span style=\"color:#D73A49;--shiki-dark:#F97583\">:</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\"> string</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">) {</span></span>\n<span class=\"line highlighted\"><span style=\"color:#D73A49;--shiki-dark:#F97583\"> return</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> `Hello, ${</span><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">name</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\">}!`</span></span>\n<span class=\"line\"><span style=\"color:#24292E;--shiki-dark:#E1E4E8\">}</span></span></code></pre><h2 id=\"containers-and-alerts\" class=\"pp-heading\">Containers and alerts<a class=\"pp-heading-anchor\" href=\"#containers-and-alerts\" aria-label=\"Link to this section\">#</a></h2>\n<div class=\"pp-container pp-container-tip\"><p class=\"pp-container-title\">TIP</p><div class=\"pp-container-body\"><p>Custom containers support <code>tip</code>, <code>warning</code>, <code>danger</code>, <code>info</code>, and <code>details</code>.</p>\n</div></div><div class=\"pp-container pp-container-note\"><p class=\"pp-container-title\">NOTE</p><div class=\"pp-container-body\"><p>GFM alert syntax is supported too.</p>\n</div></div><h2 id=\"table\" class=\"pp-heading\">Table<a class=\"pp-heading-anchor\" href=\"#table\" aria-label=\"Link to this section\">#</a></h2>\n<table>\n<thead>\n<tr>\n<th>Source</th>\n<th>Result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code># Title</code></td>\n<td>Heading</td>\n</tr>\n<tr>\n<td>YAML frontmatter</td>\n<td>Page metadata</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"stable-heading\" class=\"pp-heading\">Stable heading<a class=\"pp-heading-anchor\" href=\"#stable-heading\" aria-label=\"Link to this section\">#</a></h2>\n<p>Use <code>{#id}</code> to control a heading fragment.</p>\n<h2 id=\"inline-table-of-contents\" class=\"pp-heading\">Inline table of contents<a class=\"pp-heading-anchor\" href=\"#inline-table-of-contents\" aria-label=\"Link to this section\">#</a></h2>\n<nav class=\"pp-inline-toc\" aria-label=\"Table of contents\"><a class=\"pp-inline-toc-link level-2\" href=\"#code-highlighting\">Code highlighting</a><a class=\"pp-inline-toc-link level-2\" href=\"#snippet-import\">Snippet import</a><a class=\"pp-inline-toc-link level-2\" href=\"#containers-and-alerts\">Containers and alerts</a><a class=\"pp-inline-toc-link level-2\" href=\"#table\">Table</a><a class=\"pp-inline-toc-link level-2\" href=\"#stable-heading\">Stable heading</a><a class=\"pp-inline-toc-link level-2\" href=\"#inline-table-of-contents\">Inline table of contents</a><a class=\"pp-inline-toc-link level-3\" href=\"#nested-section\">Nested section</a><a class=\"pp-inline-toc-link level-2\" href=\"#code-group\">Code group</a><a class=\"pp-inline-toc-link level-2\" href=\"#included-content\">Included content</a><a class=\"pp-inline-toc-link level-2\" href=\"#emoji-and-math\">Emoji and math</a></nav><h3 id=\"nested-section\" class=\"pp-heading\">Nested section<a class=\"pp-heading-anchor\" href=\"#nested-section\" aria-label=\"Link to this section\">#</a></h3>\n<p>The generated table of contents includes level-three headings.</p>\n<h2 id=\"code-group\" class=\"pp-heading\">Code group<a class=\"pp-heading-anchor\" href=\"#code-group\" aria-label=\"Link to this section\">#</a></h2>\n<div class=\"pp-code-group\"><input type=\"radio\" name=\"pp-cg-1\" id=\"pp-cg-1-0\" class=\"pp-code-group-input\" checked><label for=\"pp-cg-1-0\" class=\"pp-code-group-tab\">pnpm</label><input type=\"radio\" name=\"pp-cg-1\" id=\"pp-cg-1-1\" class=\"pp-code-group-input\"><label for=\"pp-cg-1-1\" class=\"pp-code-group-tab\">npm</label><div class=\"pp-code-group-blocks\"><div class=\"pp-code-group-block\"><pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">pnpm</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> add</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\"> -D</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> preactpress</span></span></code></pre></div><div class=\"pp-code-group-block\"><pre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#6F42C1;--shiki-dark:#B392F0\">npm</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> install</span><span style=\"color:#005CC5;--shiki-dark:#79B8FF\"> --save-dev</span><span style=\"color:#032F62;--shiki-dark:#9ECBFF\"> preactpress</span></span></code></pre></div></div></div><h2 id=\"included-content\" class=\"pp-heading\">Included content<a class=\"pp-heading-anchor\" href=\"#included-content\" aria-label=\"Link to this section\">#</a></h2>\n<div class=\"pp-container pp-container-tip\"><p class=\"pp-container-title\">Shared fragment</p><div class=\"pp-container-body\"><p>This note is pulled in via <code>&lt;!-- include cycle detected: /home/watzak/master/kamod/preactpress/templates/docs/partials/shared-note.md --&gt;</code>.</p>\n</div></div><h2 id=\"emoji-and-math\" class=\"pp-heading\">Emoji and math<a class=\"pp-heading-anchor\" href=\"#emoji-and-math\" aria-label=\"Link to this section\">#</a></h2>\n<p>This starter enables both options: 🚀</p>\n<p>Inline math: \n <span id=\"mjx-a543d31\">\n <style>\n #mjx-a543d31{\n display:contents;\n mjx-assistive-mml {\n user-select: text !important;\n clip: auto !important;\n color: rgba(0,0,0,0);\n }\n \nmjx-container[jax=\"SVG\"] {\n direction: ltr;\n}\n\nmjx-container[jax=\"SVG\"] > svg {\n overflow: visible;\n min-height: 1px;\n min-width: 1px;\n}\n\nmjx-container[jax=\"SVG\"] > svg a {\n fill: blue;\n stroke: blue;\n}\n\nmjx-assistive-mml {\n position: absolute !important;\n top: 0px;\n left: 0px;\n clip: rect(1px, 1px, 1px, 1px);\n padding: 1px 0px 0px 0px !important;\n border: 0px !important;\n display: block !important;\n width: auto !important;\n overflow: hidden !important;\n -webkit-touch-callout: none;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\nmjx-assistive-mml[display=\"block\"] {\n width: 100% !important;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"] {\n display: block;\n text-align: center;\n margin: 1em 0;\n}\n\nmjx-container[jax=\"SVG\"][display=\"true\"][width=\"full\"] {\n display: flex;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"left\"] {\n text-align: left;\n}\n\nmjx-container[jax=\"SVG\"][justify=\"right\"] {\n text-align: right;\n}\n\ng[data-mml-node=\"merror\"] > g {\n fill: red;\n stroke: red;\n}\n\ng[data-mml-node=\"merror\"] > rect[data-background] {\n fill: yellow;\n stroke: none;\n}\n\ng[data-mml-node=\"mtable\"] > line[data-line], svg[data-table] > g > line[data-line] {\n stroke-width: 70px;\n fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > rect[data-frame], svg[data-table] > g > rect[data-frame] {\n stroke-width: 70px;\n fill: none;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dashed, svg[data-table] > g > .mjx-dashed {\n stroke-dasharray: 140;\n}\n\ng[data-mml-node=\"mtable\"] > .mjx-dotted, svg[data-table] > g > .mjx-dotted {\n stroke-linecap: round;\n stroke-dasharray: 0,140;\n}\n\ng[data-mml-node=\"mtable\"] > g > svg {\n overflow: visible;\n}\n\n[jax=\"SVG\"] mjx-tool {\n display: inline-block;\n position: relative;\n width: 0;\n height: 0;\n}\n\n[jax=\"SVG\"] mjx-tool > mjx-tip {\n position: absolute;\n top: 0;\n left: 0;\n}\n\nmjx-tool > mjx-tip {\n display: inline-block;\n padding: .2em;\n border: 1px solid #888;\n font-size: 70%;\n background-color: #F8F8F8;\n color: black;\n box-shadow: 2px 2px 5px #AAAAAA;\n}\n\ng[data-mml-node=\"maction\"][data-toggle] {\n cursor: pointer;\n}\n\nmjx-status {\n display: block;\n position: fixed;\n left: 1em;\n bottom: 1em;\n min-width: 25%;\n padding: .2em .4em;\n border: 1px solid #888;\n font-size: 90%;\n background-color: #F8F8F8;\n color: black;\n}\n\nforeignObject[data-mjx-xml] {\n font-family: initial;\n line-height: normal;\n overflow: visible;\n}\n\nmjx-container[jax=\"SVG\"] path[data-c], mjx-container[jax=\"SVG\"] use[data-c] {\n stroke-width: 3;\n}\n\ng[data-mml-node=\"xypic\"] path {\n stroke-width: inherit;\n}\n\n.MathJax g[data-mml-node=\"xypic\"] path {\n stroke-width: inherit;\n}\n\n }\n </style>\n <mjx-container class=\"MathJax\" jax=\"SVG\" style=\"position: relative;\"><svg style=\"vertical-align: -0.186ex;\" xmlns=\"http://www.w3.org/2000/svg\" width=\"8.699ex\" height=\"2.072ex\" role=\"img\" focusable=\"false\" viewBox=\"0 -833.9 3845.1 915.9\" aria-hidden=\"true\"><g stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" transform=\"scale(1,-1)\"><g data-mml-node=\"math\"><g data-mml-node=\"mi\"><path data-c=\"1D438\" d=\"M492 213Q472 213 472 226Q472 230 477 250T482 285Q482 316 461 323T364 330H312Q311 328 277 192T243 52Q243 48 254 48T334 46Q428 46 458 48T518 61Q567 77 599 117T670 248Q680 270 683 272Q690 274 698 274Q718 274 718 261Q613 7 608 2Q605 0 322 0H133Q31 0 31 11Q31 13 34 25Q38 41 42 43T65 46Q92 46 125 49Q139 52 144 61Q146 66 215 342T285 622Q285 629 281 629Q273 632 228 634H197Q191 640 191 642T193 659Q197 676 203 680H757Q764 676 764 669Q764 664 751 557T737 447Q735 440 717 440H705Q698 445 698 453L701 476Q704 500 704 528Q704 558 697 578T678 609T643 625T596 632T532 634H485Q397 633 392 631Q388 629 386 622Q385 619 355 499T324 377Q347 376 372 376H398Q464 376 489 391T534 472Q538 488 540 490T557 493Q562 493 565 493T570 492T572 491T574 487T577 483L544 351Q511 218 508 216Q505 213 492 213Z\"></path></g><g data-mml-node=\"mo\" transform=\"translate(1041.8,0)\"><path data-c=\"3D\" d=\"M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z\"></path></g><g data-mml-node=\"mi\" transform=\"translate(2097.6,0)\"><path data-c=\"1D45A\" d=\"M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z\"></path></g><g data-mml-node=\"msup\" transform=\"translate(2975.6,0)\"><g data-mml-node=\"mi\"><path data-c=\"1D450\" d=\"M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z\"></path></g><g data-mml-node=\"mn\" transform=\"translate(466,363) scale(0.707)\"><path data-c=\"32\" d=\"M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z\"></path></g></g></g></g></svg><mjx-assistive-mml unselectable=\"on\" display=\"inline\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><mi>E</mi><mo>=</mo><mi>m</mi><msup><mi>c</mi><mn>2</mn></msup></math></mjx-assistive-mml></mjx-container>\n </span>\n </p>\n",
11
+ "title": "Markdown examples",
12
+ "description": "Rendered examples of PreactPress Markdown extensions.",
13
+ "tags": [
14
+ "markdown"
15
+ ],
16
+ "pageType": "website",
17
+ "headings": [
18
+ {
19
+ "id": "code-highlighting",
20
+ "text": "Code highlighting",
21
+ "level": 2
22
+ },
23
+ {
24
+ "id": "snippet-import",
25
+ "text": "Snippet import",
26
+ "level": 2
27
+ },
28
+ {
29
+ "id": "containers-and-alerts",
30
+ "text": "Containers and alerts",
31
+ "level": 2
32
+ },
33
+ {
34
+ "id": "table",
35
+ "text": "Table",
36
+ "level": 2
37
+ },
38
+ {
39
+ "id": "stable-heading",
40
+ "text": "Stable heading",
41
+ "level": 2
42
+ },
43
+ {
44
+ "id": "inline-table-of-contents",
45
+ "text": "Inline table of contents",
46
+ "level": 2
47
+ },
48
+ {
49
+ "id": "nested-section",
50
+ "text": "Nested section",
51
+ "level": 3
52
+ },
53
+ {
54
+ "id": "code-group",
55
+ "text": "Code group",
56
+ "level": 2
57
+ },
58
+ {
59
+ "id": "included-content",
60
+ "text": "Included content",
61
+ "level": 2
62
+ },
63
+ {
64
+ "id": "emoji-and-math",
65
+ "text": "Emoji and math",
66
+ "level": 2
67
+ }
68
+ ],
69
+ "relativePath": "markdown-examples.md",
70
+ "lastUpdated": "2026-06-08T15:16:59.431Z"
71
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "kind": "markdown",
3
+ "meta": {
4
+ "tagIndex": true,
5
+ "tag": "markdown",
6
+ "tagSlug": "markdown"
7
+ },
8
+ "html": "<article class=\"pp-tag-index\"><h1 class=\"pp-heading\" id=\"tag-markdown\">Pages tagged: markdown</h1><p class=\"pp-tag-index-count\">1 page(s).</p><ul class=\"pp-tag-index-list\">\n <li><a href=\"/markdown-examples\">Markdown examples</a></li>\n</ul></article>",
9
+ "title": "Tag: markdown",
10
+ "description": "Pages tagged “markdown”",
11
+ "tags": [
12
+ "markdown"
13
+ ],
14
+ "pageType": "website",
15
+ "headings": []
16
+ }
@@ -0,0 +1,166 @@
1
+ [
2
+ {
3
+ "route": "/",
4
+ "locale": "root",
5
+ "title": "PreactPress",
6
+ "description": "Build static documentation and content sites with Markdown, MDX, Vite, and Preact.",
7
+ "excerpt": "PreactPress generates deployable HTML and assets. No Node server is required in production.",
8
+ "tags": []
9
+ },
10
+ {
11
+ "route": "/about",
12
+ "locale": "root",
13
+ "title": "About",
14
+ "description": "About this site",
15
+ "excerpt": "About us # Your content here. This page was added as part of the Your first 5 minutes tutorial. Replace this text with your own copy — team bio, project…",
16
+ "tags": []
17
+ },
18
+ {
19
+ "route": "/de",
20
+ "locale": "de",
21
+ "title": "PreactPress auf Deutsch",
22
+ "description": "Kleine deutschsprachige i18n-Demo für PreactPress.",
23
+ "excerpt": "",
24
+ "tags": []
25
+ },
26
+ {
27
+ "route": "/de/guide/getting-started",
28
+ "locale": "de",
29
+ "title": "Erste Schritte",
30
+ "description": "PreactPress installieren und lokal starten.",
31
+ "excerpt": "Projekt erstellen # mkdir meine-seite cd meine-seite pnpm dlx preactpress init pnpm install pnpm run dev Öffne danach http://localhost:5173 . Nächste…",
32
+ "tags": []
33
+ },
34
+ {
35
+ "route": "/de/guide/what-is-preactpress",
36
+ "locale": "de",
37
+ "title": "Was ist PreactPress?",
38
+ "description": "Kurze Einführung in den statischen Site-Generator.",
39
+ "excerpt": "PreactPress erzeugt statische Websites aus Markdown und MDX. Die Entwicklung läuft mit Vite, Layouts werden mit Preact gebaut, und das Ergebnis kann auf…",
40
+ "tags": []
41
+ },
42
+ {
43
+ "route": "/guide/advanced",
44
+ "locale": "root",
45
+ "title": "Advanced APIs",
46
+ "description": "Build hooks, data loaders, dynamic routes, MPA mode, and incremental builds.",
47
+ "excerpt": "Async configuration # Export an async factory when navigation or metadata comes from another system. import { defineConfig } from 'preactpress/config'…",
48
+ "tags": []
49
+ },
50
+ {
51
+ "route": "/guide/commands",
52
+ "locale": "root",
53
+ "title": "CLI and validation",
54
+ "description": "Commands for scaffolding, development, validation, builds, and previews.",
55
+ "excerpt": "Run commands from the site root or pass a root path as the final argument. Command Purpose preactpress init [dir] Scaffold the minimal starter preactpress…",
56
+ "tags": []
57
+ },
58
+ {
59
+ "route": "/guide/configuration",
60
+ "locale": "root",
61
+ "title": "Configuration reference",
62
+ "description": "Complete reference for PreactPress site, theme, Markdown, build, and hook options.",
63
+ "excerpt": "Configuration lives in .preactpress/config.ts . A plain object works without imports; defineConfig adds type inference once PreactPress is installed.…",
64
+ "tags": []
65
+ },
66
+ {
67
+ "route": "/guide/creating-pages",
68
+ "locale": "root",
69
+ "title": "Creating pages",
70
+ "description": "Add new Markdown and MDX pages, understand URLs, and wire them into navigation",
71
+ "excerpt": "Creating pages # PreactPress builds pages from files — there is no separate page editor or CMS. Every .md or .mdx file under the source directory ( srcDir…",
72
+ "tags": []
73
+ },
74
+ {
75
+ "route": "/guide/custom-themes",
76
+ "locale": "root",
77
+ "title": "Custom themes",
78
+ "description": "Replace the default shell with a Preact layout.",
79
+ "excerpt": "Set theme to a TSX module relative to .preactpress : export default { theme: './theme/Layout.tsx' } The module default-exports a Preact component…",
80
+ "tags": []
81
+ },
82
+ {
83
+ "route": "/guide/default-theme",
84
+ "locale": "root",
85
+ "title": "Default theme",
86
+ "description": "Configure navigation, sidebars, search, locales, and responsive behavior.",
87
+ "excerpt": "The bundled theme provides a responsive header, mobile drawer, sidebar, page outline, local or Algolia search, dark mode, tags, previous/next links, edit…",
88
+ "tags": []
89
+ },
90
+ {
91
+ "route": "/guide/deploy",
92
+ "locale": "root",
93
+ "title": "Deploy",
94
+ "description": "Build and publish a PreactPress site",
95
+ "excerpt": "Deploy # PreactPress builds static files. Production deployment means running a build and uploading the output directory, usually dist/ , to a static…",
96
+ "tags": []
97
+ },
98
+ {
99
+ "route": "/guide/first-five-minutes",
100
+ "locale": "root",
101
+ "title": "Your first 5 minutes",
102
+ "description": "Change the site title, add a page, and update navigation",
103
+ "excerpt": "Your first 5 minutes # This hands-on tutorial follows the setup overview in Getting Started . Follow the steps below in your project — this site is the…",
104
+ "tags": []
105
+ },
106
+ {
107
+ "route": "/guide/getting-started",
108
+ "locale": "root",
109
+ "title": "Getting Started",
110
+ "description": "Install PreactPress and start a new documentation site",
111
+ "excerpt": "Getting Started # This guide shows how to create a PreactPress site, understand the generated files, and start the development server. Prerequisites # You…",
112
+ "tags": []
113
+ },
114
+ {
115
+ "route": "/guide/markdown-and-mdx",
116
+ "locale": "root",
117
+ "title": "Markdown and MDX",
118
+ "description": "Author static Markdown pages and interactive MDX pages.",
119
+ "excerpt": "Use .md for content that does not need browser-side components. Use .mdx when a page imports and renders Preact components. Markdown # Markdown pages…",
120
+ "tags": []
121
+ },
122
+ {
123
+ "route": "/guide/routing",
124
+ "locale": "root",
125
+ "title": "Routing",
126
+ "description": "Understand how PreactPress maps files to URLs",
127
+ "excerpt": "Routing # PreactPress uses file-based routing. Every .md and .mdx file under srcDir becomes a route, and production builds write each route as static…",
128
+ "tags": []
129
+ },
130
+ {
131
+ "route": "/guide/what-is-preactpress",
132
+ "locale": "root",
133
+ "title": "What is PreactPress?",
134
+ "description": "Learn what PreactPress is and when to use it",
135
+ "excerpt": "What is PreactPress? # PreactPress is a static site generator for fast, content-focused websites. You write pages in Markdown or MDX, configure navigation…",
136
+ "tags": []
137
+ },
138
+ {
139
+ "route": "/interactive",
140
+ "locale": "root",
141
+ "title": "Interactive MDX",
142
+ "description": "Markdown with imported Preact components",
143
+ "excerpt": "Markdown with imported Preact components",
144
+ "tags": []
145
+ },
146
+ {
147
+ "route": "/markdown-examples",
148
+ "locale": "root",
149
+ "title": "Markdown examples",
150
+ "description": "Rendered examples of PreactPress Markdown extensions.",
151
+ "excerpt": "Code highlighting # export function greet ( name : string ) { return `Hello, ${ name }!` } Inline code such as themeConfig.outline uses the theme’s code…",
152
+ "tags": [
153
+ "markdown"
154
+ ]
155
+ },
156
+ {
157
+ "route": "/tags/markdown",
158
+ "locale": "root",
159
+ "title": "Tag: markdown",
160
+ "description": "Pages tagged “markdown”",
161
+ "excerpt": "Pages tagged: markdown 1 page(s). Markdown examples",
162
+ "tags": [
163
+ "markdown"
164
+ ]
165
+ }
166
+ ]
@@ -0,0 +1 @@
1
+ (function(){try{var k="preactpress-theme";var m=localStorage.getItem(k);if(m==='light'||m==='dark')document.documentElement.setAttribute('data-theme',m);}catch(e){}})();