zudoku 0.0.0-e101786 → 0.0.0-e20b2e4

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 (505) hide show
  1. package/dist/app/entry.server.d.ts +1 -1
  2. package/dist/app/main.d.ts +1 -1
  3. package/dist/app/main.js +18 -8
  4. package/dist/app/main.js.map +1 -1
  5. package/dist/cli/common/output.js.map +1 -1
  6. package/dist/cli/dev/handler.js +7 -2
  7. package/dist/cli/dev/handler.js.map +1 -1
  8. package/dist/config/config.d.ts +1 -0
  9. package/dist/config/loader.js +4 -1
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/validators/common.d.ts +217 -28
  12. package/dist/config/validators/common.js +15 -6
  13. package/dist/config/validators/common.js.map +1 -1
  14. package/dist/config/validators/icon-types.d.ts +1 -1
  15. package/dist/config/validators/validate.d.ts +88 -12
  16. package/dist/lib/authentication/providers/auth0.js +1 -1
  17. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  18. package/dist/lib/authentication/providers/openid.d.ts +1 -1
  19. package/dist/lib/authentication/providers/openid.js +10 -6
  20. package/dist/lib/authentication/providers/openid.js.map +1 -1
  21. package/dist/lib/authentication/state.d.ts +9 -0
  22. package/dist/lib/authentication/state.js +11 -0
  23. package/dist/lib/authentication/state.js.map +1 -1
  24. package/dist/lib/components/AnchorLink.js +5 -2
  25. package/dist/lib/components/AnchorLink.js.map +1 -1
  26. package/dist/lib/components/Autocomplete.d.ts +13 -0
  27. package/dist/lib/components/Autocomplete.js +47 -0
  28. package/dist/lib/components/Autocomplete.js.map +1 -0
  29. package/dist/lib/components/Header.js +4 -4
  30. package/dist/lib/components/Header.js.map +1 -1
  31. package/dist/lib/components/Heading.d.ts +1 -1
  32. package/dist/lib/components/Markdown.d.ts +2 -2
  33. package/dist/lib/components/Markdown.js +3 -1
  34. package/dist/lib/components/Markdown.js.map +1 -1
  35. package/dist/lib/components/PathRenderer.d.ts +11 -0
  36. package/dist/lib/components/PathRenderer.js +28 -0
  37. package/dist/lib/components/PathRenderer.js.map +1 -0
  38. package/dist/lib/components/StatusPage.d.ts +7 -0
  39. package/dist/lib/components/StatusPage.js +71 -0
  40. package/dist/lib/components/StatusPage.js.map +1 -0
  41. package/dist/lib/components/SyntaxHighlight.d.ts +2 -1
  42. package/dist/lib/components/SyntaxHighlight.js +2 -2
  43. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  44. package/dist/lib/components/ThemeSwitch.js +2 -2
  45. package/dist/lib/components/ThemeSwitch.js.map +1 -1
  46. package/dist/lib/components/cache.d.ts +6 -0
  47. package/dist/lib/components/cache.js +13 -0
  48. package/dist/lib/components/cache.js.map +1 -0
  49. package/dist/lib/components/context/ViewportAnchorContext.js +16 -4
  50. package/dist/lib/components/context/ViewportAnchorContext.js.map +1 -1
  51. package/dist/lib/components/context/ZudokuContext.js +10 -3
  52. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  53. package/dist/lib/components/index.d.ts +14 -2
  54. package/dist/lib/components/index.js +10 -3
  55. package/dist/lib/components/index.js.map +1 -1
  56. package/dist/lib/components/navigation/Sidebar.js +6 -1
  57. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  58. package/dist/lib/components/navigation/SidebarCategory.js +17 -15
  59. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  60. package/dist/lib/components/navigation/SidebarItem.js +1 -0
  61. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  62. package/dist/lib/core/RouteGuard.d.ts +1 -0
  63. package/dist/lib/core/RouteGuard.js +32 -0
  64. package/dist/lib/core/RouteGuard.js.map +1 -0
  65. package/dist/lib/core/ZudokuContext.d.ts +4 -2
  66. package/dist/lib/core/ZudokuContext.js +9 -7
  67. package/dist/lib/core/ZudokuContext.js.map +1 -1
  68. package/dist/lib/oas/graphql/circular.d.ts +3 -0
  69. package/dist/lib/oas/graphql/circular.js +38 -0
  70. package/dist/lib/oas/graphql/circular.js.map +1 -0
  71. package/dist/lib/oas/graphql/index.d.ts +8 -0
  72. package/dist/lib/oas/graphql/index.js +61 -42
  73. package/dist/lib/oas/graphql/index.js.map +1 -1
  74. package/dist/lib/oas/parser/dereference/index.d.ts +0 -1
  75. package/dist/lib/oas/parser/dereference/index.js +1 -1
  76. package/dist/lib/oas/parser/dereference/index.js.map +1 -1
  77. package/dist/lib/oas/parser/upgrade/index.js +2 -1
  78. package/dist/lib/oas/parser/upgrade/index.js.map +1 -1
  79. package/dist/lib/plugins/markdown/MdxPage.js +8 -2
  80. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  81. package/dist/lib/plugins/markdown/resolver.d.ts +0 -6
  82. package/dist/lib/plugins/markdown/resolver.js +0 -29
  83. package/dist/lib/plugins/markdown/resolver.js.map +1 -1
  84. package/dist/lib/plugins/openapi/ColorizedParam.js +3 -1
  85. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  86. package/dist/lib/plugins/openapi/Endpoint.js +6 -7
  87. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  88. package/dist/lib/plugins/openapi/{Route.d.ts → OpenApiRoute.d.ts} +2 -1
  89. package/dist/lib/plugins/openapi/{Route.js → OpenApiRoute.js} +3 -4
  90. package/dist/lib/plugins/openapi/OpenApiRoute.js.map +1 -0
  91. package/dist/lib/plugins/openapi/OperationList.d.ts +4 -1
  92. package/dist/lib/plugins/openapi/OperationList.js +29 -19
  93. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  94. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  95. package/dist/lib/plugins/openapi/OperationListItem.js +3 -3
  96. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  97. package/dist/lib/plugins/openapi/ParameterListItem.js +2 -2
  98. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  99. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +3 -1
  100. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +8 -3
  101. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  102. package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +1 -1
  103. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +2 -0
  104. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  105. package/dist/lib/plugins/openapi/Sidecar.js +11 -16
  106. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  107. package/dist/lib/plugins/openapi/SidecarBox.js +1 -1
  108. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  109. package/dist/lib/plugins/openapi/SidecarExamples.js +17 -14
  110. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  111. package/dist/lib/plugins/openapi/graphql/gql.d.ts +6 -2
  112. package/dist/lib/plugins/openapi/graphql/gql.js +3 -2
  113. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  114. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +66 -29
  115. package/dist/lib/plugins/openapi/graphql/graphql.js +33 -15
  116. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  117. package/dist/lib/plugins/openapi/index.js +126 -61
  118. package/dist/lib/plugins/openapi/index.js.map +1 -1
  119. package/dist/lib/plugins/openapi/interfaces.d.ts +12 -4
  120. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +6 -0
  121. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +12 -0
  122. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -0
  123. package/dist/lib/plugins/openapi/playground/Headers.d.ts +4 -4
  124. package/dist/lib/plugins/openapi/playground/Headers.js +84 -5
  125. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  126. package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +9 -0
  127. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +5 -0
  128. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -0
  129. package/dist/lib/plugins/openapi/playground/PathParams.js +3 -11
  130. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  131. package/dist/lib/plugins/openapi/playground/Playground.d.ts +22 -1
  132. package/dist/lib/plugins/openapi/playground/Playground.js +61 -56
  133. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  134. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  135. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  136. package/dist/lib/plugins/openapi/playground/QueryParams.js +20 -29
  137. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  138. package/dist/lib/plugins/openapi/playground/SubmitButton.d.ts +7 -0
  139. package/dist/lib/plugins/openapi/playground/SubmitButton.js +22 -0
  140. package/dist/lib/plugins/openapi/playground/SubmitButton.js.map +1 -0
  141. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.d.ts +7 -0
  142. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js +11 -0
  143. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js.map +1 -0
  144. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.d.ts +8 -0
  145. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +95 -0
  146. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -0
  147. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +7 -0
  148. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +16 -0
  149. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -0
  150. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.d.ts +10 -0
  151. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.js +32 -0
  152. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.js.map +1 -0
  153. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.test.d.ts +1 -0
  154. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.test.js +56 -0
  155. package/dist/lib/plugins/openapi/playground/result-panel/convertToTypes.test.js.map +1 -0
  156. package/dist/lib/plugins/openapi/post-processors/removeExtensions.d.ts +2 -1
  157. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js +5 -3
  158. package/dist/lib/plugins/openapi/post-processors/removeExtensions.js.map +1 -1
  159. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js +49 -0
  160. package/dist/lib/plugins/openapi/post-processors/removeExtensions.test.js.map +1 -1
  161. package/dist/lib/plugins/openapi/post-processors/removeParameters.d.ts +10 -0
  162. package/dist/lib/plugins/openapi/post-processors/removeParameters.js +66 -0
  163. package/dist/lib/plugins/openapi/post-processors/removeParameters.js.map +1 -0
  164. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.d.ts +1 -0
  165. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js +131 -0
  166. package/dist/lib/plugins/openapi/post-processors/removeParameters.test.js.map +1 -0
  167. package/dist/lib/plugins/openapi/schema/{SchemaComponents.js → SchemaPropertyItem.js} +10 -8
  168. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -0
  169. package/dist/lib/plugins/openapi/schema/SchemaView.js +1 -1
  170. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  171. package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
  172. package/dist/lib/plugins/openapi/schema/utils.js +2 -0
  173. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  174. package/dist/lib/ui/Badge.d.ts +1 -1
  175. package/dist/lib/ui/Badge.js +1 -0
  176. package/dist/lib/ui/Badge.js.map +1 -1
  177. package/dist/lib/ui/Command.d.ts +9 -1
  178. package/dist/lib/ui/Command.js +5 -1
  179. package/dist/lib/ui/Command.js.map +1 -1
  180. package/dist/lib/ui/Input.d.ts +1 -2
  181. package/dist/lib/ui/Input.js.map +1 -1
  182. package/dist/lib/ui/Select.js +2 -2
  183. package/dist/lib/ui/Select.js.map +1 -1
  184. package/dist/lib/util/MdxComponents.js +2 -2
  185. package/dist/lib/util/MdxComponents.js.map +1 -1
  186. package/dist/lib/util/joinUrl.d.ts +1 -0
  187. package/dist/lib/util/joinUrl.js +40 -0
  188. package/dist/lib/util/joinUrl.js.map +1 -0
  189. package/dist/lib/util/joinUrl.test.d.ts +1 -0
  190. package/dist/lib/util/joinUrl.test.js +43 -0
  191. package/dist/lib/util/joinUrl.test.js.map +1 -0
  192. package/dist/lib/util/scrollIntoViewIfNeeded.d.ts +1 -0
  193. package/dist/lib/util/scrollIntoViewIfNeeded.js +14 -0
  194. package/dist/lib/util/scrollIntoViewIfNeeded.js.map +1 -0
  195. package/dist/lib/util/useLatest.d.ts +1 -0
  196. package/dist/lib/util/useLatest.js +15 -0
  197. package/dist/lib/util/useLatest.js.map +1 -0
  198. package/dist/lib/util/useScrollToAnchor.d.ts +1 -0
  199. package/dist/lib/util/useScrollToAnchor.js +27 -28
  200. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  201. package/dist/lib/util/useScrollToTop.js +6 -4
  202. package/dist/lib/util/useScrollToTop.js.map +1 -1
  203. package/dist/vite/build.js +15 -12
  204. package/dist/vite/build.js.map +1 -1
  205. package/dist/vite/config.js +4 -1
  206. package/dist/vite/config.js.map +1 -1
  207. package/dist/vite/config.test.js +5 -1
  208. package/dist/vite/config.test.js.map +1 -1
  209. package/dist/vite/dev-server.js +4 -1
  210. package/dist/vite/dev-server.js.map +1 -1
  211. package/dist/vite/plugin-api.d.ts +1 -1
  212. package/dist/vite/plugin-api.js +153 -98
  213. package/dist/vite/plugin-api.js.map +1 -1
  214. package/dist/vite/plugin-auth.js +4 -1
  215. package/dist/vite/plugin-auth.js.map +1 -1
  216. package/dist/vite/plugin-config.js +2 -1
  217. package/dist/vite/plugin-config.js.map +1 -1
  218. package/dist/vite/plugin-mdx.js +20 -9
  219. package/dist/vite/plugin-mdx.js.map +1 -1
  220. package/dist/vite/plugin-theme-css.js +7 -4
  221. package/dist/vite/plugin-theme-css.js.map +1 -1
  222. package/dist/vite/plugin.js.map +1 -1
  223. package/dist/vite/{prerender.d.ts → prerender/FileWritingResponse.d.ts} +0 -6
  224. package/dist/vite/prerender/FileWritingResponse.js +42 -0
  225. package/dist/vite/prerender/FileWritingResponse.js.map +1 -0
  226. package/dist/vite/prerender/prerender.d.ts +6 -0
  227. package/dist/vite/prerender/prerender.js +101 -0
  228. package/dist/vite/prerender/prerender.js.map +1 -0
  229. package/dist/vite/prerender/worker.d.ts +11 -0
  230. package/dist/vite/prerender/worker.js +21 -0
  231. package/dist/vite/prerender/worker.js.map +1 -0
  232. package/dist/vite/reporter.d.ts +3 -0
  233. package/dist/vite/reporter.js +33 -0
  234. package/dist/vite/reporter.js.map +1 -0
  235. package/dist/zuplo/enrich-with-zuplo.d.ts +5 -0
  236. package/dist/zuplo/enrich-with-zuplo.js +184 -0
  237. package/dist/zuplo/enrich-with-zuplo.js.map +1 -0
  238. package/dist/zuplo/env.d.ts +1 -0
  239. package/dist/zuplo/env.js +3 -0
  240. package/dist/zuplo/env.js.map +1 -1
  241. package/dist/zuplo/policy-types.d.ts +33 -0
  242. package/dist/zuplo/policy-types.js +8 -0
  243. package/dist/zuplo/policy-types.js.map +1 -0
  244. package/dist/zuplo/with-zuplo-processors.d.ts +3 -0
  245. package/dist/zuplo/with-zuplo-processors.js +26 -0
  246. package/dist/zuplo/with-zuplo-processors.js.map +1 -0
  247. package/dist/zuplo/with-zuplo.d.ts +1 -1
  248. package/dist/zuplo/with-zuplo.js +7 -26
  249. package/dist/zuplo/with-zuplo.js.map +1 -1
  250. package/lib/{AuthenticationPlugin-D7G3me8L.js → AuthenticationPlugin-DjnQ5hs7.js} +4 -4
  251. package/lib/{AuthenticationPlugin-D7G3me8L.js.map → AuthenticationPlugin-DjnQ5hs7.js.map} +1 -1
  252. package/lib/{CategoryHeading-CBconmtI.js → CategoryHeading-MYL1u_6K.js} +3 -3
  253. package/lib/{CategoryHeading-CBconmtI.js.map → CategoryHeading-MYL1u_6K.js.map} +1 -1
  254. package/lib/{Markdown-CZDLNOFc.js → Markdown-8mv9nhGd.js} +3391 -3403
  255. package/lib/Markdown-8mv9nhGd.js.map +1 -0
  256. package/lib/{MdxPage-DKMbBROv.js → MdxPage-ZX2oquWw.js} +61 -56
  257. package/lib/MdxPage-ZX2oquWw.js.map +1 -0
  258. package/lib/OpenApiRoute-BP9kzG5k.js +36 -0
  259. package/lib/OpenApiRoute-BP9kzG5k.js.map +1 -0
  260. package/lib/OperationList-c72qPMtm.js +5180 -0
  261. package/lib/OperationList-c72qPMtm.js.map +1 -0
  262. package/lib/Select-NSz0gku6.js +223 -0
  263. package/lib/Select-NSz0gku6.js.map +1 -0
  264. package/lib/{SlotletProvider-pfc9oejW.js → SlotletProvider-D0mFmGJu.js} +53 -53
  265. package/lib/{SlotletProvider-pfc9oejW.js.map → SlotletProvider-D0mFmGJu.js.map} +1 -1
  266. package/lib/{Button-DeAoTouo.js → Spinner-BlzrEEk1.js} +16 -13
  267. package/lib/Spinner-BlzrEEk1.js.map +1 -0
  268. package/lib/{SyntaxHighlight-Bz-lOJtH.js → SyntaxHighlight-B0L4SC_N.js} +390 -383
  269. package/lib/SyntaxHighlight-B0L4SC_N.js.map +1 -0
  270. package/lib/{chunk-D52XG6IA-Dl7HLe6j.js → chunk-SYFQ2XB5-QijJrSf0.js} +409 -411
  271. package/lib/chunk-SYFQ2XB5-QijJrSf0.js.map +1 -0
  272. package/lib/circular-DxaIIlWD.js +15409 -0
  273. package/lib/circular-DxaIIlWD.js.map +1 -0
  274. package/lib/context-rwLGh-6_.js +22 -0
  275. package/lib/{context-h_UkBLvr.js.map → context-rwLGh-6_.js.map} +1 -1
  276. package/lib/{createServer-BznDkeSA.js → createServer-ZDNGmPfQ.js} +3611 -5736
  277. package/lib/createServer-ZDNGmPfQ.js.map +1 -0
  278. package/lib/hook-Dnj3SwPC.js +1455 -0
  279. package/lib/hook-Dnj3SwPC.js.map +1 -0
  280. package/lib/index-B7mqiOei.js +509 -0
  281. package/lib/index-B7mqiOei.js.map +1 -0
  282. package/lib/index-CZjcfK-H.js +2063 -0
  283. package/lib/index-CZjcfK-H.js.map +1 -0
  284. package/lib/{index-LNp6rxyU.js → index-CjJS0l4l.js} +2 -2
  285. package/lib/{index-LNp6rxyU.js.map → index-CjJS0l4l.js.map} +1 -1
  286. package/lib/index-Djenk2Hj.js +36 -0
  287. package/lib/{index-CPNSgwSb.js.map → index-Djenk2Hj.js.map} +1 -1
  288. package/lib/{index-CBXSgjaE.js → index-Dl3Yl0yb.js} +65 -69
  289. package/lib/index-Dl3Yl0yb.js.map +1 -0
  290. package/lib/{index.esm-BSV1C092.js → index.esm-9-TF9KQB.js} +52 -52
  291. package/lib/{index.esm-BSV1C092.js.map → index.esm-9-TF9KQB.js.map} +1 -1
  292. package/lib/index.esm-CrSoEshU.js +1207 -0
  293. package/lib/index.esm-CrSoEshU.js.map +1 -0
  294. package/lib/joinUrl-nLx9pD-Z.js +20 -0
  295. package/lib/joinUrl-nLx9pD-Z.js.map +1 -0
  296. package/lib/{jsx-runtime-Dx-03ztt.js → jsx-runtime-Bdg6XQ1m.js} +135 -135
  297. package/lib/{jsx-runtime-Dx-03ztt.js.map → jsx-runtime-Bdg6XQ1m.js.map} +1 -1
  298. package/lib/mutation-ByGtmi0-.js +208 -0
  299. package/lib/mutation-ByGtmi0-.js.map +1 -0
  300. package/lib/post-processors/removeExtensions.js +7 -7
  301. package/lib/post-processors/removeExtensions.js.map +1 -1
  302. package/lib/post-processors/removeParameters.js +48 -0
  303. package/lib/post-processors/removeParameters.js.map +1 -0
  304. package/lib/{prism-bash.min-DadFsM4Z.js → prism-bash.min-HHIMdNJ_.js} +4 -4
  305. package/lib/{prism-bash.min-DadFsM4Z.js.map → prism-bash.min-HHIMdNJ_.js.map} +1 -1
  306. package/lib/{prism-csharp.min-DUwvItt4.js → prism-csharp.min-bQAo2pmx.js} +33 -33
  307. package/lib/{prism-csharp.min-DUwvItt4.js.map → prism-csharp.min-bQAo2pmx.js.map} +1 -1
  308. package/lib/{prism-java.min-BtgBR4yd.js → prism-java.min-BpvsOuIa.js} +12 -12
  309. package/lib/{prism-java.min-BtgBR4yd.js.map → prism-java.min-BpvsOuIa.js.map} +1 -1
  310. package/lib/{prism-markdown.min-F3U-vPBi.js → prism-markdown.min-C0Qn0m-5.js} +30 -30
  311. package/lib/{prism-markdown.min-F3U-vPBi.js.map → prism-markdown.min-C0Qn0m-5.js.map} +1 -1
  312. package/lib/{prism-ruby.min-DeDXCp1r.js → prism-ruby.min-Dx9KO9ds.js} +16 -16
  313. package/lib/{prism-ruby.min-DeDXCp1r.js.map → prism-ruby.min-Dx9KO9ds.js.map} +1 -1
  314. package/lib/prism-typescript.min-CD7H2IYQ.js.map +1 -1
  315. package/lib/ui/Accordion.js +1 -1
  316. package/lib/ui/ActionButton.js +10 -11
  317. package/lib/ui/ActionButton.js.map +1 -1
  318. package/lib/ui/Alert.js +2 -2
  319. package/lib/ui/AlertDialog.js +1 -1
  320. package/lib/ui/Badge.js +3 -2
  321. package/lib/ui/Badge.js.map +1 -1
  322. package/lib/ui/Breadcrumb.js +1 -1
  323. package/lib/ui/Button.js +2 -2
  324. package/lib/ui/Callout.js +1 -1
  325. package/lib/ui/Card.js +1 -1
  326. package/lib/ui/Carousel.js +3 -3
  327. package/lib/ui/Carousel.js.map +1 -1
  328. package/lib/ui/Checkbox.js +2 -2
  329. package/lib/ui/Command.js +125 -13
  330. package/lib/ui/Command.js.map +1 -1
  331. package/lib/ui/Dialog.js +1 -1
  332. package/lib/ui/Drawer.js +520 -519
  333. package/lib/ui/Drawer.js.map +1 -1
  334. package/lib/ui/DropdownMenu.js +1 -1
  335. package/lib/ui/Form.js +2 -2
  336. package/lib/ui/HoverCard.js +1 -1
  337. package/lib/ui/Input.js +1 -1
  338. package/lib/ui/Input.js.map +1 -1
  339. package/lib/ui/Label.js +2 -2
  340. package/lib/ui/Pagination.js +7 -7
  341. package/lib/ui/Popover.js +1 -1
  342. package/lib/ui/Progress.js +1 -1
  343. package/lib/ui/RadioGroup.js +1 -1
  344. package/lib/ui/ScrollArea.js +1 -1
  345. package/lib/ui/Select.js +3 -3
  346. package/lib/ui/Select.js.map +1 -1
  347. package/lib/ui/Skeleton.js +1 -1
  348. package/lib/ui/Slider.js +1 -1
  349. package/lib/ui/Switch.js +1 -1
  350. package/lib/ui/Tabs.js +1 -1
  351. package/lib/ui/Textarea.js +1 -1
  352. package/lib/ui/Toggle.js +2 -2
  353. package/lib/ui/ToggleGroup.js +1 -1
  354. package/lib/ui/Tooltip.js +1 -1
  355. package/lib/{useExposedProps-DE9lR6MF.js → useExposedProps-Bbf99zic.js} +2 -2
  356. package/lib/{useExposedProps-DE9lR6MF.js.map → useExposedProps-Bbf99zic.js.map} +1 -1
  357. package/lib/useScrollToAnchor-DkVfWsxe.js +286 -0
  358. package/lib/useScrollToAnchor-DkVfWsxe.js.map +1 -0
  359. package/lib/zudoku.auth-auth0.js +8 -10
  360. package/lib/zudoku.auth-auth0.js.map +1 -1
  361. package/lib/zudoku.auth-clerk.js +18 -18
  362. package/lib/zudoku.auth-openid.js +224 -221
  363. package/lib/zudoku.auth-openid.js.map +1 -1
  364. package/lib/zudoku.components.js +828 -940
  365. package/lib/zudoku.components.js.map +1 -1
  366. package/lib/zudoku.plugin-api-catalog.js +18 -19
  367. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  368. package/lib/zudoku.plugin-api-keys.js +15 -16
  369. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  370. package/lib/zudoku.plugin-custom-pages.js +3 -3
  371. package/lib/zudoku.plugin-markdown.js +23 -44
  372. package/lib/zudoku.plugin-markdown.js.map +1 -1
  373. package/lib/zudoku.plugin-openapi.js +7 -6
  374. package/lib/zudoku.plugin-openapi.js.map +1 -1
  375. package/lib/zudoku.plugin-redirect.js +1 -1
  376. package/lib/zudoku.plugin-search-inkeep.js +9 -9
  377. package/package.json +53 -49
  378. package/src/app/demo-cdn.html +31 -31
  379. package/src/app/entry.server.tsx +1 -1
  380. package/src/app/main.css +52 -51
  381. package/src/app/main.tsx +31 -8
  382. package/src/lib/authentication/providers/auth0.tsx +1 -4
  383. package/src/lib/authentication/providers/openid.tsx +12 -5
  384. package/src/lib/authentication/state.ts +18 -0
  385. package/src/lib/components/AnchorLink.tsx +5 -2
  386. package/src/lib/components/Autocomplete.tsx +113 -0
  387. package/src/lib/components/Header.tsx +4 -4
  388. package/src/lib/components/Markdown.tsx +14 -15
  389. package/src/lib/components/PathRenderer.tsx +61 -0
  390. package/src/lib/components/StatusPage.tsx +91 -0
  391. package/src/lib/components/SyntaxHighlight.tsx +14 -0
  392. package/src/lib/components/ThemeSwitch.tsx +2 -2
  393. package/src/lib/components/cache.ts +15 -0
  394. package/src/lib/components/context/ViewportAnchorContext.tsx +20 -6
  395. package/src/lib/components/context/ZudokuContext.ts +16 -3
  396. package/src/lib/components/index.ts +14 -3
  397. package/src/lib/components/navigation/Sidebar.tsx +7 -1
  398. package/src/lib/components/navigation/SidebarCategory.tsx +46 -43
  399. package/src/lib/components/navigation/SidebarItem.tsx +1 -0
  400. package/src/lib/core/RouteGuard.tsx +39 -0
  401. package/src/lib/core/ZudokuContext.ts +9 -8
  402. package/src/lib/oas/graphql/circular.ts +50 -0
  403. package/src/lib/oas/graphql/index.ts +95 -69
  404. package/src/lib/oas/parser/dereference/index.ts +1 -2
  405. package/src/lib/oas/parser/upgrade/index.ts +2 -1
  406. package/src/lib/plugins/markdown/MdxPage.tsx +9 -1
  407. package/src/lib/plugins/markdown/resolver.ts +0 -33
  408. package/src/lib/plugins/openapi/ColorizedParam.tsx +3 -3
  409. package/src/lib/plugins/openapi/Endpoint.tsx +11 -9
  410. package/src/lib/plugins/openapi/{Route.tsx → OpenApiRoute.tsx} +3 -3
  411. package/src/lib/plugins/openapi/OperationList.tsx +47 -19
  412. package/src/lib/plugins/openapi/OperationListItem.tsx +7 -4
  413. package/src/lib/plugins/openapi/ParameterListItem.tsx +3 -6
  414. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +11 -1
  415. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +2 -0
  416. package/src/lib/plugins/openapi/Sidecar.tsx +27 -34
  417. package/src/lib/plugins/openapi/SidecarBox.tsx +1 -1
  418. package/src/lib/plugins/openapi/SidecarExamples.tsx +24 -24
  419. package/src/lib/plugins/openapi/graphql/gql.ts +12 -4
  420. package/src/lib/plugins/openapi/graphql/graphql.ts +92 -45
  421. package/src/lib/plugins/openapi/index.tsx +163 -78
  422. package/src/lib/plugins/openapi/interfaces.ts +16 -12
  423. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +54 -0
  424. package/src/lib/plugins/openapi/playground/Headers.tsx +165 -36
  425. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +13 -0
  426. package/src/lib/plugins/openapi/playground/PathParams.tsx +35 -75
  427. package/src/lib/plugins/openapi/playground/Playground.tsx +251 -213
  428. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +6 -3
  429. package/src/lib/plugins/openapi/playground/QueryParams.tsx +84 -114
  430. package/src/lib/plugins/openapi/playground/SubmitButton.tsx +75 -0
  431. package/src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx +73 -0
  432. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +210 -0
  433. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +101 -0
  434. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.test.ts +64 -0
  435. package/src/lib/plugins/openapi/playground/result-panel/convertToTypes.ts +36 -0
  436. package/src/lib/plugins/openapi/post-processors/removeExtensions.test.ts +58 -0
  437. package/src/lib/plugins/openapi/post-processors/removeExtensions.ts +7 -4
  438. package/src/lib/plugins/openapi/post-processors/removeParameters.test.ts +148 -0
  439. package/src/lib/plugins/openapi/post-processors/removeParameters.ts +101 -0
  440. package/src/lib/plugins/openapi/schema/{SchemaComponents.tsx → SchemaPropertyItem.tsx} +11 -7
  441. package/src/lib/plugins/openapi/schema/SchemaView.tsx +4 -1
  442. package/src/lib/plugins/openapi/schema/utils.ts +4 -0
  443. package/src/lib/ui/Badge.tsx +1 -0
  444. package/src/lib/ui/Command.tsx +20 -0
  445. package/src/lib/ui/Input.tsx +1 -2
  446. package/src/lib/ui/Select.tsx +1 -1
  447. package/src/lib/util/MdxComponents.tsx +2 -1
  448. package/src/lib/util/joinUrl.test.ts +62 -0
  449. package/src/lib/util/joinUrl.ts +57 -0
  450. package/src/lib/util/scrollIntoViewIfNeeded.ts +18 -0
  451. package/src/lib/util/useLatest.ts +18 -0
  452. package/src/lib/util/useScrollToAnchor.ts +33 -34
  453. package/src/lib/util/useScrollToTop.ts +8 -3
  454. package/dist/lib/plugins/openapi/Route.js.map +0 -1
  455. package/dist/lib/plugins/openapi/playground/EnumSelector.d.ts +0 -8
  456. package/dist/lib/plugins/openapi/playground/EnumSelector.js +0 -21
  457. package/dist/lib/plugins/openapi/playground/EnumSelector.js.map +0 -1
  458. package/dist/lib/plugins/openapi/playground/ResponseTab.d.ts +0 -4
  459. package/dist/lib/plugins/openapi/playground/ResponseTab.js +0 -42
  460. package/dist/lib/plugins/openapi/playground/ResponseTab.js.map +0 -1
  461. package/dist/lib/plugins/openapi/schema/SchemaComponents.js.map +0 -1
  462. package/dist/vite/prerender.js +0 -89
  463. package/dist/vite/prerender.js.map +0 -1
  464. package/lib/AnchorLink-DFZZbmvr.js +0 -34
  465. package/lib/AnchorLink-DFZZbmvr.js.map +0 -1
  466. package/lib/Button-DeAoTouo.js.map +0 -1
  467. package/lib/Command-9x_kZHr4.js +0 -611
  468. package/lib/Command-9x_kZHr4.js.map +0 -1
  469. package/lib/Markdown-CZDLNOFc.js.map +0 -1
  470. package/lib/MdxPage-DKMbBROv.js.map +0 -1
  471. package/lib/OperationList-DFa3DqhW.js +0 -5143
  472. package/lib/OperationList-DFa3DqhW.js.map +0 -1
  473. package/lib/Route-DYwKZ_c_.js +0 -35
  474. package/lib/Route-DYwKZ_c_.js.map +0 -1
  475. package/lib/Select-B_IxRUUC.js +0 -223
  476. package/lib/Select-B_IxRUUC.js.map +0 -1
  477. package/lib/Spinner-DuxJLLNE.js +0 -7
  478. package/lib/Spinner-DuxJLLNE.js.map +0 -1
  479. package/lib/StaggeredRender-DgsamH_G.js +0 -17
  480. package/lib/StaggeredRender-DgsamH_G.js.map +0 -1
  481. package/lib/SyntaxHighlight-Bz-lOJtH.js.map +0 -1
  482. package/lib/ZudokuContext-hmLMUdf2.js +0 -1217
  483. package/lib/ZudokuContext-hmLMUdf2.js.map +0 -1
  484. package/lib/__vite-browser-external-BYRIRx8p.js +0 -9
  485. package/lib/__vite-browser-external-BYRIRx8p.js.map +0 -1
  486. package/lib/chunk-D52XG6IA-Dl7HLe6j.js.map +0 -1
  487. package/lib/context-h_UkBLvr.js +0 -22
  488. package/lib/createServer-BznDkeSA.js.map +0 -1
  489. package/lib/hook-CHq7pFyz.js +0 -227
  490. package/lib/hook-CHq7pFyz.js.map +0 -1
  491. package/lib/index-Bn6Lc9tq.js +0 -9
  492. package/lib/index-Bn6Lc9tq.js.map +0 -1
  493. package/lib/index-CBXSgjaE.js.map +0 -1
  494. package/lib/index-CPNSgwSb.js +0 -36
  495. package/lib/index-PqKef_jH.js +0 -1292
  496. package/lib/index-PqKef_jH.js.map +0 -1
  497. package/lib/index-TaRXY2w1.js +0 -43
  498. package/lib/index-TaRXY2w1.js.map +0 -1
  499. package/lib/index.esm-BnnBRKJX.js +0 -1214
  500. package/lib/index.esm-BnnBRKJX.js.map +0 -1
  501. package/lib/state-CFQsUZUP.js +0 -202
  502. package/lib/state-CFQsUZUP.js.map +0 -1
  503. package/src/lib/plugins/openapi/playground/EnumSelector.tsx +0 -86
  504. package/src/lib/plugins/openapi/playground/ResponseTab.tsx +0 -76
  505. /package/dist/lib/plugins/openapi/schema/{SchemaComponents.d.ts → SchemaPropertyItem.d.ts} +0 -0
