@publish.os/nextjs 0.0.1-alpha.90 → 0.0.1-alpha.92

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 (284) hide show
  1. package/compiler-assets/nextjs/defaults/group/index.tsx +16 -11
  2. package/compiler-assets/nextjs/defaults/group/layout.tsx +6 -6
  3. package/compiler-assets/nextjs/defaults/group/page.tsx +36 -26
  4. package/compiler-assets/nextjs/defaults/project/next.config.mjs +21 -11
  5. package/compiler-assets/nextjs/defaults/project/tsconfig.json.template +10 -0
  6. package/compiler-assets/nextjs/defaults/root/css/components/code-block.css +18 -0
  7. package/compiler-assets/nextjs/defaults/root/index.tsx +16 -11
  8. package/compiler-assets/nextjs/defaults/root/layout.tsx +7 -3
  9. package/compiler-assets/nextjs/shims/agent-user-agents.ts +65 -0
  10. package/compiler-assets/nextjs/shims/document.tsx +46 -0
  11. package/compiler-assets/nextjs/shims/generated-leaf-page.tsx +5 -0
  12. package/compiler-assets/nextjs/shims/global-layout.tsx +8 -42
  13. package/compiler-assets/nextjs/shims/global-not-found.tsx +69 -0
  14. package/compiler-assets/nextjs/shims/markdown-route.ts +2 -0
  15. package/compiler-assets/nextjs/shims/metadata-icons.tsx +39 -0
  16. package/compiler-assets/nextjs/shims/not-found-content.tsx +53 -0
  17. package/compiler-assets/nextjs/shims/not-found-navigation.tsx +60 -0
  18. package/compiler-assets/nextjs/shims/proxy.ts +254 -86
  19. package/compiler-assets/nextjs/shims/site-fenced-code-block.tsx +2 -6
  20. package/compiler-assets/nextjs/shims/site-mdx-components.tsx +28 -16
  21. package/compiler-assets/nextjs/shims/site-mdx.tsx +6 -1
  22. package/dist/{build-operation-2JAYBSKF.js → build-operation-CJDUL4OW.js} +29 -23
  23. package/dist/{button-c3WGnxIj.d.ts → button-D6Xp2HBm.d.ts} +4 -4
  24. package/dist/capture-local-source-WGGDIUU2.js +258 -0
  25. package/dist/chunk-22RSSUNV.js +13 -0
  26. package/dist/chunk-3T4HVDSC.js +426 -0
  27. package/dist/{chunk-WKTEO6RS.js → chunk-4BC2L2KA.js} +46 -12
  28. package/dist/{chunk-WDY4IK6Z.js → chunk-5J3YUNRY.js} +3 -10
  29. package/dist/chunk-5KAD7W53.js +248 -0
  30. package/dist/{chunk-DWA3ZRGW.js → chunk-6C65KV7O.js} +2 -2
  31. package/dist/{chunk-GGKFQ3MA.js → chunk-6D2E6UMD.js} +144 -70
  32. package/dist/{chunk-7OGTPSKI.js → chunk-7NY22B5U.js} +8 -3
  33. package/dist/chunk-DX7PXFCM.js +2519 -0
  34. package/dist/{chunk-726GV2NF.js → chunk-DZ3VWEV5.js} +950 -632
  35. package/dist/chunk-EFO6AWXN.js +19 -0
  36. package/dist/chunk-IL4RJOKI.js +186 -0
  37. package/dist/{chunk-H6XILMZX.js → chunk-NHSLTARU.js} +2588 -1493
  38. package/dist/{chunk-DLDFHU7Y.js → chunk-NNBJZPFM.js} +4 -2
  39. package/dist/{chunk-VO2I7MTM.js → chunk-SBMDONTV.js} +10 -7
  40. package/dist/{chunk-YLTOLYWM.js → chunk-WL75GQ5M.js} +6 -18
  41. package/dist/compiler.d.ts +15 -2
  42. package/dist/compiler.js +111 -23
  43. package/dist/components/blocks/agent-actions.d.ts +81 -0
  44. package/dist/components/blocks/agent-actions.js +563 -0
  45. package/dist/components/blocks/toc.d.ts +43 -0
  46. package/dist/components/blocks/toc.js +136 -0
  47. package/dist/components/ui/button.d.ts +4 -0
  48. package/dist/components/ui/button.js +94 -0
  49. package/dist/compose-44GJSMXD.js +16 -0
  50. package/dist/config/createNextConfig.js +19 -3
  51. package/dist/{dev-operation-TZDVJCN7.js → dev-operation-WNECBHZ5.js} +134 -84
  52. package/dist/{framework-selection-X4U6Y6QC.js → framework-selection-ZVO323PK.js} +3 -2
  53. package/dist/ide-support-TG74L4FF.js +16 -0
  54. package/dist/index.d.ts +151 -95
  55. package/dist/index.js +25 -0
  56. package/dist/jsx-dev-runtime.d.ts +6 -0
  57. package/dist/jsx-dev-runtime.js +100 -0
  58. package/dist/jsx-runtime.d.ts +7 -0
  59. package/dist/jsx-runtime.js +97 -0
  60. package/dist/kernel/components/blocks/AgentActions.d.ts +37 -8
  61. package/dist/kernel/components/blocks/AgentActions.js +384 -174
  62. package/dist/kernel/components/blocks/agent-actions.d.ts +4 -0
  63. package/dist/kernel/components/blocks/agent-actions.js +563 -0
  64. package/dist/kernel/components/blocks/animated-icon-swap.d.ts +2 -2
  65. package/dist/kernel/components/blocks/animated-icon-swap.js +1 -1
  66. package/dist/kernel/components/blocks/color-palette.d.ts +2 -2
  67. package/dist/kernel/components/blocks/color-palette.js +4 -4
  68. package/dist/kernel/components/blocks/logo-block.d.ts +2 -2
  69. package/dist/kernel/components/blocks/logo-block.js +1 -1
  70. package/dist/kernel/components/blocks/nav-breadcrumb.d.ts +6 -5
  71. package/dist/kernel/components/blocks/nav-breadcrumb.js +21 -15
  72. package/dist/kernel/components/blocks/navbar.d.ts +5 -4
  73. package/dist/kernel/components/blocks/navbar.js +79 -59
  74. package/dist/kernel/components/blocks/navigation-progress.d.ts +2 -2
  75. package/dist/kernel/components/blocks/navigation-progress.js +2 -2
  76. package/dist/kernel/components/blocks/next-prev.d.ts +4 -4
  77. package/dist/kernel/components/blocks/next-prev.js +30 -7
  78. package/dist/kernel/components/blocks/page-list.d.ts +4 -4
  79. package/dist/kernel/components/blocks/page-list.js +32 -9
  80. package/dist/kernel/components/blocks/search.d.ts +9 -15
  81. package/dist/kernel/components/blocks/search.js +16 -17
  82. package/dist/kernel/components/blocks/sidebar-node.d.ts +3 -5
  83. package/dist/kernel/components/blocks/sidebar-node.js +13 -3
  84. package/dist/kernel/components/blocks/sidebar.d.ts +6 -7
  85. package/dist/kernel/components/blocks/sidebar.js +137 -28
  86. package/dist/kernel/components/blocks/theme-toggle.d.ts +3 -4
  87. package/dist/kernel/components/blocks/theme-toggle.js +5 -5
  88. package/dist/kernel/components/blocks/toc-client.d.ts +40 -0
  89. package/dist/kernel/components/blocks/toc-client.js +495 -0
  90. package/dist/kernel/components/blocks/toc.d.ts +20 -2
  91. package/dist/kernel/components/blocks/toc.js +121 -179
  92. package/dist/kernel/components/mdx/components/blockquote.d.ts +2 -2
  93. package/dist/kernel/components/mdx/components/blockquote.js +1 -1
  94. package/dist/kernel/components/mdx/components/callout.d.ts +3 -3
  95. package/dist/kernel/components/mdx/components/callout.js +1 -1
  96. package/dist/kernel/components/mdx/components/code-block.d.ts +2 -2
  97. package/dist/kernel/components/mdx/components/code-block.js +2 -2
  98. package/dist/kernel/components/mdx/components/copy-code-button.d.ts +2 -2
  99. package/dist/kernel/components/mdx/components/copy-code-button.js +5 -4
  100. package/dist/kernel/components/mdx/components/figure-caption.d.ts +3 -3
  101. package/dist/kernel/components/mdx/components/figure-caption.js +3 -2
  102. package/dist/kernel/components/mdx/components/figure.d.ts +8 -4
  103. package/dist/kernel/components/mdx/components/figure.js +23 -13
  104. package/dist/kernel/components/mdx/components/footnotes.d.ts +2 -2
  105. package/dist/kernel/components/mdx/components/footnotes.js +1 -1
  106. package/dist/kernel/components/mdx/components/heading-copy-link.d.ts +2 -2
  107. package/dist/kernel/components/mdx/components/heading-copy-link.js +1 -1
  108. package/dist/kernel/components/mdx/components/heading.d.ts +2 -2
  109. package/dist/kernel/components/mdx/components/heading.js +6 -3
  110. package/dist/kernel/components/mdx/components/hr.d.ts +4 -4
  111. package/dist/kernel/components/mdx/components/hr.js +2 -2
  112. package/dist/kernel/components/mdx/components/image-zoom.d.ts +3 -3
  113. package/dist/kernel/components/mdx/components/image-zoom.js +4 -3
  114. package/dist/kernel/components/mdx/components/image.d.ts +2 -2
  115. package/dist/kernel/components/mdx/components/image.js +22 -17
  116. package/dist/kernel/components/mdx/components/inline-code.d.ts +2 -2
  117. package/dist/kernel/components/mdx/components/inline-code.js +1 -1
  118. package/dist/kernel/components/mdx/components/kbd.d.ts +3 -3
  119. package/dist/kernel/components/mdx/components/kbd.js +2 -2
  120. package/dist/kernel/components/mdx/components/link.d.ts +6 -6
  121. package/dist/kernel/components/mdx/components/link.js +2 -2
  122. package/dist/kernel/components/mdx/components/paragraph.d.ts +2 -2
  123. package/dist/kernel/components/mdx/components/paragraph.js +1 -1
  124. package/dist/kernel/components/mdx/components/strikethrough.d.ts +2 -2
  125. package/dist/kernel/components/mdx/components/strikethrough.js +1 -1
  126. package/dist/kernel/components/mdx/components/table.d.ts +7 -7
  127. package/dist/kernel/components/mdx/components/table.js +2 -2
  128. package/dist/kernel/components/mdx/components/task-list.d.ts +3 -3
  129. package/dist/kernel/components/mdx/components/task-list.js +1 -1
  130. package/dist/kernel/components/mdx/components/video-player.d.ts +8 -4
  131. package/dist/kernel/components/mdx/components/video-player.js +6 -2
  132. package/dist/kernel/components/mdx/components/video.d.ts +5 -4
  133. package/dist/kernel/components/mdx/components/video.js +7 -5
  134. package/dist/kernel/components/mdx/error-boundary.d.ts +3 -4
  135. package/dist/kernel/components/mdx/error-boundary.js +2 -2
  136. package/dist/kernel/components/mdx/error-fallback.d.ts +2 -2
  137. package/dist/kernel/components/mdx/error-fallback.js +1 -1
  138. package/dist/kernel/components/mdx/mdx.d.ts +57 -16
  139. package/dist/kernel/components/mdx/mdx.js +232 -35
  140. package/dist/kernel/components/mdx/rehype-heading-ids.d.ts +1 -0
  141. package/dist/kernel/components/mdx/rehype-heading-ids.js +5 -3
  142. package/dist/kernel/components/mdx/types.d.ts +1 -1
  143. package/dist/kernel/components/next-image.d.ts +12 -0
  144. package/dist/kernel/components/next-image.js +61 -0
  145. package/dist/kernel/components/ui/accordion.d.ts +7 -7
  146. package/dist/kernel/components/ui/accordion.js +1 -1
  147. package/dist/kernel/components/ui/breadcrumb-trail.d.ts +3 -4
  148. package/dist/kernel/components/ui/breadcrumb-trail.js +2 -2
  149. package/dist/kernel/components/ui/breadcrumb.d.ts +14 -14
  150. package/dist/kernel/components/ui/breadcrumb.js +4 -4
  151. package/dist/kernel/components/ui/button-group.d.ts +6 -6
  152. package/dist/kernel/components/ui/button-group.js +3 -3
  153. package/dist/kernel/components/ui/button.d.ts +59 -7
  154. package/dist/kernel/components/ui/button.js +43 -39
  155. package/dist/kernel/components/ui/card.d.ts +7 -7
  156. package/dist/kernel/components/ui/card.js +1 -1
  157. package/dist/kernel/components/ui/dialog.d.ts +10 -10
  158. package/dist/kernel/components/ui/dialog.js +1 -1
  159. package/dist/kernel/components/ui/drawer.d.ts +12 -12
  160. package/dist/kernel/components/ui/drawer.js +1 -1
  161. package/dist/kernel/components/ui/input.d.ts +2 -2
  162. package/dist/kernel/components/ui/input.js +1 -1
  163. package/dist/kernel/components/ui/kbd.d.ts +4 -4
  164. package/dist/kernel/components/ui/kbd.js +1 -1
  165. package/dist/kernel/components/ui/link.d.ts +11 -5
  166. package/dist/kernel/components/ui/link.js +2 -2
  167. package/dist/kernel/components/ui/menu.d.ts +22 -22
  168. package/dist/kernel/components/ui/menu.js +1 -1
  169. package/dist/kernel/components/ui/mod-key.d.ts +2 -3
  170. package/dist/kernel/components/ui/mod-key.js +2 -2
  171. package/dist/kernel/components/ui/navigation-menu.d.ts +15 -15
  172. package/dist/kernel/components/ui/navigation-menu.js +1 -1
  173. package/dist/kernel/components/ui/popover.d.ts +11 -11
  174. package/dist/kernel/components/ui/popover.js +1 -1
  175. package/dist/kernel/components/ui/progress.d.ts +7 -7
  176. package/dist/kernel/components/ui/progress.js +1 -1
  177. package/dist/kernel/components/ui/scroll-area.d.ts +9 -10
  178. package/dist/kernel/components/ui/scroll-area.js +1 -1
  179. package/dist/kernel/components/ui/select.d.ts +16 -16
  180. package/dist/kernel/components/ui/select.js +1 -1
  181. package/dist/kernel/components/ui/separator.d.ts +3 -3
  182. package/dist/kernel/components/ui/separator.js +1 -1
  183. package/dist/kernel/components/ui/table.d.ts +7 -7
  184. package/dist/kernel/components/ui/table.js +1 -1
  185. package/dist/kernel/components/ui/tabs.d.ts +12 -12
  186. package/dist/kernel/components/ui/tabs.js +1 -1
  187. package/dist/kernel/components/ui/tag.d.ts +3 -3
  188. package/dist/kernel/components/ui/tag.js +1 -1
  189. package/dist/kernel/components/ui/text.d.ts +4 -4
  190. package/dist/kernel/components/ui/text.js +1 -1
  191. package/dist/kernel/components/ui/toast.d.ts +11 -11
  192. package/dist/kernel/components/ui/toast.js +1 -1
  193. package/dist/kernel/components/ui/tooltip.d.ts +9 -9
  194. package/dist/kernel/components/ui/tooltip.js +1 -1
  195. package/dist/kernel/defaults.registry.d.ts +4 -17
  196. package/dist/kernel/defaults.registry.js +4 -19
  197. package/dist/kernel/routes/agent/markdown.d.ts +7 -0
  198. package/dist/kernel/routes/agent/markdown.js +229 -54
  199. package/dist/kernel/routes/layouts/group.d.ts +1 -1
  200. package/dist/kernel/routes/layouts/group.js +5 -7
  201. package/dist/kernel/routes/metadata/feed.d.ts +1 -2
  202. package/dist/kernel/routes/metadata/feed.js +119 -88
  203. package/dist/kernel/routes/metadata/llms.d.ts +3 -23
  204. package/dist/kernel/routes/metadata/llms.js +2 -103
  205. package/dist/kernel/routes/metadata/og-image.js +1 -1
  206. package/dist/kernel/routes/metadata/robots.d.ts +5 -3
  207. package/dist/kernel/routes/metadata/robots.js +4 -25
  208. package/dist/kernel/routes/metadata/sitemap.d.ts +36 -3
  209. package/dist/kernel/routes/metadata/sitemap.js +277 -49
  210. package/dist/kernel/routes/not-found.d.ts +34 -0
  211. package/dist/kernel/routes/not-found.js +213 -0
  212. package/dist/kernel/routes/pages/group.d.ts +5 -5
  213. package/dist/kernel/routes/pages/group.js +11 -5
  214. package/dist/kernel/routes/pages/leaf.d.ts +38 -6
  215. package/dist/kernel/routes/pages/leaf.js +21 -12
  216. package/dist/kernel/routes/pages/root.d.ts +5 -5
  217. package/dist/kernel/routes/pages/root.js +21 -6
  218. package/dist/keyboard-shortcuts.d.ts +2 -2
  219. package/dist/keyboard-shortcuts.js +1 -1
  220. package/dist/manifest-types-CcVPH_jh.d.ts +83 -0
  221. package/dist/resolvers/manifest-resolver.d.ts +2 -2
  222. package/dist/resolvers/manifest-resolver.js +65 -35
  223. package/dist/route-metadata-og-image-BeKKFHg7.d.ts +58 -0
  224. package/dist/search.d.ts +2 -9
  225. package/dist/search.js +9 -16
  226. package/dist/sidebar-types-CMrMM0Nj.d.ts +105 -0
  227. package/dist/theme-scope.d.ts +2 -2
  228. package/dist/theme-scope.js +1 -1
  229. package/dist/types-BbqmOzLC.d.ts +168 -0
  230. package/dist/types-TjH1ek0X.d.ts +22 -0
  231. package/dist/types-sM2g9nW0.d.ts +12 -0
  232. package/dist/types.d.ts +117 -91
  233. package/dist/utils/heading-ids.js +30 -11
  234. package/dist/utils/toc-selection.d.ts +7 -0
  235. package/dist/utils/toc-selection.js +14 -0
  236. package/dist/validate-local-source-EN2GW4FR.js +16 -0
  237. package/dist/validate-publish-os-source-OEWQDB7B.js +14 -0
  238. package/init/seed/minimal/publish.os/assets/blog/hello-world.svg +13 -0
  239. package/init/seed/minimal/publish.os/assets/favicon.dark.svg +13 -0
  240. package/init/seed/minimal/publish.os/assets/favicon.svg +13 -0
  241. package/init/seed/minimal/publish.os/blog/content/hello-world.mdx +48 -0
  242. package/init/seed/minimal/publish.os/blog/content/series-a.mdx +11 -0
  243. package/init/seed/minimal/publish.os/blog/index.tsx +85 -0
  244. package/init/seed/minimal/publish.os/blog/layout.tsx +13 -0
  245. package/init/seed/minimal/publish.os/blog/page.tsx +91 -0
  246. package/init/seed/minimal/publish.os/components/blog/copy-link.tsx +64 -0
  247. package/init/seed/minimal/publish.os/components/blog/frontmatter.ts +41 -0
  248. package/init/seed/minimal/publish.os/docs/content/get-started.mdx +2 -3
  249. package/init/seed/minimal/publish.os/docs/content/groups.mdx +5 -6
  250. package/init/seed/minimal/publish.os/publish.os.config.json +17 -2
  251. package/init/seed/minimal/publish.os/theme.css +3 -3
  252. package/init/seed/minimal/seed.json +12 -4
  253. package/init/seed/scratch/publish.os/docs/content/get-started.mdx +1 -1
  254. package/init/seed/scratch/publish.os/publish.os.config.json +1 -1
  255. package/package.json +48 -23
  256. package/release/app/phosphor/package.json +4 -4
  257. package/release/app/phosphor/pnpm-lock.yaml.template +123 -184
  258. package/release/compiler/package.json +5 -3
  259. package/release/compiler/pnpm-lock.yaml.template +153 -183
  260. package/release/release.json +6 -6
  261. package/dist/button-CtzUJB8u.d.ts +0 -11
  262. package/dist/chunk-535TM4A5.js +0 -1455
  263. package/dist/chunk-B2V22WRT.js +0 -297
  264. package/dist/chunk-NECL5IBJ.js +0 -318
  265. package/dist/chunk-SVYGXXYR.js +0 -36
  266. package/dist/chunk-UF6ATARM.js +0 -1100
  267. package/dist/compose-NN23UJGC.js +0 -13
  268. package/dist/ide-support-ZNW7ODFY.js +0 -15
  269. package/dist/kernel/components/blocks/design-system-preview.d.ts +0 -61
  270. package/dist/kernel/components/blocks/design-system-preview.js +0 -667
  271. package/dist/kernel/components/blocks/link-playground.d.ts +0 -5
  272. package/dist/kernel/components/blocks/link-playground.js +0 -744
  273. package/dist/kernel/components/blocks/navigation-progress-playground.d.ts +0 -5
  274. package/dist/kernel/components/blocks/navigation-progress-playground.js +0 -629
  275. package/dist/kernel/components/ui/theme-toggle.d.ts +0 -24
  276. package/dist/kernel/components/ui/theme-toggle.js +0 -53
  277. package/dist/sidebar-types-DKpR27II.d.ts +0 -25
  278. package/dist/types-BzkZty3r.d.ts +0 -147
  279. package/dist/types-CJWRG05y.d.ts +0 -76
  280. package/dist/types-CUtrppxt.d.ts +0 -69
  281. package/dist/validate-local-source-XRL2Y7XE.js +0 -14
  282. package/dist/validate-publish-os-source-DAPZ4QGE.js +0 -12
  283. package/init/seed/minimal/publish.os/assets/favicon/favicon.dark.png +0 -0
  284. package/init/seed/minimal/publish.os/assets/favicon/favicon.png +0 -0
