zudoku 0.0.0-f62edde → 0.0.0-f687ed1

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 (506) hide show
  1. package/README.md +2 -2
  2. package/dist/app/demo.js +17 -2
  3. package/dist/app/demo.js.map +1 -1
  4. package/dist/app/main.js +7 -13
  5. package/dist/app/main.js.map +1 -1
  6. package/dist/app/standalone.js +3 -3
  7. package/dist/app/standalone.js.map +1 -1
  8. package/dist/cli/build/handler.js +9 -1
  9. package/dist/cli/build/handler.js.map +1 -1
  10. package/dist/config/loader.js +2 -5
  11. package/dist/config/loader.js.map +1 -1
  12. package/dist/config/validators/BuildSchema.js +5 -0
  13. package/dist/config/validators/BuildSchema.js.map +1 -1
  14. package/dist/config/validators/InputNavigationSchema.d.ts +152 -5
  15. package/dist/config/validators/InputNavigationSchema.js +0 -3
  16. package/dist/config/validators/InputNavigationSchema.js.map +1 -1
  17. package/dist/config/validators/InputNavigationSchema.test-d.js +0 -1
  18. package/dist/config/validators/InputNavigationSchema.test-d.js.map +1 -1
  19. package/dist/config/validators/NavigationSchema.js +4 -3
  20. package/dist/config/validators/NavigationSchema.js.map +1 -1
  21. package/dist/config/validators/icon-types.d.ts +1 -1
  22. package/dist/config/validators/icon-types.js +38 -0
  23. package/dist/config/validators/icon-types.js.map +1 -1
  24. package/dist/config/validators/validate.d.ts +6 -3
  25. package/dist/config/validators/validate.js +15 -5
  26. package/dist/config/validators/validate.js.map +1 -1
  27. package/dist/config/validators/validate.test.js +65 -2
  28. package/dist/config/validators/validate.test.js.map +1 -1
  29. package/dist/lib/authentication/authentication.d.ts +2 -0
  30. package/dist/lib/authentication/components/SignIn.js +4 -3
  31. package/dist/lib/authentication/components/SignIn.js.map +1 -1
  32. package/dist/lib/authentication/providers/openid.d.ts +4 -2
  33. package/dist/lib/authentication/providers/openid.js +11 -5
  34. package/dist/lib/authentication/providers/openid.js.map +1 -1
  35. package/dist/lib/components/Autocomplete.js +2 -2
  36. package/dist/lib/components/Autocomplete.js.map +1 -1
  37. package/dist/lib/components/Banner.js +2 -2
  38. package/dist/lib/components/Banner.js.map +1 -1
  39. package/dist/lib/components/CategoryHeading.js +1 -1
  40. package/dist/lib/components/CategoryHeading.js.map +1 -1
  41. package/dist/lib/components/ErrorPage.js +2 -2
  42. package/dist/lib/components/ErrorPage.js.map +1 -1
  43. package/dist/lib/components/Footer.js +1 -1
  44. package/dist/lib/components/Footer.js.map +1 -1
  45. package/dist/lib/components/Header.js +10 -10
  46. package/dist/lib/components/Header.js.map +1 -1
  47. package/dist/lib/components/Main.js +1 -1
  48. package/dist/lib/components/Markdown.d.ts +0 -1
  49. package/dist/lib/components/Markdown.js +2 -3
  50. package/dist/lib/components/Markdown.js.map +1 -1
  51. package/dist/lib/components/MobileTopNavigation.js +8 -5
  52. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  53. package/dist/lib/components/NotFoundPage.js +2 -2
  54. package/dist/lib/components/NotFoundPage.js.map +1 -1
  55. package/dist/lib/components/Pagination.js +1 -1
  56. package/dist/lib/components/Pagination.js.map +1 -1
  57. package/dist/lib/components/StatusPage.js +4 -0
  58. package/dist/lib/components/StatusPage.js.map +1 -1
  59. package/dist/lib/components/TopNavigation.d.ts +5 -0
  60. package/dist/lib/components/TopNavigation.js +16 -12
  61. package/dist/lib/components/TopNavigation.js.map +1 -1
  62. package/dist/lib/components/Typography.d.ts +5 -0
  63. package/dist/lib/components/Typography.js +8 -0
  64. package/dist/lib/components/Typography.js.map +1 -0
  65. package/dist/lib/components/index.d.ts +4 -0
  66. package/dist/lib/components/index.js +2 -0
  67. package/dist/lib/components/index.js.map +1 -1
  68. package/dist/lib/components/navigation/NavigationWrapper.js +2 -2
  69. package/dist/lib/components/navigation/NavigationWrapper.js.map +1 -1
  70. package/dist/lib/core/ZudokuContext.d.ts +7 -5
  71. package/dist/lib/core/ZudokuContext.js +16 -3
  72. package/dist/lib/core/ZudokuContext.js.map +1 -1
  73. package/dist/lib/errors/ErrorAlert.js +2 -3
  74. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  75. package/dist/lib/hooks/useHotkey.d.ts +4 -0
  76. package/dist/lib/hooks/useHotkey.js +58 -0
  77. package/dist/lib/hooks/useHotkey.js.map +1 -0
  78. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +8 -12
  79. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  80. package/dist/lib/plugins/api-keys/index.js +1 -1
  81. package/dist/lib/plugins/custom-pages/index.d.ts +1 -4
  82. package/dist/lib/plugins/custom-pages/index.js +1 -3
  83. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  84. package/dist/lib/plugins/markdown/MdxPage.js +5 -5
  85. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  86. package/dist/lib/plugins/openapi/OperationList.js +3 -3
  87. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  88. package/dist/lib/plugins/openapi/OperationListItem.js +2 -2
  89. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  90. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  91. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  92. package/dist/lib/plugins/openapi/SchemaList.js +2 -3
  93. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  94. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  95. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  96. package/dist/lib/plugins/openapi/SidecarExamples.js +1 -1
  97. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  98. package/dist/lib/plugins/openapi/index.js +1 -1
  99. package/dist/lib/plugins/openapi/index.js.map +1 -1
  100. package/dist/lib/plugins/openapi/playground/BodyPanel.d.ts +2 -2
  101. package/dist/lib/plugins/openapi/playground/BodyPanel.js +16 -12
  102. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  103. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.d.ts +8 -0
  104. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +11 -0
  105. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -0
  106. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +2 -2
  107. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  108. package/dist/lib/plugins/openapi/playground/Headers.d.ts +3 -2
  109. package/dist/lib/plugins/openapi/playground/Headers.js +52 -30
  110. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  111. package/dist/lib/plugins/openapi/playground/IdentityDialog.js +2 -1
  112. package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -1
  113. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +1 -2
  114. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -1
  115. package/dist/lib/plugins/openapi/playground/InlineInput.js +1 -1
  116. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +1 -1
  117. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +2 -2
  118. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  119. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -2
  120. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  121. package/dist/lib/plugins/openapi/playground/Playground.js +50 -35
  122. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  123. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  124. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  125. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +2 -2
  126. package/dist/lib/plugins/openapi/playground/QueryParams.js +38 -23
  127. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  128. package/dist/lib/plugins/openapi/playground/Spinner.d.ts +2 -0
  129. package/dist/lib/plugins/openapi/playground/Spinner.js +63 -0
  130. package/dist/lib/plugins/openapi/playground/Spinner.js.map +1 -0
  131. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.d.ts +3 -0
  132. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js +13 -0
  133. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js.map +1 -0
  134. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.d.ts +1 -0
  135. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +12 -0
  136. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -0
  137. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.d.ts +12 -0
  138. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js +11 -0
  139. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js.map +1 -0
  140. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.d.ts +8 -0
  141. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js +69 -0
  142. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js.map +1 -0
  143. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.d.ts +7 -4
  144. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +25 -32
  145. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  146. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +4 -2
  147. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +8 -10
  148. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  149. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +3 -3
  150. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  151. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +2 -3
  152. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  153. package/dist/lib/plugins/openapi/schema/SchemaView.js +4 -4
  154. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  155. package/dist/lib/plugins/openapi/schema/utils.js +3 -2
  156. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  157. package/dist/lib/plugins/search-inkeep/index.d.ts +5 -22
  158. package/dist/lib/plugins/search-inkeep/index.js +35 -29
  159. package/dist/lib/plugins/search-inkeep/index.js.map +1 -1
  160. package/dist/lib/plugins/search-inkeep/inkeep.d.ts +5 -21
  161. package/dist/lib/plugins/search-inkeep/inkeep.js +10 -19
  162. package/dist/lib/plugins/search-inkeep/inkeep.js.map +1 -1
  163. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +1 -1
  164. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  165. package/dist/lib/plugins/search-pagefind/ResultList.d.ts +1 -1
  166. package/dist/lib/plugins/search-pagefind/ResultList.js +12 -5
  167. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  168. package/dist/lib/ui/Alert.d.ts +1 -1
  169. package/dist/lib/ui/CodeBlock.js +5 -6
  170. package/dist/lib/ui/CodeBlock.js.map +1 -1
  171. package/dist/lib/ui/Dialog.js +1 -1
  172. package/dist/lib/ui/Dialog.js.map +1 -1
  173. package/dist/lib/ui/EmbeddedCodeBlock.js +1 -1
  174. package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  175. package/dist/lib/ui/Select.js +1 -1
  176. package/dist/lib/util/os.d.ts +2 -0
  177. package/dist/lib/util/os.js +21 -0
  178. package/dist/lib/util/os.js.map +1 -0
  179. package/dist/lib/util/useCopyToClipboard.d.ts +1 -0
  180. package/dist/lib/util/useCopyToClipboard.js +11 -0
  181. package/dist/lib/util/useCopyToClipboard.js.map +1 -0
  182. package/dist/vite/api/SchemaManager.js +6 -2
  183. package/dist/vite/api/SchemaManager.js.map +1 -1
  184. package/dist/vite/api/schema-codegen.js +42 -11
  185. package/dist/vite/api/schema-codegen.js.map +1 -1
  186. package/dist/vite/api/schema-codegen.test.js +82 -0
  187. package/dist/vite/api/schema-codegen.test.js.map +1 -1
  188. package/dist/vite/build.js +8 -2
  189. package/dist/vite/build.js.map +1 -1
  190. package/dist/vite/dev-server.js +10 -2
  191. package/dist/vite/dev-server.js.map +1 -1
  192. package/dist/vite/mdx/remark-last-modified.js +1 -28
  193. package/dist/vite/mdx/remark-last-modified.js.map +1 -1
  194. package/dist/vite/plugin-docs.js +11 -9
  195. package/dist/vite/plugin-docs.js.map +1 -1
  196. package/dist/vite/plugin-mdx.js +2 -3
  197. package/dist/vite/plugin-mdx.js.map +1 -1
  198. package/dist/vite/plugin-theme.js +91 -40
  199. package/dist/vite/plugin-theme.js.map +1 -1
  200. package/dist/vite/plugin-theme.test.js +47 -5
  201. package/dist/vite/plugin-theme.test.js.map +1 -1
  202. package/lib/Alert-_ISVjPaE.js +161 -0
  203. package/lib/Alert-_ISVjPaE.js.map +1 -0
  204. package/lib/{Button-BE9IVkWV.js → Button-B3o-2Xdf.js} +2 -2
  205. package/lib/{Button-BE9IVkWV.js.map → Button-B3o-2Xdf.js.map} +1 -1
  206. package/lib/CallbackHandler-CHrZoaQm.js +38 -0
  207. package/lib/CallbackHandler-CHrZoaQm.js.map +1 -0
  208. package/lib/{Card-DPhGbYUM.js → Card-CMDQUPM4.js} +2 -2
  209. package/lib/{Card-DPhGbYUM.js.map → Card-CMDQUPM4.js.map} +1 -1
  210. package/lib/ClientOnly-E7hGysn1.js.map +1 -1
  211. package/lib/CodeBlock-B-G0eKtw.js +85 -0
  212. package/lib/CodeBlock-B-G0eKtw.js.map +1 -0
  213. package/lib/Command-C9AC5cf-.js +140 -0
  214. package/lib/Command-C9AC5cf-.js.map +1 -0
  215. package/lib/{Dialog-BxpuVLh9.js → Dialog-DMWw1doX.js} +6 -6
  216. package/lib/Dialog-DMWw1doX.js.map +1 -0
  217. package/lib/{Drawer-BzkOKwgC.js → Drawer-DJ05s2pH.js} +86 -86
  218. package/lib/{Drawer-BzkOKwgC.js.map → Drawer-DJ05s2pH.js.map} +1 -1
  219. package/lib/MdxPage-CO_w2FI6.js +110 -0
  220. package/lib/MdxPage-CO_w2FI6.js.map +1 -0
  221. package/lib/{OasProvider-CUXXF3oj.js → OasProvider-BbVO6EgC.js} +3 -3
  222. package/lib/{OasProvider-CUXXF3oj.js.map → OasProvider-BbVO6EgC.js.map} +1 -1
  223. package/lib/{OperationList-P_vP7u7f.js → OperationList-Crvmqvd9.js} +726 -714
  224. package/lib/OperationList-Crvmqvd9.js.map +1 -0
  225. package/lib/{Pagination-tnJwvuLq.js → Pagination-Ct2YfjYl.js} +10 -9
  226. package/lib/Pagination-Ct2YfjYl.js.map +1 -0
  227. package/lib/RouteGuard-Vnlz_t51.js +737 -0
  228. package/lib/RouteGuard-Vnlz_t51.js.map +1 -0
  229. package/lib/{SchemaList-6GhTLPZt.js → SchemaList-DOYtqnab.js} +26 -37
  230. package/lib/SchemaList-DOYtqnab.js.map +1 -0
  231. package/lib/{SchemaView-DTIMiB_H.js → SchemaView-CyRfElaI.js} +94 -103
  232. package/lib/SchemaView-CyRfElaI.js.map +1 -0
  233. package/lib/SignUp-CcP8Tyfs.js +56 -0
  234. package/lib/SignUp-CcP8Tyfs.js.map +1 -0
  235. package/lib/{Markdown-BF7mJP8j.js → Slot-DqgTXQwt.js} +3359 -3002
  236. package/lib/Slot-DqgTXQwt.js.map +1 -0
  237. package/lib/Spinner-mNLZ6awP.js.map +1 -1
  238. package/lib/{SyntaxHighlight-C5ja40ix.js → SyntaxHighlight-bm761HDo.js} +756 -756
  239. package/lib/SyntaxHighlight-bm761HDo.js.map +1 -0
  240. package/lib/{Toc-BxYiZwxz.js → Toc-8NJ4k4Us.js} +3 -3
  241. package/lib/{Toc-BxYiZwxz.js.map → Toc-8NJ4k4Us.js.map} +1 -1
  242. package/lib/{chunk-DQRVZFIR-BblmKnHy.js → chunk-DQRVZFIR-DHK7_Ilc.js} +7 -7
  243. package/lib/{chunk-DQRVZFIR-BblmKnHy.js.map → chunk-DQRVZFIR-DHK7_Ilc.js.map} +1 -1
  244. package/lib/{circular-BBvOD6jV.js → circular-DZw_Mz7f.js} +2 -2
  245. package/lib/{circular-BBvOD6jV.js.map → circular-DZw_Mz7f.js.map} +1 -1
  246. package/lib/{cn-wvCW-ho6.js → cn-dYga0KKN.js} +2 -2
  247. package/lib/cn-dYga0KKN.js.map +1 -0
  248. package/lib/{createServer-CR5sbG6H.js → createServer-CQoCyFC1.js} +3398 -3552
  249. package/lib/createServer-CQoCyFC1.js.map +1 -0
  250. package/lib/errors-BfmB7Vsx.js +44 -0
  251. package/lib/errors-BfmB7Vsx.js.map +1 -0
  252. package/lib/{hook-CHXroBFt.js → hook-CZjW2buS.js} +423 -416
  253. package/lib/hook-CZjW2buS.js.map +1 -0
  254. package/lib/index-B3xY0rUq.js +3471 -0
  255. package/lib/index-B3xY0rUq.js.map +1 -0
  256. package/lib/index-BHBXOwle.js +3980 -0
  257. package/lib/index-BHBXOwle.js.map +1 -0
  258. package/lib/index-Bm35Tkgf.js +107 -0
  259. package/lib/index-Bm35Tkgf.js.map +1 -0
  260. package/lib/index-CrcNWbel.js.map +1 -1
  261. package/lib/{index-BvvmIczU.js → index-D-Vi7oy2.js} +2 -2
  262. package/lib/{index-BvvmIczU.js.map → index-D-Vi7oy2.js.map} +1 -1
  263. package/lib/index-DI5SPFK9.js.map +1 -1
  264. package/lib/index-DmNq2fbN.js.map +1 -1
  265. package/lib/index.esm-Cp4wkyud.js.map +1 -1
  266. package/lib/invariant-DAFpPywt.js.map +1 -1
  267. package/lib/jsx-runtime-C5mzlN2N.js.map +1 -1
  268. package/lib/processors/removeExtensions.js.map +1 -1
  269. package/lib/processors/removeParameters.js.map +1 -1
  270. package/lib/processors/removePaths.js.map +1 -1
  271. package/lib/processors/traverse.js.map +1 -1
  272. package/lib/ui/Accordion.js +1 -1
  273. package/lib/ui/Accordion.js.map +1 -1
  274. package/lib/ui/ActionButton.js +2 -2
  275. package/lib/ui/ActionButton.js.map +1 -1
  276. package/lib/ui/Alert.js +1 -1
  277. package/lib/ui/Alert.js.map +1 -1
  278. package/lib/ui/AlertDialog.js +1 -1
  279. package/lib/ui/AlertDialog.js.map +1 -1
  280. package/lib/ui/Badge.js +1 -1
  281. package/lib/ui/Badge.js.map +1 -1
  282. package/lib/ui/Breadcrumb.js +1 -1
  283. package/lib/ui/Breadcrumb.js.map +1 -1
  284. package/lib/ui/Button.js +1 -1
  285. package/lib/ui/Button.js.map +1 -1
  286. package/lib/ui/Callout.js +1 -1
  287. package/lib/ui/Callout.js.map +1 -1
  288. package/lib/ui/Card.js +1 -1
  289. package/lib/ui/Card.js.map +1 -1
  290. package/lib/ui/Carousel.js +1 -1
  291. package/lib/ui/Carousel.js.map +1 -1
  292. package/lib/ui/Checkbox.js +1 -1
  293. package/lib/ui/Checkbox.js.map +1 -1
  294. package/lib/ui/CodeBlock.js +6 -73
  295. package/lib/ui/CodeBlock.js.map +1 -1
  296. package/lib/ui/Command.js +2 -2
  297. package/lib/ui/Command.js.map +1 -1
  298. package/lib/ui/Dialog.js +24 -24
  299. package/lib/ui/Dialog.js.map +1 -1
  300. package/lib/ui/Drawer.js +2 -2
  301. package/lib/ui/DropdownMenu.js +1 -1
  302. package/lib/ui/DropdownMenu.js.map +1 -1
  303. package/lib/ui/EmbeddedCodeBlock.js +3 -3
  304. package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  305. package/lib/ui/Form.js +1 -1
  306. package/lib/ui/Form.js.map +1 -1
  307. package/lib/ui/HoverCard.js +1 -1
  308. package/lib/ui/HoverCard.js.map +1 -1
  309. package/lib/ui/Input.js +1 -1
  310. package/lib/ui/Input.js.map +1 -1
  311. package/lib/ui/Label.js +1 -1
  312. package/lib/ui/Label.js.map +1 -1
  313. package/lib/ui/Pagination.js +1 -1
  314. package/lib/ui/Pagination.js.map +1 -1
  315. package/lib/ui/Popover.js +1 -1
  316. package/lib/ui/Popover.js.map +1 -1
  317. package/lib/ui/Progress.js +1 -1
  318. package/lib/ui/Progress.js.map +1 -1
  319. package/lib/ui/RadioGroup.js +1 -1
  320. package/lib/ui/RadioGroup.js.map +1 -1
  321. package/lib/ui/ScrollArea.js +1 -1
  322. package/lib/ui/ScrollArea.js.map +1 -1
  323. package/lib/ui/Select.js +2 -2
  324. package/lib/ui/Select.js.map +1 -1
  325. package/lib/ui/Skeleton.js +1 -1
  326. package/lib/ui/Skeleton.js.map +1 -1
  327. package/lib/ui/Slider.js +1 -1
  328. package/lib/ui/Slider.js.map +1 -1
  329. package/lib/ui/Stepper.js.map +1 -1
  330. package/lib/ui/Switch.js +1 -1
  331. package/lib/ui/Switch.js.map +1 -1
  332. package/lib/ui/SyntaxHighlight.js +3 -3
  333. package/lib/ui/Tabs.js +1 -1
  334. package/lib/ui/Tabs.js.map +1 -1
  335. package/lib/ui/Textarea.js +1 -1
  336. package/lib/ui/Textarea.js.map +1 -1
  337. package/lib/ui/Toggle.js +1 -1
  338. package/lib/ui/Toggle.js.map +1 -1
  339. package/lib/ui/ToggleGroup.js +1 -1
  340. package/lib/ui/ToggleGroup.js.map +1 -1
  341. package/lib/ui/Tooltip.js +1 -1
  342. package/lib/ui/Tooltip.js.map +1 -1
  343. package/lib/ui/util.js +1 -1
  344. package/lib/{useExposedProps-BZQkZneR.js → useExposedProps-BIYjecPD.js} +2 -2
  345. package/lib/{useExposedProps-BZQkZneR.js.map → useExposedProps-BIYjecPD.js.map} +1 -1
  346. package/lib/zudoku.auth-auth0.js +1 -1
  347. package/lib/zudoku.auth-auth0.js.map +1 -1
  348. package/lib/zudoku.auth-azureb2c.js +40 -9885
  349. package/lib/zudoku.auth-azureb2c.js.map +1 -1
  350. package/lib/zudoku.auth-clerk.js +3 -3
  351. package/lib/zudoku.auth-clerk.js.map +1 -1
  352. package/lib/zudoku.auth-openid.js +131 -121
  353. package/lib/zudoku.auth-openid.js.map +1 -1
  354. package/lib/zudoku.auth-supabase.js +97 -0
  355. package/lib/zudoku.auth-supabase.js.map +1 -0
  356. package/lib/zudoku.components.js +33 -3534
  357. package/lib/zudoku.components.js.map +1 -1
  358. package/lib/zudoku.hooks.js +10 -11
  359. package/lib/zudoku.hooks.js.map +1 -1
  360. package/lib/zudoku.icons.js.map +1 -1
  361. package/lib/zudoku.plugin-api-catalog.js +6 -6
  362. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  363. package/lib/zudoku.plugin-api-keys.js +128 -167
  364. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  365. package/lib/zudoku.plugin-custom-pages.js +8 -20
  366. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  367. package/lib/zudoku.plugin-markdown.js +1 -1
  368. package/lib/zudoku.plugin-markdown.js.map +1 -1
  369. package/lib/zudoku.plugin-openapi.js +3 -3
  370. package/lib/zudoku.plugin-redirect.js +1 -1
  371. package/lib/zudoku.plugin-redirect.js.map +1 -1
  372. package/lib/zudoku.plugin-search-inkeep.js +54 -57
  373. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  374. package/lib/zudoku.plugin-search-pagefind.js +211 -117
  375. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  376. package/lib/zudoku.plugins.js.map +1 -1
  377. package/package.json +31 -29
  378. package/src/app/demo.tsx +20 -3
  379. package/src/app/main.css +26 -5
  380. package/src/app/main.tsx +10 -18
  381. package/src/app/standalone.tsx +3 -3
  382. package/src/lib/authentication/authentication.ts +2 -2
  383. package/src/lib/authentication/components/SignIn.tsx +5 -12
  384. package/src/lib/authentication/providers/openid.tsx +23 -4
  385. package/src/lib/components/Autocomplete.tsx +2 -1
  386. package/src/lib/components/Banner.tsx +1 -2
  387. package/src/lib/components/CategoryHeading.tsx +4 -1
  388. package/src/lib/components/ErrorPage.tsx +3 -3
  389. package/src/lib/components/Footer.tsx +1 -1
  390. package/src/lib/components/Header.tsx +20 -19
  391. package/src/lib/components/Main.tsx +1 -1
  392. package/src/lib/components/Markdown.tsx +3 -5
  393. package/src/lib/components/MobileTopNavigation.tsx +58 -9
  394. package/src/lib/components/NotFoundPage.tsx +6 -5
  395. package/src/lib/components/Pagination.tsx +1 -0
  396. package/src/lib/components/StatusPage.tsx +5 -0
  397. package/src/lib/components/TopNavigation.tsx +30 -14
  398. package/src/lib/components/Typography.tsx +14 -0
  399. package/src/lib/components/index.ts +2 -0
  400. package/src/lib/components/navigation/NavigationWrapper.tsx +5 -2
  401. package/src/lib/core/ZudokuContext.ts +27 -5
  402. package/src/lib/errors/ErrorAlert.tsx +8 -16
  403. package/src/lib/hooks/useHotkey.ts +70 -0
  404. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +18 -18
  405. package/src/lib/plugins/api-keys/index.tsx +1 -1
  406. package/src/lib/plugins/custom-pages/index.tsx +2 -6
  407. package/src/lib/plugins/markdown/MdxPage.tsx +7 -12
  408. package/src/lib/plugins/openapi/OperationList.tsx +11 -19
  409. package/src/lib/plugins/openapi/OperationListItem.tsx +2 -2
  410. package/src/lib/plugins/openapi/ParameterListItem.tsx +6 -0
  411. package/src/lib/plugins/openapi/SchemaList.tsx +3 -9
  412. package/src/lib/plugins/openapi/Sidecar.tsx +1 -1
  413. package/src/lib/plugins/openapi/SidecarExamples.tsx +2 -1
  414. package/src/lib/plugins/openapi/index.tsx +1 -1
  415. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +40 -31
  416. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +47 -0
  417. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +7 -3
  418. package/src/lib/plugins/openapi/playground/Headers.tsx +187 -89
  419. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +3 -2
  420. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +7 -12
  421. package/src/lib/plugins/openapi/playground/InlineInput.tsx +1 -1
  422. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +2 -2
  423. package/src/lib/plugins/openapi/playground/PathParams.tsx +5 -6
  424. package/src/lib/plugins/openapi/playground/Playground.tsx +181 -126
  425. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  426. package/src/lib/plugins/openapi/playground/QueryParams.tsx +104 -58
  427. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -0
  428. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -0
  429. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +25 -0
  430. package/src/lib/plugins/openapi/playground/result-panel/Highlight.tsx +26 -0
  431. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +115 -0
  432. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +103 -97
  433. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +68 -92
  434. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +3 -3
  435. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +2 -3
  436. package/src/lib/plugins/openapi/schema/SchemaView.tsx +5 -10
  437. package/src/lib/plugins/openapi/schema/utils.ts +3 -2
  438. package/src/lib/plugins/search-inkeep/index.tsx +54 -58
  439. package/src/lib/plugins/search-inkeep/inkeep.ts +19 -21
  440. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +1 -0
  441. package/src/lib/plugins/search-pagefind/ResultList.tsx +13 -4
  442. package/src/lib/ui/Alert.tsx +1 -1
  443. package/src/lib/ui/CodeBlock.tsx +5 -6
  444. package/src/lib/ui/Dialog.tsx +2 -2
  445. package/src/lib/ui/EmbeddedCodeBlock.tsx +2 -2
  446. package/src/lib/ui/Select.tsx +1 -1
  447. package/src/lib/util/os.ts +18 -0
  448. package/src/lib/util/useCopyToClipboard.ts +17 -0
  449. package/dist/lib/plugins/custom-pages/CustomPage.d.ts +0 -2
  450. package/dist/lib/plugins/custom-pages/CustomPage.js +0 -11
  451. package/dist/lib/plugins/custom-pages/CustomPage.js.map +0 -1
  452. package/dist/lib/plugins/openapi/playground/UrlDisplay.d.ts +0 -4
  453. package/dist/lib/plugins/openapi/playground/UrlDisplay.js +0 -22
  454. package/dist/lib/plugins/openapi/playground/UrlDisplay.js.map +0 -1
  455. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.d.ts +0 -7
  456. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js +0 -11
  457. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js.map +0 -1
  458. package/lib/Callout-CoVxYafP.js +0 -231
  459. package/lib/Callout-CoVxYafP.js.map +0 -1
  460. package/lib/CategoryHeading-Cu2RwgjC.js +0 -10
  461. package/lib/CategoryHeading-Cu2RwgjC.js.map +0 -1
  462. package/lib/Dialog-BxpuVLh9.js.map +0 -1
  463. package/lib/Markdown-BF7mJP8j.js.map +0 -1
  464. package/lib/MdxPage-CJs98yjf.js +0 -121
  465. package/lib/MdxPage-CJs98yjf.js.map +0 -1
  466. package/lib/OperationList-P_vP7u7f.js.map +0 -1
  467. package/lib/Pagination-tnJwvuLq.js.map +0 -1
  468. package/lib/RouteGuard-gV7nvzi7.js +0 -55
  469. package/lib/RouteGuard-gV7nvzi7.js.map +0 -1
  470. package/lib/SchemaList-6GhTLPZt.js.map +0 -1
  471. package/lib/SchemaView-DTIMiB_H.js.map +0 -1
  472. package/lib/SignUp-B6w5AwHM.js +0 -63
  473. package/lib/SignUp-B6w5AwHM.js.map +0 -1
  474. package/lib/Slot-Di32B6gb.js +0 -161
  475. package/lib/Slot-Di32B6gb.js.map +0 -1
  476. package/lib/SyntaxHighlight-C5ja40ix.js.map +0 -1
  477. package/lib/clerk-BDZ31hjU.js +0 -25190
  478. package/lib/clerk-BDZ31hjU.js.map +0 -1
  479. package/lib/cn-wvCW-ho6.js.map +0 -1
  480. package/lib/createServer-CR5sbG6H.js.map +0 -1
  481. package/lib/errors-D_5vKvUq.js +0 -78
  482. package/lib/errors-D_5vKvUq.js.map +0 -1
  483. package/lib/hook-CHXroBFt.js.map +0 -1
  484. package/lib/index--oeBayMa.js +0 -86
  485. package/lib/index--oeBayMa.js.map +0 -1
  486. package/lib/index-Bn6Lc9tq.js +0 -9
  487. package/lib/index-Bn6Lc9tq.js.map +0 -1
  488. package/lib/index-DwJ9TXn0.js +0 -3227
  489. package/lib/index-DwJ9TXn0.js.map +0 -1
  490. package/lib/index-QzXzw_ra.js +0 -24
  491. package/lib/index-QzXzw_ra.js.map +0 -1
  492. package/lib/index.esm-BFcSKCe-.js +0 -683
  493. package/lib/index.esm-BFcSKCe-.js.map +0 -1
  494. package/lib/mutation-BpcyTgWI.js +0 -196
  495. package/lib/mutation-BpcyTgWI.js.map +0 -1
  496. package/lib/objectEntries-yMIkr2mI.js +0 -5
  497. package/lib/objectEntries-yMIkr2mI.js.map +0 -1
  498. package/lib/react-nprogress.esm-C2MPXjiJ.js +0 -389
  499. package/lib/react-nprogress.esm-C2MPXjiJ.js.map +0 -1
  500. package/lib/useLatest-hmRS46UF.js +0 -11
  501. package/lib/useLatest-hmRS46UF.js.map +0 -1
  502. package/lib/useMutation-N4ockVKi.js +0 -97
  503. package/lib/useMutation-N4ockVKi.js.map +0 -1
  504. package/src/lib/plugins/custom-pages/CustomPage.tsx +0 -18
  505. package/src/lib/plugins/openapi/playground/UrlDisplay.tsx +0 -32
  506. package/src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx +0 -73
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zudoku",
3
- "version": "0.0.0-f62edde",
3
+ "version": "0.0.0-f687ed1",
4
4
  "type": "module",
