fumapress 0.4.0 → 0.5.1

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 (76) hide show
  1. package/css/generated.css +251 -11
  2. package/dist/adapters/mdx/schema.d.ts +2 -0
  3. package/dist/adapters/mdx.d.ts +1 -1
  4. package/dist/client.d.ts +55 -0
  5. package/dist/client.js +16 -0
  6. package/dist/components/blog-panel.js +5 -3
  7. package/dist/components/blog.js +13 -9
  8. package/dist/components/flexsearch-static.js +1 -1
  9. package/dist/components/i18n.js +16 -0
  10. package/dist/components/image.d.ts +30 -0
  11. package/dist/components/image.js +143 -0
  12. package/dist/components/openapi.payload.js +1 -1
  13. package/dist/components/orama-search-static.js +1 -1
  14. package/dist/components/provider.d.ts +6 -0
  15. package/dist/components/provider.js +38 -0
  16. package/dist/config.d.ts +95 -53
  17. package/dist/config.js +16 -21
  18. package/dist/i18n.d.ts +18 -0
  19. package/dist/i18n.js +20 -0
  20. package/dist/image.d.ts +2 -0
  21. package/dist/image.js +2 -0
  22. package/dist/index.d.ts +4 -4
  23. package/dist/index.js +3 -2
  24. package/dist/layouts/blog.d.ts +3 -2
  25. package/dist/layouts/blog.index.js +14 -12
  26. package/dist/layouts/blog.js +15 -23
  27. package/dist/layouts/blog.tags.js +29 -47
  28. package/dist/layouts/docs.d.ts +9 -3
  29. package/dist/layouts/docs.js +8 -8
  30. package/dist/layouts/home.d.ts +27 -20
  31. package/dist/layouts/home.js +20 -32
  32. package/dist/layouts/notebook.d.ts +9 -3
  33. package/dist/layouts/notebook.js +8 -8
  34. package/dist/layouts/root.d.ts +5 -3
  35. package/dist/layouts/root.js +21 -21
  36. package/dist/layouts/switch.d.ts +3 -3
  37. package/dist/layouts/switch.js +5 -8
  38. package/dist/lib/pathname.js +14 -0
  39. package/dist/lib/shared.d.ts +13 -7
  40. package/dist/lib/shared.js +82 -32
  41. package/dist/lib/types.d.ts +48 -14
  42. package/dist/lib/vitefu.js +1 -1
  43. package/dist/node_modules/.pnpm/http-cache-semantics@4.2.0/node_modules/http-cache-semantics/index.js +596 -0
  44. package/dist/plugins/blog.d.ts +27 -26
  45. package/dist/plugins/blog.js +69 -146
  46. package/dist/plugins/flexsearch.d.ts +1 -1
  47. package/dist/plugins/flexsearch.js +3 -2
  48. package/dist/plugins/image/self-hosted.client.js +40 -0
  49. package/dist/plugins/image/self-hosted.d.ts +29 -0
  50. package/dist/plugins/image/self-hosted.js +30 -0
  51. package/dist/plugins/image/self-hosted.utils.js +270 -0
  52. package/dist/plugins/image/vercel.client.js +34 -0
  53. package/dist/plugins/image/vercel.d.ts +39 -0
  54. package/dist/plugins/image/vercel.enhancer.d.ts +10 -0
  55. package/dist/plugins/image/vercel.enhancer.js +16 -0
  56. package/dist/plugins/image/vercel.js +30 -0
  57. package/dist/plugins/image/vercel.utils.d.ts +10 -0
  58. package/dist/plugins/image/vercel.utils.js +30 -0
  59. package/dist/plugins/llms.txt.d.ts +8 -1
  60. package/dist/plugins/llms.txt.js +59 -25
  61. package/dist/plugins/openapi.d.ts +4 -2
  62. package/dist/plugins/openapi.js +23 -42
  63. package/dist/plugins/orama-search.d.ts +1 -1
  64. package/dist/plugins/orama-search.js +3 -2
  65. package/dist/plugins/takumi.d.ts +11 -1
  66. package/dist/plugins/takumi.js +25 -24
  67. package/dist/router/fs.d.ts +36 -0
  68. package/dist/router/fs.js +106 -0
  69. package/dist/router/index.d.ts +17 -0
  70. package/dist/router/index.js +199 -0
  71. package/dist/vite.d.ts +1 -1
  72. package/dist/vite.js +35 -12
  73. package/package.json +33 -12
  74. package/dist/lib/join-pathname.js +0 -9
  75. package/dist/router.d.ts +0 -12
  76. package/dist/router.js +0 -136
