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 +21 -0
- package/README.md +170 -0
- package/dist/chunk-EKYRMBZ6.js +14 -0
- package/dist/chunk-I3NBXJTK.js +26 -0
- package/dist/chunk-TKN3PLPZ.js +37 -0
- package/dist/chunk-WWULBBXM.js +12 -0
- package/dist/components/index.d.ts +17 -0
- package/dist/components/index.js +53 -0
- package/dist/components/install-block.d.ts +12 -0
- package/dist/components/install-block.js +6 -0
- package/dist/config.d.ts +53 -0
- package/dist/config.js +6 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.js +166 -0
- package/dist/llms/index.d.ts +29 -0
- package/dist/llms/index.js +79 -0
- package/dist/logo-BKLMVPA6.d.ts +11 -0
- package/dist/source/index.d.ts +14 -0
- package/dist/source/index.js +8 -0
- package/package.json +91 -0
- package/src/css/preset.css +48 -0
- package/src/fonts/InterVariable.woff2 +1448 -0
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,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 };
|
package/dist/config.d.ts
ADDED
|
@@ -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
package/dist/index.d.ts
ADDED
|
@@ -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
|
+
};
|