@kamod-ch/preactpress 1.0.0 → 1.0.3

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 (526) hide show
  1. package/README.md +87 -49
  2. package/bin/preactpress.mjs +5 -5
  3. package/dist/client/app.d.ts +1 -1
  4. package/dist/client/app.d.ts.map +1 -1
  5. package/dist/client/app.js +55 -42
  6. package/dist/client/app.js.map +1 -1
  7. package/dist/client/entry-client.js +11 -12
  8. package/dist/client/entry-client.js.map +1 -1
  9. package/dist/client/entry-ssr.d.ts +2 -2
  10. package/dist/client/entry-ssr.d.ts.map +1 -1
  11. package/dist/client/entry-ssr.js +16 -16
  12. package/dist/client/entry-ssr.js.map +1 -1
  13. package/dist/client/index.d.ts +3 -2
  14. package/dist/client/index.d.ts.map +1 -1
  15. package/dist/client/index.js +2 -1
  16. package/dist/client/index.js.map +1 -1
  17. package/dist/client/loadPage.d.ts +2 -1
  18. package/dist/client/loadPage.d.ts.map +1 -1
  19. package/dist/client/loadPage.js +15 -12
  20. package/dist/client/loadPage.js.map +1 -1
  21. package/dist/client/prefetchLinks.js +4 -4
  22. package/dist/client/prefetchLinks.js.map +1 -1
  23. package/dist/client/theme-default/AlgoliaSearch.d.ts +3 -3
  24. package/dist/client/theme-default/AlgoliaSearch.d.ts.map +1 -1
  25. package/dist/client/theme-default/AlgoliaSearch.js +15 -15
  26. package/dist/client/theme-default/AlgoliaSearch.js.map +1 -1
  27. package/dist/client/theme-default/Features.d.ts +2 -2
  28. package/dist/client/theme-default/Features.d.ts.map +1 -1
  29. package/dist/client/theme-default/Features.js +10 -8
  30. package/dist/client/theme-default/Features.js.map +1 -1
  31. package/dist/client/theme-default/Hero.d.ts +2 -2
  32. package/dist/client/theme-default/Hero.d.ts.map +1 -1
  33. package/dist/client/theme-default/Hero.js +9 -7
  34. package/dist/client/theme-default/Hero.js.map +1 -1
  35. package/dist/client/theme-default/Layout.d.ts +3 -3
  36. package/dist/client/theme-default/Layout.d.ts.map +1 -1
  37. package/dist/client/theme-default/Layout.js +56 -99
  38. package/dist/client/theme-default/Layout.js.map +1 -1
  39. package/dist/client/theme-default/Logo.d.ts +2 -2
  40. package/dist/client/theme-default/Logo.d.ts.map +1 -1
  41. package/dist/client/theme-default/Logo.js +8 -8
  42. package/dist/client/theme-default/Logo.js.map +1 -1
  43. package/dist/client/theme-default/NavLinks.d.ts +2 -2
  44. package/dist/client/theme-default/NavLinks.d.ts.map +1 -1
  45. package/dist/client/theme-default/NavLinks.js +3 -3
  46. package/dist/client/theme-default/NavLinks.js.map +1 -1
  47. package/dist/client/theme-default/SidebarNav.d.ts +2 -2
  48. package/dist/client/theme-default/SidebarNav.d.ts.map +1 -1
  49. package/dist/client/theme-default/SidebarNav.js +3 -3
  50. package/dist/client/theme-default/SidebarNav.js.map +1 -1
  51. package/dist/client/theme-default/SocialLinks.d.ts +2 -2
  52. package/dist/client/theme-default/SocialLinks.d.ts.map +1 -1
  53. package/dist/client/theme-default/SocialLinks.js +1 -1
  54. package/dist/client/theme-default/SocialLinks.js.map +1 -1
  55. package/dist/client/theme-default/ThemeToggle.d.ts +2 -3
  56. package/dist/client/theme-default/ThemeToggle.d.ts.map +1 -1
  57. package/dist/client/theme-default/ThemeToggle.js +2 -30
  58. package/dist/client/theme-default/ThemeToggle.js.map +1 -1
  59. package/dist/client/theme-default/index.d.ts +1 -1
  60. package/dist/client/theme-default/index.d.ts.map +1 -1
  61. package/dist/client/theme-default/index.js +1 -1
  62. package/dist/client/theme-default/index.js.map +1 -1
  63. package/dist/client/theme-utils.d.ts +24 -0
  64. package/dist/client/theme-utils.d.ts.map +1 -0
  65. package/dist/client/theme-utils.js +107 -0
  66. package/dist/client/theme-utils.js.map +1 -0
  67. package/dist/client/types.d.ts +5 -5
  68. package/dist/client/types.d.ts.map +1 -1
  69. package/dist/client/usePageHead.d.ts +2 -2
  70. package/dist/client/usePageHead.d.ts.map +1 -1
  71. package/dist/client/usePageHead.js +61 -56
  72. package/dist/client/usePageHead.js.map +1 -1
  73. package/dist/client/useSiteSearch.d.ts.map +1 -1
  74. package/dist/client/useSiteSearch.js +8 -8
  75. package/dist/client/useSiteSearch.js.map +1 -1
  76. package/dist/node/build.d.ts +1 -1
  77. package/dist/node/build.d.ts.map +1 -1
  78. package/dist/node/build.js +105 -96
  79. package/dist/node/build.js.map +1 -1
  80. package/dist/node/buildCache.d.ts.map +1 -1
  81. package/dist/node/buildCache.js +7 -7
  82. package/dist/node/buildCache.js.map +1 -1
  83. package/dist/node/check.d.ts +1 -1
  84. package/dist/node/check.d.ts.map +1 -1
  85. package/dist/node/check.js +52 -52
  86. package/dist/node/check.js.map +1 -1
  87. package/dist/node/cli.js +61 -64
  88. package/dist/node/cli.js.map +1 -1
  89. package/dist/node/config-helpers.d.ts +4 -4
  90. package/dist/node/config-helpers.d.ts.map +1 -1
  91. package/dist/node/config-helpers.js +1 -1
  92. package/dist/node/config-helpers.js.map +1 -1
  93. package/dist/node/config.d.ts +4 -4
  94. package/dist/node/config.d.ts.map +1 -1
  95. package/dist/node/config.js +37 -40
  96. package/dist/node/config.js.map +1 -1
  97. package/dist/node/content.d.ts +4 -4
  98. package/dist/node/content.d.ts.map +1 -1
  99. package/dist/node/content.js +28 -28
  100. package/dist/node/content.js.map +1 -1
  101. package/dist/node/createContentLoader.d.ts +1 -1
  102. package/dist/node/createContentLoader.d.ts.map +1 -1
  103. package/dist/node/createContentLoader.js +3 -3
  104. package/dist/node/createContentLoader.js.map +1 -1
  105. package/dist/node/devCss.d.ts +1 -1
  106. package/dist/node/devCss.d.ts.map +1 -1
  107. package/dist/node/devCss.js +5 -6
  108. package/dist/node/devCss.js.map +1 -1
  109. package/dist/node/devSsr.d.ts +3 -3
  110. package/dist/node/devSsr.d.ts.map +1 -1
  111. package/dist/node/devSsr.js +32 -32
  112. package/dist/node/devSsr.js.map +1 -1
  113. package/dist/node/dynamicRoutes.d.ts +2 -2
  114. package/dist/node/dynamicRoutes.d.ts.map +1 -1
  115. package/dist/node/dynamicRoutes.js +24 -24
  116. package/dist/node/dynamicRoutes.js.map +1 -1
  117. package/dist/node/favicon.d.ts +2 -2
  118. package/dist/node/favicon.d.ts.map +1 -1
  119. package/dist/node/favicon.js +26 -24
  120. package/dist/node/favicon.js.map +1 -1
  121. package/dist/node/feed.d.ts +2 -2
  122. package/dist/node/feed.d.ts.map +1 -1
  123. package/dist/node/feed.js +18 -16
  124. package/dist/node/feed.js.map +1 -1
  125. package/dist/node/hooks.d.ts +2 -2
  126. package/dist/node/hooks.d.ts.map +1 -1
  127. package/dist/node/hooks.js +1 -1
  128. package/dist/node/hooks.js.map +1 -1
  129. package/dist/node/html.d.ts +8 -8
  130. package/dist/node/html.d.ts.map +1 -1
  131. package/dist/node/html.js +75 -64
  132. package/dist/node/html.js.map +1 -1
  133. package/dist/node/index.d.ts +11 -11
  134. package/dist/node/index.d.ts.map +1 -1
  135. package/dist/node/index.js +8 -8
  136. package/dist/node/index.js.map +1 -1
  137. package/dist/node/init.d.ts +2 -0
  138. package/dist/node/init.d.ts.map +1 -1
  139. package/dist/node/init.js +59 -27
  140. package/dist/node/init.js.map +1 -1
  141. package/dist/node/lastUpdated.d.ts +2 -2
  142. package/dist/node/lastUpdated.d.ts.map +1 -1
  143. package/dist/node/lastUpdated.js +7 -4
  144. package/dist/node/lastUpdated.js.map +1 -1
  145. package/dist/node/loadSiteModule.js +2 -2
  146. package/dist/node/loadSiteModule.js.map +1 -1
  147. package/dist/node/markdown.d.ts +2 -2
  148. package/dist/node/markdown.d.ts.map +1 -1
  149. package/dist/node/markdown.js +110 -110
  150. package/dist/node/markdown.js.map +1 -1
  151. package/dist/node/markdownHeadings.d.ts +1 -1
  152. package/dist/node/markdownHeadings.d.ts.map +1 -1
  153. package/dist/node/markdownHeadings.js +11 -11
  154. package/dist/node/markdownHeadings.js.map +1 -1
  155. package/dist/node/markdownInclude.d.ts.map +1 -1
  156. package/dist/node/markdownInclude.js +11 -11
  157. package/dist/node/markdownInclude.js.map +1 -1
  158. package/dist/node/markdownSnippets.d.ts.map +1 -1
  159. package/dist/node/markdownSnippets.js +34 -34
  160. package/dist/node/markdownSnippets.js.map +1 -1
  161. package/dist/node/mdx.d.ts +1 -1
  162. package/dist/node/mdx.d.ts.map +1 -1
  163. package/dist/node/mdx.js +4 -4
  164. package/dist/node/mdx.js.map +1 -1
  165. package/dist/node/packageRoot.d.ts.map +1 -1
  166. package/dist/node/packageRoot.js +4 -4
  167. package/dist/node/packageRoot.js.map +1 -1
  168. package/dist/node/pageDataLoaders.d.ts +2 -2
  169. package/dist/node/pageDataLoaders.d.ts.map +1 -1
  170. package/dist/node/pageDataLoaders.js +24 -20
  171. package/dist/node/pageDataLoaders.js.map +1 -1
  172. package/dist/node/paths.d.ts.map +1 -1
  173. package/dist/node/paths.js +4 -4
  174. package/dist/node/paths.js.map +1 -1
  175. package/dist/node/plugin.d.ts +3 -3
  176. package/dist/node/plugin.d.ts.map +1 -1
  177. package/dist/node/plugin.js +66 -66
  178. package/dist/node/plugin.js.map +1 -1
  179. package/dist/node/resolveDeps.js +10 -10
  180. package/dist/node/resolveDeps.js.map +1 -1
  181. package/dist/node/serve.d.ts.map +1 -1
  182. package/dist/node/serve.js +13 -15
  183. package/dist/node/serve.js.map +1 -1
  184. package/dist/node/server.d.ts +3 -3
  185. package/dist/node/server.d.ts.map +1 -1
  186. package/dist/node/server.js +28 -25
  187. package/dist/node/server.js.map +1 -1
  188. package/dist/node/siteConfig.d.ts +12 -12
  189. package/dist/node/siteConfig.d.ts.map +1 -1
  190. package/dist/node/tagIndex.d.ts +5 -5
  191. package/dist/node/tagIndex.d.ts.map +1 -1
  192. package/dist/node/tagIndex.js +10 -10
  193. package/dist/node/tagIndex.js.map +1 -1
  194. package/dist/shared/contentChunk.d.ts.map +1 -1
  195. package/dist/shared/contentChunk.js +6 -6
  196. package/dist/shared/contentChunk.js.map +1 -1
  197. package/dist/shared/contentSchema.d.ts.map +1 -1
  198. package/dist/shared/contentSchema.js +11 -11
  199. package/dist/shared/contentSchema.js.map +1 -1
  200. package/dist/shared/deadLinks.d.ts.map +1 -1
  201. package/dist/shared/deadLinks.js +6 -6
  202. package/dist/shared/deadLinks.js.map +1 -1
  203. package/dist/shared/escapeHtml.js +4 -4
  204. package/dist/shared/escapeHtml.js.map +1 -1
  205. package/dist/shared/index.d.ts +14 -14
  206. package/dist/shared/index.d.ts.map +1 -1
  207. package/dist/shared/index.js +14 -14
  208. package/dist/shared/index.js.map +1 -1
  209. package/dist/shared/locale.d.ts +1 -1
  210. package/dist/shared/locale.d.ts.map +1 -1
  211. package/dist/shared/locale.js +10 -10
  212. package/dist/shared/locale.js.map +1 -1
  213. package/dist/shared/pageChrome.d.ts +4 -4
  214. package/dist/shared/pageChrome.d.ts.map +1 -1
  215. package/dist/shared/pageChrome.js +21 -21
  216. package/dist/shared/pageChrome.js.map +1 -1
  217. package/dist/shared/pageHead.d.ts +1 -1
  218. package/dist/shared/pageHead.d.ts.map +1 -1
  219. package/dist/shared/pageHead.js +4 -4
  220. package/dist/shared/pageHead.js.map +1 -1
  221. package/dist/shared/pageMeta.d.ts +5 -5
  222. package/dist/shared/pageMeta.d.ts.map +1 -1
  223. package/dist/shared/pageMeta.js +15 -17
  224. package/dist/shared/pageMeta.js.map +1 -1
  225. package/dist/shared/rewrites.d.ts +1 -1
  226. package/dist/shared/rewrites.d.ts.map +1 -1
  227. package/dist/shared/rewrites.js +2 -2
  228. package/dist/shared/rewrites.js.map +1 -1
  229. package/dist/shared/route.js +5 -5
  230. package/dist/shared/route.js.map +1 -1
  231. package/dist/shared/scrollRestoration.d.ts +10 -0
  232. package/dist/shared/scrollRestoration.d.ts.map +1 -0
  233. package/dist/shared/scrollRestoration.js +66 -0
  234. package/dist/shared/scrollRestoration.js.map +1 -0
  235. package/dist/shared/search.d.ts +3 -3
  236. package/dist/shared/search.d.ts.map +1 -1
  237. package/dist/shared/search.js +18 -15
  238. package/dist/shared/search.js.map +1 -1
  239. package/dist/shared/sidebar.d.ts +1 -1
  240. package/dist/shared/sidebar.d.ts.map +1 -1
  241. package/dist/shared/sidebar.js +4 -4
  242. package/dist/shared/sidebar.js.map +1 -1
  243. package/dist/shared/slug.d.ts +1 -1
  244. package/dist/shared/slug.d.ts.map +1 -1
  245. package/dist/shared/slug.js +5 -5
  246. package/dist/shared/slug.js.map +1 -1
  247. package/dist/shared/socialIcons.d.ts.map +1 -1
  248. package/dist/shared/socialIcons.js +4 -4
  249. package/dist/shared/socialIcons.js.map +1 -1
  250. package/dist/shared/tags.js +8 -8
  251. package/dist/shared/tags.js.map +1 -1
  252. package/dist/shared/theme.d.ts +1 -1
  253. package/dist/shared/theme.d.ts.map +1 -1
  254. package/dist/shared/theme.js +16 -10
  255. package/dist/shared/theme.js.map +1 -1
  256. package/dist/shared/themeLabels.d.ts +1 -1
  257. package/dist/shared/themeLabels.d.ts.map +1 -1
  258. package/dist/shared/themeLabels.js +26 -26
  259. package/dist/shared/themeLabels.js.map +1 -1
  260. package/dist/shared/url.d.ts.map +1 -1
  261. package/dist/shared/url.js +3 -3
  262. package/dist/shared/url.js.map +1 -1
  263. package/package.json +33 -9
  264. package/src/client/app.tsx +111 -92
  265. package/src/client/entry-client.tsx +17 -19
  266. package/src/client/entry-ssr.tsx +33 -33
  267. package/src/client/index.ts +16 -2
  268. package/src/client/loadPage.ts +41 -38
  269. package/src/client/prefetchLinks.ts +30 -30
  270. package/src/client/theme-default/AlgoliaSearch.tsx +46 -46
  271. package/src/client/theme-default/Features.tsx +27 -21
  272. package/src/client/theme-default/Hero.tsx +22 -18
  273. package/src/client/theme-default/Layout.tsx +189 -244
  274. package/src/client/theme-default/Logo.tsx +30 -40
  275. package/src/client/theme-default/NavLinks.tsx +21 -21
  276. package/src/client/theme-default/SidebarNav.tsx +29 -29
  277. package/src/client/theme-default/SocialLinks.tsx +11 -11
  278. package/src/client/theme-default/ThemeToggle.tsx +2 -78
  279. package/src/client/theme-default/index.ts +1 -1
  280. package/src/client/theme-default/styles.css +30 -21
  281. package/src/client/theme-utils.tsx +184 -0
  282. package/src/client/types.ts +30 -24
  283. package/src/client/usePageHead.ts +128 -128
  284. package/src/client/useSiteSearch.ts +34 -34
  285. package/src/client/virtual.d.ts +76 -76
  286. package/src/shared/contentChunk.ts +6 -6
  287. package/src/shared/contentSchema.ts +52 -49
  288. package/src/shared/deadLinks.ts +16 -16
  289. package/src/shared/escapeHtml.ts +5 -5
  290. package/src/shared/index.ts +21 -25
  291. package/src/shared/locale.ts +46 -46
  292. package/src/shared/pageChrome.ts +123 -123
  293. package/src/shared/pageHead.ts +16 -16
  294. package/src/shared/pageMeta.ts +79 -79
  295. package/src/shared/rewrites.ts +14 -16
  296. package/src/shared/route.ts +7 -7
  297. package/src/shared/scrollRestoration.ts +70 -0
  298. package/src/shared/search.ts +56 -52
  299. package/src/shared/sidebar.ts +28 -28
  300. package/src/shared/slug.ts +13 -13
  301. package/src/shared/socialIcons.ts +12 -14
  302. package/src/shared/tags.ts +20 -20
  303. package/src/shared/theme.ts +22 -13
  304. package/src/shared/themeLabels.ts +45 -45
  305. package/src/shared/url.ts +6 -10
  306. package/templates/default/.preactpress/config.ts +17 -17
  307. package/templates/default/README.md +16 -16
  308. package/templates/default/guide/first-five-minutes.md +21 -21
  309. package/templates/default/index.html +1 -1
  310. package/templates/default/index.md +9 -9
  311. package/templates/default/package.json +1 -1
  312. package/templates/default/pnpm-lock.yaml +5 -5
  313. package/templates/docs/.preactpress/config.ts +76 -56
  314. package/templates/docs/README.md +6 -6
  315. package/templates/docs/components/BenefitsGrid.tsx +45 -0
  316. package/templates/docs/components/CliBlock.tsx +38 -0
  317. package/templates/docs/components/ComparisonTable.tsx +60 -0
  318. package/templates/docs/components/CopyableCommand.tsx +86 -0
  319. package/templates/docs/components/Counter.tsx +7 -5
  320. package/templates/docs/components/MarketingHero.tsx +63 -0
  321. package/templates/docs/components/MdxDemo.tsx +96 -0
  322. package/templates/docs/components/References.tsx +62 -0
  323. package/templates/docs/components/TemplateGallery.tsx +46 -0
  324. package/templates/docs/components/marketing.css +992 -0
  325. package/templates/docs/examples/algolia-docsearch.md +33 -0
  326. package/templates/docs/examples/content-loader.data.ts +11 -0
  327. package/templates/docs/examples/content-loader.md +29 -0
  328. package/templates/docs/examples/dynamic-routes.md +16 -0
  329. package/templates/docs/examples/static-assets.md +13 -0
  330. package/templates/docs/guide/advanced.md +4 -4
  331. package/templates/docs/guide/commands.md +10 -10
  332. package/templates/docs/guide/configuration.md +43 -43
  333. package/templates/docs/guide/creating-pages.md +60 -39
  334. package/templates/docs/guide/custom-themes.md +9 -9
  335. package/templates/docs/guide/deploy.md +29 -29
  336. package/templates/docs/guide/first-five-minutes.md +22 -22
  337. package/templates/docs/guide/getting-started.md +29 -31
  338. package/templates/docs/guide/markdown-and-mdx.md +1 -1
  339. package/templates/docs/guide/routing.md +40 -40
  340. package/templates/docs/guide/what-is-preactpress.md +18 -18
  341. package/templates/docs/index.html +1 -1
  342. package/templates/docs/index.mdx +25 -0
  343. package/templates/docs/interactive.mdx +1 -1
  344. package/templates/docs/markdown-examples.md +73 -21
  345. package/templates/docs/package.json +1 -1
  346. package/templates/docs/packages/[pkg].md +15 -0
  347. package/templates/docs/packages/[pkg].paths.ts +20 -0
  348. package/templates/docs/parts/include-body.md +1 -0
  349. package/templates/docs/pnpm-lock.yaml +5 -5
  350. package/templates/docs/public/preactpress-example.txt +1 -0
  351. package/templates/docs/snippets/greet.ts +1 -1
  352. package/templates/hono/.preactpress/config.ts +65 -65
  353. package/templates/hono/.preactpress/theme/CodeSnippet.tsx +15 -15
  354. package/templates/hono/.preactpress/theme/FeatureGrid.tsx +7 -7
  355. package/templates/hono/.preactpress/theme/Hero.tsx +13 -13
  356. package/templates/hono/.preactpress/theme/Layout.tsx +122 -164
  357. package/templates/hono/.preactpress/theme/Logo.tsx +6 -6
  358. package/templates/hono/.preactpress/theme/ThemeToggle.tsx +3 -70
  359. package/templates/hono/.preactpress/theme/hono.css +31 -14
  360. package/templates/hono/README.md +17 -15
  361. package/templates/hono/components/Counter.tsx +7 -5
  362. package/templates/hono/de/guide/configuration.md +18 -20
  363. package/templates/hono/de/guide/deploy.md +29 -29
  364. package/templates/hono/de/guide/first-five-minutes.md +21 -21
  365. package/templates/hono/de/guide/getting-started.md +29 -29
  366. package/templates/hono/de/guide/routing.md +26 -25
  367. package/templates/hono/de/guide/seiten-erstellen.md +39 -39
  368. package/templates/hono/de/guide/what-is-preactpress.md +18 -18
  369. package/templates/hono/de/index.mdx +20 -17
  370. package/templates/hono/de/interactive.mdx +1 -1
  371. package/templates/hono/de/markdown-examples.md +6 -6
  372. package/templates/hono/de/parts/include-body.md +1 -0
  373. package/templates/hono/de/snippets/greet.ts +1 -1
  374. package/templates/hono/guide/configuration.md +25 -25
  375. package/templates/hono/guide/creating-pages.md +39 -39
  376. package/templates/hono/guide/deploy.md +29 -29
  377. package/templates/hono/guide/first-five-minutes.md +21 -21
  378. package/templates/hono/guide/getting-started.md +29 -29
  379. package/templates/hono/guide/routing.md +40 -40
  380. package/templates/hono/guide/what-is-preactpress.md +18 -18
  381. package/templates/hono/index.html +1 -1
  382. package/templates/hono/index.mdx +21 -17
  383. package/templates/hono/interactive.mdx +1 -1
  384. package/templates/hono/markdown-examples.md +6 -6
  385. package/templates/hono/package.json +1 -1
  386. package/templates/hono/parts/include-body.md +1 -0
  387. package/templates/hono/pnpm-lock.yaml +5 -5
  388. package/templates/hono/snippets/greet.ts +1 -1
  389. package/templates/magazine/.preactpress/config.ts +19 -19
  390. package/templates/magazine/.preactpress/theme/Layout.tsx +69 -172
  391. package/templates/magazine/.preactpress/theme/TeaserGrid.tsx +14 -14
  392. package/templates/magazine/.preactpress/theme/ThemeToggle.tsx +4 -70
  393. package/templates/magazine/.preactpress/theme/magazine.css +13 -8
  394. package/templates/magazine/README.md +30 -0
  395. package/templates/magazine/article-markets.md +2 -2
  396. package/templates/magazine/article-tech.mdx +10 -10
  397. package/templates/magazine/index.data.ts +9 -9
  398. package/templates/magazine/index.html +5 -1
  399. package/templates/magazine/index.mdx +1 -1
  400. package/templates/magazine/package.json +1 -1
  401. package/templates/magazine/pnpm-lock.yaml +2917 -0
  402. package/templates/docs/about.md +0 -10
  403. package/templates/docs/dist/404.html +0 -29
  404. package/templates/docs/dist/about/index.html +0 -32
  405. package/templates/docs/dist/assets/esm-DzlBxN5p.js +0 -110
  406. package/templates/docs/dist/assets/interactive-64o6YwrR.js +0 -9
  407. package/templates/docs/dist/assets/interactive-BedCloEw.js +0 -9
  408. package/templates/docs/dist/assets/main-BVLeh8GO.js +0 -1
  409. package/templates/docs/dist/assets/main-CreUBb3N.js +0 -1
  410. package/templates/docs/dist/assets/main-oodK-zZy.css +0 -2
  411. package/templates/docs/dist/de/guide/getting-started/index.html +0 -36
  412. package/templates/docs/dist/de/guide/what-is-preactpress/index.html +0 -38
  413. package/templates/docs/dist/de/index.html +0 -29
  414. package/templates/docs/dist/favicon-32.png +0 -0
  415. package/templates/docs/dist/favicon.png +0 -0
  416. package/templates/docs/dist/favicon.svg +0 -28
  417. package/templates/docs/dist/guide/advanced/index.html +0 -53
  418. package/templates/docs/dist/guide/commands/index.html +0 -89
  419. package/templates/docs/dist/guide/configuration/index.html +0 -196
  420. package/templates/docs/dist/guide/creating-pages/index.html +0 -234
  421. package/templates/docs/dist/guide/custom-themes/index.html +0 -52
  422. package/templates/docs/dist/guide/default-theme/index.html +0 -53
  423. package/templates/docs/dist/guide/deploy/index.html +0 -195
  424. package/templates/docs/dist/guide/first-five-minutes/index.html +0 -99
  425. package/templates/docs/dist/guide/getting-started/index.html +0 -173
  426. package/templates/docs/dist/guide/markdown-and-mdx/index.html +0 -59
  427. package/templates/docs/dist/guide/routing/index.html +0 -192
  428. package/templates/docs/dist/guide/what-is-preactpress/index.html +0 -141
  429. package/templates/docs/dist/index.html +0 -30
  430. package/templates/docs/dist/interactive/index.html +0 -37
  431. package/templates/docs/dist/markdown-examples/index.html +0 -231
  432. package/templates/docs/dist/preactpress-content/404.json +0 -8
  433. package/templates/docs/dist/preactpress-content/_index.json +0 -50
  434. package/templates/docs/dist/preactpress-content/about.json +0 -15
  435. package/templates/docs/dist/preactpress-content/de.json +0 -45
  436. package/templates/docs/dist/preactpress-content/de__guide__getting-started.json +0 -26
  437. package/templates/docs/dist/preactpress-content/de__guide__what-is-preactpress.json +0 -21
  438. package/templates/docs/dist/preactpress-content/guide__advanced.json +0 -46
  439. package/templates/docs/dist/preactpress-content/guide__commands.json +0 -26
  440. package/templates/docs/dist/preactpress-content/guide__configuration.json +0 -51
  441. package/templates/docs/dist/preactpress-content/guide__creating-pages.json +0 -71
  442. package/templates/docs/dist/preactpress-content/guide__custom-themes.json +0 -15
  443. package/templates/docs/dist/preactpress-content/guide__default-theme.json +0 -36
  444. package/templates/docs/dist/preactpress-content/guide__deploy.json +0 -56
  445. package/templates/docs/dist/preactpress-content/guide__first-five-minutes.json +0 -36
  446. package/templates/docs/dist/preactpress-content/guide__getting-started.json +0 -51
  447. package/templates/docs/dist/preactpress-content/guide__markdown-and-mdx.json +0 -31
  448. package/templates/docs/dist/preactpress-content/guide__routing.json +0 -71
  449. package/templates/docs/dist/preactpress-content/guide__what-is-preactpress.json +0 -51
  450. package/templates/docs/dist/preactpress-content/markdown-examples.json +0 -71
  451. package/templates/docs/dist/preactpress-content/tags__markdown.json +0 -16
  452. package/templates/docs/dist/preactpress-search.json +0 -166
  453. package/templates/docs/dist/preactpress-theme.js +0 -1
  454. package/templates/docs/dist/tags/markdown/index.html +0 -32
  455. package/templates/docs/index.md +0 -28
  456. package/templates/hono/dist/404.html +0 -29
  457. package/templates/hono/dist/README/index.html +0 -104
  458. package/templates/hono/dist/about/index.html +0 -32
  459. package/templates/hono/dist/assets/Counter-CCEByS-J.js +0 -1
  460. package/templates/hono/dist/assets/Hero--o6WMNvm.js +0 -2
  461. package/templates/hono/dist/assets/de-D5r6Ye70.js +0 -10
  462. package/templates/hono/dist/assets/hono-BXWYYdyv.js +0 -10
  463. package/templates/hono/dist/assets/interactive-Bxo-WBpC.js +0 -9
  464. package/templates/hono/dist/assets/interactive-BznI4IQ3.js +0 -9
  465. package/templates/hono/dist/assets/main-Bqi-VFEk.js +0 -2
  466. package/templates/hono/dist/assets/main-DIIN7FO0.css +0 -1
  467. package/templates/hono/dist/de/about/index.html +0 -32
  468. package/templates/hono/dist/de/guide/commands/index.html +0 -41
  469. package/templates/hono/dist/de/guide/configuration/index.html +0 -105
  470. package/templates/hono/dist/de/guide/deploy/index.html +0 -195
  471. package/templates/hono/dist/de/guide/first-five-minutes/index.html +0 -99
  472. package/templates/hono/dist/de/guide/getting-started/index.html +0 -173
  473. package/templates/hono/dist/de/guide/routing/index.html +0 -165
  474. package/templates/hono/dist/de/guide/seiten-erstellen/index.html +0 -234
  475. package/templates/hono/dist/de/guide/what-is-preactpress/index.html +0 -141
  476. package/templates/hono/dist/de/index.html +0 -30
  477. package/templates/hono/dist/de/interactive/index.html +0 -37
  478. package/templates/hono/dist/de/markdown-examples/index.html +0 -97
  479. package/templates/hono/dist/de/parts/include-body/index.html +0 -36
  480. package/templates/hono/dist/de/tags/markdown/index.html +0 -32
  481. package/templates/hono/dist/favicon-32.png +0 -0
  482. package/templates/hono/dist/favicon.png +0 -0
  483. package/templates/hono/dist/favicon.svg +0 -28
  484. package/templates/hono/dist/guide/commands/index.html +0 -41
  485. package/templates/hono/dist/guide/configuration/index.html +0 -158
  486. package/templates/hono/dist/guide/creating-pages/index.html +0 -234
  487. package/templates/hono/dist/guide/deploy/index.html +0 -195
  488. package/templates/hono/dist/guide/first-five-minutes/index.html +0 -99
  489. package/templates/hono/dist/guide/getting-started/index.html +0 -173
  490. package/templates/hono/dist/guide/routing/index.html +0 -165
  491. package/templates/hono/dist/guide/what-is-preactpress/index.html +0 -141
  492. package/templates/hono/dist/index.html +0 -30
  493. package/templates/hono/dist/interactive/index.html +0 -37
  494. package/templates/hono/dist/markdown-examples/index.html +0 -105
  495. package/templates/hono/dist/partials/shared-note/index.html +0 -30
  496. package/templates/hono/dist/parts/include-body/index.html +0 -36
  497. package/templates/hono/dist/preactpress-content/404.json +0 -8
  498. package/templates/hono/dist/preactpress-content/README.json +0 -26
  499. package/templates/hono/dist/preactpress-content/about.json +0 -15
  500. package/templates/hono/dist/preactpress-content/de__about.json +0 -15
  501. package/templates/hono/dist/preactpress-content/de__guide__commands.json +0 -36
  502. package/templates/hono/dist/preactpress-content/de__guide__configuration.json +0 -41
  503. package/templates/hono/dist/preactpress-content/de__guide__deploy.json +0 -56
  504. package/templates/hono/dist/preactpress-content/de__guide__first-five-minutes.json +0 -36
  505. package/templates/hono/dist/preactpress-content/de__guide__getting-started.json +0 -51
  506. package/templates/hono/dist/preactpress-content/de__guide__routing.json +0 -61
  507. package/templates/hono/dist/preactpress-content/de__guide__seiten-erstellen.json +0 -71
  508. package/templates/hono/dist/preactpress-content/de__guide__what-is-preactpress.json +0 -51
  509. package/templates/hono/dist/preactpress-content/de__markdown-examples.json +0 -131
  510. package/templates/hono/dist/preactpress-content/de__parts__include-body.json +0 -16
  511. package/templates/hono/dist/preactpress-content/de__tags__markdown.json +0 -16
  512. package/templates/hono/dist/preactpress-content/guide__commands.json +0 -36
  513. package/templates/hono/dist/preactpress-content/guide__configuration.json +0 -51
  514. package/templates/hono/dist/preactpress-content/guide__creating-pages.json +0 -71
  515. package/templates/hono/dist/preactpress-content/guide__deploy.json +0 -56
  516. package/templates/hono/dist/preactpress-content/guide__first-five-minutes.json +0 -36
  517. package/templates/hono/dist/preactpress-content/guide__getting-started.json +0 -51
  518. package/templates/hono/dist/preactpress-content/guide__routing.json +0 -61
  519. package/templates/hono/dist/preactpress-content/guide__what-is-preactpress.json +0 -51
  520. package/templates/hono/dist/preactpress-content/markdown-examples.json +0 -141
  521. package/templates/hono/dist/preactpress-content/partials__shared-note.json +0 -10
  522. package/templates/hono/dist/preactpress-content/parts__include-body.json +0 -16
  523. package/templates/hono/dist/preactpress-content/tags__markdown.json +0 -16
  524. package/templates/hono/dist/preactpress-search.json +0 -242
  525. package/templates/hono/dist/preactpress-theme.js +0 -1
  526. package/templates/hono/dist/tags/markdown/index.html +0 -32
