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
@@ -1,122 +1,98 @@
1
1
  import { type UseMutationResult } from "@tanstack/react-query";
2
- import { Spinner } from "../../../../components/Spinner.js";
2
+ import { SendIcon, UnplugIcon } from "lucide-react";
3
+ import { Spinner } from "zudoku/components";
4
+ import { Alert, AlertDescription, AlertTitle } from "zudoku/ui/Alert.js";
3
5
  import { Button } from "../../../../ui/Button.js";
4
- import { Callout } from "../../../../ui/Callout.js";
5
- import {
6
- Card,
7
- CardContent,
8
- CardHeader,
9
- CardTitle,
10
- } from "../../../../ui/Card.js";
11
- import {
12
- Tabs,
13
- TabsContent,
14
- TabsList,
15
- TabsTrigger,
16
- } from "../../../../ui/Tabs.js";
17
6
  import { cn } from "../../../../util/cn.js";
18
7
  import { type PlaygroundResult } from "../Playground.js";
19
- import { RequestTab } from "./RequestTab.js";
8
+ import ResponseStatusBar from "./ResponseStatusBar.js";
20
9
  import { ResponseTab } from "./ResponseTab.js";
21
10
 
22
11
  export const ResultPanel = ({
23
12
  queryMutation,
24
- showPathParamsWarning,
25
13
  showLongRunningWarning,
26
14
  onCancel,
15
+ tip,
16
+ isFinished,
17
+ progress,
27
18
  }: {
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
20
  queryMutation: UseMutationResult<PlaygroundResult, Error, any>;
29
- showPathParamsWarning: boolean;
30
21
  showLongRunningWarning?: boolean;
31
22
  onCancel?: () => void;
23
+ isFinished: boolean;
24
+ progress: number;
25
+ tip?: React.ReactNode;
32
26
  }) => {
33
- const status = ((queryMutation.data?.status ?? 0) / 100).toFixed(0);
34
27
  return (
35
- <div className="min-w-0 p-4 py-4 bg-muted/50">
28
+ <div className="overflow-y-auto h-[80vh] bg-muted/50">
29
+ {(queryMutation.isPending || queryMutation.data) && (
30
+ <ResponseStatusBar
31
+ status={queryMutation.data?.status}
32
+ time={queryMutation.data?.time}
33
+ size={queryMutation.data?.size}
34
+ isFinished={isFinished}
35
+ progress={progress}
36
+ />
37
+ )}
36
38
  {queryMutation.error ? (
37
- <div className="flex flex-col gap-2">
38
- {showPathParamsWarning && (
39
- <Callout type="caution">
40
- Some path parameters are missing values. Please fill them in to
41
- ensure the request is sent correctly.
42
- </Callout>
43
- )}
44
- <Card>
45
- <CardHeader>
46
- <CardTitle>Request failed</CardTitle>
47
- </CardHeader>
48
- <CardContent>
49
- Error:{" "}
39
+ <div className="max-w-2/3 mx-auto mt-20">
40
+ <Alert>
41
+ <UnplugIcon size={24} strokeWidth={1.5} className="me-5" />
42
+ <AlertTitle>Request failed</AlertTitle>
43
+ <AlertDescription>
50
44
  {queryMutation.error.message ||
51
45
  String(queryMutation.error) ||
52
46
  "Unexpected error"}
53
- </CardContent>
54
- </Card>
47
+ </AlertDescription>
48
+ </Alert>
55
49
  </div>
56
50
  ) : queryMutation.data ? (
57
- <Tabs defaultValue="response">
58
- <TabsList>
59
- <TabsTrigger value="request">Request</TabsTrigger>
60
- <TabsTrigger value="response">
61
- Response
62
- <span
63
- className={cn(
64
- "text-xs font-mono ms-1",
65
- status === "2" && "text-green-500",
66
- status === "3" && "text-blue-500",
67
- status === "4" && "text-yellow-500",
68
- status === "5" && "text-red-500",
69
- )}
70
- >
71
- ({queryMutation.data.status})
72
- </span>
73
- </TabsTrigger>
74
- </TabsList>
75
- <TabsContent value="request">
76
- <RequestTab {...queryMutation.data.request} />
77
- </TabsContent>
78
- <TabsContent value="response">
79
- <ResponseTab
80
- status={queryMutation.data.status}
81
- time={queryMutation.data.time}
82
- size={queryMutation.data.size}
83
- headers={queryMutation.data.headers}
84
- body={queryMutation.data.body}
85
- url={queryMutation.data.request.url}
86
- isBinary={queryMutation.data.isBinary}
87
- fileName={queryMutation.data.fileName}
88
- blob={queryMutation.data.blob}
89
- />
90
- </TabsContent>
91
- </Tabs>
92
- ) : (
51
+ <ResponseTab
52
+ request={queryMutation.data.request}
53
+ size={queryMutation.data.size}
54
+ headers={queryMutation.data.headers}
55
+ body={queryMutation.data.body}
56
+ isBinary={queryMutation.data.isBinary}
57
+ fileName={queryMutation.data.fileName}
58
+ blob={queryMutation.data.blob}
59
+ />
60
+ ) : queryMutation.isPending ? (
93
61
  <div className="grid place-items-center h-full">
94
- {queryMutation.isPending ? (
95
- <div className="flex flex-col gap-2 items-center mt-20">
96
- <Spinner size={20} />
97
- <div
98
- className={cn(
99
- "opacity-0 pointer-events-none transition-opacity h-20 text-sm text-muted-foreground duration-300 flex flex-col gap-2 items-center",
100
- showLongRunningWarning && "opacity-100 pointer-events-auto",
101
- )}
62
+ <div className="flex flex-col gap-2 items-center mt-20">
63
+ <Spinner />
64
+ <div
65
+ className={cn(
66
+ "opacity-0 pointer-events-none transition-opacity h-20 text-sm text-muted-foreground duration-300 flex flex-col gap-2 items-center",
67
+ showLongRunningWarning && "opacity-100 pointer-events-auto",
68
+ )}
69
+ >
70
+ Looks like the request is taking longer than expected.
71
+ <Button
72
+ type="button"
73
+ onClick={onCancel}
74
+ size="sm"
75
+ className="w-fit"
76
+ variant="outline"
102
77
  >
103
- Looks like the request is taking longer than expected.
104
- <Button
105
- type="button"
106
- onClick={onCancel}
107
- size="sm"
108
- className="w-fit"
109
- variant="outline"
110
- >
111
- Cancel
112
- </Button>
113
- </div>
78
+ Cancel
79
+ </Button>
114
80
  </div>
115
- ) : (
81
+ </div>
82
+ </div>
83
+ ) : (
84
+ <div className="h-full grid place-items-center">
85
+ <div className="flex flex-col gap-4 items-center">
86
+ <SendIcon
87
+ size={64}
88
+ className="text-muted-foreground"
89
+ strokeWidth={1.2}
90
+ />
116
91
  <span className="text-[16px] font-semibold text-muted-foreground">
117
- Send a request first to see the response here
92
+ Send your first request
118
93
  </span>
119
- )}
94
+ {tip}
95
+ </div>
120
96
  </div>
121
97
  )}
122
98
  </div>
@@ -9,11 +9,11 @@ export const SchemaExampleAndDefault = ({
9
9
  const example = schema.examples?.at(0);
10
10
  const defaultValue = schema.default;
11
11
 
12
- if (!example && !defaultValue) return null;
12
+ if (example === undefined && defaultValue === undefined) return null;
13
13
 
14
14
  return (
15
15
  <div className="flex flex-col gap-1 text-xs">
16
- {example && (
16
+ {example !== undefined && (
17
17
  <div>
18
18
  <span className="text-muted-foreground">Example: </span>
19
19
  <SelectOnClick className="border rounded-sm px-1 font-mono">
@@ -23,7 +23,7 @@ export const SchemaExampleAndDefault = ({
23
23
  </SelectOnClick>
24
24
  </div>
25
25
  )}
26
- {defaultValue && (
26
+ {defaultValue !== undefined && (
27
27
  <div>
28
28
  <span className="text-muted-foreground">Default: </span>
29
29
  <SelectOnClick className="border rounded-sm px-1 font-mono">
@@ -2,10 +2,9 @@ import * as Collapsible from "@radix-ui/react-collapsible";
2
2
  import { MinusIcon, PlusIcon, RefreshCcwDotIcon } from "lucide-react";
3
3
  import { useCallback, useState } from "react";
4
4
  import { InlineCode } from "../../../components/InlineCode.js";
5
- import { Markdown, ProseClasses } from "../../../components/Markdown.js";
5
+ import { Markdown } from "../../../components/Markdown.js";
6
6
  import type { SchemaObject } from "../../../oas/parser/index.js";
7
7
  import { Button } from "../../../ui/Button.js";
8
- import { cn } from "../../../util/cn.js";
9
8
  import { objectEntries } from "../../../util/objectEntries.js";
10
9
  import { ConstValue } from "../components/ConstValue.js";
11
10
  import { EnumValues } from "../components/EnumValues.js";
@@ -117,7 +116,7 @@ export const SchemaPropertyItem = ({
117
116
  </div>
118
117
  {schema.description && (
119
118
  <Markdown
120
- className={cn(ProseClasses, "text-sm leading-normal line-clamp-4")}
119
+ className="text-sm leading-normal"
121
120
  content={schema.description}
122
121
  />
123
122
  )}
@@ -1,8 +1,8 @@
1
1
  import { InfoIcon } from "lucide-react";
2
- import { Markdown, ProseClasses } from "../../../components/Markdown.js";
2
+ import { Markdown } from "../../../components/Markdown.js";
3
+ import { Typography } from "../../../components/Typography.js";
3
4
  import type { SchemaObject } from "../../../oas/parser/index.js";
4
5
  import { Card } from "../../../ui/Card.js";
5
- import { cn } from "../../../util/cn.js";
6
6
  import { groupBy } from "../../../util/groupBy.js";
7
7
  import { ConstValue } from "../components/ConstValue.js";
8
8
  import { EnumValues } from "../components/EnumValues.js";
@@ -17,7 +17,7 @@ import { hasLogicalGroupings, isBasicType } from "./utils.js";
17
17
  const renderMarkdown = (content?: string) =>
18
18
  content && (
19
19
  <Markdown
20
- className={cn(ProseClasses, "text-sm leading-normal line-clamp-4")}
20
+ className="text-sm leading-normal line-clamp-4"
21
21
  content={content}
22
22
  />
23
23
  );
@@ -86,12 +86,7 @@ export const SchemaView = ({
86
86
  typeof schema.additionalProperties === "object" ? (
87
87
  <SchemaView schema={schema.additionalProperties} />
88
88
  ) : schema.additionalProperties === true ? (
89
- <div
90
- className={cn(
91
- ProseClasses,
92
- "text-sm p-4 bg-border/20 hover:bg-border/30 flex items-center gap-1",
93
- )}
94
- >
89
+ <Typography className="text-sm p-4 bg-border/20 hover:bg-border/30 flex items-center gap-1">
95
90
  <span>Additional properties are allowed</span>
96
91
  <a
97
92
  className="p-0.5 -m-0.5"
@@ -101,7 +96,7 @@ export const SchemaView = ({
101
96
  >
102
97
  <InfoIcon size={14} />
103
98
  </a>
104
- </div>
99
+ </Typography>
105
100
  ) : null;
106
101
 
107
102
  return (
@@ -4,8 +4,9 @@ import type { SchemaObject } from "../../../oas/parser/index.js";
4
4
  export const isBasicType = (
5
5
  type: unknown,
6
6
  ): type is "string" | "number" | "boolean" | "integer" | "null" =>
7
- typeof type === "string" &&
8
- ["string", "number", "boolean", "integer", "null"].includes(type);
7
+ (typeof type === "string" &&
8
+ ["string", "number", "boolean", "integer", "null"].includes(type)) ||
9
+ (Array.isArray(type) && type.every(isBasicType));
9
10
 
10
11
  export const isArrayType = (value: SchemaObject) =>
11
12
  value.type === "array" ||
@@ -1,102 +1,98 @@
1
- import { useEffect, useMemo, useRef, useState } from "react";
1
+ import type {
2
+ InkeepBaseSettings,
3
+ InkeepComponentInstance,
4
+ InkeepJS,
5
+ InkeepSettings,
6
+ } from "@inkeep/cxkit-types";
7
+ import { useEffect, useMemo, useState } from "react";
2
8
  import { ClientOnly } from "../../components/ClientOnly.js";
3
9
  import type { ZudokuPlugin } from "../../core/plugins.js";
4
- import { aiChatSettings, baseSettings } from "./inkeep.js";
5
-
6
- interface PluginInkeepBaseSettings {
7
- apiKey?: string;
8
- integrationId: string;
9
- organizationId: string;
10
- organizationDisplayName?: string;
11
- primaryBrandColor: string;
12
- }
13
-
14
- interface InkeepEmbedConfig {
15
- componentType: string;
16
- targetElement: HTMLElement;
17
- properties: unknown;
18
- }
19
-
20
- interface InkeepWidget {
21
- render: (config: InkeepEmbedConfig & { isOpen: boolean }) => void;
22
- }
10
+ import {
11
+ aiChatSettings,
12
+ baseSettings,
13
+ modalSettings,
14
+ searchSettings,
15
+ } from "./inkeep.js";
23
16
 
24
17
  declare global {
25
- let Inkeep: () => {
26
- embed: (config: InkeepEmbedConfig) => InkeepWidget;
27
- };
18
+ interface Window {
19
+ Inkeep: InkeepJS | undefined;
20
+ }
28
21
  }
29
22
 
30
23
  const InkeepSearch = ({
31
- prefilledQuery,
32
24
  isOpen,
33
25
  onClose,
34
26
  settings,
35
27
  }: {
36
28
  isOpen: boolean;
37
29
  onClose: () => void;
38
- prefilledQuery?: string | null;
39
- settings: PluginInkeepBaseSettings;
30
+ settings: InkeepBaseSettings;
40
31
  }) => {
41
- const ref = useRef<HTMLDivElement>(null);
42
- const widgetRef = useRef<InkeepWidget | null>(null);
43
- const [isInkeepAvailable, setIsInkeepAvailable] = useState(
44
- typeof Inkeep !== "undefined",
45
- );
46
-
47
- const config: InkeepEmbedConfig = useMemo(
32
+ const config = useMemo<InkeepSettings>(
48
33
  () => ({
49
- componentType: "CustomTrigger",
50
- targetElement: ref.current!,
51
- properties: {
52
- isOpen,
53
- onClose,
54
- onOpen: undefined,
55
- baseSettings: { ...baseSettings, ...settings },
56
- searchSettings: {
57
- prefilledQuery: prefilledQuery || undefined,
34
+ baseSettings: {
35
+ ...baseSettings,
36
+ ...settings,
37
+ colorMode: {
38
+ sync: {
39
+ target: "html",
40
+ attributes: ["class"],
41
+ isDarkMode: (attrs) => attrs["class"]?.includes("dark") ?? false,
42
+ },
43
+ },
44
+ },
45
+ modalSettings: {
46
+ ...modalSettings,
47
+ onOpenChange: (newOpen: boolean) => {
48
+ if (!newOpen) onClose();
58
49
  },
59
- aiChatSettings,
60
50
  },
51
+ searchSettings,
52
+ aiChatSettings,
61
53
  }),
62
- [isOpen, onClose, prefilledQuery, settings, ref],
54
+ [onClose, settings],
55
+ );
56
+ const [searchInstance, setSearchInstance] = useState<
57
+ InkeepComponentInstance | undefined
58
+ >(
59
+ typeof window !== "undefined" && window.Inkeep?.ModalSearchAndChat
60
+ ? window.Inkeep.ModalSearchAndChat(config)!
61
+ : undefined,
63
62
  );
64
63
 
65
64
  useEffect(() => {
66
- if (isInkeepAvailable) return;
65
+ if (searchInstance) return;
67
66
 
68
67
  const checkInkeep = setInterval(() => {
69
- if (typeof Inkeep !== "undefined") {
70
- setIsInkeepAvailable(true);
68
+ if (typeof window !== "undefined" && window.Inkeep?.ModalSearchAndChat) {
69
+ const inkeep = window.Inkeep.ModalSearchAndChat(config)!;
70
+ setSearchInstance(inkeep);
71
71
  clearInterval(checkInkeep);
72
72
  }
73
73
  }, 100);
74
74
 
75
75
  return () => clearInterval(checkInkeep);
76
- }, [isInkeepAvailable]);
76
+ }, [config, searchInstance]);
77
77
 
78
78
  useEffect(() => {
79
- if (!isInkeepAvailable || widgetRef.current) return;
80
-
81
- widgetRef.current = Inkeep().embed(config);
82
- }, [config, isInkeepAvailable]);
79
+ if (!searchInstance) return;
83
80
 
84
- useEffect(() => {
85
- widgetRef.current?.render({ ...config, isOpen });
86
- }, [config, isOpen]);
81
+ searchInstance.update({ modalSettings: { isOpen } });
82
+ }, [isOpen, searchInstance]);
87
83
 
88
- return <div ref={ref} />;
84
+ return null;
89
85
  };
90
86
 
91
87
  export const inkeepSearchPlugin = (
92
- settings: PluginInkeepBaseSettings,
88
+ settings: InkeepBaseSettings,
93
89
  ): ZudokuPlugin => {
94
90
  return {
95
91
  getHead: () => {
96
92
  return (
97
93
  <script
98
94
  type="module"
99
- src="https://unpkg.com/@inkeep/uikit-js@0.3.19/dist/embed.js"
95
+ src="https://cdn.jsdelivr.net/npm/@inkeep/cxkit-js@0.5.90/+esm"
100
96
  defer
101
97
  />
102
98
  );
@@ -1,26 +1,24 @@
1
- const baseSettings = {
2
- theme: {
3
- components: {
4
- AIChatPageWrapper: {
5
- defaultProps: {
6
- size: "shrink-vertically",
7
- variant: "no-shadow",
8
- },
9
- },
10
- SearchBarTrigger: {
11
- defaultProps: {
12
- size: "expand",
13
- variant: "subtle", // Choose from 'emphasized' or 'subtle'
14
- },
15
- },
16
- },
17
- },
18
- } as const;
1
+ import type {
2
+ InkeepAIChatSettings,
3
+ InkeepBaseSettings,
4
+ InkeepModalSettings,
5
+ InkeepSearchSettings,
6
+ } from "@inkeep/cxkit-types";
19
7
 
20
- const modalSettings = {};
8
+ const baseSettings: InkeepBaseSettings = {
9
+ primaryBrandColor: "#26D6FF",
10
+ };
21
11
 
22
- const searchSettings = {};
12
+ const modalSettings: InkeepModalSettings = {
13
+ shortcutKey: "k",
14
+ };
23
15
 
24
- const aiChatSettings = {};
16
+ const searchSettings: InkeepSearchSettings = {
17
+ placeholder: "Search...",
18
+ };
19
+
20
+ const aiChatSettings: InkeepAIChatSettings = {
21
+ aiAssistantName: "Assistant",
22
+ };
25
23
 
26
24
  export { aiChatSettings, baseSettings, modalSettings, searchSettings };
@@ -153,6 +153,7 @@ export const PagefindSearch = ({
153
153
  </div>
154
154
  ) : (
155
155
  <ResultList
156
+ basePath={context.options.basePath}
156
157
  searchResults={searchResults ?? []}
157
158
  searchTerm={searchTerm}
158
159
  onClose={onClose}
@@ -2,6 +2,7 @@ import { BracketsIcon, FileTextIcon } from "lucide-react";
2
2
  import { useLayoutEffect, useRef } from "react";
3
3
  import { Link, useNavigate } from "react-router";
4
4
  import { CommandGroup, CommandItem, CommandList } from "zudoku/ui/Command.js";
5
+ import { joinUrl } from "../../util/joinUrl.js";
5
6
  import {
6
7
  type PagefindSearchFragment,
7
8
  type PagefindSubResult,
@@ -22,6 +23,7 @@ const sortSubResults = (a: PagefindSubResult, b: PagefindSubResult) => {
22
23
  const hoverClassname = `cursor-pointer border border-transparent data-[selected=true]:border-border`;
23
24
 
24
25
  export const ResultList = ({
26
+ basePath,
25
27
  searchResults,
26
28
  searchTerm,
27
29
  onClose,
@@ -42,6 +44,13 @@ export const ResultList = ({
42
44
  });
43
45
  }, [searchTerm]);
44
46
 
47
+ const stripBasePath = (url: string) => {
48
+ if (basePath && url.startsWith(basePath)) {
49
+ return joinUrl(url.slice(basePath.length));
50
+ }
51
+ return url;
52
+ };
53
+
45
54
  return (
46
55
  <CommandList className="max-h-[450px]" ref={commandListRef}>
47
56
  {searchTerm && searchResults.length > 0 && (
@@ -60,11 +69,11 @@ export const ResultList = ({
60
69
  value={`${result.meta.title}-${result.url}`}
61
70
  className={hoverClassname}
62
71
  onSelect={() => {
63
- void navigate(result.url);
72
+ void navigate(stripBasePath(result.url));
64
73
  onClose();
65
74
  }}
66
75
  >
67
- <Link to={result.url}>
76
+ <Link to={stripBasePath(result.url)}>
68
77
  {result.meta.section === "openapi" ? (
69
78
  <BracketsIcon />
70
79
  ) : (
@@ -83,11 +92,11 @@ export const ResultList = ({
83
92
  value={`sub-${result.meta.title}-${subResult.url}`}
84
93
  className={hoverClassname}
85
94
  onSelect={() => {
86
- void navigate(subResult.url);
95
+ void navigate(stripBasePath(subResult.url));
87
96
  onClose();
88
97
  }}
89
98
  >
90
- <Link to={subResult.url} onClick={onClose}>
99
+ <Link to={stripBasePath(subResult.url)} onClick={onClose}>
91
100
  <div className="flex flex-col items-start gap-2 ms-2.5 ps-5 border-l border-muted-foreground/50">
92
101
  <span className="font-bold">{subResult.title}</span>
93
102
  <span
@@ -1,5 +1,5 @@
1
1
  import { cva, type VariantProps } from "class-variance-authority";
2
- import * as React from "react";
2
+ import type * as React from "react";
3
3
  import { cn } from "../util/cn.js";
4
4
 
5
5
  const alertVariants = cva(
@@ -1,7 +1,8 @@
1
1
  import { CheckIcon, CopyIcon } from "lucide-react";
2
2
  import type { ReactNode } from "react";
3
- import { useRef, useState } from "react";
3
+ import { useRef } from "react";
4
4
  import { cn } from "../util/cn.js";
5
+ import { useCopyToClipboard } from "../util/useCopyToClipboard.js";
5
6
 
6
7
  export type CodeBlockProps = {
7
8
  className?: string;
@@ -26,7 +27,7 @@ export const CodeBlock = ({
26
27
  showLineNumbers,
27
28
  ...props
28
29
  }: CodeBlockProps) => {
29
- const [isCopied, setIsCopied] = useState(false);
30
+ const [isCopied, copyToClipboard] = useCopyToClipboard();
30
31
  const ref = useRef<HTMLDivElement>(null);
31
32
 
32
33
  if (!children) return null;
@@ -57,9 +58,7 @@ export const CodeBlock = ({
57
58
  onClick={() => {
58
59
  if (!ref.current?.textContent) return;
59
60
 
60
- setIsCopied(true);
61
- void navigator.clipboard.writeText(ref.current.textContent);
62
- setTimeout(() => setIsCopied(false), 2000);
61
+ copyToClipboard(ref.current.textContent);
63
62
  }}
64
63
  >
65
64
  {isCopied ? (
@@ -77,7 +76,7 @@ export const CodeBlock = ({
77
76
  </div>
78
77
  <div
79
78
  className={cn(
80
- "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar p-4",
79
+ "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar [&>code]:p-4",
81
80
  props.className,
82
81
  )}
83
82
  ref={ref}
@@ -45,8 +45,8 @@ const DialogContent = React.forwardRef<
45
45
  >
46
46
  {children}
47
47
  {showCloseButton && (
48
- <DialogPrimitive.Close className="absolute right-4 top-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
- <XIcon className="h-4 w-4" />
48
+ <DialogPrimitive.Close className="absolute left-1 top-1 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
49
+ <XIcon className="h-3 w-3" strokeWidth={2} />
50
50
  <span className="sr-only">Close</span>
51
51
  </DialogPrimitive.Close>
52
52
  )}
@@ -34,13 +34,13 @@ export const EmbeddedCodeBlock = ({
34
34
  return (
35
35
  <div
36
36
  className={cn(
37
- "code-block-wrapper relative group bg-muted/50 rounded-md",
37
+ "code-block-wrapper relative group bg-muted/50",
38
38
  showLineNumbers && "line-numbers",
39
39
  )}
40
40
  >
41
41
  <div
42
42
  className={cn(
43
- "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar p-4",
43
+ "code-block text-sm not-prose scrollbar overflow-x-auto scrollbar [&>pre]:p-4",
44
44
  props.className,
45
45
  )}
46
46
  ref={ref}
@@ -16,7 +16,7 @@ const SelectTrigger = React.forwardRef<
16
16
  <SelectPrimitive.Trigger
17
17
  ref={ref}
18
18
  className={cn(
19
- "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
19
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-1 focus:ring-ring focus:ring-offset-1 disabled:cursor-not-allowed disabled:opacity-50",
20
20
  className,
21
21
  )}
22
22
  {...props}