@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
@@ -1,202 +0,0 @@
1
- 'use client'
2
-
3
- import { useEffect, useState, useCallback } from 'react'
4
- import Image from 'next/image'
5
- import { X, ArrowClockwise } from '@phosphor-icons/react'
6
- import type { BrainfishCollection, BrainfishRESTRequest } from '@/lib/api-docs/types'
7
- import type { PrefillData } from '@/lib/api-docs/agent/types'
8
- import type { DebugContext } from '../playground/response-viewer'
9
- import { AgentChat } from '../agent'
10
- import { Button } from '@/components/ui/button'
11
- import { useMobile } from '@/lib/api-docs/mobile-context'
12
- import { cn } from '@/lib/utils'
13
- import {
14
- Tooltip,
15
- TooltipContent,
16
- TooltipTrigger,
17
- } from '@/components/ui/tooltip'
18
-
19
- interface RightSidebarProps {
20
- /** Current endpoint - when null, only agent mode is available */
21
- request: BrainfishRESTRequest | null
22
- /** Full collection for agent context */
23
- collection: BrainfishCollection
24
- /** Pre-generated API summary (cached server-side) */
25
- apiSummary?: string | null
26
- /** Callback when agent navigates to an endpoint */
27
- onNavigateToEndpoint: (endpointId: string) => void
28
- /** Callback when agent prefills parameters */
29
- onPrefillParameters: (data: PrefillData) => void
30
- /** Debug context from playground response - triggers agent debug */
31
- debugContext?: DebugContext | null
32
- /** Callback to clear debug context after processing */
33
- onClearDebugContext?: () => void
34
- /** Explain context from playground response - triggers agent explanation */
35
- explainContext?: DebugContext | null
36
- /** Callback to clear explain context after processing */
37
- onClearExplainContext?: () => void
38
- /** Callback to open global auth dialog */
39
- onOpenGlobalAuth?: () => void
40
- /** Callback to navigate to authorization tab in playground */
41
- onNavigateToAuthTab?: () => void
42
- /** Callback to navigate to parameters tab in playground */
43
- onNavigateToParamsTab?: () => void
44
- /** Callback to navigate to body tab in playground */
45
- onNavigateToBodyTab?: () => void
46
- /** Callback to navigate to headers tab in playground */
47
- onNavigateToHeadersTab?: () => void
48
- /** Callback to navigate to a documentation section */
49
- onNavigateToDocSection?: (sectionId: string) => void
50
- /** Callback to navigate to a documentation page */
51
- onNavigateToDocPage?: (slug: string) => void
52
- }
53
-
54
- export function RightSidebar({
55
- request,
56
- collection,
57
- apiSummary,
58
- onNavigateToEndpoint,
59
- onPrefillParameters,
60
- debugContext,
61
- onClearDebugContext,
62
- explainContext,
63
- onClearExplainContext,
64
- onOpenGlobalAuth,
65
- onNavigateToAuthTab,
66
- onNavigateToParamsTab,
67
- onNavigateToBodyTab,
68
- onNavigateToHeadersTab,
69
- onNavigateToDocSection,
70
- onNavigateToDocPage,
71
- }: RightSidebarProps) {
72
- // Mobile context
73
- const { isMobile, isRightSidebarOpen, closeRightSidebar } = useMobile()
74
-
75
- // Debug context to send to agent (full context for card display)
76
- const [pendingDebugContext, setPendingDebugContext] = useState<DebugContext | null>(null)
77
-
78
- // Handle debug context
79
- useEffect(() => {
80
- if (debugContext) {
81
- // Pass full context to agent
82
- setPendingDebugContext(debugContext)
83
-
84
- // Clear the debug context from parent
85
- onClearDebugContext?.()
86
- }
87
- }, [debugContext, onClearDebugContext])
88
-
89
- // Clear debug context after it's been used
90
- const handleDebugContextConsumed = () => {
91
- setPendingDebugContext(null)
92
- }
93
-
94
- // Key for resetting chat
95
- const [chatKey, setChatKey] = useState(0)
96
-
97
- // Track if there are messages
98
- const [hasMessages, setHasMessages] = useState(false)
99
-
100
- // Handle reset conversation
101
- const handleResetConversation = useCallback(() => {
102
- // Clear chat storage before remounting
103
- localStorage.removeItem('brainfish-agent-chat')
104
- setChatKey(prev => prev + 1)
105
- setHasMessages(false)
106
- }, [])
107
-
108
- return (
109
- <>
110
- {/* Mobile overlay backdrop - z-[55] to cover header (z-50) but below panel (z-60) */}
111
- {isMobile && isRightSidebarOpen && (
112
- <div
113
- className="docs-agent-overlay fixed inset-0 bg-black/50 z-[55] lg:hidden"
114
- onClick={closeRightSidebar}
115
- />
116
- )}
117
-
118
- <div
119
- className={cn(
120
- "docs-agent-panel border-l border-border bg-background flex flex-col overflow-hidden",
121
- // Desktop: always visible, fixed width
122
- "lg:relative lg:w-96 lg:h-full lg:z-auto",
123
- // Mobile: drawer behavior from right - z-[60] to appear above header (z-50)
124
- "fixed inset-y-0 right-0 z-[60] w-[320px] sm:w-[360px] h-full",
125
- "transform transition-transform duration-300 ease-in-out",
126
- "lg:transform-none lg:translate-x-0",
127
- isMobile && !isRightSidebarOpen && "translate-x-full",
128
- isMobile && isRightSidebarOpen && "translate-x-0"
129
- )}
130
- >
131
- {/* Header */}
132
- <div className="docs-agent-header shrink-0 px-3 sm:px-4 h-[41px] flex items-center border-b border-border bg-muted/30">
133
- <div className="flex items-center justify-between gap-2 w-full">
134
- {/* Left: Assistant */}
135
- <div className="docs-agent-title flex items-center gap-2.5">
136
- <div className="docs-agent-avatar size-7 rounded-full overflow-hidden bg-muted flex items-center justify-center shrink-0">
137
- <Image src="/icon.png" alt="Assistant" width={28} height={28} className="size-7 object-cover" />
138
- </div>
139
- <span className="text-sm font-medium">Assistant</span>
140
- </div>
141
-
142
- {/* Right: Actions */}
143
- <div className="flex items-center gap-1 shrink-0">
144
- {/* Reset conversation button - only show when there are messages */}
145
- {hasMessages && (
146
- <Tooltip>
147
- <TooltipTrigger asChild>
148
- <Button
149
- variant="ghost"
150
- size="icon"
151
- onClick={handleResetConversation}
152
- className="h-7 w-7 text-muted-foreground hover:text-foreground"
153
- >
154
- <ArrowClockwise className="h-4 w-4" weight="bold" />
155
- </Button>
156
- </TooltipTrigger>
157
- <TooltipContent side="bottom">New conversation</TooltipContent>
158
- </Tooltip>
159
- )}
160
-
161
- {/* Mobile close button */}
162
- {isMobile && (
163
- <Button
164
- variant="ghost"
165
- size="icon"
166
- onClick={closeRightSidebar}
167
- className="h-7 w-7 lg:hidden"
168
- >
169
- <X className="h-4 w-4" weight="bold" />
170
- </Button>
171
- )}
172
- </div>
173
- </div>
174
- </div>
175
-
176
- {/* Content */}
177
- <div className="docs-agent-content flex-1 overflow-hidden">
178
- <AgentChat
179
- key={chatKey}
180
- collection={collection}
181
- currentEndpoint={request}
182
- apiSummary={apiSummary}
183
- onNavigate={onNavigateToEndpoint}
184
- onPrefill={onPrefillParameters}
185
- debugContext={pendingDebugContext}
186
- onDebugContextConsumed={handleDebugContextConsumed}
187
- explainContext={explainContext}
188
- onExplainContextConsumed={onClearExplainContext}
189
- onOpenGlobalAuth={onOpenGlobalAuth}
190
- onNavigateToAuthTab={onNavigateToAuthTab}
191
- onNavigateToParamsTab={onNavigateToParamsTab}
192
- onNavigateToBodyTab={onNavigateToBodyTab}
193
- onNavigateToHeadersTab={onNavigateToHeadersTab}
194
- onNavigateToDocSection={onNavigateToDocSection}
195
- onNavigateToDocPage={onNavigateToDocPage}
196
- onHasMessagesChange={setHasMessages}
197
- />
198
- </div>
199
- </div>
200
- </>
201
- )
202
- }
@@ -1,118 +0,0 @@
1
- 'use client'
2
-
3
- import { ReactNode, useState, useRef, useEffect } from 'react'
4
- import { CaretRight } from '@phosphor-icons/react'
5
- import { cn } from '@/lib/utils'
6
-
7
- interface SidebarGroupProps {
8
- title: ReactNode
9
- children: ReactNode
10
- defaultOpen?: boolean
11
- selected?: boolean
12
- indent?: number
13
- onClick?: () => void
14
- asideContent?: ReactNode
15
- /** Selected child slug - when this changes and a child is selected, auto-expand */
16
- selectedChildSlug?: string | null
17
- }
18
-
19
- /**
20
- * Sidebar Group component - collapsible group with toggle
21
- * Arrow on right side with smooth rotation and expand animations
22
- */
23
- export function SidebarGroup({
24
- title,
25
- children,
26
- defaultOpen = false,
27
- selected = false,
28
- indent = 0,
29
- onClick,
30
- asideContent,
31
- selectedChildSlug,
32
- }: SidebarGroupProps) {
33
- const [isOpen, setIsOpen] = useState(defaultOpen)
34
- const contentRef = useRef<HTMLUListElement>(null)
35
- const [contentHeight, setContentHeight] = useState<number | undefined>(
36
- defaultOpen ? undefined : 0
37
- )
38
-
39
- // Auto-expand when a child is selected (e.g., via agent navigation)
40
- // Triggers on defaultOpen change OR when selectedChildSlug changes (even if defaultOpen stays true)
41
- useEffect(() => {
42
- if (defaultOpen) {
43
- setIsOpen(true)
44
- }
45
- }, [defaultOpen, selectedChildSlug])
46
-
47
- // Update height when open state changes
48
- useEffect(() => {
49
- if (isOpen) {
50
- const height = contentRef.current?.scrollHeight
51
- setContentHeight(height)
52
- // After animation, set to auto for dynamic content
53
- const timer = setTimeout(() => setContentHeight(undefined), 200)
54
- return () => clearTimeout(timer)
55
- } else {
56
- // First set the current height, then animate to 0
57
- const height = contentRef.current?.scrollHeight
58
- setContentHeight(height)
59
- requestAnimationFrame(() => {
60
- setContentHeight(0)
61
- })
62
- }
63
- }, [isOpen])
64
-
65
- const handleToggle = () => {
66
- setIsOpen(!isOpen)
67
- onClick?.()
68
- }
69
-
70
- return (
71
- <li className="docs-sidebar-group flex flex-col">
72
- <button
73
- type="button"
74
- aria-expanded={isOpen}
75
- onClick={handleToggle}
76
- className={cn(
77
- // Base styles
78
- 'docs-sidebar-group-toggle group/button flex items-center rounded-lg px-3 py-2 w-full text-left',
79
- 'text-sm leading-5 transition-colors duration-150',
80
- // State variants
81
- selected
82
- ? 'docs-sidebar-group-active bg-sidebar-primary text-sidebar-primary-foreground font-medium'
83
- : 'text-sidebar-foreground/80 hover:bg-sidebar-accent/30 hover:text-sidebar-foreground'
84
- )}
85
- style={{ paddingLeft: indent > 0 ? `${indent * 12 + 12}px` : undefined }}
86
- >
87
- <span className="flex-1 truncate font-medium">{title}</span>
88
- {asideContent && (
89
- <span className="ml-2 shrink-0">{asideContent}</span>
90
- )}
91
- {/* Toggle icon - right side with rotation animation */}
92
- <span className="docs-sidebar-group-icon ml-2 text-sidebar-foreground/50 group-hover/button:text-sidebar-foreground/70">
93
- <CaretRight
94
- weight="bold"
95
- className={cn(
96
- "h-3.5 w-3.5 transition-transform duration-200 ease-out",
97
- isOpen && "rotate-90"
98
- )}
99
- />
100
- </span>
101
- </button>
102
- {/* Child items with expand animation */}
103
- <ul
104
- ref={contentRef}
105
- className={cn(
106
- "docs-sidebar-group-items flex flex-col overflow-hidden transition-all duration-200 ease-out",
107
- !isOpen && "opacity-0",
108
- isOpen && "opacity-100"
109
- )}
110
- style={{
111
- height: contentHeight !== undefined ? `${contentHeight}px` : 'auto',
112
- }}
113
- >
114
- {children}
115
- </ul>
116
- </li>
117
- )
118
- }
@@ -1,212 +0,0 @@
1
- 'use client'
2
-
3
- import { ReactNode, useRef, useEffect, useLayoutEffect, useState, createContext, useContext } from 'react'
4
- import { cn } from '@/lib/utils'
5
- import { getPhosphorIcon } from '@/lib/utils/icons'
6
-
7
- // Context for the sliding indicator
8
- interface SlidingIndicatorContextType {
9
- registerItem: (id: string, element: HTMLElement | null) => void
10
- selectedId: string | null
11
- setSelectedId: (id: string) => void
12
- }
13
-
14
- const SlidingIndicatorContext = createContext<SlidingIndicatorContextType | null>(null)
15
-
16
- /**
17
- * Wrapper component that provides sliding indicator animation
18
- */
19
- interface SlidingIndicatorProviderProps {
20
- children: ReactNode
21
- className?: string
22
- }
23
-
24
- export function SlidingIndicatorProvider({ children, className }: SlidingIndicatorProviderProps) {
25
- const containerRef = useRef<HTMLDivElement>(null)
26
- const itemsRef = useRef<Map<string, HTMLElement>>(new Map())
27
- const [selectedId, setSelectedId] = useState<string | null>(null)
28
- const [indicatorStyle, setIndicatorStyle] = useState<React.CSSProperties>({
29
- opacity: 0,
30
- top: 0,
31
- height: 0,
32
- })
33
-
34
- const registerItem = (id: string, element: HTMLElement | null) => {
35
- if (element) {
36
- itemsRef.current.set(id, element)
37
- } else {
38
- itemsRef.current.delete(id)
39
- }
40
- }
41
-
42
- // Update indicator position when selection changes
43
- useLayoutEffect(() => {
44
- if (!selectedId || !containerRef.current) {
45
- setIndicatorStyle(prev => ({ ...prev, opacity: 0 }))
46
- return
47
- }
48
-
49
- const selectedElement = itemsRef.current.get(selectedId)
50
- if (!selectedElement) {
51
- setIndicatorStyle(prev => ({ ...prev, opacity: 0 }))
52
- return
53
- }
54
-
55
- const containerRect = containerRef.current.getBoundingClientRect()
56
- const itemRect = selectedElement.getBoundingClientRect()
57
-
58
- setIndicatorStyle({
59
- opacity: 1,
60
- top: itemRect.top - containerRect.top + containerRef.current.scrollTop,
61
- height: itemRect.height,
62
- left: 8,
63
- right: 8,
64
- })
65
- }, [selectedId])
66
-
67
- // Also update on scroll to keep indicator in sync
68
- useEffect(() => {
69
- const container = containerRef.current
70
- if (!container) return
71
-
72
- const handleScroll = () => {
73
- if (!selectedId) return
74
- const selectedElement = itemsRef.current.get(selectedId)
75
- if (!selectedElement) return
76
-
77
- const containerRect = container.getBoundingClientRect()
78
- const itemRect = selectedElement.getBoundingClientRect()
79
-
80
- setIndicatorStyle(prev => ({
81
- ...prev,
82
- top: itemRect.top - containerRect.top + container.scrollTop,
83
- }))
84
- }
85
-
86
- container.addEventListener('scroll', handleScroll, { passive: true })
87
- return () => container.removeEventListener('scroll', handleScroll)
88
- }, [selectedId])
89
-
90
- return (
91
- <SlidingIndicatorContext.Provider value={{ registerItem, selectedId, setSelectedId }}>
92
- <div ref={containerRef} className={cn('relative', className)}>
93
- {/* Sliding indicator background */}
94
- <div
95
- className="docs-sidebar-indicator absolute rounded-lg bg-background dark:bg-stone-800/50 pointer-events-none z-0"
96
- style={{
97
- ...indicatorStyle,
98
- transition: 'top 350ms cubic-bezier(0.4, 0, 0.2, 1), height 250ms cubic-bezier(0.4, 0, 0.2, 1), opacity 200ms ease-out',
99
- }}
100
- />
101
- {children}
102
- </div>
103
- </SlidingIndicatorContext.Provider>
104
- )
105
- }
106
-
107
- interface SidebarItemProps {
108
- children: ReactNode
109
- selected?: boolean
110
- active?: boolean
111
- disabled?: boolean
112
- indent?: number
113
- onClick?: () => void
114
- className?: string
115
- asideContent?: ReactNode
116
- /** Unique ID for sliding animation */
117
- itemId?: string
118
- /** Phosphor icon name */
119
- icon?: string
120
- }
121
-
122
- /**
123
- * Sidebar Item component - individual clickable item in the sidebar
124
- * Uses subtle sage/mint style when selected with smooth sliding animation
125
- */
126
- export function SidebarItem({
127
- children,
128
- selected = false,
129
- active = false,
130
- disabled = false,
131
- indent = 0,
132
- onClick,
133
- className,
134
- asideContent,
135
- itemId,
136
- icon,
137
- }: SidebarItemProps) {
138
- const buttonRef = useRef<HTMLButtonElement>(null)
139
- const context = useContext(SlidingIndicatorContext)
140
- const id = itemId || String(children)
141
- const IconComponent = getPhosphorIcon(icon)
142
-
143
- // Register this item with the sliding indicator provider
144
- useEffect(() => {
145
- if (context && buttonRef.current) {
146
- context.registerItem(id, buttonRef.current)
147
- return () => context.registerItem(id, null)
148
- }
149
- }, [context, id])
150
-
151
- // Update selected state in context
152
- useEffect(() => {
153
- if (context && selected) {
154
- context.setSelectedId(id)
155
- }
156
- }, [context, selected, id])
157
-
158
- // Auto-scroll into view when selected (e.g., via agent navigation)
159
- useEffect(() => {
160
- if (selected && buttonRef.current) {
161
- // Small delay to allow folder expansion animation to complete
162
- setTimeout(() => {
163
- buttonRef.current?.scrollIntoView({
164
- behavior: 'smooth',
165
- block: 'center',
166
- })
167
- }, 100)
168
- }
169
- }, [selected])
170
-
171
- // Check if we're inside a sliding indicator provider
172
- const hasSliding = context !== null
173
-
174
- return (
175
- <li className="docs-sidebar-item-wrapper flex flex-col">
176
- <button
177
- ref={buttonRef}
178
- type="button"
179
- disabled={disabled}
180
- aria-selected={selected}
181
- onClick={onClick}
182
- className={cn(
183
- // Base styles
184
- 'docs-sidebar-item group/button flex items-center rounded-lg px-3 py-2 w-full text-left relative z-10',
185
- 'text-sm leading-5 transition-colors duration-150',
186
- // Indentation
187
- indent > 0 && `ml-${indent * 3}`,
188
- // State variants
189
- selected
190
- ? hasSliding
191
- ? 'docs-sidebar-item-active text-green-700 font-semibold dark:text-green-400' // No bg when sliding
192
- : 'docs-sidebar-item-active bg-background text-green-700 font-semibold dark:bg-stone-800/50 dark:text-green-400'
193
- : active
194
- ? 'text-sidebar-foreground font-medium hover:bg-sidebar-accent/50'
195
- : disabled
196
- ? 'text-sidebar-foreground/50 cursor-default'
197
- : 'text-sidebar-foreground/80 hover:bg-sidebar-accent/30 hover:text-sidebar-foreground',
198
- className
199
- )}
200
- style={{ paddingLeft: indent > 0 ? `${indent * 12 + 12}px` : undefined }}
201
- >
202
- {IconComponent && (
203
- <IconComponent className="h-4 w-4 mr-2 shrink-0 opacity-60" weight="regular" />
204
- )}
205
- <span className="flex-1 truncate">{children}</span>
206
- {asideContent && (
207
- <span className="ml-2 shrink-0">{asideContent}</span>
208
- )}
209
- </button>
210
- </li>
211
- )
212
- }
@@ -1,38 +0,0 @@
1
- 'use client'
2
-
3
- import { ReactNode } from 'react'
4
- import { cn } from '@/lib/utils'
5
- import { getPhosphorIcon } from '@/lib/utils/icons'
6
-
7
- interface SidebarSectionProps {
8
- title: string
9
- children: ReactNode
10
- className?: string
11
- /** Phosphor icon name (e.g., "rocket", "book-open", "sliders") */
12
- icon?: string
13
- }
14
-
15
- /**
16
- * Sidebar Section component - groups items under a title with optional icon
17
- */
18
- export function SidebarSection({ title, children, className = '', icon }: SidebarSectionProps) {
19
- const IconComponent = getPhosphorIcon(icon)
20
-
21
- return (
22
- <div className={cn('docs-sidebar-section flex flex-col', className)}>
23
- {/* Section title with optional icon */}
24
- <div className="docs-sidebar-section-header flex items-center gap-2 px-4 py-3">
25
- {IconComponent && (
26
- <IconComponent className="docs-sidebar-section-icon h-4 w-4 text-sidebar-foreground/70" weight="regular" />
27
- )}
28
- <span className="docs-sidebar-section-title text-sm font-semibold text-sidebar-foreground">
29
- {title}
30
- </span>
31
- </div>
32
- {/* Section items */}
33
- <ul className="docs-sidebar-section-items flex flex-col gap-0.5 px-2 pb-4">
34
- {children}
35
- </ul>
36
- </div>
37
- )
38
- }
@@ -1,11 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { ThemeProvider as NextThemesProvider } from "next-themes"
5
-
6
- export function ThemeProvider({
7
- children,
8
- ...props
9
- }: React.ComponentProps<typeof NextThemesProvider>) {
10
- return <NextThemesProvider {...props}>{children}</NextThemesProvider>
11
- }
@@ -1,76 +0,0 @@
1
- "use client"
2
-
3
- import * as React from "react"
4
- import { Moon, Sun, Desktop, Check } from "@phosphor-icons/react"
5
- import { useTheme } from "next-themes"
6
- import { Button } from "@/components/ui/button"
7
- import {
8
- DropdownMenu,
9
- DropdownMenuContent,
10
- DropdownMenuItem,
11
- DropdownMenuTrigger,
12
- } from "@/components/ui/dropdown-menu"
13
- import { cn } from "@/lib/utils"
14
-
15
- export function ThemeToggle() {
16
- const { theme, setTheme } = useTheme()
17
- const [mounted, setMounted] = React.useState(false)
18
-
19
- // Avoid hydration mismatch
20
- React.useEffect(() => {
21
- setMounted(true)
22
- }, [])
23
-
24
- return (
25
- <DropdownMenu>
26
- <DropdownMenuTrigger asChild>
27
- <Button variant="ghost" size="icon" className="h-9 w-9">
28
- <Sun className="h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" />
29
- <Moon className="absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" />
30
- <span className="sr-only">Toggle theme</span>
31
- </Button>
32
- </DropdownMenuTrigger>
33
- <DropdownMenuContent align="end" className="min-w-[140px]">
34
- <DropdownMenuItem
35
- onClick={() => setTheme("light")}
36
- className={cn(
37
- "flex items-center justify-between gap-2",
38
- mounted && theme === "light" && "bg-accent"
39
- )}
40
- >
41
- <div className="flex items-center gap-2">
42
- <Sun className="h-4 w-4" />
43
- <span>Light</span>
44
- </div>
45
- {mounted && theme === "light" && <Check className="h-4 w-4" />}
46
- </DropdownMenuItem>
47
- <DropdownMenuItem
48
- onClick={() => setTheme("dark")}
49
- className={cn(
50
- "flex items-center justify-between gap-2",
51
- mounted && theme === "dark" && "bg-accent"
52
- )}
53
- >
54
- <div className="flex items-center gap-2">
55
- <Moon className="h-4 w-4" />
56
- <span>Dark</span>
57
- </div>
58
- {mounted && theme === "dark" && <Check className="h-4 w-4" />}
59
- </DropdownMenuItem>
60
- <DropdownMenuItem
61
- onClick={() => setTheme("system")}
62
- className={cn(
63
- "flex items-center justify-between gap-2",
64
- mounted && theme === "system" && "bg-accent"
65
- )}
66
- >
67
- <div className="flex items-center gap-2">
68
- <Desktop className="h-4 w-4" />
69
- <span>System</span>
70
- </div>
71
- {mounted && theme === "system" && <Check className="h-4 w-4" />}
72
- </DropdownMenuItem>
73
- </DropdownMenuContent>
74
- </DropdownMenu>
75
- )
76
- }