onedocs 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 inline0
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,170 @@
1
+ <p align="center">
2
+ <a href="https://github.com/inline0/onedocs">
3
+ <picture>
4
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/inline0/onedocs/main/.github/logo-dark.svg">
5
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/inline0/onedocs/main/.github/logo-light.svg">
6
+ <img alt="Onedocs" src="https://raw.githubusercontent.com/inline0/onedocs/main/.github/logo-light.svg" width="280">
7
+ </picture>
8
+ </a>
9
+ </p>
10
+
11
+ <p align="center">
12
+ Zero-config documentation for TanStack Start + Fumadocs
13
+ </p>
14
+
15
+ ---
16
+
17
+ Install one dependency, write markdown, ship docs.
18
+
19
+ > **Note:** Onedocs is designed for standalone documentation websites, not for integrating docs into existing applications.
20
+
21
+ ## Features
22
+
23
+ - **One Dependency** - Bundles TanStack Start, Fumadocs UI, and MDX handling
24
+ - **Zero Config** - Works out of the box with sensible defaults
25
+ - **Markdown First** - Write `.md` or `.mdx` files, get beautiful docs
26
+ - **Full-text Search** - Built-in Orama search indexes your content automatically
27
+ - **Dark Mode** - Beautiful light and dark themes with system preference support
28
+ - **Inter Font** - Bundled Inter variable font with OpenType features
29
+ - **TypeScript Ready** - Full type-safe configuration
30
+
31
+ ## Quick Start
32
+
33
+ ```bash
34
+ bun add onedocs
35
+ ```
36
+
37
+ Create your config:
38
+
39
+ ```tsx
40
+ // onedocs.config.tsx
41
+ import { defineConfig } from "onedocs/config";
42
+
43
+ export default defineConfig({
44
+ title: "My Project",
45
+ description: "Documentation for My Project",
46
+ nav: {
47
+ github: "username/repo",
48
+ },
49
+ });
50
+ ```
51
+
52
+ Import the CSS preset:
53
+
54
+ ```css
55
+ /* app.css */
56
+ @import "onedocs/css/preset.css";
57
+ ```
58
+
59
+ Create your homepage:
60
+
61
+ ```tsx
62
+ // src/routes/index.tsx
63
+ import { HomePage } from "onedocs";
64
+ import config from "../onedocs.config.tsx";
65
+
66
+ export default function Home() {
67
+ return <HomePage config={config} packageName="my-package" />;
68
+ }
69
+ ```
70
+
71
+ Add your markdown files in `content/docs/` and run:
72
+
73
+ ```bash
74
+ bun run dev
75
+ ```
76
+
77
+ ## Configuration
78
+
79
+ ```tsx
80
+ import { defineConfig } from "onedocs/config";
81
+ import { Package, Zap } from "lucide-react";
82
+
83
+ export default defineConfig({
84
+ title: "My Project",
85
+ description: "Project description",
86
+
87
+ // Logo with dark/light variants
88
+ logo: {
89
+ light: "/logo-light.svg",
90
+ dark: "/logo-dark.svg",
91
+ },
92
+
93
+ // Favicon
94
+ icon: "/icon.png",
95
+
96
+ // Navigation
97
+ nav: {
98
+ github: "username/repo",
99
+ links: [{ label: "Blog", href: "/blog" }],
100
+ },
101
+
102
+ // Homepage
103
+ homepage: {
104
+ hero: {
105
+ title: "Ship docs in minutes",
106
+ description: "Your tagline here",
107
+ cta: { label: "Get Started", href: "/docs" },
108
+ },
109
+ features: [
110
+ {
111
+ title: "Feature One",
112
+ description: "Description here",
113
+ icon: <Package className="h-5 w-5 text-fd-primary" />,
114
+ },
115
+ {
116
+ title: "Feature Two",
117
+ description: "Description here",
118
+ icon: <Zap className="h-5 w-5 text-fd-primary" />,
119
+ },
120
+ ],
121
+ },
122
+ });
123
+ ```
124
+
125
+ ## Exports
126
+
127
+ ### Main (`onedocs`)
128
+
129
+ ```ts
130
+ // Layouts
131
+ export { RootLayout, DocsLayout, HomePage, HomeLayout } from "onedocs";
132
+
133
+ // Components
134
+ export { InstallBlock, Logo, CTASection, GitHubIcon } from "onedocs";
135
+
136
+ // Config
137
+ export { defineConfig } from "onedocs";
138
+ ```
139
+
140
+ ### Components (`onedocs/components`)
141
+
142
+ Re-exports Fumadocs UI components:
143
+
144
+ ```ts
145
+ import { Callout, Card, Tabs, Tab, Steps, Step } from "onedocs/components";
146
+ ```
147
+
148
+ ### CSS (`onedocs/css/preset.css`)
149
+
150
+ Includes Tailwind, Fumadocs styles, Inter font, and OpenType features.
151
+
152
+ ## Development
153
+
154
+ ```bash
155
+ # Install dependencies
156
+ bun install
157
+
158
+ # Run the docs site
159
+ bun run dev
160
+
161
+ # Build the package
162
+ bun run build
163
+
164
+ # Run tests
165
+ bun test
166
+ ```
167
+
168
+ ## License
169
+
170
+ MIT
@@ -0,0 +1,14 @@
1
+ // src/source/index.ts
2
+ import { loader } from "fumadocs-core/source";
3
+ import { loader as loader2 } from "fumadocs-core/source";
4
+ function createSource(docsSource, options = {}) {
5
+ return loader({
6
+ source: docsSource.toFumadocsSource(),
7
+ baseUrl: options.baseUrl ?? "/docs"
8
+ });
9
+ }
10
+
11
+ export {
12
+ createSource,
13
+ loader2 as loader
14
+ };
@@ -0,0 +1,26 @@
1
+ // src/components/logo.tsx
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ function Logo({ light, dark, alt = "Logo", className }) {
4
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
5
+ /* @__PURE__ */ jsx(
6
+ "img",
7
+ {
8
+ src: light,
9
+ alt,
10
+ className: `dark:hidden ${className ?? ""}`
11
+ }
12
+ ),
13
+ /* @__PURE__ */ jsx(
14
+ "img",
15
+ {
16
+ src: dark,
17
+ alt,
18
+ className: `hidden dark:block ${className ?? ""}`
19
+ }
20
+ )
21
+ ] });
22
+ }
23
+
24
+ export {
25
+ Logo
26
+ };
@@ -0,0 +1,37 @@
1
+ // src/components/install-block.tsx
2
+ import { Tabs, Tab } from "fumadocs-ui/components/tabs";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ function InstallBlock({
5
+ title,
6
+ description,
7
+ packageName,
8
+ children
9
+ }) {
10
+ return /* @__PURE__ */ jsxs("div", { children: [
11
+ title && /* @__PURE__ */ jsx("h1", { className: "mb-4 text-4xl font-bold tracking-tight md:text-5xl lg:text-6xl", children: title }),
12
+ description && /* @__PURE__ */ jsx("p", { className: "text-fd-muted-foreground mb-6 text-balance", children: description }),
13
+ /* @__PURE__ */ jsxs(Tabs, { groupId: "pm", items: ["npm", "yarn", "pnpm", "bun"], className: "!mb-0", children: [
14
+ /* @__PURE__ */ jsx(Tab, { value: "npm", children: /* @__PURE__ */ jsxs("code", { className: "block rounded bg-fd-secondary px-3 py-2 text-sm", children: [
15
+ "npm i ",
16
+ packageName
17
+ ] }) }),
18
+ /* @__PURE__ */ jsx(Tab, { value: "yarn", children: /* @__PURE__ */ jsxs("code", { className: "block rounded bg-fd-secondary px-3 py-2 text-sm", children: [
19
+ "yarn add ",
20
+ packageName
21
+ ] }) }),
22
+ /* @__PURE__ */ jsx(Tab, { value: "pnpm", children: /* @__PURE__ */ jsxs("code", { className: "block rounded bg-fd-secondary px-3 py-2 text-sm", children: [
23
+ "pnpm add ",
24
+ packageName
25
+ ] }) }),
26
+ /* @__PURE__ */ jsx(Tab, { value: "bun", children: /* @__PURE__ */ jsxs("code", { className: "block rounded bg-fd-secondary px-3 py-2 text-sm", children: [
27
+ "bun add ",
28
+ packageName
29
+ ] }) })
30
+ ] }),
31
+ children && /* @__PURE__ */ jsx("div", { className: "mt-6", children })
32
+ ] });
33
+ }
34
+
35
+ export {
36
+ InstallBlock
37
+ };
@@ -0,0 +1,12 @@
1
+ // src/config.ts
2
+ function defineConfig(config) {
3
+ return {
4
+ docs: { dir: "content/docs" },
5
+ theme: { darkMode: true },
6
+ ...config
7
+ };
8
+ }
9
+
10
+ export {
11
+ defineConfig
12
+ };
@@ -0,0 +1,17 @@
1
+ export { Callout } from 'fumadocs-ui/components/callout';
2
+ export { Card, Cards } from 'fumadocs-ui/components/card';
3
+ export { Tab, Tabs } from 'fumadocs-ui/components/tabs';
4
+ export { Step, Steps } from 'fumadocs-ui/components/steps';
5
+ export { Accordion, Accordions } from 'fumadocs-ui/components/accordion';
6
+ export { CodeBlock } from 'fumadocs-ui/components/codeblock';
7
+ export { ImageZoom } from 'fumadocs-ui/components/image-zoom';
8
+ export { TypeTable } from 'fumadocs-ui/components/type-table';
9
+ export { File, Files, Folder } from 'fumadocs-ui/components/files';
10
+ export { InstallBlock } from './install-block.js';
11
+ import * as react_jsx_runtime from 'react/jsx-runtime';
12
+ export { L as Logo } from '../logo-BKLMVPA6.js';
13
+ import 'react';
14
+
15
+ declare function DarkModeFix(): react_jsx_runtime.JSX.Element;
16
+
17
+ export { DarkModeFix };
@@ -0,0 +1,53 @@
1
+ import {
2
+ Logo
3
+ } from "../chunk-I3NBXJTK.js";
4
+ import {
5
+ InstallBlock
6
+ } from "../chunk-TKN3PLPZ.js";
7
+
8
+ // src/components/index.ts
9
+ import { Callout } from "fumadocs-ui/components/callout";
10
+ import { Card, Cards } from "fumadocs-ui/components/card";
11
+ import { Tab, Tabs } from "fumadocs-ui/components/tabs";
12
+ import { Steps, Step } from "fumadocs-ui/components/steps";
13
+ import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
14
+ import { CodeBlock } from "fumadocs-ui/components/codeblock";
15
+ import { ImageZoom } from "fumadocs-ui/components/image-zoom";
16
+ import { TypeTable } from "fumadocs-ui/components/type-table";
17
+ import { File, Folder, Files } from "fumadocs-ui/components/files";
18
+
19
+ // src/components/dark-mode-fix.tsx
20
+ import { jsx } from "react/jsx-runtime";
21
+ function DarkModeFix() {
22
+ return /* @__PURE__ */ jsx(
23
+ "style",
24
+ {
25
+ dangerouslySetInnerHTML: {
26
+ __html: `.dark *, .dark *::before, .dark *::after { border-color: hsl(0 0% 20%) }
27
+ @media (prefers-color-scheme: dark) {
28
+ html:not(.light) *, html:not(.light) *::before, html:not(.light) *::after { border-color: hsl(0 0% 20%) }
29
+ }`
30
+ }
31
+ }
32
+ );
33
+ }
34
+ export {
35
+ Accordion,
36
+ Accordions,
37
+ Callout,
38
+ Card,
39
+ Cards,
40
+ CodeBlock,
41
+ DarkModeFix,
42
+ File,
43
+ Files,
44
+ Folder,
45
+ ImageZoom,
46
+ InstallBlock,
47
+ Logo,
48
+ Step,
49
+ Steps,
50
+ Tab,
51
+ Tabs,
52
+ TypeTable
53
+ };
@@ -0,0 +1,12 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface InstallBlockProps {
5
+ title?: string;
6
+ description?: string;
7
+ packageName: string;
8
+ children?: ReactNode;
9
+ }
10
+ declare function InstallBlock({ title, description, packageName, children, }: InstallBlockProps): react_jsx_runtime.JSX.Element;
11
+
12
+ export { InstallBlock };
@@ -0,0 +1,6 @@
1
+ import {
2
+ InstallBlock
3
+ } from "../chunk-TKN3PLPZ.js";
4
+ export {
5
+ InstallBlock
6
+ };
@@ -0,0 +1,53 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ interface NavLink {
4
+ label: string;
5
+ href: string;
6
+ }
7
+ interface HeroConfig {
8
+ title?: string;
9
+ description?: string;
10
+ cta?: {
11
+ label: string;
12
+ href: string;
13
+ };
14
+ }
15
+ interface FeatureConfig {
16
+ title: string;
17
+ description: string;
18
+ icon?: ReactNode;
19
+ }
20
+ interface HomepageConfig {
21
+ hero?: HeroConfig;
22
+ features?: FeatureConfig[];
23
+ }
24
+ interface ThemeConfig {
25
+ primaryColor?: string;
26
+ darkMode?: boolean;
27
+ }
28
+ interface I18nConfig {
29
+ defaultLanguage: string;
30
+ languages: string[];
31
+ }
32
+ interface OnedocsConfig {
33
+ title: string;
34
+ description?: string;
35
+ logo?: string | {
36
+ light: string;
37
+ dark: string;
38
+ };
39
+ icon?: string;
40
+ nav?: {
41
+ links?: NavLink[];
42
+ github?: string;
43
+ };
44
+ homepage?: HomepageConfig;
45
+ docs?: {
46
+ dir?: string;
47
+ };
48
+ theme?: ThemeConfig;
49
+ i18n?: I18nConfig;
50
+ }
51
+ declare function defineConfig(config: OnedocsConfig): OnedocsConfig;
52
+
53
+ export { type FeatureConfig, type HeroConfig, type HomepageConfig, type I18nConfig, type NavLink, type OnedocsConfig, type ThemeConfig, defineConfig };
package/dist/config.js ADDED
@@ -0,0 +1,6 @@
1
+ import {
2
+ defineConfig
3
+ } from "./chunk-WWULBBXM.js";
4
+ export {
5
+ defineConfig
6
+ };
@@ -0,0 +1,59 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { OnedocsConfig } from './config.js';
4
+ export { defineConfig } from './config.js';
5
+ import { BaseLayoutProps } from 'fumadocs-ui/layouts/shared';
6
+ export { createSource } from './source/index.js';
7
+ export { InstallBlock } from './components/install-block.js';
8
+ export { L as Logo } from './logo-BKLMVPA6.js';
9
+ export { DocsBody } from 'fumadocs-ui/page';
10
+ export { loader } from 'fumadocs-core/source';
11
+
12
+ interface RootLayoutProps {
13
+ children: ReactNode;
14
+ }
15
+ declare function RootLayout({ children }: RootLayoutProps): react_jsx_runtime.JSX.Element;
16
+
17
+ interface DocsLayoutProps {
18
+ config: OnedocsConfig;
19
+ pageTree: any;
20
+ children: ReactNode;
21
+ }
22
+ declare function DocsLayout({ config, pageTree, children }: DocsLayoutProps): react_jsx_runtime.JSX.Element;
23
+
24
+ interface DocsPageProps {
25
+ toc?: any[];
26
+ children: ReactNode;
27
+ }
28
+ declare function DocsPage({ toc, children }: DocsPageProps): react_jsx_runtime.JSX.Element;
29
+
30
+ interface HomeLayoutProps {
31
+ config: OnedocsConfig;
32
+ children?: React.ReactNode;
33
+ }
34
+ declare function HomeLayout({ config, children }: HomeLayoutProps): react_jsx_runtime.JSX.Element;
35
+ interface HomePageProps {
36
+ config: OnedocsConfig;
37
+ packageName?: string;
38
+ children?: React.ReactNode;
39
+ }
40
+ declare function HomePage({ config, packageName, children }: HomePageProps): react_jsx_runtime.JSX.Element;
41
+
42
+ declare function createBaseOptions(config: OnedocsConfig): BaseLayoutProps;
43
+
44
+ declare function GitHubIcon({ className }: {
45
+ className?: string;
46
+ }): react_jsx_runtime.JSX.Element;
47
+
48
+ interface CTASectionProps {
49
+ title: string;
50
+ description?: string;
51
+ cta: {
52
+ label: string;
53
+ href: string;
54
+ };
55
+ children?: ReactNode;
56
+ }
57
+ declare function CTASection({ title, description, cta, children }: CTASectionProps): react_jsx_runtime.JSX.Element;
58
+
59
+ export { CTASection, DocsLayout, DocsPage, GitHubIcon, HomeLayout, HomePage, OnedocsConfig, RootLayout, createBaseOptions };
package/dist/index.js ADDED
@@ -0,0 +1,166 @@
1
+ import {
2
+ defineConfig
3
+ } from "./chunk-WWULBBXM.js";
4
+ import {
5
+ Logo
6
+ } from "./chunk-I3NBXJTK.js";
7
+ import {
8
+ InstallBlock
9
+ } from "./chunk-TKN3PLPZ.js";
10
+ import {
11
+ createSource,
12
+ loader
13
+ } from "./chunk-EKYRMBZ6.js";
14
+
15
+ // src/layouts/root.tsx
16
+ import { RootProvider } from "fumadocs-ui/provider/tanstack";
17
+ import { jsx } from "react/jsx-runtime";
18
+ function RootLayout({ children }) {
19
+ return /* @__PURE__ */ jsx(RootProvider, { children });
20
+ }
21
+
22
+ // src/layouts/docs.tsx
23
+ import { DocsLayout as FumaDocsLayout } from "fumadocs-ui/layouts/docs";
24
+
25
+ // src/components/icons.tsx
26
+ import { jsx as jsx2 } from "react/jsx-runtime";
27
+ function GitHubIcon({ className }) {
28
+ return /* @__PURE__ */ jsx2(
29
+ "svg",
30
+ {
31
+ role: "img",
32
+ "aria-label": "GitHub",
33
+ viewBox: "0 0 24 24",
34
+ fill: "currentColor",
35
+ className: className ?? "size-5",
36
+ children: /* @__PURE__ */ jsx2("path", { d: "M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12" })
37
+ }
38
+ );
39
+ }
40
+
41
+ // src/layouts/shared.tsx
42
+ import { jsx as jsx3 } from "react/jsx-runtime";
43
+ function createBaseOptions(config) {
44
+ const links = (config.nav?.links ?? []).map((link) => ({
45
+ type: "main",
46
+ text: link.label,
47
+ url: link.href
48
+ }));
49
+ if (config.nav?.github) {
50
+ links.push({
51
+ type: "icon",
52
+ text: "GitHub",
53
+ icon: /* @__PURE__ */ jsx3(GitHubIcon, {}),
54
+ url: `https://github.com/${config.nav.github}`
55
+ });
56
+ }
57
+ const navTitle = config.logo ? typeof config.logo === "string" ? /* @__PURE__ */ jsx3("img", { src: config.logo, alt: config.title, className: "h-6" }) : /* @__PURE__ */ jsx3(Logo, { light: config.logo.light, dark: config.logo.dark, alt: config.title, className: "h-6" }) : config.title;
58
+ return {
59
+ nav: {
60
+ title: navTitle
61
+ },
62
+ links
63
+ };
64
+ }
65
+
66
+ // src/layouts/docs.tsx
67
+ import { jsx as jsx4 } from "react/jsx-runtime";
68
+ function DocsLayout({ config, pageTree, children }) {
69
+ return /* @__PURE__ */ jsx4(FumaDocsLayout, { ...createBaseOptions(config), tree: pageTree, children });
70
+ }
71
+
72
+ // src/layouts/docs-page.tsx
73
+ import { DocsPage as FumaDocsPage, DocsBody } from "fumadocs-ui/page";
74
+ import { jsx as jsx5 } from "react/jsx-runtime";
75
+ function DocsPage({ toc, children }) {
76
+ return /* @__PURE__ */ jsx5(FumaDocsPage, { toc, children: /* @__PURE__ */ jsx5(DocsBody, { children }) });
77
+ }
78
+
79
+ // src/layouts/home.tsx
80
+ import { HomeLayout as FumaHomeLayout } from "fumadocs-ui/layouts/home";
81
+ import { jsx as jsx6, jsxs } from "react/jsx-runtime";
82
+ function HomeLayout({ config, children }) {
83
+ return /* @__PURE__ */ jsx6(FumaHomeLayout, { ...createBaseOptions(config), children });
84
+ }
85
+ function HomePage({ config, packageName, children }) {
86
+ const { homepage } = config;
87
+ const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
88
+ return /* @__PURE__ */ jsx6(HomeLayout, { config, children: /* @__PURE__ */ jsxs("main", { className: "flex-1 flex flex-col min-h-[calc(100vh-var(--fd-nav-height))]", children: [
89
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col relative mx-auto w-full max-w-(--fd-layout-width)", children: [
90
+ /* @__PURE__ */ jsx6("div", { className: "absolute inset-0 border-x pointer-events-none" }),
91
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
92
+ /* @__PURE__ */ jsx6("section", { id: "hero", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-4", children: [
93
+ /* @__PURE__ */ jsxs("div", { className: "lg:col-span-2 p-6 lg:p-12", children: [
94
+ /* @__PURE__ */ jsx6("h1", { className: "text-left text-4xl font-semibold leading-tight text-fd-foreground sm:text-5xl md:text-6xl tracking-tight", children: homepage?.hero?.title ?? config.title }),
95
+ /* @__PURE__ */ jsx6("p", { className: "text-left max-w-xl leading-normal text-fd-muted-foreground sm:text-lg sm:leading-normal text-balance mt-4", children: homepage?.hero?.description ?? config.description }),
96
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row items-start sm:items-end gap-4 mt-8 w-full", children: [
97
+ packageName && /* @__PURE__ */ jsx6("div", { className: "flex-1", children: /* @__PURE__ */ jsx6(InstallBlock, { packageName }) }),
98
+ /* @__PURE__ */ jsx6(
99
+ "a",
100
+ {
101
+ href: homepage?.hero?.cta?.href ?? "/docs",
102
+ className: "inline-flex h-10 items-center justify-center rounded-lg bg-fd-primary px-6 text-sm font-medium text-fd-primary-foreground shadow transition-colors hover:bg-fd-primary/90 whitespace-nowrap",
103
+ children: homepage?.hero?.cta?.label ?? "Get Started"
104
+ }
105
+ )
106
+ ] })
107
+ ] }),
108
+ /* @__PURE__ */ jsx6("div", { className: "lg:col-span-2 hidden lg:block" })
109
+ ] }) }),
110
+ homepage?.features && homepage.features.length > 0 && /* @__PURE__ */ jsx6("section", { id: "features", children: /* @__PURE__ */ jsx6("div", { className: "border-y", children: /* @__PURE__ */ jsx6("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 [&>*]:border-b [&>*:nth-last-child(-n+1)]:border-b-0 sm:[&>*:nth-last-child(-n+2)]:border-b-0 lg:[&>*:nth-last-child(-n+4)]:border-b-0", children: homepage.features.map((feature) => /* @__PURE__ */ jsxs(
111
+ "div",
112
+ {
113
+ className: "flex flex-col gap-y-2 items-start justify-start py-8 px-6 transition-colors hover:bg-fd-secondary/20 sm:border-r sm:[&:nth-child(2n)]:border-r-0 lg:[&:nth-child(2n)]:border-r lg:[&:nth-child(4n)]:border-r-0",
114
+ children: [
115
+ feature.icon && /* @__PURE__ */ jsx6("div", { className: "bg-fd-primary/10 p-2 rounded-lg mb-2", children: feature.icon }),
116
+ /* @__PURE__ */ jsx6("h3", { className: "text-base font-medium text-fd-card-foreground", children: feature.title }),
117
+ /* @__PURE__ */ jsx6("p", { className: "text-sm text-fd-muted-foreground", children: feature.description })
118
+ ]
119
+ },
120
+ feature.title
121
+ )) }) }) })
122
+ ] }),
123
+ children && /* @__PURE__ */ jsx6("div", { className: "flex-1 flex items-center justify-center", children })
124
+ ] }),
125
+ /* @__PURE__ */ jsx6("footer", { className: "relative mx-auto w-full max-w-(--fd-layout-width)", children: /* @__PURE__ */ jsx6("div", { className: "border-x border-t px-6 py-4", children: /* @__PURE__ */ jsxs("p", { className: "text-sm text-fd-muted-foreground", children: [
126
+ "\xA9 ",
127
+ currentYear,
128
+ " ",
129
+ config.title
130
+ ] }) }) })
131
+ ] }) });
132
+ }
133
+
134
+ // src/components/cta-section.tsx
135
+ import { jsx as jsx7, jsxs as jsxs2 } from "react/jsx-runtime";
136
+ function CTASection({ title, description, cta, children }) {
137
+ return /* @__PURE__ */ jsx7("section", { children: /* @__PURE__ */ jsxs2("div", { className: "flex flex-col items-center justify-center text-center py-16 px-6", children: [
138
+ /* @__PURE__ */ jsx7("h2", { className: "text-2xl font-semibold text-fd-foreground sm:text-3xl", children: title }),
139
+ description && /* @__PURE__ */ jsx7("p", { className: "mt-2 text-fd-muted-foreground max-w-md", children: description }),
140
+ /* @__PURE__ */ jsx7(
141
+ "a",
142
+ {
143
+ href: cta.href,
144
+ className: "mt-6 inline-flex h-10 items-center justify-center rounded-lg bg-fd-primary px-6 text-sm font-medium text-fd-primary-foreground shadow transition-colors hover:bg-fd-primary/90",
145
+ children: cta.label
146
+ }
147
+ ),
148
+ children
149
+ ] }) });
150
+ }
151
+ export {
152
+ CTASection,
153
+ DocsBody,
154
+ DocsLayout,
155
+ DocsPage,
156
+ GitHubIcon,
157
+ HomeLayout,
158
+ HomePage,
159
+ InstallBlock,
160
+ Logo,
161
+ RootLayout,
162
+ createBaseOptions,
163
+ createSource,
164
+ defineConfig,
165
+ loader
166
+ };