zudoku 0.44.0 → 0.45.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 (577) hide show
  1. package/dist/app/entry.client.js +34 -21
  2. package/dist/app/entry.client.js.map +1 -1
  3. package/dist/app/main.js +7 -0
  4. package/dist/app/main.js.map +1 -1
  5. package/dist/config/validators/common.d.ts +420 -288
  6. package/dist/config/validators/common.js +10 -0
  7. package/dist/config/validators/common.js.map +1 -1
  8. package/dist/config/validators/validate.d.ts +161 -108
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +1 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/components/Header.js +1 -1
  13. package/dist/lib/components/Header.js.map +1 -1
  14. package/dist/lib/components/Markdown.d.ts +3 -1
  15. package/dist/lib/components/Markdown.js +8 -14
  16. package/dist/lib/components/Markdown.js.map +1 -1
  17. package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
  18. package/dist/lib/components/context/ZudokuContext.js +2 -3
  19. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  20. package/dist/lib/components/index.d.ts +2 -1
  21. package/dist/lib/core/ZudokuContext.d.ts +8 -0
  22. package/dist/lib/core/ZudokuContext.js.map +1 -1
  23. package/dist/lib/errors/ErrorAlert.js +1 -1
  24. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  25. package/dist/lib/oas/graphql/circular.js +23 -18
  26. package/dist/lib/oas/graphql/circular.js.map +1 -1
  27. package/dist/lib/oas/parser/index.d.ts +3 -0
  28. package/dist/lib/oas/parser/index.js +6 -1
  29. package/dist/lib/oas/parser/index.js.map +1 -1
  30. package/dist/lib/plugins/openapi/CollapsibleCode.js +1 -1
  31. package/dist/lib/plugins/openapi/CollapsibleCode.js.map +1 -1
  32. package/dist/lib/plugins/openapi/ParamInfos.js +3 -1
  33. package/dist/lib/plugins/openapi/ParamInfos.js.map +1 -1
  34. package/dist/lib/plugins/openapi/Sidecar.js +33 -3
  35. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  36. package/dist/lib/plugins/openapi/SidecarExamples.js +1 -1
  37. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  38. package/dist/lib/plugins/openapi/playground/Headers.js +2 -2
  39. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  40. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +1 -3
  41. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -1
  42. package/dist/lib/plugins/openapi/playground/QueryParams.js +2 -2
  43. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  44. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +4 -1
  45. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  46. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +11 -12
  47. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  48. package/dist/lib/plugins/openapi/schema/utils.d.ts +5 -1
  49. package/dist/lib/plugins/openapi/schema/utils.js +9 -5
  50. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  51. package/dist/lib/plugins/openapi/util/generateSchemaExample.d.ts +1 -1
  52. package/dist/lib/plugins/openapi/util/generateSchemaExample.js +4 -0
  53. package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
  54. package/dist/lib/shiki.d.ts +35 -0
  55. package/dist/lib/shiki.js +103 -0
  56. package/dist/lib/shiki.js.map +1 -0
  57. package/dist/lib/ui/Callout.js +1 -1
  58. package/dist/lib/ui/Callout.js.map +1 -1
  59. package/dist/lib/ui/CodeBlock.d.ts +16 -0
  60. package/dist/lib/ui/CodeBlock.js +18 -0
  61. package/dist/lib/ui/CodeBlock.js.map +1 -0
  62. package/dist/lib/ui/SyntaxHighlight.d.ts +10 -15
  63. package/dist/lib/ui/SyntaxHighlight.js +12 -60
  64. package/dist/lib/ui/SyntaxHighlight.js.map +1 -1
  65. package/dist/lib/util/MdxComponents.d.ts +9 -3
  66. package/dist/lib/util/MdxComponents.js +9 -10
  67. package/dist/lib/util/MdxComponents.js.map +1 -1
  68. package/dist/vite/api/SchemaManager.js +2 -0
  69. package/dist/vite/api/SchemaManager.js.map +1 -1
  70. package/dist/vite/config.js +34 -0
  71. package/dist/vite/config.js.map +1 -1
  72. package/dist/vite/plugin-mdx.js +4 -11
  73. package/dist/vite/plugin-mdx.js.map +1 -1
  74. package/dist/vite/plugin-shiki-register.d.ts +3 -0
  75. package/dist/vite/plugin-shiki-register.js +38 -0
  76. package/dist/vite/plugin-shiki-register.js.map +1 -0
  77. package/dist/vite/plugin.js +2 -0
  78. package/dist/vite/plugin.js.map +1 -1
  79. package/lib/AuthenticationPlugin-UNaAuxNo.js +90 -0
  80. package/lib/{AuthenticationPlugin-BlJsiGuX.js.map → AuthenticationPlugin-UNaAuxNo.js.map} +1 -1
  81. package/lib/{Button-BBNrKpQd.js → Button-Bdk_Ij3U.js} +3 -3
  82. package/lib/{Button-BBNrKpQd.js.map → Button-Bdk_Ij3U.js.map} +1 -1
  83. package/lib/{Callout-D3Ja4OPX.js → Callout-XadUe37J.js} +12 -12
  84. package/lib/{Callout-D3Ja4OPX.js.map → Callout-XadUe37J.js.map} +1 -1
  85. package/lib/{Card-BtheiD7j.js → Card-BlCYNw5W.js} +2 -2
  86. package/lib/{Card-BtheiD7j.js.map → Card-BlCYNw5W.js.map} +1 -1
  87. package/lib/{CategoryHeading-D06WK_Wo.js → CategoryHeading-DZi-Szor.js} +2 -2
  88. package/lib/{CategoryHeading-D06WK_Wo.js.map → CategoryHeading-DZi-Szor.js.map} +1 -1
  89. package/lib/{Dialog-ByYz4ABw.js → Dialog-CNf2oWXG.js} +2 -2
  90. package/lib/{Dialog-ByYz4ABw.js.map → Dialog-CNf2oWXG.js.map} +1 -1
  91. package/lib/{Drawer-CEwbkLDb.js → Drawer-BPBxzel2.js} +25 -25
  92. package/lib/{Drawer-CEwbkLDb.js.map → Drawer-BPBxzel2.js.map} +1 -1
  93. package/lib/Markdown-D96AphCL.js +7691 -0
  94. package/lib/Markdown-D96AphCL.js.map +1 -0
  95. package/lib/MdxPage-Sjv6y3cA.js +84 -0
  96. package/lib/{MdxPage-DlJaCSPf.js.map → MdxPage-Sjv6y3cA.js.map} +1 -1
  97. package/lib/{OasProvider-DHPC9PnR.js → OasProvider-CzRXrs_-.js} +4 -4
  98. package/lib/{OasProvider-DHPC9PnR.js.map → OasProvider-CzRXrs_-.js.map} +1 -1
  99. package/lib/{OperationList-C6Ky0zQa.js → OperationList-DefCF3ZI.js} +1737 -1757
  100. package/lib/{OperationList-C6Ky0zQa.js.map → OperationList-DefCF3ZI.js.map} +1 -1
  101. package/lib/{Pagination-C5Fi7z_v.js → Pagination-B89j9KJS.js} +4 -4
  102. package/lib/{Pagination-C5Fi7z_v.js.map → Pagination-B89j9KJS.js.map} +1 -1
  103. package/lib/RouteGuard-lkdEJoDV.js +732 -0
  104. package/lib/{RouteGuard-D2gX29iI.js.map → RouteGuard-lkdEJoDV.js.map} +1 -1
  105. package/lib/{SchemaList-Cu7rWQ_k.js → SchemaList-zHQ2Ekyw.js} +40 -41
  106. package/lib/{SchemaList-Cu7rWQ_k.js.map → SchemaList-zHQ2Ekyw.js.map} +1 -1
  107. package/lib/{SchemaView-Ci_CnNlv.js → SchemaView-CqF4oMU-.js} +120 -115
  108. package/lib/SchemaView-CqF4oMU-.js.map +1 -0
  109. package/lib/Select-HTio1oSE.js +211 -0
  110. package/lib/{Select-CYaEBIYK.js.map → Select-HTio1oSE.js.map} +1 -1
  111. package/lib/SlotletProvider-CTgIBRWg.js +257 -0
  112. package/lib/SlotletProvider-CTgIBRWg.js.map +1 -0
  113. package/lib/SyntaxHighlight-UxOF1xNb.js +9107 -0
  114. package/lib/SyntaxHighlight-UxOF1xNb.js.map +1 -0
  115. package/lib/{Toc-BnN4zBb3.js → Toc-Ax54Pw8S.js} +3 -3
  116. package/lib/{Toc-BnN4zBb3.js.map → Toc-Ax54Pw8S.js.map} +1 -1
  117. package/lib/{chunk-BAXFHI7N-BLTsN6tl.js → chunk-BAXFHI7N-C9WnHsLV.js} +510 -517
  118. package/lib/{chunk-BAXFHI7N-BLTsN6tl.js.map → chunk-BAXFHI7N-C9WnHsLV.js.map} +1 -1
  119. package/lib/{circular-P9P1oxbQ.js → circular-B_TODp4H.js} +1636 -1633
  120. package/lib/{circular-P9P1oxbQ.js.map → circular-B_TODp4H.js.map} +1 -1
  121. package/lib/{cn-qaFjX9_3.js → cn-CwJPJKOE.js} +28 -29
  122. package/lib/{cn-qaFjX9_3.js.map → cn-CwJPJKOE.js.map} +1 -1
  123. package/lib/{createServer-Iclzdx0h.js → createServer-CXd8q7nF.js} +3980 -3832
  124. package/lib/createServer-CXd8q7nF.js.map +1 -0
  125. package/lib/hook-BwOB_iZo.js +1442 -0
  126. package/lib/hook-BwOB_iZo.js.map +1 -0
  127. package/lib/{index-DwT-v3zK.js → index--oeBayMa.js} +2 -2
  128. package/lib/{index-DwT-v3zK.js.map → index--oeBayMa.js.map} +1 -1
  129. package/lib/{index-C56xKbMM.js → index-BY8J3gEh.js} +903 -953
  130. package/lib/index-BY8J3gEh.js.map +1 -0
  131. package/lib/{index-LNp6rxyU.js → index-BvvmIczU.js} +2 -2
  132. package/lib/{index-LNp6rxyU.js.map → index-BvvmIczU.js.map} +1 -1
  133. package/lib/index-CT2PstvH.js +4982 -0
  134. package/lib/{index-CzUOM_vE.js.map → index-CT2PstvH.js.map} +1 -1
  135. package/lib/{index-CuBIgTKC.js → index-CrcNWbel.js} +9 -9
  136. package/lib/{index-CuBIgTKC.js.map → index-CrcNWbel.js.map} +1 -1
  137. package/lib/{index-CPNSgwSb.js → index-Z13x6tPX.js} +5 -5
  138. package/lib/{index-CPNSgwSb.js.map → index-Z13x6tPX.js.map} +1 -1
  139. package/lib/{index-DcHeSvkE.js → index-zddirpDj.js} +581 -609
  140. package/lib/{index-DcHeSvkE.js.map → index-zddirpDj.js.map} +1 -1
  141. package/lib/invariant-DAFpPywt.js +48 -0
  142. package/lib/{invariant-Caa8-XvF.js.map → invariant-DAFpPywt.js.map} +1 -1
  143. package/lib/mutation-CL2MCRQL.js +196 -0
  144. package/lib/{mutation-Bq5bn7Hf.js.map → mutation-CL2MCRQL.js.map} +1 -1
  145. package/lib/processors/removeParameters.js +27 -28
  146. package/lib/processors/removeParameters.js.map +1 -1
  147. package/lib/processors/removePaths.js +17 -17
  148. package/lib/processors/removePaths.js.map +1 -1
  149. package/lib/ui/Accordion.js +1 -1
  150. package/lib/ui/ActionButton.js +2 -2
  151. package/lib/ui/Alert.js +2 -2
  152. package/lib/ui/AlertDialog.js +1 -1
  153. package/lib/ui/Badge.js +2 -2
  154. package/lib/ui/Breadcrumb.js +1 -1
  155. package/lib/ui/Button.js +2 -2
  156. package/lib/ui/Callout.js +7 -7
  157. package/lib/ui/Callout.js.map +1 -1
  158. package/lib/ui/Card.js +1 -1
  159. package/lib/ui/Carousel.js +175 -175
  160. package/lib/ui/Carousel.js.map +1 -1
  161. package/lib/ui/Checkbox.js +1 -1
  162. package/lib/ui/CodeBlock.js +83 -0
  163. package/lib/ui/CodeBlock.js.map +1 -0
  164. package/lib/ui/Command.js +58 -58
  165. package/lib/ui/Command.js.map +1 -1
  166. package/lib/ui/Dialog.js +1 -1
  167. package/lib/ui/Drawer.js +2 -2
  168. package/lib/ui/DropdownMenu.js +1 -1
  169. package/lib/ui/Form.js +1 -1
  170. package/lib/ui/HoverCard.js +1 -1
  171. package/lib/ui/Input.js +1 -1
  172. package/lib/ui/Label.js +2 -2
  173. package/lib/ui/Pagination.js +1 -1
  174. package/lib/ui/Popover.js +1 -1
  175. package/lib/ui/Progress.js +1 -1
  176. package/lib/ui/RadioGroup.js +1 -1
  177. package/lib/ui/ScrollArea.js +1 -1
  178. package/lib/ui/Select.js +1 -1
  179. package/lib/ui/Skeleton.js +1 -1
  180. package/lib/ui/Slider.js +1 -1
  181. package/lib/ui/Switch.js +1 -1
  182. package/lib/ui/SyntaxHighlight.js +5 -6
  183. package/lib/ui/SyntaxHighlight.js.map +1 -1
  184. package/lib/ui/Tabs.js +1 -1
  185. package/lib/ui/Textarea.js +1 -1
  186. package/lib/ui/Toggle.js +2 -2
  187. package/lib/ui/ToggleGroup.js +1 -1
  188. package/lib/ui/Tooltip.js +1 -1
  189. package/lib/ui/util.js +1 -1
  190. package/lib/{useExposedProps-DmTJxEXG.js → useExposedProps-DG8J6ewJ.js} +2 -2
  191. package/lib/{useExposedProps-DmTJxEXG.js.map → useExposedProps-DG8J6ewJ.js.map} +1 -1
  192. package/lib/zudoku.auth-auth0.js +28 -31
  193. package/lib/zudoku.auth-auth0.js.map +1 -1
  194. package/lib/zudoku.auth-clerk.js +64 -70
  195. package/lib/zudoku.auth-clerk.js.map +1 -1
  196. package/lib/zudoku.auth-openid.js +373 -382
  197. package/lib/zudoku.auth-openid.js.map +1 -1
  198. package/lib/zudoku.components.js +7 -7
  199. package/lib/zudoku.hooks.js +2 -2
  200. package/lib/zudoku.plugin-api-catalog.js +45 -45
  201. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  202. package/lib/zudoku.plugin-api-keys.js +6 -6
  203. package/lib/zudoku.plugin-custom-pages.js +3 -3
  204. package/lib/zudoku.plugin-markdown.js +25 -28
  205. package/lib/zudoku.plugin-markdown.js.map +1 -1
  206. package/lib/zudoku.plugin-openapi.js +3 -3
  207. package/lib/zudoku.plugin-redirect.js +1 -1
  208. package/lib/zudoku.plugin-search-inkeep.js +26 -27
  209. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  210. package/lib/zudoku.plugin-search-pagefind.js +107 -110
  211. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  212. package/package.json +39 -28
  213. package/src/app/entry.client.tsx +40 -25
  214. package/src/app/main.css +54 -3
  215. package/src/app/main.tsx +8 -0
  216. package/src/lib/components/Header.tsx +1 -1
  217. package/src/lib/components/Markdown.tsx +29 -24
  218. package/src/lib/components/context/ZudokuContext.ts +2 -3
  219. package/src/lib/core/ZudokuContext.ts +5 -0
  220. package/src/lib/errors/ErrorAlert.tsx +1 -1
  221. package/src/lib/oas/graphql/circular.ts +27 -19
  222. package/src/lib/oas/parser/index.ts +6 -1
  223. package/src/lib/plugins/openapi/CollapsibleCode.tsx +5 -2
  224. package/src/lib/plugins/openapi/ParamInfos.tsx +3 -1
  225. package/src/lib/plugins/openapi/Sidecar.tsx +36 -3
  226. package/src/lib/plugins/openapi/SidecarExamples.tsx +2 -2
  227. package/src/lib/plugins/openapi/playground/Headers.tsx +2 -2
  228. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +22 -35
  229. package/src/lib/plugins/openapi/playground/QueryParams.tsx +2 -2
  230. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +5 -2
  231. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +23 -17
  232. package/src/lib/plugins/openapi/schema/utils.ts +18 -6
  233. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +6 -1
  234. package/src/lib/shiki.ts +133 -0
  235. package/src/lib/ui/Callout.tsx +1 -1
  236. package/src/lib/ui/CodeBlock.tsx +102 -0
  237. package/src/lib/ui/SyntaxHighlight.tsx +23 -182
  238. package/src/lib/util/MdxComponents.tsx +27 -14
  239. package/src/shiki/langs/abap.js +1 -0
  240. package/src/shiki/langs/actionscript-3.js +1 -0
  241. package/src/shiki/langs/ada.js +1 -0
  242. package/src/shiki/langs/angular-expression.js +1 -0
  243. package/src/shiki/langs/angular-html.js +1 -0
  244. package/src/shiki/langs/angular-inline-style.js +1 -0
  245. package/src/shiki/langs/angular-inline-template.js +1 -0
  246. package/src/shiki/langs/angular-let-declaration.js +1 -0
  247. package/src/shiki/langs/angular-template-blocks.js +1 -0
  248. package/src/shiki/langs/angular-template.js +1 -0
  249. package/src/shiki/langs/angular-ts.js +1 -0
  250. package/src/shiki/langs/apache.js +1 -0
  251. package/src/shiki/langs/apex.js +1 -0
  252. package/src/shiki/langs/apl.js +1 -0
  253. package/src/shiki/langs/applescript.js +1 -0
  254. package/src/shiki/langs/ara.js +1 -0
  255. package/src/shiki/langs/asciidoc.js +1 -0
  256. package/src/shiki/langs/asm.js +1 -0
  257. package/src/shiki/langs/astro.js +1 -0
  258. package/src/shiki/langs/awk.js +1 -0
  259. package/src/shiki/langs/ballerina.js +1 -0
  260. package/src/shiki/langs/bat.js +1 -0
  261. package/src/shiki/langs/beancount.js +1 -0
  262. package/src/shiki/langs/berry.js +1 -0
  263. package/src/shiki/langs/bibtex.js +1 -0
  264. package/src/shiki/langs/bicep.js +1 -0
  265. package/src/shiki/langs/blade.js +1 -0
  266. package/src/shiki/langs/bsl.js +1 -0
  267. package/src/shiki/langs/c.js +1 -0
  268. package/src/shiki/langs/cadence.js +1 -0
  269. package/src/shiki/langs/cairo.js +1 -0
  270. package/src/shiki/langs/clarity.js +1 -0
  271. package/src/shiki/langs/clojure.js +1 -0
  272. package/src/shiki/langs/cmake.js +1 -0
  273. package/src/shiki/langs/cobol.js +1 -0
  274. package/src/shiki/langs/codeowners.js +1 -0
  275. package/src/shiki/langs/codeql.js +1 -0
  276. package/src/shiki/langs/coffee.js +1 -0
  277. package/src/shiki/langs/common-lisp.js +1 -0
  278. package/src/shiki/langs/coq.js +1 -0
  279. package/src/shiki/langs/cpp-macro.js +1 -0
  280. package/src/shiki/langs/cpp.js +1 -0
  281. package/src/shiki/langs/crystal.js +1 -0
  282. package/src/shiki/langs/csharp.js +1 -0
  283. package/src/shiki/langs/css.js +1 -0
  284. package/src/shiki/langs/csv.js +1 -0
  285. package/src/shiki/langs/cue.js +1 -0
  286. package/src/shiki/langs/cypher.js +1 -0
  287. package/src/shiki/langs/d.js +1 -0
  288. package/src/shiki/langs/dart.js +1 -0
  289. package/src/shiki/langs/dax.js +1 -0
  290. package/src/shiki/langs/desktop.js +1 -0
  291. package/src/shiki/langs/diff.js +1 -0
  292. package/src/shiki/langs/docker.js +1 -0
  293. package/src/shiki/langs/dotenv.js +1 -0
  294. package/src/shiki/langs/dream-maker.js +1 -0
  295. package/src/shiki/langs/edge.js +1 -0
  296. package/src/shiki/langs/elixir.js +1 -0
  297. package/src/shiki/langs/elm.js +1 -0
  298. package/src/shiki/langs/emacs-lisp.js +1 -0
  299. package/src/shiki/langs/erb.js +1 -0
  300. package/src/shiki/langs/erlang.js +1 -0
  301. package/src/shiki/langs/es-tag-css.js +1 -0
  302. package/src/shiki/langs/es-tag-glsl.js +1 -0
  303. package/src/shiki/langs/es-tag-html.js +1 -0
  304. package/src/shiki/langs/es-tag-sql.js +1 -0
  305. package/src/shiki/langs/es-tag-xml.js +1 -0
  306. package/src/shiki/langs/fennel.js +1 -0
  307. package/src/shiki/langs/fish.js +1 -0
  308. package/src/shiki/langs/fluent.js +1 -0
  309. package/src/shiki/langs/fortran-fixed-form.js +1 -0
  310. package/src/shiki/langs/fortran-free-form.js +1 -0
  311. package/src/shiki/langs/fsharp.js +1 -0
  312. package/src/shiki/langs/gdresource.js +1 -0
  313. package/src/shiki/langs/gdscript.js +1 -0
  314. package/src/shiki/langs/gdshader.js +1 -0
  315. package/src/shiki/langs/genie.js +1 -0
  316. package/src/shiki/langs/gherkin.js +1 -0
  317. package/src/shiki/langs/git-commit.js +1 -0
  318. package/src/shiki/langs/git-rebase.js +1 -0
  319. package/src/shiki/langs/gleam.js +1 -0
  320. package/src/shiki/langs/glimmer-js.js +1 -0
  321. package/src/shiki/langs/glimmer-ts.js +1 -0
  322. package/src/shiki/langs/glsl.js +1 -0
  323. package/src/shiki/langs/gnuplot.js +1 -0
  324. package/src/shiki/langs/go.js +1 -0
  325. package/src/shiki/langs/graphql.js +1 -0
  326. package/src/shiki/langs/groovy.js +1 -0
  327. package/src/shiki/langs/hack.js +1 -0
  328. package/src/shiki/langs/haml.js +1 -0
  329. package/src/shiki/langs/handlebars.js +1 -0
  330. package/src/shiki/langs/haskell.js +1 -0
  331. package/src/shiki/langs/haxe.js +1 -0
  332. package/src/shiki/langs/hcl.js +1 -0
  333. package/src/shiki/langs/hjson.js +1 -0
  334. package/src/shiki/langs/hlsl.js +1 -0
  335. package/src/shiki/langs/html-derivative.js +1 -0
  336. package/src/shiki/langs/html.js +1 -0
  337. package/src/shiki/langs/http.js +1 -0
  338. package/src/shiki/langs/hxml.js +1 -0
  339. package/src/shiki/langs/hy.js +1 -0
  340. package/src/shiki/langs/imba.js +1 -0
  341. package/src/shiki/langs/ini.js +1 -0
  342. package/src/shiki/langs/java.js +1 -0
  343. package/src/shiki/langs/javascript.js +1 -0
  344. package/src/shiki/langs/jinja-html.js +1 -0
  345. package/src/shiki/langs/jinja.js +1 -0
  346. package/src/shiki/langs/jison.js +1 -0
  347. package/src/shiki/langs/json.js +1 -0
  348. package/src/shiki/langs/json5.js +1 -0
  349. package/src/shiki/langs/jsonc.js +1 -0
  350. package/src/shiki/langs/jsonl.js +1 -0
  351. package/src/shiki/langs/jsonnet.js +1 -0
  352. package/src/shiki/langs/jssm.js +1 -0
  353. package/src/shiki/langs/jsx.js +1 -0
  354. package/src/shiki/langs/julia.js +1 -0
  355. package/src/shiki/langs/kotlin.js +1 -0
  356. package/src/shiki/langs/kusto.js +1 -0
  357. package/src/shiki/langs/latex.js +1 -0
  358. package/src/shiki/langs/lean.js +1 -0
  359. package/src/shiki/langs/less.js +1 -0
  360. package/src/shiki/langs/liquid.js +1 -0
  361. package/src/shiki/langs/llvm.js +1 -0
  362. package/src/shiki/langs/log.js +1 -0
  363. package/src/shiki/langs/logo.js +1 -0
  364. package/src/shiki/langs/lua.js +1 -0
  365. package/src/shiki/langs/luau.js +1 -0
  366. package/src/shiki/langs/make.js +1 -0
  367. package/src/shiki/langs/markdown-vue.js +1 -0
  368. package/src/shiki/langs/markdown.js +1 -0
  369. package/src/shiki/langs/marko.js +1 -0
  370. package/src/shiki/langs/matlab.js +1 -0
  371. package/src/shiki/langs/mdc.js +1 -0
  372. package/src/shiki/langs/mdx.js +1 -0
  373. package/src/shiki/langs/mermaid.js +1 -0
  374. package/src/shiki/langs/mipsasm.js +1 -0
  375. package/src/shiki/langs/mojo.js +1 -0
  376. package/src/shiki/langs/move.js +1 -0
  377. package/src/shiki/langs/narrat.js +1 -0
  378. package/src/shiki/langs/nextflow.js +1 -0
  379. package/src/shiki/langs/nginx.js +1 -0
  380. package/src/shiki/langs/nim.js +1 -0
  381. package/src/shiki/langs/nix.js +1 -0
  382. package/src/shiki/langs/nushell.js +1 -0
  383. package/src/shiki/langs/objective-c.js +1 -0
  384. package/src/shiki/langs/objective-cpp.js +1 -0
  385. package/src/shiki/langs/ocaml.js +1 -0
  386. package/src/shiki/langs/pascal.js +1 -0
  387. package/src/shiki/langs/perl.js +1 -0
  388. package/src/shiki/langs/php.js +1 -0
  389. package/src/shiki/langs/plsql.js +1 -0
  390. package/src/shiki/langs/po.js +1 -0
  391. package/src/shiki/langs/polar.js +1 -0
  392. package/src/shiki/langs/postcss.js +1 -0
  393. package/src/shiki/langs/powerquery.js +1 -0
  394. package/src/shiki/langs/powershell.js +1 -0
  395. package/src/shiki/langs/prisma.js +1 -0
  396. package/src/shiki/langs/prolog.js +1 -0
  397. package/src/shiki/langs/proto.js +1 -0
  398. package/src/shiki/langs/pug.js +1 -0
  399. package/src/shiki/langs/puppet.js +1 -0
  400. package/src/shiki/langs/purescript.js +1 -0
  401. package/src/shiki/langs/python.js +1 -0
  402. package/src/shiki/langs/qml.js +1 -0
  403. package/src/shiki/langs/qmldir.js +1 -0
  404. package/src/shiki/langs/qss.js +1 -0
  405. package/src/shiki/langs/r.js +1 -0
  406. package/src/shiki/langs/racket.js +1 -0
  407. package/src/shiki/langs/raku.js +1 -0
  408. package/src/shiki/langs/razor.js +1 -0
  409. package/src/shiki/langs/reg.js +1 -0
  410. package/src/shiki/langs/regexp.js +1 -0
  411. package/src/shiki/langs/rel.js +1 -0
  412. package/src/shiki/langs/riscv.js +1 -0
  413. package/src/shiki/langs/rst.js +1 -0
  414. package/src/shiki/langs/ruby.js +1 -0
  415. package/src/shiki/langs/rust.js +1 -0
  416. package/src/shiki/langs/sas.js +1 -0
  417. package/src/shiki/langs/sass.js +1 -0
  418. package/src/shiki/langs/scala.js +1 -0
  419. package/src/shiki/langs/scheme.js +1 -0
  420. package/src/shiki/langs/scss.js +1 -0
  421. package/src/shiki/langs/sdbl.js +1 -0
  422. package/src/shiki/langs/shaderlab.js +1 -0
  423. package/src/shiki/langs/shellscript.js +1 -0
  424. package/src/shiki/langs/shellsession.js +1 -0
  425. package/src/shiki/langs/smalltalk.js +1 -0
  426. package/src/shiki/langs/solidity.js +1 -0
  427. package/src/shiki/langs/soy.js +1 -0
  428. package/src/shiki/langs/sparql.js +1 -0
  429. package/src/shiki/langs/splunk.js +1 -0
  430. package/src/shiki/langs/sql.js +1 -0
  431. package/src/shiki/langs/ssh-config.js +1 -0
  432. package/src/shiki/langs/stata.js +1 -0
  433. package/src/shiki/langs/stylus.js +1 -0
  434. package/src/shiki/langs/svelte.js +1 -0
  435. package/src/shiki/langs/swift.js +1 -0
  436. package/src/shiki/langs/system-verilog.js +1 -0
  437. package/src/shiki/langs/systemd.js +1 -0
  438. package/src/shiki/langs/talonscript.js +1 -0
  439. package/src/shiki/langs/tasl.js +1 -0
  440. package/src/shiki/langs/tcl.js +1 -0
  441. package/src/shiki/langs/templ.js +1 -0
  442. package/src/shiki/langs/terraform.js +1 -0
  443. package/src/shiki/langs/tex.js +1 -0
  444. package/src/shiki/langs/toml.js +1 -0
  445. package/src/shiki/langs/ts-tags.js +1 -0
  446. package/src/shiki/langs/tsv.js +1 -0
  447. package/src/shiki/langs/tsx.js +1 -0
  448. package/src/shiki/langs/turtle.js +1 -0
  449. package/src/shiki/langs/twig.js +1 -0
  450. package/src/shiki/langs/typescript.js +1 -0
  451. package/src/shiki/langs/typespec.js +1 -0
  452. package/src/shiki/langs/typst.js +1 -0
  453. package/src/shiki/langs/v.js +1 -0
  454. package/src/shiki/langs/vala.js +1 -0
  455. package/src/shiki/langs/vb.js +1 -0
  456. package/src/shiki/langs/verilog.js +1 -0
  457. package/src/shiki/langs/vhdl.js +1 -0
  458. package/src/shiki/langs/viml.js +1 -0
  459. package/src/shiki/langs/vue-directives.js +1 -0
  460. package/src/shiki/langs/vue-html.js +1 -0
  461. package/src/shiki/langs/vue-interpolations.js +1 -0
  462. package/src/shiki/langs/vue-sfc-style-variable-injection.js +1 -0
  463. package/src/shiki/langs/vue.js +1 -0
  464. package/src/shiki/langs/vyper.js +1 -0
  465. package/src/shiki/langs/wasm.js +1 -0
  466. package/src/shiki/langs/wenyan.js +1 -0
  467. package/src/shiki/langs/wgsl.js +1 -0
  468. package/src/shiki/langs/wikitext.js +1 -0
  469. package/src/shiki/langs/wit.js +1 -0
  470. package/src/shiki/langs/wolfram.js +1 -0
  471. package/src/shiki/langs/xml.js +1 -0
  472. package/src/shiki/langs/xsl.js +1 -0
  473. package/src/shiki/langs/yaml.js +1 -0
  474. package/src/shiki/langs/zenscript.js +1 -0
  475. package/src/shiki/langs/zig.js +1 -0
  476. package/src/shiki/themes/andromeeda.js +1 -0
  477. package/src/shiki/themes/aurora-x.js +1 -0
  478. package/src/shiki/themes/ayu-dark.js +1 -0
  479. package/src/shiki/themes/catppuccin-frappe.js +1 -0
  480. package/src/shiki/themes/catppuccin-latte.js +1 -0
  481. package/src/shiki/themes/catppuccin-macchiato.js +1 -0
  482. package/src/shiki/themes/catppuccin-mocha.js +1 -0
  483. package/src/shiki/themes/dark-plus.js +1 -0
  484. package/src/shiki/themes/dracula-soft.js +1 -0
  485. package/src/shiki/themes/dracula.js +1 -0
  486. package/src/shiki/themes/everforest-dark.js +1 -0
  487. package/src/shiki/themes/everforest-light.js +1 -0
  488. package/src/shiki/themes/github-dark-default.js +1 -0
  489. package/src/shiki/themes/github-dark-dimmed.js +1 -0
  490. package/src/shiki/themes/github-dark-high-contrast.js +1 -0
  491. package/src/shiki/themes/github-dark.js +1 -0
  492. package/src/shiki/themes/github-light-default.js +1 -0
  493. package/src/shiki/themes/github-light-high-contrast.js +1 -0
  494. package/src/shiki/themes/github-light.js +1 -0
  495. package/src/shiki/themes/gruvbox-dark-hard.js +1 -0
  496. package/src/shiki/themes/gruvbox-dark-medium.js +1 -0
  497. package/src/shiki/themes/gruvbox-dark-soft.js +1 -0
  498. package/src/shiki/themes/gruvbox-light-hard.js +1 -0
  499. package/src/shiki/themes/gruvbox-light-medium.js +1 -0
  500. package/src/shiki/themes/gruvbox-light-soft.js +1 -0
  501. package/src/shiki/themes/houston.js +1 -0
  502. package/src/shiki/themes/kanagawa-dragon.js +1 -0
  503. package/src/shiki/themes/kanagawa-lotus.js +1 -0
  504. package/src/shiki/themes/kanagawa-wave.js +1 -0
  505. package/src/shiki/themes/laserwave.js +1 -0
  506. package/src/shiki/themes/light-plus.js +1 -0
  507. package/src/shiki/themes/material-theme-darker.js +1 -0
  508. package/src/shiki/themes/material-theme-lighter.js +1 -0
  509. package/src/shiki/themes/material-theme-ocean.js +1 -0
  510. package/src/shiki/themes/material-theme-palenight.js +1 -0
  511. package/src/shiki/themes/material-theme.js +1 -0
  512. package/src/shiki/themes/min-dark.js +1 -0
  513. package/src/shiki/themes/min-light.js +1 -0
  514. package/src/shiki/themes/monokai.js +1 -0
  515. package/src/shiki/themes/night-owl.js +1 -0
  516. package/src/shiki/themes/nord.js +1 -0
  517. package/src/shiki/themes/one-dark-pro.js +1 -0
  518. package/src/shiki/themes/one-light.js +1 -0
  519. package/src/shiki/themes/plastic.js +1 -0
  520. package/src/shiki/themes/poimandres.js +1 -0
  521. package/src/shiki/themes/red.js +1 -0
  522. package/src/shiki/themes/rose-pine-dawn.js +1 -0
  523. package/src/shiki/themes/rose-pine-moon.js +1 -0
  524. package/src/shiki/themes/rose-pine.js +1 -0
  525. package/src/shiki/themes/slack-dark.js +1 -0
  526. package/src/shiki/themes/slack-ochin.js +1 -0
  527. package/src/shiki/themes/snazzy-light.js +1 -0
  528. package/src/shiki/themes/solarized-dark.js +1 -0
  529. package/src/shiki/themes/solarized-light.js +1 -0
  530. package/src/shiki/themes/synthwave-84.js +1 -0
  531. package/src/shiki/themes/tokyo-night.js +1 -0
  532. package/src/shiki/themes/vesper.js +1 -0
  533. package/src/shiki/themes/vitesse-black.js +1 -0
  534. package/src/shiki/themes/vitesse-dark.js +1 -0
  535. package/src/shiki/themes/vitesse-light.js +1 -0
  536. package/lib/AuthenticationPlugin-BlJsiGuX.js +0 -99
  537. package/lib/Markdown-DvdVn1O7.js +0 -17128
  538. package/lib/Markdown-DvdVn1O7.js.map +0 -1
  539. package/lib/MdxPage-DlJaCSPf.js +0 -85
  540. package/lib/RouteGuard-D2gX29iI.js +0 -744
  541. package/lib/SchemaView-Ci_CnNlv.js.map +0 -1
  542. package/lib/Select-CYaEBIYK.js +0 -223
  543. package/lib/SlotletProvider-wWbHYqWf.js +0 -340
  544. package/lib/SlotletProvider-wWbHYqWf.js.map +0 -1
  545. package/lib/SyntaxHighlight-o7q0acut.js +0 -2890
  546. package/lib/SyntaxHighlight-o7q0acut.js.map +0 -1
  547. package/lib/_commonjsHelpers-B4e78b8K.js +0 -29
  548. package/lib/_commonjsHelpers-B4e78b8K.js.map +0 -1
  549. package/lib/createServer-Iclzdx0h.js.map +0 -1
  550. package/lib/hook-8GM2HXNM.js +0 -1478
  551. package/lib/hook-8GM2HXNM.js.map +0 -1
  552. package/lib/index-C56xKbMM.js.map +0 -1
  553. package/lib/index-CzUOM_vE.js +0 -5039
  554. package/lib/invariant-Caa8-XvF.js +0 -26
  555. package/lib/mutation-Bq5bn7Hf.js +0 -211
  556. package/lib/prism-bash.min-HHIMdNJ_.js +0 -7
  557. package/lib/prism-bash.min-HHIMdNJ_.js.map +0 -1
  558. package/lib/prism-csharp.min-C43x1RY2.js +0 -63
  559. package/lib/prism-csharp.min-C43x1RY2.js.map +0 -1
  560. package/lib/prism-java.min-CQzr40NQ.js +0 -35
  561. package/lib/prism-java.min-CQzr40NQ.js.map +0 -1
  562. package/lib/prism-javascript.min-CEqHqgbm.js +0 -9
  563. package/lib/prism-javascript.min-CEqHqgbm.js.map +0 -1
  564. package/lib/prism-json.min-B1GJqK1k.js +0 -2
  565. package/lib/prism-json.min-B1GJqK1k.js.map +0 -1
  566. package/lib/prism-jsstacktrace.min-BfobCF2F.js +0 -2
  567. package/lib/prism-jsstacktrace.min-BfobCF2F.js.map +0 -1
  568. package/lib/prism-markdown.min-C0Qn0m-5.js +0 -61
  569. package/lib/prism-markdown.min-C0Qn0m-5.js.map +0 -1
  570. package/lib/prism-markup-BNGj0Tvm.js +0 -174
  571. package/lib/prism-markup-BNGj0Tvm.js.map +0 -1
  572. package/lib/prism-objectivec.min-BXSWqpJJ.js +0 -2
  573. package/lib/prism-objectivec.min-BXSWqpJJ.js.map +0 -1
  574. package/lib/prism-ruby.min-L9OdQ6tU.js +0 -38
  575. package/lib/prism-ruby.min-L9OdQ6tU.js.map +0 -1
  576. package/lib/prism-typescript.min-qTySPvCh.js +0 -34
  577. package/lib/prism-typescript.min-qTySPvCh.js.map +0 -1
