@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.
- package/compiler-assets/nextjs/defaults/group/index.tsx +16 -11
- package/compiler-assets/nextjs/defaults/group/layout.tsx +6 -6
- package/compiler-assets/nextjs/defaults/group/page.tsx +36 -26
- package/compiler-assets/nextjs/defaults/project/next.config.mjs +21 -11
- package/compiler-assets/nextjs/defaults/project/tsconfig.json.template +10 -0
- package/compiler-assets/nextjs/defaults/root/css/components/code-block.css +18 -0
- package/compiler-assets/nextjs/defaults/root/index.tsx +16 -11
- package/compiler-assets/nextjs/defaults/root/layout.tsx +7 -3
- package/compiler-assets/nextjs/shims/agent-user-agents.ts +65 -0
- package/compiler-assets/nextjs/shims/document.tsx +46 -0
- package/compiler-assets/nextjs/shims/generated-leaf-page.tsx +5 -0
- package/compiler-assets/nextjs/shims/global-layout.tsx +8 -42
- package/compiler-assets/nextjs/shims/global-not-found.tsx +69 -0
- package/compiler-assets/nextjs/shims/markdown-route.ts +2 -0
- package/compiler-assets/nextjs/shims/metadata-icons.tsx +39 -0
- package/compiler-assets/nextjs/shims/not-found-content.tsx +53 -0
- package/compiler-assets/nextjs/shims/not-found-navigation.tsx +60 -0
- package/compiler-assets/nextjs/shims/proxy.ts +254 -86
- package/compiler-assets/nextjs/shims/site-fenced-code-block.tsx +2 -6
- package/compiler-assets/nextjs/shims/site-mdx-components.tsx +28 -16
- package/compiler-assets/nextjs/shims/site-mdx.tsx +6 -1
- package/dist/{build-operation-2JAYBSKF.js → build-operation-CJDUL4OW.js} +29 -23
- package/dist/{button-c3WGnxIj.d.ts → button-D6Xp2HBm.d.ts} +4 -4
- package/dist/capture-local-source-WGGDIUU2.js +258 -0
- package/dist/chunk-22RSSUNV.js +13 -0
- package/dist/chunk-3T4HVDSC.js +426 -0
- package/dist/{chunk-WKTEO6RS.js → chunk-4BC2L2KA.js} +46 -12
- package/dist/{chunk-WDY4IK6Z.js → chunk-5J3YUNRY.js} +3 -10
- package/dist/chunk-5KAD7W53.js +248 -0
- package/dist/{chunk-DWA3ZRGW.js → chunk-6C65KV7O.js} +2 -2
- package/dist/{chunk-GGKFQ3MA.js → chunk-6D2E6UMD.js} +144 -70
- package/dist/{chunk-7OGTPSKI.js → chunk-7NY22B5U.js} +8 -3
- package/dist/chunk-DX7PXFCM.js +2519 -0
- package/dist/{chunk-726GV2NF.js → chunk-DZ3VWEV5.js} +950 -632
- package/dist/chunk-EFO6AWXN.js +19 -0
- package/dist/chunk-IL4RJOKI.js +186 -0
- package/dist/{chunk-H6XILMZX.js → chunk-NHSLTARU.js} +2588 -1493
- package/dist/{chunk-DLDFHU7Y.js → chunk-NNBJZPFM.js} +4 -2
- package/dist/{chunk-VO2I7MTM.js → chunk-SBMDONTV.js} +10 -7
- package/dist/{chunk-YLTOLYWM.js → chunk-WL75GQ5M.js} +6 -18
- package/dist/compiler.d.ts +15 -2
- package/dist/compiler.js +111 -23
- package/dist/components/blocks/agent-actions.d.ts +81 -0
- package/dist/components/blocks/agent-actions.js +563 -0
- package/dist/components/blocks/toc.d.ts +43 -0
- package/dist/components/blocks/toc.js +136 -0
- package/dist/components/ui/button.d.ts +4 -0
- package/dist/components/ui/button.js +94 -0
- package/dist/compose-44GJSMXD.js +16 -0
- package/dist/config/createNextConfig.js +19 -3
- package/dist/{dev-operation-TZDVJCN7.js → dev-operation-WNECBHZ5.js} +134 -84
- package/dist/{framework-selection-X4U6Y6QC.js → framework-selection-ZVO323PK.js} +3 -2
- package/dist/ide-support-TG74L4FF.js +16 -0
- package/dist/index.d.ts +151 -95
- package/dist/index.js +25 -0
- package/dist/jsx-dev-runtime.d.ts +6 -0
- package/dist/jsx-dev-runtime.js +100 -0
- package/dist/jsx-runtime.d.ts +7 -0
- package/dist/jsx-runtime.js +97 -0
- package/dist/kernel/components/blocks/AgentActions.d.ts +37 -8
- package/dist/kernel/components/blocks/AgentActions.js +384 -174
- package/dist/kernel/components/blocks/agent-actions.d.ts +4 -0
- package/dist/kernel/components/blocks/agent-actions.js +563 -0
- package/dist/kernel/components/blocks/animated-icon-swap.d.ts +2 -2
- package/dist/kernel/components/blocks/animated-icon-swap.js +1 -1
- package/dist/kernel/components/blocks/color-palette.d.ts +2 -2
- package/dist/kernel/components/blocks/color-palette.js +4 -4
- package/dist/kernel/components/blocks/logo-block.d.ts +2 -2
- package/dist/kernel/components/blocks/logo-block.js +1 -1
- package/dist/kernel/components/blocks/nav-breadcrumb.d.ts +6 -5
- package/dist/kernel/components/blocks/nav-breadcrumb.js +21 -15
- package/dist/kernel/components/blocks/navbar.d.ts +5 -4
- package/dist/kernel/components/blocks/navbar.js +79 -59
- package/dist/kernel/components/blocks/navigation-progress.d.ts +2 -2
- package/dist/kernel/components/blocks/navigation-progress.js +2 -2
- package/dist/kernel/components/blocks/next-prev.d.ts +4 -4
- package/dist/kernel/components/blocks/next-prev.js +30 -7
- package/dist/kernel/components/blocks/page-list.d.ts +4 -4
- package/dist/kernel/components/blocks/page-list.js +32 -9
- package/dist/kernel/components/blocks/search.d.ts +9 -15
- package/dist/kernel/components/blocks/search.js +16 -17
- package/dist/kernel/components/blocks/sidebar-node.d.ts +3 -5
- package/dist/kernel/components/blocks/sidebar-node.js +13 -3
- package/dist/kernel/components/blocks/sidebar.d.ts +6 -7
- package/dist/kernel/components/blocks/sidebar.js +137 -28
- package/dist/kernel/components/blocks/theme-toggle.d.ts +3 -4
- package/dist/kernel/components/blocks/theme-toggle.js +5 -5
- package/dist/kernel/components/blocks/toc-client.d.ts +40 -0
- package/dist/kernel/components/blocks/toc-client.js +495 -0
- package/dist/kernel/components/blocks/toc.d.ts +20 -2
- package/dist/kernel/components/blocks/toc.js +121 -179
- package/dist/kernel/components/mdx/components/blockquote.d.ts +2 -2
- package/dist/kernel/components/mdx/components/blockquote.js +1 -1
- package/dist/kernel/components/mdx/components/callout.d.ts +3 -3
- package/dist/kernel/components/mdx/components/callout.js +1 -1
- package/dist/kernel/components/mdx/components/code-block.d.ts +2 -2
- package/dist/kernel/components/mdx/components/code-block.js +2 -2
- package/dist/kernel/components/mdx/components/copy-code-button.d.ts +2 -2
- package/dist/kernel/components/mdx/components/copy-code-button.js +5 -4
- package/dist/kernel/components/mdx/components/figure-caption.d.ts +3 -3
- package/dist/kernel/components/mdx/components/figure-caption.js +3 -2
- package/dist/kernel/components/mdx/components/figure.d.ts +8 -4
- package/dist/kernel/components/mdx/components/figure.js +23 -13
- package/dist/kernel/components/mdx/components/footnotes.d.ts +2 -2
- package/dist/kernel/components/mdx/components/footnotes.js +1 -1
- package/dist/kernel/components/mdx/components/heading-copy-link.d.ts +2 -2
- package/dist/kernel/components/mdx/components/heading-copy-link.js +1 -1
- package/dist/kernel/components/mdx/components/heading.d.ts +2 -2
- package/dist/kernel/components/mdx/components/heading.js +6 -3
- package/dist/kernel/components/mdx/components/hr.d.ts +4 -4
- package/dist/kernel/components/mdx/components/hr.js +2 -2
- package/dist/kernel/components/mdx/components/image-zoom.d.ts +3 -3
- package/dist/kernel/components/mdx/components/image-zoom.js +4 -3
- package/dist/kernel/components/mdx/components/image.d.ts +2 -2
- package/dist/kernel/components/mdx/components/image.js +22 -17
- package/dist/kernel/components/mdx/components/inline-code.d.ts +2 -2
- package/dist/kernel/components/mdx/components/inline-code.js +1 -1
- package/dist/kernel/components/mdx/components/kbd.d.ts +3 -3
- package/dist/kernel/components/mdx/components/kbd.js +2 -2
- package/dist/kernel/components/mdx/components/link.d.ts +6 -6
- package/dist/kernel/components/mdx/components/link.js +2 -2
- package/dist/kernel/components/mdx/components/paragraph.d.ts +2 -2
- package/dist/kernel/components/mdx/components/paragraph.js +1 -1
- package/dist/kernel/components/mdx/components/strikethrough.d.ts +2 -2
- package/dist/kernel/components/mdx/components/strikethrough.js +1 -1
- package/dist/kernel/components/mdx/components/table.d.ts +7 -7
- package/dist/kernel/components/mdx/components/table.js +2 -2
- package/dist/kernel/components/mdx/components/task-list.d.ts +3 -3
- package/dist/kernel/components/mdx/components/task-list.js +1 -1
- package/dist/kernel/components/mdx/components/video-player.d.ts +8 -4
- package/dist/kernel/components/mdx/components/video-player.js +6 -2
- package/dist/kernel/components/mdx/components/video.d.ts +5 -4
- package/dist/kernel/components/mdx/components/video.js +7 -5
- package/dist/kernel/components/mdx/error-boundary.d.ts +3 -4
- package/dist/kernel/components/mdx/error-boundary.js +2 -2
- package/dist/kernel/components/mdx/error-fallback.d.ts +2 -2
- package/dist/kernel/components/mdx/error-fallback.js +1 -1
- package/dist/kernel/components/mdx/mdx.d.ts +57 -16
- package/dist/kernel/components/mdx/mdx.js +232 -35
- package/dist/kernel/components/mdx/rehype-heading-ids.d.ts +1 -0
- package/dist/kernel/components/mdx/rehype-heading-ids.js +5 -3
- package/dist/kernel/components/mdx/types.d.ts +1 -1
- package/dist/kernel/components/next-image.d.ts +12 -0
- package/dist/kernel/components/next-image.js +61 -0
- package/dist/kernel/components/ui/accordion.d.ts +7 -7
- package/dist/kernel/components/ui/accordion.js +1 -1
- package/dist/kernel/components/ui/breadcrumb-trail.d.ts +3 -4
- package/dist/kernel/components/ui/breadcrumb-trail.js +2 -2
- package/dist/kernel/components/ui/breadcrumb.d.ts +14 -14
- package/dist/kernel/components/ui/breadcrumb.js +4 -4
- package/dist/kernel/components/ui/button-group.d.ts +6 -6
- package/dist/kernel/components/ui/button-group.js +3 -3
- package/dist/kernel/components/ui/button.d.ts +59 -7
- package/dist/kernel/components/ui/button.js +43 -39
- package/dist/kernel/components/ui/card.d.ts +7 -7
- package/dist/kernel/components/ui/card.js +1 -1
- package/dist/kernel/components/ui/dialog.d.ts +10 -10
- package/dist/kernel/components/ui/dialog.js +1 -1
- package/dist/kernel/components/ui/drawer.d.ts +12 -12
- package/dist/kernel/components/ui/drawer.js +1 -1
- package/dist/kernel/components/ui/input.d.ts +2 -2
- package/dist/kernel/components/ui/input.js +1 -1
- package/dist/kernel/components/ui/kbd.d.ts +4 -4
- package/dist/kernel/components/ui/kbd.js +1 -1
- package/dist/kernel/components/ui/link.d.ts +11 -5
- package/dist/kernel/components/ui/link.js +2 -2
- package/dist/kernel/components/ui/menu.d.ts +22 -22
- package/dist/kernel/components/ui/menu.js +1 -1
- package/dist/kernel/components/ui/mod-key.d.ts +2 -3
- package/dist/kernel/components/ui/mod-key.js +2 -2
- package/dist/kernel/components/ui/navigation-menu.d.ts +15 -15
- package/dist/kernel/components/ui/navigation-menu.js +1 -1
- package/dist/kernel/components/ui/popover.d.ts +11 -11
- package/dist/kernel/components/ui/popover.js +1 -1
- package/dist/kernel/components/ui/progress.d.ts +7 -7
- package/dist/kernel/components/ui/progress.js +1 -1
- package/dist/kernel/components/ui/scroll-area.d.ts +9 -10
- package/dist/kernel/components/ui/scroll-area.js +1 -1
- package/dist/kernel/components/ui/select.d.ts +16 -16
- package/dist/kernel/components/ui/select.js +1 -1
- package/dist/kernel/components/ui/separator.d.ts +3 -3
- package/dist/kernel/components/ui/separator.js +1 -1
- package/dist/kernel/components/ui/table.d.ts +7 -7
- package/dist/kernel/components/ui/table.js +1 -1
- package/dist/kernel/components/ui/tabs.d.ts +12 -12
- package/dist/kernel/components/ui/tabs.js +1 -1
- package/dist/kernel/components/ui/tag.d.ts +3 -3
- package/dist/kernel/components/ui/tag.js +1 -1
- package/dist/kernel/components/ui/text.d.ts +4 -4
- package/dist/kernel/components/ui/text.js +1 -1
- package/dist/kernel/components/ui/toast.d.ts +11 -11
- package/dist/kernel/components/ui/toast.js +1 -1
- package/dist/kernel/components/ui/tooltip.d.ts +9 -9
- package/dist/kernel/components/ui/tooltip.js +1 -1
- package/dist/kernel/defaults.registry.d.ts +4 -17
- package/dist/kernel/defaults.registry.js +4 -19
- package/dist/kernel/routes/agent/markdown.d.ts +7 -0
- package/dist/kernel/routes/agent/markdown.js +229 -54
- package/dist/kernel/routes/layouts/group.d.ts +1 -1
- package/dist/kernel/routes/layouts/group.js +5 -7
- package/dist/kernel/routes/metadata/feed.d.ts +1 -2
- package/dist/kernel/routes/metadata/feed.js +119 -88
- package/dist/kernel/routes/metadata/llms.d.ts +3 -23
- package/dist/kernel/routes/metadata/llms.js +2 -103
- package/dist/kernel/routes/metadata/og-image.js +1 -1
- package/dist/kernel/routes/metadata/robots.d.ts +5 -3
- package/dist/kernel/routes/metadata/robots.js +4 -25
- package/dist/kernel/routes/metadata/sitemap.d.ts +36 -3
- package/dist/kernel/routes/metadata/sitemap.js +277 -49
- package/dist/kernel/routes/not-found.d.ts +34 -0
- package/dist/kernel/routes/not-found.js +213 -0
- package/dist/kernel/routes/pages/group.d.ts +5 -5
- package/dist/kernel/routes/pages/group.js +11 -5
- package/dist/kernel/routes/pages/leaf.d.ts +38 -6
- package/dist/kernel/routes/pages/leaf.js +21 -12
- package/dist/kernel/routes/pages/root.d.ts +5 -5
- package/dist/kernel/routes/pages/root.js +21 -6
- package/dist/keyboard-shortcuts.d.ts +2 -2
- package/dist/keyboard-shortcuts.js +1 -1
- package/dist/manifest-types-CcVPH_jh.d.ts +83 -0
- package/dist/resolvers/manifest-resolver.d.ts +2 -2
- package/dist/resolvers/manifest-resolver.js +65 -35
- package/dist/route-metadata-og-image-BeKKFHg7.d.ts +58 -0
- package/dist/search.d.ts +2 -9
- package/dist/search.js +9 -16
- package/dist/sidebar-types-CMrMM0Nj.d.ts +105 -0
- package/dist/theme-scope.d.ts +2 -2
- package/dist/theme-scope.js +1 -1
- package/dist/types-BbqmOzLC.d.ts +168 -0
- package/dist/types-TjH1ek0X.d.ts +22 -0
- package/dist/types-sM2g9nW0.d.ts +12 -0
- package/dist/types.d.ts +117 -91
- package/dist/utils/heading-ids.js +30 -11
- package/dist/utils/toc-selection.d.ts +7 -0
- package/dist/utils/toc-selection.js +14 -0
- package/dist/validate-local-source-EN2GW4FR.js +16 -0
- package/dist/validate-publish-os-source-OEWQDB7B.js +14 -0
- package/init/seed/minimal/publish.os/assets/blog/hello-world.svg +13 -0
- package/init/seed/minimal/publish.os/assets/favicon.dark.svg +13 -0
- package/init/seed/minimal/publish.os/assets/favicon.svg +13 -0
- package/init/seed/minimal/publish.os/blog/content/hello-world.mdx +48 -0
- package/init/seed/minimal/publish.os/blog/content/series-a.mdx +11 -0
- package/init/seed/minimal/publish.os/blog/index.tsx +85 -0
- package/init/seed/minimal/publish.os/blog/layout.tsx +13 -0
- package/init/seed/minimal/publish.os/blog/page.tsx +91 -0
- package/init/seed/minimal/publish.os/components/blog/copy-link.tsx +64 -0
- package/init/seed/minimal/publish.os/components/blog/frontmatter.ts +41 -0
- package/init/seed/minimal/publish.os/docs/content/get-started.mdx +2 -3
- package/init/seed/minimal/publish.os/docs/content/groups.mdx +5 -6
- package/init/seed/minimal/publish.os/publish.os.config.json +17 -2
- package/init/seed/minimal/publish.os/theme.css +3 -3
- package/init/seed/minimal/seed.json +12 -4
- package/init/seed/scratch/publish.os/docs/content/get-started.mdx +1 -1
- package/init/seed/scratch/publish.os/publish.os.config.json +1 -1
- package/package.json +48 -23
- package/release/app/phosphor/package.json +4 -4
- package/release/app/phosphor/pnpm-lock.yaml.template +123 -184
- package/release/compiler/package.json +5 -3
- package/release/compiler/pnpm-lock.yaml.template +153 -183
- package/release/release.json +6 -6
- package/dist/button-CtzUJB8u.d.ts +0 -11
- package/dist/chunk-535TM4A5.js +0 -1455
- package/dist/chunk-B2V22WRT.js +0 -297
- package/dist/chunk-NECL5IBJ.js +0 -318
- package/dist/chunk-SVYGXXYR.js +0 -36
- package/dist/chunk-UF6ATARM.js +0 -1100
- package/dist/compose-NN23UJGC.js +0 -13
- package/dist/ide-support-ZNW7ODFY.js +0 -15
- package/dist/kernel/components/blocks/design-system-preview.d.ts +0 -61
- package/dist/kernel/components/blocks/design-system-preview.js +0 -667
- package/dist/kernel/components/blocks/link-playground.d.ts +0 -5
- package/dist/kernel/components/blocks/link-playground.js +0 -744
- package/dist/kernel/components/blocks/navigation-progress-playground.d.ts +0 -5
- package/dist/kernel/components/blocks/navigation-progress-playground.js +0 -629
- package/dist/kernel/components/ui/theme-toggle.d.ts +0 -24
- package/dist/kernel/components/ui/theme-toggle.js +0 -53
- package/dist/sidebar-types-DKpR27II.d.ts +0 -25
- package/dist/types-BzkZty3r.d.ts +0 -147
- package/dist/types-CJWRG05y.d.ts +0 -76
- package/dist/types-CUtrppxt.d.ts +0 -69
- package/dist/validate-local-source-XRL2Y7XE.js +0 -14
- package/dist/validate-publish-os-source-DAPZ4QGE.js +0 -12
- package/init/seed/minimal/publish.os/assets/favicon/favicon.dark.png +0 -0
- 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 [
|
|
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
|
|
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
|
|
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/
|
|
10
|
+
Create `publish.os/notes/content/first-note.mdx`:
|
|
12
11
|
|
|
13
12
|
```mdx
|
|
14
13
|
---
|
|
15
|
-
title:
|
|
16
|
-
description:
|
|
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 `
|
|
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.
|
|
3
|
+
"runtime": "@publish.os/nextjs@0.0.1-alpha.92",
|
|
4
4
|
"site": {
|
|
5
5
|
"name": "publish.os guides",
|
|
6
|
-
"description": "
|
|
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-
|
|
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": "
|
|
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
|
|
11
|
-
"assets/favicon
|
|
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
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@publish.os/nextjs",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
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.
|
|
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.
|
|
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.
|
|
550
|
+
"shiki": "^4.5.0",
|
|
527
551
|
"tar": "7.5.22",
|
|
528
552
|
"unified": "^11.0.5",
|
|
529
|
-
"
|
|
553
|
+
"yaml": "2.9.1",
|
|
554
|
+
"zod": "^4.6.7"
|
|
530
555
|
},
|
|
531
556
|
"peerDependencies": {
|
|
532
|
-
"next": ">=16.4.
|
|
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.
|
|
3
|
+
"node": "^24.22.1"
|
|
4
4
|
},
|
|
5
|
-
"name": "publish-os-
|
|
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.
|
|
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.
|
|
18
|
+
"next": "16.4.2",
|
|
19
19
|
"next-themes": "0.4.6",
|
|
20
20
|
"pagefind": "1.5.2",
|
|
21
21
|
"react": "19.2.0",
|