package/css/generated.css CHANGED
@@ -1,18 +1,47 @@
1
+ @source inline("!ctx");
2
+ @source inline("!sizes");
1
3
  @source inline("---spacing");
2
4
  @source inline("-translate-x-1/2");
5
+ @source inline("@default");
3
6
  @source inline("@orama/orama");
7
+ @source inline("a");
8
+ @source inline("above");
4
9
  @source inline("absolutePath");
10
+ @source inline("accepts");
5
11
  @source inline("active:scale-95");
12
+ @source inline("actually");
13
+ @source inline("all");
14
+ @source inline("allSizes");
15
+ @source inline("allTags");
16
+ @source inline("allowed");
17
+ @source inline("allows");
18
+ @source inline("and");
19
+ @source inline("and/or");
20
+ @source inline("any");
21
+ @source inline("app");
22
+ @source inline("are");
6
23
  @source inline("as");
24
+ @source inline("associated");
25
+ @source inline("assumes");
7
26
  @source inline("async");
27
+ @source inline("attribute");
28
+ @source inline("attributes");
8
29
  @source inline("await");
30
+ @source inline("backToHome");
9
31
  @source inline("backdrop-blur-sm");
32
+ @source inline("base");
33
+ @source inline("basePathname");
34
+ @source inline("be");
35
+ @source inline("because");
36
+ @source inline("before");
37
+ @source inline("between");
10
38
  @source inline("bg-fd-card");
11
39
  @source inline("bg-fd-primary");
12
40
  @source inline("bg-fd-primary/10");
13
41
  @source inline("bg-fd-secondary/80");
14
42
  @source inline("blog");
15
43
  @source inline("blogPosts");
44
+ @source inline("blue");
16
45
  @source inline("body");
17
46
  @source inline("border");
18
47
  @source inline("border-2");
@@ -21,13 +50,34 @@
21
50
  @source inline("border-fd-primary");
22
51
  @source inline("border-y");
23
52
  @source inline("bottom-2");
53
+ @source inline("browsers");
54
+ @source inline("bug");
55
+ @source inline("buildImageUrl");
56
+ @source inline("but");
24
57
  @source inline("buttonVariants");
58
+ @source inline("by");
59
+ @source inline("can");
60
+ @source inline("canOptimize");
61
+ @source inline("cannot");
62
+ @source inline("cases");
63
+ @source inline("cause");
64
+ @source inline("causes");
65
+ @source inline("check");
25
66
  @source inline("children");
26
67
  @source inline("class-variance-authority");
27
68
  @source inline("className");
28
69
  @source inline("client");
29
70
  @source inline("cn");
71
+ @source inline("component");
72
+ @source inline("components");
73
+ @source inline("conditions");
74
+ @source inline("config");
30
75
  @source inline("const");
76
+ @source inline("content");
77
+ @source inline("copied");
78
+ @source inline("copies");
79
+ @source inline("copy");
80
+ @source inline("copyright");
31
81
  @source inline("core:docs-layout");
32
82
  @source inline("core:home-layout");
33
83
  @source inline("core:notebook-layout");
@@ -49,29 +99,47 @@
49
99
  @source inline("createNotebookLayoutPage");
50
100
  @source inline("createRootLayout");
51
101
  @source inline("creationDate");
102
+ @source inline("crossOrigin");
52
103
  @source inline("ctx");
104
+ @source inline("current");
53
105
  @source inline("currentDate");
54
106
  @source inline("cva");
55
107
  @source inline("data");
108
+ @source inline("data-fd-home-layout-container");
56
109
  @source inline("data-version");
57
110
  @source inline("date");
111
+ @source inline("deal");
58
112
  @source inline("decoded");
59
113
  @source inline("decoration-fd-primary");
60
114
  @source inline("default");