@@ -34,31 +34,46 @@ if (root.childElementCount > 0) {
34
34
  void render(routes);
35
35
  }
36
36
 
37
- // eslint-disable-next-line no-console
38
- console.log(
39
- "%cZUDOKU%c by Zuplo v" + window.ZUDOKU_VERSION,
40
- [
41
- "color: #FF00BD",
42
- "line-height: 50px",
43
- "font-weight: bolder",
44
- "font-size: 30px",
45
- "-webkit-text-stroke-width: 1px",
46
- "-webkit-text-stroke-color: #FF00BD",
47
- "text-transform: uppercase",
48
- "text-align: center",
49
- "letter-spacing: 5px",
50
- ].join(" ;"),
51
- [
52
- "color: #Df0097",
53
- "line-height: 50px",
54
- "font-weight: bolder",
55
- "font-size: 15px",
56
- "text-align: center",
57
- "letter-spacing: 5px",
58
- ].join(" ;"),
59
- );
60
- // eslint-disable-next-line no-console
61
- console.log("» Learn more about Zudoku https://zudoku.dev");
37
+ if (import.meta.env.IS_ZUPLO) {
38
+ // eslint-disable-next-line no-console
39
+ console.log(
40
+ `%cPowered by Zuplo v${window.ZUDOKU_VERSION}`,
41
+ [
42
+ "color: #Df0097",
43
+ "line-height: 50px",
44
+ "font-weight: bolder",
45
+ "font-size: 15px",
46
+ "text-align: center",
47
+ "letter-spacing: 5px",
48
+ ].join(" ;"),
49
+ );
50
+ } else {
51
+ // eslint-disable-next-line no-console
52
+ console.log(
53
+ `%cZUDOKU%c by Zuplo v${window.ZUDOKU_VERSION}`,
54
+ [
55
+ "color: #FF00BD",
56
+ "line-height: 50px",
57
+ "font-weight: bolder",
58
+ "font-size: 30px",
59
+ "-webkit-text-stroke-width: 1px",
60
+ "-webkit-text-stroke-color: #FF00BD",
61
+ "text-transform: uppercase",
62
+ "text-align: center",
63
+ "letter-spacing: 5px",
64
+ ].join(" ;"),
65
+ [
66
+ "color: #Df0097",
67
+ "line-height: 50px",
68
+ "font-weight: bolder",
69
+ "font-size: 15px",
70
+ "text-align: center",
71
+ "letter-spacing: 5px",
72
+ ].join(" ;"),
73
+ );
74
+ // eslint-disable-next-line no-console
75
+ console.log("» Learn more about Zudoku https://zudoku.dev");
76
+ }
62
77
 