@@ -0,0 +1,91 @@
1
+ import { CopyLink } from "@components/blog/copy-link";
2
+ import { authoredDate, authorNames } from "@components/blog/frontmatter";
3
+ import { Link } from "@components/ui/link";
4
+ import { CaretLeftIcon } from "@phosphor-icons/react/ssr";
5
+ import { MDX } from "@publish.os/nextjs/mdx";
6
+ import type { PageProps } from "@publish.os/nextjs/types";
7
+ import { prettyDate } from "@publish.os/nextjs/utils/pretty-date";
8
+ import Image from "next/image";
9
+
10
+ type BlogMeta = {
11
+ authors?: unknown;
12
+ image?: { src: string; alt: string };
13
+ publishedAt?: unknown;
14
+ };
15
+
16
+ export default function BlogLeaf({ page }: PageProps<BlogMeta>) {
17
+ const authors = authorNames(page.frontmatter.authors);
18
+ const publishedAt = authoredDate(page.frontmatter.publishedAt);
19
+ const date = prettyDate(publishedAt);
20
+ const image = page.frontmatter.image;
21
+ const cover =
22
+ image &&
23
+ typeof image === "object" &&
24
+ typeof image.src === "string" &&
25
+ typeof image.alt === "string"
26
+ ? image
27
+ : undefined;
28
+
29
+ return (
30
+ <div className="flex min-h-0 min-w-0 flex-1 flex-col px-4 pt-6 md:px-5 lg:px-6 lg:pt-8">
31
+ <nav aria-label="Blog" className="mb-8 lg:mb-12">
32
+ <Link
33
+ className="-ms-2 inline-flex min-h-11 items-center px-2 text-foreground-3 hover:text-foreground-1"
34
+ href="/blog"
35
+ leftIcon={
36
+ <CaretLeftIcon
37
+ aria-hidden="true"
38
+ className="size-3.5 shrink-0 rtl:rotate-180"
39
+ />
40
+ }
41
+ size="sm"
42
+ >
43
+ Blog
44
+ </Link>
45
+ </nav>
46
+ <article className="mx-auto flex min-w-0 w-full max-w-4xl flex-1 flex-col wrap-anywhere">
47
+ <header>
48
+ <div className="mx-auto w-full max-w-2xl">
49
+ <h1 className="text-balance text-center text-4xl font-medium leading-tight tracking-tight text-foreground-1 md:text-5xl">
50
+ {page.frontmatter.title}
51
+ </h1>
52
+ </div>
53
+ {cover ? (
54
+ <Image
55
+ alt={cover.alt}
56
+ className="mt-10 aspect-2/1 w-full rounded-media border border-stroke-3 object-cover"
57
+ height={800}
58
+ priority
59
+ sizes="(max-width: 896px) 100vw, 896px"
60
+ src={cover.src}
61
+ width={1600}
62
+ />
63
+ ) : null}
64
+ <div className="mx-auto w-full max-w-2xl">
65
+ {page.frontmatter.description ? (
66
+ <p className="mt-12 text-pretty text-center text-base italic leading-7 text-foreground-2">
67
+ {page.frontmatter.description}
68
+ </p>
69
+ ) : null}
70
+ <hr className="my-10 border-stroke-3" />
71
+ </div>
72
+ </header>
73
+ <div className="mx-auto flex w-full max-w-2xl flex-1 flex-col">
74
+ <div className="markdown-prose min-w-0 flex-1">
75
+ <MDX page={page} />
76
+ </div>
77
+ <div className="mx-auto mt-12 mb-24 flex w-full max-w-2xl flex-wrap items-center justify-between gap-3 border-t border-stroke-3 pt-6">
78
+ {authors || date ? (
79
+ <p className="flex flex-wrap items-baseline gap-x-1.5 text-sm text-foreground-3">
80
+ {authors ? <span>{authors}</span> : null}
81
+ {authors && date ? <span aria-hidden="true">·</span> : null}
82
+ {date ? <time dateTime={publishedAt}>{date}</time> : null}
83
+ </p>
84
+ ) : null}
85
+ <CopyLink className="ms-auto" path={page.path} />
86
+ </div>
87
+ </div>
88
+ </article>
89
+ </div>
90
+ );
91
+ }
@@ -0,0 +1,64 @@
1
+ "use client";
2
+
3
+ import { Link } from "@components/ui/link";
4
+ import { LinkSimpleIcon } from "@phosphor-icons/react/ssr";
5
+ import { useState } from "react";
6
+
7
+ export function CopyLink({
8
+ className,
9
+ path,
10
+ }: {
11
+ className?: string;
12
+ path: string;
13
+ }) {
14
+ const [status, setStatus] = useState<"idle" | "pending" | "copied" | "error">(
15
+ "idle",
16
+ );
17
+
18
+ async function copyLink() {
19
+ setStatus("pending");
20
+ try {
21
+ await navigator.clipboard.writeText(
22
+ new URL(path, window.location.origin).href,
23
+ );
24
+ setStatus("copied");
25
+ } catch {
26
+ setStatus("error");
27
+ }
28
+ }
29
+
30
+ return (
31
+ <div className={className}>
32
+ <Link
33
+ aria-busy={status === "pending" || undefined}
34
+ className="inline-flex min-h-11 items-center text-foreground-3 hover:text-foreground-1 motion-safe:active:scale-[0.96]"
35
+ href={path}
36
+ leftIcon={<LinkSimpleIcon aria-hidden="true" />}
37
+ onClick={(event) => {
38
+ if (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)
39
+ return;
40
+ event.preventDefault();
41
+ if (status !== "pending") void copyLink();
42
+ }}
43
+ prefetch={false}
44
+ size="xs"
45
+ >
46
+ Copy link
47
+ </Link>
48
+ <p
49
+ className={
50
+ status === "error"
51
+ ? "mt-2 max-w-60 text-sm text-foreground-2"
52
+ : "sr-only"
53
+ }
54
+ role="status"
55
+ >
56
+ {status === "copied"
57
+ ? "Link copied."
58
+ : status === "error"
59
+ ? "Could not copy. Try again, or copy the address from your browser."
60
+ : ""}
61
+ </p>
62
+ </div>
63
+ );
64
+ }
@@ -0,0 +1,41 @@
1
+ export function authorNames(value: unknown): string {
2
+ if (!Array.isArray(value)) return "";
3
+ return value
4
+ .flatMap((author: unknown) => {
5
+ if (typeof author === "string") return [author];
6
+ if (
7
+ author &&
8
+ typeof author === "object" &&
9
+ "name" in author &&
10
+ typeof author.name === "string"
11
+ ) {
12
+ return [author.name];
13
+ }
14
+ return [];
15
+ })
16
+ .join(", ");
17
+ }
18
+
19
+ export function stringList(value: unknown): string {
20
+ return Array.isArray(value)
21
+ ? value
22
+ .filter((item): item is string => typeof item === "string")
23
+ .join(", ")
24
+ : "";
25
+ }
26
+
27
+ export function authoredDate(value: unknown): string | undefined {
28
+ if (typeof value !== "string") return undefined;
29
+ if (
30
+ !/^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2}))?$/.test(
31
+ value,
32
+ )
33
+ )
34
+ return undefined;
35
+ const timestamp = Date.parse(value);
36
+ if (!Number.isFinite(timestamp)) return undefined;
37
+ const day = value.slice(0, 10);
38
+ if (new Date(`${day}T00:00:00Z`).toISOString().slice(0, 10) !== day)
39
+ return undefined;
40
+ return value;
41
+ }
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  title: Get started
3
3
  description: Preview your site and make your first change.
