zudoku 0.51.0 → 0.52.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 (312) hide show
  1. package/dist/config/validators/InputNavigationSchema.d.ts +152 -0
  2. package/dist/config/validators/icon-types.d.ts +1 -1
  3. package/dist/config/validators/icon-types.js +38 -0
  4. package/dist/config/validators/icon-types.js.map +1 -1
  5. package/dist/config/validators/validate.d.ts +10 -0
  6. package/dist/config/validators/validate.js +7 -0
  7. package/dist/config/validators/validate.js.map +1 -1
  8. package/dist/flat-config.d.ts +6 -1
  9. package/dist/lib/components/Autocomplete.js +1 -1
  10. package/dist/lib/components/Autocomplete.js.map +1 -1
  11. package/dist/lib/components/ErrorPage.js +2 -2
  12. package/dist/lib/components/ErrorPage.js.map +1 -1
  13. package/dist/lib/components/Markdown.d.ts +0 -1
  14. package/dist/lib/components/Markdown.js +2 -3
  15. package/dist/lib/components/Markdown.js.map +1 -1
  16. package/dist/lib/components/NotFoundPage.js +2 -2
  17. package/dist/lib/components/NotFoundPage.js.map +1 -1
  18. package/dist/lib/components/Pagination.js +1 -1
  19. package/dist/lib/components/Pagination.js.map +1 -1
  20. package/dist/lib/components/Typography.d.ts +5 -0
  21. package/dist/lib/components/Typography.js +8 -0
  22. package/dist/lib/components/Typography.js.map +1 -0
  23. package/dist/lib/components/index.d.ts +4 -0
  24. package/dist/lib/components/index.js +2 -0
  25. package/dist/lib/components/index.js.map +1 -1
  26. package/dist/lib/errors/ErrorAlert.js +2 -3
  27. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  28. package/dist/lib/hooks/useHotkey.d.ts +4 -0
  29. package/dist/lib/hooks/useHotkey.js +58 -0
  30. package/dist/lib/hooks/useHotkey.js.map +1 -0
  31. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +4 -8
  32. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  33. package/dist/lib/plugins/custom-pages/index.d.ts +1 -4
  34. package/dist/lib/plugins/custom-pages/index.js +1 -3
  35. package/dist/lib/plugins/custom-pages/index.js.map +1 -1
  36. package/dist/lib/plugins/markdown/MdxPage.d.ts +1 -2
  37. package/dist/lib/plugins/markdown/MdxPage.js +22 -6
  38. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  39. package/dist/lib/plugins/markdown/index.d.ts +8 -1
  40. package/dist/lib/plugins/markdown/index.js +1 -1
  41. package/dist/lib/plugins/markdown/index.js.map +1 -1
  42. package/dist/lib/plugins/openapi/OperationList.js +2 -3
  43. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  44. package/dist/lib/plugins/openapi/OperationListItem.js +2 -2
  45. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  46. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  47. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  48. package/dist/lib/plugins/openapi/SchemaList.js +2 -3
  49. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  50. package/dist/lib/plugins/openapi/playground/BodyPanel.js +14 -11
  51. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  52. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.d.ts +8 -0
  53. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +11 -0
  54. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -0
  55. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +2 -2
  56. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  57. package/dist/lib/plugins/openapi/playground/Headers.d.ts +3 -2
  58. package/dist/lib/plugins/openapi/playground/Headers.js +52 -30
  59. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  60. package/dist/lib/plugins/openapi/playground/IdentityDialog.js +2 -1
  61. package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -1
  62. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +1 -2
  63. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -1
  64. package/dist/lib/plugins/openapi/playground/InlineInput.js +1 -1
  65. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +1 -1
  66. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +2 -2
  67. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  68. package/dist/lib/plugins/openapi/playground/PathParams.js +1 -2
  69. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  70. package/dist/lib/plugins/openapi/playground/Playground.js +52 -34
  71. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  72. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  73. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  74. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +2 -2
  75. package/dist/lib/plugins/openapi/playground/QueryParams.js +38 -23
  76. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  77. package/dist/lib/plugins/openapi/playground/Spinner.d.ts +2 -0
  78. package/dist/lib/plugins/openapi/playground/Spinner.js +63 -0
  79. package/dist/lib/plugins/openapi/playground/Spinner.js.map +1 -0
  80. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.d.ts +3 -0
  81. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js +13 -0
  82. package/dist/lib/plugins/openapi/playground/request-panel/UrlPath.js.map +1 -0
  83. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.d.ts +1 -0
  84. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +12 -0
  85. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -0
  86. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.d.ts +12 -0
  87. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js +11 -0
  88. package/dist/lib/plugins/openapi/playground/result-panel/Highlight.js.map +1 -0
  89. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.d.ts +6 -0
  90. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js +66 -0
  91. package/dist/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.js.map +1 -0
  92. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.d.ts +7 -4
  93. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +23 -32
  94. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  95. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +2 -2
  96. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +8 -10
  97. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  98. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +3 -3
  99. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  100. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +2 -3
  101. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  102. package/dist/lib/plugins/openapi/schema/SchemaView.js +4 -4
  103. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  104. package/dist/lib/plugins/openapi/schema/utils.js +3 -2
  105. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  106. package/dist/lib/ui/CodeBlock.js +5 -6
  107. package/dist/lib/ui/CodeBlock.js.map +1 -1
  108. package/dist/lib/ui/Dialog.js +1 -1
  109. package/dist/lib/ui/Dialog.js.map +1 -1
  110. package/dist/lib/ui/Select.js +1 -1
  111. package/dist/lib/util/os.d.ts +2 -0
  112. package/dist/lib/util/os.js +21 -0
  113. package/dist/lib/util/os.js.map +1 -0
  114. package/dist/lib/util/useCopyToClipboard.d.ts +1 -0
  115. package/dist/lib/util/useCopyToClipboard.js +11 -0
  116. package/dist/lib/util/useCopyToClipboard.js.map +1 -0
  117. package/dist/vite/api/SchemaManager.js +6 -2
  118. package/dist/vite/api/SchemaManager.js.map +1 -1
  119. package/dist/vite/api/schema-codegen.js +42 -11
  120. package/dist/vite/api/schema-codegen.js.map +1 -1
  121. package/dist/vite/api/schema-codegen.test.js +82 -0
  122. package/dist/vite/api/schema-codegen.test.js.map +1 -1
  123. package/dist/vite/mdx/remark-last-modified.d.ts +3 -0
  124. package/dist/vite/mdx/remark-last-modified.js +56 -0
  125. package/dist/vite/mdx/remark-last-modified.js.map +1 -0
  126. package/dist/vite/mdx/utils.d.ts +2 -0
  127. package/dist/vite/mdx/utils.js +31 -0
  128. package/dist/vite/mdx/utils.js.map +1 -0
  129. package/dist/vite/plugin-frontmatter.js +4 -2
  130. package/dist/vite/plugin-frontmatter.js.map +1 -1
  131. package/dist/vite/plugin-mdx.js +11 -33
  132. package/dist/vite/plugin-mdx.js.map +1 -1
  133. package/dist/vite/plugin-theme.js +21 -9
  134. package/dist/vite/plugin-theme.js.map +1 -1
  135. package/dist/vite/plugin-theme.test.js +22 -1
  136. package/dist/vite/plugin-theme.test.js.map +1 -1
  137. package/lib/Alert-CT_ViLrJ.js +161 -0
  138. package/lib/Alert-CT_ViLrJ.js.map +1 -0
  139. package/lib/CodeBlock-DAKxs_Tu.js +85 -0
  140. package/lib/CodeBlock-DAKxs_Tu.js.map +1 -0
  141. package/lib/Command-CPtGTZAL.js +140 -0
  142. package/lib/Command-CPtGTZAL.js.map +1 -0
  143. package/lib/{Dialog-BxpuVLh9.js → Dialog-DGlrUTCS.js} +4 -4
  144. package/lib/Dialog-DGlrUTCS.js.map +1 -0
  145. package/lib/MdxPage-D-QSUlMf.js +110 -0
  146. package/lib/MdxPage-D-QSUlMf.js.map +1 -0
  147. package/lib/{OasProvider-BC0q5m3u.js → OasProvider-DS23Ds76.js} +3 -3
  148. package/lib/{OasProvider-BC0q5m3u.js.map → OasProvider-DS23Ds76.js.map} +1 -1
  149. package/lib/{OperationList-Dpip6ozi.js → OperationList-CLidyzBx.js} +578 -567
  150. package/lib/OperationList-CLidyzBx.js.map +1 -0
  151. package/lib/Pagination-ClHXydm9.js +36 -0
  152. package/lib/Pagination-ClHXydm9.js.map +1 -0
  153. package/lib/RouteGuard-Bd-ppFbi.js +737 -0
  154. package/lib/RouteGuard-Bd-ppFbi.js.map +1 -0
  155. package/lib/{SchemaList-t4BIfh6Z.js → SchemaList-AJ8eFhvU.js} +26 -37
  156. package/lib/SchemaList-AJ8eFhvU.js.map +1 -0
  157. package/lib/{SchemaView-CLxthVcA.js → SchemaView-B9MTum2V.js} +94 -103
  158. package/lib/SchemaView-B9MTum2V.js.map +1 -0
  159. package/lib/{SignUp-B6w5AwHM.js → SignUp-CfojO4Pb.js} +13 -13
  160. package/lib/{SignUp-B6w5AwHM.js.map → SignUp-CfojO4Pb.js.map} +1 -1
  161. package/lib/{Markdown-BQ8YqLsz.js → Slot-DwZlQ-vX.js} +3347 -3001
  162. package/lib/Slot-DwZlQ-vX.js.map +1 -0
  163. package/lib/{SyntaxHighlight-C5ja40ix.js → SyntaxHighlight-CrjhGEwT.js} +3 -3
  164. package/lib/{SyntaxHighlight-C5ja40ix.js.map → SyntaxHighlight-CrjhGEwT.js.map} +1 -1
  165. package/lib/{Toc-BS0f4GTe.js → Toc-WCmwFkX-.js} +2 -2
  166. package/lib/{Toc-BS0f4GTe.js.map → Toc-WCmwFkX-.js.map} +1 -1
  167. package/lib/{chunk-DQRVZFIR-BblmKnHy.js → chunk-DQRVZFIR-DHK7_Ilc.js} +7 -7
  168. package/lib/{chunk-DQRVZFIR-BblmKnHy.js.map → chunk-DQRVZFIR-DHK7_Ilc.js.map} +1 -1
  169. package/lib/{circular-DfOaDE_x.js → circular-0wOQ8KUO.js} +2 -2
  170. package/lib/{circular-DfOaDE_x.js.map → circular-0wOQ8KUO.js.map} +1 -1
  171. package/lib/clerk-BDZ31hjU.js +25190 -0
  172. package/lib/clerk-BDZ31hjU.js.map +1 -0
  173. package/lib/{createServer-DjOMygls.js → createServer-Brtv5_hp.js} +4 -4
  174. package/lib/{createServer-DjOMygls.js.map → createServer-Brtv5_hp.js.map} +1 -1
  175. package/lib/{errors-D_5vKvUq.js → errors-BsabiSKg.js} +5 -5
  176. package/lib/{errors-D_5vKvUq.js.map → errors-BsabiSKg.js.map} +1 -1
  177. package/lib/{hook-CHXroBFt.js → hook-Bd0yS8M0.js} +36 -36
  178. package/lib/{hook-CHXroBFt.js.map → hook-Bd0yS8M0.js.map} +1 -1
  179. package/lib/index-BIbCx5Fh.js +3919 -0
  180. package/lib/index-BIbCx5Fh.js.map +1 -0
  181. package/lib/index-BoBGmARR.js +3458 -0
  182. package/lib/index-BoBGmARR.js.map +1 -0
  183. package/lib/{index-BvvmIczU.js → index-CcV90rin.js} +2 -2
  184. package/lib/{index-BvvmIczU.js.map → index-CcV90rin.js.map} +1 -1
  185. package/lib/index-ClhS5TxS.js +107 -0
  186. package/lib/index-ClhS5TxS.js.map +1 -0
  187. package/lib/ui/CodeBlock.js +6 -73
  188. package/lib/ui/CodeBlock.js.map +1 -1
  189. package/lib/ui/Command.js +1 -1
  190. package/lib/ui/Dialog.js +1 -1
  191. package/lib/ui/Dialog.js.map +1 -1
  192. package/lib/ui/Select.js +1 -1
  193. package/lib/ui/Select.js.map +1 -1
  194. package/lib/ui/SyntaxHighlight.js +3 -3
  195. package/lib/{useExposedProps-BZQkZneR.js → useExposedProps-BIYjecPD.js} +2 -2
  196. package/lib/{useExposedProps-BZQkZneR.js.map → useExposedProps-BIYjecPD.js.map} +1 -1
  197. package/lib/zudoku.auth-auth0.js +1 -1
  198. package/lib/zudoku.auth-azureb2c.js +2 -2
  199. package/lib/zudoku.auth-clerk.js +3 -3
  200. package/lib/zudoku.auth-openid.js +2 -2
  201. package/lib/zudoku.components.js +33 -3534
  202. package/lib/zudoku.components.js.map +1 -1
  203. package/lib/zudoku.hooks.js +10 -11
  204. package/lib/zudoku.hooks.js.map +1 -1
  205. package/lib/zudoku.plugin-api-catalog.js +6 -6
  206. package/lib/zudoku.plugin-api-keys.js +268 -321
  207. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  208. package/lib/zudoku.plugin-custom-pages.js +8 -20
  209. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  210. package/lib/zudoku.plugin-markdown.js +4 -5
  211. package/lib/zudoku.plugin-markdown.js.map +1 -1
  212. package/lib/zudoku.plugin-openapi.js +3 -3
  213. package/lib/zudoku.plugin-redirect.js +1 -1
  214. package/lib/zudoku.plugin-search-pagefind.js +201 -111
  215. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  216. package/package.json +5 -4
  217. package/src/lib/components/Autocomplete.tsx +1 -0
  218. package/src/lib/components/ErrorPage.tsx +3 -3
  219. package/src/lib/components/Markdown.tsx +3 -5
  220. package/src/lib/components/NotFoundPage.tsx +3 -3
  221. package/src/lib/components/Pagination.tsx +4 -4
  222. package/src/lib/components/Typography.tsx +14 -0
  223. package/src/lib/components/index.ts +2 -0
  224. package/src/lib/errors/ErrorAlert.tsx +3 -9
  225. package/src/lib/hooks/useHotkey.ts +70 -0
  226. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +5 -9
  227. package/src/lib/plugins/custom-pages/index.tsx +2 -6
  228. package/src/lib/plugins/markdown/MdxPage.tsx +66 -15
  229. package/src/lib/plugins/markdown/index.tsx +10 -2
  230. package/src/lib/plugins/openapi/OperationList.tsx +7 -17
  231. package/src/lib/plugins/openapi/OperationListItem.tsx +2 -2
  232. package/src/lib/plugins/openapi/ParameterListItem.tsx +6 -0
  233. package/src/lib/plugins/openapi/SchemaList.tsx +3 -9
  234. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +36 -28
  235. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +47 -0
  236. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +7 -3
  237. package/src/lib/plugins/openapi/playground/Headers.tsx +187 -89
  238. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +3 -2
  239. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +7 -12
  240. package/src/lib/plugins/openapi/playground/InlineInput.tsx +1 -1
  241. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +2 -2
  242. package/src/lib/plugins/openapi/playground/PathParams.tsx +3 -4
  243. package/src/lib/plugins/openapi/playground/Playground.tsx +196 -136
  244. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  245. package/src/lib/plugins/openapi/playground/QueryParams.tsx +102 -58
  246. package/src/lib/plugins/openapi/playground/Spinner.tsx +87 -0
  247. package/src/lib/plugins/openapi/playground/request-panel/UrlPath.tsx +31 -0
  248. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +25 -0
  249. package/src/lib/plugins/openapi/playground/result-panel/Highlight.tsx +26 -0
  250. package/src/lib/plugins/openapi/playground/result-panel/ResponseStatusBar.tsx +104 -0
  251. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +98 -97
  252. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +62 -92
  253. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +3 -3
  254. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +2 -3
  255. package/src/lib/plugins/openapi/schema/SchemaView.tsx +5 -10
  256. package/src/lib/plugins/openapi/schema/utils.ts +3 -2
  257. package/src/lib/ui/CodeBlock.tsx +5 -6
  258. package/src/lib/ui/Dialog.tsx +1 -1
  259. package/src/lib/ui/Select.tsx +1 -1
  260. package/src/lib/util/os.ts +18 -0
  261. package/src/lib/util/useCopyToClipboard.ts +17 -0
  262. package/dist/lib/plugins/custom-pages/CustomPage.d.ts +0 -2
  263. package/dist/lib/plugins/custom-pages/CustomPage.js +0 -11
  264. package/dist/lib/plugins/custom-pages/CustomPage.js.map +0 -1
  265. package/dist/lib/plugins/openapi/playground/UrlDisplay.d.ts +0 -4
  266. package/dist/lib/plugins/openapi/playground/UrlDisplay.js +0 -22
  267. package/dist/lib/plugins/openapi/playground/UrlDisplay.js.map +0 -1
  268. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.d.ts +0 -7
  269. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js +0 -11
  270. package/dist/lib/plugins/openapi/playground/result-panel/RequestTab.js.map +0 -1
  271. package/lib/Callout-CoVxYafP.js +0 -231
  272. package/lib/Callout-CoVxYafP.js.map +0 -1
  273. package/lib/CategoryHeading-Cu2RwgjC.js +0 -10
  274. package/lib/CategoryHeading-Cu2RwgjC.js.map +0 -1
  275. package/lib/Dialog-BxpuVLh9.js.map +0 -1
  276. package/lib/Markdown-BQ8YqLsz.js.map +0 -1
  277. package/lib/MdxPage-DJvKmI-r.js +0 -84
  278. package/lib/MdxPage-DJvKmI-r.js.map +0 -1
  279. package/lib/OperationList-Dpip6ozi.js.map +0 -1
  280. package/lib/Pagination-CCxhL836.js +0 -36
  281. package/lib/Pagination-CCxhL836.js.map +0 -1
  282. package/lib/RouteGuard-gV7nvzi7.js +0 -55
  283. package/lib/RouteGuard-gV7nvzi7.js.map +0 -1
  284. package/lib/SchemaList-t4BIfh6Z.js.map +0 -1
  285. package/lib/SchemaView-CLxthVcA.js.map +0 -1
  286. package/lib/Slot-CSEIvwwO.js +0 -161
  287. package/lib/Slot-CSEIvwwO.js.map +0 -1
  288. package/lib/clerk-yAKDC3Qz.js +0 -24812
  289. package/lib/clerk-yAKDC3Qz.js.map +0 -1
  290. package/lib/index--oeBayMa.js +0 -86
  291. package/lib/index--oeBayMa.js.map +0 -1
  292. package/lib/index-Bn6Lc9tq.js +0 -9
  293. package/lib/index-Bn6Lc9tq.js.map +0 -1
  294. package/lib/index-DW2qmCJa.js +0 -3227
  295. package/lib/index-DW2qmCJa.js.map +0 -1
  296. package/lib/index-QzXzw_ra.js +0 -24
  297. package/lib/index-QzXzw_ra.js.map +0 -1
  298. package/lib/index.esm-BFcSKCe-.js +0 -683
  299. package/lib/index.esm-BFcSKCe-.js.map +0 -1
  300. package/lib/mutation-BpcyTgWI.js +0 -196
  301. package/lib/mutation-BpcyTgWI.js.map +0 -1
  302. package/lib/objectEntries-yMIkr2mI.js +0 -5
  303. package/lib/objectEntries-yMIkr2mI.js.map +0 -1
  304. package/lib/react-nprogress.esm-C2MPXjiJ.js +0 -389
  305. package/lib/react-nprogress.esm-C2MPXjiJ.js.map +0 -1
  306. package/lib/useLatest-hmRS46UF.js +0 -11
  307. package/lib/useLatest-hmRS46UF.js.map +0 -1
  308. package/lib/useMutation-N4ockVKi.js +0 -97
  309. package/lib/useMutation-N4ockVKi.js.map +0 -1
  310. package/src/lib/plugins/custom-pages/CustomPage.tsx +0 -18
  311. package/src/lib/plugins/openapi/playground/UrlDisplay.tsx +0 -32
  312. package/src/lib/plugins/openapi/playground/result-panel/RequestTab.tsx +0 -73