63
78
  async function hydrateLazyRoutes(routes: RouteObject[]) {
64
79
  const path = window.location.pathname;
package/src/app/main.css CHANGED
@@ -97,6 +97,11 @@
97
97
  html {
98
98
  /* This is to prevent layout jumping when the scrollbar appears/disappears */
99
99
  @apply -me-[--scrollbar-width] scroll-pt-[--scroll-padding];
100
+ --dark: -1;
101
+ }
102
+
103
+ html.dark {
104
+ --dark: 1;
100
105
  }
101
106
 
102
107
  html,
@@ -138,10 +143,11 @@
138
143
  }
139
144
 
140
145
  .prose.prose {
141
- @apply prose-a:underline-offset-4 hover:prose-a:text-primary;
146
+ @apply prose-a:underline-offset-4 prose-a:font-normal hover:prose-a:text-primary;
142
147
  @apply prose-blockquote:not-italic prose-blockquote:text-neutral-500/75 prose-blockquote:dark:text-neutral-400;
143
- @apply prose-headings:prose-code:mx-2;
144
- @apply prose-code:before:content-none prose-code:after:content-none;
148
+ @apply prose-code:before:content-none prose-code:after:content-none prose-code:font-normal;
149
+ @apply prose-headings:prose-code:mx-2 prose-li:my-0.5;
150
+ @apply prose-hr:border-border;
145
151
 
146
152
  ul.contains-task-list {
147
153
  @apply list-none px-0;
@@ -151,6 +157,51 @@
151
157
  }
152
158
  }