@@ -1,6 +1,12 @@
1
1
  import { useMutation } from "@tanstack/react-query";
2
+ import { InfoIcon } from "lucide-react";
2
3
  import { Fragment, useEffect, useRef, useTransition } from "react";
3
4
  import { FormProvider, useForm } from "react-hook-form";
5
+ import { Alert, AlertDescription, AlertTitle } from "zudoku/ui/Alert.js";
6
+ import { PathRenderer } from "../../../components/PathRenderer.js";
7
+
8
+ import { Label } from "zudoku/ui/Label.js";
9
+ import { RadioGroup, RadioGroupItem } from "zudoku/ui/RadioGroup.js";
4
10
  import {
5
11
  Select,
6
12
  SelectContent,
@@ -8,39 +14,33 @@ import {
8
14
  SelectTrigger,
9
15
  SelectValue,
10
16
  } from "zudoku/ui/Select.js";
11
- import { useSelectedServerStore } from "../../../authentication/state.js";
17
+ import { Textarea } from "zudoku/ui/Textarea.js";
18
+ import { useSelectedServer } from "../../../authentication/state.js";
12
19
  import { useApiIdentities } from "../../../components/context/ZudokuContext.js";
13
- import { Spinner } from "../../../components/Spinner.js";
14
- import { Button } from "../../../ui/Button.js";
15
- import { Callout } from "../../../ui/Callout.js";
16
- import { Card, CardContent, CardHeader, CardTitle } from "../../../ui/Card.js";
20
+ import { Card } from "../../../ui/Card.js";
17
21
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../../ui/Tabs.js";
22
+ import { cn } from "../../../util/cn.js";
18
23
  import { ColorizedParam } from "../ColorizedParam.js";
24
+ import { Content } from "../SidecarExamples.js";
19
25
  import { createUrl } from "./createUrl.js";
26
+ import ExamplesDropdown from "./ExamplesDropdown.js";
20
27
  import { Headers } from "./Headers.js";
21
28
  import { PathParams } from "./PathParams.js";
22
29
  import { QueryParams } from "./QueryParams.js";
23
- import { ResponseTab } from "./ResponseTab.js";
30
+ import { ResultPanel } from "./result-panel/ResultPanel.js";
31
+ import SubmitButton from "./SubmitButton.js";
24
32
 
25
33
  export const NO_IDENTITY = "__none";
26
34
 
27
- const statusCodeMap: Record<number, string> = {
28
- 200: "OK",
29
- 201: "Created",
30
- 202: "Accepted",
31
- 204: "No Content",
32
- 400: "Bad Request",
33
- 401: "Unauthorized",
34
- 403: "Forbidden",
35
- 404: "Not Found",
36
- 405: "Method Not Allowed",
37
- 500: "Internal Server Error",
38
- };
39
-
40
35
  export type Header = {
41
36
  name: string;
42
37
  defaultValue?: string;
38
+ defaultActive?: boolean;
39
+ isRequired?: boolean;
40
+ enum?: string[];
41
+ type?: string;
43
42
  };
43
+
44
44
  export type QueryParam = {
45
45
  name: string;
46
46
  defaultValue?: string;
@@ -67,10 +67,26 @@ export type PlaygroundForm = {
67
67
  headers: Array<{
68
68
  name: string;
69
69
  value: string;
70
+ active: boolean;
71
+ enum?: string[];
70
72
  }>;
71
73
  identity?: string;
72
74
  };
73
75
 
76
+ export type PlaygroundResult = {
77
+ status: number;
78
+ headers: Array<[string, string]>;
79
+ size: number;
80
+ body: string;
81
+ time: number;
82
+ request: {
83
+ method: string;
84
+ url: string;
85
+ headers: Array<[string, string]>;
86
+ body?: string;
87
+ };
88
+ };
89
+
74
90
  export type PlaygroundContentProps = {
75
91
  server: string;
76
92
  servers?: string[];
@@ -80,38 +96,60 @@ export type PlaygroundContentProps = {
80
96
  queryParams?: QueryParam[];
81
97
  pathParams?: PathParam[];
82
98
  defaultBody?: string;
99
+ examples?: Content;
83
100
  };
84
101
 
85
102
  export const Playground = ({
86
103
  server,
87
- servers,
104
+ servers = [],
88
105
  url,
89
106
  method,
90
107
  headers = [],
91
108
  queryParams = [],
92
109
  pathParams = [],
93
110
  defaultBody = "",
111
+ examples,
94
112
  }: PlaygroundContentProps) => {
95
- const { selectedServer, setSelectedServer } = useSelectedServerStore();
113
+ const { selectedServer, setSelectedServer } = useSelectedServer(
114
+ servers.map((server) => ({ url: server })),
115
+ );
96
116
  const [, startTransition] = useTransition();
97
117
  const { register, control, handleSubmit, watch, setValue, ...form } =
98
118
  useForm<PlaygroundForm>({
99
119
  defaultValues: {
100
120
  body: defaultBody,
101
- queryParams: queryParams.map((param) => ({
102
- name: param.name,
103
- value: param.defaultValue ?? "",
104
- active: param.defaultActive ?? false,
105
- enum: param.enum ?? [],
106
- })),
121
+ queryParams: queryParams
122
+ .map((param) => ({
123
+ name: param.name,
124
+ value: param.defaultValue ?? "",
125
+ active: param.defaultActive ?? false,
126
+ enum: param.enum ?? [],
127
+ }))
128
+ .concat([
129
+ {
130
+ name: "",
131
+ value: "",
132
+ active: false,
133
+ enum: [],
134
+ },
135
+ ]),
107
136
  pathParams: pathParams.map((param) => ({
108
137
  name: param.name,
109
138
  value: param.defaultValue ?? "",
110
139
  })),
111
- headers: headers.map((header) => ({
112
- name: header.name,
113
- value: header.defaultValue ?? "",
114
- })),
140
+ headers: headers
141
+ .map((header) => ({
142
+ name: header.name,
143
+ value: header.defaultValue ?? "",
144
+ active: header.defaultActive ?? false,
145
+ }))
146
+ .concat([
147
+ {
148
+ name: "",
149
+ value: "",
150
+ active: false,
151
+ },
152
+ ]),
115
153
  identity: NO_IDENTITY,
116
154
  },
117
155
  });
@@ -128,20 +166,23 @@ export const Playground = ({
128
166
  }
129
167
  }, [setValue, identities.data]);
130
168
 
169
+ const formRef = useRef<HTMLFormElement>(null);
170
+
131
171
  const queryMutation = useMutation({
132
172
  mutationFn: async (data: PlaygroundForm) => {
133
- const requestUrl = createUrl(selectedServer ?? server, url, data);
134
173
  const start = performance.now();
135
-
136
- const request = new Request(requestUrl, {
137
- method: method.toUpperCase(),
138
- headers: Object.fromEntries(
139
- data.headers
140
- .filter((h) => h.name)
141
- .map((header) => [header.name, header.value]),
142
- ),
143
- body: data.body ? data.body : undefined,
144
- });
174
+ const request = new Request(
175
+ createUrl(selectedServer ?? server, url, data),
176
+ {
177
+ method: method.toUpperCase(),
178
+ headers: Object.fromEntries(
179
+ data.headers
180
+ .filter((h) => h.name && h.active)
181
+ .map((header) => [header.name, header.value]),
182
+ ),
183
+ body: data.body ? data.body : undefined,
184
+ },
185
+ );
145
186
 
146
187
  if (data.identity !== NO_IDENTITY) {
147
188
  identities.data
@@ -157,13 +198,25 @@ export const Playground = ({
157
198
 
158
199
  const body = await response.text();
159
200
 
201
+ const url = new URL(request.url);
202
+
160
203
  return {
161
204
  status: response.status,
162
- headers: response.headers,
205
+ headers: Array.from(response.headers.entries()),
163
206
  size: body.length,
164
207
  body,
165
208
  time,
166
- };
209
+ request: {
210
+ method: request.method.toUpperCase(),
211
+ url: request.url,
212
+ headers: [
213
+ ["Host", url.host],
214
+ ["User-Agent", "Zudoku Playground"],
215
+ ...Array.from(request.headers.entries()),
216
+ ],
217
+ body: data.body ? data.body : undefined,
218
+ },
219
+ } satisfies PlaygroundResult;
167
220
  } catch (error) {
168
221
  if (error instanceof TypeError) {
169
222
  throw new Error(
@@ -176,38 +229,27 @@ export const Playground = ({
176
229
  },
177
230
  });
178
231
 
179
- const path = url.split("/").map((part, i, arr) => {
180
- const isPathParam =
181
- (part.startsWith("{") && part.endsWith("}")) || part.startsWith(":");
182
- const replaced = part.replace(/[:{}]/g, "");
183
- const value = formState.pathParams.find((p) => p.name === replaced)?.value;
184
-
185
- const pathParamValue = (
186
- <ColorizedParam
187
- backgroundOpacity="25%"
188
- name={part}
189
- slug={part}
190
- title={
191
- !value
192
- ? `Missing value for path parameter \`${replaced}\``
193
- : undefined
194
- }
195
- >
196
- {value ? encodeURIComponent(value) : part}
197
- </ColorizedParam>
198
- );
232
+ const path = (
233
+ <PathRenderer
234
+ path={url}
235
+ renderParam={({ name, originalValue, index }) => {
236
+ const formValue = formState.pathParams.find(
237
+ (param) => param.name === name,
238
+ )?.value;
199
239
 
200
- return (
201
- // eslint-disable-next-line react/no-array-index-key
202
- <Fragment key={part + i}>
203
- {isPathParam ? pathParamValue : part}
204
- {i < arr.length - 1 && "/"}
205
- <wbr />
206
- </Fragment>
207
- );
208
- });
209
-
210
- const headerEntries = Array.from(queryMutation.data?.headers.entries() ?? []);
240
+ return (
241
+ <ColorizedParam
242
+ name={name}
243
+ backgroundOpacity="0"
244
+ slug={name}
245
+ onClick={() => form.setFocus(`pathParams.${index}.value`)}
246
+ >
247
+ {formValue || originalValue}
248
+ </ColorizedParam>
249
+ );
250
+ }}
251
+ />
252
+ );
211
253
 
212
254
  const urlQueryParams = formState.queryParams
213
255
  .filter((p) => p.active)
@@ -224,11 +266,10 @@ export const Playground = ({
224
266
  {servers && servers.length > 1 ? (
225
267
  <Select
226
268
  onValueChange={(value) => {
227
- startTransition(() => {
228
- setSelectedServer(value);
229
- });
269
+ startTransition(() => setSelectedServer(value));
230
270
  }}
231
271
  value={selectedServer}
272
+ defaultValue={selectedServer}
232
273
  >
233
274
  <SelectTrigger className="p-0 border-none flex-row-reverse bg-transparent text-xs gap-0.5 h-auto">
234
275
  <SelectValue />
@@ -251,76 +292,58 @@ export const Playground = ({
251
292
  <FormProvider
252
293
  {...{ register, control, handleSubmit, watch, setValue, ...form }}
253
294
  >
254
- <form onSubmit={handleSubmit((data) => queryMutation.mutateAsync(data))}>
255
- <div className="grid grid-cols-[8fr_7fr] text-sm h-full">
295
+ <form
296
+ onSubmit={handleSubmit((data) => queryMutation.mutateAsync(data))}
297
+ ref={formRef}
298
+ >
299
+ <div className="grid grid-cols-2 text-sm h-full">
256
300
  <div className="flex flex-col gap-4 p-4 after:bg-muted-foreground/20 relative after:absolute after:w-px after:inset-0 after:left-auto">
257
301
  <div className="flex gap-2 items-stretch">
258
302
  <div className="flex flex-1 items-center w-full border rounded-md">
259
- <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono">
303
+ <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center">
260
304
  {method.toUpperCase()}
261
305
  </div>
262
- <div className="flex items-center flex-wrap p-2 font-mono text-xs">
306
+ <div className="items-center p-2 font-mono text-xs break-words">
263
307
  {serverSelect}
264
308
  {path}
265
309
  {urlQueryParams.length > 0 ? "?" : ""}
266
310
  {urlQueryParams}
267
311
  </div>
268
312
  </div>
269
- <Button type="submit" className="h-auto flex gap-1">
270
- Send
271
- </Button>
313
+
314
+ <SubmitButton
315
+ identities={identities.data ?? []}
316
+ formRef={formRef}
317
+ disabled={form.formState.isSubmitting}
318
+ />
272
319
  </div>
273
- <Tabs
274
- defaultValue={
275
- queryParams.length + pathParams.length > 0
276
- ? "parameters"
277
- : "headers"
278
- }
279
- >
320
+ <Tabs defaultValue="parameters">
280
321
  <div className="flex flex-wrap gap-1 justify-between">
281
322
  <TabsList>
282
- {queryParams.length + pathParams.length > 0 && (
283
- <TabsTrigger value="parameters">Parameters</TabsTrigger>
284
- )}
323
+ <TabsTrigger value="parameters">
324
+ Parameters
325
+ {(formState.pathParams.some((p) => p.value !== "") ||
326
+ formState.queryParams.some((p) => p.active)) && (
327
+ <div className="w-2 h-2 rounded-full bg-blue-400 ml-2" />
328
+ )}
329
+ </TabsTrigger>
285
330
  <TabsTrigger value="headers">
286
- Headers{" "}
287
- {formState.headers.length > 0 &&
288
- `(${formState.headers.length})`}
331
+ Headers
332
+ {formState.headers.filter((h) => h.active).length > 0 && (
333
+ <div className="w-2 h-2 rounded-full bg-blue-400 ml-2" />
334
+ )}
289
335
  </TabsTrigger>
290
- <TabsTrigger
291
- value="body"
292
- disabled={
293
- !["POST", "PUT", "PATCH", "DELETE"].includes(
294
- method.toUpperCase(),
295
- )
296
- }
297
- >
298
- Body
336
+ <TabsTrigger value="auth">
337
+ Auth
338
+ {formState.identity !== NO_IDENTITY && (
339
+ <div className="w-2 h-2 rounded-full bg-blue-400 ml-2" />
340
+ )}
299
341
  </TabsTrigger>
342
+ <TabsTrigger value="body">Body</TabsTrigger>
300
343
  </TabsList>
301
- <div className="flex gap-2 items-center">
302
- Auth:
303
- <Select
304
- onValueChange={(value) => setValue("identity", value)}
305
- value={formState.identity}
306
- defaultValue={formState.identity}
307
- >
308
- <SelectTrigger className="w-[180px] flex">
309
- {identities.isPending ? <Spinner /> : <SelectValue />}
310
- </SelectTrigger>
311
- <SelectContent align="center">
312
- <SelectItem value={NO_IDENTITY}>None</SelectItem>
313
- {identities.data?.map((identity) => (
314
- <SelectItem key={identity.id} value={identity.id}>
315
- {identity.label}
316
- </SelectItem>
317
- ))}
318
- </SelectContent>
319
- </Select>
320
- </div>
321
344
  </div>
322
345
  <TabsContent value="headers">
323
- <Headers control={control} register={register} />
346
+ <Headers control={control} headers={headers} />
324
347
  </TabsContent>
325
348
  <TabsContent value="parameters">
326
349
  {pathParams.length > 0 && (
@@ -329,99 +352,114 @@ export const Playground = ({
329
352
  <PathParams control={control} />
330
353
  </div>
331
354
  )}
332
- {queryParams.length > 0 && (
333
- <div className="flex flex-col gap-4 my-4">
334
- <span className="font-semibold">Query Parameters</span>
335
- <QueryParams control={control} queryParams={queryParams} />
336
- </div>
337
- )}
355
+ <div className="flex flex-col gap-4 my-4">
356
+ <span className="font-semibold">Query Parameters</span>
357
+ <QueryParams control={control} queryParams={queryParams} />
358
+ </div>
338
359
  </TabsContent>
339
360
  <TabsContent value="body">
340
- <textarea
361
+ {!["POST", "PUT", "PATCH", "DELETE"].includes(
362
+ method.toUpperCase(),
363
+ ) && (
364
+ <Alert className="mb-2">
365
+ <InfoIcon className="w-4 h-4" />
366
+ <AlertTitle>Body</AlertTitle>
367
+ <AlertDescription>
368
+ Body is only supported for POST, PUT, PATCH, and DELETE
369
+ requests
370
+ </AlertDescription>
371
+ </Alert>
372
+ )}
373
+ <Textarea
341
374
  {...register("body")}
342
- className="border w-full rounded p-2 bg-muted h-40"
375
+ className={cn(
376
+ "border w-full rounded-lg p-2 bg-muted h-40 font-mono",
377
+ !["POST", "PUT", "PATCH", "DELETE"].includes(
378
+ method.toUpperCase(),
379
+ ) && "h-20",
380
+ )}
381
+ placeholder={
382
+ !["POST", "PUT", "PATCH", "DELETE"].includes(
383
+ method.toUpperCase(),
384
+ )
385
+ ? "This request does not support a body"
386
+ : undefined
387
+ }
388
+ disabled={
389
+ !["POST", "PUT", "PATCH", "DELETE"].includes(
390
+ method.toUpperCase(),
391
+ )
392
+ }
343
393
  />
344
- </TabsContent>
345
- </Tabs>
346
- </div>
347
- <div className="min-w-0 p-8 bg-muted/70">
348
- {queryMutation.error ? (
349
- <div className="flex flex-col gap-2">
350
- {formState.pathParams.some((p) => p.value === "") && (
351
- <Callout type="caution">
352
- Some path parameters are missing values. Please fill them in
353
- to ensure the request is sent correctly.
354
- </Callout>
394
+ {examples && (
395
+ <ExamplesDropdown
396
+ examples={examples}
397
+ onSelect={(example) =>
398
+ setValue("body", JSON.stringify(example.value, null, 2))
399
+ }
400
+ />
355
401
  )}
356
- <Card>
357
- <CardHeader>
358
- <CardTitle>Request failed</CardTitle>
359
- </CardHeader>
360
- <CardContent>
361
- Error:{" "}
362
- {queryMutation.error.message ||
363
- String(queryMutation.error) ||
364
- "Unexpected error"}
365
- </CardContent>
366
- </Card>
367
- </div>
368
- ) : queryMutation.data ? (
369
- <div className="flex flex-col gap-2">
370
- <div className="flex gap-2">
371
- <div className="flex text-xs gap-6">
372
- <div>
373
- Status: {queryMutation.data.status}{" "}
374
- {statusCodeMap[queryMutation.data.status] ?? ""}
375
- </div>
376
- <div>Time: {queryMutation.data.time.toFixed(0)}ms</div>
377
- <div>Size: {queryMutation.data.size} B</div>
402
+ </TabsContent>
403
+ <TabsContent value="auth">
404
+ <div className="flex flex-col gap-4 my-4">
405
+ {identities.data?.length === 0 && (
406
+ <Alert>
407
+ <InfoIcon className="w-4 h-4" />
408
+ <AlertTitle>Authentication</AlertTitle>
409
+ <AlertDescription>
410
+ No identities found. Please create an identity first.
411
+ </AlertDescription>
412
+ </Alert>
413
+ )}
414
+ <div className="flex flex-col items-center gap-2">
415
+ <Card className="w-full overflow-hidden">
416
+ <RadioGroup
417
+ onValueChange={(value) => setValue("identity", value)}
418
+ value={formState.identity}
419
+ defaultValue={formState.identity}
420
+ className="gap-0"
421
+ disabled={identities.data?.length === 0}
422
+ >
423
+ <Label
424
+ className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
425
+ htmlFor="none"
426
+ >
427
+ <RadioGroupItem value={NO_IDENTITY} id="none">
428
+ None
429
+ </RadioGroupItem>
430
+ <Label htmlFor="none" className="ml-2">
431
+ None
432
+ </Label>
433
+ </Label>
434
+ {identities.data?.map((identity) => (
435
+ <Label
436
+ key={identity.id}
437
+ className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
438
+ >
439
+ <RadioGroupItem
440
+ value={identity.id}
441
+ id={identity.id}
442
+ >
443
+ {identity.label}
444
+ </RadioGroupItem>
445
+ <Label htmlFor={identity.id} className="ml-2">
446
+ {identity.label}
447
+ </Label>
448
+ </Label>
449
+ ))}
450
+ </RadioGroup>
451
+ </Card>
378
452
  </div>
379
453
  </div>
380
- <Tabs defaultValue="response">
381
- <TabsList>
382
- <TabsTrigger value="response">Response</TabsTrigger>
383
- <TabsTrigger value="headers">
384
- {headerEntries.length
385
- ? `Headers (${headerEntries.length})`
386
- : "No headers"}
387
- </TabsTrigger>
388
- </TabsList>
389
-
390
- <TabsContent value="response">
391
- <ResponseTab
392
- headers={queryMutation.data.headers}
393
- body={queryMutation.data.body}
394
- />
395
- </TabsContent>
396
- <TabsContent value="headers">
397
- <Card
398
- // playground dialog has h-5/6 ≈ 83.333vh
399
- className="max-h-[calc(83.333vh-140px)] overflow-y-auto grid grid-cols-2 w-full gap-2.5 font-mono text-xs shadow-none p-4"
400
- >
401
- <div className="font-semibold">Key</div>
402
- <div className="font-semibold">Value</div>
403
- {headerEntries.map(([key, value]) => (
404
- <Fragment key={key}>
405
- <div>{key}</div>
406
- <div className="break-words">{value}</div>
407
- </Fragment>
408
- ))}
409
- </Card>
410
- </TabsContent>
411
- </Tabs>
412
- </div>
413
- ) : (
414
- <div className="grid place-items-center h-full">
415
- <span className="text-[16px] font-semibold text-muted-foreground">
416
- {queryMutation.isPending ? (
417
- <Spinner />
418
- ) : (
419
- "Send a request first to see the response here"
420
- )}
421
- </span>
422
- </div>
423
- )}
454
+ </TabsContent>
455
+ </Tabs>
424
456
  </div>
457
+ <ResultPanel
458
+ queryMutation={queryMutation}
459
+ showPathParamsWarning={formState.pathParams.some(
460
+ (p) => p.value === "",
461
+ )}
462
+ />
425
463
  </div>
426
464
  </form>
427
465
  </FormProvider>
@@ -39,15 +39,18 @@ const PlaygroundDialog = (props: PlaygroundDialogProps) => {
39
39
  <Dialog onOpenChange={(open) => setOpen(open)}>
40
40
  <DialogTrigger asChild>
41
41
  {props.children ?? (
42
- <button className="flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-sm hover:bg-primary/80">
42
+ <button
43
+ type="button"
44
+ className="flex gap-1 items-center px-2 py-1 rounded-md transition text-xs bg-primary text-primary-foreground shadow-sm hover:bg-primary/80"
45
+ >
43
46
  Test
44
- <HeroPlayIcon className="" size={14} />
47
+ <HeroPlayIcon size={14} />
45
48
  </button>
46
49
  )}
47
50
  </DialogTrigger>
48
51
 
49
52
  <DialogContent
50
- className="max-w-screen-xl w-full h-5/6 overflow-auto p-0"
53
+ className="max-w-screen-xl w-full h-5/6 overflow-hidden p-0"
51
54
  aria-describedby={undefined}
52
55
  >
53
56
  <VisuallyHidden>