zudoku 0.76.0 → 0.78.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 (97) hide show
  1. package/dist/cli/cli.js +104 -60
  2. package/dist/declarations/app/main.d.ts +38 -64
  3. package/dist/declarations/config/validators/HeaderNavigationSchema.d.ts +88 -152
  4. package/dist/declarations/config/validators/ZudokuConfig.d.ts +162 -79
  5. package/dist/declarations/config/validators/icon-types.d.ts +1 -1
  6. package/dist/declarations/lib/authentication/authentication.d.ts +1 -0
  7. package/dist/declarations/lib/authentication/hook.d.ts +1 -0
  8. package/dist/declarations/lib/authentication/providers/azureb2c.d.ts +5 -2
  9. package/dist/declarations/lib/authentication/providers/clerk.d.ts +15 -2
  10. package/dist/declarations/lib/authentication/providers/openid.d.ts +13 -2
  11. package/dist/declarations/lib/authentication/providers/util.d.ts +2 -0
  12. package/dist/declarations/lib/authentication/ui/ZudokuAuthUi.d.ts +3 -1
  13. package/dist/declarations/lib/components/Slot.d.ts +1 -1
  14. package/dist/declarations/lib/components/Typography.d.ts +1 -1
  15. package/dist/declarations/lib/components/navigation/Toc.d.ts +4 -0
  16. package/dist/declarations/lib/core/ZudokuContext.d.ts +3 -0
  17. package/dist/declarations/lib/plugins/markdown/index.d.ts +2 -1
  18. package/dist/declarations/lib/plugins/openapi/GeneratedExampleSidecarBox.d.ts +2 -1
  19. package/dist/declarations/lib/plugins/openapi/interfaces.d.ts +2 -0
  20. package/dist/declarations/lib/plugins/openapi/playground/Playground.d.ts +7 -3
  21. package/dist/declarations/lib/plugins/openapi/playground/buildRequestBody.d.ts +14 -0
  22. package/dist/declarations/lib/plugins/openapi/playground/constants.d.ts +2 -0
  23. package/dist/declarations/lib/plugins/openapi/playground/request-panel/UrlEncodedField.d.ts +8 -0
  24. package/dist/declarations/lib/plugins/openapi/schema/UnionView.d.ts +2 -1
  25. package/dist/declarations/lib/plugins/openapi/util/createHttpSnippet.d.ts +16 -4
  26. package/dist/declarations/lib/plugins/openapi/util/extractOperationSecuritySchemes.d.ts +2 -0
  27. package/dist/declarations/lib/plugins/openapi/util/formatRequestBody.d.ts +11 -0
  28. package/dist/declarations/lib/plugins/openapi/util/resolveAuthForSnippet.d.ts +17 -0
  29. package/dist/declarations/lib/plugins/openapi/util/useResolvedAuth.d.ts +9 -0
  30. package/dist/declarations/lib/util/url.d.ts +2 -1
  31. package/dist/flat-config.d.ts +59 -25
  32. package/docs/configuration/api-reference.md +4 -0
  33. package/docs/configuration/authentication-auth0.md +22 -0
  34. package/docs/configuration/authentication-azure-ad.md +18 -0
  35. package/docs/configuration/authentication-clerk.md +17 -0
  36. package/docs/configuration/authentication-firebase.md +7 -0
  37. package/docs/configuration/authentication-openid.md +27 -0
  38. package/docs/configuration/authentication-supabase.md +35 -0
  39. package/docs/configuration/docs.md +17 -1
  40. package/docs/configuration/overview.md +6 -0
  41. package/docs/extending/hooks.md +243 -0
  42. package/docs/guides/mcp-servers.md +1 -1
  43. package/docs/markdown/frontmatter.md +19 -0
  44. package/package.json +28 -28
  45. package/src/app/main.css +53 -0
  46. package/src/app/main.tsx +1 -0
  47. package/src/config/validators/ZudokuConfig.ts +55 -2
  48. package/src/config/validators/icon-types.ts +11 -19
  49. package/src/lib/authentication/authentication.ts +3 -0
  50. package/src/lib/authentication/components/SignUp.tsx +8 -1
  51. package/src/lib/authentication/hook.ts +1 -0
  52. package/src/lib/authentication/providers/auth0.tsx +7 -0
  53. package/src/lib/authentication/providers/azureb2c.tsx +17 -2
  54. package/src/lib/authentication/providers/clerk.tsx +46 -5
  55. package/src/lib/authentication/providers/firebase.tsx +19 -3
  56. package/src/lib/authentication/providers/openid.tsx +77 -2
  57. package/src/lib/authentication/providers/supabase.tsx +15 -8
  58. package/src/lib/authentication/providers/util.ts +14 -0
  59. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +32 -3
  60. package/src/lib/components/Header.tsx +2 -1
  61. package/src/lib/components/Heading.tsx +1 -1
  62. package/src/lib/components/Main.tsx +5 -2
  63. package/src/lib/components/MobileTopNavigation.tsx +2 -5
  64. package/src/lib/components/Slot.tsx +2 -1
  65. package/src/lib/components/Typography.tsx +1 -1
  66. package/src/lib/components/navigation/Navigation.tsx +2 -1
  67. package/src/lib/components/navigation/Toc.tsx +21 -7
  68. package/src/lib/core/RouteGuard.tsx +16 -4
  69. package/src/lib/core/ZudokuContext.ts +3 -0
  70. package/src/lib/plugins/markdown/MdxPage.tsx +194 -68
  71. package/src/lib/plugins/markdown/index.tsx +7 -1
  72. package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +3 -1
  73. package/src/lib/plugins/openapi/MCPEndpoint.tsx +26 -2
  74. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +6 -13
  75. package/src/lib/plugins/openapi/Sidecar.tsx +167 -33
  76. package/src/lib/plugins/openapi/SidecarExamples.tsx +9 -27
  77. package/src/lib/plugins/openapi/interfaces.ts +2 -0
  78. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +64 -3
  79. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +1 -1
  80. package/src/lib/plugins/openapi/playground/Playground.tsx +19 -20
  81. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +13 -7
  82. package/src/lib/plugins/openapi/playground/buildRequestBody.ts +46 -0
  83. package/src/lib/plugins/openapi/playground/constants.ts +2 -0
  84. package/src/lib/plugins/openapi/playground/request-panel/UrlEncodedField.tsx +32 -0
  85. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +2 -2
  86. package/src/lib/plugins/openapi/schema/SchemaView.tsx +21 -4
  87. package/src/lib/plugins/openapi/schema/UnionView.tsx +25 -17
  88. package/src/lib/plugins/openapi/util/createHttpSnippet.ts +173 -97
  89. package/src/lib/plugins/openapi/util/extractOperationSecuritySchemes.ts +17 -0
  90. package/src/lib/plugins/openapi/util/formatRequestBody.ts +84 -0
  91. package/src/lib/plugins/openapi/util/resolveAuthForSnippet.ts +111 -0
  92. package/src/lib/plugins/openapi/util/useResolvedAuth.ts +62 -0
  93. package/src/lib/shiki.ts +6 -3
  94. package/src/lib/ui/Item.tsx +1 -1
  95. package/src/lib/util/flattenAllOf.ts +13 -0
  96. package/src/lib/util/url.ts +22 -7
  97. package/src/vite/api/SchemaManager.ts +16 -2