153
159
 
160
+ .shiki {
161
+ counter-reset: line;
162
+ @apply leading-normal;
163
+ }
164
+ .code-block .shiki {
165
+ @apply grid;
166
+ }
167
+
168
+ .shiki,
169
+ .shiki span {
170
+ color: var(--shiki-light);
171
+ font-style: var(--shiki-light-font-style) !important;
172
+ font-weight: var(--shiki-light-font-weight) !important;
173
+ text-decoration: var(--shiki-light-text-decoration) !important;
174
+ }
175
+
176
+ html.dark .shiki,
177
+ html.dark .shiki span {
178
+ color: var(--shiki-dark);
179
+ font-style: var(--shiki-dark-font-style) !important;
180
+ font-weight: var(--shiki-dark-font-weight) !important;
181
+ text-decoration: var(--shiki-dark-text-decoration) !important;
182
+ }
183
+
184
+ .line-numbers .shiki .line::before {
185
+ counter-increment: line;
186
+ content: counter(line);
187
+ @apply tabular-nums inline-flex items-baseline justify-end me-4 w-3 text-muted-foreground/25;
188
+ }
189
+
190
+ .shiki.not-inline .line {
191
+ @apply inline-flex items-baseline -mx-4 px-4 w-[calc(100%+2rem)];
192
+ --highlighted-bg: hsl(
193
+ from hsl(var(--muted)) h s calc(l + 4 * var(--dark)) / 50%
194
+ );
195
+ }
196
+ .shiki .line.highlighted {
197
+ @apply bg-[--highlighted-bg];
198
+ }
199
+
200
+ .shiki .highlighted-word {
201
+ @apply bg-[--highlighted-bg] px-0.5 rounded;
202
+ box-shadow: 0 0 0 4px var(--highlighted-bg);
203
+ }
204
+
154
205
  select {
155
206
  @apply focus-visible:ring-primary focus-visible:ring-[1.5px] focus:outline-none;
156
207
  }
