@brainfish-ai/devdoc 0.1.41 → 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 (400) hide show
  1. package/ai-agents/.claude/skills/bootstrap-docs/SKILL.md +710 -79
  2. package/ai-agents/.claude/skills/check-docs/SKILL.md +83 -8
  3. package/ai-agents/.claude/skills/create-doc/SKILL.md +267 -55
  4. package/ai-agents/.claude/skills/update-doc/SKILL.md +162 -63
  5. package/ai-agents/.cursor/rules/devdoc-bootstrap.mdc +145 -15
  6. package/ai-agents/.cursor/rules/devdoc-create.mdc +108 -57
  7. package/ai-agents/.cursor/rules/devdoc-update.mdc +93 -70
  8. package/ai-agents/.cursor/rules/devdoc.mdc +21 -0
  9. package/ai-agents/schemas/docs.schema.json +332 -0
  10. package/ai-agents/schemas/theme.schema.json +243 -0
  11. package/dist/cli/commands/create.js +4 -9
  12. package/dist/cli/commands/deploy.js +50 -25
  13. package/dist/cli/commands/dev.js +19 -10
  14. package/package.json +3 -2
  15. package/renderer/app/api/assets/[...path]/route.js +108 -0
  16. package/renderer/app/api/assets/route.js +114 -0
  17. package/renderer/app/api/assets/upload/route.js +163 -0
  18. package/renderer/app/api/auth-schemes/route.js +58 -0
  19. package/renderer/app/api/chat/route.js +759 -0
  20. package/renderer/app/api/codegen/route.js +52 -0
  21. package/renderer/app/api/collections/route.js +675 -0
  22. package/renderer/app/api/debug/route.js +47 -0
  23. package/renderer/app/api/deploy/route.js +199 -0
  24. package/renderer/app/api/device/route.js +36 -0
  25. package/renderer/app/api/docs/route.js +205 -0
  26. package/renderer/app/api/domains/add/route.js +121 -0
  27. package/renderer/app/api/domains/lookup/route.js +43 -0
  28. package/renderer/app/api/domains/remove/route.js +89 -0
  29. package/renderer/app/api/domains/status/route.js +140 -0
  30. package/renderer/app/api/domains/verify/route.js +168 -0
  31. package/renderer/app/api/keys/regenerate/route.js +71 -0
  32. package/renderer/app/api/local-assets/[...path]/route.js +108 -0
  33. package/renderer/app/api/openapi-spec/route.js +73 -0
  34. package/renderer/app/api/projects/[slug]/route.js +129 -0
  35. package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
  36. package/renderer/app/api/projects/register/route.js +176 -0
  37. package/renderer/app/api/proxy/route.js +139 -0
  38. package/renderer/app/api/proxy-stream/route.js +156 -0
  39. package/renderer/app/api/redirects/route.js +35 -0
  40. package/renderer/app/api/schema/route.js +85 -0
  41. package/renderer/app/api/subdomains/check/route.js +158 -0
  42. package/renderer/app/api/suggestions/route.js +175 -0
  43. package/renderer/app/layout.js +47 -0
  44. package/renderer/app/llms-full.txt/route.js +257 -0
  45. package/renderer/app/llms.txt/route.js +219 -0
  46. package/renderer/app/page.js +12 -0
  47. package/renderer/app/robots.txt/route.js +66 -0
  48. package/renderer/app/sitemap.xml/route.js +145 -0
  49. package/renderer/components/docs/index.js +8 -0
  50. package/renderer/components/docs/mdx/accordion.js +113 -0
  51. package/renderer/components/docs/mdx/badge.js +72 -0
  52. package/renderer/components/docs/mdx/callouts.js +137 -0
  53. package/renderer/components/docs/mdx/cards.js +175 -0
  54. package/renderer/components/docs/mdx/changelog.js +100 -0
  55. package/renderer/components/docs/mdx/code-block.js +147 -0
  56. package/renderer/components/docs/mdx/code-group.js +287 -0
  57. package/renderer/components/docs/mdx/file-embeds.js +82 -0
  58. package/renderer/components/docs/mdx/frame.js +59 -0
  59. package/renderer/components/docs/mdx/highlight.js +90 -0
  60. package/renderer/components/docs/mdx/iframe.js +69 -0
  61. package/renderer/components/docs/mdx/image.js +135 -0
  62. package/renderer/components/docs/mdx/index.js +134 -0
  63. package/renderer/components/docs/mdx/landing.js +315 -0
  64. package/renderer/components/docs/mdx/mermaid.js +212 -0
  65. package/renderer/components/docs/mdx/param-field.js +112 -0
  66. package/renderer/components/docs/mdx/steps.js +74 -0
  67. package/renderer/components/docs/mdx/tabs.js +50 -0
  68. package/renderer/components/docs/mdx-renderer.js +77 -0
  69. package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
  70. package/renderer/components/docs/navigation/index.js +6 -0
  71. package/renderer/components/docs/navigation/page-nav.js +57 -0
  72. package/renderer/components/docs/navigation/sidebar.js +375 -0
  73. package/renderer/components/docs/navigation/toc.js +89 -0
  74. package/renderer/components/docs/notice.js +77 -0
  75. package/renderer/components/docs-header.js +202 -0
  76. package/renderer/components/docs-viewer/agent/agent-chat.js +1930 -0
  77. package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
  78. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
  79. package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
  80. package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
  81. package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
  82. package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
  83. package/renderer/components/docs-viewer/agent/index.js +4 -0
  84. package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
  85. package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
  86. package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
  87. package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
  88. package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
  89. package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
  90. package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
  91. package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
  92. package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
  93. package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
  94. package/renderer/components/docs-viewer/content/doc-page.js +264 -0
  95. package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
  96. package/renderer/components/docs-viewer/content/index.js +29 -0
  97. package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
  98. package/renderer/components/docs-viewer/content/request-details.js +528 -0
  99. package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
  100. package/renderer/components/docs-viewer/content/sections/body.js +80 -0
  101. package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
  102. package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
  103. package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
  104. package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
  105. package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
  106. package/renderer/components/docs-viewer/index.js +1552 -0
  107. package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
  108. package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
  109. package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
  110. package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
  111. package/renderer/components/docs-viewer/playground/graphql-playground.js +734 -0
  112. package/renderer/components/docs-viewer/playground/index.js +682 -0
  113. package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
  114. package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
  115. package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
  116. package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
  117. package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
  118. package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
  119. package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
  120. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
  121. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
  122. package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
  123. package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
  124. package/renderer/components/docs-viewer/search/index.js +2 -0
  125. package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
  126. package/renderer/components/docs-viewer/search/use-search.js +89 -0
  127. package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
  128. package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
  129. package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
  130. package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
  131. package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
  132. package/renderer/components/docs-viewer/sidebar/index.js +196 -0
  133. package/renderer/components/docs-viewer/sidebar/right-sidebar.js +163 -0
  134. package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
  135. package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
  136. package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
  137. package/renderer/components/theme-provider.js +10 -0
  138. package/renderer/components/theme-toggle.js +106 -0
  139. package/renderer/components/ui/badge.js +29 -0
  140. package/renderer/components/ui/button.js +40 -0
  141. package/renderer/components/ui/dialog.js +50 -0
  142. package/renderer/components/ui/dropdown-menu.js +143 -0
  143. package/renderer/components/ui/input.js +12 -0
  144. package/renderer/components/ui/label.js +13 -0
  145. package/renderer/components/ui/navigation-menu.js +83 -0
  146. package/renderer/components/ui/select.js +116 -0
  147. package/renderer/components/ui/spinner.js +92 -0
  148. package/renderer/components/ui/tabs.js +34 -0
  149. package/renderer/components/ui/tooltip.js +43 -0
  150. package/renderer/hooks/use-code-copy.js +76 -0
  151. package/renderer/hooks/use-openapi-title.js +33 -0
  152. package/renderer/lib/api-docs/agent/index.js +4 -0
  153. package/renderer/lib/api-docs/agent/indexer.js +254 -0
  154. package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
  155. package/renderer/lib/api-docs/agent/types.js +5 -0
  156. package/renderer/lib/api-docs/auth/auth-context.js +157 -0
  157. package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
  158. package/renderer/lib/api-docs/auth/crypto.js +64 -0
  159. package/renderer/lib/api-docs/auth/index.js +3 -0
  160. package/renderer/lib/api-docs/code-editor/db.js +145 -0
  161. package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
  162. package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
  163. package/renderer/lib/api-docs/code-editor/mode-context.js +154 -0
  164. package/renderer/lib/api-docs/code-editor/types.js +53 -0
  165. package/renderer/lib/api-docs/codegen/definitions.js +258 -0
  166. package/renderer/lib/api-docs/codegen/har.js +171 -0
  167. package/renderer/lib/api-docs/codegen/index.js +118 -0
  168. package/renderer/lib/api-docs/factories.js +136 -0
  169. package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
  170. package/renderer/lib/api-docs/mobile-context.js +79 -0
  171. package/renderer/lib/api-docs/navigation-context.js +62 -0
  172. package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
  173. package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
  174. package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
  175. package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
  176. package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
  177. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
  178. package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
  179. package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
  180. package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
  181. package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
  182. package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
  183. package/renderer/lib/api-docs/playground/context.js +65 -0
  184. package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
  185. package/renderer/lib/api-docs/playground/request-builder.js +163 -0
  186. package/renderer/lib/api-docs/playground/request-runner.js +224 -0
  187. package/renderer/lib/api-docs/playground/types.js +5 -0
  188. package/renderer/lib/api-docs/types.js +23 -0
  189. package/renderer/lib/api-docs/utils.js +212 -0
  190. package/renderer/lib/cache.js +157 -0
  191. package/renderer/lib/docs/config/domain-schema.js +161 -0
  192. package/renderer/lib/docs/config/index.js +5 -0
  193. package/renderer/lib/docs/config/loader.js +113 -0
  194. package/renderer/lib/docs/config/schema.js +269 -0
  195. package/renderer/lib/docs/index.js +8 -0
  196. package/renderer/lib/docs/mdx/compiler.js +128 -0
  197. package/renderer/lib/docs/mdx/frontmatter.js +73 -0
  198. package/renderer/lib/docs/mdx/index.js +8 -0
  199. package/renderer/lib/docs/navigation/generator.js +269 -0
  200. package/renderer/lib/docs/navigation/index.js +4 -0
  201. package/renderer/lib/docs/navigation/types.js +9 -0
  202. package/renderer/lib/docs-navigation-context.js +40 -0
  203. package/renderer/lib/multi-tenant/context.js +80 -0
  204. package/renderer/lib/storage/blob.js +767 -0
  205. package/renderer/lib/utils/icons.js +30 -0
  206. package/renderer/lib/utils.js +5 -0
  207. package/renderer/next.config.js +62 -0
  208. package/renderer/tsconfig.json +23 -5
  209. package/renderer/app/api/assets/[...path]/route.ts +0 -123
  210. package/renderer/app/api/assets/route.ts +0 -124
  211. package/renderer/app/api/assets/upload/route.ts +0 -177
  212. package/renderer/app/api/auth-schemes/route.ts +0 -77
  213. package/renderer/app/api/chat/route.ts +0 -858
  214. package/renderer/app/api/codegen/route.ts +0 -72
  215. package/renderer/app/api/collections/route.ts +0 -1002
  216. package/renderer/app/api/debug/route.ts +0 -53
  217. package/renderer/app/api/deploy/route.ts +0 -234
  218. package/renderer/app/api/device/route.ts +0 -42
  219. package/renderer/app/api/docs/route.ts +0 -201
  220. package/renderer/app/api/domains/add/route.ts +0 -132
  221. package/renderer/app/api/domains/lookup/route.ts +0 -43
  222. package/renderer/app/api/domains/remove/route.ts +0 -100
  223. package/renderer/app/api/domains/status/route.ts +0 -158
  224. package/renderer/app/api/domains/verify/route.ts +0 -181
  225. package/renderer/app/api/keys/regenerate/route.ts +0 -80
  226. package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
  227. package/renderer/app/api/openapi-spec/route.ts +0 -151
  228. package/renderer/app/api/projects/[slug]/route.ts +0 -153
  229. package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
  230. package/renderer/app/api/projects/register/route.ts +0 -152
  231. package/renderer/app/api/proxy/route.ts +0 -149
  232. package/renderer/app/api/proxy-stream/route.ts +0 -168
  233. package/renderer/app/api/redirects/route.ts +0 -47
  234. package/renderer/app/api/schema/route.ts +0 -73
  235. package/renderer/app/api/subdomains/check/route.ts +0 -172
  236. package/renderer/app/api/suggestions/route.ts +0 -144
  237. package/renderer/app/layout.tsx +0 -54
  238. package/renderer/app/llms-full.txt/route.ts +0 -346
  239. package/renderer/app/llms.txt/route.ts +0 -279
  240. package/renderer/app/page.tsx +0 -14
  241. package/renderer/app/robots.txt/route.ts +0 -84
  242. package/renderer/app/sitemap.xml/route.ts +0 -199
  243. package/renderer/components/docs/index.ts +0 -12
  244. package/renderer/components/docs/mdx/accordion.tsx +0 -169
  245. package/renderer/components/docs/mdx/badge.tsx +0 -132
  246. package/renderer/components/docs/mdx/callouts.tsx +0 -154
  247. package/renderer/components/docs/mdx/cards.tsx +0 -241
  248. package/renderer/components/docs/mdx/changelog.tsx +0 -120
  249. package/renderer/components/docs/mdx/code-block.tsx +0 -186
  250. package/renderer/components/docs/mdx/code-group.tsx +0 -421
  251. package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
  252. package/renderer/components/docs/mdx/frame.tsx +0 -112
  253. package/renderer/components/docs/mdx/highlight.tsx +0 -151
  254. package/renderer/components/docs/mdx/iframe.tsx +0 -134
  255. package/renderer/components/docs/mdx/image.tsx +0 -235
  256. package/renderer/components/docs/mdx/index.ts +0 -237
  257. package/renderer/components/docs/mdx/landing.tsx +0 -684
  258. package/renderer/components/docs/mdx/mermaid.tsx +0 -240
  259. package/renderer/components/docs/mdx/param-field.tsx +0 -200
  260. package/renderer/components/docs/mdx/steps.tsx +0 -113
  261. package/renderer/components/docs/mdx/tabs.tsx +0 -86
  262. package/renderer/components/docs/mdx-renderer.tsx +0 -100
  263. package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
  264. package/renderer/components/docs/navigation/index.ts +0 -8
  265. package/renderer/components/docs/navigation/page-nav.tsx +0 -64
  266. package/renderer/components/docs/navigation/sidebar.tsx +0 -515
  267. package/renderer/components/docs/navigation/toc.tsx +0 -113
  268. package/renderer/components/docs/notice.tsx +0 -105
  269. package/renderer/components/docs-header.tsx +0 -278
  270. package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
  271. package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
  272. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
  273. package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
  274. package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
  275. package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
  276. package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
  277. package/renderer/components/docs-viewer/agent/index.tsx +0 -6
  278. package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
  279. package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
  280. package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
  281. package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
  282. package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
  283. package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
  284. package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
  285. package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
  286. package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
  287. package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
  288. package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
  289. package/renderer/components/docs-viewer/content/index.tsx +0 -29
  290. package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
  291. package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
  292. package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
  293. package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
  294. package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
  295. package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
  296. package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
  297. package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
  298. package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
  299. package/renderer/components/docs-viewer/index.tsx +0 -1662
  300. package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
  301. package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
  302. package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
  303. package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
  304. package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
  305. package/renderer/components/docs-viewer/playground/index.tsx +0 -671
  306. package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
  307. package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
  308. package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
  309. package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
  310. package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
  311. package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
  312. package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
  313. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
  314. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
  315. package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
  316. package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
  317. package/renderer/components/docs-viewer/search/index.ts +0 -2
  318. package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
  319. package/renderer/components/docs-viewer/search/use-search.ts +0 -117
  320. package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
  321. package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
  322. package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
  323. package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
  324. package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
  325. package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
  326. package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
  327. package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
  328. package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
  329. package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
  330. package/renderer/components/theme-provider.tsx +0 -11
  331. package/renderer/components/theme-toggle.tsx +0 -76
  332. package/renderer/components/ui/badge.tsx +0 -46
  333. package/renderer/components/ui/button.tsx +0 -59
  334. package/renderer/components/ui/dialog.tsx +0 -118
  335. package/renderer/components/ui/dropdown-menu.tsx +0 -257
  336. package/renderer/components/ui/input.tsx +0 -21
  337. package/renderer/components/ui/label.tsx +0 -24
  338. package/renderer/components/ui/navigation-menu.tsx +0 -168
  339. package/renderer/components/ui/select.tsx +0 -190
  340. package/renderer/components/ui/spinner.tsx +0 -114
  341. package/renderer/components/ui/tabs.tsx +0 -66
  342. package/renderer/components/ui/tooltip.tsx +0 -61
  343. package/renderer/hooks/use-code-copy.ts +0 -88
  344. package/renderer/hooks/use-openapi-title.ts +0 -44
  345. package/renderer/lib/api-docs/agent/index.ts +0 -6
  346. package/renderer/lib/api-docs/agent/indexer.ts +0 -323
  347. package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
  348. package/renderer/lib/api-docs/agent/types.ts +0 -116
  349. package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
  350. package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
  351. package/renderer/lib/api-docs/auth/crypto.ts +0 -89
  352. package/renderer/lib/api-docs/auth/index.ts +0 -4
  353. package/renderer/lib/api-docs/code-editor/db.ts +0 -164
  354. package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
  355. package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
  356. package/renderer/lib/api-docs/code-editor/types.ts +0 -105
  357. package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
  358. package/renderer/lib/api-docs/codegen/har.ts +0 -251
  359. package/renderer/lib/api-docs/codegen/index.ts +0 -159
  360. package/renderer/lib/api-docs/factories.ts +0 -170
  361. package/renderer/lib/api-docs/mobile-context.tsx +0 -112
  362. package/renderer/lib/api-docs/navigation-context.tsx +0 -88
  363. package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
  364. package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
  365. package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
  366. package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
  367. package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
  368. package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
  369. package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
  370. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
  371. package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
  372. package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
  373. package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
  374. package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
  375. package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
  376. package/renderer/lib/api-docs/playground/context.tsx +0 -107
  377. package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
  378. package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
  379. package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
  380. package/renderer/lib/api-docs/playground/types.ts +0 -35
  381. package/renderer/lib/api-docs/types.ts +0 -269
  382. package/renderer/lib/api-docs/utils.ts +0 -311
  383. package/renderer/lib/cache.ts +0 -193
  384. package/renderer/lib/docs/config/domain-schema.ts +0 -260
  385. package/renderer/lib/docs/config/index.ts +0 -43
  386. package/renderer/lib/docs/config/loader.ts +0 -142
  387. package/renderer/lib/docs/config/schema.ts +0 -308
  388. package/renderer/lib/docs/index.ts +0 -12
  389. package/renderer/lib/docs/mdx/compiler.ts +0 -176
  390. package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
  391. package/renderer/lib/docs/mdx/index.ts +0 -26
  392. package/renderer/lib/docs/navigation/generator.ts +0 -348
  393. package/renderer/lib/docs/navigation/index.ts +0 -12
  394. package/renderer/lib/docs/navigation/types.ts +0 -123
  395. package/renderer/lib/docs-navigation-context.tsx +0 -80
  396. package/renderer/lib/multi-tenant/context.ts +0 -105
  397. package/renderer/lib/storage/blob.ts +0 -1083
  398. package/renderer/lib/utils/icons.ts +0 -48
  399. package/renderer/lib/utils.ts +0 -6
  400. package/renderer/next.config.ts +0 -76
