@brainfish-ai/devdoc 0.1.42 → 0.1.43

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 (388) hide show
  1. package/dist/cli/commands/dev.js +19 -10
  2. package/package.json +3 -2
  3. package/renderer/app/api/assets/[...path]/route.js +108 -0
  4. package/renderer/app/api/assets/route.js +114 -0
  5. package/renderer/app/api/assets/upload/route.js +163 -0
  6. package/renderer/app/api/auth-schemes/route.js +58 -0
  7. package/renderer/app/api/chat/route.js +759 -0
  8. package/renderer/app/api/codegen/route.js +52 -0
  9. package/renderer/app/api/collections/route.js +675 -0
  10. package/renderer/app/api/debug/route.js +47 -0
  11. package/renderer/app/api/deploy/route.js +199 -0
  12. package/renderer/app/api/device/route.js +36 -0
  13. package/renderer/app/api/docs/route.js +205 -0
  14. package/renderer/app/api/domains/add/route.js +121 -0
  15. package/renderer/app/api/domains/lookup/route.js +43 -0
  16. package/renderer/app/api/domains/remove/route.js +89 -0
  17. package/renderer/app/api/domains/status/route.js +140 -0
  18. package/renderer/app/api/domains/verify/route.js +168 -0
  19. package/renderer/app/api/keys/regenerate/route.js +71 -0
  20. package/renderer/app/api/local-assets/[...path]/route.js +108 -0
  21. package/renderer/app/api/openapi-spec/route.js +73 -0
  22. package/renderer/app/api/projects/[slug]/route.js +129 -0
  23. package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
  24. package/renderer/app/api/projects/register/route.js +176 -0
  25. package/renderer/app/api/proxy/route.js +139 -0
  26. package/renderer/app/api/proxy-stream/route.js +156 -0
  27. package/renderer/app/api/redirects/route.js +35 -0
  28. package/renderer/app/api/schema/route.js +85 -0
  29. package/renderer/app/api/subdomains/check/route.js +158 -0
  30. package/renderer/app/api/suggestions/route.js +175 -0
  31. package/renderer/app/layout.js +47 -0
  32. package/renderer/app/llms-full.txt/route.js +257 -0
  33. package/renderer/app/llms.txt/route.js +219 -0
  34. package/renderer/app/page.js +12 -0
  35. package/renderer/app/robots.txt/route.js +66 -0
  36. package/renderer/app/sitemap.xml/route.js +145 -0
  37. package/renderer/components/docs/index.js +8 -0
  38. package/renderer/components/docs/mdx/accordion.js +113 -0
  39. package/renderer/components/docs/mdx/badge.js +72 -0
  40. package/renderer/components/docs/mdx/callouts.js +137 -0
  41. package/renderer/components/docs/mdx/cards.js +175 -0
  42. package/renderer/components/docs/mdx/changelog.js +100 -0
  43. package/renderer/components/docs/mdx/code-block.js +147 -0
  44. package/renderer/components/docs/mdx/code-group.js +287 -0
  45. package/renderer/components/docs/mdx/file-embeds.js +82 -0
  46. package/renderer/components/docs/mdx/frame.js +59 -0
  47. package/renderer/components/docs/mdx/highlight.js +90 -0
  48. package/renderer/components/docs/mdx/iframe.js +69 -0
  49. package/renderer/components/docs/mdx/image.js +135 -0
  50. package/renderer/components/docs/mdx/index.js +134 -0
  51. package/renderer/components/docs/mdx/landing.js +315 -0
  52. package/renderer/components/docs/mdx/mermaid.js +212 -0
  53. package/renderer/components/docs/mdx/param-field.js +112 -0
  54. package/renderer/components/docs/mdx/steps.js +74 -0
  55. package/renderer/components/docs/mdx/tabs.js +50 -0
  56. package/renderer/components/docs/mdx-renderer.js +77 -0
  57. package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
  58. package/renderer/components/docs/navigation/index.js +6 -0
  59. package/renderer/components/docs/navigation/page-nav.js +57 -0
  60. package/renderer/components/docs/navigation/sidebar.js +375 -0
  61. package/renderer/components/docs/navigation/toc.js +89 -0
  62. package/renderer/components/docs/notice.js +77 -0
  63. package/renderer/components/docs-header.js +202 -0
  64. package/renderer/components/docs-viewer/agent/agent-chat.js +1930 -0
  65. package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
  66. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
  67. package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
  68. package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
  69. package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
  70. package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
  71. package/renderer/components/docs-viewer/agent/index.js +4 -0
  72. package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
  73. package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
  74. package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
  75. package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
  76. package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
  77. package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
  78. package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
  79. package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
  80. package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
  81. package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
  82. package/renderer/components/docs-viewer/content/doc-page.js +264 -0
  83. package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
  84. package/renderer/components/docs-viewer/content/index.js +29 -0
  85. package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
  86. package/renderer/components/docs-viewer/content/request-details.js +528 -0
  87. package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
  88. package/renderer/components/docs-viewer/content/sections/body.js +80 -0
  89. package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
  90. package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
  91. package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
  92. package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
  93. package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
  94. package/renderer/components/docs-viewer/index.js +1552 -0
  95. package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
  96. package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
  97. package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
  98. package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
  99. package/renderer/components/docs-viewer/playground/graphql-playground.js +734 -0
  100. package/renderer/components/docs-viewer/playground/index.js +682 -0
  101. package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
  102. package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
  103. package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
  104. package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
  105. package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
  106. package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
  107. package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
  108. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
  109. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
  110. package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
  111. package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
  112. package/renderer/components/docs-viewer/search/index.js +2 -0
  113. package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
  114. package/renderer/components/docs-viewer/search/use-search.js +89 -0
  115. package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
  116. package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
  117. package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
  118. package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
  119. package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
  120. package/renderer/components/docs-viewer/sidebar/index.js +196 -0
  121. package/renderer/components/docs-viewer/sidebar/right-sidebar.js +163 -0
  122. package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
  123. package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
  124. package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
  125. package/renderer/components/theme-provider.js +10 -0
  126. package/renderer/components/theme-toggle.js +106 -0
  127. package/renderer/components/ui/badge.js +29 -0
  128. package/renderer/components/ui/button.js +40 -0
  129. package/renderer/components/ui/dialog.js +50 -0
  130. package/renderer/components/ui/dropdown-menu.js +143 -0
  131. package/renderer/components/ui/input.js +12 -0
  132. package/renderer/components/ui/label.js +13 -0
  133. package/renderer/components/ui/navigation-menu.js +83 -0
  134. package/renderer/components/ui/select.js +116 -0
  135. package/renderer/components/ui/spinner.js +92 -0
  136. package/renderer/components/ui/tabs.js +34 -0
  137. package/renderer/components/ui/tooltip.js +43 -0
  138. package/renderer/hooks/use-code-copy.js +76 -0
  139. package/renderer/hooks/use-openapi-title.js +33 -0
  140. package/renderer/lib/api-docs/agent/index.js +4 -0
  141. package/renderer/lib/api-docs/agent/indexer.js +254 -0
  142. package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
  143. package/renderer/lib/api-docs/agent/types.js +5 -0
  144. package/renderer/lib/api-docs/auth/auth-context.js +157 -0
  145. package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
  146. package/renderer/lib/api-docs/auth/crypto.js +64 -0
  147. package/renderer/lib/api-docs/auth/index.js +3 -0
  148. package/renderer/lib/api-docs/code-editor/db.js +145 -0
  149. package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
  150. package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
  151. package/renderer/lib/api-docs/code-editor/mode-context.js +154 -0
  152. package/renderer/lib/api-docs/code-editor/types.js +53 -0
  153. package/renderer/lib/api-docs/codegen/definitions.js +258 -0
  154. package/renderer/lib/api-docs/codegen/har.js +171 -0
  155. package/renderer/lib/api-docs/codegen/index.js +118 -0
  156. package/renderer/lib/api-docs/factories.js +136 -0
  157. package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
  158. package/renderer/lib/api-docs/mobile-context.js +79 -0
  159. package/renderer/lib/api-docs/navigation-context.js +62 -0
  160. package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
  161. package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
  162. package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
  163. package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
  164. package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
  165. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
  166. package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
  167. package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
  168. package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
  169. package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
  170. package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
  171. package/renderer/lib/api-docs/playground/context.js +65 -0
  172. package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
  173. package/renderer/lib/api-docs/playground/request-builder.js +163 -0
  174. package/renderer/lib/api-docs/playground/request-runner.js +224 -0
  175. package/renderer/lib/api-docs/playground/types.js +5 -0
  176. package/renderer/lib/api-docs/types.js +23 -0
  177. package/renderer/lib/api-docs/utils.js +212 -0
  178. package/renderer/lib/cache.js +157 -0
  179. package/renderer/lib/docs/config/domain-schema.js +161 -0
  180. package/renderer/lib/docs/config/index.js +5 -0
  181. package/renderer/lib/docs/config/loader.js +113 -0
  182. package/renderer/lib/docs/config/schema.js +269 -0
  183. package/renderer/lib/docs/index.js +8 -0
  184. package/renderer/lib/docs/mdx/compiler.js +128 -0
  185. package/renderer/lib/docs/mdx/frontmatter.js +73 -0
  186. package/renderer/lib/docs/mdx/index.js +8 -0
  187. package/renderer/lib/docs/navigation/generator.js +269 -0
  188. package/renderer/lib/docs/navigation/index.js +4 -0
  189. package/renderer/lib/docs/navigation/types.js +9 -0
  190. package/renderer/lib/docs-navigation-context.js +40 -0
  191. package/renderer/lib/multi-tenant/context.js +80 -0
  192. package/renderer/lib/storage/blob.js +767 -0
  193. package/renderer/lib/utils/icons.js +30 -0
  194. package/renderer/lib/utils.js +5 -0
  195. package/renderer/next.config.js +62 -0
  196. package/renderer/tsconfig.json +23 -5
  197. package/renderer/app/api/assets/[...path]/route.ts +0 -123
  198. package/renderer/app/api/assets/route.ts +0 -124
  199. package/renderer/app/api/assets/upload/route.ts +0 -177
  200. package/renderer/app/api/auth-schemes/route.ts +0 -77
  201. package/renderer/app/api/chat/route.ts +0 -858
  202. package/renderer/app/api/codegen/route.ts +0 -72
  203. package/renderer/app/api/collections/route.ts +0 -1002
  204. package/renderer/app/api/debug/route.ts +0 -53
  205. package/renderer/app/api/deploy/route.ts +0 -234
  206. package/renderer/app/api/device/route.ts +0 -42
  207. package/renderer/app/api/docs/route.ts +0 -201
  208. package/renderer/app/api/domains/add/route.ts +0 -132
  209. package/renderer/app/api/domains/lookup/route.ts +0 -43
  210. package/renderer/app/api/domains/remove/route.ts +0 -100
  211. package/renderer/app/api/domains/status/route.ts +0 -158
  212. package/renderer/app/api/domains/verify/route.ts +0 -181
  213. package/renderer/app/api/keys/regenerate/route.ts +0 -80
  214. package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
  215. package/renderer/app/api/openapi-spec/route.ts +0 -151
  216. package/renderer/app/api/projects/[slug]/route.ts +0 -153
  217. package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
  218. package/renderer/app/api/projects/register/route.ts +0 -152
  219. package/renderer/app/api/proxy/route.ts +0 -149
  220. package/renderer/app/api/proxy-stream/route.ts +0 -168
  221. package/renderer/app/api/redirects/route.ts +0 -47
  222. package/renderer/app/api/schema/route.ts +0 -73
  223. package/renderer/app/api/subdomains/check/route.ts +0 -172
  224. package/renderer/app/api/suggestions/route.ts +0 -144
  225. package/renderer/app/layout.tsx +0 -54
  226. package/renderer/app/llms-full.txt/route.ts +0 -346
  227. package/renderer/app/llms.txt/route.ts +0 -279
  228. package/renderer/app/page.tsx +0 -14
  229. package/renderer/app/robots.txt/route.ts +0 -84
  230. package/renderer/app/sitemap.xml/route.ts +0 -199
  231. package/renderer/components/docs/index.ts +0 -12
  232. package/renderer/components/docs/mdx/accordion.tsx +0 -169
  233. package/renderer/components/docs/mdx/badge.tsx +0 -132
  234. package/renderer/components/docs/mdx/callouts.tsx +0 -154
  235. package/renderer/components/docs/mdx/cards.tsx +0 -241
  236. package/renderer/components/docs/mdx/changelog.tsx +0 -120
  237. package/renderer/components/docs/mdx/code-block.tsx +0 -186
  238. package/renderer/components/docs/mdx/code-group.tsx +0 -421
  239. package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
  240. package/renderer/components/docs/mdx/frame.tsx +0 -112
  241. package/renderer/components/docs/mdx/highlight.tsx +0 -151
  242. package/renderer/components/docs/mdx/iframe.tsx +0 -134
  243. package/renderer/components/docs/mdx/image.tsx +0 -235
  244. package/renderer/components/docs/mdx/index.ts +0 -237
  245. package/renderer/components/docs/mdx/landing.tsx +0 -684
  246. package/renderer/components/docs/mdx/mermaid.tsx +0 -240
  247. package/renderer/components/docs/mdx/param-field.tsx +0 -200
  248. package/renderer/components/docs/mdx/steps.tsx +0 -113
  249. package/renderer/components/docs/mdx/tabs.tsx +0 -86
  250. package/renderer/components/docs/mdx-renderer.tsx +0 -100
  251. package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
  252. package/renderer/components/docs/navigation/index.ts +0 -8
  253. package/renderer/components/docs/navigation/page-nav.tsx +0 -64
  254. package/renderer/components/docs/navigation/sidebar.tsx +0 -515
  255. package/renderer/components/docs/navigation/toc.tsx +0 -113
  256. package/renderer/components/docs/notice.tsx +0 -105
  257. package/renderer/components/docs-header.tsx +0 -278
  258. package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
  259. package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
  260. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
  261. package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
  262. package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
  263. package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
  264. package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
  265. package/renderer/components/docs-viewer/agent/index.tsx +0 -6
  266. package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
  267. package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
  268. package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
  269. package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
  270. package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
  271. package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
  272. package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
  273. package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
  274. package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
  275. package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
  276. package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
  277. package/renderer/components/docs-viewer/content/index.tsx +0 -29
  278. package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
  279. package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
  280. package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
  281. package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
  282. package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
  283. package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
  284. package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
  285. package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
  286. package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
  287. package/renderer/components/docs-viewer/index.tsx +0 -1670
  288. package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
  289. package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
  290. package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
  291. package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
  292. package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
  293. package/renderer/components/docs-viewer/playground/index.tsx +0 -671
  294. package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
  295. package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
  296. package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
  297. package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
  298. package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
  299. package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
  300. package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
  301. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
  302. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
  303. package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
  304. package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
  305. package/renderer/components/docs-viewer/search/index.ts +0 -2
  306. package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
  307. package/renderer/components/docs-viewer/search/use-search.ts +0 -117
  308. package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
  309. package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
  310. package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
  311. package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
  312. package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
  313. package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
  314. package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
  315. package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
  316. package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
  317. package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
  318. package/renderer/components/theme-provider.tsx +0 -11
  319. package/renderer/components/theme-toggle.tsx +0 -76
  320. package/renderer/components/ui/badge.tsx +0 -46
  321. package/renderer/components/ui/button.tsx +0 -59
  322. package/renderer/components/ui/dialog.tsx +0 -118
  323. package/renderer/components/ui/dropdown-menu.tsx +0 -257
  324. package/renderer/components/ui/input.tsx +0 -21
  325. package/renderer/components/ui/label.tsx +0 -24
  326. package/renderer/components/ui/navigation-menu.tsx +0 -168
  327. package/renderer/components/ui/select.tsx +0 -190
  328. package/renderer/components/ui/spinner.tsx +0 -114
  329. package/renderer/components/ui/tabs.tsx +0 -66
  330. package/renderer/components/ui/tooltip.tsx +0 -61
  331. package/renderer/hooks/use-code-copy.ts +0 -88
  332. package/renderer/hooks/use-openapi-title.ts +0 -44
  333. package/renderer/lib/api-docs/agent/index.ts +0 -6
  334. package/renderer/lib/api-docs/agent/indexer.ts +0 -323
  335. package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
  336. package/renderer/lib/api-docs/agent/types.ts +0 -116
  337. package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
  338. package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
  339. package/renderer/lib/api-docs/auth/crypto.ts +0 -89
  340. package/renderer/lib/api-docs/auth/index.ts +0 -4
  341. package/renderer/lib/api-docs/code-editor/db.ts +0 -164
  342. package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
  343. package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
  344. package/renderer/lib/api-docs/code-editor/types.ts +0 -105
  345. package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
  346. package/renderer/lib/api-docs/codegen/har.ts +0 -251
  347. package/renderer/lib/api-docs/codegen/index.ts +0 -159
  348. package/renderer/lib/api-docs/factories.ts +0 -170
  349. package/renderer/lib/api-docs/mobile-context.tsx +0 -112
  350. package/renderer/lib/api-docs/navigation-context.tsx +0 -88
  351. package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
  352. package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
  353. package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
  354. package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
  355. package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
  356. package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
  357. package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
  358. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
  359. package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
  360. package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
  361. package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
  362. package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
  363. package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
  364. package/renderer/lib/api-docs/playground/context.tsx +0 -107
  365. package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
  366. package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
  367. package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
  368. package/renderer/lib/api-docs/playground/types.ts +0 -35
  369. package/renderer/lib/api-docs/types.ts +0 -269
  370. package/renderer/lib/api-docs/utils.ts +0 -311
  371. package/renderer/lib/cache.ts +0 -193
  372. package/renderer/lib/docs/config/domain-schema.ts +0 -260
  373. package/renderer/lib/docs/config/index.ts +0 -43
  374. package/renderer/lib/docs/config/loader.ts +0 -142
  375. package/renderer/lib/docs/config/schema.ts +0 -308
  376. package/renderer/lib/docs/index.ts +0 -12
  377. package/renderer/lib/docs/mdx/compiler.ts +0 -176
  378. package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
  379. package/renderer/lib/docs/mdx/index.ts +0 -26
  380. package/renderer/lib/docs/navigation/generator.ts +0 -348
  381. package/renderer/lib/docs/navigation/index.ts +0 -12
  382. package/renderer/lib/docs/navigation/types.ts +0 -123
  383. package/renderer/lib/docs-navigation-context.tsx +0 -80
  384. package/renderer/lib/multi-tenant/context.ts +0 -105
  385. package/renderer/lib/storage/blob.ts +0 -1083
  386. package/renderer/lib/utils/icons.ts +0 -48
  387. package/renderer/lib/utils.ts +0 -6
  388. package/renderer/next.config.ts +0 -76