package/src/app/main.tsx CHANGED
@@ -9,6 +9,7 @@ import { configuredCustomPagesPlugin } from "virtual:zudoku-custom-pages-plugin"
9
9
  import { configuredDocsPlugins } from "virtual:zudoku-docs-plugins";
10
10
  import { configuredRedirectPlugin } from "virtual:zudoku-redirect-plugin";
11
11
  import { configuredSearchPlugin } from "virtual:zudoku-search-plugin";
12
+ import { registerShiki } from "virtual:zudoku-shiki-register";
12
13
  import { configuredSidebar } from "virtual:zudoku-sidebar";
13
14
  import "virtual:zudoku-theme.css";
14
15
  import {
@@ -22,8 +23,11 @@ import {
22
23
  import type { ZudokuConfig } from "../config/config.js";
23
24
  import type { ZudokuContextOptions } from "../lib/core/ZudokuContext.js";
24
25
  import { isNavigationPlugin } from "../lib/core/plugins.js";
26
+ import { highlighter } from "../lib/shiki.js";
25
27
  import { ZuploEnv } from "./env.js";
26
28
 
29
+ await registerShiki(highlighter);
30
+
27
31
  export const convertZudokuConfigToOptions = (
28
32
  config: ZudokuConfig,
29
33
  ): ZudokuContextOptions => {
@@ -80,6 +84,10 @@ export const convertZudokuConfigToOptions = (
80
84
  : []),
81
85
  ...(config.plugins ?? []),
82
86
  ],
87
+ syntaxHighlighting: {
88
+ highlighter,
89
+ themes: config.syntaxHighlighting?.themes,
90
+ },
83
91
  };
84
92
  };
