zudoku 0.64.1 → 0.65.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. package/dist/app/main.d.ts +91 -1
  2. package/dist/app/main.js +5 -1
  3. package/dist/app/main.js.map +1 -1
  4. package/dist/config/config.d.ts +15 -46
  5. package/dist/config/validators/InputNavigationSchema.d.ts +61 -61
  6. package/dist/config/validators/NavigationSchema.js +2 -4
  7. package/dist/config/validators/NavigationSchema.js.map +1 -1
  8. package/dist/config/validators/ProtectedRoutesSchema.d.ts +1 -1
  9. package/dist/config/validators/validate.d.ts +158 -2
  10. package/dist/config/validators/validate.js +37 -0
  11. package/dist/config/validators/validate.js.map +1 -1
  12. package/dist/config/validators/validate.test.js +43 -0
  13. package/dist/config/validators/validate.test.js.map +1 -1
  14. package/dist/flat-config.d.ts +22 -0
  15. package/dist/lib/auth/issuer.js +3 -0
  16. package/dist/lib/auth/issuer.js.map +1 -1
  17. package/dist/lib/authentication/authentication.d.ts +1 -1
  18. package/dist/lib/authentication/providers/auth0.js +6 -1
  19. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  20. package/dist/lib/authentication/providers/firebase.d.ts +4 -0
  21. package/dist/lib/authentication/providers/firebase.js +215 -0
  22. package/dist/lib/authentication/providers/firebase.js.map +1 -0
  23. package/dist/lib/authentication/providers/supabase.js +1 -6
  24. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  25. package/dist/lib/authentication/ui/ZudokuAuthUi.d.ts +24 -0
  26. package/dist/lib/authentication/ui/ZudokuAuthUi.js +124 -0
  27. package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -0
  28. package/dist/lib/authentication/ui/icons/Apple.d.ts +3 -0
  29. package/dist/lib/authentication/ui/icons/Apple.js +4 -0
  30. package/dist/lib/authentication/ui/icons/Apple.js.map +1 -0
  31. package/dist/lib/authentication/ui/icons/Facebook.d.ts +3 -0
  32. package/dist/lib/authentication/ui/icons/Facebook.js +4 -0
  33. package/dist/lib/authentication/ui/icons/Facebook.js.map +1 -0
  34. package/dist/lib/authentication/ui/icons/Github.d.ts +3 -0
  35. package/dist/lib/authentication/ui/icons/Github.js +4 -0
  36. package/dist/lib/authentication/ui/icons/Github.js.map +1 -0
  37. package/dist/lib/authentication/ui/icons/Google.d.ts +3 -0
  38. package/dist/lib/authentication/ui/icons/Google.js +4 -0
  39. package/dist/lib/authentication/ui/icons/Google.js.map +1 -0
  40. package/dist/lib/authentication/ui/icons/Microsoft.d.ts +3 -0
  41. package/dist/lib/authentication/ui/icons/Microsoft.js +4 -0
  42. package/dist/lib/authentication/ui/icons/Microsoft.js.map +1 -0
  43. package/dist/lib/authentication/ui/icons/X.d.ts +3 -0
  44. package/dist/lib/authentication/ui/icons/X.js +4 -0
  45. package/dist/lib/authentication/ui/icons/X.js.map +1 -0
  46. package/dist/lib/components/Autocomplete.d.ts +3 -1
  47. package/dist/lib/components/Autocomplete.js +6 -2
  48. package/dist/lib/components/Autocomplete.js.map +1 -1
  49. package/dist/lib/components/Heading.d.ts +1 -1
  50. package/dist/lib/components/Layout.js +3 -2
  51. package/dist/lib/components/Layout.js.map +1 -1
  52. package/dist/lib/components/navigation/NavigationItem.js +2 -2
  53. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  54. package/dist/lib/core/RouteGuard.js +6 -6
  55. package/dist/lib/core/RouteGuard.js.map +1 -1
  56. package/dist/lib/errors/ErrorAlert.js +1 -1
  57. package/dist/lib/errors/RouterError.d.ts +3 -1
  58. package/dist/lib/errors/RouterError.js +3 -2
  59. package/dist/lib/errors/RouterError.js.map +1 -1
  60. package/dist/lib/oas/parser/index.js +7 -3
  61. package/dist/lib/oas/parser/index.js.map +1 -1
  62. package/dist/lib/plugins/api-keys/ProtectedRoute.js +4 -1
  63. package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -1
  64. package/dist/lib/plugins/openapi/CollapsibleCode.d.ts +1 -0
  65. package/dist/lib/plugins/openapi/CollapsibleCode.js +2 -1
  66. package/dist/lib/plugins/openapi/CollapsibleCode.js.map +1 -1
  67. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.d.ts +5 -0
  68. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js +10 -0
  69. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js.map +1 -0
  70. package/dist/lib/plugins/openapi/OperationList.js +5 -1
  71. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  72. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  73. package/dist/lib/plugins/openapi/OperationListItem.js +3 -2
  74. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  75. package/dist/lib/plugins/openapi/ParameterList.js +7 -4
  76. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  77. package/dist/lib/plugins/openapi/ParameterListItem.js +17 -6
  78. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  79. package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +9 -2
  80. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +5 -2
  81. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  82. package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +3 -2
  83. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +25 -4
  84. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  85. package/dist/lib/plugins/openapi/Sidecar.d.ts +2 -2
  86. package/dist/lib/plugins/openapi/Sidecar.js +53 -26
  87. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  88. package/dist/lib/plugins/openapi/SidecarBox.js +4 -4
  89. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  90. package/dist/lib/plugins/openapi/SidecarExamples.d.ts +9 -2
  91. package/dist/lib/plugins/openapi/SidecarExamples.js +24 -43
  92. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  93. package/dist/lib/plugins/openapi/components/ConstValue.js +1 -1
  94. package/dist/lib/plugins/openapi/components/ConstValue.js.map +1 -1
  95. package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
  96. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
  97. package/dist/lib/plugins/openapi/components/NonHighlightedCode.d.ts +4 -0
  98. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js +5 -0
  99. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js.map +1 -0
  100. package/dist/lib/plugins/openapi/components/ResponseContent.js +5 -6
  101. package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -1
  102. package/dist/lib/plugins/openapi/interfaces.d.ts +13 -0
  103. package/dist/lib/plugins/openapi/playground/BodyPanel.js +67 -15
  104. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  105. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +2 -2
  106. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -1
  107. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -1
  108. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  109. package/dist/lib/plugins/openapi/playground/Headers.js +23 -83
  110. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  111. package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +10 -2
  112. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +8 -1
  113. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  114. package/dist/lib/plugins/openapi/playground/PathParams.js +2 -3
  115. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  116. package/dist/lib/plugins/openapi/playground/Playground.d.ts +7 -0
  117. package/dist/lib/plugins/openapi/playground/Playground.js +56 -28
  118. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  119. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +3 -2
  120. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  121. package/dist/lib/plugins/openapi/playground/QueryParams.js +16 -40
  122. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  123. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.d.ts +8 -0
  124. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js +19 -0
  125. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js.map +1 -0
  126. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +1 -1
  127. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -1
  128. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.d.ts +1 -0
  129. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js +540 -0
  130. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js.map +1 -0
  131. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.d.ts +40 -0
  132. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js +205 -0
  133. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js.map +1 -0
  134. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +2 -2
  135. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  136. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +1 -1
  137. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  138. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +17 -8
  139. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  140. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -1
  141. package/dist/lib/plugins/openapi/schema/SchemaView.js +20 -13
  142. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  143. package/dist/lib/plugins/openapi/schema/UnionView.js +2 -5
  144. package/dist/lib/plugins/openapi/schema/UnionView.js.map +1 -1
  145. package/dist/lib/plugins/openapi/schema/union-helpers.js +0 -1
  146. package/dist/lib/plugins/openapi/schema/union-helpers.js.map +1 -1
  147. package/dist/lib/plugins/openapi/util/generateSchemaExample.js +5 -14
  148. package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
  149. package/dist/lib/ui/Badge.d.ts +3 -3
  150. package/dist/lib/ui/Badge.js +9 -7
  151. package/dist/lib/ui/Badge.js.map +1 -1
  152. package/dist/lib/ui/Button.d.ts +1 -1
  153. package/dist/lib/ui/Button.js +1 -0
  154. package/dist/lib/ui/Button.js.map +1 -1
  155. package/dist/lib/ui/Checkbox.d.ts +2 -2
  156. package/dist/lib/ui/Checkbox.js +4 -4
  157. package/dist/lib/ui/Checkbox.js.map +1 -1
  158. package/dist/lib/ui/CodeBlock.d.ts +0 -1
  159. package/dist/lib/ui/CodeBlock.js +1 -1
  160. package/dist/lib/ui/CodeBlock.js.map +1 -1
  161. package/dist/lib/ui/Collapsible.d.ts +4 -4
  162. package/dist/lib/ui/Collapsible.js +11 -4
  163. package/dist/lib/ui/Collapsible.js.map +1 -1
  164. package/dist/lib/ui/Command.d.ts +3 -3
  165. package/dist/lib/ui/EmbeddedCodeBlock.d.ts +0 -1
  166. package/dist/lib/ui/EmbeddedCodeBlock.js +3 -2
  167. package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  168. package/dist/lib/ui/Frame.d.ts +8 -0
  169. package/dist/lib/ui/Frame.js +22 -0
  170. package/dist/lib/ui/Frame.js.map +1 -0
  171. package/dist/lib/ui/Item.d.ts +23 -0
  172. package/dist/lib/ui/Item.js +67 -0
  173. package/dist/lib/ui/Item.js.map +1 -0
  174. package/dist/lib/ui/NativeSelect.d.ts +5 -0
  175. package/dist/lib/ui/NativeSelect.js +14 -0
  176. package/dist/lib/ui/NativeSelect.js.map +1 -0
  177. package/dist/lib/ui/Select.d.ts +13 -11
  178. package/dist/lib/ui/Select.js +34 -23
  179. package/dist/lib/ui/Select.js.map +1 -1
  180. package/dist/lib/ui/Separator.d.ts +4 -0
  181. package/dist/lib/ui/Separator.js +8 -0
  182. package/dist/lib/ui/Separator.js.map +1 -0
  183. package/dist/lib/ui/Tooltip.d.ts +7 -7
  184. package/dist/lib/ui/Tooltip.js +16 -10
  185. package/dist/lib/ui/Tooltip.js.map +1 -1
  186. package/dist/lib/util/createVariantComponent.d.ts +5 -2
  187. package/dist/lib/util/createVariantComponent.js +5 -2
  188. package/dist/lib/util/createVariantComponent.js.map +1 -1
  189. package/dist/lib/util/flattenAllOf.d.ts +4 -0
  190. package/dist/lib/util/flattenAllOf.js +65 -0
  191. package/dist/lib/util/flattenAllOf.js.map +1 -0
  192. package/dist/lib/util/flattenAllOf.test.d.ts +1 -0
  193. package/dist/lib/util/flattenAllOf.test.js +532 -0
  194. package/dist/lib/util/flattenAllOf.test.js.map +1 -0
  195. package/dist/lib/util/readFrontmatter.d.ts +6 -0
  196. package/dist/lib/util/readFrontmatter.js +12 -0
  197. package/dist/lib/util/readFrontmatter.js.map +1 -0
  198. package/dist/vite/api/SchemaManager.js +6 -18
  199. package/dist/vite/api/SchemaManager.js.map +1 -1
  200. package/dist/vite/mdx/remark-last-modified.js +57 -3
  201. package/dist/vite/mdx/remark-last-modified.js.map +1 -1
  202. package/dist/vite/plugin-api.js +2 -2
  203. package/dist/vite/plugin-api.js.map +1 -1
  204. package/dist/vite/plugin-frontmatter.js +3 -5
  205. package/dist/vite/plugin-frontmatter.js.map +1 -1
  206. package/dist/vite/plugin-markdown-export.js +3 -4
  207. package/dist/vite/plugin-markdown-export.js.map +1 -1
  208. package/dist/vite/plugin-theme.js +10 -1
  209. package/dist/vite/plugin-theme.js.map +1 -1
  210. package/lib/{Button-DmS4u8Lj.js → Button-B3ucvvQw.js} +7 -6
  211. package/lib/Button-B3ucvvQw.js.map +1 -0
  212. package/lib/{ErrorAlert-DE3Sf66a.js → ErrorAlert-BOVgwTRP.js} +2832 -2857
  213. package/lib/ErrorAlert-BOVgwTRP.js.map +1 -0
  214. package/lib/{MdxPage-DZfeC0QY.js → MdxPage-CBYFyqUs.js} +6 -6
  215. package/lib/{MdxPage-DZfeC0QY.js.map → MdxPage-CBYFyqUs.js.map} +1 -1
  216. package/lib/{OAuthErrorPage-BycMozgn.js → OAuthErrorPage-DlTYnbLO.js} +4 -4
  217. package/lib/{OAuthErrorPage-BycMozgn.js.map → OAuthErrorPage-DlTYnbLO.js.map} +1 -1
  218. package/lib/{OasProvider-1XEOsIiW.js → OasProvider-DIPAQ79S.js} +2 -2
  219. package/lib/{OasProvider-1XEOsIiW.js.map → OasProvider-DIPAQ79S.js.map} +1 -1
  220. package/lib/OperationList-BOTFIfda.js +5688 -0
  221. package/lib/OperationList-BOTFIfda.js.map +1 -0
  222. package/lib/{Pagination-CJszmeSA.js → Pagination-BOZ9Pxcw.js} +2 -2
  223. package/lib/{Pagination-CJszmeSA.js.map → Pagination-BOZ9Pxcw.js.map} +1 -1
  224. package/lib/RouteGuard-Brz95MSt.js +77 -0
  225. package/lib/RouteGuard-Brz95MSt.js.map +1 -0
  226. package/lib/RouterError-DQS_bMwf.js +42 -0
  227. package/lib/RouterError-DQS_bMwf.js.map +1 -0
  228. package/lib/{SchemaList-qOHkDzSz.js → SchemaList-Bu95q_q2.js} +7 -7
  229. package/lib/{SchemaList-qOHkDzSz.js.map → SchemaList-Bu95q_q2.js.map} +1 -1
  230. package/lib/SchemaView-CaxK_HV4.js +586 -0
  231. package/lib/SchemaView-CaxK_HV4.js.map +1 -0
  232. package/lib/Select-DFRCS31-.js +399 -0
  233. package/lib/Select-DFRCS31-.js.map +1 -0
  234. package/lib/{SignUp-6SGx9Yyq.js → SignUp-CfB278ao.js} +2 -2
  235. package/lib/{SignUp-6SGx9Yyq.js.map → SignUp-CfB278ao.js.map} +1 -1
  236. package/lib/{SyntaxHighlight-zvlnSnHB.js → SyntaxHighlight-C19vH0V_.js} +525 -509
  237. package/lib/SyntaxHighlight-C19vH0V_.js.map +1 -0
  238. package/lib/{Toc-Da9yp7lo.js → Toc-DQIqdghO.js} +2 -2
  239. package/lib/{Toc-Da9yp7lo.js.map → Toc-DQIqdghO.js.map} +1 -1
  240. package/lib/{circular-CSSuz-LS.js → circular-B-_VyILZ.js} +6360 -5953
  241. package/lib/circular-B-_VyILZ.js.map +1 -0
  242. package/lib/{createServer-CLbcVLbK.js → createServer-C5lXk4ba.js} +4732 -4273
  243. package/lib/createServer-C5lXk4ba.js.map +1 -0
  244. package/lib/{errors-CuGgh3hf.js → errors-DqoyOKev.js} +2 -2
  245. package/lib/{errors-CuGgh3hf.js.map → errors-DqoyOKev.js.map} +1 -1
  246. package/lib/index-B7yD7ZUk.js +3680 -0
  247. package/lib/index-B7yD7ZUk.js.map +1 -0
  248. package/lib/{index-rYHsvtTo.js → index-BG79m3lF.js} +2 -2
  249. package/lib/{index-rYHsvtTo.js.map → index-BG79m3lF.js.map} +1 -1
  250. package/lib/{index-B1rmok4X.js → index-DHDtI9H5.js} +3 -3
  251. package/lib/{index-B1rmok4X.js.map → index-DHDtI9H5.js.map} +1 -1
  252. package/lib/ui/ActionButton.js +1 -1
  253. package/lib/ui/Badge.js +27 -13
  254. package/lib/ui/Badge.js.map +1 -1
  255. package/lib/ui/Button.js +6 -5
  256. package/lib/ui/Button.js.map +1 -1
  257. package/lib/ui/Checkbox.js +29 -26
  258. package/lib/ui/Checkbox.js.map +1 -1
  259. package/lib/ui/CodeBlock.js +7 -7
  260. package/lib/ui/CodeBlock.js.map +1 -1
  261. package/lib/ui/Collapsible.js +32 -5
  262. package/lib/ui/Collapsible.js.map +1 -1
  263. package/lib/ui/EmbeddedCodeBlock.js +26 -25
  264. package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  265. package/lib/ui/Frame.js +81 -0
  266. package/lib/ui/Frame.js.map +1 -0
  267. package/lib/ui/Item.js +188 -0
  268. package/lib/ui/Item.js.map +1 -0
  269. package/lib/ui/NativeSelect.js +57 -0
  270. package/lib/ui/NativeSelect.js.map +1 -0
  271. package/lib/ui/Select.js +166 -116
  272. package/lib/ui/Select.js.map +1 -1
  273. package/lib/ui/Separator.js +27 -0
  274. package/lib/ui/Separator.js.map +1 -0
  275. package/lib/ui/SyntaxHighlight.js +1 -1
  276. package/lib/ui/Tabs.js +10 -10
  277. package/lib/ui/Tooltip.js +55 -28
  278. package/lib/ui/Tooltip.js.map +1 -1
  279. package/lib/zudoku.__internal.js +345 -345
  280. package/lib/zudoku.__internal.js.map +1 -1
  281. package/lib/zudoku.auth-auth0.js +7 -7
  282. package/lib/zudoku.auth-auth0.js.map +1 -1
  283. package/lib/zudoku.auth-azureb2c.js +3 -3
  284. package/lib/zudoku.auth-clerk.js +1 -1
  285. package/lib/zudoku.auth-openid.js +3 -3
  286. package/lib/zudoku.auth-supabase.js +30 -33
  287. package/lib/zudoku.auth-supabase.js.map +1 -1
  288. package/lib/zudoku.components.js +2 -2
  289. package/lib/zudoku.plugin-api-catalog.js +3 -3
  290. package/lib/zudoku.plugin-api-keys.js +5 -5
  291. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  292. package/lib/zudoku.plugin-markdown.js +1 -1
  293. package/lib/zudoku.plugin-openapi.js +1 -1
  294. package/lib/zudoku.plugin-search-pagefind.js +2 -2
  295. package/package.json +18 -13
  296. package/src/app/main.css +1 -1
  297. package/src/app/main.tsx +5 -1
  298. package/src/lib/auth/issuer.ts +3 -0
  299. package/src/lib/authentication/authentication.ts +1 -1
  300. package/src/lib/authentication/providers/auth0.tsx +6 -1
  301. package/src/lib/authentication/providers/firebase.tsx +284 -0
  302. package/src/lib/authentication/providers/supabase.tsx +2 -7
  303. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +335 -0
  304. package/src/lib/authentication/ui/icons/Apple.tsx +10 -0
  305. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -0
  306. package/src/lib/authentication/ui/icons/Github.tsx +16 -0
  307. package/src/lib/authentication/ui/icons/Google.tsx +16 -0
  308. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -0
  309. package/src/lib/authentication/ui/icons/X.tsx +10 -0
  310. package/src/lib/components/Autocomplete.tsx +11 -2
  311. package/src/lib/components/Layout.tsx +3 -2
  312. package/src/lib/components/navigation/NavigationItem.tsx +7 -20
  313. package/src/lib/core/RouteGuard.tsx +8 -8
  314. package/src/lib/errors/ErrorAlert.tsx +1 -1
  315. package/src/lib/errors/RouterError.tsx +7 -2
  316. package/src/lib/oas/parser/index.ts +8 -3
  317. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +11 -7
  318. package/src/lib/plugins/openapi/CollapsibleCode.tsx +5 -3
  319. package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -0
  320. package/src/lib/plugins/openapi/OperationList.tsx +7 -0
  321. package/src/lib/plugins/openapi/OperationListItem.tsx +10 -7
  322. package/src/lib/plugins/openapi/ParameterList.tsx +37 -23
  323. package/src/lib/plugins/openapi/ParameterListItem.tsx +105 -54
  324. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +48 -7
  325. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +81 -33
  326. package/src/lib/plugins/openapi/Sidecar.tsx +129 -65
  327. package/src/lib/plugins/openapi/SidecarBox.tsx +26 -4
  328. package/src/lib/plugins/openapi/SidecarExamples.tsx +91 -79
  329. package/src/lib/plugins/openapi/components/ConstValue.tsx +1 -1
  330. package/src/lib/plugins/openapi/components/EnumValues.tsx +2 -2
  331. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -0
  332. package/src/lib/plugins/openapi/components/ResponseContent.tsx +63 -53
  333. package/src/lib/plugins/openapi/interfaces.ts +12 -0
  334. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +246 -30
  335. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +10 -6
  336. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +3 -2
  337. package/src/lib/plugins/openapi/playground/Headers.tsx +103 -219
  338. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +33 -1
  339. package/src/lib/plugins/openapi/playground/PathParams.tsx +26 -34
  340. package/src/lib/plugins/openapi/playground/Playground.tsx +73 -35
  341. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +9 -30
  342. package/src/lib/plugins/openapi/playground/QueryParams.tsx +82 -136
  343. package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -0
  344. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +1 -1
  345. package/src/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.tsx +872 -0
  346. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +349 -0
  347. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +2 -6
  348. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +1 -1
  349. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +89 -55
  350. package/src/lib/plugins/openapi/schema/SchemaView.tsx +82 -53
  351. package/src/lib/plugins/openapi/schema/UnionView.tsx +6 -17
  352. package/src/lib/plugins/openapi/schema/union-helpers.ts +0 -1
  353. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +5 -15
  354. package/src/lib/ui/Badge.tsx +21 -12
  355. package/src/lib/ui/Button.tsx +1 -0
  356. package/src/lib/ui/Checkbox.tsx +23 -24
  357. package/src/lib/ui/CodeBlock.tsx +3 -4
  358. package/src/lib/ui/Collapsible.tsx +26 -4
  359. package/src/lib/ui/EmbeddedCodeBlock.tsx +21 -19
  360. package/src/lib/ui/Frame.tsx +81 -0
  361. package/src/lib/ui/Item.tsx +192 -0
  362. package/src/lib/ui/NativeSelect.tsx +47 -0
  363. package/src/lib/ui/Select.tsx +153 -126
  364. package/src/lib/ui/Separator.tsx +25 -0
  365. package/src/lib/ui/Tooltip.tsx +54 -32
  366. package/src/lib/util/createVariantComponent.tsx +31 -5
  367. package/src/lib/util/flattenAllOf.test.ts +637 -0
  368. package/src/lib/util/flattenAllOf.ts +101 -0
  369. package/src/lib/util/readFrontmatter.ts +13 -0
  370. package/dist/lib/plugins/openapi/playground/InlineInput.d.ts +0 -4
  371. package/dist/lib/plugins/openapi/playground/InlineInput.js +0 -3
  372. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +0 -1
  373. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.d.ts +0 -5
  374. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js +0 -7
  375. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js.map +0 -1
  376. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.d.ts +0 -4
  377. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js +0 -10
  378. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js.map +0 -1
  379. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.d.ts +0 -5
  380. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js +0 -16
  381. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js.map +0 -1
  382. package/lib/Button-DmS4u8Lj.js.map +0 -1
  383. package/lib/ErrorAlert-DE3Sf66a.js.map +0 -1
  384. package/lib/OperationList-DCJw6wXL.js +0 -5450
  385. package/lib/OperationList-DCJw6wXL.js.map +0 -1
  386. package/lib/RouteGuard-DhU3LRr1.js +0 -81
  387. package/lib/RouteGuard-DhU3LRr1.js.map +0 -1
  388. package/lib/RouterError-VDLnrFqF.js +0 -41
  389. package/lib/RouterError-VDLnrFqF.js.map +0 -1
  390. package/lib/SchemaView-D3hm65cc.js +0 -458
  391. package/lib/SchemaView-D3hm65cc.js.map +0 -1
  392. package/lib/Select-C1DeCqKv.js +0 -372
  393. package/lib/Select-C1DeCqKv.js.map +0 -1
  394. package/lib/SyntaxHighlight-zvlnSnHB.js.map +0 -1
  395. package/lib/circular-CSSuz-LS.js.map +0 -1
  396. package/lib/createServer-CLbcVLbK.js.map +0 -1
  397. package/lib/index-RNAxx6IF.js +0 -3364
  398. package/lib/index-RNAxx6IF.js.map +0 -1
  399. package/src/lib/plugins/openapi/playground/InlineInput.tsx +0 -6
  400. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.tsx +0 -36
  401. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.tsx +0 -25
  402. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.tsx +0 -42