@@ -1,90 +1,28 @@
1
- import type { ComponentChildren, FunctionalComponent, JSX } from 'preact'
2
- import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks'
3
- import type { LayoutProps } from '../types.js'
4
- import { slugifyTagSegment, tagIndexPageRoute } from '../../shared/tags.js'
5
- import { slugifySegment } from '../../shared/slug.js'
6
- import { filterHeadingsForOutline, resolvePageChrome } from '../../shared/pageChrome.js'
7
- import { resolvePageHeadMeta, titleTemplateFromMeta } from '../../shared/pageMeta.js'
8
- import { flattenSidebarLeafItems, resolveSidebarForRoute } from '../../shared/sidebar.js'
9
- import { resolveThemeLabels } from '../../shared/themeLabels.js'
1
+ import type { FunctionalComponent } from "preact";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks";
3
+ import type { LayoutProps } from "../types.js";
4
+ import { slugifyTagSegment, tagIndexPageRoute } from "../../shared/tags.js";
5
+ import { filterHeadingsForOutline, resolvePageChrome } from "../../shared/pageChrome.js";
6
+ import { resolvePageHeadMeta, titleTemplateFromMeta } from "../../shared/pageMeta.js";
7
+ import { flattenSidebarLeafItems, resolveSidebarForRoute } from "../../shared/sidebar.js";
8
+ import { resolveThemeLabels } from "../../shared/themeLabels.js";
10
9
  import {
11
10
  algoliaOptionsFromSearch,
12
11
  isAlgoliaSearchEnabled,
13
12
  isLocalSearchEnabled,
14
- resolveAlgoliaOptions
15
- } from '../../shared/search.js'
16
- import { useSiteSearch } from '../useSiteSearch.js'
17
- import AlgoliaSearch from './AlgoliaSearch.js'
18
- import Features from './Features.js'
19
- import Hero from './Hero.js'
20
- import Logo from './Logo.js'
21
- import NavLinks from './NavLinks.js'
22
- import SidebarNav from './SidebarNav.js'
23
- import SocialLinks from './SocialLinks.js'
24
- import ThemeToggle from './ThemeToggle.js'
25
- import './styles.css'
26
-
27
- function withBase(base: string, link: string): string {
28
- if (/^https?:\/\//.test(link)) return link
29
- const b = base === '/' ? '' : base.replace(/\/$/, '')
30
- const l = link.startsWith('/') ? link : `/${link}`
31
- return `${b}${l}`
32
- }
33
-
34
- function normalizeLink(link: string): string {
35
- const clean = link.split(/[?#]/, 1)[0] || '/'
36
- const prefixed = clean.startsWith('/') ? clean : `/${clean}`
37
- return prefixed.replace(/\/$/, '') || '/'
38
- }
39
-
40
- function isActive(routePath: string, link: string): boolean {
41
- const route = normalizeLink(routePath)
42
- const target = normalizeLink(link)
43
- return route === target || (target !== '/' && route.startsWith(`${target}/`))
44
- }
45
-
46
- function classNames(...values: Array<string | undefined | false>): string {
47
- return values.filter(Boolean).join(' ')
48
- }
49
-
50
- function childText(children: ComponentChildren): string {
51
- if (children == null || typeof children === 'boolean') return ''
52
- if (typeof children === 'string' || typeof children === 'number') return String(children)
53
- if (Array.isArray(children)) return children.map(childText).join('')
54
- if (typeof children === 'object' && 'props' in children) {
55
- return childText(children.props.children as ComponentChildren)
56
- }
57
- return ''
58
- }
59
-
60
- function slugify(text: string): string {
61
- return slugifySegment(text)
62
- }
63
-
64
- function createMdxHeadingComponents() {
65
- const used = new Map<string, number>()
66
- const heading =
67
- (Tag: 'h2' | 'h3') =>
68
- ({ children, ...props }: JSX.HTMLAttributes<HTMLHeadingElement>) => {
69
- const base = slugify(childText(children))
70
- const count = used.get(base) ?? 0
71
- used.set(base, count + 1)
72
- const id = count === 0 ? base : `${base}-${count + 1}`
73
- return (
74
- <Tag {...props} id={id} class={`pp-heading ${props.class ?? ''}`.trim()}>
75
- {children}
76
- <a class="pp-heading-anchor" href={`#${id}`} aria-label="Link to this section">
77
- #
78
- </a>
79
- </Tag>
80
- )
81
- }
82
-
83
- return {
84
- h2: heading('h2'),
85
- h3: heading('h3')
86
- }
87
- }
13
+ resolveAlgoliaOptions,
14
+ } from "../../shared/search.js";
15
+ import { useSiteSearch } from "../useSiteSearch.js";
16
+ import { classNames, createMdxHeadingComponents, isActive, withBase } from "../theme-utils.js";
17
+ import AlgoliaSearch from "./AlgoliaSearch.js";
18
+ import Features from "./Features.js";
19
+ import Hero from "./Hero.js";
20
+ import Logo from "./Logo.js";
21
+ import NavLinks from "./NavLinks.js";
22
+ import SidebarNav from "./SidebarNav.js";
23
+ import SocialLinks from "./SocialLinks.js";
24
+ import ThemeToggle from "./ThemeToggle.js";
25
+ import "./styles.css";
88
26
 
89
27
  const Layout: FunctionalComponent<LayoutProps> = ({
90
28
  site,
@@ -92,7 +30,7 @@ const Layout: FunctionalComponent<LayoutProps> = ({
92
30
  routePath,
93
31
  page,
94
32
  i18n,
95
- locale
33
+ locale,
96
34
  }) => {
97
35
  const { title } = resolvePageHeadMeta(
98
36
  page
@@ -101,79 +39,88 @@ const Layout: FunctionalComponent<LayoutProps> = ({
101
39
  titleTemplate: titleTemplateFromMeta(page.meta),
102
40
  description: page.description,
103
41
  kind: page.kind,
104
- html: page.kind === 'markdown' ? page.html : undefined
42
+ html: page.kind === "markdown" ? page.html : undefined,
105
43
  }
106
44
  : undefined,
107
- site
108
- )
109
- const labels = resolveThemeLabels(site.lang, themeConfig.labels)
110
- const localSearch = isLocalSearchEnabled(themeConfig.search)
111
- const algoliaSearch = isAlgoliaSearchEnabled(themeConfig.search)
45
+ site,
46
+ );
47
+ const labels = resolveThemeLabels(site.lang, themeConfig.labels);
48
+ const localSearch = isLocalSearchEnabled(themeConfig.search);
49
+ const algoliaSearch = isAlgoliaSearchEnabled(themeConfig.search);
112
50
  const algoliaOptions = algoliaSearch
113
51
  ? resolveAlgoliaOptions(algoliaOptionsFromSearch(themeConfig.search)!, locale?.key)
114
- : undefined
115
- const [query, setQuery] = useState('')
116
- const [activeHeading, setActiveHeading] = useState<string | undefined>()
117
- const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
118
- const menuButtonRef = useRef<HTMLButtonElement>(null)
119
- const drawerRef = useRef<HTMLElement>(null)
120
- const activeSidebar = resolveSidebarForRoute(themeConfig.sidebar, routePath, i18n)
121
- const sidebarItems = activeSidebar.flatMap((group) => flattenSidebarLeafItems(group.items))
122
- const normalizedQuery = query.trim().toLowerCase()
123
- const searchResults = useSiteSearch(site.base, query, locale?.key)
52
+ : undefined;
53
+ const [query, setQuery] = useState("");
54
+ const [activeHeading, setActiveHeading] = useState<string | undefined>();
55
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
56
+ const menuButtonRef = useRef<HTMLButtonElement>(null);
57
+ const drawerRef = useRef<HTMLElement>(null);
58
+ const activeSidebar = resolveSidebarForRoute(themeConfig.sidebar, routePath, i18n);
59
+ const sidebarItems = activeSidebar.flatMap((group) => flattenSidebarLeafItems(group.items));
60
+ const normalizedQuery = query.trim().toLowerCase();
61
+ const searchResults = useSiteSearch(site.base, query, locale?.key);
124
62
  const visibleSidebar = useMemo(() => {
125
- if (!normalizedQuery || searchResults.length > 0) return activeSidebar
126
- const filterItems = (items: typeof activeSidebar[0]['items']): typeof items => {
63
+ if (!normalizedQuery || searchResults.length > 0) return activeSidebar;
64
+ const filterItems = (items: (typeof activeSidebar)[0]["items"]): typeof items => {
127
65
  return items
128
66
  .map((item) => {
129
- const nested = item.items?.length ? filterItems(item.items) : undefined
130
- const selfMatch = item.text.toLowerCase().includes(normalizedQuery)
131
- if (nested?.length) return { ...item, items: nested }
132
- if (selfMatch) return item
133
- return null
67
+ const nested = item.items?.length ? filterItems(item.items) : undefined;
68
+ const selfMatch = item.text.toLowerCase().includes(normalizedQuery);
69
+ if (nested?.length) return { ...item, items: nested };
70
+ if (selfMatch) return item;
71
+ return null;
134
72
  })
135
- .filter((item): item is NonNullable<typeof item> => Boolean(item))
136
- }
73
+ .filter((item): item is NonNullable<typeof item> => Boolean(item));
74
+ };
137
75
  return activeSidebar
138
76
  .map((group) => ({ ...group, items: filterItems(group.items) }))
139
- .filter((group) => group.items.length > 0)
140
- }, [normalizedQuery, searchResults.length, activeSidebar])
141
- const activeIndex = sidebarItems.findIndex((item) => isActive(routePath, item.link))
142
- const previous = activeIndex > 0 ? sidebarItems[activeIndex - 1] : undefined
77
+ .filter((group) => group.items.length > 0);
78
+ }, [normalizedQuery, searchResults.length, activeSidebar]);
79
+ const activeIndex = sidebarItems.findIndex((item) => isActive(routePath, item.link));
80
+ const previous = activeIndex > 0 ? sidebarItems[activeIndex - 1] : undefined;
143
81
  const next =
144
82
  activeIndex >= 0 && activeIndex < sidebarItems.length - 1
145
83
  ? sidebarItems[activeIndex + 1]
146
- : undefined
147
- const chrome = resolvePageChrome(page?.meta, themeConfig)
84
+ : undefined;
85
+ const chrome = resolvePageChrome(page?.meta, themeConfig);
148
86
  const outlineKey =
149
- chrome.outlineLevels === false ? 'false' : `${chrome.outlineLevels[0]}:${chrome.outlineLevels[1]}`
87
+ chrome.outlineLevels === false
88
+ ? "false"
89
+ : `${chrome.outlineLevels[0]}:${chrome.outlineLevels[1]}`;
150
90
  const outlineHeadings = useMemo(
151
91
  () => filterHeadingsForOutline(page?.headings ?? [], chrome.outlineLevels),
152
- [page?.headings, outlineKey]
153
- )
154
- const showOutline = chrome.showAside && outlineHeadings.length > 0
155
- const pageTags = page?.tags ?? []
156
- const showTags =
157
- themeConfig.tags !== false && pageTags.length > 0 && !Boolean(page?.meta.tagIndex)
158
- const MdxComponent = page?.kind === 'mdx' ? page.Component : undefined
159
- const mdxComponents = useMemo(createMdxHeadingComponents, [routePath, MdxComponent])
92
+ [page?.headings, outlineKey],
93
+ );
94
+ const showOutline = chrome.showAside && outlineHeadings.length > 0;
95
+ const pageTags = page?.tags ?? [];
96
+ const showTags = themeConfig.tags !== false && pageTags.length > 0 && !page?.meta.tagIndex;
97
+ const MdxComponent = page?.kind === "mdx" ? page.Component : undefined;
98
+ const mdxComponents = useMemo(
99
+ () =>
100
+ createMdxHeadingComponents({
101
+ headingClass: "pp-heading",
102
+ anchorClass: "pp-heading-anchor",
103
+ anchorLabel: "Link to this section",
104
+ }),
105
+ [routePath, MdxComponent],
106
+ );
160
107
  const editHref =
161
108
  chrome.showEditLink && themeConfig.editLink && page?.relativePath
162
109
  ? themeConfig.editLink.pattern.replace(/:path/g, page.relativePath)
163
- : undefined
110
+ : undefined;
164
111
  const lastUpdated = page?.lastUpdated
165
112
  ? new Date(page.lastUpdated).toLocaleDateString(site.lang, {
166
- year: 'numeric',
167
- month: 'short',
168
- day: 'numeric'
169
- })
170
- : undefined
171
- const showPageHeader = !(chrome.isHome && chrome.hero)
172
- const articleClass = classNames('pp-doc', `pp-doc-${chrome.layout}`, chrome.pageClass)
173
- const contentClass = chrome.markdownStyles ? 'pp-doc-content' : 'pp-doc-content-plain'
113
+ year: "numeric",
114
+ month: "short",
115
+ day: "numeric",
116
+ })
117
+ : undefined;
118
+ const showPageHeader = !(chrome.isHome && chrome.hero);
119
+ const articleClass = classNames("pp-doc", `pp-doc-${chrome.layout}`, chrome.pageClass);
120
+ const contentClass = chrome.markdownStyles ? "pp-doc-content" : "pp-doc-content-plain";
174
121
  const outline = showOutline ? (
175
122
  <aside
176
- class={classNames('pp-outline', chrome.aside === 'left' && 'pp-outline-left')}
123
+ class={classNames("pp-outline", chrome.aside === "left" && "pp-outline-left")}
177
124
  aria-label={labels.onThisPage}
178
125
  >
179
126
  <div class="pp-outline-heading">{labels.onThisPage}</div>
@@ -181,7 +128,7 @@ const Layout: FunctionalComponent<LayoutProps> = ({
181
128
  {outlineHeadings.map((heading) => (
182
129
  <a
183
130
  key={heading.id}
184
- class={`level-${heading.level}${activeHeading === heading.id ? ' active' : ''}`}
131
+ class={`level-${heading.level}${activeHeading === heading.id ? " active" : ""}`}
185
132
  href={`#${heading.id}`}
186
133
  >
187
134
  {heading.text}
@@ -189,147 +136,142 @@ const Layout: FunctionalComponent<LayoutProps> = ({
189
136
  ))}
190
137
  </nav>
191
138
  </aside>
192
- ) : null
139
+ ) : null;
193
140
 
194
141
  const closeMobileMenu = useCallback((restoreFocus = true) => {
195
- setMobileMenuOpen(false)
142
+ setMobileMenuOpen(false);
196
143
  if (restoreFocus) {
197
- requestAnimationFrame(() => menuButtonRef.current?.focus())
144
+ requestAnimationFrame(() => menuButtonRef.current?.focus());
198
145
  }
199
- }, [])
146
+ }, []);
200
147
 
201
148
  useEffect(() => {
202
- setQuery('')
203
- setMobileMenuOpen(false)
204
- }, [routePath])
149
+ setQuery("");
150
+ setMobileMenuOpen(false);
151
+ }, [routePath]);
205
152
 