5
5
  "homepage": "https://zudoku.dev",
6
6
  "repository": {
@@ -133,13 +133,13 @@
133
133
  },
134
134
  "dependencies": {
135
135
  "@apidevtools/json-schema-ref-parser": "12.0.2",
136
- "@envelop/core": "5.2.3",
136
+ "@envelop/core": "5.3.0",
137
137
  "@graphql-typed-document-node/core": "3.2.0",
138
138
  "@hookform/resolvers": "4.1.3",
139
- "@lekoarts/rehype-meta-as-attributes": "3.0.2",
139
+ "@lekoarts/rehype-meta-as-attributes": "3.0.3",
140
140
  "@mdx-js/react": "3.1.0",
141
141
  "@mdx-js/rollup": "3.1.0",
142
- "@pothos/core": "4.6.0",
142
+ "@pothos/core": "4.7.0",
143
143
  "@radix-ui/react-accordion": "1.2.11",
144
144
  "@radix-ui/react-alert-dialog": "1.1.14",
145
145
  "@radix-ui/react-aspect-ratio": "1.1.7",
@@ -162,18 +162,18 @@
162
162
  "@radix-ui/react-toggle-group": "1.1.10",
163
163
  "@radix-ui/react-tooltip": "1.2.7",
164
164
  "@radix-ui/react-visually-hidden": "1.2.3",
165
- "@scalar/openapi-parser": "0.10.17",
165
+ "@scalar/openapi-parser": "0.18.0",
166
166
  "@sentry/node": "9.26.0",
167
- "@shikijs/langs": "3.5.0",
168
- "@shikijs/rehype": "3.5.0",
169
- "@shikijs/themes": "3.5.0",
170
- "@shikijs/transformers": "3.5.0",
167
+ "@shikijs/langs": "3.7.0",
168
+ "@shikijs/rehype": "3.7.0",
169
+ "@shikijs/themes": "3.7.0",
170
+ "@shikijs/transformers": "3.7.0",
171
171
  "@sindresorhus/slugify": "2.2.1",
172
172
  "@stefanprobst/rehype-extract-toc": "3.0.0",
173
173
  "@tailwindcss/typography": "0.5.16",
174
- "@tailwindcss/vite": "4.1.7",
174
+ "@tailwindcss/vite": "4.1.11",
175
175
  "@tanem/react-nprogress": "5.0.55",
176
- "@tanstack/react-query": "5.74.3",
176
+ "@tanstack/react-query": "5.81.5",
177
177
  "@types/react": "19.1.8",
178
178
  "@types/react-dom": "19.1.6",
179
179
  "@vitejs/plugin-react": "4.4.1",
@@ -195,7 +195,7 @@
195
195
  "glob-parent": "6.0.2",
196
196
  "graphql": "16.11.0",
197
197
  "graphql-type-json": "0.3.2",
198
- "graphql-yoga": "5.13.5",
198
+ "graphql-yoga": "5.14.0",
199
199
  "gray-matter": "4.0.3",
200
200
  "hast-util-to-jsx-runtime": "^2.3.6",
201
201
  "hast-util-to-string": "3.0.1",
@@ -204,18 +204,19 @@
204
204
  "json-schema-to-typescript-lite": "14.1.0",
205
205
  "loglevel": "1.9.2",
206
206
  "lru-cache": "11.0.2",
207
- "lucide-react": "0.488.0",
207
+ "lucide-react": "0.515.0",
208
208
  "minimatch": "10.0.1",
209
+ "motion": "12.18.1",
209
210
  "nanoevents": "^9.1.0",
210
- "next-themes": "0.4.4",
211
+ "next-themes": "0.4.6",
211
212
  "oauth4webapi": "2.17.0",
212
213
  "object-hash": "3.0.0",
213
214
  "openapi-types": "12.1.3",
214
215
  "pagefind": "1.4.0-alpha.1",
215
216
  "picocolors": "1.1.1",
216
- "piscina": "5.0.0",
217
+ "piscina": "5.1.3",
217
218
  "posthog-node": "4.17.1",
218
- "react-error-boundary": "5.0.0",
219
+ "react-error-boundary": "6.0.0",
219
220
  "react-hook-form": "7.57.0",
220
221
  "react-is": "19.1.0",
221
222
  "react-markdown": "10.1.0",
@@ -228,17 +229,17 @@
228
229
  "remark-directive-rehype": "0.4.2",
229
230
  "remark-frontmatter": "5.0.0",
230
231
  "remark-gfm": "4.0.1",
231
- "remark-mdx-frontmatter": "5.1.0",
232
+ "remark-mdx-frontmatter": "5.2.0",
232
233
  "remark-parse": "^11.0.0",
233
234
  "remark-rehype": "^11.1.2",
234
- "rollup": "4.41.1",
235
- "semver": "7.7.1",
236
- "shiki": "3.5.0",
235
+ "rollup": "4.44.2",
236
+ "semver": "7.7.2",
237
+ "shiki": "3.7.0",
237
238
  "sitemap": "8.0.0",
238
239
  "spin-delay": "2.0.1",
239
240
  "strip-ansi": "7.1.0",
240
- "tailwind-merge": "3.3.0",
241
- "tailwindcss": "4.1.7",
241
+ "tailwind-merge": "3.3.1",
242
+ "tailwindcss": "4.1.11",
242
243
  "ulidx": "2.4.1",
243
244
  "unified": "^11.0.5",
244
245
  "unist-util-visit": "5.0.0",
@@ -246,18 +247,19 @@
246
247
  "vfile": "6.0.3",
247
248
  "vite": "6.3.5",
248
249
  "yaml": "2.8.0",
249
- "yargs": "17.7.2",
250
- "zod": "3.25.56",
250
+ "yargs": "18.0.0",
251
+ "zod": "3.25.74",
251
252
  "zod-to-ts": "1.2.0",
252
253
  "zustand": "5.0.5"
253
254
  },