85
93
 
@@ -105,7 +105,7 @@ export const Header = memo(function HeaderInner() {
105
105
  />
106
106
  </>
107
107
  )}
108
- <span className="font-bold text-2xl text-foreground/85 tracking-wide">
108
+ <span className="font-semibold text-2xl">
109
109
  {page?.pageTitle}
110
110
  </span>
111
111
  </div>
@@ -1,37 +1,42 @@
1
1
  import { memo } from "react";
2
- import rehypeRaw from "rehype-raw";
2
+ import { MarkdownHooks, type Components } from "react-markdown";
3
3
  import remarkGfm from "remark-gfm";
4
- import { visit } from "unist-util-visit";
4
+ import { createConfiguredShikiRehypePlugins } from "../shiki.js";
5
5
  import { MdxComponents } from "../util/MdxComponents.js";
6
- import { ReactMarkdown } from "./ReactMarkdown.js";
7
-
8
- // same as in packages/dev-portal/framework/vite.ts
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- const rehypeCodeBlockPlugin = () => (tree: any) => {
11
- visit(tree, "element", (node, _index, parent) => {
12
- if (node.tagName === "code") {
13
- node.properties.inline = String(parent?.tagName !== "pre");
14
- }
15
- });
16
- };
6
+ import { useZudoku } from "./context/ZudokuContext.js";
17
7
 
18
8
  const remarkPlugins = [remarkGfm];
19
- const rehypePlugins = [rehypeCodeBlockPlugin, rehypeRaw];
20
9
 
21
10
  // other styles are defined in main.css .prose
22
11
  export const ProseClasses = "prose dark:prose-invert prose-neutral";
23
12
 