4
- order: 1
5
4
  ---
6
5
 
7
6
  A publishOS site starts with a folder. The `publish.os/` folder contains your content, theme, and configuration.
@@ -30,7 +29,7 @@ Use Markdown for normal text. You can use **bold text**, _italic text_, and `cod
30
29
 
31
30
  You can also use MDX components to add interactive elements to your pages.
32
31
 
33
- Use [callouts](/docs/callouts) to add notes, warnings, and useful context. The callout guide shows every color and style.
32
+ Use the [blog](/blog) to share updates alongside your documentation.
34
33
 
35
34
  You can show a keyboard shortcut such as <kbd>Ctrl</kbd>+<kbd>Enter</kbd>.
36
35
 
@@ -47,4 +46,4 @@ description: Add a page to your site.
47
46
  Each MDX file contains one page.
48
47
  ```
49
48
 
50
- Next try creating or modifying <a href="/docs/groups">groups</a> or customizing your <a href="/docs/themes">theme</a>.
49
+ Next, organize your [groups](/docs/groups) or customize your [theme](/docs/themes).
@@ -1,25 +1,24 @@
1
1
  ---
2
2
  title: Groups
3
3
  description: Give each group one purpose and each page a clear name.
4
- order: 2
5
4
  ---
6
5
 
7
- A content group keeps related pages together. This site has one group, `docs`.
6
+ A content group keeps related pages together. This site has two groups: `docs` and `blog`.
8
7
 