115
+ @source inline("defaultQuality");
116
+ @source inline("defaultWidth");
61
117
  @source inline("defined");
118
+ @source inline("detail");
62
119
  @source inline("detect");
63
120
  @source inline("detector");
121
+ @source inline("deviceSizes");
64
122
  @source inline("do");
123
+ @source inline("documentation");
65
124
  @source inline("duration-150");
125
+ @source inline("eager");
126
+ @source inline("edge");
66
127
  @source inline("else");
67
128
  @source inline("empty");
68
129
  @source inline("empty:hidden");
69
130
  @source inline("en");
70
131
  @source inline("english");
132
+ @source inline("even");
133
+ @source inline("except");
71
134
  @source inline("export");
72
135
  @source inline("extends");
136
+ @source inline("eye");
73
137
  @source inline("false");
138
+ @source inline("fetch");
139
+ @source inline("fetchPriority");
140
+ @source inline("files");
74
141
  @source inline("find");
142
+ @source inline("first");
75
143
  @source inline("fixed");
76
144
  @source inline("flex");
77
145
  @source inline("flex-1");
@@ -79,40 +147,79 @@
79
147
  @source inline("flex-row");
80
148
  @source inline("flex-wrap");
81
149
  @source inline("flexsearchStaticClient");
150
+ @source inline("following");
82
151
  @source inline("font-medium");
83
152
  @source inline("font-mono");
84
153
  @source inline("font-semibold");
85
154
  @source inline("for");
155
+ @source inline("framework");
156
+ @source inline("free");
86
157
  @source inline("from");
158
+ @source inline("full");
159
+ @source inline("fumadocs-core/framework");
160
+ @source inline("fumadocs-core/i18n");
87
161
  @source inline("fumadocs-core/source");
88
162
  @source inline("fumadocs-core/toc");
163
+ @source inline("fumadocs-ui/i18n");
164
+ @source inline("fumapress");
89
165
  @source inline("function");
166
+ @source inline("furnished");
90
167
  @source inline("gap-1");
91
168
  @source inline("gap-2");
92
169
  @source inline("gap-4");
93
- @source inline("getCreationDate");
170
+ @source inline("generate");
171
+ @source inline("generatedProps");
172
+ @source inline("getBlogContext");
173
+ @source inline("getLayoutProps");
174
+ @source inline("getPressContext");
94
175
  @source inline("getTags");
95
176
  @source inline("ghost");
96
177
  @source inline("githubUrl");
178
+ @source inline("given");
179
+ @source inline("green");
97
180
  @source inline("grid");
98
181
  @source inline("grid-cols-1");
99
182
  @source inline("grid-cols-2");
100
183
  @source inline("groupTags");
101
184
  @source inline("grouped");
185
+ @source inline("h-12");
186
+ @source inline("height");
187
+ @source inline("hereby");
188
+ @source inline("high");
102
189
  @source inline("hook");
103
190
  @source inline("hooks");
191
+ @source inline("hostname");
104
192
  @source inline("hover:bg-fd-accent");
105
193
  @source inline("hover:text-fd-accent-foreground");
194
+ @source inline("how");
106
195
  @source inline("href");
196
+ @source inline("html");
197
+ @source inline("human");
198
+ @source inline("i");
107
199
  @source inline("i18n");
108
- @source inline("i18nConfig");
200
+ @source inline("i18nProvider");
109
201
  @source inline("if");
202
+ @source inline("image");
203
+ @source inline("imageSizes");
204
+ @source inline("imageSrcSet");
205
+ @source inline("images");
206
+ @source inline("imagesrcset");
207
+ @source inline("immediately");
110
208
  @source inline("import");
111
209
  @source inline("in");
210
+ @source inline("included");
211
+ @source inline("including");
212
+ @source inline("incorrect");
213
+ @source inline("indexPath");
112
214
  @source inline("inherit");
215
+ @source inline("inheritLayoutProps");
216
+ @source inline("inherited");
113
217
  @source inline("inline-flex");
218
+ @source inline("integer");
219
+ @source inline("intended");
114
220
  @source inline("interface");
115
221
  @source inline("is");
222
+ @source inline("isBlog");
116
223
  @source inline("isLoading");
117
224
  @source inline("it");