@@ -3,13 +3,13 @@ import { Link, useParams } from "react-router";
3
3
  import { CategoryHeading } from "./CategoryHeading.js";
4
4
  import { DeveloperHint } from "./DeveloperHint.js";
5
5
  import { Heading } from "./Heading.js";
6
- import { ProseClasses } from "./Markdown.js";
6
+ import { Typography } from "./Typography.js";
7
7
 
8
8
  export const NotFoundPage = () => {
9
9
  const params = useParams();
10
10
 
11
11
  return (
12
- <div className={ProseClasses + " h-full pt-(--padding-content-top)"}>
12
+ <Typography className="h-full pt-(--padding-content-top)">
13
13
  <CategoryHeading>404</CategoryHeading>
14
14
  <Heading level={1} className="flex gap-3.5 items-center">
15
15
  Page not found
@@ -28,6 +28,6 @@ export const NotFoundPage = () => {
28
28
  menu to find the correct page.
29
29
  </p>
30
30
  <Link to="/">Go back home</Link>
31
- </div>
31
+ </Typography>
32
32
  );
33
33
  };
@@ -26,16 +26,16 @@ export const Pagination = ({
26
26
  {prev && (
27
27
  <Button variant="ghost" asChild>
28
28
  <Link to={prev.to} relative="path" className={linkClass}>
29
- <ArrowLeftIcon size={12} />
30
- <span className="truncate">{prev.label}</span>
29
+ <ArrowLeftIcon size={14} strokeWidth={2.5} />
30
+ <span className="text-lg truncate">{prev.label}</span>
31
31
  </Link>
32
32
  </Button>
33
33
  )}
34
34
  {next && (
35
35
  <Button variant="ghost" asChild>
36
36
  <Link to={next.to} relative="path" className={linkClass}>
37
- <span className="truncate">{next.label}</span>
38
- <ArrowRightIcon size={12} />
37
+ <span className="text-lg truncate">{next.label}</span>
38
+ <ArrowRightIcon size={14} strokeWidth={2.5} />
39
39
  </Link>
40
40
  </Button>
41
41
  )}
@@ -0,0 +1,14 @@
1
+ import { cn } from "../util/cn.js";
2
+
3
+ // other styles are defined in main.css .prose
4
+ export const ProseClasses = "prose dark:prose-invert prose-neutral";
5
+
6
+ export const Typography = ({
7
+ children,
8
+ className,
9
+ }: {
10
+ children: React.ReactNode;
11
+ className?: string;
12
+ }) => {
13
+ return <div className={cn(ProseClasses, className)}>{children}</div>;
14
+ };
@@ -23,6 +23,7 @@ import { Layout as LayoutImport } from "./Layout.js";
23
23
  import { Markdown as MarkdownImport } from "./Markdown.js";
24
24
  import { Spinner as SpinnerImport } from "./Spinner.js";
25
25
  import { StatusPage as StatusPageImport } from "./StatusPage.js";
26
+ import { Typography as TypographyImport } from "./Typography.js";
26
27
  import { Zudoku as ZudokuImport } from "./Zudoku.js";
27
28
 
28
29
  export const Layout = /*@__PURE__*/ LayoutImport;
@@ -41,6 +42,7 @@ export const Button = /*@__PURE__*/ ButtonImport;
41
42
  export const Link = /*@__PURE__*/ LinkImport;
42
43
  export const BuildCheck = /*@__PURE__*/ BuildCheckImport;
43
44
  export const Zudoku = /*@__PURE__*/ ZudokuImport;
45
+ export const Typography = /*@__PURE__*/ TypographyImport;
44
46
 
45
47
  /** @deprecated Import from `zudoku/hooks` instead */
46
48
  export const useMDXComponents = /*@__PURE__*/ useMDXComponentsImport;
@@ -2,8 +2,7 @@
2
2
  import { SyntaxHighlight } from "zudoku/ui/SyntaxHighlight.js";
3
3
  import { DeveloperHint } from "../components/DeveloperHint.js";
4
4
  import { Heading } from "../components/Heading.js";
5
- import { ProseClasses } from "../components/Markdown.js";
6
- import { cn } from "../util/cn.js";
5
+ import { Typography } from "../components/Typography.js";
7
6
  import { ZudokuError } from "../util/invariant.js";
8
7
 
9
8
  export function ErrorAlert({ error }: { error: unknown }) {
@@ -19,12 +18,7 @@ export function ErrorAlert({ error }: { error: unknown }) {
19
18
  const stringError = cause instanceof Error ? String(cause.stack) : stack;
20
19
 
21
20
  return (
22
- <div
23
- className={cn(
24
- ProseClasses,
25
- "grid grid-cols-1 !max-w-none pt-(--padding-content-top)",
26
- )}
27
- >
21
+ <Typography className="grid grid-cols-1 !max-w-none pt-(--padding-content-top)">
28
22
  <Heading level={1}>{title}</Heading>
29
23
  Error: {message}
30
24
  {hint && <DeveloperHint className="mb-4">{hint}</DeveloperHint>}
@@ -37,6 +31,6 @@ export function ErrorAlert({ error }: { error: unknown }) {
37
31
  />
38
32
  </div>
39
33
  )}
40
- </div>
34
+ </Typography>
41
35
  );
42
36
  }
@@ -0,0 +1,70 @@
1
+ import { useEffect, useRef } from "react";
2
+ import { isAppleDevice } from "../util/os.js";
3
+
4
+ const keymap = {
5
+ other: {
6
+ alt: "Alt",
7
+ meta: "Ctrl",
8
+ ctrl: "Ctrl",
9
+ shift: "⇧",
10
+ option: "Alt",
11
+ },
12
+ apple: {
13
+ alt: "⌥",
14
+ meta: "⌘",
15
+ ctrl: "Ctrl",
16
+ shift: "⇧",
17
+ option: "⌥",
18
+ },
19
+ };
20
+
21
+ export const useHotkey = (hotkey: string, callback: () => void) => {
22
+ const hotkeySanitized = hotkey.toLowerCase().split("+");
23
+ const meta = hotkeySanitized.includes("meta");
24
+ const shift = hotkeySanitized.includes("shift");
25
+ const alt =
26
+ hotkeySanitized.includes("option") || hotkeySanitized.includes("alt");
27
+ const ctrl = hotkeySanitized.includes("ctrl");
28
+
29
+ const key = hotkey.split("+").pop();
30
+
31
+ const callbackRef = useRef(callback);
32
+
33
+ useEffect(() => {
34
+ callbackRef.current = callback;
35
+ }, [callback]);
36
+
37
+ useEffect(() => {
38
+ const handler = (event: KeyboardEvent) => {
39
+ if (
40
+ (event.code === `Key${key?.toUpperCase()}` ||
41
+ event.code.toLowerCase() === key?.toLowerCase()) &&
42
+ event.metaKey === meta &&
43
+ event.shiftKey === shift &&
44
+ event.altKey === alt &&
45
+ event.ctrlKey === ctrl
46
+ ) {
47
+ event.preventDefault();
48
+ callbackRef.current();
49
+ }
50
+ };
51
+
52
+ window.addEventListener("keydown", handler);
53
+ return () => {
54
+ window.removeEventListener("keydown", handler);
55
+ };
56
+ }, [key, meta, shift, alt, ctrl]);
57
+
58
+ return {
59
+ trigger: () => callbackRef.current(),
60
+ label: hotkeySanitized.map((key: string) =>
61
+ key === "meta" ||
62
+ key === "ctrl" ||
63
+ key === "alt" ||
64
+ key === "shift" ||
65
+ key === "option"
66
+ ? keymap[isAppleDevice() ? "apple" : "other"][key]
67
+ : key,
68
+ ),
69
+ };
70
+ };
@@ -3,7 +3,6 @@ import {
3
3
  useQueryClient,
4
4
  useSuspenseQuery,
5
5
  } from "@tanstack/react-query";
6
- import { AnimatePresence } from "framer-motion";
7
6
  import {
8
7
  CheckIcon,
9
8
  CircleSlashIcon,
@@ -15,6 +14,7 @@ import {
15
14
  TrashIcon,
16
15
  XIcon,
17
16
  } from "lucide-react";
17
+ import { AnimatePresence } from "motion/react";
18
18
  import React, { useState } from "react";
19
19
  import { Link } from "react-router";
20
20
  import { Alert, AlertTitle } from "zudoku/ui/Alert.js";
@@ -34,6 +34,7 @@ import { Slot } from "../../components/Slot.js";
34
34
  import { Button } from "../../ui/Button.js";
35
35
  import { Input } from "../../ui/Input.js";
36
36
  import { cn } from "../../util/cn.js";
37
+ import { useCopyToClipboard } from "../../util/useCopyToClipboard.js";
37
38
  import { type ApiConsumer, type ApiKey, type ApiKeyService } from "./index.js";
38
39
 
39
40
  export const SettingsApiKeys = ({ service }: { service: ApiKeyService }) => {
@@ -420,7 +421,7 @@ const RevealApiKey = ({
420
421
  className?: string;
421
422
  }) => {
422
423
  const [revealed, setRevealed] = useState(false);
423
- const [copied, setCopied] = useState(false);
424
+ const [isCopied, copyToClipboard] = useCopyToClipboard();
424
425
 
425
426
  const { key, createdOn, expiresOn } = apiKey;
426
427
  const isExpired = expiresOn && new Date(expiresOn) < new Date();
@@ -462,15 +463,10 @@ const RevealApiKey = ({
462
463
  </Button>
463
464
  <Button
464
465
  variant="ghost"
465
- onClick={() => {
466
- void navigator.clipboard.writeText(key).then(() => {
467
- setCopied(true);
468
- setTimeout(() => setCopied(false), 2000);
469
- });
470
- }}
466
+ onClick={() => copyToClipboard(key)}
471
467
  size="icon"
472
468
  >
473
- {copied ? <CheckIcon size={16} /> : <CopyIcon size={16} />}
469
+ {isCopied ? <CheckIcon size={16} /> : <CopyIcon size={16} />}
474
470
  </Button>
475
471
  </div>
476
472
  <div className="flex gap-1 mt-0.5 text-nowrap">
@@ -1,16 +1,12 @@
1
- import { type ComponentType, type ReactNode } from "react";
1
+ import { type ReactNode } from "react";
2
2
  import type { RouteObject } from "react-router";
3
3
  import type { NavigationItem } from "../../../config/validators/NavigationSchema.js";
4
4
  import { traverseNavigation } from "../../components/navigation/utils.js";
5
5
  import type { NavigationPlugin } from "../../core/plugins.js";
6
- import type { ExposedComponentProps } from "../../util/useExposedProps.js";
7
- import { CustomPage } from "./CustomPage.js";
8
6
 
9
7
  export type CustomPageConfig = {
10
8
  path: string;
11
- prose?: boolean;
12
9
  element?: ReactNode;
13
- render?: ComponentType<ExposedComponentProps>;
14
10
  };
15
11
 
16
12
  export const customPagesPlugin = (
@@ -23,7 +19,7 @@ export const customPagesPlugin = (
23
19
  if (item.type === "custom-page") {
24
20
  customPages.push({
25
21
  path: item.path,
26
- element: <CustomPage {...item} />,
22
+ element: item.element,
27
23
  });
28
24
  }
29
25
  });
@@ -1,18 +1,19 @@
1
1
  import { useMDXComponents } from "@mdx-js/react";
2
2
  import slugify from "@sindresorhus/slugify";
3
3
  import { Helmet } from "@zudoku/react-helmet-async";
4
+ import { EditIcon } from "lucide-react";
4
5
  import { type PropsWithChildren, useEffect } from "react";
6
+ import { Button } from "zudoku/ui/Button.js";
5
7
  import { CategoryHeading } from "../../components/CategoryHeading.js";
6
8
  import { Heading } from "../../components/Heading.js";
7
- import { ProseClasses } from "../../components/Markdown.js";
8
9
  import { Pagination } from "../../components/Pagination.js";
10
+ import { Typography } from "../../components/Typography.js";
9
11
  import { Toc } from "../../components/navigation/Toc.js";
10
12
  import {
11
13
  useCurrentItem,
12
14
  usePrevNext,
13
15
  } from "../../components/navigation/utils.js";
14
16
  import type { MdxComponentsType } from "../../util/MdxComponents.js";
15
- import { cn } from "../../util/cn.js";
16
17
  import { type MarkdownPluginDefaultOptions, type MDXImport } from "./index.js";
17
18
 
18
19
  declare global {
@@ -38,14 +39,13 @@ const MarkdownHeadings = {
38
39
 
39
40
  export const MdxPage = ({
40
41
  mdxComponent: MdxComponent,
41
- file,
42
42
  frontmatter = {},
43
43
  defaultOptions,
44
+ __filepath,
44
45
  tableOfContents,
45
46
  excerpt,
46
47
  }: PropsWithChildren<
47
48
  Omit<MDXImport, "default"> & {
48
- file: string;
49
49
  mdxComponent: MDXImport["default"];
50
50
  defaultOptions?: MarkdownPluginDefaultOptions;
51
51
  }
@@ -63,6 +63,22 @@ export const MdxPage = ({
63
63
  defaultOptions?.disablePager ??
64
64
  false;
65
65
 
66
+ const showLastModified =
67
+ frontmatter.showLastModified ?? defaultOptions?.showLastModified ?? true;
68
+
69
+ const lastModifiedDate = frontmatter.lastModifiedTime
70
+ ? new Date(frontmatter.lastModifiedTime)
71
+ : null;
72
+
73
+ const editConfig =
74
+ frontmatter.suggestEdit !== false &&
75
+ (frontmatter.suggestEdit ?? defaultOptions?.suggestEdit);
76
+
77
+ const editUrl = editConfig
78
+ ? editConfig.url.replaceAll("{filePath}", __filepath)
79
+ : null;
80
+ const editText = editConfig ? editConfig.text || "Edit this page" : null;
81
+
66
82
  const tocEntries =
67
83
  tableOfContents.find((item) => item.depth === 1)?.children ??
68
84
  // if `title` is provided by frontmatter it does not appear in the table of contents
@@ -75,7 +91,7 @@ export const MdxPage = ({
75
91
  useEffect(() => {
76
92
  if (process.env.NODE_ENV === "development") {
77
93
  window.__getReactRefreshIgnoredExports = ({ id }) => {
78
- if (!id.endsWith(file)) return;
94
+ if (!id.endsWith(__filepath)) return;
79
95
 
80
96
  return ["frontmatter", "tableOfContents"];
81
97
  };
@@ -84,7 +100,7 @@ export const MdxPage = ({
84
100
  window.__getReactRefreshIgnoredExports = undefined;
85
101
  };
86
102
  }
87
- }, [file]);
103
+ }, [__filepath]);
88
104
 
89
105
  return (
90
106
  <div
@@ -96,12 +112,7 @@ export const MdxPage = ({
96
112
  <title>{pageTitle}</title>
97
113
  {excerpt && <meta name="description" content={excerpt} />}
98
114
  </Helmet>
99
- <div
100
- className={cn(
101
- ProseClasses,
102
- "max-w-full xl:w-full xl:max-w-3xl flex-1 shrink pt-(--padding-content-top)",
103
- )}
104
- >
115
+ <Typography className="max-w-full xl:w-full xl:max-w-3xl flex-1 shrink pt-(--padding-content-top)">
105
116
  {(category || title) && (
106
117
  <header>
107
118
  {category && <CategoryHeading>{category}</CategoryHeading>}
@@ -115,17 +126,57 @@ export const MdxPage = ({
115
126
  <MdxComponent
116
127
  components={{ ...useMDXComponents(), ...MarkdownHeadings }}
117
128
  />
129
+ <div className="h-16" />
130
+ {(showLastModified && lastModifiedDate) || editUrl ? (
131
+ <div className="flex justify-between text-xs text-muted-foreground ">
132
+ <div />
133
+ <div className="flex items-center gap-2">
134
+ <div>
135
+ {editUrl && (
136
+ <Button asChild variant="ghost" size="sm">
137
+ <a
138
+ href={editUrl}
139
+ target="_blank"
140
+ rel="noopener noreferrer"
141
+ className="flex items-center gap-1"
142
+ >
143
+ <EditIcon size={12} />
144
+ {editText}
145
+ </a>
146
+ </Button>
147
+ )}
148
+ </div>
149
+ <div>
150
+ {showLastModified && lastModifiedDate && (
151
+ <div
152
+ title={lastModifiedDate.toLocaleString(undefined, {
153
+ dateStyle: "full",
154
+ timeStyle: "medium",
155
+ })}
156
+ >
157
+ Last modified on{" "}
158
+ <time dateTime={lastModifiedDate.toISOString()}>
159
+ {lastModifiedDate.toLocaleDateString(undefined, {
160
+ dateStyle: "long",
161
+ })}
162
+ </time>
163
+ </div>
164
+ )}
165
+ </div>
166
+ </div>
167
+ </div>
168
+ ) : null}
118
169
  {!hidePager && (
119
170
  <>
120
- <hr className="my-10" />
171
+ <div className="h-px bg-border mt-2 mb-6" />
121
172
  <Pagination
122
173
  prev={prev ? { to: prev.id, label: prev.label } : undefined}
123
174
  next={next ? { to: next.id, label: next.label } : undefined}
124
- className="mb-4"
175
+ className="mb-10"
125
176
  />
126
177
  </>
127
178
  )}
128
- </div>
179
+ </Typography>
129
180
  <div className="hidden xl:block">
130
181
  {showToc && <Toc entries={tocEntries} />}
131
182
  </div>
@@ -9,7 +9,7 @@ export interface MarkdownPluginOptions extends ZudokuDocsConfig {
9
9
  }
10
10
  export type MarkdownPluginDefaultOptions = Pick<
11
11
  Frontmatter,
12
- "toc" | "disablePager"
12
+ "toc" | "disablePager" | "showLastModified" | "suggestEdit"
13
13
  >;
14
14
 
15
15
  export type Frontmatter = {
@@ -19,12 +19,21 @@ export type Frontmatter = {
19
19
  toc?: boolean;
20
20
  disablePager?: boolean;
21
21
  disable_pager?: boolean;
22
+ showLastModified?: boolean;
23
+ lastModifiedTime?: number;
24
+ suggestEdit?:
25
+ | {
26
+ url: string;
27
+ text?: string;
28
+ }
29
+ | false;
22
30
  };
23
31
 
24
32
  export type MDXImport = {
25
33
  tableOfContents: Toc;
26
34
  frontmatter: Frontmatter;
27
35
  excerpt?: string;
36
+ __filepath: string;
28
37
  default: (props: MDXProps) => JSX.Element;
29
38
  };
30
39
 
@@ -41,7 +50,6 @@ export const markdownPlugin = (
41
50
  return {
42
51
  element: (
43
52
  <MdxPage
44
- file={routePath}
45
53
  mdxComponent={Component}
46
54
  {...props}
47
55
  defaultOptions={options.defaultOptions}
@@ -17,10 +17,9 @@ import {
17
17
  } from "zudoku/ui/Select.js";
18
18
  import { CategoryHeading } from "../../components/CategoryHeading.js";
19
19
  import { Heading } from "../../components/Heading.js";
20
- import { Markdown, ProseClasses } from "../../components/Markdown.js";
20
+ import { Markdown } from "../../components/Markdown.js";
21
21
  import { Pagination } from "../../components/Pagination.js";
22
22
  import { useApiIdentities } from "../../components/context/ZudokuContext.js";
23
- import { cn } from "../../util/cn.js";
24
23
  import { Endpoint } from "./Endpoint.js";
25
24
  import { OperationListItem } from "./OperationListItem.js";
26
25
  import { useCreateQuery } from "./client/useCreateQuery.js";
@@ -291,14 +290,9 @@ export const OperationList = ({
291
290
  </div>
292
291
  {schema.description && (
293
292
  <CollapsibleContent className="CollapsibleContent">
294
- <div
295
- className={cn(
296
- ProseClasses,
297
- "pt-4 max-w-full prose-img:max-w-prose",
298
- )}
299
- >
293
+ <div className="mt-4 max-w-full border rounded-sm bg-muted/25">
300
294
  <Markdown
301
- className="border rounded-sm bg-muted/25 border-border px-2.5 md:px-4"
295
+ className="max-w-full prose-img:max-w-prose border-border p-3 lg:p-5"
302
296
  content={schema.description}
303
297
  />
304
298
  </div>
@@ -306,14 +300,10 @@ export const OperationList = ({
306
300
  )}
307
301
  </Collapsible>
308
302
  {tagDescription && (
309
- <div
310
- className={cn(
311
- ProseClasses,
312
- "my-4 max-w-full prose-img:max-w-prose",
313
- )}
314
- >
315
- <Markdown content={tagDescription} />
316
- </div>
303
+ <Markdown
304
+ className="my-4 max-w-full prose-img:max-w-prose"
305
+ content={tagDescription}
306
+ />
317
307
  )}
318
308
  </div>
319
309
  <hr />
@@ -2,7 +2,7 @@ import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
2
2
  import { useState } from "react";
3
3
  import { Badge } from "zudoku/ui/Badge.js";
4
4
  import { Heading } from "../../components/Heading.js";
5
- import { Markdown, ProseClasses } from "../../components/Markdown.js";
5
+ import { Markdown } from "../../components/Markdown.js";
6
6
  import { cn } from "../../util/cn.js";
7
7
  import { groupBy } from "../../util/groupBy.js";
8
8
  import { renderIf } from "../../util/renderIf.js";
@@ -82,7 +82,7 @@ export const OperationListItem = ({
82
82
  >
83
83
  {operation.description && (
84
84
  <Markdown
85
- className={`${ProseClasses} max-w-full prose-img:max-w-prose`}
85
+ className="max-w-full prose-img:max-w-prose"
86
86
  content={operation.description}
87
87
  />
88
88
  )}
@@ -72,6 +72,12 @@ export const ParameterListItem = ({
72
72
  {parameter.description && (
73
73
  <Markdown
74
74
  content={parameter.description}
75
+ className="text-sm prose prose-p:my-1 prose-code:whitespace-pre-line"
76
+ />
77
+ )}
78
+ {paramSchema.description && (
79
+ <Markdown
80
+ content={paramSchema.description}
75
81
  className="text-sm prose-p:my-1 prose-code:whitespace-pre-line"
76
82
  />
77
83
  )}
@@ -14,9 +14,8 @@ import {
14
14
  } from "zudoku/ui/Collapsible.js";
15
15
  import { CategoryHeading } from "../../components/CategoryHeading.js";
16
16
  import { Heading } from "../../components/Heading.js";
17
- import { Markdown, ProseClasses } from "../../components/Markdown.js";
17
+ import { Markdown } from "../../components/Markdown.js";
18
18
  import { Toc } from "../../components/navigation/Toc.js";
19
- import { cn } from "../../util/cn.js";
20
19
  import { useCreateQuery } from "./client/useCreateQuery.js";
21
20
  import { useOasConfig } from "./context.js";
22
21
  import { graphql } from "./graphql/gql.js";
@@ -110,14 +109,9 @@ export function SchemaList() {
110
109
  </div>
111
110
  {data.schema.description && (
112
111
  <CollapsibleContent className="CollapsibleContent">
113
- <div
114
- className={cn(
115
- ProseClasses,
116
- "pt-4 max-w-full prose-img:max-w-prose",
117
- )}
118
- >
112
+ <div className="mt-4 max-w-full border rounded-sm bg-muted/25">
119
113
  <Markdown
120
- className="border rounded-sm bg-muted/25 border-border px-2.5 md:px-4"
114
+ className="max-w-full prose-img:max-w-prose border-border p-3 lg:p-5"
121
115
  content={data.schema.description}
122
116
  />
123
117
  </div>
@@ -1,7 +1,13 @@
1
+ import { FileInput } from "lucide-react";
1
2
  import { useFormContext } from "react-hook-form";
3
+ import { Collapsible, CollapsibleContent } from "zudoku/ui/Collapsible.js";
2
4
  import { Textarea } from "zudoku/ui/Textarea.js";
3
5
  import { cn } from "../../../util/cn.js";
4
6
  import { type Content } from "../SidecarExamples.js";
7
+ import {
8
+ CollapsibleHeader,
9
+ CollapsibleHeaderTrigger,
10
+ } from "./CollapsibleHeader.js";
5
11
  import ExamplesDropdown from "./ExamplesDropdown.js";
6
12
  import { type PlaygroundForm } from "./Playground.js";
7
13
 
@@ -11,35 +17,37 @@ export const BodyPanel = ({ examples }: { examples?: Content }) => {
11
17
  const headers = watch("headers");
12
18
 
13
19
  return (
14
- <div className="flex flex-col gap-2 ">
15
- <div className="flex justify-between gap-2">
16
- <span className="font-semibold">Body</span>
17
- <div className="flex flex-col gap-2">
18
- {examples && examples.length > 0 && (
19
- <ExamplesDropdown
20
- examples={examples}
21
- onSelect={(example, mediaType) => {
22
- setValue("body", JSON.stringify(example.value, null, 2));
23
- setValue("headers", [
24
- ...headers.filter((h) => h.name !== "Content-Type"),
25
- {
26
- name: "Content-Type",
27
- value: mediaType,
28
- active: true,
29
- },
30
- ]);
31
- }}
32
- />
33
- )}
34
- </div>
35
- </div>
36
- <Textarea
37
- {...register("body")}
38
- className={cn(
39
- "border w-full rounded-lg bg-muted/40 p-2 h-64 font-mono text-[13px]",
20
+ <Collapsible defaultOpen>
21
+ <CollapsibleHeaderTrigger>
22
+ <FileInput size={16} />
23
+ <CollapsibleHeader>Body</CollapsibleHeader>
24
+ {examples && examples.length > 0 && (
25
+ <ExamplesDropdown
26
+ examples={examples}
27
+ onSelect={(example, mediaType) => {
28
+ setValue("body", JSON.stringify(example.value, null, 2));
29
+ setValue("headers", [
30
+ ...headers.filter((h) => h.name !== "Content-Type"),
31
+ {
32
+ name: "Content-Type",
33
+ value: mediaType,
34
+ active: true,
35
+ },
36
+ ]);
37
+ }}
38
+ />
40
39
  )}
41
- />
42
- </div>
40
+ </CollapsibleHeaderTrigger>
41
+ <CollapsibleContent className="flex flex-col gap-2 ">
42
+ <Textarea
43
+ {...register("body")}
44
+ className={cn(
45
+ "w-full p-2 h-64 font-mono md:text-xs border-none rounded-none focus-visible:ring-0",
46
+ )}
47
+ placeholder="Your body here..."
48
+ />
49
+ </CollapsibleContent>
50
+ </Collapsible>
43
51
  );
44
52
  };
45
53