9
8
  ## Add a group
10
9
 
11
- Create `publish.os/blog/content/first-post.mdx`:
10
+ Create `publish.os/notes/content/first-note.mdx`:
12
11
 
13
12
  ```mdx
14
13
  ---
15
- title: A small beginning
16
- description: Why this project exists.
14
+ title: Project notes
15
+ description: What we learned while building this project.
17
16
  ---
18
17
 
19
18
  This project starts with one problem and one useful solution.
20
19
  ```
21
20
 
22
- The `blog` folder creates a separate content group. Its pages can share a layout and theme without changes to the docs group.
21
+ The `notes` folder creates a separate content group. Its pages can share a layout and theme without changes to the other groups.
23
22
 
24
23
  ## Choose clear names
25
24
 
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "version": 1,
3
- "runtime": "@publish.os/nextjs@0.0.1-alpha.90",
3
+ "runtime": "@publish.os/nextjs@0.0.1-alpha.92",
4
4
  "site": {
5
5
  "name": "publish.os guides",
6
- "description": "Write pages, organize content, and build your site."
6
+ "description": "Documentation and updates for your project."
7
7
  },
8
8
  "fonts": {
9
9
  "main": {
@@ -13,5 +13,20 @@
13
13
  "family": "DM Mono",
14
14
  "weight": ["300", "400", "500"]
15
15
  }
16
+ },
17
+ "groups": {
18
+ "docs": { "title": "Docs" },
19
+ "blog": {
20
+ "title": "Blog",
21
+ "navigation": {
22
+ "items": [],
23
+ "sort": {
24
+ "source": "frontmatter",
25
+ "field": "publishedAt",
26
+ "type": "date",
27
+ "direction": "desc"
28
+ }
29
+ }
30
+ }
16
31
  }