24
13
  export const Markdown = memo(
25
- ({ content, className }: { content: string; className?: string }) => (
26
- <ReactMarkdown
27
- remarkPlugins={remarkPlugins}
28
- rehypePlugins={rehypePlugins}
29
- components={MdxComponents}
30
- className={className}
31
- >
32
- {content}
33
- </ReactMarkdown>
34
- ),
14
+ ({
15
+ content,
16
+ className,
17
+ components,
18
+ }: {
19
+ content: string;
20
+ className?: string;
21
+ components?: Components;
22
+ }) => {
23
+ const { syntaxHighlighting } = useZudoku().options;
24
+ const rehypePlugins = createConfiguredShikiRehypePlugins(
25
+ syntaxHighlighting?.themes,
26
+ );
27
+
28
+ return (
29
+ <div className={className}>
30
+ <MarkdownHooks
31
+ remarkPlugins={remarkPlugins}
32
+ rehypePlugins={rehypePlugins}
33
+ components={{ ...MdxComponents, ...components }}
34
+ >
35
+ {content}
36
+ </MarkdownHooks>
37
+ </div>
38
+ );
39
+ },
35
40
  );
36
41
 
37
42
  Markdown.displayName = "Markdown";
@@ -4,7 +4,7 @@ import { matchPath, useLocation } from "react-router";
4
4
  import { useAuth } from "../../authentication/hook.js";
5
5
  import type { ZudokuContext } from "../../core/ZudokuContext.js";
6
6
  import { joinUrl } from "../../util/joinUrl.js";
7
- import { CACHE_KEYS, NO_DEHYDRATE } from "../cache.js";
7
+ import { CACHE_KEYS } from "../cache.js";
8
8
  import { traverseSidebar } from "../navigation/utils.js";
9
9
 