118
225
  @source inline("item");
@@ -120,10 +227,15 @@
120
227
  @source inline("items-center");
121
228
  @source inline("items-start");
122
229
  @source inline("joinPathname");
230
+ @source inline("js");
231
+ @source inline("keep");
123
232
  @source inline("key");
233
+ @source inline("keyof");
234
+ @source inline("kind");
235
+ @source inline("label");
124
236
  @source inline("lang");
125
237
  @source inline("language");
126
- @source inline("languages");
238
+ @source inline("last");
127
239
  @source inline("lastModified");
128
240
  @source inline("layout");
129
241
  @source inline("layoutData");
@@ -132,12 +244,15 @@
132
244
  @source inline("left-1/2");
133
245
  @source inline("length");
134
246
  @source inline("let");
135
- @source inline("loaderConfig");
247
+ @source inline("level");
248
+ @source inline("like");
249
+ @source inline("limitation");
250
+ @source inline("loading");
136
251
  @source inline("locale");
137
- @source inline("locales");
138
252
  @source inline("lucide-react");
253
+ @source inline("magnifying");
139
254
  @source inline("markdownUrl");
140
- @source inline("matching");
255
+ @source inline("matchingBlogPosts");
141
256
  @source inline("max-h-[min(600px,calc(100vh---spacing(30)))]");
142
257
  @source inline("max-sm:-mx-4");
143
258
  @source inline("max-w-[1400px]");
@@ -147,43 +262,79 @@
147
262
  @source inline("md:grid-cols-3");
148
263
  @source inline("md:grid-cols-4");
149
264
  @source inline("md:p-8");
265
+ @source inline("means");
150
266
  @source inline("min-h-screen");
151
267
  @source inline("min-w-0");
268
+ @source inline("minIndex");
269
+ @source inline("minRatio");
270
+ @source inline("minSize");
271
+ @source inline("more");
272
+ @source inline("most");
152
273
  @source inline("ms-auto");
153
274
  @source inline("mt-4");
154
275
  @source inline("mt-6");
155
276
  @source inline("mt-auto");
277
+ @source inline("multiple");
156
278
  @source inline("mx-auto");
157
279
  @source inline("name");
158
- @source inline("never");
159
280
  @source inline("new");
281
+ @source inline("normal");
282
+ @source inline("not");
283
+ @source inline("notice");
284
+ @source inline("number");
285
+ @source inline("object");
286
+ @source inline("obtaining");
160
287
  @source inline("of");
288
+ @source inline("omit");
289
+ @source inline("on");
161
290
  @source inline("onClick");
162
291
  @source inline("onCopy");
163
292
  @source inline("onOpenChange");
164
293
  @source inline("onSearchChange");
294
+ @source inline("only");
165
295
  @source inline("open");
296
+ @source inline("optimized");
166
297
  @source inline("option");
167
298
  @source inline("options");
299
+ @source inline("or");
168
300
  @source inline("orderedPosts");
301
+ @source inline("outer");
169
302
  @source inline("overline");
303
+ @source inline("p");
170
304
  @source inline("p-1");
171
305
  @source inline("p-4");
172
306
  @source inline("page");
173
307
  @source inline("pageProps");
174
308
  @source inline("panelButtonVariants");
309
+ @source inline("params");
310
+ @source inline("parsed");
311
+ @source inline("path");
312
+ @source inline("pathname");
175
313
  @source inline("payload");
176
- @source inline("pb-20");
177
314
  @source inline("pb-6");
315
+ @source inline("percent");
316
+ @source inline("percentSizes");
317
+ @source inline("permission");
318
+ @source inline("permit");
319
+ @source inline("person");
320
+ @source inline("persons");
321
+ @source inline("portions");
178
322
  @source inline("posts");
323
+ @source inline("potentially");
324
+ @source inline("preload");
325
+ @source inline("preloadElement");
326
+ @source inline("preloadOptions");
179
327
  @source inline("primary");
328
+ @source inline("production");
329
+ @source inline("prop");
180
330
  @source inline("props");
181
331
  @source inline("prose");
332
+ @source inline("provider");
182
333
  @source inline("providerProps");
183
334
  @source inline("pt-2");
184
335
  @source inline("pt-3.5");
