@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,100 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Warning } from '@phosphor-icons/react';
4
+ import { cn } from '@/lib/utils';
5
+ export function ChangelogEntry({ version, date, children }) {
6
+ return /*#__PURE__*/ _jsxs("div", {
7
+ "data-version": version,
8
+ className: "flex gap-6 lg:gap-10 py-8 border-b border-border last:border-b-0",
9
+ children: [
10
+ /*#__PURE__*/ _jsxs("div", {
11
+ className: "w-24 lg:w-32 shrink-0",
12
+ children: [
13
+ /*#__PURE__*/ _jsx("span", {
14
+ className: "inline-block px-2.5 py-1 text-sm font-medium rounded-md bg-amber-100 text-amber-800 dark:bg-amber-900/30 dark:text-amber-400 border border-amber-200 dark:border-amber-800",
15
+ children: version
16
+ }),
17
+ /*#__PURE__*/ _jsx("p", {
18
+ className: "mt-2 text-sm text-muted-foreground",
19
+ children: date
20
+ })
21
+ ]
22
+ }),
23
+ /*#__PURE__*/ _jsx("div", {
24
+ className: "flex-1 min-w-0",
25
+ children: children
26
+ })
27
+ ]
28
+ });
29
+ }
30
+ export function ChangelogTitle({ children, className }) {
31
+ return /*#__PURE__*/ _jsx("h2", {
32
+ className: cn("text-xl font-semibold text-foreground mb-3", className),
33
+ children: children
34
+ });
35
+ }
36
+ export function ChangelogDescription({ children }) {
37
+ return /*#__PURE__*/ _jsx("p", {
38
+ className: "text-muted-foreground mb-4",
39
+ children: children
40
+ });
41
+ }
42
+ export function ChangelogImage({ src, alt = "Screenshot" }) {
43
+ return /*#__PURE__*/ _jsx("div", {
44
+ className: "my-6 rounded-lg border border-border overflow-hidden shadow-sm",
45
+ children: /*#__PURE__*/ _jsx("img", {
46
+ src: src,
47
+ alt: alt,
48
+ className: "w-full"
49
+ })
50
+ });
51
+ }
52
+ export function BreakingChange({ children }) {
53
+ return /*#__PURE__*/ _jsxs("div", {
54
+ className: "my-6 flex gap-3 p-4 rounded-lg bg-amber-50 dark:bg-amber-950/30 border border-amber-200 dark:border-amber-800",
55
+ children: [
56
+ /*#__PURE__*/ _jsx(Warning, {
57
+ className: "h-5 w-5 text-amber-600 dark:text-amber-500 shrink-0 mt-0.5",
58
+ weight: "fill"
59
+ }),
60
+ /*#__PURE__*/ _jsx("div", {
61
+ className: "text-amber-800 dark:text-amber-200 text-sm",
62
+ children: children
63
+ })
64
+ ]
65
+ });
66
+ }
67
+ export function MoreUpdates({ children }) {
68
+ return /*#__PURE__*/ _jsxs("div", {
69
+ className: "mt-6",
70
+ children: [
71
+ /*#__PURE__*/ _jsx("h3", {
72
+ className: "text-lg font-semibold text-foreground mb-3",
73
+ children: "More Updates"
74
+ }),
75
+ /*#__PURE__*/ _jsx("ul", {
76
+ className: "space-y-2 text-muted-foreground",
77
+ children: children
78
+ })
79
+ ]
80
+ });
81
+ }
82
+ export function UpdateItem({ children, type = 'default' }) {
83
+ return /*#__PURE__*/ _jsxs("li", {
84
+ className: "flex items-start gap-2",
85
+ children: [
86
+ /*#__PURE__*/ _jsx("span", {
87
+ className: "mt-2 h-1.5 w-1.5 rounded-full bg-foreground shrink-0"
88
+ }),
89
+ /*#__PURE__*/ _jsxs("span", {
90
+ children: [
91
+ type === 'behavior' && /*#__PURE__*/ _jsx("strong", {
92
+ className: "font-semibold text-foreground",
93
+ children: "Behavior Change "
94
+ }),
95
+ children
96
+ ]
97
+ })
98
+ ]
99
+ });
100
+ }
@@ -0,0 +1,147 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState, isValidElement, createContext, useContext } from 'react';
4
+ import { cn } from '@/lib/utils';
5
+ import { Copy, Check } from '@phosphor-icons/react';
6
+ /**
7
+ * Pre and Code components for code block styling
8
+ */ // Context to detect if we're inside a CodeGroup
9
+ export const CodeGroupContext = /*#__PURE__*/ createContext(false);
10
+ // Extract text content from nested React elements
11
+ function extractTextContent(node) {
12
+ if (typeof node === 'string') return node;
13
+ if (typeof node === 'number') return String(node);
14
+ if (Array.isArray(node)) return node.map(extractTextContent).join('');
15
+ if (/*#__PURE__*/ isValidElement(node)) {
16
+ const props = node.props;
17
+ if (props.children) {
18
+ return extractTextContent(props.children);
19
+ }
20
+ }
21
+ return '';
22
+ }
23
+ // Get display name for language
24
+ function getDisplayName(language) {
25
+ const displayNames = {
26
+ javascript: 'JavaScript',
27
+ typescript: 'TypeScript',
28
+ python: 'Python',
29
+ java: 'Java',
30
+ go: 'Go',
31
+ rust: 'Rust',
32
+ ruby: 'Ruby',
33
+ php: 'PHP',
34
+ csharp: 'C#',
35
+ cpp: 'C++',
36
+ c: 'C',
37
+ swift: 'Swift',
38
+ kotlin: 'Kotlin',
39
+ bash: 'Bash',
40
+ shell: 'Shell',
41
+ json: 'JSON',
42
+ yaml: 'YAML',
43
+ html: 'HTML',
44
+ css: 'CSS',
45
+ sql: 'SQL',
46
+ markdown: 'Markdown',
47
+ text: 'Text',
48
+ plaintext: 'Text'
49
+ };
50
+ return displayNames[language.toLowerCase()] || language.charAt(0).toUpperCase() + language.slice(1);
51
+ }
52
+ export function Pre({ children, className, 'data-language': dataLanguage, ...props }) {
53
+ const isInCodeGroup = useContext(CodeGroupContext);
54
+ const [copied, setCopied] = useState(false);
55
+ // If inside CodeGroup, render plain pre (CodeGroup handles styling)
56
+ if (isInCodeGroup) {
57
+ return /*#__PURE__*/ _jsx("pre", {
58
+ className: cn('overflow-x-auto', className),
59
+ ...props,
60
+ children: children
61
+ });
62
+ }
63
+ // Extract language from children's className or data attribute
64
+ let language = dataLanguage || 'text';
65
+ let content = '';
66
+ if (/*#__PURE__*/ isValidElement(children)) {
67
+ const childProps = children.props;
68
+ const childClassName = childProps.className || '';
69
+ const match = childClassName.match(/language-(\w+)/);
70
+ if (match) {
71
+ language = match[1];
72
+ }
73
+ content = extractTextContent(childProps.children);
74
+ }
75
+ const handleCopy = async ()=>{
76
+ try {
77
+ await navigator.clipboard.writeText(content.trim());
78
+ setCopied(true);
79
+ setTimeout(()=>setCopied(false), 2000);
80
+ } catch (err) {
81
+ console.error('Failed to copy:', err);
82
+ }
83
+ };
84
+ const displayName = getDisplayName(language);
85
+ // Standalone code block - styled like CodeGroup
86
+ return /*#__PURE__*/ _jsxs("div", {
87
+ className: "docs-code-block my-4 rounded-xl border border-zinc-800 overflow-hidden bg-[#1a1a1a]",
88
+ children: [
89
+ /*#__PURE__*/ _jsxs("div", {
90
+ className: "docs-code-header flex items-center justify-between bg-[#262626] px-2",
91
+ children: [
92
+ /*#__PURE__*/ _jsx("div", {
93
+ className: "flex overflow-x-auto",
94
+ children: /*#__PURE__*/ _jsxs("div", {
95
+ className: "docs-code-tab px-4 py-2.5 text-sm font-medium whitespace-nowrap text-white relative",
96
+ children: [
97
+ displayName,
98
+ /*#__PURE__*/ _jsx("span", {
99
+ className: "absolute bottom-0 left-0 right-0 h-0.5 bg-emerald-500 rounded-full"
100
+ })
101
+ ]
102
+ })
103
+ }),
104
+ /*#__PURE__*/ _jsx("div", {
105
+ className: "docs-code-actions flex items-center gap-1 pr-2",
106
+ children: /*#__PURE__*/ _jsx("button", {
107
+ type: "button",
108
+ onClick: handleCopy,
109
+ className: cn('p-1.5 rounded text-zinc-500 hover:text-zinc-300', 'hover:bg-zinc-700/50 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50'),
110
+ title: "Copy code",
111
+ children: copied ? /*#__PURE__*/ _jsx(Check, {
112
+ className: "h-4 w-4 text-emerald-500",
113
+ weight: "bold"
114
+ }) : /*#__PURE__*/ _jsx(Copy, {
115
+ className: "h-4 w-4"
116
+ })
117
+ })
118
+ })
119
+ ]
120
+ }),
121
+ /*#__PURE__*/ _jsx("div", {
122
+ className: "docs-code-content overflow-x-auto",
123
+ children: /*#__PURE__*/ _jsx("pre", {
124
+ className: cn('p-4 m-0 bg-transparent text-sm', className),
125
+ ...props,
126
+ children: children
127
+ })
128
+ })
129
+ ]
130
+ });
131
+ }
132
+ export function Code({ children, className, ...props }) {
133
+ const isCodeBlock = className?.includes('language-');
134
+ if (isCodeBlock) {
135
+ return /*#__PURE__*/ _jsx("code", {
136
+ className: cn(className, 'bg-transparent'),
137
+ ...props,
138
+ children: children
139
+ });
140
+ }
141
+ // Inline code
142
+ return /*#__PURE__*/ _jsx("code", {
143
+ className: cn('docs-inline-code px-1.5 py-0.5 rounded text-sm font-mono', 'bg-zinc-800 text-zinc-200', className),
144
+ ...props,
145
+ children: children
146
+ });
147
+ }
@@ -0,0 +1,287 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState, Children, isValidElement } from 'react';
4
+ import { cn } from '@/lib/utils';
5
+ import { Copy, Check } from '@phosphor-icons/react';
6
+ // Extract text content from nested React elements
7
+ function extractTextContent(node) {
8
+ if (typeof node === 'string') return node;
9
+ if (typeof node === 'number') return String(node);
10
+ if (Array.isArray(node)) return node.map(extractTextContent).join('');
11
+ if (/*#__PURE__*/ isValidElement(node)) {
12
+ const props = node.props;
13
+ if (props.children) {
14
+ return extractTextContent(props.children);
15
+ }
16
+ }
17
+ return '';
18
+ }
19
+ // Extract title from code comment on first line (e.g., "// npm" or "# yarn")
20
+ function extractTitleFromComment(code) {
21
+ const firstLine = code.trim().split('\n')[0];
22
+ // Match various comment styles
23
+ const patterns = [
24
+ /^\/\/\s*(.+)$/,
25
+ /^#\s*(.+)$/,
26
+ /^\/\*\s*(.+?)\s*\*\/$/,
27
+ /^<!--\s*(.+?)\s*-->$/,
28
+ /^--\s*(.+)$/
29
+ ];
30
+ for (const pattern of patterns){
31
+ const match = firstLine.match(pattern);
32
+ if (match && match[1] && match[1].length < 30) {
33
+ return match[1].trim();
34
+ }
35
+ }
36
+ return null;
37
+ }
38
+ // Check if element type matches a tag name (handles both string and component types)
39
+ function isElementType(element, tagName) {
40
+ const type = element.type;
41
+ if (typeof type === 'string') {
42
+ return type === tagName;
43
+ }
44
+ // Check displayName or name for components
45
+ if (typeof type === 'function') {
46
+ const funcType = type;
47
+ return funcType.displayName === tagName || funcType.name === tagName;
48
+ }
49
+ return false;
50
+ }
51
+ // Recursively find all pre elements
52
+ function findPreElements(children, results = []) {
53
+ Children.forEach(children, (child)=>{
54
+ if (!child) return;
55
+ if (/*#__PURE__*/ isValidElement(child)) {
56
+ const props = child.props;
57
+ // Check if it's a pre element (either native or component)
58
+ if (isElementType(child, 'pre')) {
59
+ const codeChild = props.children;
60
+ let language = 'text';
61
+ let content = '';
62
+ if (/*#__PURE__*/ isValidElement(codeChild)) {
63
+ const codeProps = codeChild.props;
64
+ const className = codeProps.className || '';
65
+ const match = className.match(/language-(\w+)/);
66
+ language = match ? match[1] : 'text';
67
+ content = extractTextContent(codeProps.children);
68
+ } else if (typeof codeChild === 'string') {
69
+ content = codeChild;
70
+ } else {
71
+ // Try to get content from nested structure
72
+ content = extractTextContent(codeChild);
73
+ }
74
+ // Also check pre element's className for language
75
+ const preClassName = props.className || '';
76
+ const preMatch = preClassName.match(/language-(\w+)/);
77
+ if (preMatch) {
78
+ language = preMatch[1];
79
+ }
80
+ // Check data-language attribute
81
+ if (props['data-language']) {
82
+ language = props['data-language'];
83
+ }
84
+ // Extract title from various possible locations
85
+ // Priority: data-title > title prop > comment in code > language name
86
+ const commentTitle = extractTitleFromComment(content);
87
+ const title = props['data-title'] || props.title || commentTitle || getDisplayName(language);
88
+ results.push({
89
+ title,
90
+ language,
91
+ content,
92
+ element: child
93
+ });
94
+ } else if (isElementType(child, 'figure') && props['data-rehype-pretty-code-figure'] !== undefined) {
95
+ // Find pre inside figure
96
+ findPreElements(props.children, results);
97
+ } else if (props.children) {
98
+ findPreElements(props.children, results);
99
+ }
100
+ }
101
+ });
102
+ return results;
103
+ }
104
+ // Get display name for language
105
+ function getDisplayName(language) {
106
+ const displayNames = {
107
+ javascript: 'JavaScript',
108
+ typescript: 'TypeScript',
109
+ python: 'Python',
110
+ java: 'Java',
111
+ go: 'Go',
112
+ rust: 'Rust',
113
+ ruby: 'Ruby',
114
+ php: 'PHP',
115
+ csharp: 'C#',
116
+ cpp: 'C++',
117
+ c: 'C',
118
+ swift: 'Swift',
119
+ kotlin: 'Kotlin',
120
+ bash: 'Bash',
121
+ shell: 'Shell',
122
+ json: 'JSON',
123
+ yaml: 'YAML',
124
+ html: 'HTML',
125
+ css: 'CSS',
126
+ sql: 'SQL',
127
+ markdown: 'Markdown',
128
+ text: 'Text',
129
+ plaintext: 'Text'
130
+ };
131
+ return displayNames[language.toLowerCase()] || language.charAt(0).toUpperCase() + language.slice(1);
132
+ }
133
+ export function CodeGroup({ children, className, variant = 'default' }) {
134
+ const blocks = findPreElements(children);
135
+ const [activeIndex, setActiveIndex] = useState(0);
136
+ const [copied, setCopied] = useState(false);
137
+ // If no code blocks found, just render children as-is
138
+ if (blocks.length === 0) {
139
+ return /*#__PURE__*/ _jsx("div", {
140
+ className: className,
141
+ children: children
142
+ });
143
+ }
144
+ const activeBlock = blocks[activeIndex];
145
+ const handleCopy = async ()=>{
146
+ if (activeBlock?.content) {
147
+ try {
148
+ await navigator.clipboard.writeText(activeBlock.content.trim());
149
+ setCopied(true);
150
+ setTimeout(()=>setCopied(false), 2000);
151
+ } catch (err) {
152
+ console.error('Failed to copy:', err);
153
+ }
154
+ }
155
+ };
156
+ // Tabs variant - dark theme with border tabs
157
+ if (variant === 'tabs') {
158
+ return /*#__PURE__*/ _jsxs("div", {
159
+ className: cn('docs-code-group docs-code-group-tabs my-4 rounded-xl border border-zinc-800 overflow-hidden bg-[#1a1a1a]', className),
160
+ children: [
161
+ /*#__PURE__*/ _jsxs("div", {
162
+ className: "docs-code-group-header flex items-center justify-between border-b border-zinc-800 bg-[#262626]",
163
+ children: [
164
+ /*#__PURE__*/ _jsx("div", {
165
+ className: "flex overflow-x-auto",
166
+ children: blocks.map((block, index)=>/*#__PURE__*/ _jsx("button", {
167
+ type: "button",
168
+ onClick: ()=>setActiveIndex(index),
169
+ className: cn('docs-code-group-tab px-4 py-2.5 text-sm font-medium whitespace-nowrap transition-colors border-b-2 -mb-px', 'hover:text-white', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50', activeIndex === index ? 'text-white border-emerald-500' : 'text-zinc-400 border-transparent hover:border-zinc-600'),
170
+ children: block.title
171
+ }, index))
172
+ }),
173
+ /*#__PURE__*/ _jsx("button", {
174
+ type: "button",
175
+ onClick: handleCopy,
176
+ className: cn('mr-3 p-1.5 rounded text-zinc-500 hover:text-zinc-300', 'hover:bg-zinc-700/50 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50'),
177
+ title: "Copy code",
178
+ children: copied ? /*#__PURE__*/ _jsx(Check, {
179
+ className: "h-4 w-4 text-emerald-500",
180
+ weight: "bold"
181
+ }) : /*#__PURE__*/ _jsx(Copy, {
182
+ className: "h-4 w-4"
183
+ })
184
+ })
185
+ ]
186
+ }),
187
+ /*#__PURE__*/ _jsx("div", {
188
+ className: cn('docs-code-group-content', '[&>pre]:my-0 [&>pre]:rounded-none [&>pre]:border-0 [&>pre]:bg-[#1a1a1a]', '[&_pre]:my-0 [&_pre]:rounded-none [&_pre]:border-0 [&_pre]:bg-[#1a1a1a]', '[&_code]:bg-transparent [&_pre]:p-4', '[&_pre]:text-sm [&_code]:text-sm'),
189
+ children: activeBlock?.element
190
+ })
191
+ ]
192
+ });
193
+ }
194
+ // Pills variant - pill-shaped buttons with dark theme
195
+ if (variant === 'pills') {
196
+ return /*#__PURE__*/ _jsxs("div", {
197
+ className: cn('docs-code-group docs-code-group-pills my-4 rounded-xl border border-zinc-800 overflow-hidden bg-[#1a1a1a]', className),
198
+ children: [
199
+ /*#__PURE__*/ _jsxs("div", {
200
+ className: "docs-code-group-header flex items-center justify-between p-2 bg-[#262626] border-b border-zinc-800",
201
+ children: [
202
+ /*#__PURE__*/ _jsx("div", {
203
+ className: "flex gap-1 overflow-x-auto",
204
+ children: blocks.map((block, index)=>/*#__PURE__*/ _jsx("button", {
205
+ type: "button",
206
+ onClick: ()=>setActiveIndex(index),
207
+ className: cn('docs-code-group-tab px-3 py-1.5 text-xs font-medium whitespace-nowrap rounded-full transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50', activeIndex === index ? 'bg-emerald-500 text-white' : 'text-zinc-400 hover:text-white hover:bg-zinc-700'),
208
+ children: block.title
209
+ }, index))
210
+ }),
211
+ /*#__PURE__*/ _jsx("button", {
212
+ type: "button",
213
+ onClick: handleCopy,
214
+ className: cn('p-1.5 rounded text-zinc-500 hover:text-zinc-300', 'hover:bg-zinc-700/50 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50'),
215
+ title: "Copy code",
216
+ children: copied ? /*#__PURE__*/ _jsx(Check, {
217
+ className: "h-4 w-4 text-emerald-500",
218
+ weight: "bold"
219
+ }) : /*#__PURE__*/ _jsx(Copy, {
220
+ className: "h-4 w-4"
221
+ })
222
+ })
223
+ ]
224
+ }),
225
+ /*#__PURE__*/ _jsx("div", {
226
+ className: cn('docs-code-group-content', '[&>pre]:my-0 [&>pre]:rounded-none [&>pre]:border-0 [&>pre]:bg-[#1a1a1a]', '[&_pre]:my-0 [&_pre]:rounded-none [&_pre]:border-0 [&_pre]:bg-[#1a1a1a]', '[&_code]:bg-transparent [&_pre]:p-4', '[&_pre]:text-sm [&_code]:text-sm'),
227
+ children: activeBlock?.element
228
+ })
229
+ ]
230
+ });
231
+ }
232
+ // Default variant - dark theme with underline indicator
233
+ return /*#__PURE__*/ _jsxs("div", {
234
+ className: cn('docs-code-group docs-code-group-default my-4 rounded-xl border border-zinc-800 overflow-hidden bg-[#1a1a1a]', className),
235
+ children: [
236
+ /*#__PURE__*/ _jsxs("div", {
237
+ className: "docs-code-group-header flex items-center justify-between bg-[#262626] px-2",
238
+ children: [
239
+ /*#__PURE__*/ _jsx("div", {
240
+ className: "flex overflow-x-auto",
241
+ children: blocks.map((block, index)=>/*#__PURE__*/ _jsxs("button", {
242
+ type: "button",
243
+ onClick: ()=>setActiveIndex(index),
244
+ className: cn('docs-code-group-tab px-4 py-2.5 text-sm font-medium whitespace-nowrap transition-colors relative', 'hover:text-white', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50', activeIndex === index ? 'text-white' : 'text-zinc-400'),
245
+ children: [
246
+ block.title,
247
+ activeIndex === index && /*#__PURE__*/ _jsx("span", {
248
+ className: "absolute bottom-0 left-0 right-0 h-0.5 bg-emerald-500 rounded-full"
249
+ })
250
+ ]
251
+ }, index))
252
+ }),
253
+ /*#__PURE__*/ _jsx("div", {
254
+ className: "docs-code-group-actions flex items-center gap-1 pr-2",
255
+ children: /*#__PURE__*/ _jsx("button", {
256
+ type: "button",
257
+ onClick: handleCopy,
258
+ className: cn('p-1.5 rounded text-zinc-500 hover:text-zinc-300', 'hover:bg-zinc-700/50 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50'),
259
+ title: "Copy code",
260
+ children: copied ? /*#__PURE__*/ _jsx(Check, {
261
+ className: "h-4 w-4 text-emerald-500",
262
+ weight: "bold"
263
+ }) : /*#__PURE__*/ _jsx(Copy, {
264
+ className: "h-4 w-4"
265
+ })
266
+ })
267
+ })
268
+ ]
269
+ }),
270
+ /*#__PURE__*/ _jsx("div", {
271
+ className: cn('docs-code-group-content', '[&>pre]:my-0 [&>pre]:rounded-none [&>pre]:border-0 [&>pre]:bg-[#1a1a1a]', '[&_pre]:my-0 [&_pre]:rounded-none [&_pre]:border-0 [&_pre]:bg-[#1a1a1a]', '[&_code]:bg-transparent [&_pre]:p-4', '[&_pre]:text-sm [&_code]:text-sm'),
272
+ children: activeBlock?.element
273
+ })
274
+ ]
275
+ });
276
+ }
277
+ export function CodeBlockItem({ children, title, language, className }) {
278
+ return /*#__PURE__*/ _jsx("pre", {
279
+ className: cn('p-4 overflow-x-auto', className),
280
+ "data-title": title,
281
+ "data-language": language,
282
+ children: /*#__PURE__*/ _jsx("code", {
283
+ className: language ? `language-${language}` : '',
284
+ children: children
285
+ })
286
+ });
287
+ }
@@ -0,0 +1,82 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { cn } from '@/lib/utils';
4
+ import { DownloadSimple, FileAudio, FilePdf } from '@phosphor-icons/react';
5
+ export function PDF({ src, title, height = 500, className }) {
6
+ return /*#__PURE__*/ _jsxs("div", {
7
+ className: cn('my-4', className),
8
+ children: [
9
+ title && /*#__PURE__*/ _jsxs("div", {
10
+ className: "flex items-center gap-2 mb-2",
11
+ children: [
12
+ /*#__PURE__*/ _jsx(FilePdf, {
13
+ className: "h-5 w-5 text-red-500",
14
+ weight: "fill"
15
+ }),
16
+ /*#__PURE__*/ _jsx("span", {
17
+ className: "text-sm font-medium",
18
+ children: title
19
+ })
20
+ ]
21
+ }),
22
+ /*#__PURE__*/ _jsx("div", {
23
+ className: "rounded-lg border border-border overflow-hidden bg-muted",
24
+ style: {
25
+ height
26
+ },
27
+ children: /*#__PURE__*/ _jsx("iframe", {
28
+ src: `${src}#view=FitH`,
29
+ className: "w-full h-full",
30
+ title: title || 'PDF Document'
31
+ })
32
+ })
33
+ ]
34
+ });
35
+ }
36
+ export function Audio({ src, title, autoplay = false, loop = false, className }) {
37
+ return /*#__PURE__*/ _jsxs("div", {
38
+ className: cn('my-4', className),
39
+ children: [
40
+ title && /*#__PURE__*/ _jsxs("div", {
41
+ className: "flex items-center gap-2 mb-2",
42
+ children: [
43
+ /*#__PURE__*/ _jsx(FileAudio, {
44
+ className: "h-5 w-5 text-primary",
45
+ weight: "fill"
46
+ }),
47
+ /*#__PURE__*/ _jsx("span", {
48
+ className: "text-sm font-medium",
49
+ children: title
50
+ })
51
+ ]
52
+ }),
53
+ /*#__PURE__*/ _jsx("div", {
54
+ className: "rounded-lg border border-border bg-muted p-4",
55
+ children: /*#__PURE__*/ _jsx("audio", {
56
+ src: src,
57
+ controls: true,
58
+ autoPlay: autoplay,
59
+ loop: loop,
60
+ className: "w-full",
61
+ children: "Your browser does not support the audio element."
62
+ })
63
+ })
64
+ ]
65
+ });
66
+ }
67
+ export function Download({ src, label, filename, className }) {
68
+ const displayLabel = label || 'Download File';
69
+ const downloadName = filename || src.split('/').pop() || 'download';
70
+ return /*#__PURE__*/ _jsxs("a", {
71
+ href: src,
72
+ download: downloadName,
73
+ className: cn('inline-flex items-center gap-2 px-4 py-2 rounded-lg', 'bg-primary text-primary-foreground hover:bg-primary/90', 'text-sm font-medium transition-colors', 'no-underline', className),
74
+ children: [
75
+ /*#__PURE__*/ _jsx(DownloadSimple, {
76
+ className: "h-4 w-4",
77
+ weight: "bold"
78
+ }),
79
+ displayLabel
80
+ ]
81
+ });
82
+ }
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React from 'react';
4
+ import { cn } from '@/lib/utils';
5
+ export function Frame({ children, caption, className }) {
6
+ return /*#__PURE__*/ _jsxs("figure", {
7
+ className: cn('my-6', className),
8
+ children: [
9
+ /*#__PURE__*/ _jsx("div", {
10
+ className: "overflow-hidden rounded-lg border border-border bg-muted/30",
11
+ children: /*#__PURE__*/ _jsx("div", {
12
+ className: "[&>img]:m-0 [&>img]:w-full [&>img]:h-auto",
13
+ children: children
14
+ })
15
+ }),
16
+ caption && /*#__PURE__*/ _jsx("figcaption", {
17
+ className: "mt-2 text-center text-sm text-muted-foreground",
18
+ children: caption
19
+ })
20
+ ]
21
+ });
22
+ }
23
+ export function Columns({ children, cols = 2, className }) {
24
+ const gridCols = {
25
+ 1: 'grid-cols-1',
26
+ 2: 'grid-cols-1 md:grid-cols-2',
27
+ 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',
28
+ 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4'
29
+ };
30
+ return /*#__PURE__*/ _jsx("div", {
31
+ className: cn('grid gap-4 my-4', gridCols[cols], className),
32
+ children: children
33
+ });
34
+ }
35
+ export function Snippet({ file, className }) {
36
+ // In production, this would dynamically load the snippet content
37
+ // For now, we show a placeholder
38
+ return /*#__PURE__*/ _jsx("div", {
39
+ className: cn('my-4 p-4 rounded-lg border border-dashed border-border bg-muted/30', className),
40
+ children: /*#__PURE__*/ _jsxs("div", {
41
+ className: "text-sm text-muted-foreground",
42
+ children: [
43
+ "Snippet: ",
44
+ /*#__PURE__*/ _jsx("code", {
45
+ className: "text-xs bg-muted px-1 py-0.5 rounded",
46
+ children: file
47
+ })
48
+ ]
49
+ })
50
+ });
51
+ }
52
+ export function Latex({ children, className }) {
53
+ // In production, this would render LaTeX using KaTeX
54
+ // For now, we show the raw expression in a styled container
55
+ return /*#__PURE__*/ _jsx("span", {
56
+ className: cn('inline-block px-2 py-1 font-mono text-sm bg-muted rounded', className),
57
+ children: children
58
+ });
59
+ }