10
10
  export const ZudokuReactContext = createContext<ZudokuContext | undefined>(
@@ -67,8 +67,7 @@ export const useCurrentNavigation = () => {
67
67
 
68
68
  const { data } = useSuspenseQuery({
69
69
  queryFn: () => getPluginSidebar(location.pathname),
70
- // We just want to suspend here and don't store in SSR dehydrated state
71
- queryKey: ["plugin-sidebar", NO_DEHYDRATE, location.pathname],
70
+ queryKey: ["plugin-sidebar", location.pathname],
72
71
  });
73
72
 
74
73
  const hideSidebar =
@@ -2,6 +2,7 @@ import type { QueryClient } from "@tanstack/react-query";
2
2
  import { createNanoEvents } from "nanoevents";
3
3
  import type { ReactNode } from "react";
4
4
  import type { Location } from "react-router";
5
+ import type { BundledTheme, HighlighterCore } from "shiki";
5
6
  import type { z } from "zod";
6
7
  import type {
7
8
  FooterSchema,
@@ -90,6 +91,10 @@ export type ZudokuContextOptions = {
90
91
  };
91
92
  overrides?: ComponentsContextType;
92
93
  protectedRoutes?: string[];
94
+ syntaxHighlighting?: {
95
+ highlighter: HighlighterCore;
96
+ themes?: { light: BundledTheme; dark: BundledTheme };
97
+ };
93
98
  };
94
99
 
95
100
  export class ZudokuContext {
@@ -32,7 +32,7 @@ export function ErrorAlert({ error }: { error: unknown }) {
32
32
  <div>
33
33
  <SyntaxHighlight
34
34
  className="max-h-[400px] border mt-2"
35
- language="jsstacktrace"
35
+ language="js"
36
36
  code={stringError}
37
37
  />
38
38
  </div>
@@ -1,43 +1,51 @@
1
1
  import { GraphQLJSON } from "graphql-type-json";
2
2
  import { GraphQLScalarType } from "graphql/index.js";
3
- import { RecordAny } from "../../util/traverse.js";
3
+ import type { RecordAny } from "../../util/traverse.js";
4
4
 
5
5
  export const CIRCULAR_REF = "$[Circular Reference]";
6
6
 
7
+ const OPENAPI_PROPS = new Set([
8
+ "properties",
9
+ "items",
10
+ "additionalProperties",
11
+ "allOf",
12
+ "anyOf",
13
+ "oneOf",
14
+ ]);
15
+
7
16
  const handleCircularRefs = (
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
18
  obj: any,
9
- visited = new Map<string, string[]>(),
19
+ visited = new WeakSet(),
20
+ refs = new WeakMap(),
10
21
  path: string[] = [],
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
23
  ): any => {
12
- if (obj === CIRCULAR_REF) return CIRCULAR_REF;
13
24
  if (obj === null || typeof obj !== "object") return obj;
14
25
 
15
- const currentPath = path.join(".");
16
-
17
- if (obj.type === "object" && obj.properties) {
18
- const schemaKey = Object.keys(obj.properties).sort().join("-");
26
+ if (visited.has(obj)) {
27
+ const cached = refs.get(obj);
28
+ if (cached) return cached;
29
+ const circularProp = path.find((p) => !OPENAPI_PROPS.has(p)) || path[0];
19
30
 
20
- if (visited.has(schemaKey)) {
21
- const prevPaths = visited.get(schemaKey)!;
22
- if (prevPaths.some((prev) => currentPath.startsWith(prev))) {
23
- return CIRCULAR_REF;
24
- }
25
- visited.set(schemaKey, [...prevPaths, currentPath]);
26
- } else {
27
- visited.set(schemaKey, [currentPath]);
28
- }
31
+ return [CIRCULAR_REF, circularProp].filter(Boolean).join(":");
29
32
  }
30
33
 
34
+ visited.add(obj);
35
+
31
36
  if (Array.isArray(obj)) {
32
- return obj.map((item, index) =>
33
- handleCircularRefs(item, visited, [...path, `${index}`]),
37
+ const result = obj.map((item, index) =>
38
+ handleCircularRefs(item, visited, refs, [...path, index.toString()]),
34
39
  );
40
+ refs.set(obj, result);
41
+ return result;
35
42
  }
36
43
 
37
44
  const result: RecordAny = {};
38
45
  for (const [key, value] of Object.entries(obj)) {
39
- result[key] = handleCircularRefs(value, visited, [...path, key]);
46
+ result[key] = handleCircularRefs(value, visited, refs, [...path, key]);
40
47
  }
48
+ refs.set(obj, result);
41
49
  return result;
42
50
  };
43
51
 
@@ -1,3 +1,4 @@
1
+ import { merge as mergeAllOf } from "allof-merge";
1
2
  import { GraphQLError } from "graphql/error/index.js";
2
3
  import { OpenAPIV3, type OpenAPIV3_1 } from "openapi-types";
3
4
  import { dereference, type JSONSchema } from "./dereference/index.js";
@@ -87,6 +88,9 @@ const parseSchemaInput = async (
87
88
 
88
89
  /**
89
90
  * Validates, dereferences and upgrades the OpenAPI schema (to v3.1) if necessary.
91
+ *
92
+ * This only happens for URL schemas (or in standalone mode).
93
+ * File schemas are pre-processed by the SchemaManager
90
94
  */
91
95
  export const validate = async (schemaInput: unknown) => {
92
96
  const schema = await parseSchemaInput(schemaInput);
@@ -97,6 +101,7 @@ export const validate = async (schemaInput: unknown) => {
97
101
 
98
102
  const dereferenced = await dereference(schema);
99
103
  const upgraded = upgradeSchema(dereferenced);
104
+ const merged = mergeAllOf(upgraded) as OpenAPIDocument;
100
105
 
101
- return upgraded;
106
+ return merged;
102
107
  };
@@ -49,7 +49,7 @@ export const CollapsibleCode = ({
49
49
  )}
50
50
  >
51
51
  {!open && isOverflowing && (
52
- <div className=" absolute inset-0 bg-gradient-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 group-hover:to-transparent"></div>
52
+ <div className=" absolute inset-0 bg-gradient-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 transition-all group-hover:to-transparent"></div>
53
53
  )}
54
54
  <div ref={contentRef}>{children}</div>
55
55
  {!open && isOverflowing && (
@@ -68,7 +68,10 @@ export const CollapsibleCode = ({
68
68
  </CollapsibleContent>
69
69
  {isOverflowing && (
70
70
  <div
71
- className={cn("flex justify-center w-full mb-2", !open && "hidden")}
71
+ className={cn(
72
+ "flex justify-center w-full py-2 bg-muted/50",
73
+ !open && "hidden",
74
+ )}
72
75
  >
73
76
  <CollapsibleTrigger asChild>
74
77
  <Button variant="outline" size="sm">
@@ -30,7 +30,9 @@ const getSchemaInfos = (schema?: SchemaObject) => {
30
30
 
31
31
  return [
32
32
  schema.type === "array" && schema.items.type
33
- ? `${schema.items.type}[]`
33
+ ? Array.isArray(schema.items.type)
34
+ ? `(${schema.items.type.join(" | ")})[]`
35
+ : `${schema.items.type}[]`
34
36
  : Array.isArray(schema.type)
35
37
  ? schema.type.join(" | ")
36
38
  : schema.type,
@@ -168,8 +168,40 @@ export const Sidecar = ({
168
168
  mimeType: "application/json",
169
169
  }
170
170
  : ({} as any),
171
- headers: [{ name: "Content-Type", value: "application/json" }],
172
- queryString: [],
171
+ headers: [
172
+ { name: "Content-Type", value: "application/json" },
173
+ ...(operation.parameters
174
+ ?.filter((p) => p.in === "header" && p.required === true)
175
+ .map((p) => ({
176
+ name: p.name,
177
+ value:
178
+ p.examples?.find((x) => x.value)?.value ??
179
+ p.schema?.default ??
180
+ (p.schema?.type === "string"
181
+ ? "string"
182
+ : p.schema?.type === "number" || p.schema?.type === "integer"
183
+ ? "0"
184
+ : p.schema?.type === "boolean"
185
+ ? "true"
186
+ : ""),
187
+ })) ?? []),
188
+ ],
189
+ queryString:
190
+ operation.parameters
191
+ ?.filter((p) => p.in === "query" && p.required === true)
192
+ .map((p) => ({
193
+ name: p.name,
194
+ value:
195
+ p.examples?.find((x) => x.value)?.value ??
196
+ p.schema?.default ??
197
+ (p.schema?.type === "string"
198
+ ? "string"
199
+ : p.schema?.type === "number" || p.schema?.type === "integer"
200
+ ? "0"
201
+ : p.schema?.type === "boolean"
202
+ ? "true"
203
+ : ""),
204
+ })) ?? [],
173
205
  httpVersion: "",
174
206
  cookies: [],
175
207
  headersSize: 0,
@@ -184,6 +216,7 @@ export const Sidecar = ({
184
216
  operation.path,
185
217
  selectedServer,
186
218
  selectedLang,
219
+ operation.parameters,
187
220
  ]);
188
221
  const [ref, isOnScreen] = useOnScreen({ rootMargin: "200px 0px 200px 0px" });
189
222
 
@@ -225,7 +258,7 @@ export const Sidecar = ({
225
258
  <SyntaxHighlight
226
259
  language={selectedLang}
227
260
  noBackground
228
- className="[--scrollbar-color:gray] text-xs max-h-[500px] p-2"
261
+ className="[--scrollbar-color:gray] rounded-none text-xs max-h-[500px] p-2"
229
262
  code={code!}
230
263
  />
231
264
  </CollapsibleCode>
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useMemo, useState } from "react";
2
- import { SchemaObject } from "../../oas/parser/index.js";
2
+ import { type SchemaObject } from "../../oas/parser/index.js";
3
3
  import { SyntaxHighlight } from "../../ui/SyntaxHighlight.js";
4
4
  import { CollapsibleCode } from "./CollapsibleCode.js";
5
5
  import type { OperationListItemResult } from "./OperationList.js";
@@ -97,7 +97,7 @@ export const SidecarExamples = ({
97
97
  <SyntaxHighlight
98
98
  language={language}
99
99
  noBackground
100
- className="[--scrollbar-color:gray] text-xs max-h-[500px] p-2"
100
+ className="[--scrollbar-color:gray] rounded-none text-xs max-h-[500px] p-2"
101
101
  code={formattedExample}
102
102
  />
103
103
  </CollapsibleCode>
@@ -113,7 +113,7 @@ export const Headers = ({
113
113
  <Autocomplete
114
114
  {...field}
115
115
  placeholder="Name"
116
- className="border-0 shadow-none bg-transparent text-xs font-mono"
116
+ className="border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono"
117
117
  options={[...missingHeaders, ...headerOptions]}
118
118
  onEnterPress={() => handleHeaderEnter(i)}
119
119
  onChange={(e) => {
@@ -166,7 +166,7 @@ export const Headers = ({
166
166
  field.onChange(e);
167
167
  setValue(`headers.${i}.active`, true);
168
168
  }}
169
- className="font-mono text-xs border-0"
169
+ className="border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono"
170
170
  />
171
171
  );
172
172
  }}
@@ -12,43 +12,30 @@ const IdentitySelector = ({
12
12
  identities?: ApiIdentity[];
13
13
  setValue: (value: string) => void;
14
14
  value?: string;
15
- }) => {
16
- return (
17
- <Card className="w-full overflow-hidden">
18
- <RadioGroup
19
- onValueChange={(value) => setValue(value)}
20
- value={value}
21
- defaultValue={NO_IDENTITY}
22
- className="gap-0"
23
- disabled={identities?.length === 0}
24
- >
15
+ }) => (
16
+ <Card className="w-full overflow-hidden">
17
+ <RadioGroup
18
+ onValueChange={(value) => setValue(value)}
19
+ value={value}
20
+ defaultValue={NO_IDENTITY}
21
+ className="gap-0"
22
+ disabled={identities?.length === 0}
23
+ >
24
+ <Label className="h-12 border-b items-center flex gap-2 p-4 cursor-pointer hover:bg-accent">
25
+ <RadioGroupItem value={NO_IDENTITY} id="none" />
26
+ <span>None</span>
27
+ </Label>
28
+ {identities?.map((identity) => (
25
29
  <Label
26
- className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
27
- htmlFor="none"
30
+ key={identity.id}
31
+ className="h-12 border-b items-center flex gap-2 p-4 cursor-pointer hover:bg-accent"
28
32
  >
29
- <RadioGroupItem value={NO_IDENTITY} id="none">
30
- None
31
- </RadioGroupItem>
32
- <Label htmlFor="none" className="ms-2">
33
- None
34
- </Label>
33
+ <RadioGroupItem value={identity.id} id={identity.id} />
34
+ <span>{identity.label}</span>
35
35
  </Label>
36
- {identities?.map((identity) => (
37
- <Label
38
- key={identity.id}
39
- className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
40
- >
41
- <RadioGroupItem value={identity.id} id={identity.id}>
42
- {identity.label}
43
- </RadioGroupItem>
44
- <Label htmlFor={identity.id} className="ms-2">
45
- {identity.label}
46
- </Label>
47
- </Label>
48
- ))}
49
- </RadioGroup>
50
- </Card>
51
- );
52
- };
36
+ ))}
37
+ </RadioGroup>
38
+ </Card>
39
+ );
53
40
 
54
41
  export default IdentitySelector;
@@ -60,7 +60,7 @@ export const QueryParams = ({
60
60
  onChange={(e) => {
61
61
  field.onChange(e);
62
62
  }}
63
- className="border-0 font-mono text-xs bg-transparent hover:bg-transparent"
63
+ className="border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono"
64
64
  />
65
65
  ) : (
66
66
  <InlineInput asChild>
@@ -111,7 +111,7 @@ export const QueryParams = ({
111
111
  field.onChange(e);
112
112
  form.setValue(`queryParams.${i}.active`, true);
113
113
  }}
114
- className="font-mono text-xs border-0 shadow-none"
114
+ className="border-0 shadow-none focus-visible:ring-0 bg-transparent hover:bg-transparent text-xs font-mono"
115
115
  />
116
116
  );
117
117
  }}
@@ -17,7 +17,9 @@ export const SchemaExampleAndDefault = ({
17
17
  <div>
18
18
  <span className="text-muted-foreground">Example: </span>
19
19
  <SelectOnClick className="border rounded px-1 font-mono">
20
- {typeof example === "object" ? JSON.stringify(example) : example}
20
+ {typeof example === "object" || typeof example === "boolean"
21
+ ? JSON.stringify(example)
22
+ : example}
21
23
  </SelectOnClick>
22
24
  </div>
23
25
  )}
@@ -25,7 +27,8 @@ export const SchemaExampleAndDefault = ({
25
27
  <div>
26
28
  <span className="text-muted-foreground">Default: </span>
27
29
  <SelectOnClick className="border rounded px-1 font-mono">
28
- {typeof defaultValue === "object"
30
+ {typeof defaultValue === "object" ||
31
+ typeof defaultValue === "boolean"
29
32
  ? JSON.stringify(defaultValue)
30
33
  : defaultValue}
31
34
  </SelectOnClick>