185
336
  @source inline("pt-4");
186
- @source inline("pt-6");
337
+ @source inline("push");
187
338
  @source inline("px-1.5");
188
339
  @source inline("px-2");
189
340
  @source inline("px-3");
@@ -191,43 +342,97 @@
191
342
  @source inline("py-0.5");
192
343
  @source inline("py-1");
193
344
  @source inline("py-2");
345
+ @source inline("py-6");
346
+ @source inline("quality");
194
347
  @source inline("query");
195
348
  @source inline("r");
196
349
  @source inline("react");
350
+ @source inline("react-dom");
351
+ @source inline("received");
352
+ @source inline("red");
353
+ @source inline("reference");
354
+ @source inline("referrerPolicy");
355
+ @source inline("refresh");
356
+ @source inline("rel");
357
+ @source inline("relative");
358
+ @source inline("relevant");
197
359
  @source inline("render");
198
360
  @source inline("renderCtx");
199
361
  @source inline("renderRootMeta");
362
+ @source inline("replacements");
363
+ @source inline("reproduced");
364
+ @source inline("requests");
365
+ @source inline("resolution");
366
+ @source inline("resolve");
367
+ @source inline("resolved");
368
+ @source inline("rest");
200
369
  @source inline("result");
201
370
  @source inline("return");
371
+ @source inline("rights");
202
372
  @source inline("root");
203
373
  @source inline("rotate-180");
204
374
  @source inline("rounded-2xl");
205
375
  @source inline("rounded-lg");
206
376
  @source inline("rounded-xl");
377
+ @source inline("router");
378
+ @source inline("run");
379
+ @source inline("s");
380
+ @source inline("satisfies");
381
+ @source inline("say");
207
382
  @source inline("schema");
208
383
  @source inline("schemaId");
384
+ @source inline("screens");
209
385
  @source inline("search");
386
+ @source inline("see");
387
+ @source inline("sell");
388
+ @source inline("server");
210
389
  @source inline("setOpen");
211
390
  @source inline("shadow-inner");
212
391
  @source inline("shadow-md");
213
392
  @source inline("shadow-sm");
393
+ @source inline("shall");
214
394
  @source inline("shrink-0");
395
+ @source inline("significantly");
215
396
  @source inline("size-3.5");
216
397
  @source inline("size-4");
217
398
  @source inline("size-6");
399
+ @source inline("sizes");
218
400
  @source inline("sm:border");
219
401
  @source inline("sm:bottom-4");
220
402
  @source inline("sm:grid-cols-3");
221
403
  @source inline("sm:max-w-[400px]");
222
404
  @source inline("sm:rounded-xl");
405
+ @source inline("so");
406
+ @source inline("software");
407
+ @source inline("something");
223
408
  @source inline("source");
409
+ @source inline("specified");
224
410
  @source inline("specify");
411
+ @source inline("src");
412
+ @source inline("srcSet");
413
+ @source inline("srcset");
414
+ @source inline("start");
225
415
  @source inline("static");
226
416
  @source inline("string");
227
- @source inline("styles");
417
+ @source inline("styleTag");
418
+ @source inline("stylesHref");
419
+ @source inline("stylesInline");
420
+ @source inline("stylesheet");
421
+ @source inline("subject");
422
+ @source inline("subset");
423
+ @source inline("substantial");
424
+ @source inline("support");
425
+ @source inline("supported");
228
426
  @source inline("sure");
427
+ @source inline("swap");
428
+ @source inline("t");
429
+ @source inline("tag");
430
+ @source inline("tagTitle");
229
431
  @source inline("tags");
432
+ @source inline("tagsInTotal");
230
433
  @source inline("tagsPath");
434
+ @source inline("takes");
435
+ @source inline("text");
231
436
  @source inline("text-2xl");
232
437
  @source inline("text-3xl");
233
438
  @source inline("text-fd-card-foreground");
@@ -236,33 +441,68 @@
236
441
  @source inline("text-fd-primary-foreground");
237
442
  @source inline("text-sm");
238
443
  @source inline("text-xs");
444
+ @source inline("that");
239
445
  @source inline("the");
446
+ @source inline("they");
240
447
  @source inline("this");