@@ -0,0 +1,16 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ const GoogleIcon = (props: SVGProps<SVGSVGElement>) => (
4
+ <svg
5
+ viewBox="0 0 24 24"
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ width="1em"
8
+ height="1em"
9
+ {...props}
10
+ >
11
+ <title>{"Google"}</title>
12
+ <path d="M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z" />
13
+ </svg>
14
+ );
15
+
16
+ export default GoogleIcon;
@@ -0,0 +1,12 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ const MicrosoftIcon = (props: SVGProps<SVGSVGElement>) => (
4
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" {...props}>
5
+ <path fill="#f25022" d="M1 1h9v9H1z" />
6
+ <path fill="#00a4ef" d="M1 11h9v9H1z" />
7
+ <path fill="#7fba00" d="M11 1h9v9h-9z" />
8
+ <path fill="#ffb900" d="M11 11h9v9h-9z" />
9
+ </svg>
10
+ );
11
+
12
+ export default MicrosoftIcon;
@@ -0,0 +1,10 @@
1
+ import type { SVGProps } from "react";
2
+
3
+ const XIcon = (props: SVGProps<SVGSVGElement>) => (
4
+ <svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" {...props}>
5
+ <title>{"X"}</title>
6
+ <path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z" />
7
+ </svg>
8
+ );
9
+
10
+ export default XIcon;
@@ -11,12 +11,14 @@ import { Popover, PopoverContent } from "zudoku/ui/Popover.js";
11
11
  import { cn } from "../util/cn.js";
