ardo 1.0.0 → 1.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) 2026 Sebastian Software GmbH
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,123 @@
1
+ # ardo
2
+
3
+ React-first Static Documentation Framework built on TanStack Start.
4
+
5
+ ## Quick Start
6
+
7
+ Scaffold a new project with the CLI:
8
+
9
+ ```bash
10
+ pnpm create ardo@latest my-docs
11
+ cd my-docs
12
+ pnpm install
13
+ pnpm dev
14
+ ```
15
+
16
+ ## Manual Installation
17
+
18
+ ```bash
19
+ pnpm add ardo @tanstack/react-start @tanstack/react-router react react-dom
20
+ pnpm add -D typescript vite tailwindcss
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ### Configuration
26
+
27
+ Create a `press.config.ts` in your project root:
28
+
29
+ ```typescript
30
+ import { defineConfig } from 'ardo/config'
31
+
32
+ export default defineConfig({
33
+ title: 'My Documentation',
34
+ description: 'Built with Ardo',
35
+
36
+ themeConfig: {
37
+ nav: [{ text: 'Guide', link: '/guide/getting-started' }],
38
+ sidebar: [
39
+ {
40
+ text: 'Guide',
41
+ items: [{ text: 'Getting Started', link: '/guide/getting-started' }],
42
+ },
43
+ ],
44
+ },
45
+ })
46
+ ```
47
+
48
+ ### Vite Plugin
49
+
50
+ Add the plugin to your `vite.config.ts`:
51
+
52
+ ```typescript
53
+ import { defineConfig } from 'vite'
54
+ import { tanstackStart } from '@tanstack/react-start/plugin/vite'
55
+ import react from '@vitejs/plugin-react'
56
+ import { ardoPlugin } from 'ardo/vite'
57
+
58
+ export default defineConfig({
59
+ plugins: [
60
+ tanstackStart({
61
+ prerender: {
62
+ enabled: true,
63
+ crawlLinks: true,
64
+ },
65
+ }),
66
+ react(),
67
+ ardoPlugin(),
68
+ ],
69
+ })
70
+ ```
71
+
72
+ ### Runtime Hooks
73
+
74
+ Access configuration and page data in your components:
75
+
76
+ ```tsx
77
+ import { useConfig, useSidebar, usePageData, useTOC } from 'ardo/runtime'
78
+
79
+ function MyComponent() {
80
+ const config = useConfig()
81
+ const sidebar = useSidebar()
82
+ const page = usePageData()
83
+ const toc = useTOC()
84
+
85
+ return <h1>{config.title}</h1>
86
+ }
87
+ ```
88
+
89
+ ### Theme Components
90
+
91
+ Use pre-built components for your documentation:
92
+
93
+ ```tsx
94
+ import { DocPage, Layout, Header, Sidebar, TOC } from 'ardo/theme'
95
+
96
+ function App() {
97
+ return (
98
+ <DocPage>
99
+ <YourContent />
100
+ </DocPage>
101
+ )
102
+ }
103
+ ```
104
+
105
+ ## Exports
106
+
107
+ | Export | Description |
108
+ | ----------------------- | ---------------------------------------- |
109
+ | `ardo/config` | Configuration utilities (`defineConfig`) |
110
+ | `ardo/vite` | Vite plugin (`ardoPlugin`) |
111
+ | `ardo/runtime` | React hooks and providers |
112
+ | `ardo/theme` | Pre-built UI components |
113
+ | `ardo/theme/styles.css` | Default theme styles |
114
+
115
+ ## Documentation
116
+
117
+ Full documentation available at [sebastian-software.github.io/ardo](https://sebastian-software.github.io/ardo/)
118
+
119
+ LLM-optimized documentation: [llms-full.txt](https://sebastian-software.github.io/ardo/llms-full.txt)
120
+
121
+ ## License
122
+
123
+ [MIT](../../LICENSE) © [Sebastian Software GmbH](https://sebastian-software.de)
@@ -0,0 +1,335 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { S as SidebarItem } from './types-ChK5MqjO.js';
4
+
5
+ interface LayoutProps {
6
+ /** Header content */
7
+ header?: ReactNode;
8
+ /** Sidebar content */
9
+ sidebar?: ReactNode;
10
+ /** Footer content */
11
+ footer?: ReactNode;
12
+ /** Main content */
13
+ children: ReactNode;
14
+ /** Additional CSS classes */
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Layout component with explicit slot props.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <Layout
23
+ * header={<Header logo="/logo.svg" title="Ardo" nav={...} />}
24
+ * sidebar={<Sidebar>...</Sidebar>}
25
+ * footer={<Footer message="MIT License" />}
26
+ * >
27
+ * <Outlet />
28
+ * </Layout>
29
+ * ```
30
+ */
31
+ declare function Layout({ header, sidebar, footer, children, className }: LayoutProps): react_jsx_runtime.JSX.Element;
32
+
33
+ interface HeaderProps {
34
+ /** Logo image URL or light/dark variants */
35
+ logo?: string | {
36
+ light: string;
37
+ dark: string;
38
+ };
39
+ /** Site title displayed next to logo */
40
+ title?: string;
41
+ /** Navigation content (Nav component or custom) */
42
+ nav?: ReactNode;
43
+ /** Actions/right side content (social links, custom buttons) */
44
+ actions?: ReactNode;
45
+ /** Show search (default: true) */
46
+ search?: boolean;
47
+ /** Show theme toggle (default: true) */
48
+ themeToggle?: boolean;
49
+ /** Additional CSS classes */
50
+ className?: string;
51
+ }
52
+ /**
53
+ * Header component with explicit slot props.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * <Header
58
+ * logo="/logo.svg"
59
+ * title="Ardo"
60
+ * nav={
61
+ * <Nav>
62
+ * <NavLink to="/guide">Guide</NavLink>
63
+ * <NavLink to="/api">API</NavLink>
64
+ * </Nav>
65
+ * }
66
+ * actions={
67
+ * <SocialLink href="https://github.com/..." icon="github" />
68
+ * }
69
+ * />
70
+ * ```
71
+ */
72
+ declare function Header({ logo, title, nav, actions, search, themeToggle, className, }: HeaderProps): react_jsx_runtime.JSX.Element;
73
+ interface SocialLinkProps {
74
+ /** URL to link to */
75
+ href: string;
76
+ /** Social icon type */
77
+ icon: 'github' | 'twitter' | 'discord' | 'linkedin' | 'youtube' | 'npm';
78
+ /** Accessible label */
79
+ ariaLabel?: string;
80
+ /** Additional CSS classes */
81
+ className?: string;
82
+ }
83
+ /**
84
+ * Social media link with icon.
85
+ *
86
+ * @example
87
+ * ```tsx
88
+ * <SocialLink href="https://github.com/..." icon="github" />
89
+ * ```
90
+ */
91
+ declare function SocialLink({ href, icon, ariaLabel, className }: SocialLinkProps): react_jsx_runtime.JSX.Element;
92
+
93
+ interface SidebarProps {
94
+ /** Sidebar items (for data-driven approach) */
95
+ items?: SidebarItem[];
96
+ /** Children for JSX composition (SidebarGroup, SidebarLink) */
97
+ children?: ReactNode;
98
+ /** Additional CSS classes */
99
+ className?: string;
100
+ }
101
+ /**
102
+ * Sidebar component supporting both data-driven and JSX composition patterns.
103
+ *
104
+ * @example Data-driven (items prop)
105
+ * ```tsx
106
+ * <Sidebar items={[
107
+ * { text: 'Introduction', link: '/intro' },
108
+ * { text: 'Guide', items: [
109
+ * { text: 'Getting Started', link: '/guide/getting-started' }
110
+ * ]}
111
+ * ]} />
112
+ * ```
113
+ *
114
+ * @example JSX composition
115
+ * ```tsx
116
+ * <Sidebar>
117
+ * <SidebarLink to="/intro">Introduction</SidebarLink>
118
+ * <SidebarGroup title="Guide">
119
+ * <SidebarLink to="/guide/getting-started">Getting Started</SidebarLink>
120
+ * </SidebarGroup>
121
+ * </Sidebar>
122
+ * ```
123
+ */
124
+ declare function Sidebar({ items, children, className }: SidebarProps): react_jsx_runtime.JSX.Element;
125
+ interface SidebarGroupProps {
126
+ /** Group title */
127
+ title: string;
128
+ /** Optional link for the group title */
129
+ to?: string;
130
+ /** Initial collapsed state (default: false) */
131
+ collapsed?: boolean;
132
+ /** Whether group is collapsible (default: true if has children) */
133
+ collapsible?: boolean;
134
+ /** Children (SidebarLink, nested SidebarGroup) */
135
+ children?: ReactNode;
136
+ /** Additional CSS classes */
137
+ className?: string;
138
+ }
139
+ /**
140
+ * Group component for organizing sidebar links.
141
+ *
142
+ * @example
143
+ * ```tsx
144
+ * <SidebarGroup title="Guide">
145
+ * <SidebarLink to="/guide/intro">Introduction</SidebarLink>
146
+ * <SidebarLink to="/guide/setup">Setup</SidebarLink>
147
+ * </SidebarGroup>
148
+ * ```
149
+ *
150
+ * @example With collapsible state
151
+ * ```tsx
152
+ * <SidebarGroup title="Advanced" collapsed>
153
+ * <SidebarLink to="/advanced/config">Configuration</SidebarLink>
154
+ * </SidebarGroup>
155
+ * ```
156
+ */
157
+ declare function SidebarGroup({ title, to, collapsed: initialCollapsed, collapsible, children, className, }: SidebarGroupProps): react_jsx_runtime.JSX.Element;
158
+ interface SidebarLinkProps {
159
+ /** Internal route path */
160
+ to: string;
161
+ /** Link text */
162
+ children: ReactNode;
163
+ /** Additional CSS classes */
164
+ className?: string;
165
+ }
166
+ /**
167
+ * Sidebar navigation link.
168
+ *
169
+ * @example
170
+ * ```tsx
171
+ * <SidebarLink to="/guide/getting-started">Getting Started</SidebarLink>
172
+ * ```
173
+ */
174
+ declare function SidebarLink({ to, children, className }: SidebarLinkProps): react_jsx_runtime.JSX.Element;
175
+
176
+ interface FooterProps {
177
+ /** Footer message (supports HTML string) */
178
+ message?: string;
179
+ /** Copyright text (supports HTML string) */
180
+ copyright?: string;
181
+ /** Custom content (overrides message/copyright) */
182
+ children?: ReactNode;
183
+ /** Additional CSS classes */
184
+ className?: string;
185
+ }
186
+ /**
187
+ * Footer component with message and copyright props.
188
+ *
189
+ * @example Simple usage
190
+ * ```tsx
191
+ * <Footer message="MIT License" copyright="2026 Sebastian Software" />
192
+ * ```
193
+ *
194
+ * @example With HTML
195
+ * ```tsx
196
+ * <Footer
197
+ * message="Built with <a href='...'>Ardo</a>"
198
+ * copyright="Copyright &copy; 2026"
199
+ * />
200
+ * ```
201
+ *
202
+ * @example Custom content
203
+ * ```tsx
204
+ * <Footer>
205
+ * <CustomFooterContent />
206
+ * </Footer>
207
+ * ```
208
+ */
209
+ declare function Footer({ message, copyright, children, className }: FooterProps): react_jsx_runtime.JSX.Element | null;
210
+ interface FooterMessageProps {
211
+ children: ReactNode;
212
+ className?: string;
213
+ }
214
+ interface FooterCopyrightProps {
215
+ children: ReactNode;
216
+ className?: string;
217
+ }
218
+
219
+ declare function TOC(): react_jsx_runtime.JSX.Element | null;
220
+
221
+ interface ContentProps {
222
+ children: ReactNode;
223
+ }
224
+ declare function Content({ children }: ContentProps): react_jsx_runtime.JSX.Element;
225
+
226
+ interface DocPageProps {
227
+ children: ReactNode;
228
+ }
229
+ /**
230
+ * Full documentation page with Layout wrapper.
231
+ * Use this when you don't have a _layout.tsx file.
232
+ *
233
+ * @example
234
+ * ```tsx
235
+ * <DocPage>
236
+ * <Content />
237
+ * </DocPage>
238
+ * ```
239
+ */
240
+ declare function DocPage({ children }: DocPageProps): react_jsx_runtime.JSX.Element;
241
+ interface DocContentProps {
242
+ children: ReactNode;
243
+ }
244
+ /**
245
+ * Documentation content without Layout wrapper.
246
+ * Use this when you have a _layout.tsx that provides the Layout.
247
+ *
248
+ * @example
249
+ * ```tsx
250
+ * // In _layout.tsx:
251
+ * <Layout>
252
+ * <Header ... />
253
+ * <Sidebar ... />
254
+ * <Outlet />
255
+ * <Footer ... />
256
+ * </Layout>
257
+ *
258
+ * // In page routes:
259
+ * <DocContent>
260
+ * <MarkdownContent />
261
+ * </DocContent>
262
+ * ```
263
+ */
264
+ declare function DocContent({ children }: DocContentProps): react_jsx_runtime.JSX.Element;
265
+ interface DocLayoutProps {
266
+ content: ReactNode;
267
+ }
268
+ /**
269
+ * @deprecated Use DocPage or DocContent instead
270
+ */
271
+ declare function DocLayout({ content }: DocLayoutProps): react_jsx_runtime.JSX.Element;
272
+
273
+ declare function HomePage(): react_jsx_runtime.JSX.Element;
274
+
275
+ declare function ThemeToggle(): react_jsx_runtime.JSX.Element;
276
+
277
+ declare function Search(): react_jsx_runtime.JSX.Element;
278
+
279
+ interface CodeBlockProps {
280
+ code: string;
281
+ language?: string;
282
+ title?: string;
283
+ lineNumbers?: boolean;
284
+ highlightLines?: number[];
285
+ children?: React.ReactNode;
286
+ }
287
+ declare function CodeBlock({ code, language, title, lineNumbers, highlightLines, children, }: CodeBlockProps): react_jsx_runtime.JSX.Element;
288
+ interface CodeGroupProps {
289
+ children: React.ReactNode;
290
+ }
291
+ declare function CodeGroup({ children }: CodeGroupProps): react_jsx_runtime.JSX.Element;
292
+
293
+ type ContainerType = 'tip' | 'warning' | 'danger' | 'info' | 'note';
294
+ interface ContainerProps {
295
+ type: ContainerType;
296
+ title?: string;
297
+ children: ReactNode;
298
+ }
299
+ declare function Container({ type, title, children }: ContainerProps): react_jsx_runtime.JSX.Element;
300
+ declare function Tip({ title, children }: Omit<ContainerProps, 'type'>): react_jsx_runtime.JSX.Element;
301
+ declare function Warning({ title, children }: Omit<ContainerProps, 'type'>): react_jsx_runtime.JSX.Element;
302
+ declare function Danger({ title, children }: Omit<ContainerProps, 'type'>): react_jsx_runtime.JSX.Element;
303
+ declare function Info({ title, children }: Omit<ContainerProps, 'type'>): react_jsx_runtime.JSX.Element;
304
+ declare function Note({ title, children }: Omit<ContainerProps, 'type'>): react_jsx_runtime.JSX.Element;
305
+
306
+ interface TabsProps {
307
+ defaultValue?: string;
308
+ children: ReactNode;
309
+ }
310
+ declare function Tabs({ defaultValue, children }: TabsProps): react_jsx_runtime.JSX.Element;
311
+ interface TabListProps {
312
+ children: ReactNode;
313
+ }
314
+ declare function TabList({ children }: TabListProps): react_jsx_runtime.JSX.Element;
315
+ interface TabProps {
316
+ value: string;
317
+ children: ReactNode;
318
+ }
319
+ declare function Tab({ value, children }: TabProps): react_jsx_runtime.JSX.Element;
320
+ interface TabPanelProps {
321
+ value: string;
322
+ children: ReactNode;
323
+ }
324
+ declare function TabPanel({ value, children }: TabPanelProps): react_jsx_runtime.JSX.Element | null;
325
+ interface TabPanelsProps {
326
+ children: ReactNode;
327
+ }
328
+ declare function TabPanels({ children }: TabPanelsProps): react_jsx_runtime.JSX.Element;
329
+
330
+ interface CopyButtonProps {
331
+ code: string;
332
+ }
333
+ declare function CopyButton({ code }: CopyButtonProps): react_jsx_runtime.JSX.Element;
334
+
335
+ export { SocialLink as A, type SocialLinkProps as B, CodeBlock as C, Danger as D, Footer as F, Header as H, Info as I, Layout as L, Note as N, Search as S, TOC as T, Warning as W, CodeGroup as a, Container as b, Content as c, CopyButton as d, DocLayout as e, DocPage as f, HomePage as g, Sidebar as h, Tab as i, TabList as j, TabPanel as k, TabPanels as l, Tabs as m, ThemeToggle as n, Tip as o, DocContent as p, type FooterCopyrightProps as q, type FooterMessageProps as r, type FooterProps as s, type HeaderProps as t, type LayoutProps as u, SidebarGroup as v, type SidebarGroupProps as w, SidebarLink as x, type SidebarLinkProps as y, type SidebarProps as z };