17
32
  }
@@ -40,9 +40,7 @@
40
40
  --blue-1100: #00569f;
41
41
  --blue-1200: #003d73;
42
42
 
43
- --accent: var(--blue-900);
44
- --accent-2: var(--blue-800);
45
- --accent-3: var(--blue-700);
43
+ --accent: var(--blue-1000);
46
44
  --theme-radius: var(--theme-radius-sm);
47
45
  }
48
46
 
@@ -72,4 +70,6 @@
72
70
  --blue-1000: #84c8ff;
73
71
  --blue-1100: #b6dfff;
74
72
  --blue-1200: #e8f5ff;
73
+
74
+ --accent: var(--blue-800);
75
75
  }
@@ -1,16 +1,24 @@
1
1
  {
2
2
  "name": "Minimal",
3
- "description": "A minimal docs theme with three short guides.",
3
+ "description": "Docs and a blog with a minimal theme.",
4
4
  "files": [
5
5
  "publish.os.config.json",
6
6
  "tsconfig.json",
7
7
  "theme.css",
8
8
  "assets/logo/publish-dev-logo.dark.png",
9
9
  "assets/logo/publish-dev-logo.png",
10
- "assets/favicon/favicon.dark.png",
11
- "assets/favicon/favicon.png",
10
+ "assets/favicon.svg",
11
+ "assets/favicon.dark.svg",
12
+ "assets/blog/hello-world.svg",
12
13
  "docs/content/get-started.mdx",
13
14
  "docs/content/groups.mdx",
14
- "docs/content/themes.mdx"
15
+ "docs/content/themes.mdx",
16
+ "blog/index.tsx",
17
+ "blog/layout.tsx",
18
+ "blog/page.tsx",
19
+ "components/blog/copy-link.tsx",
20
+ "components/blog/frontmatter.ts",
21
+ "blog/content/hello-world.mdx",
22
+ "blog/content/series-a.mdx"
15
23
  ]
16
24
  }