448
+ @source inline("those");
449
+ @source inline("though");
241
450
  @source inline("throw");
242
451
  @source inline("title");
243
452
  @source inline("to");
244
453
  @source inline("toc");
454
+ @source inline("took");
245
455
  @source inline("transition-all");
246
456
  @source inline("transition-colors");
247
457
  @source inline("transition-transform");
248
- @source inline("translations");
458
+ @source inline("translated");
459
+ @source inline("translationsConfig");
249
460
  @source inline("tree");
461
+ @source inline("true");
250
462
  @source inline("truncate");
251
463
  @source inline("type");
464
+ @source inline("typeof");
252
465
  @source inline("undefined");
466
+ @source inline("unnecessary");
467
+ @source inline("unoptimized");
253
468
  @source inline("unstable_notFound");
469
+ @source inline("updated");
470
+ @source inline("updates");
254
471
  @source inline("url");
255
472
  @source inline("use");
256
473
  @source inline("useCopyButton");
257
474
  @source inline("useDocsSearch");
258
475
  @source inline("useI18n");
259
476
  @source inline("useMemo");
477
+ @source inline("useRouter");
260
478
  @source inline("useState");
261
479
  @source inline("useTOCItems");
480
+ @source inline("useTranslations");
481
+ @source inline("useTranslationsBase");
482
+ @source inline("used");
483
+ @source inline("v");
484
+ @source inline("valid");
262
485
  @source inline("value");
486
+ @source inline("values");
263
487
  @source inline("variant");
488
+ @source inline("viewport");
489
+ @source inline("viewportWidthRe");
490
+ @source inline("visually");
491
+ @source inline("vs");
492
+ @source inline("vw");
493
+ @source inline("w");
264
494
  @source inline("w-full");
265
495
  @source inline("waku");
496
+ @source inline("wasteful");
497
+ @source inline("we");
498
+ @source inline("whom");
499
+ @source inline("width");
500
+ @source inline("widths");
501
+ @source inline("will");
502
+ @source inline("without");
503
+ @source inline("would");
504
+ @source inline("wrapper");
505
+ @source inline("x");
266
506
  @source inline("xl:grid-cols-4");
267
507
  @source inline("xl:grid-cols-6");
268
508
  @source inline("you");
