@blackwork/docs 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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +330 -0
  3. package/dist/_virtual/_rolldown/runtime.cjs +9 -0
  4. package/dist/config/defaults.cjs +9 -0
  5. package/dist/config/defaults.mjs +9 -0
  6. package/dist/config/define-config.cjs +9 -0
  7. package/dist/config/define-config.d.mts +7 -0
  8. package/dist/config/define-config.d.ts +7 -0
  9. package/dist/config/define-config.mjs +9 -0
  10. package/dist/config/define-docs-config.cjs +9 -0
  11. package/dist/config/define-docs-config.d.mts +9 -0
  12. package/dist/config/define-docs-config.d.ts +9 -0
  13. package/dist/config/define-docs-config.mjs +9 -0
  14. package/dist/config/load-content-config.cjs +9 -0
  15. package/dist/config/load-content-config.d.mts +8 -0
  16. package/dist/config/load-content-config.d.ts +8 -0
  17. package/dist/config/load-content-config.mjs +9 -0
  18. package/dist/config/types.d.mts +78 -0
  19. package/dist/config/types.d.ts +78 -0
  20. package/dist/index.cjs +9 -0
  21. package/dist/index.d.mts +24 -0
  22. package/dist/index.d.ts +24 -0
  23. package/dist/index.mjs +9 -0
  24. package/dist/mdx/default-docs-components.cjs +9 -0
  25. package/dist/mdx/default-docs-components.d.mts +7 -0
  26. package/dist/mdx/default-docs-components.d.ts +7 -0
  27. package/dist/mdx/default-docs-components.mjs +9 -0
  28. package/dist/mdx/merge-docs-components.cjs +9 -0
  29. package/dist/mdx/merge-docs-components.d.mts +7 -0
  30. package/dist/mdx/merge-docs-components.d.ts +7 -0
  31. package/dist/mdx/merge-docs-components.mjs +9 -0
  32. package/dist/metadata/create-doc-metadata.cjs +9 -0
  33. package/dist/metadata/create-doc-metadata.d.mts +33 -0
  34. package/dist/metadata/create-doc-metadata.d.ts +33 -0
  35. package/dist/metadata/create-doc-metadata.mjs +9 -0
  36. package/dist/navigation/build-locale-links.cjs +9 -0
  37. package/dist/navigation/build-locale-links.d.mts +24 -0
  38. package/dist/navigation/build-locale-links.d.ts +24 -0
  39. package/dist/navigation/build-locale-links.mjs +9 -0
  40. package/dist/navigation/build-pager.cjs +9 -0
  41. package/dist/navigation/build-pager.d.mts +25 -0
  42. package/dist/navigation/build-pager.d.ts +25 -0
  43. package/dist/navigation/build-pager.mjs +9 -0
  44. package/dist/navigation/build-sidebar.cjs +9 -0
  45. package/dist/navigation/build-sidebar.d.mts +28 -0
  46. package/dist/navigation/build-sidebar.d.ts +28 -0
  47. package/dist/navigation/build-sidebar.mjs +9 -0
  48. package/dist/navigation/resolve-sidebar.cjs +9 -0
  49. package/dist/navigation/resolve-sidebar.d.mts +20 -0
  50. package/dist/navigation/resolve-sidebar.d.ts +20 -0
  51. package/dist/navigation/resolve-sidebar.mjs +9 -0
  52. package/dist/next/context.cjs +9 -0
  53. package/dist/next/context.mjs +9 -0
  54. package/dist/next/load-doc-content.cjs +9 -0
  55. package/dist/next/load-doc-content.mjs +9 -0
  56. package/dist/next/load-generated-manifest.cjs +9 -0
  57. package/dist/next/load-generated-manifest.mjs +9 -0
  58. package/dist/next/metadata.cjs +9 -0
  59. package/dist/next/metadata.d.mts +12 -0
  60. package/dist/next/metadata.d.ts +12 -0
  61. package/dist/next/metadata.mjs +9 -0
  62. package/dist/next/page.cjs +9 -0
  63. package/dist/next/page.d.mts +16 -0
  64. package/dist/next/page.d.ts +16 -0
  65. package/dist/next/page.mjs +9 -0
  66. package/dist/next/render-route.cjs +9 -0
  67. package/dist/next/render-route.d.mts +10 -0
  68. package/dist/next/render-route.d.ts +10 -0
  69. package/dist/next/render-route.mjs +9 -0
  70. package/dist/next/resolve-document-lang.cjs +9 -0
  71. package/dist/next/resolve-document-lang.mjs +9 -0
  72. package/dist/next/root-layout.cjs +9 -0
  73. package/dist/next/root-layout.d.mts +19 -0
  74. package/dist/next/root-layout.d.ts +19 -0
  75. package/dist/next/root-layout.mjs +9 -0
  76. package/dist/next-plugin/generate.cjs +32 -0
  77. package/dist/next-plugin/generate.mjs +32 -0
  78. package/dist/next.cjs +9 -0
  79. package/dist/next.d.mts +21 -0
  80. package/dist/next.d.ts +21 -0
  81. package/dist/next.mjs +9 -0
  82. package/dist/routing/build-static-params.cjs +9 -0
  83. package/dist/routing/build-static-params.d.mts +13 -0
  84. package/dist/routing/build-static-params.d.ts +13 -0
  85. package/dist/routing/build-static-params.mjs +9 -0
  86. package/dist/routing/resolve-docs-route.cjs +9 -0
  87. package/dist/routing/resolve-docs-route.d.mts +35 -0
  88. package/dist/routing/resolve-docs-route.d.ts +35 -0
  89. package/dist/routing/resolve-docs-route.mjs +9 -0
  90. package/dist/runtime.cjs +9 -0
  91. package/dist/runtime.d.mts +4 -0
  92. package/dist/runtime.d.ts +4 -0
  93. package/dist/runtime.mjs +9 -0
  94. package/dist/source/build-docs-source.cjs +9 -0
  95. package/dist/source/build-docs-source.mjs +9 -0
  96. package/dist/source/collect-docs-manifest.cjs +9 -0
  97. package/dist/source/collect-docs-manifest.mjs +9 -0
  98. package/dist/source/create-docs-source-from-manifest.cjs +9 -0
  99. package/dist/source/create-docs-source-from-manifest.mjs +9 -0
  100. package/dist/source/create-docs-source.cjs +9 -0
  101. package/dist/source/create-docs-source.d.mts +10 -0
  102. package/dist/source/create-docs-source.d.ts +10 -0
  103. package/dist/source/create-docs-source.mjs +9 -0
  104. package/dist/source/types.d.mts +36 -0
  105. package/dist/source/types.d.ts +36 -0
  106. package/dist/theme/components/content-shell.cjs +9 -0
  107. package/dist/theme/components/content-shell.d.mts +17 -0
  108. package/dist/theme/components/content-shell.d.ts +17 -0
  109. package/dist/theme/components/content-shell.mjs +9 -0
  110. package/dist/theme/components/docs-rail-scroll-state.cjs +9 -0
  111. package/dist/theme/components/docs-rail-scroll-state.mjs +9 -0
  112. package/dist/theme/components/docs-rail-scroll.cjs +9 -0
  113. package/dist/theme/components/docs-rail-scroll.mjs +9 -0
  114. package/dist/theme/components/docs-scroll-reset.cjs +9 -0
  115. package/dist/theme/components/docs-scroll-reset.mjs +9 -0
  116. package/dist/theme/components/docs-shell.cjs +9 -0
  117. package/dist/theme/components/docs-shell.d.mts +17 -0
  118. package/dist/theme/components/docs-shell.d.ts +17 -0
  119. package/dist/theme/components/docs-shell.mjs +9 -0
  120. package/dist/theme/components/docs-toc-geometry.cjs +9 -0
  121. package/dist/theme/components/docs-toc-geometry.mjs +9 -0
  122. package/dist/theme/components/docs-toc.cjs +9 -0
  123. package/dist/theme/components/docs-toc.mjs +9 -0
  124. package/dist/theme/components/footer.cjs +9 -0
  125. package/dist/theme/components/footer.d.mts +11 -0
  126. package/dist/theme/components/footer.d.ts +11 -0
  127. package/dist/theme/components/footer.mjs +9 -0
  128. package/dist/theme/components/header.cjs +9 -0
  129. package/dist/theme/components/header.d.mts +16 -0
  130. package/dist/theme/components/header.d.ts +16 -0
  131. package/dist/theme/components/header.mjs +9 -0
  132. package/dist/theme/components/home-shell.cjs +9 -0
  133. package/dist/theme/components/home-shell.d.mts +14 -0
  134. package/dist/theme/components/home-shell.d.ts +14 -0
  135. package/dist/theme/components/home-shell.mjs +9 -0
  136. package/dist/theme/components/link.cjs +9 -0
  137. package/dist/theme/components/link.d.mts +9 -0
  138. package/dist/theme/components/link.d.ts +9 -0
  139. package/dist/theme/components/link.mjs +9 -0
  140. package/dist/theme/components/shell-shared.cjs +9 -0
  141. package/dist/theme/components/shell-shared.mjs +9 -0
  142. package/dist/theme/create-home-data.cjs +9 -0
  143. package/dist/theme/create-home-data.d.mts +18 -0
  144. package/dist/theme/create-home-data.d.ts +18 -0
  145. package/dist/theme/create-home-data.mjs +9 -0
  146. package/dist/theme/slots.cjs +9 -0
  147. package/dist/theme/slots.d.mts +7 -0
  148. package/dist/theme/slots.d.ts +7 -0
  149. package/dist/theme/slots.mjs +9 -0
  150. package/dist/theme/types.d.mts +64 -0
  151. package/dist/theme/types.d.ts +64 -0
  152. package/dist/theme.cjs +9 -0
  153. package/dist/theme.d.mts +11 -0
  154. package/dist/theme.d.ts +11 -0
  155. package/dist/theme.mjs +9 -0
  156. package/package.json +81 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-PRESENT chengpeiquan (https://github.com/chengpeiquan)
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,330 @@
1
+ # @blackwork/docs
2
+
3
+ `@blackwork/docs` is a Next.js-first documentation framework for the Blackwork ecosystem.
4
+
5
+ It sits one layer above `blackwork` and `@blackwork/machine`:
6
+
7
+ - `blackwork` provides the UI base and Tailwind theme.
8
+ - `@blackwork/machine` provides Markdown and MDX compilation.
9
+ - `@blackwork/docs` provides the docs-site runtime: content discovery, locale-aware routing, metadata, navigation, theme shells, and the public Next.js entry surface.
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ pnpm add @blackwork/docs blackwork next react react-dom
15
+ ```
16
+
17
+ ## Recommended Project Shape
18
+
19
+ ```text
20
+ my-docs/
21
+ content.config.ts
22
+ contents/
23
+ en/
24
+ index.mdx
25
+ guide/getting-started.mdx
26
+ zh/
27
+ index.mdx
28
+ docs.config.ts
29
+ src/
30
+ app/
31
+ layout.tsx
32
+ [[...slug]]/
33
+ page.tsx
34
+ mdx/
35
+ components/
36
+ callout.tsx
37
+ ```
38
+
39
+ The required app-facing files are intentionally thin:
40
+
41
+ - `next.config.ts` wraps the app with `withBlackworkDocs()`.
42
+ - `content.config.ts` defines pure content settings such as content root,
43
+ locales, and section behavior.
44
+ - `docs.config.ts` defines site and MDX component configuration.
45
+ - `src/app/layout.tsx` mounts `DocsRootLayout`.
46
+ - `src/app/[[...slug]]/page.tsx` delegates page rendering, metadata, and static params to `@blackwork/docs`.
47
+ - `contents/**` stores the actual docs content.
48
+
49
+ ## Minimal Config
50
+
51
+ `content.config.ts`
52
+
53
+ ```ts
54
+ export const docsContentConfig = {
55
+ root: 'contents',
56
+ defaultLocale: 'en',
57
+ enableDefaultLocaleRedirect: true,
58
+ locales: {
59
+ en: {
60
+ code: 'en',
61
+ label: 'English',
62
+ },
63
+ zh: {
64
+ code: 'zh',
65
+ label: '简体中文',
66
+ },
67
+ },
68
+ }
69
+ ```
70
+
71
+ Optional section behavior can also stay in `content.config.ts` when different
72
+ top-level content directories need different layouts:
73
+
74
+ ```ts
75
+ export const docsContentConfig = {
76
+ root: 'contents',
77
+ defaultLocale: 'en',
78
+ sections: {
79
+ guide: {
80
+ layout: 'docs',
81
+ sidebar: 'auto',
82
+ },
83
+ reference: {
84
+ layout: 'docs',
85
+ sidebar: 'auto',
86
+ },
87
+ article: {
88
+ layout: 'content',
89
+ },
90
+ },
91
+ }
92
+ ```
93
+
94
+ The first directory under `contents/<locale>/` is treated as the section key.
95
+ `layout: 'docs'` keeps the left docs sidebar, while `layout: 'content'` renders
96
+ the article without that sidebar. Home pages still use the dedicated landing
97
+ shell.
98
+
99
+ ## Manual Sidebars
100
+
101
+ Docs sections can replace the generated sidebar with a manual tree in
102
+ `content.config.ts`:
103
+
104
+ ```ts
105
+ export const docsContentConfig = {
106
+ root: 'contents',
107
+ defaultLocale: 'en',
108
+ sections: {
109
+ guide: {
110
+ layout: 'docs',
111
+ sidebar: [
112
+ {
113
+ type: 'group',
114
+ label: {
115
+ en: 'Foundations',
116
+ zh: '基础',
117
+ },
118
+ items: [
119
+ {
120
+ type: 'item',
121
+ href: '/guide',
122
+ },
123
+ {
124
+ type: 'item',
125
+ href: '/guide/getting-started',
126
+ label: {
127
+ en: 'Quickstart',
128
+ zh: '快速开始',
129
+ },
130
+ },
131
+ ],
132
+ },
133
+ {
134
+ type: 'group',
135
+ label: {
136
+ en: 'Resources',
137
+ zh: '资源',
138
+ },
139
+ items: [
140
+ {
141
+ type: 'item',
142
+ href: 'https://example.com/changelog',
143
+ label: {
144
+ en: 'Changelog',
145
+ zh: '更新日志',
146
+ },
147
+ },
148
+ ],
149
+ },
150
+ ],
151
+ },
152
+ },
153
+ }
154
+ ```
155
+
156
+ Rules for the first manual-sidebar slice:
157
+
158
+ - `sidebar` accepts `'auto'`, `false`, or an array of `group` / `item` nodes.
159
+ - Manual sidebars fully replace automatic sidebar generation for that section.
160
+ - Internal `href` values should use full docs paths such as
161
+ `'/guide/getting-started'`.
162
+ - Internal item `label` is optional. When omitted, the current locale falls
163
+ back to the linked page title.
164
+ - Localized labels fall back to `defaultLocale` when the current locale key is
165
+ missing.
166
+ - External items stay visible in the sidebar, but the pager skips them.
167
+ - Pager order follows the manual tree depth-first across groups.
168
+
169
+ Manual internal links validate eagerly against the docs source for the current
170
+ locale. A missing page throws an actionable error like:
171
+
172
+ ```txt
173
+ [blackwork-docs] Invalid sidebar item in section "guide": href "/guide/design" does not match any document entry in locale "en". Add the page or remove the sidebar item.
174
+ ```
175
+
176
+ `docs.config.ts`
177
+
178
+ ```ts
179
+ import { defineDocsConfig } from '@blackwork/docs'
180
+ import { Callout } from './src/mdx/components/callout'
181
+
182
+ export const docsConfig = defineDocsConfig({
183
+ site: {
184
+ title: 'My Docs',
185
+ description: 'Project documentation powered by Blackwork Docs.',
186
+ },
187
+ mdx: {
188
+ components: {
189
+ Callout,
190
+ },
191
+ },
192
+ })
193
+ ```
194
+
195
+ ## Next.js Entry Files
196
+
197
+ `next.config.ts`
198
+
199
+ ```ts
200
+ import type { NextConfig } from 'next'
201
+ import { withBlackworkDocs } from '@blackwork/docs/next'
202
+
203
+ const nextConfig: NextConfig = {
204
+ images: {
205
+ unoptimized: true,
206
+ },
207
+ transpilePackages: ['blackwork'],
208
+ }
209
+
210
+ export default withBlackworkDocs()(nextConfig)
211
+ ```
212
+
213
+ The wrapper generates a docs manifest under `.blackwork/docs` and keeps it in
214
+ sync during development so Markdown and MDX changes participate in the Next
215
+ module graph instead of relying on client polling.
216
+
217
+ `withBlackworkDocs()` auto-discovers the root-level `content.config.ts` file.
218
+ Keep that file pure data only. Runtime-only configuration such as MDX component
219
+ overrides should stay in `docs.config.ts`.
220
+
221
+ `src/app/layout.tsx`
222
+
223
+ ```tsx
224
+ import { DocsRootLayout } from '@blackwork/docs'
225
+ import { docsConfig } from '../../docs.config'
226
+ import 'blackwork/ui-globals.css'
227
+ import './globals.css'
228
+
229
+ export default function RootLayout({
230
+ children,
231
+ params,
232
+ }: Readonly<{
233
+ children: React.ReactNode
234
+ params: Promise<{ slug?: string[] }>
235
+ }>) {
236
+ return (
237
+ <DocsRootLayout config={docsConfig} params={params}>
238
+ {children}
239
+ </DocsRootLayout>
240
+ )
241
+ }
242
+ ```
243
+
244
+ `src/app/[[...slug]]/page.tsx`
245
+
246
+ ```tsx
247
+ import {
248
+ DocsPage,
249
+ generateMetadata as generateDocsMetadata,
250
+ generateStaticParams as generateDocsStaticParams,
251
+ } from '@blackwork/docs'
252
+ import { notFound, redirect } from 'next/navigation'
253
+ import { docsConfig } from '../../../docs.config'
254
+
255
+ const rootDir = '.'
256
+
257
+ export const dynamicParams = false
258
+
259
+ export async function generateStaticParams() {
260
+ return generateDocsStaticParams({
261
+ config: docsConfig,
262
+ rootDir,
263
+ })
264
+ }
265
+
266
+ export async function generateMetadata({
267
+ params,
268
+ }: {
269
+ params: Promise<{ slug?: string[] }>
270
+ }) {
271
+ return generateDocsMetadata({
272
+ config: docsConfig,
273
+ params,
274
+ rootDir,
275
+ })
276
+ }
277
+
278
+ export default function DocsRoutePage({
279
+ params,
280
+ }: {
281
+ params: Promise<{ slug?: string[] }>
282
+ }) {
283
+ return DocsPage({
284
+ config: docsConfig,
285
+ onNotFound: () => notFound(),
286
+ onRedirect: (href) => redirect(href),
287
+ params,
288
+ rootDir,
289
+ })
290
+ }
291
+ ```
292
+
293
+ ## Tailwind Setup
294
+
295
+ If your app uses Tailwind CSS, include both `blackwork` and `@blackwork/docs` build output in the content scan:
296
+
297
+ ```ts
298
+ import typography from '@tailwindcss/typography'
299
+ import { theme } from 'blackwork/tailwind-config'
300
+ import animate from 'tailwindcss-animate'
301
+ import type { Config } from 'tailwindcss'
302
+
303
+ export default {
304
+ darkMode: 'selector',
305
+ content: [
306
+ './src/**/*.{js,mjs,cjs,ts,jsx,tsx,mdx}',
307
+ './contents/**/*.{md,mdx}',
308
+ './node_modules/blackwork/dist/**/*.{js,mjs,cjs}',
309
+ './node_modules/@blackwork/docs/dist/**/*.{js,mjs,cjs}',
310
+ ],
311
+ theme,
312
+ plugins: [typography, animate],
313
+ } satisfies Config
314
+ ```
315
+
316
+ ## Difference From `@blackwork/machine`
317
+
318
+ Use `@blackwork/machine` when you only need Markdown or MDX compilation:
319
+
320
+ - Markdown / MDX compilation
321
+ - component merging
322
+ - lightweight Next adapter support
323
+
324
+ Use `@blackwork/docs` when you need a full docs-site runtime:
325
+
326
+ - content directory indexing
327
+ - locale-aware route resolution
328
+ - static params and metadata generation
329
+ - sidebar, pager, locale links, and default shells
330
+ - thin Next.js integration surface from the root package entry
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));exports.__toESM=s;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ const e={site:{},content:{root:`contents`,enableDefaultLocaleRedirect:!0},theme:{},docs:{},home:{},mdx:{},slots:{}};exports.defaultDocsConfig=e;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ const e={site:{},content:{root:`contents`,enableDefaultLocaleRedirect:!0},theme:{},docs:{},home:{},mdx:{},slots:{}};export{e as defaultDocsConfig};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ const e=require(`./defaults.cjs`),t=(e={})=>{let t=e.layout??`docs`;return{layout:t,sidebar:e.sidebar??(t===`content`?!1:`auto`)}},n=e=>{if(e)return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,t(n)]))};function r(t={}){return{root:t.root??e.defaultDocsConfig.content.root,enableDefaultLocaleRedirect:t.enableDefaultLocaleRedirect??e.defaultDocsConfig.content.enableDefaultLocaleRedirect,...t.defaultLocale===void 0?{}:{defaultLocale:t.defaultLocale},...t.locales===void 0?{}:{locales:t.locales},...t.sections===void 0?{}:{sections:n(t.sections)}}}function i(t={}){return{site:{...e.defaultDocsConfig.site,...t.site},content:r(t.content),theme:{...e.defaultDocsConfig.theme,...t.theme},docs:{...e.defaultDocsConfig.docs,...t.docs},home:{...e.defaultDocsConfig.home,...t.home},mdx:{...e.defaultDocsConfig.mdx,...t.mdx},slots:{...e.defaultDocsConfig.slots,...t.slots}}}exports.defineConfig=i;
@@ -0,0 +1,7 @@
1
+
2
+ import { DocsConfig, NormalizedDocsConfig } from "./types.mjs";
3
+
4
+ //#region src/config/define-config.d.ts
5
+ declare function defineConfig(config?: DocsConfig): NormalizedDocsConfig;
6
+ //#endregion
7
+ export { defineConfig };
@@ -0,0 +1,7 @@
1
+
2
+ import { DocsConfig, NormalizedDocsConfig } from "./types.js";
3
+
4
+ //#region src/config/define-config.d.ts
5
+ declare function defineConfig(config?: DocsConfig): NormalizedDocsConfig;
6
+ //#endregion
7
+ export { defineConfig };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ import{defaultDocsConfig as e}from"./defaults.mjs";const t=(e={})=>{let t=e.layout??`docs`;return{layout:t,sidebar:e.sidebar??(t===`content`?!1:`auto`)}},n=e=>{if(e)return Object.fromEntries(Object.entries(e).map(([e,n])=>[e,t(n)]))};function r(t={}){return{root:t.root??e.content.root,enableDefaultLocaleRedirect:t.enableDefaultLocaleRedirect??e.content.enableDefaultLocaleRedirect,...t.defaultLocale===void 0?{}:{defaultLocale:t.defaultLocale},...t.locales===void 0?{}:{locales:t.locales},...t.sections===void 0?{}:{sections:n(t.sections)}}}function i(t={}){return{site:{...e.site,...t.site},content:r(t.content),theme:{...e.theme,...t.theme},docs:{...e.docs,...t.docs},home:{...e.home,...t.home},mdx:{...e.mdx,...t.mdx},slots:{...e.slots,...t.slots}}}export{i as defineConfig};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ const e=require(`./define-config.cjs`),t=require(`./load-content-config.cjs`),n=(e,t)=>{if(!e&&!t)return;let n=new Set([...Object.keys(e??{}),...Object.keys(t??{})]);return Object.fromEntries([...n].map(n=>[n,{...e?.[n]??{},...t?.[n]??{}}]))};function r(r={},i={}){let a=t.loadDocsContentConfig(i),o=n(a?.sections,r.content?.sections),s=a||r.content?{...a??{},...r.content??{},...o?{sections:o}:{}}:void 0;return e.defineConfig({...r,...s?{content:s}:{}})}exports.defineDocsConfig=r;
@@ -0,0 +1,9 @@
1
+
2
+ import { DocsConfig, NormalizedDocsConfig } from "./types.mjs";
3
+ import { LoadDocsContentConfigOptions } from "./load-content-config.mjs";
4
+
5
+ //#region src/config/define-docs-config.d.ts
6
+ interface DefineDocsConfigOptions extends LoadDocsContentConfigOptions {}
7
+ declare function defineDocsConfig(config?: DocsConfig | NormalizedDocsConfig, options?: DefineDocsConfigOptions): NormalizedDocsConfig;
8
+ //#endregion
9
+ export { DefineDocsConfigOptions, defineDocsConfig };
@@ -0,0 +1,9 @@
1
+
2
+ import { DocsConfig, NormalizedDocsConfig } from "./types.js";
3
+ import { LoadDocsContentConfigOptions } from "./load-content-config.js";
4
+
5
+ //#region src/config/define-docs-config.d.ts
6
+ interface DefineDocsConfigOptions extends LoadDocsContentConfigOptions {}
7
+ declare function defineDocsConfig(config?: DocsConfig | NormalizedDocsConfig, options?: DefineDocsConfigOptions): NormalizedDocsConfig;
8
+ //#endregion
9
+ export { DefineDocsConfigOptions, defineDocsConfig };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ import{defineConfig as e}from"./define-config.mjs";import{loadDocsContentConfig as t}from"./load-content-config.mjs";const n=(e,t)=>{if(!e&&!t)return;let n=new Set([...Object.keys(e??{}),...Object.keys(t??{})]);return Object.fromEntries([...n].map(n=>[n,{...e?.[n]??{},...t?.[n]??{}}]))};function r(r={},i={}){let a=t(i),o=n(a?.sections,r.content?.sections),s=a||r.content?{...a??{},...r.content??{},...o?{sections:o}:{}}:void 0;return e({...r,...s?{content:s}:{}})}export{r as defineDocsConfig};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ const e=require(`../_virtual/_rolldown/runtime.cjs`);let t=require(`node:fs`),n=require(`node:path`),r=require(`jiti`);r=e.__toESM(r,1);const i=`content.config.ts`,a=e=>typeof e==`object`&&!!e&&!Array.isArray(e),o=({rootDir:e=process.cwd(),contentConfigPath:r=i}={})=>{let a=(0,n.resolve)(e,r);return(0,t.existsSync)(a)?a:void 0},s=({rootDir:e=process.cwd(),contentConfigPath:t=i}={})=>{let n=o({rootDir:e,contentConfigPath:t});if(!n)return;let s=(0,r.default)(require(`url`).pathToFileURL(__filename).href)(n),c=s?.docsContentConfig??s?.default;if(!a(c))throw TypeError(`[blackwork-docs] ${n} must export a docs content config object via "docsContentConfig" or default export.`);return c};exports.loadDocsContentConfig=s,exports.resolveDocsContentConfigPath=o;
@@ -0,0 +1,8 @@
1
+
2
+ //#region src/config/load-content-config.d.ts
3
+ interface LoadDocsContentConfigOptions {
4
+ rootDir?: string;
5
+ contentConfigPath?: string;
6
+ }
7
+ //#endregion
8
+ export { LoadDocsContentConfigOptions };
@@ -0,0 +1,8 @@
1
+
2
+ //#region src/config/load-content-config.d.ts
3
+ interface LoadDocsContentConfigOptions {
4
+ rootDir?: string;
5
+ contentConfigPath?: string;
6
+ }
7
+ //#endregion
8
+ export { LoadDocsContentConfigOptions };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ import{existsSync as e}from"node:fs";import{resolve as t}from"node:path";import n from"jiti";const r=`content.config.ts`,i=e=>typeof e==`object`&&!!e&&!Array.isArray(e),a=({rootDir:n=process.cwd(),contentConfigPath:i=r}={})=>{let a=t(n,i);return e(a)?a:void 0},o=({rootDir:e=process.cwd(),contentConfigPath:t=r}={})=>{let o=a({rootDir:e,contentConfigPath:t});if(!o)return;let s=n(import.meta.url)(o),c=s?.docsContentConfig??s?.default;if(!i(c))throw TypeError(`[blackwork-docs] ${o} must export a docs content config object via "docsContentConfig" or default export.`);return c};export{o as loadDocsContentConfig,a as resolveDocsContentConfigPath};
@@ -0,0 +1,78 @@
1
+
2
+ import { DocsHomeConfig as DocsHomeConfig$1, DocsSlotsConfig as DocsSlotsConfig$1 } from "../theme/types.mjs";
3
+ import { ComponentMap } from "@blackwork/machine";
4
+
5
+ //#region src/config/types.d.ts
6
+ interface DocsLocaleDefinition {
7
+ code: string;
8
+ label?: string;
9
+ lang?: string;
10
+ }
11
+ interface DocsSiteConfig {
12
+ title?: string;
13
+ description?: string;
14
+ url?: string;
15
+ }
16
+ type DocsSectionLayout = 'docs' | 'content';
17
+ type DocsSidebarLabel = string | Record<string, string>;
18
+ interface DocsSidebarItemConfig {
19
+ type: 'item';
20
+ href: string;
21
+ label?: DocsSidebarLabel;
22
+ }
23
+ interface DocsSidebarGroupConfig {
24
+ type: 'group';
25
+ label: DocsSidebarLabel;
26
+ items: DocsSidebarItemConfig[];
27
+ }
28
+ type DocsSidebarConfigNode = DocsSidebarGroupConfig | DocsSidebarItemConfig;
29
+ type DocsSidebarMode = 'auto' | false | DocsSidebarConfigNode[];
30
+ interface DocsContentSectionConfig {
31
+ layout?: DocsSectionLayout;
32
+ sidebar?: DocsSidebarMode;
33
+ }
34
+ interface DocsContentConfig {
35
+ root?: string;
36
+ defaultLocale?: string;
37
+ enableDefaultLocaleRedirect?: boolean;
38
+ locales?: Record<string, DocsLocaleDefinition>;
39
+ sections?: Record<string, DocsContentSectionConfig>;
40
+ }
41
+ type DocsThemeConfig = Record<string, unknown>;
42
+ type DocsSectionConfig = Record<string, unknown>;
43
+ type DocsHomeConfig = DocsHomeConfig$1;
44
+ interface DocsMdxConfig {
45
+ components?: ComponentMap;
46
+ }
47
+ type DocsSlotsConfig = DocsSlotsConfig$1;
48
+ interface DocsConfig {
49
+ site?: DocsSiteConfig;
50
+ content?: DocsContentConfig;
51
+ theme?: DocsThemeConfig;
52
+ docs?: DocsSectionConfig;
53
+ home?: DocsHomeConfig;
54
+ mdx?: DocsMdxConfig;
55
+ slots?: DocsSlotsConfig;
56
+ }
57
+ interface NormalizedDocsContentConfig {
58
+ root: string;
59
+ defaultLocale?: string;
60
+ enableDefaultLocaleRedirect: boolean;
61
+ locales?: Record<string, DocsLocaleDefinition>;
62
+ sections?: Record<string, NormalizedDocsContentSectionConfig>;
63
+ }
64
+ interface NormalizedDocsContentSectionConfig {
65
+ layout: DocsSectionLayout;
66
+ sidebar: DocsSidebarMode;
67
+ }
68
+ interface NormalizedDocsConfig {
69
+ site: DocsSiteConfig;
70
+ content: NormalizedDocsContentConfig;
71
+ theme: DocsThemeConfig;
72
+ docs: DocsSectionConfig;
73
+ home: DocsHomeConfig;
74
+ mdx: DocsMdxConfig;
75
+ slots: DocsSlotsConfig;
76
+ }
77
+ //#endregion
78
+ export { DocsConfig, DocsContentConfig, DocsContentSectionConfig, DocsHomeConfig, DocsLocaleDefinition, DocsMdxConfig, DocsSectionConfig, DocsSectionLayout, DocsSidebarConfigNode, DocsSidebarGroupConfig, DocsSidebarItemConfig, DocsSidebarLabel, DocsSidebarMode, DocsSiteConfig, DocsSlotsConfig, DocsThemeConfig, NormalizedDocsConfig, NormalizedDocsContentConfig, NormalizedDocsContentSectionConfig };
@@ -0,0 +1,78 @@
1
+
2
+ import { DocsHomeConfig as DocsHomeConfig$1, DocsSlotsConfig as DocsSlotsConfig$1 } from "../theme/types.js";
3
+ import { ComponentMap } from "@blackwork/machine";
4
+
5
+ //#region src/config/types.d.ts
6
+ interface DocsLocaleDefinition {
7
+ code: string;
8
+ label?: string;
9
+ lang?: string;
10
+ }
11
+ interface DocsSiteConfig {
12
+ title?: string;
13
+ description?: string;
14
+ url?: string;
15
+ }
16
+ type DocsSectionLayout = 'docs' | 'content';
17
+ type DocsSidebarLabel = string | Record<string, string>;
18
+ interface DocsSidebarItemConfig {
19
+ type: 'item';
20
+ href: string;
21
+ label?: DocsSidebarLabel;
22
+ }
23
+ interface DocsSidebarGroupConfig {
24
+ type: 'group';
25
+ label: DocsSidebarLabel;
26
+ items: DocsSidebarItemConfig[];
27
+ }
28
+ type DocsSidebarConfigNode = DocsSidebarGroupConfig | DocsSidebarItemConfig;
29
+ type DocsSidebarMode = 'auto' | false | DocsSidebarConfigNode[];
30
+ interface DocsContentSectionConfig {
31
+ layout?: DocsSectionLayout;
32
+ sidebar?: DocsSidebarMode;
33
+ }
34
+ interface DocsContentConfig {
35
+ root?: string;
36
+ defaultLocale?: string;
37
+ enableDefaultLocaleRedirect?: boolean;
38
+ locales?: Record<string, DocsLocaleDefinition>;
39
+ sections?: Record<string, DocsContentSectionConfig>;
40
+ }
41
+ type DocsThemeConfig = Record<string, unknown>;
42
+ type DocsSectionConfig = Record<string, unknown>;
43
+ type DocsHomeConfig = DocsHomeConfig$1;
44
+ interface DocsMdxConfig {
45
+ components?: ComponentMap;
46
+ }
47
+ type DocsSlotsConfig = DocsSlotsConfig$1;
48
+ interface DocsConfig {
49
+ site?: DocsSiteConfig;
50
+ content?: DocsContentConfig;
51
+ theme?: DocsThemeConfig;
52
+ docs?: DocsSectionConfig;
53
+ home?: DocsHomeConfig;
54
+ mdx?: DocsMdxConfig;
55
+ slots?: DocsSlotsConfig;
56
+ }
57
+ interface NormalizedDocsContentConfig {
58
+ root: string;
59
+ defaultLocale?: string;
60
+ enableDefaultLocaleRedirect: boolean;
61
+ locales?: Record<string, DocsLocaleDefinition>;
62
+ sections?: Record<string, NormalizedDocsContentSectionConfig>;
63
+ }
64
+ interface NormalizedDocsContentSectionConfig {
65
+ layout: DocsSectionLayout;
66
+ sidebar: DocsSidebarMode;
67
+ }
68
+ interface NormalizedDocsConfig {
69
+ site: DocsSiteConfig;
70
+ content: NormalizedDocsContentConfig;
71
+ theme: DocsThemeConfig;
72
+ docs: DocsSectionConfig;
73
+ home: DocsHomeConfig;
74
+ mdx: DocsMdxConfig;
75
+ slots: DocsSlotsConfig;
76
+ }
77
+ //#endregion
78
+ export { DocsConfig, DocsContentConfig, DocsContentSectionConfig, DocsHomeConfig, DocsLocaleDefinition, DocsMdxConfig, DocsSectionConfig, DocsSectionLayout, DocsSidebarConfigNode, DocsSidebarGroupConfig, DocsSidebarItemConfig, DocsSidebarLabel, DocsSidebarMode, DocsSiteConfig, DocsSlotsConfig, DocsThemeConfig, NormalizedDocsConfig, NormalizedDocsContentConfig, NormalizedDocsContentSectionConfig };
package/dist/index.cjs ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * name: @blackwork/docs
3
+ * version: v0.1.0
4
+ * description: Next-first documentation framework for Blackwork projects.
5
+ * author: chengpeiquan <chengpeiquan@chengpeiquan.com>
6
+ * homepage: https://chengpeiquan.com
7
+ * license: MIT
8
+ */
9
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./config/define-config.cjs`),t=require(`./config/define-docs-config.cjs`),n=require(`./navigation/build-locale-links.cjs`),r=require(`./metadata/create-doc-metadata.cjs`),i=require(`./navigation/build-pager.cjs`),a=require(`./navigation/build-sidebar.cjs`),o=require(`./next/root-layout.cjs`),s=require(`./routing/build-static-params.cjs`),c=require(`./routing/resolve-docs-route.cjs`),l=require(`./source/create-docs-source.cjs`),u=async(e={})=>(await Promise.resolve().then(()=>require(`./next/metadata.cjs`))).generateMetadata(e),d=async(e={})=>(await Promise.resolve().then(()=>require(`./next/page.cjs`))).generateStaticParams(e),f=async e=>(await Promise.resolve().then(()=>require(`./next/page.cjs`))).DocsPage(e);exports.DocsPage=f,exports.DocsRootLayout=o.DocsRootLayout,exports.buildDocsStaticParams=s.buildDocsStaticParams,exports.buildLocaleLinks=n.buildLocaleLinks,exports.buildPager=i.buildPager,exports.buildSidebar=a.buildSidebar,exports.createDocMetadata=r.createDocMetadata,exports.createDocsSource=l.createDocsSource,exports.defineConfig=e.defineConfig,exports.defineDocsConfig=t.defineDocsConfig,exports.dynamicParams=!1,exports.generateMetadata=u,exports.generateStaticParams=d,exports.resolveDocsRoute=c.resolveDocsRoute;