@@ -3,4 +3,4 @@ title: Get started
3
3
  description: Replace this page with your own content.
4
4
  ---
5
5
 
6
- Replace this page with your own content.
6
+ Replace this page with your own content. See [our docs](publish.dev/docs)
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "version": 1,
3
- "runtime": "@publish.os/nextjs@0.0.1-alpha.90"
3
+ "runtime": "@publish.os/nextjs@0.0.1-alpha.92"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@publish.os/nextjs",
3
- "version": "0.0.1-alpha.90",
3
+ "version": "0.0.1-alpha.92",
4
4
  "description": "Components and routes for generated publishOS Next.js sites.",
5
5
  "homepage": "https://publish.dev",
6
6
  "bugs": {
@@ -16,7 +16,7 @@
16
16
  "type": "module",
17
17
  "license": "UNLICENSED",
18
18
  "engines": {
19
- "node": "24.x"
19
+ "node": "^24.22.1"
20
20
  },
21
21
  "repository": {
22
22
  "type": "git",
@@ -43,6 +43,14 @@
43
43
  "types": "./dist/index.d.ts",
44
44
  "default": "./dist/index.js"
45
45
  },
46
+ "./jsx-runtime": {
47
+ "types": "./dist/jsx-runtime.d.ts",
48
+ "default": "./dist/jsx-runtime.js"
49
+ },
50
+ "./jsx-dev-runtime": {
51
+ "types": "./dist/jsx-dev-runtime.d.ts",
52
+ "default": "./dist/jsx-dev-runtime.js"
53
+ },
46
54
  "./resolvers/manifest-resolver": {
47
55
  "types": "./dist/resolvers/manifest-resolver.d.ts",
48
56
  "default": "./dist/resolvers/manifest-resolver.js"
@@ -171,6 +179,10 @@
171
179
  "types": "./dist/kernel/routes/agent/markdown.d.ts",
172
180
  "default": "./dist/kernel/routes/agent/markdown.js"
173
181
  },
182
+ "./kernel/routes/not-found": {
183
+ "types": "./dist/kernel/routes/not-found.d.ts",
184
+ "default": "./dist/kernel/routes/not-found.js"
185
+ },
174
186
  "./kernel/routes/layouts/group": {
175
187
  "types": "./dist/kernel/routes/layouts/group.d.ts",
176
188
  "default": "./dist/kernel/routes/layouts/group.js"
@@ -211,6 +223,10 @@
211
223
  "types": "./dist/kernel/components/blocks/AgentActions.d.ts",
212
224
  "default": "./dist/kernel/components/blocks/AgentActions.js"
213
225
  },
226
+ "./kernel/components/blocks/agent-actions": {
227
+ "types": "./dist/kernel/components/blocks/agent-actions.d.ts",
228
+ "default": "./dist/kernel/components/blocks/agent-actions.js"
229
+ },
214
230
  "./kernel/components/blocks/animated-icon-swap": {
215
231
  "types": "./dist/kernel/components/blocks/animated-icon-swap.d.ts",
216
232
  "default": "./dist/kernel/components/blocks/animated-icon-swap.js"
@@ -219,14 +235,6 @@
219
235
  "types": "./dist/kernel/components/blocks/color-palette.d.ts",
220
236
  "default": "./dist/kernel/components/blocks/color-palette.js"
221
237
  },
222
- "./kernel/components/blocks/design-system-preview": {
223
- "types": "./dist/kernel/components/blocks/design-system-preview.d.ts",
224
- "default": "./dist/kernel/components/blocks/design-system-preview.js"
225
- },
226
- "./kernel/components/blocks/link-playground": {
227
- "types": "./dist/kernel/components/blocks/link-playground.d.ts",
228
- "default": "./dist/kernel/components/blocks/link-playground.js"
229
- },
230
238
  "./kernel/components/blocks/logo-block": {
231
239
  "types": "./dist/kernel/components/blocks/logo-block.d.ts",
232
240
  "default": "./dist/kernel/components/blocks/logo-block.js"
@@ -243,10 +251,6 @@
243
251
  "types": "./dist/kernel/components/blocks/navigation-progress.d.ts",
244
252
  "default": "./dist/kernel/components/blocks/navigation-progress.js"
245
253
  },
246
- "./kernel/components/blocks/navigation-progress-playground": {
247
- "types": "./dist/kernel/components/blocks/navigation-progress-playground.d.ts",
248
- "default": "./dist/kernel/components/blocks/navigation-progress-playground.js"
249
- },
250
254
  "./kernel/components/blocks/next-prev": {
251
255
  "types": "./dist/kernel/components/blocks/next-prev.d.ts",
252
256
  "default": "./dist/kernel/components/blocks/next-prev.js"
@@ -275,6 +279,14 @@
275
279
  "types": "./dist/kernel/components/blocks/toc.d.ts",
276
280
  "default": "./dist/kernel/components/blocks/toc.js"
277
281
  },
282
+ "./kernel/components/blocks/toc-client": {
283
+ "types": "./dist/kernel/components/blocks/toc-client.d.ts",
284
+ "default": "./dist/kernel/components/blocks/toc-client.js"
285
+ },
286
+ "./kernel/components/next-image": {
287
+ "types": "./dist/kernel/components/next-image.d.ts",
288
+ "default": "./dist/kernel/components/next-image.js"
289
+ },
278
290
  "./kernel/components/mdx/error-boundary": {
279
291
  "types": "./dist/kernel/components/mdx/error-boundary.d.ts",
280
292
  "default": "./dist/kernel/components/mdx/error-boundary.js"
@@ -399,6 +411,18 @@
399
411
  "types": "./dist/kernel/components/ui/button.d.ts",
400
412
  "default": "./dist/kernel/components/ui/button.js"
401
413
  },
414
+ "./components/ui/button": {
415
+ "types": "./dist/kernel/components/ui/button.d.ts",
416
+ "default": "./dist/kernel/components/ui/button.js"
417
+ },
418
+ "./components/blocks/toc": {
419
+ "types": "./dist/kernel/components/blocks/toc.d.ts",
420
+ "default": "./dist/kernel/components/blocks/toc.js"
421
+ },
422
+ "./components/blocks/agent-actions": {
423
+ "types": "./dist/kernel/components/blocks/agent-actions.d.ts",
424
+ "default": "./dist/kernel/components/blocks/agent-actions.js"
425
+ },
402
426
  "./kernel/components/ui/card": {
403
427
  "types": "./dist/kernel/components/ui/card.d.ts",
404
428
  "default": "./dist/kernel/components/ui/card.js"
@@ -471,10 +495,6 @@
471
495
  "types": "./dist/kernel/components/ui/text.d.ts",
472
496
  "default": "./dist/kernel/components/ui/text.js"
473
497
  },
474
- "./kernel/components/ui/theme-toggle": {
475
- "types": "./dist/kernel/components/ui/theme-toggle.d.ts",
476
- "default": "./dist/kernel/components/ui/theme-toggle.js"
477
- },
478
498
  "./kernel/components/ui/toast": {
479
499
  "types": "./dist/kernel/components/ui/toast.d.ts",
480
500
  "default": "./dist/kernel/components/ui/toast.js"
@@ -499,18 +519,21 @@
499
519
  "types": "./dist/utils/heading-ids.d.ts",
500
520
  "default": "./dist/utils/heading-ids.js"
501
521
  },
522
+ "./utils/toc-selection": {
523
+ "types": "./dist/utils/toc-selection.d.ts",
524
+ "default": "./dist/utils/toc-selection.js"
525
+ },
502
526
  "./config/createNextConfig": {
503
527
  "types": "./dist/config/createNextConfig.d.ts",
504
528
  "default": "./dist/config/createNextConfig.js"
505
529
  }
506
530
  },