@@ -0,0 +1,418 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { ShieldCheck, Key, Lock, User, Hash, WarningCircle } from '@phosphor-icons/react';
4
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
5
+ import { Input } from '@/components/ui/input';
6
+ import { cn } from '@/lib/utils';
7
+ import { usePlaygroundNavigation } from '@/lib/api-docs/playground/navigation-context';
8
+ const AUTH_TYPES = [
9
+ {
10
+ value: 'none',
11
+ label: 'No Auth',
12
+ icon: ShieldCheck
13
+ },
14
+ {
15
+ value: 'basic',
16
+ label: 'Basic Auth',
17
+ icon: User
18
+ },
19
+ {
20
+ value: 'bearer',
21
+ label: 'Bearer Token',
22
+ icon: Key
23
+ },
24
+ {
25
+ value: 'api-key',
26
+ label: 'API Key',
27
+ icon: Lock
28
+ }
29
+ ];
30
+ export function AuthEditor({ auth, onChange, showError = false }) {
31
+ const { state: navState } = usePlaygroundNavigation();
32
+ // Check if auth field should be highlighted (from either prop or context)
33
+ const isHighlighted = showError || navState.highlightField?.type === 'auth' && navState.showError;
34
+ const handleTypeChange = (type)=>{
35
+ switch(type){
36
+ case 'none':
37
+ onChange({
38
+ authType: 'none',
39
+ authActive: true
40
+ });
41
+ break;
42
+ case 'basic':
43
+ onChange({
44
+ authType: 'basic',
45
+ authActive: true,
46
+ username: '',
47
+ password: ''
48
+ });
49
+ break;
50
+ case 'bearer':
51
+ onChange({
52
+ authType: 'bearer',
53
+ authActive: true,
54
+ token: ''
55
+ });
56
+ break;
57
+ case 'api-key':
58
+ onChange({
59
+ authType: 'api-key',
60
+ authActive: true,
61
+ addTo: 'HEADERS',
62
+ key: 'X-API-Key',
63
+ value: ''
64
+ });
65
+ break;
66
+ }
67
+ };
68
+ const currentType = AUTH_TYPES.find((t)=>t.value === auth.authType) || AUTH_TYPES[0];
69
+ const CurrentIcon = currentType.icon;
70
+ return /*#__PURE__*/ _jsxs("div", {
71
+ className: "flex flex-col h-full",
72
+ children: [
73
+ /*#__PURE__*/ _jsxs("div", {
74
+ className: cn("flex items-center border-b bg-muted/30 px-4 py-2", isHighlighted ? "border-red-500 bg-red-500/5" : "border-border"),
75
+ children: [
76
+ isHighlighted && /*#__PURE__*/ _jsx(WarningCircle, {
77
+ className: "h-4 w-4 text-red-500 animate-pulse mr-2",
78
+ weight: "fill"
79
+ }),
80
+ /*#__PURE__*/ _jsx("span", {
81
+ className: cn("text-xs font-medium mr-3", isHighlighted ? "text-red-500" : "text-muted-foreground"),
82
+ children: isHighlighted ? "Auth required" : "Type"
83
+ }),
84
+ /*#__PURE__*/ _jsxs(Select, {
85
+ value: auth.authType,
86
+ onValueChange: handleTypeChange,
87
+ children: [
88
+ /*#__PURE__*/ _jsx(SelectTrigger, {
89
+ className: "h-8 w-auto min-w-[140px] text-sm border-0 bg-transparent hover:bg-muted/50",
90
+ children: /*#__PURE__*/ _jsx(SelectValue, {
91
+ children: /*#__PURE__*/ _jsxs("span", {
92
+ className: "flex items-center gap-2",
93
+ children: [
94
+ /*#__PURE__*/ _jsx(CurrentIcon, {
95
+ className: "h-3.5 w-3.5",
96
+ weight: "bold"
97
+ }),
98
+ /*#__PURE__*/ _jsx("span", {
99
+ children: currentType.label
100
+ })
101
+ ]
102
+ })
103
+ })
104
+ }),
105
+ /*#__PURE__*/ _jsx(SelectContent, {
106
+ children: AUTH_TYPES.map((type)=>/*#__PURE__*/ _jsx(SelectItem, {
107
+ value: type.value,
108
+ children: /*#__PURE__*/ _jsxs("div", {
109
+ className: "flex items-center gap-2",
110
+ children: [
111
+ /*#__PURE__*/ _jsx(type.icon, {
112
+ className: "h-3.5 w-3.5",
113
+ weight: "bold"
114
+ }),
115
+ /*#__PURE__*/ _jsx("span", {
116
+ children: type.label
117
+ })
118
+ ]
119
+ })
120
+ }, type.value))
121
+ })
122
+ ]
123
+ })
124
+ ]
125
+ }),
126
+ /*#__PURE__*/ _jsxs("div", {
127
+ className: "flex-1 overflow-auto",
128
+ children: [
129
+ auth.authType === 'none' && /*#__PURE__*/ _jsx("div", {
130
+ className: cn("flex flex-col items-center justify-center py-12 px-6 text-center", isHighlighted && "bg-red-500/5 border-2 border-red-500/30 rounded-lg m-4 animate-pulse"),
131
+ children: isHighlighted ? /*#__PURE__*/ _jsxs(_Fragment, {
132
+ children: [
133
+ /*#__PURE__*/ _jsx(WarningCircle, {
134
+ className: "h-10 w-10 text-red-500 mb-3",
135
+ weight: "fill"
136
+ }),
137
+ /*#__PURE__*/ _jsx("p", {
138
+ className: "text-sm font-medium text-red-600 dark:text-red-400 mb-1",
139
+ children: "Authentication Required"
140
+ }),
141
+ /*#__PURE__*/ _jsx("p", {
142
+ className: "text-xs text-muted-foreground",
143
+ children: "Select an auth type above to configure credentials"
144
+ })
145
+ ]
146
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
147
+ children: [
148
+ /*#__PURE__*/ _jsx(ShieldCheck, {
149
+ className: "h-10 w-10 text-muted-foreground/50 mb-3",
150
+ weight: "duotone"
151
+ }),
152
+ /*#__PURE__*/ _jsx("p", {
153
+ className: "text-sm text-muted-foreground",
154
+ children: "No authentication required"
155
+ })
156
+ ]
157
+ })
158
+ }),
159
+ auth.authType === 'basic' && /*#__PURE__*/ _jsxs("table", {
160
+ className: "w-full text-sm",
161
+ children: [
162
+ /*#__PURE__*/ _jsx("thead", {
163
+ className: "bg-muted/20 text-xs text-muted-foreground",
164
+ children: /*#__PURE__*/ _jsxs("tr", {
165
+ children: [
166
+ /*#__PURE__*/ _jsx("th", {
167
+ className: "text-left font-medium px-4 py-2 w-32",
168
+ children: "Field"
169
+ }),
170
+ /*#__PURE__*/ _jsx("th", {
171
+ className: "text-left font-medium px-4 py-2",
172
+ children: "Value"
173
+ })
174
+ ]
175
+ })
176
+ }),
177
+ /*#__PURE__*/ _jsxs("tbody", {
178
+ children: [
179
+ /*#__PURE__*/ _jsxs("tr", {
180
+ className: "border-b border-border/50",
181
+ children: [
182
+ /*#__PURE__*/ _jsx("td", {
183
+ className: "px-4 py-1",
184
+ children: /*#__PURE__*/ _jsxs("div", {
185
+ className: "flex items-center gap-2 text-sm font-medium",
186
+ children: [
187
+ /*#__PURE__*/ _jsx(User, {
188
+ className: "h-3.5 w-3.5 text-muted-foreground"
189
+ }),
190
+ "username"
191
+ ]
192
+ })
193
+ }),
194
+ /*#__PURE__*/ _jsx("td", {
195
+ className: "px-2 py-1",
196
+ children: /*#__PURE__*/ _jsx(Input, {
197
+ type: "text",
198
+ value: auth.username,
199
+ onChange: (e)=>onChange({
200
+ ...auth,
201
+ username: e.target.value
202
+ }),
203
+ placeholder: "Enter username...",
204
+ className: "h-9 border-border/50 bg-transparent focus-visible:ring-1 focus-visible:ring-ring"
205
+ })
206
+ })
207
+ ]
208
+ }),
209
+ /*#__PURE__*/ _jsxs("tr", {
210
+ className: "border-b border-border/50",
211
+ children: [
212
+ /*#__PURE__*/ _jsx("td", {
213
+ className: "px-4 py-1",
214
+ children: /*#__PURE__*/ _jsxs("div", {
215
+ className: "flex items-center gap-2 text-sm font-medium",
216
+ children: [
217
+ /*#__PURE__*/ _jsx(Lock, {
218
+ className: "h-3.5 w-3.5 text-muted-foreground"
219
+ }),
220
+ "password"
221
+ ]
222
+ })
223
+ }),
224
+ /*#__PURE__*/ _jsx("td", {
225
+ className: "px-2 py-1",
226
+ children: /*#__PURE__*/ _jsx(Input, {
227
+ type: "password",
228
+ value: auth.password,
229
+ onChange: (e)=>onChange({
230
+ ...auth,
231
+ password: e.target.value
232
+ }),
233
+ placeholder: "Enter password...",
234
+ className: "h-9 border-border/50 bg-transparent focus-visible:ring-1 focus-visible:ring-ring"
235
+ })
236
+ })
237
+ ]
238
+ })
239
+ ]
240
+ })
241
+ ]
242
+ }),
243
+ auth.authType === 'bearer' && /*#__PURE__*/ _jsxs("table", {
244
+ className: "w-full text-sm",
245
+ children: [
246
+ /*#__PURE__*/ _jsx("thead", {
247
+ className: "bg-muted/20 text-xs text-muted-foreground",
248
+ children: /*#__PURE__*/ _jsxs("tr", {
249
+ children: [
250
+ /*#__PURE__*/ _jsx("th", {
251
+ className: "text-left font-medium px-4 py-2 w-32",
252
+ children: "Field"
253
+ }),
254
+ /*#__PURE__*/ _jsx("th", {
255
+ className: "text-left font-medium px-4 py-2",
256
+ children: "Value"
257
+ })
258
+ ]
259
+ })
260
+ }),
261
+ /*#__PURE__*/ _jsx("tbody", {
262
+ children: /*#__PURE__*/ _jsxs("tr", {
263
+ className: "border-b border-border/50",
264
+ children: [
265
+ /*#__PURE__*/ _jsx("td", {
266
+ className: "px-4 py-1 align-top pt-3",
267
+ children: /*#__PURE__*/ _jsxs("div", {
268
+ className: "flex items-center gap-2 text-sm font-medium",
269
+ children: [
270
+ /*#__PURE__*/ _jsx(Key, {
271
+ className: "h-3.5 w-3.5 text-muted-foreground"
272
+ }),
273
+ "token"
274
+ ]
275
+ })
276
+ }),
277
+ /*#__PURE__*/ _jsx("td", {
278
+ className: "px-2 py-1",
279
+ children: /*#__PURE__*/ _jsx("textarea", {
280
+ value: auth.token,
281
+ onChange: (e)=>onChange({
282
+ ...auth,
283
+ token: e.target.value
284
+ }),
285
+ placeholder: "Paste your bearer token...",
286
+ className: "w-full min-h-[80px] px-3 py-2 rounded-md border border-border/50 bg-transparent font-mono text-sm resize-none focus:outline-none focus:ring-1 focus:ring-ring placeholder:text-muted-foreground/50"
287
+ })
288
+ })
289
+ ]
290
+ })
291
+ })
292
+ ]
293
+ }),
294
+ auth.authType === 'api-key' && /*#__PURE__*/ _jsxs(_Fragment, {
295
+ children: [
296
+ /*#__PURE__*/ _jsxs("div", {
297
+ className: "flex items-center gap-3 px-4 py-3 border-b border-border/50 bg-muted/10",
298
+ children: [
299
+ /*#__PURE__*/ _jsx("span", {
300
+ className: "text-xs text-muted-foreground font-medium",
301
+ children: "Add to"
302
+ }),
303
+ /*#__PURE__*/ _jsxs("div", {
304
+ className: "flex p-0.5 bg-muted rounded-sm",
305
+ children: [
306
+ /*#__PURE__*/ _jsx("button", {
307
+ type: "button",
308
+ onClick: ()=>onChange({
309
+ ...auth,
310
+ addTo: 'HEADERS'
311
+ }),
312
+ className: cn("px-3 py-1 rounded text-xs font-medium transition-all", auth.addTo === 'HEADERS' ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"),
313
+ children: "Header"
314
+ }),
315
+ /*#__PURE__*/ _jsx("button", {
316
+ type: "button",
317
+ onClick: ()=>onChange({
318
+ ...auth,
319
+ addTo: 'QUERY_PARAMS'
320
+ }),
321
+ className: cn("px-3 py-1 rounded text-xs font-medium transition-all", auth.addTo === 'QUERY_PARAMS' ? "bg-background text-foreground shadow-sm" : "text-muted-foreground hover:text-foreground"),
322
+ children: "Query"
323
+ })
324
+ ]
325
+ })
326
+ ]
327
+ }),
328
+ /*#__PURE__*/ _jsxs("table", {
329
+ className: "w-full text-sm",
330
+ children: [
331
+ /*#__PURE__*/ _jsx("thead", {
332
+ className: "bg-muted/20 text-xs text-muted-foreground",
333
+ children: /*#__PURE__*/ _jsxs("tr", {
334
+ children: [
335
+ /*#__PURE__*/ _jsx("th", {
336
+ className: "text-left font-medium px-4 py-2 w-32",
337
+ children: "Field"
338
+ }),
339
+ /*#__PURE__*/ _jsx("th", {
340
+ className: "text-left font-medium px-4 py-2",
341
+ children: "Value"
342
+ })
343
+ ]
344
+ })
345
+ }),
346
+ /*#__PURE__*/ _jsxs("tbody", {
347
+ children: [
348
+ /*#__PURE__*/ _jsxs("tr", {
349
+ className: "border-b border-border/50",
350
+ children: [
351
+ /*#__PURE__*/ _jsx("td", {
352
+ className: "px-4 py-1",
353
+ children: /*#__PURE__*/ _jsxs("div", {
354
+ className: "flex items-center gap-2 text-sm font-medium",
355
+ children: [
356
+ /*#__PURE__*/ _jsx(Hash, {
357
+ className: "h-3.5 w-3.5 text-muted-foreground"
358
+ }),
359
+ "key"
360
+ ]
361
+ })
362
+ }),
363
+ /*#__PURE__*/ _jsx("td", {
364
+ className: "px-2 py-1",
365
+ children: /*#__PURE__*/ _jsx(Input, {
366
+ type: "text",
367
+ value: auth.key,
368
+ onChange: (e)=>onChange({
369
+ ...auth,
370
+ key: e.target.value
371
+ }),
372
+ placeholder: "X-API-Key",
373
+ className: "h-9 border-border/50 bg-transparent focus-visible:ring-1 focus-visible:ring-ring font-mono"
374
+ })
375
+ })
376
+ ]
377
+ }),
378
+ /*#__PURE__*/ _jsxs("tr", {
379
+ className: "border-b border-border/50",
380
+ children: [
381
+ /*#__PURE__*/ _jsx("td", {
382
+ className: "px-4 py-1",
383
+ children: /*#__PURE__*/ _jsxs("div", {
384
+ className: "flex items-center gap-2 text-sm font-medium",
385
+ children: [
386
+ /*#__PURE__*/ _jsx(Key, {
387
+ className: "h-3.5 w-3.5 text-muted-foreground"
388
+ }),
389
+ "value"
390
+ ]
391
+ })
392
+ }),
393
+ /*#__PURE__*/ _jsx("td", {
394
+ className: "px-2 py-1",
395
+ children: /*#__PURE__*/ _jsx(Input, {
396
+ type: "password",
397
+ value: auth.value,
398
+ onChange: (e)=>onChange({
399
+ ...auth,
400
+ value: e.target.value
401
+ }),
402
+ placeholder: "Enter API key...",
403
+ className: "h-9 border-border/50 bg-transparent focus-visible:ring-1 focus-visible:ring-ring font-mono"
404
+ })
405
+ })
406
+ ]
407
+ })
408
+ ]
409
+ })
410
+ ]
411
+ })
412
+ ]
413
+ })
414
+ ]
415
+ })
416
+ ]
417
+ });
418
+ }
@@ -0,0 +1,240 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useEffect } from 'react';
4
+ import { FileText, WarningCircle } from '@phosphor-icons/react';
5
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
6
+ import { KeyValueEditor } from './key-value-editor';
7
+ import { CodeEditor } from './code-editor';
8
+ import { cn } from '@/lib/utils';
9
+ const CONTENT_TYPES = [
10
+ {
11
+ label: 'None',
12
+ value: 'none'
13
+ },
14
+ {
15
+ label: 'JSON',
16
+ value: 'application/json',
17
+ language: 'json'
18
+ },
19
+ {
20
+ label: 'XML',
21
+ value: 'application/xml',
22
+ language: 'xml'
23
+ },
24
+ {
25
+ label: 'Plain Text',
26
+ value: 'text/plain',
27
+ language: 'plaintext'
28
+ },
29
+ {
30
+ label: 'HTML',
31
+ value: 'text/html',
32
+ language: 'html'
33
+ },
34
+ {
35
+ label: 'Form URL Encoded',
36
+ value: 'application/x-www-form-urlencoded'
37
+ },
38
+ {
39
+ label: 'Multipart Form',
40
+ value: 'multipart/form-data'
41
+ },
42
+ {
43
+ label: 'Binary',
44
+ value: 'application/octet-stream'
45
+ }
46
+ ];
47
+ export function BodyEditor({ body, contentType, onBodyChange, onContentTypeChange, showError = false }) {
48
+ const [formData, setFormData] = useState([]);
49
+ // Parse form data from body when content type changes
50
+ useEffect(()=>{
51
+ if (contentType === 'application/x-www-form-urlencoded' || contentType === 'multipart/form-data') {
52
+ try {
53
+ if (body) {
54
+ const parsed = JSON.parse(body);
55
+ if (Array.isArray(parsed)) {
56
+ setFormData(parsed.map((item, i)=>({
57
+ id: `form_${i}`,
58
+ key: item.key || '',
59
+ value: item.value || '',
60
+ active: true
61
+ })));
62
+ }
63
+ }
64
+ } catch {
65
+ setFormData([]);
66
+ }
67
+ }
68
+ }, [
69
+ contentType,
70
+ body
71
+ ]);
72
+ // Default templates for each content type
73
+ const DEFAULT_TEMPLATES = {
74
+ 'application/json': '{\n \n}',
75
+ 'application/xml': '<?xml version="1.0" encoding="UTF-8"?>\n<root>\n \n</root>',
76
+ 'text/html': '<!DOCTYPE html>\n<html>\n<head>\n <title></title>\n</head>\n<body>\n \n</body>\n</html>',
77
+ 'text/plain': ''
78
+ };
79
+ // Check if current body is a default template or invalid (should be replaced when switching types)
80
+ const isDefaultTemplate = (currentBody)=>{
81
+ if (!currentBody || currentBody.trim() === '' || currentBody.trim() === 'null') return true;
82
+ return Object.values(DEFAULT_TEMPLATES).some((template)=>currentBody.trim() === template.trim());
83
+ };
84
+ // Normalize body value - convert "null" string to empty
85
+ const normalizedBody = body === 'null' || body === null ? '' : body;
86
+ const handleContentTypeChange = (value)=>{
87
+ console.log('[BodyEditor] Content type changed to:', value);
88
+ const newType = value === 'none' ? null : value;
89
+ onContentTypeChange(newType);
90
+ // Set default body content based on type
91
+ if (newType === null) {
92
+ onBodyChange(null);
93
+ } else if (isDefaultTemplate(body)) {
94
+ // Replace with new template if current body is empty or a default template
95
+ const template = DEFAULT_TEMPLATES[newType] ?? '';
96
+ onBodyChange(template);
97
+ }
98
+ // If body has custom content, keep it when switching types
99
+ };
100
+ const handleFormDataChange = (items)=>{
101
+ setFormData(items);
102
+ onBodyChange(JSON.stringify(items.map(({ key, value })=>({
103
+ key,
104
+ value
105
+ }))));
106
+ };
107
+ const currentValue = contentType || 'none';
108
+ const currentTypeInfo = CONTENT_TYPES.find((t)=>t.value === currentValue);
109
+ const editorLanguage = currentTypeInfo?.language || 'plaintext';
110
+ // Content type selector header component
111
+ const ContentTypeHeader = ()=>/*#__PURE__*/ _jsxs("div", {
112
+ className: cn("flex items-center border-b bg-muted/30 px-4 py-2", showError ? "border-red-500 bg-red-500/5" : "border-border"),
113
+ children: [
114
+ showError && /*#__PURE__*/ _jsx(WarningCircle, {
115
+ className: "h-4 w-4 text-red-500 animate-pulse mr-2",
116
+ weight: "fill"
117
+ }),
118
+ /*#__PURE__*/ _jsx("span", {
119
+ className: cn("text-xs font-medium mr-3", showError ? "text-red-500" : "text-muted-foreground"),
120
+ children: showError ? "Body needs attention" : "Type"
121
+ }),
122
+ /*#__PURE__*/ _jsxs(Select, {
123
+ value: currentValue,
124
+ onValueChange: handleContentTypeChange,
125
+ children: [
126
+ /*#__PURE__*/ _jsx(SelectTrigger, {
127
+ className: "h-8 w-auto min-w-[140px] text-sm border-0 bg-transparent hover:bg-muted/50",
128
+ children: /*#__PURE__*/ _jsx(SelectValue, {
129
+ placeholder: "Select type"
130
+ })
131
+ }),
132
+ /*#__PURE__*/ _jsx(SelectContent, {
133
+ children: CONTENT_TYPES.map((type)=>/*#__PURE__*/ _jsx(SelectItem, {
134
+ value: type.value,
135
+ children: type.label
136
+ }, type.value))
137
+ })
138
+ ]
139
+ })
140
+ ]
141
+ });
142
+ // Form data editors (URL encoded, multipart)
143
+ if (contentType === 'application/x-www-form-urlencoded' || contentType === 'multipart/form-data') {
144
+ return /*#__PURE__*/ _jsxs("div", {
145
+ className: "flex flex-col h-full",
146
+ children: [
147
+ /*#__PURE__*/ _jsx(ContentTypeHeader, {}),
148
+ /*#__PURE__*/ _jsx("div", {
149
+ className: "flex-1 overflow-auto",
150
+ children: /*#__PURE__*/ _jsx(KeyValueEditor, {
151
+ items: formData,
152
+ onChange: handleFormDataChange,
153
+ title: contentType === 'multipart/form-data' ? 'Form Data' : 'URL Encoded',
154
+ keyLabel: "Field",
155
+ valueLabel: "Value",
156
+ showDescription: false
157
+ })
158
+ })
159
+ ]
160
+ });
161
+ }
162
+ // Binary file (placeholder)
163
+ if (contentType === 'application/octet-stream') {
164
+ return /*#__PURE__*/ _jsxs("div", {
165
+ className: "flex flex-col h-full",
166
+ children: [
167
+ /*#__PURE__*/ _jsx(ContentTypeHeader, {}),
168
+ /*#__PURE__*/ _jsxs("div", {
169
+ className: "flex-1 flex flex-col items-center justify-center p-8 text-center",
170
+ children: [
171
+ /*#__PURE__*/ _jsx(FileText, {
172
+ className: "h-10 w-10 text-muted-foreground/50 mb-3",
173
+ weight: "duotone"
174
+ }),
175
+ /*#__PURE__*/ _jsx("p", {
176
+ className: "text-sm text-muted-foreground",
177
+ children: "Binary file upload not supported"
178
+ })
179
+ ]
180
+ })
181
+ ]
182
+ });
183
+ }
184
+ // No body
185
+ if (contentType === null) {
186
+ return /*#__PURE__*/ _jsxs("div", {
187
+ className: "flex flex-col h-full",
188
+ children: [
189
+ /*#__PURE__*/ _jsx(ContentTypeHeader, {}),
190
+ /*#__PURE__*/ _jsxs("div", {
191
+ className: "flex-1 flex flex-col items-center justify-center p-8 text-center",
192
+ children: [
193
+ /*#__PURE__*/ _jsx(FileText, {
194
+ className: "h-10 w-10 text-muted-foreground/50 mb-3",
195
+ weight: "duotone"
196
+ }),
197
+ /*#__PURE__*/ _jsx("p", {
198
+ className: "text-sm text-muted-foreground",
199
+ children: "No request body"
200
+ }),
201
+ /*#__PURE__*/ _jsx("p", {
202
+ className: "text-xs text-muted-foreground/70 mt-1",
203
+ children: "Select a type to add body"
204
+ })
205
+ ]
206
+ })
207
+ ]
208
+ });
209
+ }
210
+ // Monaco editor for JSON, XML, Text, HTML
211
+ const editorValue = normalizedBody || '';
212
+ // Placeholder text based on content type
213
+ const placeholderMap = {
214
+ 'application/json': 'Enter JSON body...',
215
+ 'application/xml': 'Enter XML body...',
216
+ 'text/html': 'Enter HTML body...',
217
+ 'text/plain': 'Enter text...'
218
+ };
219
+ const placeholder = placeholderMap[contentType || ''] || 'Enter request body...';
220
+ return /*#__PURE__*/ _jsxs("div", {
221
+ className: "flex flex-col h-full",
222
+ children: [
223
+ /*#__PURE__*/ _jsx(ContentTypeHeader, {}),
224
+ /*#__PURE__*/ _jsx("div", {
225
+ className: "flex-1 dark-editor h-full",
226
+ children: /*#__PURE__*/ _jsx(CodeEditor, {
227
+ value: editorValue,
228
+ onChange: onBodyChange,
229
+ language: editorLanguage,
230
+ height: "100%",
231
+ theme: "dark",
232
+ showLineNumbers: false,
233
+ showBorder: false,
234
+ rounded: false,
235
+ placeholder: placeholder
236
+ }, `editor-${contentType}`)
237
+ })
238
+ ]
239
+ });
240
+ }