254
255
  "devDependencies": {
255
256
  "@graphql-codegen/cli": "5.0.7",
256
- "@graphql-codegen/client-preset": "4.8.0",
257
+ "@graphql-codegen/client-preset": "4.8.2",
258
+ "@inkeep/cxkit-types": "0.5.90",
257
259
  "@testing-library/dom": "10.4.0",
258
260
  "@testing-library/jest-dom": "6.6.3",
259
261
  "@testing-library/react": "16.3.0",
260
- "@types/estree": "1.0.7",
262
+ "@types/estree": "1.0.8",
261
263
  "@types/express": "5.0.2",
262
264
  "@types/glob-parent": "5.1.3",
263
265
  "@types/har-format": "1.2.16",
@@ -273,14 +275,14 @@
273
275
  "@types/yargs": "17.0.33",
274
276
  "@vitest/coverage-v8": "3.2.1",
275
277
  "esbuild": "0.25.1",
276
- "happy-dom": "17.5.6",
278
+ "happy-dom": "18.0.1",
277
279
  "mdast-util-mdx": "3.0.0",
278
280
  "react": "19.1.0",
279
281
  "react-dom": "19.1.0",
280
- "rollup-plugin-visualizer": "5.14.0",
282
+ "rollup-plugin-visualizer": "6.0.3",
281
283
  "tsx": "4.19.4",
282
284
  "typescript": "5.8.3",
283
- "vitest": "3.2.3"
285
+ "vitest": "3.2.4"
284
286
  },