507
531
  "dependencies": {
508
- "@base-ui/react": "1.8.0",
532
+ "@base-ui/react": "1.9.0",
509
533
  "@types/mdx": "2.0.14",
510
534
  "class-variance-authority": "0.7.1",
511
535
  "cn": "^0.2.6",
512
536
  "fontkit": "^2.0.4",
513
- "gray-matter": "^4.0.3",
514
537
  "next-mdx-remote": "^6.0.0",
515
538
  "next-themes": "^0.4.0",
516
539
  "postcss": "8.5.28",
@@ -522,14 +545,16 @@
522
545
  "remark-mdx": "^3.1.1",
523
546
  "remark-parse": "^11.0.0",
524
547
  "remark-stringify": "^11.0.0",
548
+ "saxes": "^6.0.0",
525
549
  "sharp": "0.35.5",
526
- "shiki": "^4.4.3",
550
+ "shiki": "^4.5.0",
527
551
  "tar": "7.5.22",
528
552
  "unified": "^11.0.5",
529
- "zod": "^3.23.8"
553
+ "yaml": "2.9.1",
554
+ "zod": "^4.6.7"
530
555
  },
531
556
  "peerDependencies": {
532
- "next": ">=16.4.0",
557
+ "next": ">=16.4.2",
533
558
  "react": ">=19.0.0",
534
559
  "react-dom": ">=19.0.0",
535
560
  "typescript": ">=5.0.0"
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "engines": {
3
- "node": "24.x"
3
+ "node": "^24.22.1"
4
4
  },
5
- "name": "publish-os-nextjs-app-phosphor-install",
5
+ "name": "publish-os-site",
6
6
  "packageManager": "pnpm@12.3.0",
7
7
  "private": true,
8
8
  "type": "module",
9
9
  "dependencies": {
10
- "@base-ui/react": "1.8.0",
10
+ "@base-ui/react": "1.9.0",
11
11
  "@phosphor-icons/react": "2.1.10",
12
12
  "@publish.os/nextjs": "file:./framework.tgz",
13
13
  "@tailwindcss/postcss": "4.3.3",
@@ -15,7 +15,7 @@
15
15
  "@types/react": "19.2.2",
16
16
  "@types/react-dom": "19.2.2",
17
17
  "class-variance-authority": "0.7.1",
18
- "next": "16.4.0",
18
+ "next": "16.4.2",
19
19
  "next-themes": "0.4.6",
20
20
  "pagefind": "1.5.2",
21
21
  "react": "19.2.0",