package/dist/cli/cli.js CHANGED
@@ -878,6 +878,7 @@ var init_icon_types = __esm({
878
878
  "bed-double",
879
879
  "bed-single",
880
880
  "beef",
881
+ "beef-off",
881
882
  "beer",
882
883
  "beer-off",
883
884
  "bell",
@@ -942,6 +943,7 @@ var init_icon_types = __esm({
942
943
  "bookmark",
943
944
  "bookmark-check",
944
945
  "bookmark-minus",
946
+ "bookmark-off",
945
947
  "bookmark-plus",
946
948
  "bookmark-x",
947
949
  "boom-box",
@@ -1027,6 +1029,7 @@ var init_icon_types = __esm({
1027
1029
  "castle",
1028
1030
  "cat",
1029
1031
  "cctv",
1032
+ "cctv-off",
1030
1033
  "chart-area",
1031
1034
  "chart-bar",
1032
1035
  "chart-bar-big",
@@ -1088,8 +1091,6 @@ var init_icon_types = __esm({
1088
1091
  "chevrons-right-left",
1089
1092
  "chevrons-up",
1090
1093
  "chevrons-up-down",
1091
- "chrome",
1092
- "chromium",
1093
1094
  "church",
1094
1095
  "cigarette",
1095
1096
  "cigarette-off",
@@ -1205,8 +1206,6 @@ var init_icon_types = __esm({
1205
1206
  "code-2",
1206
1207
  "code-square",
1207
1208
  "code-xml",
1208
- "codepen",
1209
- "codesandbox",
1210
1209
  "coffee",
1211
1210
  "cog",
1212
1211
  "coins",
@@ -1304,7 +1303,6 @@ var init_icon_types = __esm({
1304
1303
  "download-cloud",
1305
1304
  "drafting-compass",
1306
1305
  "drama",
1307
- "dribbble",
1308
1306
  "drill",
1309
1307
  "drone",
1310
1308
  "droplet",
@@ -1340,14 +1338,12 @@ var init_icon_types = __esm({
1340
1338
  "eye",
1341
1339
  "eye-closed",
1342
1340
  "eye-off",
1343
- "facebook",
1344
1341
  "factory",
1345
1342
  "fan",
1346
1343
  "fast-forward",
1347
1344
  "feather",
1348
1345
  "fence",
1349
1346
  "ferris-wheel",
1350
- "figma",
1351
1347
  "file",
1352
1348
  "file-archive",
1353
1349
  "file-audio",
@@ -1503,7 +1499,6 @@ var init_icon_types = __esm({
1503
1499
  "form-input",
1504
1500
  "forward",
1505
1501
  "frame",
1506
- "framer",
1507
1502
  "frown",
1508
1503
  "fuel",
1509
1504
  "fullscreen",
@@ -1546,8 +1541,6 @@ var init_icon_types = __esm({
1546
1541
  "git-pull-request-create",
1547
1542
  "git-pull-request-create-arrow",
1548
1543
  "git-pull-request-draft",
1549
- "github",
1550
- "gitlab",
1551
1544
  "glass-water",
1552
1545
  "glasses",
1553
1546
  "globe",
@@ -1659,7 +1652,6 @@ var init_icon_types = __esm({
1659
1652
  "info",
1660
1653
  "inspect",
1661
1654
  "inspection-panel",
1662
- "instagram",
1663
1655
  "italic",
1664
1656
  "iteration-ccw",
1665
1657
  "iteration-cw",
@@ -1718,10 +1710,10 @@ var init_icon_types = __esm({
1718
1710
  "line-chart",
1719
1711
  "line-dot-right-horizontal",
1720
1712
  "line-squiggle",
1713
+ "line-style",
1721
1714
  "link",
1722
1715
  "link-2",
1723
1716
  "link-2-off",
1724
- "linkedin",
1725
1717
  "list",
1726
1718
  "list-check",
1727
1719
  "list-checks",
@@ -1786,6 +1778,7 @@ var init_icon_types = __esm({
1786
1778
  "map-pin-pen",
1787
1779
  "map-pin-plus",
1788
1780
  "map-pin-plus-inside",
1781
+ "map-pin-search",
1789
1782
  "map-pin-x",
1790
1783
  "map-pin-x-inside",
1791
1784
  "map-pinned",
@@ -2039,7 +2032,6 @@ var init_icon_types = __esm({
2039
2032
  "plus",
2040
2033
  "plus-circle",
2041
2034
  "plus-square",
2042
- "pocket",
2043
2035
  "pocket-knife",
2044
2036
  "podcast",
2045
2037
  "pointer",
@@ -2066,10 +2058,10 @@ var init_icon_types = __esm({
2066
2058
  "radiation",
2067
2059
  "radical",
2068
2060
  "radio",
2061
+ "radio-off",
2069
2062
  "radio-receiver",
2070
2063
  "radio-tower",
2071
2064
  "radius",
2072
- "rail-symbol",
2073
2065
  "rainbow",
2074
2066
  "rat",
2075
2067
  "ratio",
@@ -2108,6 +2100,7 @@ var init_icon_types = __esm({
2108
2100
  "reply-all",
2109
2101
  "rewind",
2110
2102
  "ribbon",
2103
+ "road",
2111
2104
  "rocket",
2112
2105
  "rocking-chair",
2113
2106
  "roller-coaster",
@@ -2194,6 +2187,8 @@ var init_icon_types = __esm({
2194
2187
  "shield-ban",
2195
2188
  "shield-check",
2196
2189
  "shield-close",
2190
+ "shield-cog",
2191
+ "shield-cog-corner",
2197
2192
  "shield-ellipsis",
2198
2193
  "shield-half",
2199
2194
  "shield-minus",
@@ -2233,7 +2228,6 @@ var init_icon_types = __esm({
2233
2228
  "skip-back",
2234
2229
  "skip-forward",
2235
2230
  "skull",
2236
- "slack",
2237
2231
  "slash",
2238
2232
  "slash-square",
2239
2233
  "slice",
@@ -2267,6 +2261,7 @@ var init_icon_types = __esm({
2267
2261
  "split-square-horizontal",
2268
2262
  "split-square-vertical",
2269
2263
  "spool",
2264
+ "sport-shoe",
2270
2265
  "spotlight",
2271
2266
  "spray-can",
2272
2267
  "sprout",
@@ -2303,6 +2298,7 @@ var init_icon_types = __esm({
2303
2298
  "square-dashed-bottom-code",
2304
2299
  "square-dashed-kanban",
2305
2300
  "square-dashed-mouse-pointer",
2301
+ "square-dashed-text",
2306
2302
  "square-dashed-top-solid",
2307
2303
  "square-divide",
2308
2304
  "square-dot",
@@ -2466,7 +2462,6 @@ var init_icon_types = __esm({
2466
2462
  "tree-palm",
2467
2463
  "tree-pine",
2468
2464
  "trees",
2469
- "trello",
2470
2465
  "trending-down",
2471
2466
  "trending-up",
2472
2467
  "trending-up-down",
@@ -2484,8 +2479,6 @@ var init_icon_types = __esm({
2484
2479
  "tv-2",
2485
2480
  "tv-minimal",
2486
2481
  "tv-minimal-play",
2487
- "twitch",
2488
- "twitter",
2489
2482
  "type",
2490
2483
  "type-outline",
2491
2484
  "umbrella",
@@ -2610,7 +2603,6 @@ var init_icon_types = __esm({
2610
2603
  "x-line-top",
2611
2604
  "x-octagon",
2612
2605
  "x-square",
2613
- "youtube",
2614
2606
  "zap",
2615
2607
  "zap-off",
2616
2608
  "zodiac-aquarius",
@@ -2913,7 +2905,7 @@ ${z7.prettifyError(validationResult.error)}`
2913
2905
  console.log(colors.yellow(z7.prettifyError(validationResult.error)));
2914
2906
  }
2915
2907
  }
2916
- var ThemeSchema, ApiCatalogCategorySchema, LanguageOption, AiAssistantCustomSchema, AiAssistantPresets, AiAssistantsSchema, ApiOptionsSchema, ApiConfigSchema, VersionConfigSchema, ApiSchema, ApiKeysSchema, LogoSchema, FooterSocialIcons, FooterSocialSchema, FooterSchema, SiteMapSchema, DEFAULT_DOCS_FILES, LlmsConfigSchema, DocsConfigSchema, Redirect, SearchSchema, AuthenticationSchema, MetadataSchema, FontConfigSchema, FontsConfigSchema, CssObject, ThemeConfigSchema, SiteSchema, PlacementPosition, HeaderConfigSchema, ApiCatalogSchema, CdnUrlSchema, BaseConfigSchema, ZudokuConfig;
2908
+ var ThemeSchema, ApiCatalogCategorySchema, LanguageOption, AiAssistantCustomSchema, AiAssistantPresets, AiAssistantsSchema, ApiOptionsSchema, ApiConfigSchema, VersionConfigSchema, ApiSchema, ApiKeysSchema, LogoSchema, FooterSocialIcons, FooterSocialSchema, FooterSchema, SiteMapSchema, DEFAULT_DOCS_FILES, LlmsConfigSchema, DocsConfigSchema, Redirect, SearchSchema, SignUpUrlValueSchema, SignUpUrlSchema, SignUpOpenIdSchema, AuthenticationSchema, MetadataSchema, FontConfigSchema, FontsConfigSchema, CssObject, ThemeConfigSchema, SiteSchema, PlacementPosition, HeaderConfigSchema, ApiCatalogSchema, CdnUrlSchema, BaseConfigSchema, ZudokuConfig;
2917
2909
  var init_ZudokuConfig = __esm({
2918
2910
  "src/config/validators/ZudokuConfig.ts"() {
2919
2911
  init_plugin_theme();
@@ -2971,7 +2963,10 @@ var init_ZudokuConfig = __esm({
2971
2963
  showVersionSelect: z7.enum(["always", "if-available", "hide"]),
2972
2964
  expandAllTags: z7.boolean(),
2973
2965
  showInfoPage: z7.boolean(),
2974
- schemaDownload: z7.object({ enabled: z7.boolean() }).partial(),
2966
+ schemaDownload: z7.object({
2967
+ enabled: z7.boolean(),
2968
+ fileName: z7.string().regex(/^[A-Za-z0-9_-]+$/).optional()
2969
+ }).partial(),
2975
2970
  transformExamples: z7.custom(
2976
2971
  (val) => typeof val === "function"
2977
2972
  ),
@@ -3120,7 +3115,7 @@ var init_ZudokuConfig = __esm({
3120
3115
  }).partial();
3121
3116
  DocsConfigSchema = z7.object({
3122
3117
  files: z7.union([z7.string(), z7.array(z7.string())]).transform((val) => typeof val === "string" ? [val] : val).default([DEFAULT_DOCS_FILES]),
3123
- publishMarkdown: z7.boolean().default(false).describe(
3118
+ publishMarkdown: z7.boolean().default(true).describe(
3124
3119
  "When enabled, generates .md files for each document during build. Access documents at their URL path with .md extension (e.g., /foo/hello.md). Markdown files are generated without frontmatter."
3125
3120
  ),
3126
3121
  defaultOptions: z7.object({
@@ -3128,6 +3123,7 @@ var init_ZudokuConfig = __esm({
3128
3123
  copyPage: z7.boolean().optional(),
3129
3124
  disablePager: z7.boolean(),
3130
3125
  showLastModified: z7.boolean(),
3126
+ fullWidth: z7.boolean().optional(),
3131
3127
  suggestEdit: z7.object({
3132
3128
  url: z7.string(),
3133
3129
  text: z7.string().optional()
@@ -3163,6 +3159,16 @@ var init_ZudokuConfig = __esm({
3163
3159
  transformResults: z7.custom((val) => typeof val === "function").optional()
3164
3160
  })
3165
3161
  ]).optional();
3162
+ SignUpUrlValueSchema = z7.string().min(1).refine((v) => v.startsWith("/") || URL.canParse(v), {
3163
+ message: "signUp.url must be an absolute URL or a path starting with '/'"
3164
+ });
3165
+ SignUpUrlSchema = z7.object({ url: SignUpUrlValueSchema }).strict();
3166
+ SignUpOpenIdSchema = z7.union([
3167
+ SignUpUrlSchema,
3168
+ z7.object({
3169
+ authorizationParams: z7.record(z7.string(), z7.string())
3170
+ }).strict()
3171
+ ]);
3166
3172
  AuthenticationSchema = z7.discriminatedUnion("type", [
3167
3173
  z7.object({
3168
3174
  type: z7.literal("clerk"),
@@ -3172,7 +3178,9 @@ var init_ZudokuConfig = __esm({
3172
3178
  jwtTemplateName: z7.string().optional().default("dev-portal"),
3173
3179
  redirectToAfterSignUp: z7.string().optional(),
3174
3180
  redirectToAfterSignIn: z7.string().optional(),
3175
- redirectToAfterSignOut: z7.string().optional()
3181
+ redirectToAfterSignOut: z7.string().optional(),
3182
+ signUp: SignUpUrlSchema.optional(),
3183
+ disableSignUp: z7.boolean().optional()
3176
3184
  }),
3177
3185
  z7.object({
3178
3186
  type: z7.literal("firebase"),
@@ -3196,9 +3204,11 @@ var init_ZudokuConfig = __esm({
3196
3204
  "emailLink"
3197
3205
  ])
3198
3206
  ).optional(),
3207
+ disableSignUp: z7.boolean().optional(),
3199
3208
  redirectToAfterSignUp: z7.string().optional(),
3200
3209
  redirectToAfterSignIn: z7.string().optional(),
3201
- redirectToAfterSignOut: z7.string().optional()
3210
+ redirectToAfterSignOut: z7.string().optional(),
3211
+ signUp: SignUpUrlSchema.optional()
3202
3212
  }),
3203
3213
  z7.object({
3204
3214
  type: z7.literal("openid"),
@@ -3207,9 +3217,14 @@ var init_ZudokuConfig = __esm({
3207
3217
  issuer: z7.string(),
3208
3218
  audience: z7.string().optional(),
3209
3219
  scopes: z7.array(z7.string()).optional(),
3220
+ allowInsecureRequests: z7.boolean().optional(),
3210
3221
  redirectToAfterSignUp: z7.string().optional(),
3211
3222
  redirectToAfterSignIn: z7.string().optional(),
3212
- redirectToAfterSignOut: z7.string().optional()
3223
+ redirectToAfterSignOut: z7.string().optional(),
3224
+ signUp: SignUpOpenIdSchema.optional(),
3225
+ disableSignUp: z7.boolean().optional(),
3226
+ authorizationParams: z7.record(z7.string(), z7.string()).optional(),
3227
+ forwardAuthorizationParams: z7.array(z7.string()).optional()
3213
3228
  }),
3214
3229
  z7.object({
3215
3230
  type: z7.literal("azureb2c"),
@@ -3221,7 +3236,9 @@ var init_ZudokuConfig = __esm({
3221
3236
  issuer: z7.string(),
3222
3237
  redirectToAfterSignUp: z7.string().optional(),
3223
3238
  redirectToAfterSignIn: z7.string().optional(),
3224
- redirectToAfterSignOut: z7.string().optional()
3239
+ redirectToAfterSignOut: z7.string().optional(),
3240
+ signUp: SignUpUrlSchema.optional(),
3241
+ disableSignUp: z7.boolean().optional()
3225
3242
  }),
3226
3243
  z7.object({
3227
3244
  type: z7.literal("auth0"),
@@ -3245,10 +3262,14 @@ var init_ZudokuConfig = __esm({
3245
3262
  redirectToAfterSignUp: z7.string().optional(),
3246
3263
  redirectToAfterSignIn: z7.string().optional(),
3247
3264
  redirectToAfterSignOut: z7.string().optional(),
3265
+ authorizationParams: z7.record(z7.string(), z7.string()).optional(),
3266
+ forwardAuthorizationParams: z7.array(z7.string()).optional(),
3248
3267
  options: z7.object({
3249
3268
  alwaysPromptLogin: z7.boolean().optional(),
3250
3269
  prompt: z7.string().optional()
3251
- }).optional()
3270
+ }).optional(),
3271
+ signUp: SignUpOpenIdSchema.optional(),
3272
+ disableSignUp: z7.boolean().optional()
3252
3273
  }),
3253
3274
  z7.object({
3254
3275
  type: z7.literal("supabase"),
@@ -3258,9 +3279,11 @@ var init_ZudokuConfig = __esm({
3258
3279
  provider: z7.string().optional(),
3259
3280
  providers: z7.array(z7.string()).optional(),
3260
3281
  onlyThirdPartyProviders: z7.boolean().optional(),
3282
+ disableSignUp: z7.boolean().optional(),
3261
3283
  redirectToAfterSignUp: z7.string().optional(),
3262
3284
  redirectToAfterSignIn: z7.string().optional(),
3263
- redirectToAfterSignOut: z7.string().optional()
3285
+ redirectToAfterSignOut: z7.string().optional(),
3286
+ signUp: SignUpUrlSchema.optional()
3264
3287
  })
3265
3288
  ]);
3266
3289
  MetadataSchema = z7.object({
@@ -3331,6 +3354,9 @@ var init_ZudokuConfig = __esm({
3331
3354
  PlacementPosition = z7.enum(["start", "center", "end"]);
3332
3355
  HeaderConfigSchema = z7.object({
3333
3356
  navigation: HeaderNavigationSchema,
3357
+ themeSwitcher: z7.object({
3358
+ enabled: z7.boolean()
3359
+ }).partial().optional(),
3334
3360
  placements: z7.object({
3335
3361
  navigation: PlacementPosition,
3336
3362
  search: PlacementPosition,
@@ -3799,7 +3825,7 @@ import {
3799
3825
  // package.json
3800
3826
  var package_default = {
3801
3827
  name: "zudoku",
3802
- version: "0.75.1",
3828
+ version: "0.77.0",
3803
3829
  type: "module",
3804
3830
  sideEffects: [
3805
3831
  "**/*.css",
@@ -3876,11 +3902,11 @@ var package_default = {
3876
3902
  codegen: "graphql-codegen --config ./src/codegen.ts"
3877
3903
  },
3878
3904
  dependencies: {
3879
- "@apidevtools/json-schema-ref-parser": "15.3.1",
3880
- "@base-ui/react": "^1.4.0",
3905
+ "@apidevtools/json-schema-ref-parser": "15.3.5",
3906
+ "@base-ui/react": "^1.4.1",
3881
3907
  "@envelop/core": "5.5.1",
3882
3908
  "@graphql-typed-document-node/core": "3.2.0",
3883
- "@hono/node-server": "1.19.13",
3909
+ "@hono/node-server": "2.0.2",
3884
3910
  "@lekoarts/rehype-meta-as-attributes": "3.0.3",
3885
3911
  "@mdx-js/react": "3.1.1",
3886
3912
  "@mdx-js/rollup": "3.1.1",
@@ -3910,11 +3936,12 @@ var package_default = {
3910
3936
  "@radix-ui/react-tooltip": "1.2.8",
3911
3937
  "@radix-ui/react-visually-hidden": "1.2.4",
3912
3938
  "@scalar/openapi-parser": "0.23.13",
3913
- "@sentry/node": "10.42.0",
3914
- "@shikijs/langs": "3.23.0",
3915
- "@shikijs/rehype": "3.23.0",
3916
- "@shikijs/themes": "3.23.0",
3917
- "@shikijs/transformers": "3.23.0",
3939
+ "@scalar/snippetz": "0.9.6",
3940
+ "@sentry/node": "10.52.0",
3941
+ "@shikijs/langs": "4.0.2",
3942
+ "@shikijs/rehype": "4.0.2",
3943
+ "@shikijs/themes": "4.0.2",
3944
+ "@shikijs/transformers": "4.0.2",
3918
3945
  "@tailwindcss/typography": "0.5.19",
3919
3946
  "@tailwindcss/vite": "4.2.2",
3920
3947
  "@tanem/react-nprogress": "6.0.3",
@@ -3923,7 +3950,6 @@ var package_default = {
3923
3950
  "@types/react-dom": "catalog:",
3924
3951
  "@vitejs/plugin-react": "6.0.1",
3925
3952
  "@x0k/json-schema-merge": "1.0.2",
3926
- "@zudoku/httpsnippet": "10.0.9",
3927
3953
  "@zudoku/react-helmet-async": "2.0.5",
3928
3954
  "@zuplo/mcp": "0.0.32",
3929
3955
  bs58: "6.0.0",
@@ -3932,30 +3958,30 @@ var package_default = {
3932
3958
  cmdk: "1.1.1",
3933
3959
  dotenv: "17.3.1",
3934
3960
  "embla-carousel-react": "8.6.0",
3935
- esbuild: "^0.27.4",
3961
+ esbuild: "^0.28.0",
3936
3962
  "estree-util-is-identifier-name": "3.0.0",
3937
3963
  "estree-util-value-to-estree": "3.5.0",
3938
3964
  "fast-equals": "6.0.0",
3939
3965
  glob: "13.0.6",
3940
3966
  "glob-parent": "6.0.2",
3941
- graphql: "16.13.2",
3967
+ graphql: "16.14.0",
3942
3968
  "graphql-type-json": "0.3.2",
3943
3969
  "graphql-yoga": "5.18.0",
3944
3970
  "gray-matter": "4.0.3",
3945
3971
  "hast-util-heading-rank": "3.0.0",
3946
3972
  "hast-util-to-jsx-runtime": "2.3.6",
3947
3973
  "hast-util-to-string": "3.0.1",
3948
- hono: "4.12.14",
3974
+ hono: "4.12.18",
3949
3975
  "http-terminator": "3.2.0",
3950
3976
  "javascript-stringify": "2.1.0",
3951
3977
  "json-schema-to-typescript-lite": "15.0.0",
3952
3978
  loglevel: "1.9.2",
3953
- "lucide-react": "0.577.0",
3979
+ "lucide-react": "1.8.0",
3954
3980
  "mdast-util-from-markdown": "2.0.2",
3955
3981
  "mdast-util-mdx": "3.0.0",
3956
3982
  "mdast-util-mdx-jsx": "3.2.0",
3957
3983
  "micromark-extension-mdxjs": "3.0.0",
3958
- motion: "12.35.1",
3984
+ motion: "12.38.0",
3959
3985
  nanoevents: "9.1.0",
3960
3986
  "next-themes": "0.4.6",
3961
3987
  oauth4webapi: "3.8.5",
@@ -3963,13 +3989,13 @@ var package_default = {
3963
3989
  pagefind: "1.5.2",
3964
3990
  picocolors: "1.1.1",
3965
3991
  piscina: "5.1.4",
3966
- "posthog-node": "5.26.0",
3992
+ "posthog-node": "5.33.4",
3967
3993
  "react-error-boundary": "6.1.1",
3968
- "react-hook-form": "7.71.2",
3994
+ "react-hook-form": "7.75.0",
3969
3995
  "react-is": "catalog:",
3970
3996
  "react-markdown": "10.1.0",
3971
- "react-router": "7.13.0",
3972
- "rehype-mdx-import-media": "1.2.0",
3997
+ "react-router": "7.14.1",
3998
+ "rehype-mdx-import-media": "1.4.0",
3973
3999
  "rehype-raw": "7.0.0",
3974
4000
  "rehype-slug": "6.0.0",
3975
4001
  "remark-comment": "1.0.0",
@@ -3978,33 +4004,33 @@ var package_default = {
3978
4004
  "remark-frontmatter": "5.0.0",
3979
4005
  "remark-gfm": "4.0.1",
3980
4006
  "remark-mdx-frontmatter": "5.2.0",
3981
- semver: "7.7.4",
3982
- shiki: "3.23.0",
4007
+ semver: "7.8.0",
4008
+ shiki: "4.0.2",
3983
4009
  sitemap: "9.0.1",
3984
4010
  "strip-ansi": "7.2.0",
3985
- "tailwind-merge": "3.5.0",
4011
+ "tailwind-merge": "3.6.0",
3986
4012
  tailwindcss: "4.2.1",
3987
4013
  "tw-animate-css": "1.4.0",
3988
4014
  unified: "11.0.5",
3989
4015
  "unist-util-visit": "5.1.0",
3990
4016
  vaul: "1.1.2",
3991
4017
  vfile: "6.0.3",
3992
- vite: "8.0.8",
3993
- yaml: "2.8.3",
4018
+ vite: "8.0.9",
4019
+ yaml: "2.8.4",
3994
4020
  yargs: "18.0.0",
3995
4021
  zod: "4.3.6",
3996
- zustand: "5.0.12"
4022
+ zustand: "5.0.13"
3997
4023
  },
3998
4024
  devDependencies: {
3999
- "@clerk/clerk-js": "^6.7.4",
4000
- "@graphql-codegen/cli": "6.3.0",
4025
+ "@graphql-codegen/cli": "7.0.0",
4001
4026
  "@inkeep/cxkit-types": "0.5.117",
4002
4027
  "@testing-library/dom": "catalog:",
4003
4028
  "@testing-library/jest-dom": "catalog:",
4004
4029
  "@testing-library/react": "catalog:",
4005
4030
  "@testing-library/user-event": "catalog:",
4006
- "@types/estree": "1.0.8",
4031
+ "@types/estree": "1.0.9",
4007
4032
  "@types/glob-parent": "5.1.3",
4033
+ "@types/har-format": "^1.2.16",
4008
4034
  "@types/hast": "3.0.4",
4009
4035
  "@types/json-schema": "7.0.15",
4010
4036
  "@types/mdast": "4.0.4",
@@ -4343,7 +4369,20 @@ import {
4343
4369
  var { compareSchemaDefinitions, compareSchemaValues } = createComparator();
4344
4370
  var { mergeArrayOfSchemaDefinitions } = createMerger({
4345
4371
  intersectJson: createIntersector(compareSchemaValues),
4346
- deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions)
4372
+ deduplicateJsonSchemaDef: createDeduplicator(compareSchemaDefinitions),
4373
+ // Default mergers throw on incompatible type/enum pairs, which aborts the
4374
+ // whole flatten even when the bad pair is one branch of a pairwise `anyOf`
4375
+ // combination. Union instead.
4376
+ mergers: {
4377
+ type: (a, b) => {
4378
+ if (a === b) return a;
4379
+ const aArr = Array.isArray(a) ? a : [a];
4380
+ const bArr = Array.isArray(b) ? b : [b];
4381
+ const set = /* @__PURE__ */ new Set([...aArr, ...bArr]);
4382
+ return set.size === 1 ? [...set][0] : [...set];
4383
+ },
4384
+ enum: (a, b) => Array.from(/* @__PURE__ */ new Set([...a, ...b]))
4385
+ }
4347
4386
  });
4348
4387
  var shallowAllOfMerge = createShallowAllOfMerge(
4349
4388
  mergeArrayOfSchemaDefinitions
@@ -5686,6 +5725,9 @@ var SchemaManager = class {
5686
5725
  const existingSchema = schemas[index];
5687
5726
  const schemaVersion = processedSchema.info.version ?? FALLBACK_VERSION;
5688
5727
  const versionPath = existingSchema?.path && existingSchema.path.length > 0 ? existingSchema.path : paramsPath(params) || schemaVersion;
5728
+ const config2 = ensureArray(this.config.apis ?? []).find(
5729
+ (c) => c.path === configuredPath
5730
+ );
5689
5731
  const processed = {
5690
5732
  schema: processedSchema,
5691
5733
  version: schemaVersion,
@@ -5698,7 +5740,8 @@ var SchemaManager = class {
5698
5740
  filePath,
5699
5741
  versionPath,
5700
5742
  configuredPath,
5701
- params
5743
+ params,
5744
+ config2?.options
5702
5745
  ),
5703
5746
  processedJsonPath,
5704
5747
  processedTime
@@ -5784,14 +5827,15 @@ var SchemaManager = class {
5784
5827
  }
5785
5828
  return map;
5786
5829
  };
5787
- createSchemaPath = (inputPath, versionPath, apiPath, params) => {
5830
+ createSchemaPath = (inputPath, versionPath, apiPath, params, config2) => {
5788
5831
  const suffix = paramsSuffix(params);
5789
5832
  const extension = suffix ? ".json" : path7.extname(inputPath);
5833
+ const fileName = config2?.schemaDownload?.fileName ?? this.config.defaults?.apis?.schemaDownload?.fileName ?? "schema";
5790
5834
  return joinUrl(
5791
5835
  this.config.basePath,
5792
5836
  apiPath,
5793
5837
  versionPath,
5794
- `schema${suffix}${extension}`
5838
+ `${fileName}${suffix}${extension}`
5795
5839
  );
5796
5840
  };
5797
5841
  validateSchema = async (schema2, filePath) => {
@@ -9,93 +9,67 @@ export declare const shikiReady: Promise<HighlighterCore>;
9
9
  export declare const convertZudokuConfigToOptions: (config: ZudokuConfig) => ZudokuContextOptions;
10
10
  export declare const getRoutesByOptions: (options: ZudokuContextOptions, enableStatusPages?: boolean) => ({
11
11
  errorElement: import("react/jsx-runtime").JSX.Element;
12
- caseSensitive?: boolean | undefined;
13
- path?: string | undefined;
14
- id?: string | undefined;
15
- middleware?: import("react-router").MiddlewareFunction<unknown>[] | undefined;
16
- loader?: boolean | import("react-router").LoaderFunction<any> | undefined;
17
- action?: boolean | import("react-router").ActionFunction<any> | undefined;
18
- hasErrorBoundary?: boolean | undefined;
19
- shouldRevalidate?: import("react-router").ShouldRevalidateFunction | undefined;
12
+ caseSensitive?: boolean;
13
+ path?: string;
14
+ id?: string;
15
+ middleware?: import("react-router").MiddlewareFunction[];
16
+ loader?: import("react-router").LoaderFunction | boolean;
17
+ action?: import("react-router").ActionFunction | boolean;
18
+ hasErrorBoundary?: boolean;
19
+ shouldRevalidate?: import("react-router").ShouldRevalidateFunction;
20
20
  handle?: any;
21
- index: true;
22
- children?: undefined;
23
- element?: React.ReactNode | null;
24
- hydrateFallbackElement?: React.ReactNode | null;
25
- Component?: React.ComponentType | null;
26
- HydrateFallback?: React.ComponentType | null;
27
- ErrorBoundary?: React.ComponentType | null;
28
- lazy?: ({
21
+ lazy?: {
29
22
  middleware?: (() => Promise<import("react-router").MiddlewareFunction<unknown>[] | null | undefined>) | undefined;
30
23
  loader?: (() => Promise<boolean | import("react-router").LoaderFunction<any> | null | undefined>) | undefined;
31
24
  action?: (() => Promise<boolean | import("react-router").ActionFunction<any> | null | undefined>) | undefined;
32
25
  hasErrorBoundary?: (() => Promise<boolean | null | undefined>) | undefined;
33
26
  shouldRevalidate?: (() => Promise<import("react-router").ShouldRevalidateFunction | null | undefined>) | undefined;
34
27
  handle?: (() => Promise<any>) | undefined;
35
- element?: (() => Promise<import("react").ReactNode>) | undefined;
36
- hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
37
- errorElement?: (() => Promise<import("react").ReactNode>) | undefined;
38
28
  Component?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
39
- HydrateFallback?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
40
- ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
41
- } | {
42
- middleware?: (() => Promise<import("react-router").MiddlewareFunction<unknown>[] | null | undefined>) | undefined;
43
- loader?: (() => Promise<boolean | import("react-router").LoaderFunction<any> | null | undefined>) | undefined;
44
- action?: (() => Promise<boolean | import("react-router").ActionFunction<any> | null | undefined>) | undefined;
45
- hasErrorBoundary?: (() => Promise<boolean | null | undefined>) | undefined;
46
- shouldRevalidate?: (() => Promise<import("react-router").ShouldRevalidateFunction | null | undefined>) | undefined;
47
- handle?: (() => Promise<any>) | undefined;
48
29
  element?: (() => Promise<import("react").ReactNode>) | undefined;
49
- hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
30
+ ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
50
31
  errorElement?: (() => Promise<import("react").ReactNode>) | undefined;
51
- Component?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
52
32
  HydrateFallback?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
53
- ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
54
- }) | import("react-router").LazyRouteFunction<RouteObject>;
33
+ hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
34
+ } | import("react-router").LazyRouteFunction<import("react-router").BaseRouteObject>;
35
+ Component?: React.ComponentType | null;
36
+ element?: React.ReactNode | null;
37
+ ErrorBoundary?: React.ComponentType | null;
38
+ HydrateFallback?: React.ComponentType | null;
39
+ hydrateFallbackElement?: React.ReactNode | null;
40
+ children?: undefined;
41
+ index: true;
55
42
  } | {
56
43
  errorElement: import("react/jsx-runtime").JSX.Element;
57
- caseSensitive?: boolean | undefined;
58
- path?: string | undefined;
59
- id?: string | undefined;
60
- middleware?: import("react-router").MiddlewareFunction<unknown>[] | undefined;
61
- loader?: boolean | import("react-router").LoaderFunction<any> | undefined;
62
- action?: boolean | import("react-router").ActionFunction<any> | undefined;
63
- hasErrorBoundary?: boolean | undefined;
64
- shouldRevalidate?: import("react-router").ShouldRevalidateFunction | undefined;
44
+ caseSensitive?: boolean;
45
+ path?: string;
46
+ id?: string;
47
+ middleware?: import("react-router").MiddlewareFunction[];
48
+ loader?: import("react-router").LoaderFunction | boolean;
49
+ action?: import("react-router").ActionFunction | boolean;
50
+ hasErrorBoundary?: boolean;
51
+ shouldRevalidate?: import("react-router").ShouldRevalidateFunction;
65
52
  handle?: any;
66
- index?: false;
67
- children?: RouteObject[];
68
- element?: React.ReactNode | null;
69
- hydrateFallbackElement?: React.ReactNode | null;
70
- Component?: React.ComponentType | null;
71
- HydrateFallback?: React.ComponentType | null;
72
- ErrorBoundary?: React.ComponentType | null;
73
- lazy?: ({
53
+ lazy?: {
74
54
  middleware?: (() => Promise<import("react-router").MiddlewareFunction<unknown>[] | null | undefined>) | undefined;
75
55
  loader?: (() => Promise<boolean | import("react-router").LoaderFunction<any> | null | undefined>) | undefined;
76
56
  action?: (() => Promise<boolean | import("react-router").ActionFunction<any> | null | undefined>) | undefined;
77
57
  hasErrorBoundary?: (() => Promise<boolean | null | undefined>) | undefined;
78
58
  shouldRevalidate?: (() => Promise<import("react-router").ShouldRevalidateFunction | null | undefined>) | undefined;
79
59
  handle?: (() => Promise<any>) | undefined;
80
- element?: (() => Promise<import("react").ReactNode>) | undefined;
81
- hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
82
- errorElement?: (() => Promise<import("react").ReactNode>) | undefined;
83
60
  Component?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
84
- HydrateFallback?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
85
- ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
86
- } | {
87
- middleware?: (() => Promise<import("react-router").MiddlewareFunction<unknown>[] | null | undefined>) | undefined;
88
- loader?: (() => Promise<boolean | import("react-router").LoaderFunction<any> | null | undefined>) | undefined;
89
- action?: (() => Promise<boolean | import("react-router").ActionFunction<any> | null | undefined>) | undefined;
90
- hasErrorBoundary?: (() => Promise<boolean | null | undefined>) | undefined;
91
- shouldRevalidate?: (() => Promise<import("react-router").ShouldRevalidateFunction | null | undefined>) | undefined;
92
- handle?: (() => Promise<any>) | undefined;
93
61
  element?: (() => Promise<import("react").ReactNode>) | undefined;
94
- hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
62
+ ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
95
63
  errorElement?: (() => Promise<import("react").ReactNode>) | undefined;
96
- Component?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
97
64
  HydrateFallback?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
98
- ErrorBoundary?: (() => Promise<import("react").ComponentType<{}> | null | undefined>) | undefined;
99
- }) | import("react-router").LazyRouteFunction<RouteObject>;
65
+ hydrateFallbackElement?: (() => Promise<import("react").ReactNode>) | undefined;
66
+ } | import("react-router").LazyRouteFunction<import("react-router").BaseRouteObject>;
67
+ Component?: React.ComponentType | null;
68
+ element?: React.ReactNode | null;
69
+ ErrorBoundary?: React.ComponentType | null;
70
+ HydrateFallback?: React.ComponentType | null;
71
+ hydrateFallbackElement?: React.ReactNode | null;
72
+ children?: RouteObject[];
73
+ index?: false;
100
74
  })[];
101
75
  export declare const getRoutesByConfig: (config: ZudokuConfig) => RouteObject[];