@@ -12,6 +12,7 @@ declare const pageSchema: z.ZodObject<{
12
12
  declare const metaSchema: z.ZodObject<{
13
13
  title: z.ZodOptional<z.ZodString>;
14
14
  pages: z.ZodOptional<z.ZodArray<z.ZodString>>;
15
+ pagesIndex: z.ZodOptional<z.ZodString>;
15
16
  description: z.ZodOptional<z.ZodString>;
16
17
  root: z.ZodOptional<z.ZodBoolean>;
17
18
  defaultOpen: z.ZodOptional<z.ZodBoolean>;
@@ -29,6 +30,7 @@ declare const blogPageSchema: z.ZodObject<{
29
30
  declare const blogMetaSchema: z.ZodObject<{
30
31
  title: z.ZodOptional<z.ZodString>;
31
32
  pages: z.ZodOptional<z.ZodArray<z.ZodString>>;
33
+ pagesIndex: z.ZodOptional<z.ZodString>;
32
34
  description: z.ZodOptional<z.ZodString>;
33
35
  root: z.ZodOptional<z.ZodBoolean>;
34
36
  defaultOpen: z.ZodOptional<z.ZodBoolean>;
@@ -5,7 +5,7 @@ import { MDXComponents } from "mdx/types";
5
5
 
6
6
  //#region src/adapters/mdx.d.ts
7
7
  interface MdxAdapterOptions<C extends ConfigContext = ConfigContext> {
8
- getMdxComponents?: (this: AppContext<C>, page: C["loaderConfig"]["page"]) => Awaitable<MDXComponents>;
8
+ getMdxComponents?: (this: AppContext<C>, page: C["page"]) => Awaitable<MDXComponents>;
9
9
  }
10
10
  declare function fumadocsMdx<C extends ConfigContext = ConfigContext>(options?: MdxAdapterOptions<C>): Adapter<C>;
11
11
  //#endregion
@@ -0,0 +1,55 @@
1
+ import { Unstable_ChangeRouteCallback, Unstable_ChangeRouteEvent } from "waku/router/client";
2
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
+ import { ComponentProps, ReactNode, TransitionFunction } from "react";
4
+
5
+ //#region src/client.d.ts
6
+ interface LinkProps extends ComponentProps<"a"> {
7
+ /**
8
+ * indicates if the link should scroll or not on navigation
9
+ * - `true`: always scroll
10
+ * - `false`: never scroll
11
+ * - `undefined`: scroll on path/hash change (not on query-only change)
12
+ */
13
+ scroll?: boolean;
14
+ unstable_pending?: ReactNode;
15
+ unstable_notPending?: ReactNode;
16
+ unstable_prefetchOnEnter?: boolean;
17
+ unstable_prefetchOnView?: boolean;
18
+ unstable_startTransition?: ((fn: TransitionFunction) => void) | undefined;
19
+ }
20
+ interface Router {
21
+ push: (to: string, options?: {
22
+ /**
23
+ * indicates if the link should scroll or not on navigation
24
+ * - `true`: always scroll
25
+ * - `false`: never scroll
26
+ * - `undefined`: scroll on path/hash change (not on query-only change)
27
+ */
28
+ scroll?: boolean;
29
+ }) => Promise<void>;
30
+ replace: (to: string, options?: {
31
+ /**
32
+ * indicates if the link should scroll or not on navigation
33
+ * - `true`: always scroll
34
+ * - `false`: never scroll
35
+ * - `undefined`: scroll on path/hash change (not on query-only change)
36
+ */
37
+ scroll?: boolean;
38
+ }) => Promise<void>;
39
+ reload: () => Promise<void>;
40
+ back: () => void;
41
+ forward: () => void;
42
+ prefetch: (to: string) => void;
43
+ unstable_events: Record<"on" | "off", (event: Unstable_ChangeRouteEvent, handler: Unstable_ChangeRouteCallback) => void>;
44
+ path: string;
45
+ query: string;
46
+ hash: string;
47
+ }
48
+ declare function Link({
49
+ href,
50
+ children,
51
+ ...props
52
+ }: LinkProps): _$react_jsx_runtime0.JSX.Element;
53
+ declare function useRouter(): Router;
54
+ //#endregion
55
+ export { Link, LinkProps, Router, useRouter };
package/dist/client.js ADDED
@@ -0,0 +1,16 @@
1
+ "use client";
2
+ import { Link as Link$1, useRouter as useRouter$1 } from "waku/router/client";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/client.tsx
5
+ function Link({ href = "#", children, ...props }) {
6
+ return /* @__PURE__ */ jsx(Link$1, {
7
+ to: href,
8
+ ...props,
9
+ children
10
+ });
11
+ }
12
+ function useRouter() {
13
+ return useRouter$1();
14
+ }
15
+ //#endregion
16
+ export { Link, useRouter };
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
  import { cn } from "../lib/cn.js";
3
- import { useState } from "react";
3
+ import { useTranslations } from "./i18n.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { useState } from "react";
5
6
  import { ChevronDown, ShareIcon } from "lucide-react";
6
7
  import { TOCProvider, TOCScrollArea, useTOCItems } from "fumadocs-ui/components/toc";
7
8
  import { TOCItem, TOCItems } from "fumadocs-ui/components/toc/clerk";
@@ -11,6 +12,7 @@ import { useCopyButton } from "fumadocs-ui/utils/use-copy-button";
11
12
  //#region src/components/blog-panel.tsx
12
13
  const panelButtonVariants = cva("inline-flex items-center font-medium gap-2 px-3 py-2 transition-all duration-150 rounded-lg hover:text-fd-accent-foreground hover:bg-fd-accent active:scale-95");
13
14
  function BlogPanel() {
15
+ const t = useTranslations();
14
16
  const items = useTOCItems();
15
17
  const [open, setOpen] = useState(false);
16
18
  const [isSuccessful, onCopy] = useCopyButton(() => {
@@ -36,12 +38,12 @@ function BlogPanel() {
36
38
  className: cn(panelButtonVariants(), "min-w-0"),
37
39
  children: [/* @__PURE__ */ jsx("span", {
38
40
  className: "truncate",
39
- children: "Table of Contents"
41
+ children: t.tableOfContents
40
42
  }), /* @__PURE__ */ jsx(ChevronDown, { className: cn("size-3.5 shrink-0 text-fd-muted-foreground transition-transform", open && "rotate-180") })]
41
43
  }), /* @__PURE__ */ jsxs("button", {
42
44
  className: cn(panelButtonVariants(), "ms-auto text-fd-muted-foreground"),
43
45
  onClick: onCopy,
44
- children: [/* @__PURE__ */ jsx(ShareIcon, { className: "size-3.5 shrink-0" }), isSuccessful ? "Copied" : "Share"]
46
+ children: [/* @__PURE__ */ jsx(ShareIcon, { className: "size-3.5 shrink-0" }), isSuccessful ? t.copied : t.share]
45
47
  })]
46
48
  })]
47
49
  });