285
287
  "peerDependencies": {
286
288
  "@azure/msal-browser": "^4.13.0",
package/src/app/demo.tsx CHANGED
@@ -10,6 +10,10 @@ import "./main.css";
10
10
  import { getRoutesByConfig } from "./main.js";
11
11
 
12
12
  const apiUrl = new URL(window.location.href).searchParams.get("api-url");
13
+ const logoUrl = new URL(window.location.href).searchParams.get("logo-url");
14
+ const logoWidth = new URL(window.location.href).searchParams.get("logo-width");
15
+ const title =
16
+ new URL(window.location.href).searchParams.get("title") ?? "Zudoku Demo";
13
17
 
14
18
  if (!apiUrl) {
15
19
  throw new Error(
@@ -29,9 +33,9 @@ if (!root) {
29
33
  // IMPORTANT: This component must not contain tailwind classes
30
34
  // This directory is not processed by the tailwind plugin
31
35
 
32
- const config = {
33
- page: {
34
- pageTitle: "",
36
+ const config: ZudokuConfig = {
37
+ site: {
38
+ title,
35
39
  banner: {
36
40
  message: <DemoAnnouncement />,
37
41
  },
@@ -53,6 +57,19 @@ const config = {
53
57
  ],
54
58
  } satisfies ZudokuConfig;
55
59
 
60
+ if (logoUrl && logoWidth) {
61
+ config.site = {
62
+ ...config.site,
63
+ logo: {
64
+ src: {
65
+ light: logoUrl,
66
+ dark: logoUrl,
67
+ },
68
+ width: logoWidth,
69
+ },
70
+ };
71
+ }
72
+
56
73
  const routes = getRoutesByConfig(config);
57
74
  const router = createBrowserRouter(routes, {
58
75
  basename: window.location.pathname,
package/src/app/main.css CHANGED
@@ -121,6 +121,10 @@
121
121
  .shiki {
122
122
  counter-reset: line;
123
123
  @apply leading-normal;
124
+ background-color: var(--shiki-light-bg) !important;
125
+ }
126
+ .dark .shiki {
127
+ background-color: var(--shiki-dark-bg) !important;
124
128
  }
125
129
  .code-block .shiki {
126
130
  @apply grid grid-rows-1;
@@ -149,17 +153,34 @@
149
153
  @apply tabular-nums inline-flex items-baseline justify-end me-4 w-3 text-muted-foreground/25;
150
154
  }
151
155
 
152
- .shiki.not-inline .line {
156
+ .light .shiki.not-inline .line {
153
157
  @apply block -mx-4 px-4 w-[calc(100%+2rem)];
154
- --highlighted-bg: hsl(
155
- from var(--muted) h s calc(l + 4 * var(--dark)) / 50%
156
- );
158
+ --highlighted-bg: hsl(from var(--shiki-light-bg) h s calc(l - 6));
157
159
  }
160
+ .dark .shiki.not-inline .line {
161
+ @apply block -mx-4 px-4 w-[calc(100%+2rem)];
162
+ --highlighted-bg: hsl(from var(--shiki-dark-bg) h s calc(l + 10));
163
+ }
164
+
158
165
  .shiki .line.highlighted {
159
- @apply bg-(--highlighted-bg);
166
+ @apply bg-(--highlighted-bg) relative;
167
+ }
168
+
169
+ .shiki .line.highlighted:before {
170
+ position: absolute;
171
+ inset-inline-start: 0;
172
+ inset-block-start: 0;
173
+ inset-block-end: 0;
174
+ border-left: 2px solid
175
+ hsl(from var(--highlighted-bg) h s calc(l + 4 * var(--dark)));
176
+ content: "";
160
177
  }
161
178
 
162
179
  .shiki .highlighted-word {
180
+ --highlighted-bg: hsl(
181
+ from var(--muted) h s calc(l + 4 * var(--dark)) / 50%
182
+ );
183
+
163
184
  @apply bg-(--highlighted-bg) px-0.5 rounded;
164
185
  box-shadow: 0 0 0 4px var(--highlighted-bg);
165
186
  }
package/src/app/main.tsx CHANGED
@@ -36,12 +36,12 @@ export const convertZudokuConfigToOptions = (
36
36
  basePath: config.basePath,
37
37
  canonicalUrlOrigin: config.canonicalUrlOrigin,
38
38
  protectedRoutes: config.protectedRoutes,
39
- page: {
40
- ...config.page,
39
+ site: {
40
+ ...config.site,
41
41
  showPoweredBy:
42
42
  ZuploEnv.buildConfig?.entitlements.devPortalZuploBranding ??
43
- config.page?.showPoweredBy,
44
- logo: config.page?.logo,
43
+ config.site?.showPoweredBy,
44
+ logo: config.site?.logo,
45
45
  },
46
46
  slots: config.slots,
47
47
  metadata: {
@@ -82,22 +82,13 @@ export const getRoutesByOptions = (
82
82
  .flatMap((plugin) => (isNavigationPlugin(plugin) ? plugin.getRoutes() : []))
83
83
  .concat(
84
84
  enableStatusPages
85
- ? [400, 403, 404, 405, 414, 416, 500, 501, 502, 503, 504].map(
86
- (statusCode) => ({
87
- path: `/${statusCode}`,
88
- element: <StatusPage statusCode={statusCode} />,
89
- }),
90
- )
85
+ ? [400, 404, 500].map((statusCode) => ({
86
+ path: `/${statusCode}`,
87
+ element: <StatusPage statusCode={statusCode} />,
88
+ }))
91
89
  : [],
92
90
  )
93
- .concat([
94
- {
95
- path: "*",
96
- loader: () => {
97
- throw new Response("Not Found", { status: 404 });
98
- },
99
- },
100
- ]);
91
+ .concat([{ path: "*", element: <StatusPage statusCode={404} /> }]);
101
92
 
102
93
  // @TODO Detect conflicts in routes and log warning
103
94
 
@@ -125,6 +116,7 @@ export const getRoutesByConfig = (config: ZudokuConfig): RouteObject[] => {
125
116
  <Layout />
126
117
  </Zudoku>
127
118
  ),
119
+ hydrateFallbackElement: <div>Loading...</div>,
128
120
  children: [
129
121
  {
130
122
  element: <RouteGuard />,
@@ -13,14 +13,14 @@ if (!root) {
13
13
  }
14
14
 
15
15
  const apiUrl = root.getAttribute("data-api-url");
16
- const pageTitle = document.getElementsByTagName("title")[0]!.innerText;
16
+ const title = document.getElementsByTagName("title")[0]!.innerText;
17
17
  const logoUrl = root.getAttribute("data-logo-url");
18
18
 
19
19
  // IMPORTANT: This component must not contain tailwind classes
20
20
  // This directory is not processed by the tailwind plugin
21
21
 
22
22
  const config = {
23
- page: {
23
+ site: {
24
24
  logo: logoUrl
25
25
  ? {
26
26
  src: {
@@ -29,7 +29,7 @@ const config = {
29
29
  },
30
30
  }
31
31
  : undefined,
32
- pageTitle,
32
+ title,
33
33
  },
34
34
  navigation: [
35
35
  {
@@ -1,6 +1,6 @@
1
1
  export interface AuthenticationPlugin {
2
- signUp(options?: { redirectTo?: string }): Promise<void>;
3
- signIn(options?: { redirectTo?: string }): Promise<void>;
2
+ signUp(options?: { redirectTo?: string; replace?: boolean }): Promise<void>;
3
+ signIn(options?: { redirectTo?: string; replace?: boolean }): Promise<void>;
4
4
  signOut(): Promise<void>;
5
5
  // @deprecated use signRequest instead
6
6
  getAccessToken(): Promise<string>;
@@ -1,6 +1,6 @@
1
1
  import { useEffect } from "react";
2
- import { Link, useSearchParams } from "react-router";
3
- import { Button } from "zudoku/ui/Button.js";
2
+ import { useSearchParams } from "react-router";
3
+ import { Spinner } from "zudoku/components";
4
4
  import {
5
5
  Card,
6
6
  CardContent,
@@ -16,6 +16,7 @@ export const SignIn = () => {
16
16
  useEffect(() => {
17
17
  void context.authentication?.signIn({
18
18
  redirectTo: search.get("redirect") ?? undefined,
19
+ replace: true,
19
20
  });
20
21
  }, [context.authentication, search]);
21
22
 
@@ -30,16 +31,8 @@ export const SignIn = () => {
30
31
  </CardDescription>
31
32
  </CardHeader>
32
33
  <CardContent>
33
- <div className="flex flex-col gap-2 justify-center">
34
- <Button
35
- onClick={() => context.authentication?.signIn()}
36
- variant="default"
37
- >
38
- Login
39
- </Button>
40
- <Button variant="link" className="text-muted-foreground" asChild>
41
- <Link to="/">Go home</Link>
42
- </Button>
34
+ <div className="flex items-center text-sm font-medium gap-2">
35
+ <Spinner /> Redirecting...
43
36
  </div>
44
37
  </CardContent>
45
38
  </Card>
@@ -113,25 +113,41 @@ export class OpenIDAuthenticationProvider
113
113
  });
114
114
  }
115
115
 
116
- async signUp({ redirectTo }: { redirectTo?: string } = {}) {
116
+ async signUp({
117
+ redirectTo,
118
+ replace = false,
119
+ }: {
120
+ redirectTo?: string;
121
+ replace?: boolean;
122
+ } = {}) {
117
123
  return this.authorize({
118
124
  redirectTo: this.redirectToAfterSignUp ?? redirectTo ?? "/",
125
+ replace,
119
126
  isSignUp: true,
120
127
  });
121
128
  }
122
129
 
123
- async signIn({ redirectTo }: { redirectTo?: string } = {}) {
130
+ async signIn({
131
+ redirectTo,
132
+ replace = false,
133
+ }: {
134
+ redirectTo?: string;
135
+ replace?: boolean;
136
+ } = {}) {
124
137
  return this.authorize({
125
138
  redirectTo: this.redirectToAfterSignIn ?? redirectTo ?? "/",
139
+ replace,
126
140
  });
127
141
  }
128
142
 
129
143
  private async authorize({
130
144
  redirectTo,
131
145
  isSignUp = false,
146
+ replace = false,
132
147
  }: {
133
148
  redirectTo: string;
134
149
  isSignUp?: boolean;
150
+ replace?: boolean;
135
151
  }): Promise<void> {
136
152
  const code_challenge_method = "S256";
137
153
  const authorizationServer = await this.getAuthServer();
@@ -187,8 +203,11 @@ export class OpenIDAuthenticationProvider
187
203
  sessionStorage.setItem(STATE_KEY, state);
188
204
  authorizationUrl.searchParams.set("state", state);
189
205
 
190
- // now redirect the user to authorizationUrl.href
191
- location.href = authorizationUrl.href;
206
+ if (replace) {
207
+ location.replace(authorizationUrl.href);
208
+ } else {
209
+ location.href = authorizationUrl.href;
210
+ }
192
211
  }
193
212
 
194
213
  async getAccessToken(): Promise<string> {
@@ -26,7 +26,7 @@ const AutocompletePopover = ({
26
26
  options,
27
27
  onChange,
28
28
  className,
29
- placeholder = "Enter value",
29
+ placeholder = "Value",
30
30
  onEnterPress,
31
31
  ref,
32
32
  }: AutocompleteProps) => {
@@ -39,6 +39,7 @@ const AutocompletePopover = ({
39
39
  <Popover open={open}>
40
40
  <PopoverAnchor>
41
41
  <CommandInlineInput
42
+ autoComplete="off"
42
43
  ref={(el) => {
43
44
  inputRef.current = el;
44
45
  if (typeof ref === "function") {
@@ -12,7 +12,7 @@ const COLOR_MAP = {
12
12
  } as const;
13
13
 
14
14
  export const Banner = () => {
15
- const { page } = useZudoku();
15
+ const { site: page } = useZudoku();
16
16
  const [isBannerOpen, setIsBannerOpen] = useState(true);
17
17
 
18
18
  if (!page?.banner || !isBannerOpen) {
@@ -34,7 +34,6 @@ export const Banner = () => {
34
34
  "relative text-primary-foreground text-sm font-medium px-4 py-2 flex gap-2 items-center lg:h-(--banner-height)",
35
35
  mappedColor,
36
36
  )}
37
- data-pagefind-ignore="all"
38
37
  style={style}
39
38
  >
40
39
  <div className="w-full">{page.banner.message}</div>
@@ -9,7 +9,10 @@ export const CategoryHeading = ({
9
9
  className?: string;
10
10
  }) => {
11
11
  return (
12
- <div className={cx("text-sm font-semibold text-primary mb-2", className)}>
12
+ <div
13
+ className={cx("text-sm font-semibold text-primary mb-2", className)}
14
+ data-pagefind-ignore="all"
15
+ >
13
16
  {children}
14
17
  </div>
15
18
  );
@@ -1,7 +1,7 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { CategoryHeading } from "./CategoryHeading.js";
3
3
  import { Heading } from "./Heading.js";
4
- import { ProseClasses } from "./Markdown.js";
4
+ import { Typography } from "./Typography.js";
5
5
 
6
6
  export const ErrorPage = ({
7
7
  title = "An error occurred",
@@ -13,7 +13,7 @@ export const ErrorPage = ({
13
13
  category?: ReactNode;
14
14
  }) => {
15
15
  return (
16
- <div className={ProseClasses + " h-full pt-(--padding-content-top)"}>
16
+ <Typography className={"h-full pt-(--padding-content-top)"}>
17
17
  {category && <CategoryHeading>{category}</CategoryHeading>}
18
18
  {title && (
19
19
  <Heading level={1} className="flex gap-3.5 items-center">
@@ -21,6 +21,6 @@ export const ErrorPage = ({
21
21
  </Heading>
22
22
  )}
23
23
  <p>{message}</p>
24
- </div>
24
+ </Typography>
25
25
  );
26
26
  };
@@ -26,7 +26,7 @@ const SocialIcon = ({
26
26
  const isExternalUrl = (href: string) => /^https?:/.test(href);
27
27
 
28
28
  export const Footer = () => {
29
- const { page } = useZudoku();
29
+ const { site: page } = useZudoku();
30
30
  const footer = page?.footer;
31
31
 
32
32
  if (!footer) return null;
@@ -60,56 +60,57 @@ export const Header = memo(function HeaderInner() {
60
60
  const auth = useAuth();
61
61
  const { isAuthenticated, profile, isAuthEnabled } = useAuth();
62
62
  const context = useZudoku();
63
- const { page, plugins, options } = context;
63
+ const { site, plugins, options } = context;
64
64
 
65
65
  const accountItems = plugins
66
66
  .filter((p) => isProfileMenuPlugin(p))
67
67
  .flatMap((p) => p.getProfileMenuItems(context))
68
68
  .sort((i) => i.weight ?? 0);
69
69
 
70
- const logoLightSrc = page?.logo
71
- ? /https?:\/\//.test(page.logo.src.light)
72
- ? page.logo.src.light
73
- : joinUrl(options.basePath, page.logo.src.light)
70
+ const logoLightSrc = site?.logo
71
+ ? /https?:\/\//.test(site.logo.src.light)
72
+ ? site.logo.src.light
73
+ : joinUrl(options.basePath, site.logo.src.light)
74
74
  : undefined;
75
- const logoDarkSrc = page?.logo
76
- ? /https?:\/\//.test(page.logo.src.dark)
77
- ? page.logo.src.dark
78
- : joinUrl(options.basePath, page.logo.src.dark)
75
+ const logoDarkSrc = site?.logo
76
+ ? /https?:\/\//.test(site.logo.src.dark)
77
+ ? site.logo.src.dark
78
+ : joinUrl(options.basePath, site.logo.src.dark)
79
79
  : undefined;
80
80
 
81
81
  const borderBottom = "inset-shadow-[0_-1px_0_0_var(--border)]";
82
82
 
83
83
  return (
84
- <header className="sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full">
84
+ <header
85
+ className="sticky lg:top-0 z-10 bg-background/80 backdrop-blur w-full"
86
+ data-pagefind-ignore="all"
87
+ >
85
88
  <Banner />
86
89
  <div className={cn(borderBottom, "relative")}>
87
90
  <PageProgress />
88
91
  <div className="max-w-screen-2xl mx-auto flex items-center justify-between h-(--top-header-height) px-4 lg:px-8 border-transparent">
89
92
  <div className="flex">
90
- <Link to="/">
93
+ <Link to={site?.logo?.href ?? "/"}>
91
94
  <div className="flex items-center gap-3.5">
92
- {page?.logo && (
95
+ {site?.logo && (
93
96
  <>
94
97
  <img
95
98
  src={logoLightSrc}
96
- alt={page.logo.alt ?? page.pageTitle}
97
- style={{ width: page.logo.width }}
99
+ alt={site.logo.alt ?? site.title}
100
+ style={{ width: site.logo.width }}
98
101
  className="max-h-(--top-header-height) dark:hidden"
99
102
  loading="lazy"
100
103
  />
101
104
  <img
102
105
  src={logoDarkSrc}
103
- alt={page.logo.alt ?? page.pageTitle}
104
- style={{ width: page.logo.width }}
106
+ alt={site.logo.alt ?? site.title}
107
+ style={{ width: site.logo.width }}
105
108
  className="max-h-(--top-header-height) hidden dark:block"
106
109
  loading="lazy"
107
110
  />
108
111
  </>
109
112
  )}
110
- <span className="font-semibold text-2xl">
111
- {page?.pageTitle}
112
- </span>
113
+ <span className="font-semibold text-2xl">{site?.title}</span>
113
114
  </div>
114
115
  </Link>
115
116
  </div>
@@ -16,7 +16,7 @@ export const Main = ({ children }: PropsWithChildren) => {
16
16
 
17
17
  return (
18
18
  <Drawer
19
- direction={options.page?.dir === "rtl" ? "right" : "left"}
19
+ direction={options.site?.dir === "rtl" ? "right" : "left"}
20
20
  open={isDrawerOpen}
21
21
  onOpenChange={(open) => setDrawerOpen(open)}
22
22
  >
@@ -5,12 +5,10 @@ import remarkGfm from "remark-gfm";
5
5
  import { createConfiguredShikiRehypePlugins } from "../shiki.js";
6
6
  import { MdxComponents } from "../util/MdxComponents.js";
7
7
  import { useZudoku } from "./context/ZudokuContext.js";
8
+ import { Typography } from "./Typography.js";
8
9
 
9
10
  const remarkPlugins = [remarkGfm];
10
11
 
11
- // other styles are defined in main.css .prose
12
- export const ProseClasses = "prose dark:prose-invert prose-neutral";
13
-
14
12
  export const Markdown = memo(
15
13
  ({
16
14
  content,
@@ -36,7 +34,7 @@ export const Markdown = memo(
36
34
  );
37
35
 
38
36
  return (
39
- <div className={className}>
37
+ <Typography className={className}>
40
38
  <MarkdownHooks
41
39
  remarkPlugins={remarkPlugins}
42
40
  rehypePlugins={rehypePlugins}
@@ -44,7 +42,7 @@ export const Markdown = memo(
44
42
  >
45
43
  {content}
46
44
  </MarkdownHooks>
47
- </div>
45
+ </Typography>
48
46
  );
49
47
  },
50
48
  );