206
153
  useEffect(() => {
207
- if (!mobileMenuOpen) return
154
+ if (!mobileMenuOpen) return;
208
155
 
209
- const previousOverflow = document.body.style.overflow
210
- document.body.style.overflow = 'hidden'
156
+ const previousOverflow = document.body.style.overflow;
157
+ document.body.style.overflow = "hidden";
211
158
  const focusableSelector = [
212
- 'a[href]',
213
- 'button:not([disabled])',
214
- 'input:not([disabled])',
215
- 'summary',
216
- '[tabindex]:not([tabindex="-1"])'
217
- ].join(',')
159
+ "a[href]",
160
+ "button:not([disabled])",
161
+ "input:not([disabled])",
162
+ "summary",
163
+ '[tabindex]:not([tabindex="-1"])',
164
+ ].join(",");
218
165
  const focusFirst = () => {
219
- const focusable = drawerRef.current?.querySelectorAll<HTMLElement>(focusableSelector)
220
- focusable?.[0]?.focus()
221
- }
166
+ const focusable = drawerRef.current?.querySelectorAll<HTMLElement>(focusableSelector);
167
+ focusable?.[0]?.focus();
168
+ };
222
169
  const onKeyDown = (event: KeyboardEvent) => {
223
- if (event.key === 'Escape') {
224
- event.preventDefault()
225
- closeMobileMenu()
226
- return
170
+ if (event.key === "Escape") {
171
+ event.preventDefault();
172
+ closeMobileMenu();
173
+ return;
227
174
  }
228
- if (event.key !== 'Tab') return
175
+ if (event.key !== "Tab") return;
229
176
 
230
177
  const focusable = Array.from(
231
- drawerRef.current?.querySelectorAll<HTMLElement>(focusableSelector) ?? []
232
- ).filter((element) => !element.hasAttribute('disabled'))
178
+ drawerRef.current?.querySelectorAll<HTMLElement>(focusableSelector) ?? [],
179
+ ).filter((element) => !element.hasAttribute("disabled"));
233
180
  if (!focusable.length) {
234
- event.preventDefault()
235
- return
181
+ event.preventDefault();
182
+ return;
236
183
  }
237
- const first = focusable[0]
238
- const last = focusable[focusable.length - 1]
184
+ const first = focusable[0];
185
+ const last = focusable[focusable.length - 1];
239
186
  if (event.shiftKey && document.activeElement === first) {
240
- event.preventDefault()
241
- last.focus()
187
+ event.preventDefault();
188
+ last.focus();
242
189
  } else if (!event.shiftKey && document.activeElement === last) {
243
- event.preventDefault()
244
- first.focus()
190
+ event.preventDefault();
191
+ first.focus();
245
192
  }
246
- }
247
- const media = window.matchMedia('(max-width: 900px)')
193
+ };
194
+ const media = window.matchMedia("(max-width: 900px)");
248
195
  const onBreakpointChange = (event: MediaQueryListEvent) => {
249
- if (!event.matches) closeMobileMenu(false)
250
- }
196
+ if (!event.matches) closeMobileMenu(false);
197
+ };
251
198
 