12
12
 
13
13
  type AutocompleteProps = {
14
- value: string;
14
+ value?: string | number | readonly string[] | undefined;
15
15
  options: readonly string[];
16
16
  onChange: (e: string) => void;
17
+ onSelect?: (e: string) => void;
17
18
  className?: string;
18
19
  placeholder?: string;
19
20
  onEnterPress?: (e: KeyboardEvent<HTMLInputElement>) => void;
21
+ onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
20
22
  ref?: Ref<HTMLInputElement>;
21
23
  shouldFilter?: boolean;
22
24
  };
@@ -28,7 +30,9 @@ const AutocompletePopover = ({
28
30
  className,
29
31
  placeholder = "Value",
30
32
  onEnterPress,
33
+ onKeyDown,
31
34
  ref,
35
+ onSelect,
32
36
  }: AutocompleteProps) => {
33
37
  const [open, setOpen] = useState(false);
34
38
  const [dontClose, setDontClose] = useState(false);
@@ -48,7 +52,7 @@ const AutocompletePopover = ({
48
52
  ref.current = el;
49
53
  }
50
54
  }}
51
- value={value}
55
+ value={value ? String(value) : undefined}
52
56
  placeholder={placeholder}
53
57
  className={cn("h-9 bg-transparent", className)}
54
58
  onFocus={() => setOpen(true)}