@@ -1,10 +1,12 @@
1
- import { getCreationDate } from "../lib/shared.js";
1
+ import { getCreationDate, getPressContext } from "../lib/shared.js";
2
2
  import { cn } from "../lib/cn.js";
3
- import { joinPathname } from "../lib/join-pathname.js";
4
- import { Link } from "waku";
3
+ import { I18nLabel } from "./i18n.js";
4
+ import { joinPathname } from "../lib/pathname.js";
5
+ import { getBlogContext } from "../plugins/blog.js";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { buttonVariants } from "fumadocs-ui/components/ui/button";
7
+ import { Link } from "waku";
7
8
  import { CornerLeftUpIcon } from "lucide-react";
9
+ import { buttonVariants } from "fumadocs-ui/components/ui/button";
8
10
  //#region src/components/blog.tsx
9
11
  function BlogItem({ page, date }) {
10
12
  return /* @__PURE__ */ jsxs(Link, {
@@ -26,7 +28,8 @@ function BlogItem({ page, date }) {
26
28
  ]
27
29
  });
28
30
  }
29
- async function OrderedBlogGrid({ posts, ctx }) {
31
+ async function OrderedBlogGrid({ posts }) {
32
+ const ctx = getPressContext();
30
33
  const currentDate = new Date(Date.now());
31
34
  const orderedPosts = [];
32
35
  for (const page of posts) {
@@ -45,15 +48,16 @@ async function OrderedBlogGrid({ posts, ctx }) {
45
48
  }, page.url))
46
49
  });
47
50
  }
48
- function LinkToHome({ lang, blog }) {
49
- if (!blog.indexPath) return;
51
+ function LinkToHome({ lang }) {
52
+ const { indexPath } = getBlogContext();
53
+ if (!indexPath) return;
50
54
  return /* @__PURE__ */ jsxs(Link, {
51
- to: lang ? joinPathname(lang, blog.indexPath) : blog.indexPath,
55
+ to: lang ? joinPathname(lang, indexPath) : indexPath,
52
56
  className: cn(buttonVariants({
53
57
  variant: "ghost",
54
58
  className: "text-fd-muted-foreground gap-2"
55
59
  })),
56
- children: [/* @__PURE__ */ jsx(CornerLeftUpIcon, { className: "size-3.5" }), "Back to Home"]
60
+ children: [/* @__PURE__ */ jsx(CornerLeftUpIcon, { className: "size-3.5" }), /* @__PURE__ */ jsx(I18nLabel, { label: "backToHome" })]
57
61
  });
58
62
  }
59
63
  //#endregion
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useI18n } from "fumadocs-ui/contexts/i18n";
3
4
  import { SearchDialog, SearchDialogClose, SearchDialogContent, SearchDialogHeader, SearchDialogIcon, SearchDialogInput, SearchDialogList, SearchDialogOverlay } from "fumadocs-ui/components/dialog/search";
4
5
  import { useDocsSearch } from "fumadocs-core/search/client";
5
6
  import { flexsearchStaticClient } from "fumadocs-core/search/client/flexsearch-static";
6
- import { useI18n } from "fumadocs-ui/contexts/i18n";
7
7
  //#region src/components/flexsearch-static.tsx
8
8
  function DefaultSearchDialog(props) {
9
9
  const { locale } = useI18n();