252
- requestAnimationFrame(focusFirst)
253
- document.addEventListener('keydown', onKeyDown)
254
- media.addEventListener('change', onBreakpointChange)
199
+ requestAnimationFrame(focusFirst);
200
+ document.addEventListener("keydown", onKeyDown);
201
+ media.addEventListener("change", onBreakpointChange);
255
202
  return () => {
256
- document.body.style.overflow = previousOverflow
257
- document.removeEventListener('keydown', onKeyDown)
258
- media.removeEventListener('change', onBreakpointChange)
259
- }
260
- }, [closeMobileMenu, mobileMenuOpen])
203
+ document.body.style.overflow = previousOverflow;
204
+ document.removeEventListener("keydown", onKeyDown);
205
+ media.removeEventListener("change", onBreakpointChange);
206
+ };
207
+ }, [closeMobileMenu, mobileMenuOpen]);
261
208
 
262
209
  useEffect(() => {
263
210
  if (!showOutline || !outlineHeadings.length) {
264
- setActiveHeading(undefined)
265
- return
211
+ setActiveHeading(undefined);
212
+ return;
266
213
  }
267
214
  const update = () => {
268
215
  const visible = outlineHeadings
269
216
  .map((heading) => document.getElementById(heading.id))
270
217
  .filter((el): el is HTMLElement => Boolean(el))
271
- .filter((el) => el.getBoundingClientRect().top <= 96)
272
- setActiveHeading(visible.at(-1)?.id ?? outlineHeadings[0]?.id)
273
- }
274
- update()
275
- window.addEventListener('scroll', update, { passive: true })
276
- return () => window.removeEventListener('scroll', update)
277
- }, [outlineHeadings, showOutline])
218
+ .filter((el) => el.getBoundingClientRect().top <= 96);
219
+ setActiveHeading(visible.at(-1)?.id ?? outlineHeadings[0]?.id);
220
+ };
221
+ update();
222
+ window.addEventListener("scroll", update, { passive: true });
223
+ return () => window.removeEventListener("scroll", update);
224
+ }, [outlineHeadings, showOutline]);
278
225
 