@@ -59,6 +63,10 @@ const AutocompletePopover = ({
59
63
  setOpen(false);
60
64
  }}
61
65
  onKeyDown={(e) => {
66
+ onKeyDown?.(e);
67
+
68
+ if (e.defaultPrevented) return;
69
+
62
70
  if (e.key === "Enter") {
63
71
  setOpen(false);
64
72
  inputRef.current?.blur();
@@ -91,6 +99,7 @@ const AutocompletePopover = ({
91
99
  key={enumValue}
92
100
  value={enumValue}
93
101
  onSelect={(selected) => {
102
+ onSelect?.(selected);
94
103
  onChange(selected);
95
104
  setOpen(false);
96
105
  }}
@@ -1,5 +1,6 @@
1
1
  import { type ReactNode, Suspense, useEffect } from "react";
2
2
  import { Outlet } from "react-router";
3
+ import { TooltipProvider } from "zudoku/ui/Tooltip.js";
3
4
  import { cn } from "../util/cn.js";
4
5
  import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
5
6
  import { useScrollToTop } from "../util/useScrollToTop.js";
@@ -28,7 +29,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
28
29
  }, [authentication]);
29
30
 
30
31
  return (
31
- <>
32
+ <TooltipProvider>
32
33
  <Slot.Target name="layout-before-head" />
33
34
  <Header />
34
35
  <Slot.Target name="layout-after-head" />
@@ -45,6 +46,6 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
45
46
  </Suspense>
46
47
  </div>
47
48
  <Footer />
48
- </>
49
+ </TooltipProvider>
49
50
  );
50
51
  };
@@ -1,13 +1,7 @@
1
1
  import { ExternalLinkIcon } from "lucide-react";
2
2
  import { useEffect, useRef, useState } from "react";
3
3
  import { NavLink, useLocation } from "react-router";
4
- import {
5
- Tooltip,
6
- TooltipArrow,
7
- TooltipContent,
8
- TooltipProvider,
9
- TooltipTrigger,
10
- } from "zudoku/ui/Tooltip.js";
4
+ import { Tooltip, TooltipContent, TooltipTrigger } from "zudoku/ui/Tooltip.js";
11
5
  import type { NavigationItem as NavigationItemType } from "../../../config/validators/NavigationSchema.js";
12
6
  import { useAuth } from "../../authentication/hook.js";
13
7
  import { cn } from "../../util/cn.js";
@@ -47,19 +41,12 @@ const TruncatedLabel = ({
47
41
  {label}
48
42
  </span>
49
43
  {isTruncated && (
50
- <TooltipProvider delayDuration={500}>
51
- <Tooltip disableHoverableContent>
52
- <TooltipTrigger className="absolute inset-0 z-10" />
53
- <TooltipContent
54
- className="max-w-64 rounded-lg"
55
- side="bottom"
56
- align="center"
57
- >
58
- <TooltipArrow />
59
- {label}
60
- </TooltipContent>
61
- </Tooltip>
62
- </TooltipProvider>
44
+ <Tooltip disableHoverableContent>
45
+ <TooltipTrigger className="absolute inset-0 z-10" />
46
+ <TooltipContent className="max-w-64" side="bottom" align="center">
47
+ {label}
48
+ </TooltipContent>
49
+ </Tooltip>
63
50
  )}
64
51
  </>
65
52
  );
@@ -38,6 +38,14 @@ export const RouteGuard = () => {
38
38
  const needsToSignIn =
39
39
  isProtectedRoute && !authCheckFn({ auth, context: zudoku });
40
40
 
41
+ if (isProtectedRoute && !auth.isAuthEnabled) {
42
+ throw new ZudokuError("Authentication is not enabled", {
43
+ title: "Authentication is not enabled",
44
+ developerHint:
45
+ "To use protectedRoutes you need authentication to be enabled",
46
+ });
47
+ }
48
+
41
49
  if (needsToSignIn && auth.isPending && typeof window !== "undefined") {
42
50
  return null;
43
51
  }
@@ -91,14 +99,6 @@ export const RouteGuard = () => {
91
99
  );
92
100
  }
93
101
 
94
- if (isProtectedRoute && !auth.isAuthEnabled) {
95
- throw new ZudokuError("Authentication is not enabled", {
96
- title: "Authentication is not enabled",
97
- developerHint:
98
- "To use protectedRoutes you need authentication to be enabled",
99
- });
100
- }
101
-
102
102
  return (
103
103
  <>
104
104
  {shouldBypass && (
@@ -17,7 +17,7 @@ export function ErrorAlert({ error }: { error: unknown }) {
17
17
  const stringError = cause instanceof Error ? String(cause.stack) : stack;
18
18
 
19
19
  return (
20
- <Typography className="grid grid-cols-1 !max-w-none pt-(--padding-content-top)">
20
+ <Typography className="grid grid-cols-1 max-w-none! pt-(--padding-content-top)">
21
21
  <Heading level={1}>{title}</Heading>
22
22
  Error: {message}
23
23
  {hint && <DeveloperHint className="mb-4">{hint}</DeveloperHint>}
@@ -1,13 +1,18 @@
1
1
  import { isRouteErrorResponse, useRouteError } from "react-router";
2
2
  import { NotFoundPage } from "../components/NotFoundPage.js";
3
+ import { cn } from "../util/cn.js";
3
4
  import { ErrorAlert } from "./ErrorAlert.js";
4
5
 
5
- export function RouterError() {
6
+ export function RouterError({ className }: { className?: string }) {
6
7
  const error = useRouteError();
7
8
 
8
9
  if (isRouteErrorResponse(error) && error.status === 404) {
9
10
  return <NotFoundPage />;
10
11
  }
11
12
 
12
- return <ErrorAlert error={error} />;
13
+ return (
14
+ <div className={cn("mx-4 max-w-2xl", className)}>
15
+ <ErrorAlert error={error} />
16
+ </div>
17
+ );
13
18
  }
@@ -1,6 +1,6 @@
1
- import { merge as mergeAllOf } from "allof-merge";
2
1
  import { GraphQLError } from "graphql/error/index.js";
3
2
  import { OpenAPIV3, type OpenAPIV3_1 } from "openapi-types";
3
+ import { flattenAllOfProcessor } from "../../util/flattenAllOf.js";
4
4
  import { dereference, type JSONSchema } from "./dereference/index.js";
5
5
  import { upgradeSchema } from "./upgrade/index.js";
6
6
 
@@ -101,7 +101,12 @@ export const validate = async (schemaInput: unknown) => {
101
101
 
102
102
  const dereferenced = await dereference(schema);
103
103
  const upgraded = upgradeSchema(dereferenced);
104
- const merged = mergeAllOf(upgraded) as OpenAPIDocument;
105
104
 
106
- return merged;
105
+ const flattened = await flattenAllOfProcessor({
106
+ schema: upgraded,
107
+ file: "schema.json",
108
+ dereference: async (schema) => schema,
109
+ });
110
+
111
+ return flattened;
107
112
  };
@@ -11,15 +11,19 @@ export const ProtectedRoute = () => {
11
11
  return null;
12
12
  }
13
13
 
14
+ if (!auth.isAuthEnabled) {
15
+ return (
16
+ <div className="flex flex-col justify-center gap-2 items-center h-1/2">
17
+ <DeveloperHint className="max-w-[600px]">
18
+ Authentication needs to be enabled for API keys to work. Enable it in
19
+ your Zudoku configuration under <code>authentication</code>.
20
+ </DeveloperHint>
21
+ </div>
22
+ );
23
+ }
24
+
14
25
  return auth.isAuthenticated ? (
15
26
  <Outlet />
16
- ) : !auth.isAuthEnabled ? (
17
- <div className="flex flex-col justify-center gap-2 items-center h-1/2">
18
- <DeveloperHint className="max-w-[600px]">
19
- Authentication needs to be enabled for API keys to work. Enable it in
20
- your Zudoku configuration under <code>authentication</code>.
21
- </DeveloperHint>
22
- </div>
23
27
  ) : (
24
28
  <div className="flex flex-col justify-center gap-2 items-center h-1/2">
25
29
  Please login first to view this page
@@ -9,6 +9,10 @@ import {
9
9
  import { cn } from "../../util/cn.js";
10
10
  import useIsomorphicLayoutEffect from "../../util/useIsomorphicLayoutEffect.js";
11
11
 
12
+ export const OverflowOverlay = () => (
13
+ <div className="absolute inset-0 bg-linear-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 transition-all group-hover:to-transparent" />
14
+ );
15
+
12
16
  export const CollapsibleCode = ({
13
17
  children,
14
18
  maxHeight = 250,
@@ -48,9 +52,7 @@ export const CollapsibleCode = ({
48
52
  !open && isOverflowing && "max-h-(--max-height)",
49
53
  )}
50
54
  >
51
- {!open && isOverflowing && (
52
- <div className=" absolute inset-0 bg-gradient-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 transition-all group-hover:to-transparent"></div>
53
- )}
55
+ {!open && isOverflowing && <OverflowOverlay />}
54
56
  <div ref={contentRef}>{children}</div>
55
57
  {!open && isOverflowing && (
56
58
  <CollapsibleTrigger
@@ -0,0 +1,52 @@
1
+ import { InfoIcon } from "lucide-react";
2
+ import { SyntaxHighlight } from "zudoku/ui/SyntaxHighlight.js";
3
+ import {
4
+ Tooltip,
5
+ TooltipContent,
6
+ TooltipProvider,
7
+ TooltipTrigger,
8
+ } from "zudoku/ui/Tooltip.js";
9
+ import { NonHighlightedCode } from "./components/NonHighlightedCode.js";
10
+ import * as SidecarBox from "./SidecarBox.js";
11
+
12
+ export const GeneratedExampleSidecarBox = ({
13
+ code,
14
+ isOnScreen,
15
+ shouldLazyHighlight,
16
+ }: {
17
+ code: string;
18
+ isOnScreen: boolean;
19
+ shouldLazyHighlight?: boolean;
20
+ }) => {
21
+ return (
22
+ <SidecarBox.Root>
23
+ <SidecarBox.Head className="text-xs flex justify-between items-center">
24
+ <div className="flex items-center gap-1.5">
25
+ <span className="font-medium">Request Body Example</span>
26
+ <TooltipProvider>
27
+ <Tooltip>
28
+ <TooltipTrigger asChild>
29
+ <InfoIcon size={13} />
30
+ </TooltipTrigger>
31
+ <TooltipContent>
32
+ This example is auto-generated from the schema.
33
+ </TooltipContent>
34
+ </Tooltip>
35
+ </TooltipProvider>
36
+ </div>
37
+ </SidecarBox.Head>
38
+ <SidecarBox.Body className="p-0">
39
+ {shouldLazyHighlight && !isOnScreen ? (
40
+ <NonHighlightedCode code={code} />
41
+ ) : (
42
+ <SyntaxHighlight
43
+ embedded
44
+ language="json"
45
+ code={code}
46
+ className="[--scrollbar-color:gray] rounded-none text-xs max-h-[200px]"
47
+ />
48
+ )}
49
+ </SidecarBox.Body>
50
+ </SidecarBox.Root>
51
+ );
52
+ };
@@ -146,6 +146,8 @@ const OperationsForTagQuery = graphql(/* GraphQL */ `
146
146
  }
147
147
  `);
148
148
 
149
+ const LAZY_OPERATION_LIST_THRESHOLD = 30;
150
+
149
151
  export const OperationList = ({
150
152
  tag,
151
153
  untagged,
@@ -200,6 +202,10 @@ export const OperationList = ({
200
202
 
201
203
  const { operations, next, prev, description: tagDescription } = schema.tag;
202
204
 
205
+ // Simple heuristic to determine if we should lazy highlight the code
206
+ // This is to avoid the performance issues when there are a lot of operations
207
+ const shouldLazyHighlight = operations.length > LAZY_OPERATION_LIST_THRESHOLD;
208
+
203
209
  // The summary property is preferable here as it is a short description of
204
210
  // the API, whereas the description property is typically longer and supports
205
211
  // commonmark formatting, making it ill-suited for use in the meta description
@@ -337,6 +343,7 @@ export const OperationList = ({
337
343
  <OperationListItem
338
344
  operationFragment={fragment}
339
345
  globalSelectedServer={globalSelectedServer}
346
+ shouldLazyHighlight={shouldLazyHighlight}
340
347
  />
341
348
  <hr className="my-10" />
342
349
  </div>
@@ -1,6 +1,7 @@
1
1
  import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
2
2
  import { useState } from "react";
3
3
  import { Badge } from "zudoku/ui/Badge.js";
4
+ import { Separator } from "zudoku/ui/Separator.js";
4
5
  import { Heading } from "../../components/Heading.js";
5
6
  import { Markdown } from "../../components/Markdown.js";
6
7
  import { cn } from "../../util/cn.js";
@@ -23,9 +24,11 @@ export type ParameterGroup = (typeof PARAM_GROUPS)[number];
23
24
  export const OperationListItem = ({
24
25
  operationFragment,
25
26
  globalSelectedServer,
27
+ shouldLazyHighlight,
26
28
  }: {
27
29
  operationFragment: FragmentType<typeof OperationsFragment>;
28
30
  globalSelectedServer?: string;
31
+ shouldLazyHighlight?: boolean;
29
32
  }) => {
30
33
  const operation = useFragment(OperationsFragment, operationFragment);
31
34
  const groupedParameters = groupBy(
@@ -118,10 +121,13 @@ export const OperationListItem = ({
118
121
  []
119
122
  ),
120
123
  )}
124
+ {renderIf(operation.requestBody?.content?.at(0)?.schema, () => (
125
+ <Separator className="my-4" />
126
+ ))}
121
127
  {renderIf(
122
128
  operation.requestBody?.content?.at(0)?.schema,
123
129
  (schema) => (
124
- <div className="mt-4 flex flex-col gap-4">
130
+ <div className="flex flex-col gap-4">
125
131
  <Heading
126
132
  level={3}
127
133
  className="capitalize flex items-center gap-2"
@@ -143,13 +149,10 @@ export const OperationListItem = ({
143
149
  </div>
144
150
  ),
145
151
  )}
152
+ <Separator className="my-4" />
146
153
  {operation.responses.length > 0 && (
147
154
  <>
148
- <Heading
149
- level={3}
150
- className="capitalize mt-8 pt-8 border-t"
151
- id={`${operation.slug}/responses`}
152
- >
155
+ <Heading level={3} id={`${operation.slug}/responses`}>
153
156
  {operation.summary && (
154
157
  <VisuallyHidden>
155
158
  {operation.summary} &rsaquo;{" "}
@@ -170,9 +173,9 @@ export const OperationListItem = ({
170
173
  {renderIf(!options?.disableSidecar && !isMCPEndpoint, () => (
171
174
  <Sidecar
172
175
  selectedResponse={selectedResponse}
173
- onSelectResponse={setSelectedResponse}
174
176
  operation={operation}
175
177
  globalSelectedServer={globalSelectedServer}
178
+ shouldLazyHighlight={shouldLazyHighlight}
176
179
  />
177
180
  ))}
178
181
  </div>
@@ -1,6 +1,8 @@
1
1
  import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
2
+ import { Fragment } from "react";
2
3
  import { Heading } from "../../components/Heading.js";
3
- import { Card } from "../../ui/Card.js";
4
+ import { Frame, FramePanel } from "../../ui/Frame.js";
5
+ import { ItemGroup, ItemSeparator } from "../../ui/Item.js";
4
6
  import type { ParameterItem } from "./graphql/graphql.js";
5
7
  import type { ParameterGroup } from "./OperationListItem.js";
6
8
  import { ParameterListItem } from "./ParameterListItem.js";
@@ -15,25 +17,37 @@ export const ParameterList = ({
15
17
  group: ParameterGroup;
16
18
  parameters: ParameterItem[];
17
19
  id: string;
18
- }) => (
19
- <>
20
- <Heading level={3} id={`${id}/${group}-parameters`} className="capitalize">
21
- {summary && <VisuallyHidden>{summary} &rsaquo; </VisuallyHidden>}
22
- {group === "header" ? "Headers" : `${group} Parameters`}
23
- </Heading>
24
- <Card>
25
- <ul className="list-none m-0 px-0 divide-y ">
26
- {parameters
27
- .sort((a, b) => (a.required === b.required ? 0 : a.required ? -1 : 1))
28
- .map((parameter) => (
29
- <ParameterListItem
30
- key={`${parameter.name}-${parameter.in}`}
31
- parameter={parameter}
32
- id={id}
33
- group={group}
34
- />
35
- ))}
36
- </ul>
37
- </Card>
38
- </>
39
- );
20
+ }) => {
21
+ const sortedParameters = parameters.sort((a, b) =>
22
+ a.required === b.required ? 0 : a.required ? -1 : 1,
23
+ );
24
+
25
+ return (
26
+ <>
27
+ <Heading
28
+ level={3}
29
+ id={`${id}/${group}-parameters`}
30
+ className="capitalize"
31
+ >
32
+ {summary && <VisuallyHidden>{summary} &rsaquo; </VisuallyHidden>}
33
+ {group === "header" ? "Headers" : `${group} Parameters`}
34
+ </Heading>
35
+ <Frame>
36
+ <FramePanel className="p-0!">
37
+ <ItemGroup className="overflow-clip">
38
+ {sortedParameters.map((parameter) => (
39
+ <Fragment key={`${parameter.name}-${parameter.in}`}>
40
+ <ParameterListItem
41
+ parameter={parameter}
42
+ id={id}
43
+ group={group}
44
+ />
45
+ <ItemSeparator />
46
+ </Fragment>
47
+ ))}
48
+ </ItemGroup>
49
+ </FramePanel>
50
+ </Frame>
51
+ </>
52
+ );
53
+ };