@@ -0,0 +1,321 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { CaretDown, CaretRight, Plus, Minus } from '@phosphor-icons/react';
5
+ function getTypeLabel(prop) {
6
+ if (prop.type === 'array' && prop.items) {
7
+ const itemType = prop.items.type || 'object';
8
+ return `${itemType}[]`;
9
+ }
10
+ return prop.type || 'object';
11
+ }
12
+ function hasChildProperties(prop) {
13
+ if (prop.properties && Object.keys(prop.properties).length > 0) {
14
+ return true;
15
+ }
16
+ if (prop.type === 'array' && prop.items?.properties) {
17
+ return true;
18
+ }
19
+ if (prop.allOf || prop.oneOf || prop.anyOf) {
20
+ return true;
21
+ }
22
+ return false;
23
+ }
24
+ function PropertyRow({ name, prop, isRequired, level = 0 }) {
25
+ const [showChildren, setShowChildren] = useState(false);
26
+ const hasChildren = hasChildProperties(prop);
27
+ const typeLabel = getTypeLabel(prop);
28
+ // Get child properties
29
+ const getChildProperties = ()=>{
30
+ if (prop.properties) {
31
+ return prop.properties;
32
+ }
33
+ if (prop.type === 'array' && prop.items?.properties) {
34
+ return prop.items.properties;
35
+ }
36
+ if (prop.allOf) {
37
+ // Merge all schemas
38
+ const merged = {};
39
+ prop.allOf.forEach((schema)=>{
40
+ if (schema.properties) {
41
+ Object.assign(merged, schema.properties);
42
+ }
43
+ });
44
+ return Object.keys(merged).length > 0 ? merged : null;
45
+ }
46
+ return null;
47
+ };
48
+ const getChildRequired = ()=>{
49
+ if (prop.required) return prop.required;
50
+ if (prop.type === 'array' && prop.items?.required) {
51
+ return prop.items.required;
52
+ }
53
+ if (prop.allOf) {
54
+ const allRequired = [];
55
+ prop.allOf.forEach((schema)=>{
56
+ if (schema.required) {
57
+ allRequired.push(...schema.required);
58
+ }
59
+ });
60
+ return allRequired;
61
+ }
62
+ return [];
63
+ };
64
+ const childProps = getChildProperties();
65
+ const childRequired = getChildRequired();
66
+ return /*#__PURE__*/ _jsxs("div", {
67
+ className: `${level > 0 ? 'border-l-2 border-muted pl-4 ml-2' : ''}`,
68
+ children: [
69
+ /*#__PURE__*/ _jsxs("div", {
70
+ className: "py-3 border-b border-border/50",
71
+ children: [
72
+ /*#__PURE__*/ _jsxs("div", {
73
+ className: "flex items-start gap-2 flex-wrap",
74
+ children: [
75
+ /*#__PURE__*/ _jsx("span", {
76
+ className: "font-semibold text-sm text-foreground",
77
+ children: name
78
+ }),
79
+ /*#__PURE__*/ _jsx("span", {
80
+ className: "text-xs text-muted-foreground",
81
+ children: typeLabel
82
+ }),
83
+ prop.format && /*#__PURE__*/ _jsxs(_Fragment, {
84
+ children: [
85
+ /*#__PURE__*/ _jsx("span", {
86
+ className: "text-xs text-muted-foreground",
87
+ children: "·"
88
+ }),
89
+ /*#__PURE__*/ _jsx("span", {
90
+ className: "text-xs text-muted-foreground",
91
+ children: prop.format
92
+ })
93
+ ]
94
+ }),
95
+ isRequired && /*#__PURE__*/ _jsx("span", {
96
+ className: "text-xs text-orange-500 font-medium",
97
+ children: "required"
98
+ }),
99
+ prop.example !== undefined && /*#__PURE__*/ _jsx("button", {
100
+ className: "text-xs text-muted-foreground hover:text-foreground underline",
101
+ children: "Example"
102
+ })
103
+ ]
104
+ }),
105
+ prop.description && /*#__PURE__*/ _jsx("p", {
106
+ className: "text-sm text-muted-foreground mt-1",
107
+ children: prop.description
108
+ }),
109
+ prop.enum && /*#__PURE__*/ _jsxs("div", {
110
+ className: "mt-2 flex flex-wrap gap-1",
111
+ children: [
112
+ /*#__PURE__*/ _jsx("span", {
113
+ className: "text-xs text-muted-foreground",
114
+ children: "Enum:"
115
+ }),
116
+ prop.enum.map((val, idx)=>/*#__PURE__*/ _jsx("code", {
117
+ className: "text-xs bg-muted px-1.5 py-0.5 rounded",
118
+ children: JSON.stringify(val)
119
+ }, idx))
120
+ ]
121
+ }),
122
+ prop.default !== undefined && /*#__PURE__*/ _jsxs("div", {
123
+ className: "mt-1",
124
+ children: [
125
+ /*#__PURE__*/ _jsx("span", {
126
+ className: "text-xs text-muted-foreground",
127
+ children: "Default: "
128
+ }),
129
+ /*#__PURE__*/ _jsx("code", {
130
+ className: "text-xs bg-muted px-1.5 py-0.5 rounded",
131
+ children: JSON.stringify(prop.default)
132
+ })
133
+ ]
134
+ }),
135
+ hasChildren && childProps && /*#__PURE__*/ _jsx("button", {
136
+ onClick: ()=>setShowChildren(!showChildren),
137
+ className: "mt-2 flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground border rounded-full px-3 py-1 hover:bg-muted/50 transition-colors",
138
+ children: showChildren ? /*#__PURE__*/ _jsxs(_Fragment, {
139
+ children: [
140
+ /*#__PURE__*/ _jsx(Minus, {
141
+ className: "h-3 w-3",
142
+ weight: "bold"
143
+ }),
144
+ "Hide Child Attributes"
145
+ ]
146
+ }) : /*#__PURE__*/ _jsxs(_Fragment, {
147
+ children: [
148
+ /*#__PURE__*/ _jsx(Plus, {
149
+ className: "h-3 w-3",
150
+ weight: "bold"
151
+ }),
152
+ "Show Child Attributes"
153
+ ]
154
+ })
155
+ })
156
+ ]
157
+ }),
158
+ showChildren && childProps && /*#__PURE__*/ _jsx("div", {
159
+ className: "mt-2",
160
+ children: Object.entries(childProps).map(([childName, childProp])=>/*#__PURE__*/ _jsx(PropertyRow, {
161
+ name: childName,
162
+ prop: childProp,
163
+ isRequired: childRequired.includes(childName),
164
+ level: level + 1
165
+ }, childName))
166
+ })
167
+ ]
168
+ });
169
+ }
170
+ export function SchemaViewer({ schema, requiredFields = [], level = 0 }) {
171
+ // Parse schema if it's a string
172
+ let parsedSchema;
173
+ try {
174
+ if (typeof schema === 'string') {
175
+ parsedSchema = JSON.parse(schema);
176
+ } else {
177
+ parsedSchema = schema;
178
+ }
179
+ } catch {
180
+ // If parsing fails, show raw content
181
+ return /*#__PURE__*/ _jsx("pre", {
182
+ className: "text-xs text-muted-foreground p-3 bg-muted/50 rounded overflow-auto",
183
+ children: typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2)
184
+ });
185
+ }
186
+ // Handle nested schema property (common in OpenAPI responses)
187
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
188
+ if (parsedSchema.schema) {
189
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
190
+ parsedSchema = parsedSchema.schema;
191
+ }
192
+ // Handle allOf, oneOf, anyOf at root level
193
+ if (parsedSchema.allOf) {
194
+ const mergedProps = {};
195
+ const mergedRequired = [];
196
+ parsedSchema.allOf.forEach((s)=>{
197
+ if (s.properties) Object.assign(mergedProps, s.properties);
198
+ if (s.required) mergedRequired.push(...s.required);
199
+ });
200
+ parsedSchema = {
201
+ ...parsedSchema,
202
+ properties: mergedProps,
203
+ required: mergedRequired
204
+ };
205
+ }
206
+ const properties = parsedSchema.properties || {};
207
+ const required = parsedSchema.required || requiredFields;
208
+ if (Object.keys(properties).length === 0) {
209
+ // No properties - maybe it's a simple type
210
+ if (parsedSchema.type) {
211
+ return /*#__PURE__*/ _jsxs("div", {
212
+ className: "py-2",
213
+ children: [
214
+ /*#__PURE__*/ _jsx("span", {
215
+ className: "text-xs text-muted-foreground",
216
+ children: parsedSchema.type
217
+ }),
218
+ parsedSchema.description && /*#__PURE__*/ _jsx("p", {
219
+ className: "text-sm text-muted-foreground mt-1",
220
+ children: parsedSchema.description
221
+ })
222
+ ]
223
+ });
224
+ }
225
+ return /*#__PURE__*/ _jsx("pre", {
226
+ className: "text-xs text-muted-foreground p-3 bg-muted/50 rounded overflow-auto",
227
+ children: JSON.stringify(parsedSchema, null, 2)
228
+ });
229
+ }
230
+ return /*#__PURE__*/ _jsx("div", {
231
+ className: level > 0 ? 'pl-4 border-l-2 border-muted' : '',
232
+ children: Object.entries(properties).map(([name, prop])=>/*#__PURE__*/ _jsx(PropertyRow, {
233
+ name: name,
234
+ prop: prop,
235
+ isRequired: required.includes(name),
236
+ level: level
237
+ }, name))
238
+ });
239
+ }
240
+ export function ResponseSchema({ code, status, description, schema, contentType = 'application/json' }) {
241
+ const [isOpen, setIsOpen] = useState(code >= 200 && code < 300);
242
+ const [viewMode, setViewMode] = useState('schema');
243
+ // Try to parse schema
244
+ let parsedSchema = null;
245
+ try {
246
+ if (typeof schema === 'string') {
247
+ parsedSchema = JSON.parse(schema);
248
+ } else {
249
+ parsedSchema = schema;
250
+ }
251
+ // Handle nested schema property
252
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
253
+ if (parsedSchema && parsedSchema.schema) {
254
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
255
+ parsedSchema = parsedSchema.schema;
256
+ }
257
+ } catch {
258
+ parsedSchema = null;
259
+ }
260
+ const typeLabel = parsedSchema?.type || 'object';
261
+ return /*#__PURE__*/ _jsxs("div", {
262
+ className: "border-b border-border",
263
+ children: [
264
+ /*#__PURE__*/ _jsxs("button", {
265
+ onClick: ()=>setIsOpen(!isOpen),
266
+ className: "w-full py-3 flex items-center gap-3 hover:bg-muted/30 transition-colors text-left",
267
+ children: [
268
+ isOpen ? /*#__PURE__*/ _jsx(CaretDown, {
269
+ className: "h-4 w-4 text-muted-foreground shrink-0",
270
+ weight: "bold"
271
+ }) : /*#__PURE__*/ _jsx(CaretRight, {
272
+ className: "h-4 w-4 text-muted-foreground shrink-0",
273
+ weight: "bold"
274
+ }),
275
+ /*#__PURE__*/ _jsx("span", {
276
+ className: `font-semibold text-sm ${code >= 200 && code < 300 ? 'text-green-600' : code >= 400 ? 'text-red-500' : 'text-orange-500'}`,
277
+ children: code
278
+ }),
279
+ /*#__PURE__*/ _jsx("span", {
280
+ className: "text-sm text-muted-foreground truncate",
281
+ children: description || status
282
+ })
283
+ ]
284
+ }),
285
+ isOpen && /*#__PURE__*/ _jsxs("div", {
286
+ className: "pb-4 pl-7",
287
+ children: [
288
+ /*#__PURE__*/ _jsxs("div", {
289
+ className: "flex items-center justify-between mb-3",
290
+ children: [
291
+ /*#__PURE__*/ _jsxs("div", {
292
+ className: "flex items-center gap-2",
293
+ children: [
294
+ /*#__PURE__*/ _jsx("span", {
295
+ className: "text-xs text-muted-foreground",
296
+ children: typeLabel
297
+ }),
298
+ /*#__PURE__*/ _jsx("button", {
299
+ onClick: ()=>setViewMode(viewMode === 'schema' ? 'example' : 'schema'),
300
+ className: `text-xs underline ${viewMode === 'example' ? 'text-foreground' : 'text-muted-foreground hover:text-foreground'}`,
301
+ children: "Example"
302
+ })
303
+ ]
304
+ }),
305
+ /*#__PURE__*/ _jsx("span", {
306
+ className: "text-xs text-muted-foreground font-mono",
307
+ children: contentType
308
+ })
309
+ ]
310
+ }),
311
+ viewMode === 'schema' && parsedSchema ? /*#__PURE__*/ _jsx(SchemaViewer, {
312
+ schema: parsedSchema
313
+ }) : /*#__PURE__*/ _jsx("pre", {
314
+ className: "text-xs bg-muted/50 p-3 rounded overflow-auto",
315
+ children: typeof schema === 'string' ? schema : JSON.stringify(schema, null, 2)
316
+ })
317
+ ]
318
+ })
319
+ ]
320
+ });
321
+ }
@@ -0,0 +1,222 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useMemo, useEffect } from 'react';
4
+ import { Folder, FolderOpen } from '@phosphor-icons/react';
5
+ import { MethodBadge } from '../shared/method-badge';
6
+ import { SidebarItem } from './sidebar-item';
7
+ import { SidebarGroup } from './sidebar-group';
8
+ /**
9
+ * Find the folder ID that contains a request (recursive)
10
+ */ function _findFolderContainingRequest(collection, requestId) {
11
+ // Check if request is directly in this collection's folders
12
+ for (const folder of collection.folders){
13
+ // Check direct requests in folder
14
+ if (folder.requests.some((r)=>r.id === requestId)) {
15
+ return folder.id;
16
+ }
17
+ // Check nested folders recursively
18
+ const nestedFolderId = _findFolderContainingRequest(folder, requestId);
19
+ if (nestedFolderId) {
20
+ return folder.id // Return this folder's ID so it gets expanded too
21
+ ;
22
+ }
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Get all folder IDs that need to be expanded to show a request
28
+ */ function getFoldersToExpand(collection, requestId, path = []) {
29
+ for (const folder of collection.folders){
30
+ // Check direct requests in folder
31
+ if (folder.requests.some((r)=>r.id === requestId)) {
32
+ return [
33
+ ...path,
34
+ folder.id
35
+ ];
36
+ }
37
+ // Check nested folders recursively
38
+ const nestedPath = getFoldersToExpand(folder, requestId, [
39
+ ...path,
40
+ folder.id
41
+ ]);
42
+ if (nestedPath.length > path.length) {
43
+ return nestedPath;
44
+ }
45
+ }
46
+ return path;
47
+ }
48
+ export function CollectionTree({ collection, selectedRequest, onSelectRequest, searchQuery = '', level = 0 }) {
49
+ // Track which folders are expanded
50
+ const [expandedFolders, setExpandedFolders] = useState(()=>{
51
+ const expanded = new Set();
52
+ // Expand all folders at root level by default
53
+ if (level === 0) {
54
+ collection.folders.forEach((folder)=>{
55
+ expanded.add(folder.id);
56
+ });
57
+ }
58
+ return expanded;
59
+ });
60
+ // Re-expand all folders when collection folders change (e.g., tab switch)
61
+ // This ensures folders are expanded when switching between tabs with different folder sets
62
+ const folderIds = useMemo(()=>collection.folders.map((f)=>f.id).sort().join(','), [
63
+ collection.folders
64
+ ]);
65
+ useEffect(()=>{
66
+ if (level === 0 && collection.folders.length > 0) {
67
+ setExpandedFolders((prev)=>{
68
+ const newExpanded = new Set(prev);
69
+ // Add all current folder IDs to expanded set
70
+ collection.folders.forEach((folder)=>{
71
+ newExpanded.add(folder.id);
72
+ });
73
+ return newExpanded;
74
+ });
75
+ }
76
+ }, [
77
+ folderIds,
78
+ level,
79
+ collection.folders
80
+ ]);
81
+ // Auto-expand folder when selectedRequest changes (e.g., via agent navigation)
82
+ useEffect(()=>{
83
+ if (selectedRequest && level === 0) {
84
+ const foldersToExpand = getFoldersToExpand(collection, selectedRequest.id);
85
+ if (foldersToExpand.length > 0) {
86
+ setExpandedFolders((prev)=>{
87
+ const newExpanded = new Set(prev);
88
+ foldersToExpand.forEach((folderId)=>newExpanded.add(folderId));
89
+ return newExpanded;
90
+ });
91
+ }
92
+ }
93
+ }, [
94
+ selectedRequest,
95
+ collection,
96
+ level
97
+ ]);
98
+ const toggleFolder = (folderId)=>{
99
+ const newExpanded = new Set(expandedFolders);
100
+ if (newExpanded.has(folderId)) {
101
+ newExpanded.delete(folderId);
102
+ } else {
103
+ newExpanded.add(folderId);
104
+ }
105
+ setExpandedFolders(newExpanded);
106
+ };
107
+ // Filter items based on search query
108
+ const filteredData = useMemo(()=>{
109
+ if (!searchQuery.trim()) {
110
+ return {
111
+ folders: collection.folders,
112
+ requests: collection.requests
113
+ };
114
+ }
115
+ const query = searchQuery.toLowerCase();
116
+ const filteredFolders = [];
117
+ const filteredRequests = [];
118
+ // Filter folders
119
+ for (const folder of collection.folders){
120
+ const folderMatches = folder.name.toLowerCase().includes(query);
121
+ const folderRequests = folder.requests.filter((req)=>req.name.toLowerCase().includes(query) || req.endpoint.toLowerCase().includes(query) || req.description?.toLowerCase().includes(query));
122
+ if (folderMatches || folderRequests.length > 0) {
123
+ filteredFolders.push({
124
+ ...folder,
125
+ requests: folderMatches ? folder.requests : folderRequests
126
+ });
127
+ }
128
+ }
129
+ // Filter root requests
130
+ filteredRequests.push(...collection.requests.filter((req)=>req.name.toLowerCase().includes(query) || req.endpoint.toLowerCase().includes(query) || req.description?.toLowerCase().includes(query)));
131
+ return {
132
+ folders: filteredFolders,
133
+ requests: filteredRequests
134
+ };
135
+ }, [
136
+ collection,
137
+ searchQuery
138
+ ]);
139
+ // Show message if no content
140
+ if (filteredData.folders.length === 0 && filteredData.requests.length === 0) {
141
+ if (level === 0) {
142
+ return /*#__PURE__*/ _jsx("li", {
143
+ className: "py-4 px-2 text-center",
144
+ children: /*#__PURE__*/ _jsx("p", {
145
+ className: "text-sm text-muted-foreground",
146
+ children: "No endpoints found"
147
+ })
148
+ });
149
+ }
150
+ return null;
151
+ }
152
+ return /*#__PURE__*/ _jsxs(_Fragment, {
153
+ children: [
154
+ filteredData.folders.map((folder)=>{
155
+ const isExpanded = expandedFolders.has(folder.id);
156
+ const hasContent = folder.requests.length > 0 || folder.folders.length > 0;
157
+ if (!hasContent) {
158
+ // Empty folder - render as disabled item
159
+ return /*#__PURE__*/ _jsx(SidebarItem, {
160
+ indent: level,
161
+ disabled: true,
162
+ asideContent: /*#__PURE__*/ _jsx(Folder, {
163
+ className: "h-4 w-4 text-sidebar-foreground/40",
164
+ weight: "fill"
165
+ }),
166
+ children: folder.name
167
+ }, folder.id);
168
+ }
169
+ return /*#__PURE__*/ _jsxs(SidebarGroup, {
170
+ title: /*#__PURE__*/ _jsxs("span", {
171
+ className: "flex items-center gap-2",
172
+ children: [
173
+ isExpanded ? /*#__PURE__*/ _jsx(FolderOpen, {
174
+ className: "h-4 w-4 text-sidebar-foreground/60 shrink-0",
175
+ weight: "fill"
176
+ }) : /*#__PURE__*/ _jsx(Folder, {
177
+ className: "h-4 w-4 text-sidebar-foreground/60 shrink-0",
178
+ weight: "fill"
179
+ }),
180
+ /*#__PURE__*/ _jsx("span", {
181
+ className: "truncate",
182
+ children: folder.name
183
+ })
184
+ ]
185
+ }),
186
+ defaultOpen: isExpanded,
187
+ indent: level,
188
+ onClick: ()=>toggleFolder(folder.id),
189
+ children: [
190
+ folder.folders.length > 0 && /*#__PURE__*/ _jsx(CollectionTree, {
191
+ collection: folder,
192
+ selectedRequest: selectedRequest,
193
+ onSelectRequest: onSelectRequest,
194
+ searchQuery: searchQuery,
195
+ level: level + 1
196
+ }),
197
+ folder.requests.map((request)=>/*#__PURE__*/ _jsx(SidebarItem, {
198
+ selected: selectedRequest?.id === request.id,
199
+ indent: level + 1,
200
+ onClick: ()=>onSelectRequest(request),
201
+ asideContent: /*#__PURE__*/ _jsx(MethodBadge, {
202
+ method: request.method,
203
+ size: "sm"
204
+ }),
205
+ children: request.name
206
+ }, request.id))
207
+ ]
208
+ }, folder.id);
209
+ }),
210
+ filteredData.requests.map((request)=>/*#__PURE__*/ _jsx(SidebarItem, {
211
+ selected: selectedRequest?.id === request.id,
212
+ indent: level,
213
+ onClick: ()=>onSelectRequest(request),
214
+ asideContent: /*#__PURE__*/ _jsx(MethodBadge, {
215
+ method: request.method,
216
+ size: "sm"
217
+ }),
218
+ children: request.name
219
+ }, request.id))
220
+ ]
221
+ });
222
+ }