279
226
  return (
280
- <div class={classNames('pp-layout', !chrome.showNavbar && 'pp-layout-no-nav')}>
227
+ <div class={classNames("pp-layout", !chrome.showNavbar && "pp-layout-no-nav")}>
281
228
  <a class="pp-skip-link" href="#content">
282
229
  {labels.skip}
283
230
  </a>
284
231
  {chrome.showNavbar ? (
285
232
  <header class="pp-nav">
286
- <div class="pp-nav-inner">
287
- <a class="pp-title" href={withBase(site.base, '/')} aria-label={site.title}>
288
- <Logo
289
- class="pp-logo"
290
- label={site.title}
291
- src={themeConfig.logo}
292
- base={site.base}
293
- />
294
- </a>
295
- <div class="pp-nav-right">
296
- <div class="pp-nav-desktop">
297
- <nav class="pp-nav-links" aria-label={labels.navigation}>
298
- <NavLinks
299
- items={themeConfig.nav ?? []}
300
- routePath={routePath}
301
- base={site.base}
302
- isActive={isActive}
303
- withBase={withBase}
304
- />
305
- </nav>
306
- {themeConfig.socialLinks?.length ? (
307
- <SocialLinks links={themeConfig.socialLinks} />
233
+ <div class="pp-nav-inner">
234
+ <a class="pp-title" href={withBase(site.base, "/")} aria-label={site.title}>
235
+ <Logo class="pp-logo" label={site.title} src={themeConfig.logo} base={site.base} />
236
+ </a>
237
+ <div class="pp-nav-right">
238
+ <div class="pp-nav-desktop">
239
+ <nav class="pp-nav-links" aria-label={labels.navigation}>
240
+ <NavLinks
241
+ items={themeConfig.nav ?? []}
242
+ routePath={routePath}
243
+ base={site.base}
244
+ isActive={isActive}
245
+ withBase={withBase}
246
+ />
247
+ </nav>
248
+ {themeConfig.socialLinks?.length ? (
249
+ <SocialLinks links={themeConfig.socialLinks} />
250
+ ) : null}
251
+ </div>
252
+ {algoliaSearch && algoliaOptions ? (
253
+ <AlgoliaSearch options={algoliaOptions} base={site.base} />
308
254
  ) : null}
255
+ <ThemeToggle />
256
+ <button
257
+ ref={menuButtonRef}
258
+ type="button"
259
+ class="pp-menu-toggle"
260
+ aria-label={labels.menu}
261
+ aria-expanded={mobileMenuOpen}
262
+ aria-controls="pp-mobile-drawer"
263
+ onClick={() => setMobileMenuOpen(true)}
264
+ >
265
+ <span aria-hidden="true" />
266
+ <span aria-hidden="true" />
267
+ <span aria-hidden="true" />
268
+ </button>
309
269
  </div>
310
- {algoliaSearch && algoliaOptions ? (
311
- <AlgoliaSearch options={algoliaOptions} base={site.base} />
312
- ) : null}
313
- <ThemeToggle />
314
- <button
315
- ref={menuButtonRef}
316
- type="button"
317
- class="pp-menu-toggle"
318
- aria-label={labels.menu}
319
- aria-expanded={mobileMenuOpen}
320
- aria-controls="pp-mobile-drawer"
321
- onClick={() => setMobileMenuOpen(true)}
322
- >
323
- <span aria-hidden="true" />
324
- <span aria-hidden="true" />
325
- <span aria-hidden="true" />
326
- </button>
327
270
  </div>
328
- </div>
329
271
  </header>
330
272
  ) : null}
331
273
  {chrome.showNavbar ? (
332
- <div class={`pp-mobile-menu${mobileMenuOpen ? ' open' : ''}`}>
274
+ <div class={`pp-mobile-menu${mobileMenuOpen ? " open" : ""}`}>
333
275
  <button
334
276
  type="button"
335
277
  class="pp-mobile-overlay"
@@ -444,16 +386,14 @@ const Layout: FunctionalComponent<LayoutProps> = ({
444
386
  </details>
445
387
  </aside>
446
388
  ) : null}
447
- {chrome.aside === 'left' ? outline : null}
389
+ {chrome.aside === "left" ? outline : null}
448
390
  <main id="content" class="pp-main" tabIndex={-1} aria-live="polite">
449
391
  <article class={articleClass}>
450
392
  {chrome.hero ? <Hero hero={chrome.hero} base={site.base} /> : null}
451
393
  {showPageHeader ? (
452
394
  <>
453
395
  <h1 class="pp-doc-title">{page?.title ?? title}</h1>
454
- {page?.description ? (
455
- <p class="pp-doc-lead">{page.description}</p>
456
- ) : null}
396
+ {page?.description ? <p class="pp-doc-lead">{page.description}</p> : null}
457
397
  </>
458
398
  ) : null}
459
399
  {showTags ? (
@@ -462,7 +402,10 @@ const Layout: FunctionalComponent<LayoutProps> = ({
462
402
  <li key={tag}>
463
403
  <a
464
404
  class="pp-tag-chip"
465
- href={withBase(site.base, tagIndexPageRoute(slugifyTagSegment(tag), locale?.prefix))}
405
+ href={withBase(
406
+ site.base,
407
+ tagIndexPageRoute(slugifyTagSegment(tag), locale?.prefix),
408
+ )}
466
409
  >
467
410
  {tag}
468
411
  </a>
@@ -480,7 +423,7 @@ const Layout: FunctionalComponent<LayoutProps> = ({
480
423
  ) : (
481
424
  <div
482
425
  class={contentClass}
483
- dangerouslySetInnerHTML={{ __html: page?.kind === 'markdown' ? page.html : '' }}
426
+ dangerouslySetInnerHTML={{ __html: page?.kind === "markdown" ? page.html : "" }}
484
427
  />
485
428
  )}
486
429
  {chrome.showPager && (previous || next) ? (
@@ -504,22 +447,24 @@ const Layout: FunctionalComponent<LayoutProps> = ({
504
447
  {(chrome.showLastUpdated && lastUpdated) || editHref ? (
505
448
  <footer class="pp-doc-meta">
506
449
  {chrome.showLastUpdated && lastUpdated ? (
507
- <span>{labels.lastUpdated} {lastUpdated}</span>
450
+ <span>
451
+ {labels.lastUpdated} {lastUpdated}
452
+ </span>
508
453
  ) : null}
509
454
  {editHref ? (
510
- <a href={editHref}>{themeConfig.editLink?.text ?? 'Edit this page'}</a>
455
+ <a href={editHref}>{themeConfig.editLink?.text ?? "Edit this page"}</a>
511
456
  ) : null}
512
457
  </footer>
513
458
  ) : null}
514
459
  </article>
515
460
  </main>
516
- {chrome.aside !== 'left' ? outline : null}
461
+ {chrome.aside !== "left" ? outline : null}
517
462
  </div>
518
463
  {chrome.showFooter && themeConfig.footer ? (
519
464
  <footer class="pp-footer">{themeConfig.footer}</footer>
520
465
  ) : null}
521
466
  </div>
522
- )
523
- }
467
+ );
468
+ };
524
469
 
525
- export default Layout
470
+ export default Layout;