@brainfish-ai/devdoc 0.1.42 → 0.1.44

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 (398) hide show
  1. package/dist/cli/commands/create.js +2 -2
  2. package/dist/cli/commands/dev.js +19 -10
  3. package/package.json +3 -2
  4. package/renderer/app/api/assets/[...path]/route.js +108 -0
  5. package/renderer/app/api/assets/route.js +114 -0
  6. package/renderer/app/api/assets/upload/route.js +163 -0
  7. package/renderer/app/api/auth-schemes/route.js +58 -0
  8. package/renderer/app/api/chat/route.js +759 -0
  9. package/renderer/app/api/codegen/route.js +52 -0
  10. package/renderer/app/api/collections/route.js +706 -0
  11. package/renderer/app/api/debug/route.js +47 -0
  12. package/renderer/app/api/deploy/route.js +199 -0
  13. package/renderer/app/api/device/route.js +36 -0
  14. package/renderer/app/api/docs/route.js +205 -0
  15. package/renderer/app/api/domains/add/route.js +121 -0
  16. package/renderer/app/api/domains/lookup/route.js +43 -0
  17. package/renderer/app/api/domains/remove/route.js +89 -0
  18. package/renderer/app/api/domains/status/route.js +140 -0
  19. package/renderer/app/api/domains/verify/route.js +168 -0
  20. package/renderer/app/api/keys/regenerate/route.js +71 -0
  21. package/renderer/app/api/local-assets/[...path]/route.js +108 -0
  22. package/renderer/app/api/openapi-spec/route.js +73 -0
  23. package/renderer/app/api/projects/[slug]/route.js +129 -0
  24. package/renderer/app/api/projects/[slug]/stats/route.js +80 -0
  25. package/renderer/app/api/projects/register/route.js +176 -0
  26. package/renderer/app/api/proxy/route.js +139 -0
  27. package/renderer/app/api/proxy-stream/route.js +156 -0
  28. package/renderer/app/api/redirects/route.js +35 -0
  29. package/renderer/app/api/schema/route.js +85 -0
  30. package/renderer/app/api/subdomains/check/route.js +158 -0
  31. package/renderer/app/api/suggestions/route.js +195 -0
  32. package/renderer/app/globals.css +69 -0
  33. package/renderer/app/layout.js +47 -0
  34. package/renderer/app/llms-full.txt/route.js +266 -0
  35. package/renderer/app/llms.txt/route.js +228 -0
  36. package/renderer/app/page.js +12 -0
  37. package/renderer/app/robots.txt/route.js +66 -0
  38. package/renderer/app/sitemap.xml/route.js +155 -0
  39. package/renderer/components/docs/index.js +8 -0
  40. package/renderer/components/docs/mdx/accordion.js +113 -0
  41. package/renderer/components/docs/mdx/badge.js +72 -0
  42. package/renderer/components/docs/mdx/callouts.js +137 -0
  43. package/renderer/components/docs/mdx/cards.js +175 -0
  44. package/renderer/components/docs/mdx/changelog.js +100 -0
  45. package/renderer/components/docs/mdx/code-block.js +147 -0
  46. package/renderer/components/docs/mdx/code-group.js +287 -0
  47. package/renderer/components/docs/mdx/file-embeds.js +82 -0
  48. package/renderer/components/docs/mdx/frame.js +59 -0
  49. package/renderer/components/docs/mdx/highlight.js +90 -0
  50. package/renderer/components/docs/mdx/iframe.js +69 -0
  51. package/renderer/components/docs/mdx/image.js +135 -0
  52. package/renderer/components/docs/mdx/index.js +134 -0
  53. package/renderer/components/docs/mdx/landing.js +317 -0
  54. package/renderer/components/docs/mdx/mermaid.js +212 -0
  55. package/renderer/components/docs/mdx/param-field.js +112 -0
  56. package/renderer/components/docs/mdx/steps.js +74 -0
  57. package/renderer/components/docs/mdx/tabs.js +50 -0
  58. package/renderer/components/docs/mdx-renderer.js +77 -0
  59. package/renderer/components/docs/navigation/breadcrumbs.js +64 -0
  60. package/renderer/components/docs/navigation/index.js +6 -0
  61. package/renderer/components/docs/navigation/page-nav.js +57 -0
  62. package/renderer/components/docs/navigation/sidebar.js +375 -0
  63. package/renderer/components/docs/navigation/toc.js +89 -0
  64. package/renderer/components/docs/notice.js +77 -0
  65. package/renderer/components/docs-header.js +202 -0
  66. package/renderer/components/docs-viewer/agent/agent-chat.js +1831 -0
  67. package/renderer/components/docs-viewer/agent/agent-popup-button.js +99 -0
  68. package/renderer/components/docs-viewer/agent/cards/debug-context-card.js +107 -0
  69. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.js +57 -0
  70. package/renderer/components/docs-viewer/agent/cards/index.js +45 -0
  71. package/renderer/components/docs-viewer/agent/cards/response-options-card.js +154 -0
  72. package/renderer/components/docs-viewer/agent/cards/types.js +22 -0
  73. package/renderer/components/docs-viewer/agent/chat-message.js +2 -0
  74. package/renderer/components/docs-viewer/agent/index.js +7 -0
  75. package/renderer/components/docs-viewer/agent/messages/assistant-message.js +108 -0
  76. package/renderer/components/docs-viewer/agent/messages/chat-message.js +34 -0
  77. package/renderer/components/docs-viewer/agent/messages/index.js +6 -0
  78. package/renderer/components/docs-viewer/agent/messages/tool-call-display.js +1065 -0
  79. package/renderer/components/docs-viewer/agent/messages/types.js +2 -0
  80. package/renderer/components/docs-viewer/agent/messages/typing-indicator.js +26 -0
  81. package/renderer/components/docs-viewer/agent/messages/user-message.js +37 -0
  82. package/renderer/components/docs-viewer/code-editor/{index.tsx → index.js} +1 -1
  83. package/renderer/components/docs-viewer/code-editor/notes-mode.js +1338 -0
  84. package/renderer/components/docs-viewer/content/changelog-page.js +297 -0
  85. package/renderer/components/docs-viewer/content/content-router.js +182 -0
  86. package/renderer/components/docs-viewer/content/doc-page.js +290 -0
  87. package/renderer/components/docs-viewer/content/documentation-viewer.js +14 -0
  88. package/renderer/components/docs-viewer/content/index.js +31 -0
  89. package/renderer/components/docs-viewer/content/not-found-page.js +300 -0
  90. package/renderer/components/docs-viewer/content/request-details.js +528 -0
  91. package/renderer/components/docs-viewer/content/sections/auth.js +108 -0
  92. package/renderer/components/docs-viewer/content/sections/body.js +80 -0
  93. package/renderer/components/docs-viewer/content/sections/headers.js +64 -0
  94. package/renderer/components/docs-viewer/content/sections/overview.js +56 -0
  95. package/renderer/components/docs-viewer/content/sections/parameters.js +64 -0
  96. package/renderer/components/docs-viewer/content/sections/responses.js +91 -0
  97. package/renderer/components/docs-viewer/global-auth-modal.js +427 -0
  98. package/renderer/components/docs-viewer/index.js +1448 -0
  99. package/renderer/components/docs-viewer/playground/auth-editor.js +418 -0
  100. package/renderer/components/docs-viewer/playground/body-editor.js +240 -0
  101. package/renderer/components/docs-viewer/playground/code-editor.js +135 -0
  102. package/renderer/components/docs-viewer/playground/code-snippet.js +393 -0
  103. package/renderer/components/docs-viewer/playground/graphql-playground.js +936 -0
  104. package/renderer/components/docs-viewer/playground/index.js +682 -0
  105. package/renderer/components/docs-viewer/playground/key-value-editor.js +317 -0
  106. package/renderer/components/docs-viewer/playground/method-selector.js +65 -0
  107. package/renderer/components/docs-viewer/playground/request-builder.js +181 -0
  108. package/renderer/components/docs-viewer/playground/request-tabs.js +240 -0
  109. package/renderer/components/docs-viewer/playground/response-cards/idle-card.js +42 -0
  110. package/renderer/components/docs-viewer/playground/response-cards/index.js +72 -0
  111. package/renderer/components/docs-viewer/playground/response-cards/loading-card.js +24 -0
  112. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.js +28 -0
  113. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.js +308 -0
  114. package/renderer/components/docs-viewer/playground/response-cards/types.js +9 -0
  115. package/renderer/components/docs-viewer/playground/response-viewer.js +18 -0
  116. package/renderer/components/docs-viewer/search/index.js +2 -0
  117. package/renderer/components/docs-viewer/search/search-dialog.js +367 -0
  118. package/renderer/components/docs-viewer/search/use-search.js +89 -0
  119. package/renderer/components/docs-viewer/shared/markdown-renderer.js +423 -0
  120. package/renderer/components/docs-viewer/shared/method-badge.js +23 -0
  121. package/renderer/components/docs-viewer/shared/schema-viewer.js +321 -0
  122. package/renderer/components/docs-viewer/sidebar/collection-tree.js +222 -0
  123. package/renderer/components/docs-viewer/sidebar/endpoint-options.js +512 -0
  124. package/renderer/components/docs-viewer/sidebar/index.js +196 -0
  125. package/renderer/components/docs-viewer/sidebar/right-sidebar.js +159 -0
  126. package/renderer/components/docs-viewer/sidebar/sidebar-group.js +87 -0
  127. package/renderer/components/docs-viewer/sidebar/sidebar-item.js +172 -0
  128. package/renderer/components/docs-viewer/sidebar/sidebar-section.js +31 -0
  129. package/renderer/components/theme-provider.js +10 -0
  130. package/renderer/components/theme-toggle.js +86 -0
  131. package/renderer/components/ui/badge.js +29 -0
  132. package/renderer/components/ui/button.js +40 -0
  133. package/renderer/components/ui/dialog.js +50 -0
  134. package/renderer/components/ui/dropdown-menu.js +143 -0
  135. package/renderer/components/ui/input.js +12 -0
  136. package/renderer/components/ui/label.js +13 -0
  137. package/renderer/components/ui/navigation-menu.js +83 -0
  138. package/renderer/components/ui/select.js +116 -0
  139. package/renderer/components/ui/spinner.js +92 -0
  140. package/renderer/components/ui/tabs.js +34 -0
  141. package/renderer/components/ui/tooltip.js +43 -0
  142. package/renderer/hooks/use-code-copy.js +76 -0
  143. package/renderer/hooks/use-openapi-title.js +33 -0
  144. package/renderer/hooks/use-route-state.js +159 -0
  145. package/renderer/lib/api-docs/agent/index.js +4 -0
  146. package/renderer/lib/api-docs/agent/indexer.js +254 -0
  147. package/renderer/lib/api-docs/agent/spec-summary.js +227 -0
  148. package/renderer/lib/api-docs/agent/types.js +5 -0
  149. package/renderer/lib/api-docs/agent/use-suggestions.js +97 -0
  150. package/renderer/lib/api-docs/auth/auth-context.js +157 -0
  151. package/renderer/lib/api-docs/auth/auth-storage.js +66 -0
  152. package/renderer/lib/api-docs/auth/crypto.js +64 -0
  153. package/renderer/lib/api-docs/auth/index.js +3 -0
  154. package/renderer/lib/api-docs/code-editor/db.js +145 -0
  155. package/renderer/lib/api-docs/code-editor/hooks.js +254 -0
  156. package/renderer/lib/api-docs/code-editor/{index.ts → index.js} +3 -4
  157. package/renderer/lib/api-docs/code-editor/mode-context.js +126 -0
  158. package/renderer/lib/api-docs/code-editor/types.js +53 -0
  159. package/renderer/lib/api-docs/codegen/definitions.js +258 -0
  160. package/renderer/lib/api-docs/codegen/har.js +171 -0
  161. package/renderer/lib/api-docs/codegen/index.js +118 -0
  162. package/renderer/lib/api-docs/factories.js +136 -0
  163. package/renderer/lib/api-docs/{index.ts → index.js} +5 -10
  164. package/renderer/lib/api-docs/mobile-context.js +116 -0
  165. package/renderer/lib/api-docs/navigation-context.js +62 -0
  166. package/renderer/lib/api-docs/parsers/graphql/index.js +50 -0
  167. package/renderer/lib/api-docs/parsers/graphql/parser.js +350 -0
  168. package/renderer/lib/api-docs/parsers/graphql/transformer.js +215 -0
  169. package/renderer/lib/api-docs/parsers/graphql/types.js +46 -0
  170. package/renderer/lib/api-docs/parsers/openapi/dereferencer.js +43 -0
  171. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.js +486 -0
  172. package/renderer/lib/api-docs/parsers/openapi/extractors/body.js +295 -0
  173. package/renderer/lib/api-docs/parsers/openapi/extractors/index.js +132 -0
  174. package/renderer/lib/api-docs/parsers/openapi/index.js +127 -0
  175. package/renderer/lib/api-docs/parsers/openapi/transformer.js +192 -0
  176. package/renderer/lib/api-docs/parsers/openapi/validator.js +24 -0
  177. package/renderer/lib/api-docs/playground/context.js +65 -0
  178. package/renderer/lib/api-docs/playground/navigation-context.js +74 -0
  179. package/renderer/lib/api-docs/playground/request-builder.js +163 -0
  180. package/renderer/lib/api-docs/playground/request-runner.js +224 -0
  181. package/renderer/lib/api-docs/playground/types.js +5 -0
  182. package/renderer/lib/api-docs/types.js +23 -0
  183. package/renderer/lib/api-docs/utils.js +212 -0
  184. package/renderer/lib/cache.js +157 -0
  185. package/renderer/lib/docs/config/domain-schema.js +161 -0
  186. package/renderer/lib/docs/config/environment.js +38 -0
  187. package/renderer/lib/docs/config/index.js +6 -0
  188. package/renderer/lib/docs/config/loader.js +113 -0
  189. package/renderer/lib/docs/config/schema.js +281 -0
  190. package/renderer/lib/docs/index.js +8 -0
  191. package/renderer/lib/docs/mdx/compiler.js +131 -0
  192. package/renderer/lib/docs/mdx/frontmatter.js +73 -0
  193. package/renderer/lib/docs/mdx/index.js +10 -0
  194. package/renderer/lib/docs/mdx/remark-mermaid.js +63 -0
  195. package/renderer/lib/docs/navigation/generator.js +269 -0
  196. package/renderer/lib/docs/navigation/index.js +3 -0
  197. package/renderer/lib/docs/navigation/types.js +11 -0
  198. package/renderer/lib/docs-navigation-context.js +40 -0
  199. package/renderer/lib/docs-navigation.js +140 -0
  200. package/renderer/lib/multi-tenant/context.js +80 -0
  201. package/renderer/lib/storage/blob.js +767 -0
  202. package/renderer/lib/utils/icons.js +30 -0
  203. package/renderer/lib/utils.js +5 -0
  204. package/renderer/next.config.js +62 -0
  205. package/renderer/package.json +1 -0
  206. package/renderer/tsconfig.json +23 -5
  207. package/renderer/app/api/assets/[...path]/route.ts +0 -123
  208. package/renderer/app/api/assets/route.ts +0 -124
  209. package/renderer/app/api/assets/upload/route.ts +0 -177
  210. package/renderer/app/api/auth-schemes/route.ts +0 -77
  211. package/renderer/app/api/chat/route.ts +0 -858
  212. package/renderer/app/api/codegen/route.ts +0 -72
  213. package/renderer/app/api/collections/route.ts +0 -1002
  214. package/renderer/app/api/debug/route.ts +0 -53
  215. package/renderer/app/api/deploy/route.ts +0 -234
  216. package/renderer/app/api/device/route.ts +0 -42
  217. package/renderer/app/api/docs/route.ts +0 -201
  218. package/renderer/app/api/domains/add/route.ts +0 -132
  219. package/renderer/app/api/domains/lookup/route.ts +0 -43
  220. package/renderer/app/api/domains/remove/route.ts +0 -100
  221. package/renderer/app/api/domains/status/route.ts +0 -158
  222. package/renderer/app/api/domains/verify/route.ts +0 -181
  223. package/renderer/app/api/keys/regenerate/route.ts +0 -80
  224. package/renderer/app/api/local-assets/[...path]/route.ts +0 -122
  225. package/renderer/app/api/openapi-spec/route.ts +0 -151
  226. package/renderer/app/api/projects/[slug]/route.ts +0 -153
  227. package/renderer/app/api/projects/[slug]/stats/route.ts +0 -96
  228. package/renderer/app/api/projects/register/route.ts +0 -152
  229. package/renderer/app/api/proxy/route.ts +0 -149
  230. package/renderer/app/api/proxy-stream/route.ts +0 -168
  231. package/renderer/app/api/redirects/route.ts +0 -47
  232. package/renderer/app/api/schema/route.ts +0 -73
  233. package/renderer/app/api/subdomains/check/route.ts +0 -172
  234. package/renderer/app/api/suggestions/route.ts +0 -144
  235. package/renderer/app/layout.tsx +0 -54
  236. package/renderer/app/llms-full.txt/route.ts +0 -346
  237. package/renderer/app/llms.txt/route.ts +0 -279
  238. package/renderer/app/page.tsx +0 -14
  239. package/renderer/app/robots.txt/route.ts +0 -84
  240. package/renderer/app/sitemap.xml/route.ts +0 -199
  241. package/renderer/components/docs/index.ts +0 -12
  242. package/renderer/components/docs/mdx/accordion.tsx +0 -169
  243. package/renderer/components/docs/mdx/badge.tsx +0 -132
  244. package/renderer/components/docs/mdx/callouts.tsx +0 -154
  245. package/renderer/components/docs/mdx/cards.tsx +0 -241
  246. package/renderer/components/docs/mdx/changelog.tsx +0 -120
  247. package/renderer/components/docs/mdx/code-block.tsx +0 -186
  248. package/renderer/components/docs/mdx/code-group.tsx +0 -421
  249. package/renderer/components/docs/mdx/file-embeds.tsx +0 -105
  250. package/renderer/components/docs/mdx/frame.tsx +0 -112
  251. package/renderer/components/docs/mdx/highlight.tsx +0 -151
  252. package/renderer/components/docs/mdx/iframe.tsx +0 -134
  253. package/renderer/components/docs/mdx/image.tsx +0 -235
  254. package/renderer/components/docs/mdx/index.ts +0 -237
  255. package/renderer/components/docs/mdx/landing.tsx +0 -684
  256. package/renderer/components/docs/mdx/mermaid.tsx +0 -240
  257. package/renderer/components/docs/mdx/param-field.tsx +0 -200
  258. package/renderer/components/docs/mdx/steps.tsx +0 -113
  259. package/renderer/components/docs/mdx/tabs.tsx +0 -86
  260. package/renderer/components/docs/mdx-renderer.tsx +0 -100
  261. package/renderer/components/docs/navigation/breadcrumbs.tsx +0 -76
  262. package/renderer/components/docs/navigation/index.ts +0 -8
  263. package/renderer/components/docs/navigation/page-nav.tsx +0 -64
  264. package/renderer/components/docs/navigation/sidebar.tsx +0 -515
  265. package/renderer/components/docs/navigation/toc.tsx +0 -113
  266. package/renderer/components/docs/notice.tsx +0 -105
  267. package/renderer/components/docs-header.tsx +0 -278
  268. package/renderer/components/docs-viewer/agent/agent-chat.tsx +0 -2076
  269. package/renderer/components/docs-viewer/agent/cards/debug-context-card.tsx +0 -90
  270. package/renderer/components/docs-viewer/agent/cards/endpoint-context-card.tsx +0 -49
  271. package/renderer/components/docs-viewer/agent/cards/index.tsx +0 -50
  272. package/renderer/components/docs-viewer/agent/cards/response-options-card.tsx +0 -212
  273. package/renderer/components/docs-viewer/agent/cards/types.ts +0 -84
  274. package/renderer/components/docs-viewer/agent/chat-message.tsx +0 -17
  275. package/renderer/components/docs-viewer/agent/index.tsx +0 -6
  276. package/renderer/components/docs-viewer/agent/messages/assistant-message.tsx +0 -119
  277. package/renderer/components/docs-viewer/agent/messages/chat-message.tsx +0 -46
  278. package/renderer/components/docs-viewer/agent/messages/index.ts +0 -17
  279. package/renderer/components/docs-viewer/agent/messages/tool-call-display.tsx +0 -721
  280. package/renderer/components/docs-viewer/agent/messages/types.ts +0 -61
  281. package/renderer/components/docs-viewer/agent/messages/typing-indicator.tsx +0 -24
  282. package/renderer/components/docs-viewer/agent/messages/user-message.tsx +0 -51
  283. package/renderer/components/docs-viewer/code-editor/notes-mode.tsx +0 -1283
  284. package/renderer/components/docs-viewer/content/changelog-page.tsx +0 -331
  285. package/renderer/components/docs-viewer/content/doc-page.tsx +0 -367
  286. package/renderer/components/docs-viewer/content/documentation-viewer.tsx +0 -17
  287. package/renderer/components/docs-viewer/content/index.tsx +0 -29
  288. package/renderer/components/docs-viewer/content/not-found-page.tsx +0 -330
  289. package/renderer/components/docs-viewer/content/request-details.tsx +0 -330
  290. package/renderer/components/docs-viewer/content/sections/auth.tsx +0 -69
  291. package/renderer/components/docs-viewer/content/sections/body.tsx +0 -66
  292. package/renderer/components/docs-viewer/content/sections/headers.tsx +0 -43
  293. package/renderer/components/docs-viewer/content/sections/overview.tsx +0 -40
  294. package/renderer/components/docs-viewer/content/sections/parameters.tsx +0 -43
  295. package/renderer/components/docs-viewer/content/sections/responses.tsx +0 -87
  296. package/renderer/components/docs-viewer/global-auth-modal.tsx +0 -352
  297. package/renderer/components/docs-viewer/index.tsx +0 -1670
  298. package/renderer/components/docs-viewer/playground/auth-editor.tsx +0 -280
  299. package/renderer/components/docs-viewer/playground/body-editor.tsx +0 -221
  300. package/renderer/components/docs-viewer/playground/code-editor.tsx +0 -224
  301. package/renderer/components/docs-viewer/playground/code-snippet.tsx +0 -387
  302. package/renderer/components/docs-viewer/playground/graphql-playground.tsx +0 -745
  303. package/renderer/components/docs-viewer/playground/index.tsx +0 -671
  304. package/renderer/components/docs-viewer/playground/key-value-editor.tsx +0 -261
  305. package/renderer/components/docs-viewer/playground/method-selector.tsx +0 -60
  306. package/renderer/components/docs-viewer/playground/request-builder.tsx +0 -179
  307. package/renderer/components/docs-viewer/playground/request-tabs.tsx +0 -237
  308. package/renderer/components/docs-viewer/playground/response-cards/idle-card.tsx +0 -21
  309. package/renderer/components/docs-viewer/playground/response-cards/index.tsx +0 -93
  310. package/renderer/components/docs-viewer/playground/response-cards/loading-card.tsx +0 -16
  311. package/renderer/components/docs-viewer/playground/response-cards/network-error-card.tsx +0 -23
  312. package/renderer/components/docs-viewer/playground/response-cards/response-body-card.tsx +0 -268
  313. package/renderer/components/docs-viewer/playground/response-cards/types.ts +0 -82
  314. package/renderer/components/docs-viewer/playground/response-viewer.tsx +0 -43
  315. package/renderer/components/docs-viewer/search/index.ts +0 -2
  316. package/renderer/components/docs-viewer/search/search-dialog.tsx +0 -331
  317. package/renderer/components/docs-viewer/search/use-search.ts +0 -117
  318. package/renderer/components/docs-viewer/shared/markdown-renderer.tsx +0 -431
  319. package/renderer/components/docs-viewer/shared/method-badge.tsx +0 -41
  320. package/renderer/components/docs-viewer/shared/schema-viewer.tsx +0 -349
  321. package/renderer/components/docs-viewer/sidebar/collection-tree.tsx +0 -259
  322. package/renderer/components/docs-viewer/sidebar/endpoint-options.tsx +0 -316
  323. package/renderer/components/docs-viewer/sidebar/index.tsx +0 -282
  324. package/renderer/components/docs-viewer/sidebar/right-sidebar.tsx +0 -202
  325. package/renderer/components/docs-viewer/sidebar/sidebar-group.tsx +0 -118
  326. package/renderer/components/docs-viewer/sidebar/sidebar-item.tsx +0 -212
  327. package/renderer/components/docs-viewer/sidebar/sidebar-section.tsx +0 -38
  328. package/renderer/components/theme-provider.tsx +0 -11
  329. package/renderer/components/theme-toggle.tsx +0 -76
  330. package/renderer/components/ui/badge.tsx +0 -46
  331. package/renderer/components/ui/button.tsx +0 -59
  332. package/renderer/components/ui/dialog.tsx +0 -118
  333. package/renderer/components/ui/dropdown-menu.tsx +0 -257
  334. package/renderer/components/ui/input.tsx +0 -21
  335. package/renderer/components/ui/label.tsx +0 -24
  336. package/renderer/components/ui/navigation-menu.tsx +0 -168
  337. package/renderer/components/ui/select.tsx +0 -190
  338. package/renderer/components/ui/spinner.tsx +0 -114
  339. package/renderer/components/ui/tabs.tsx +0 -66
  340. package/renderer/components/ui/tooltip.tsx +0 -61
  341. package/renderer/hooks/use-code-copy.ts +0 -88
  342. package/renderer/hooks/use-openapi-title.ts +0 -44
  343. package/renderer/lib/api-docs/agent/index.ts +0 -6
  344. package/renderer/lib/api-docs/agent/indexer.ts +0 -323
  345. package/renderer/lib/api-docs/agent/spec-summary.ts +0 -335
  346. package/renderer/lib/api-docs/agent/types.ts +0 -116
  347. package/renderer/lib/api-docs/auth/auth-context.tsx +0 -225
  348. package/renderer/lib/api-docs/auth/auth-storage.ts +0 -87
  349. package/renderer/lib/api-docs/auth/crypto.ts +0 -89
  350. package/renderer/lib/api-docs/auth/index.ts +0 -4
  351. package/renderer/lib/api-docs/code-editor/db.ts +0 -164
  352. package/renderer/lib/api-docs/code-editor/hooks.ts +0 -266
  353. package/renderer/lib/api-docs/code-editor/mode-context.tsx +0 -207
  354. package/renderer/lib/api-docs/code-editor/types.ts +0 -105
  355. package/renderer/lib/api-docs/codegen/definitions.ts +0 -297
  356. package/renderer/lib/api-docs/codegen/har.ts +0 -251
  357. package/renderer/lib/api-docs/codegen/index.ts +0 -159
  358. package/renderer/lib/api-docs/factories.ts +0 -170
  359. package/renderer/lib/api-docs/mobile-context.tsx +0 -112
  360. package/renderer/lib/api-docs/navigation-context.tsx +0 -88
  361. package/renderer/lib/api-docs/parsers/graphql/README.md +0 -129
  362. package/renderer/lib/api-docs/parsers/graphql/index.ts +0 -91
  363. package/renderer/lib/api-docs/parsers/graphql/parser.ts +0 -491
  364. package/renderer/lib/api-docs/parsers/graphql/transformer.ts +0 -246
  365. package/renderer/lib/api-docs/parsers/graphql/types.ts +0 -283
  366. package/renderer/lib/api-docs/parsers/openapi/README.md +0 -32
  367. package/renderer/lib/api-docs/parsers/openapi/dereferencer.ts +0 -60
  368. package/renderer/lib/api-docs/parsers/openapi/extractors/auth.ts +0 -574
  369. package/renderer/lib/api-docs/parsers/openapi/extractors/body.ts +0 -403
  370. package/renderer/lib/api-docs/parsers/openapi/extractors/index.ts +0 -232
  371. package/renderer/lib/api-docs/parsers/openapi/index.ts +0 -171
  372. package/renderer/lib/api-docs/parsers/openapi/transformer.ts +0 -278
  373. package/renderer/lib/api-docs/parsers/openapi/validator.ts +0 -31
  374. package/renderer/lib/api-docs/playground/context.tsx +0 -107
  375. package/renderer/lib/api-docs/playground/navigation-context.tsx +0 -124
  376. package/renderer/lib/api-docs/playground/request-builder.ts +0 -223
  377. package/renderer/lib/api-docs/playground/request-runner.ts +0 -282
  378. package/renderer/lib/api-docs/playground/types.ts +0 -35
  379. package/renderer/lib/api-docs/types.ts +0 -269
  380. package/renderer/lib/api-docs/utils.ts +0 -311
  381. package/renderer/lib/cache.ts +0 -193
  382. package/renderer/lib/docs/config/domain-schema.ts +0 -260
  383. package/renderer/lib/docs/config/index.ts +0 -43
  384. package/renderer/lib/docs/config/loader.ts +0 -142
  385. package/renderer/lib/docs/config/schema.ts +0 -308
  386. package/renderer/lib/docs/index.ts +0 -12
  387. package/renderer/lib/docs/mdx/compiler.ts +0 -176
  388. package/renderer/lib/docs/mdx/frontmatter.ts +0 -91
  389. package/renderer/lib/docs/mdx/index.ts +0 -26
  390. package/renderer/lib/docs/navigation/generator.ts +0 -348
  391. package/renderer/lib/docs/navigation/index.ts +0 -12
  392. package/renderer/lib/docs/navigation/types.ts +0 -123
  393. package/renderer/lib/docs-navigation-context.tsx +0 -80
  394. package/renderer/lib/multi-tenant/context.ts +0 -105
  395. package/renderer/lib/storage/blob.ts +0 -1083
  396. package/renderer/lib/utils/icons.ts +0 -48
  397. package/renderer/lib/utils.ts +0 -6
  398. package/renderer/next.config.ts +0 -76
@@ -0,0 +1,375 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { useState, useMemo } from 'react';
4
+ import Link from 'next/link';
5
+ import { usePathname } from 'next/navigation';
6
+ import { cn } from '@/lib/utils';
7
+ import { MagnifyingGlass, CaretRight, CaretDown, ArrowSquareOut, X } from '@phosphor-icons/react';
8
+ import { Input } from '@/components/ui/input';
9
+ import { Button } from '@/components/ui/button';
10
+ import * as PhosphorIcons from '@phosphor-icons/react';
11
+ /**
12
+ * Docs Sidebar Navigation Component
13
+ *
14
+ * Matches the API docs sidebar styling for visual consistency
15
+ */ // Dynamic icon resolver
16
+ function getIcon(iconName) {
17
+ if (!iconName) return null;
18
+ const pascalCase = iconName.split(/[-_]/).map((word)=>word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
19
+ const Icon = PhosphorIcons[pascalCase];
20
+ return Icon || null;
21
+ }
22
+ // Helper to check if item is a NavItem (has href)
23
+ function isNavItem(item) {
24
+ return 'href' in item && typeof item.href === 'string';
25
+ }
26
+ // Recursively check if any item matches the path
27
+ function hasMatchingItem(items, path) {
28
+ for (const item of items){
29
+ if (isNavItem(item)) {
30
+ if (item.href === path || path.startsWith(item.href + '/')) {
31
+ return true;
32
+ }
33
+ }
34
+ if ('items' in item && Array.isArray(item.items)) {
35
+ if (hasMatchingItem(item.items, path)) {
36
+ return true;
37
+ }
38
+ }
39
+ }
40
+ return false;
41
+ }
42
+ // Filter navigation based on search query
43
+ function filterNavigation(navigation, query) {
44
+ if (!query.trim()) return navigation;
45
+ const lowerQuery = query.toLowerCase();
46
+ const filterItems = (items)=>{
47
+ return items.reduce((acc, item)=>{
48
+ if (isNavItem(item)) {
49
+ if (item.title.toLowerCase().includes(lowerQuery)) {
50
+ acc.push(item);
51
+ }
52
+ } else {
53
+ // It's a NavGroup
54
+ const filteredNestedItems = filterItems(item.items);
55
+ if (filteredNestedItems.length > 0 || item.title.toLowerCase().includes(lowerQuery)) {
56
+ acc.push({
57
+ ...item,
58
+ items: filteredNestedItems.length > 0 ? filteredNestedItems : item.items
59
+ });
60
+ }
61
+ }
62
+ return acc;
63
+ }, []);
64
+ };
65
+ const filterGroups = (groups)=>{
66
+ return groups.reduce((acc, group)=>{
67
+ const filteredItems = filterItems(group.items);
68
+ if (filteredItems.length > 0 || group.title.toLowerCase().includes(lowerQuery)) {
69
+ acc.push({
70
+ ...group,
71
+ items: filteredItems.length > 0 ? filteredItems : group.items
72
+ });
73
+ }
74
+ return acc;
75
+ }, []);
76
+ };
77
+ return {
78
+ tabs: navigation.tabs?.map((tab)=>({
79
+ ...tab,
80
+ groups: filterGroups(tab.groups)
81
+ })).filter((tab)=>tab.groups.length > 0),
82
+ groups: navigation.groups ? filterGroups(navigation.groups) : undefined,
83
+ anchors: navigation.anchors
84
+ };
85
+ }
86
+ export function DocsSidebar({ navigation, siteName = 'Documentation', className, isMobile = false, isOpen = true, onClose }) {
87
+ const pathname = usePathname();
88
+ const [searchQuery, setSearchQuery] = useState('');
89
+ const [activeTab, setActiveTab] = useState(navigation.tabs?.[0]?.slug || '');
90
+ // Filter navigation based on search
91
+ const filteredNav = useMemo(()=>filterNavigation(navigation, searchQuery), [
92
+ navigation,
93
+ searchQuery
94
+ ]);
95
+ // Find active tab from current path
96
+ React.useEffect(()=>{
97
+ if (navigation.tabs) {
98
+ for (const tab of navigation.tabs){
99
+ for (const group of tab.groups){
100
+ if (hasMatchingItem(group.items, pathname)) {
101
+ setActiveTab(tab.slug);
102
+ return;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }, [
108
+ pathname,
109
+ navigation.tabs
110
+ ]);
111
+ const currentTabData = filteredNav.tabs?.find((t)=>t.slug === activeTab);
112
+ const groups = currentTabData?.groups || filteredNav.groups || [];
113
+ return /*#__PURE__*/ _jsxs(_Fragment, {
114
+ children: [
115
+ isMobile && isOpen && /*#__PURE__*/ _jsx("div", {
116
+ className: "fixed inset-0 bg-black/50 z-[55] lg:hidden",
117
+ onClick: onClose
118
+ }),
119
+ /*#__PURE__*/ _jsxs("aside", {
120
+ className: cn("flex flex-col border-r bg-sidebar border-sidebar-border overflow-hidden", // Desktop: always visible, fixed width
121
+ "lg:relative lg:w-72 lg:h-full lg:z-auto", // Mobile: drawer behavior - z-[60] to appear above header (z-50)
122
+ "fixed inset-y-0 left-0 z-[60] w-[280px] h-full", "transform transition-transform duration-300 ease-in-out", "lg:transform-none lg:translate-x-0", isMobile && !isOpen && "-translate-x-full", isMobile && isOpen && "translate-x-0", className),
123
+ children: [
124
+ /*#__PURE__*/ _jsxs("div", {
125
+ className: "px-4 h-[41px] flex items-center justify-between border-b border-sidebar-border shrink-0",
126
+ children: [
127
+ /*#__PURE__*/ _jsx("h2", {
128
+ className: "text-sm font-semibold text-sidebar-foreground truncate",
129
+ children: siteName
130
+ }),
131
+ isMobile && /*#__PURE__*/ _jsx(Button, {
132
+ variant: "ghost",
133
+ size: "icon",
134
+ onClick: onClose,
135
+ className: "h-7 w-7 lg:hidden",
136
+ children: /*#__PURE__*/ _jsx(X, {
137
+ className: "h-4 w-4",
138
+ weight: "bold"
139
+ })
140
+ })
141
+ ]
142
+ }),
143
+ /*#__PURE__*/ _jsx("div", {
144
+ className: "px-3 py-2 border-b border-sidebar-border shrink-0",
145
+ children: /*#__PURE__*/ _jsxs("div", {
146
+ className: "relative",
147
+ children: [
148
+ /*#__PURE__*/ _jsx(MagnifyingGlass, {
149
+ className: "absolute left-2.5 top-1/2 transform -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground/60"
150
+ }),
151
+ /*#__PURE__*/ _jsx(Input, {
152
+ type: "text",
153
+ placeholder: "Search...",
154
+ value: searchQuery,
155
+ onChange: (e)=>setSearchQuery(e.target.value),
156
+ className: "w-full pl-8 h-8 text-sm bg-muted/40 border-0 focus-visible:ring-1 focus-visible:ring-border placeholder:text-muted-foreground/50"
157
+ }),
158
+ searchQuery && /*#__PURE__*/ _jsx("button", {
159
+ onClick: ()=>setSearchQuery(''),
160
+ className: "absolute right-2 top-1/2 transform -translate-y-1/2 text-muted-foreground/60 hover:text-muted-foreground",
161
+ children: /*#__PURE__*/ _jsx("span", {
162
+ className: "text-xs",
163
+ children: "✕"
164
+ })
165
+ })
166
+ ]
167
+ })
168
+ }),
169
+ filteredNav.tabs && filteredNav.tabs.length > 1 && /*#__PURE__*/ _jsx("div", {
170
+ className: "flex border-b border-sidebar-border px-2 py-1 gap-1 shrink-0",
171
+ children: filteredNav.tabs.map((tab)=>/*#__PURE__*/ _jsx("button", {
172
+ onClick: ()=>setActiveTab(tab.slug),
173
+ className: cn('px-3 py-1.5 text-xs font-medium rounded-md transition-colors', activeTab === tab.slug ? 'bg-sidebar-primary text-sidebar-primary-foreground' : 'text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent/50'),
174
+ children: tab.title
175
+ }, tab.slug))
176
+ }),
177
+ /*#__PURE__*/ _jsx("div", {
178
+ className: "flex-1 overflow-y-auto overflow-x-hidden",
179
+ children: groups.map((group, index)=>/*#__PURE__*/ _jsx(DocsSidebarSection, {
180
+ title: group.title,
181
+ className: index > 0 ? 'border-t border-sidebar-border' : '',
182
+ children: group.items.map((item, itemIndex)=>{
183
+ // Handle nested NavGroup
184
+ if (!isNavItem(item)) {
185
+ return /*#__PURE__*/ _jsx(DocsSidebarNestedGroup, {
186
+ group: item,
187
+ pathname: pathname,
188
+ onItemSelect: ()=>isMobile && onClose?.()
189
+ }, `group-${item.title}-${itemIndex}`);
190
+ }
191
+ return /*#__PURE__*/ _jsx(DocsSidebarItem, {
192
+ item: item,
193
+ selected: item.href === pathname,
194
+ onSelect: ()=>isMobile && onClose?.()
195
+ }, `${item.href}-${itemIndex}`);
196
+ })
197
+ }, `${group.title}-${index}`))
198
+ }),
199
+ filteredNav.anchors && filteredNav.anchors.length > 0 && /*#__PURE__*/ _jsx("div", {
200
+ className: "border-t border-sidebar-border px-2 py-2 shrink-0",
201
+ children: filteredNav.anchors.map((anchor, index)=>/*#__PURE__*/ _jsx(DocsSidebarItem, {
202
+ item: anchor,
203
+ selected: false
204
+ }, `anchor-${index}`))
205
+ })
206
+ ]
207
+ })
208
+ ]
209
+ });
210
+ }
211
+ function DocsSidebarSection({ title, children, className }) {
212
+ return /*#__PURE__*/ _jsxs("div", {
213
+ className: cn('flex flex-col', className),
214
+ children: [
215
+ /*#__PURE__*/ _jsx("div", {
216
+ className: "px-4 py-2.5",
217
+ children: /*#__PURE__*/ _jsx("span", {
218
+ className: "text-[11px] font-semibold text-sidebar-foreground/60 uppercase tracking-wider",
219
+ children: title
220
+ })
221
+ }),
222
+ /*#__PURE__*/ _jsx("ul", {
223
+ className: "flex flex-col gap-px px-2 pb-2",
224
+ children: children
225
+ })
226
+ ]
227
+ });
228
+ }
229
+ function DocsSidebarNestedGroup({ group, pathname, onItemSelect }) {
230
+ const hasActiveChild = hasMatchingItem(group.items, pathname);
231
+ const [isOpen, setIsOpen] = React.useState(hasActiveChild);
232
+ return /*#__PURE__*/ _jsxs("li", {
233
+ className: "mb-1",
234
+ children: [
235
+ /*#__PURE__*/ _jsxs("button", {
236
+ type: "button",
237
+ onClick: ()=>setIsOpen(!isOpen),
238
+ className: cn("flex items-center justify-between w-full py-1.5 px-2 text-sm rounded-md transition-colors", hasActiveChild ? "text-sidebar-foreground font-medium" : "text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent/50"),
239
+ children: [
240
+ /*#__PURE__*/ _jsxs("span", {
241
+ className: "flex items-center gap-2",
242
+ children: [
243
+ group.icon && (()=>{
244
+ const Icon = getIcon(group.icon);
245
+ return Icon ? /*#__PURE__*/ _jsx(Icon, {
246
+ className: "w-4 h-4"
247
+ }) : null;
248
+ })(),
249
+ group.title
250
+ ]
251
+ }),
252
+ /*#__PURE__*/ _jsx(CaretRight, {
253
+ className: cn("w-4 h-4 transition-transform", isOpen && "rotate-90")
254
+ })
255
+ ]
256
+ }),
257
+ isOpen && /*#__PURE__*/ _jsx("ul", {
258
+ className: "ml-4 pl-2 border-l border-sidebar-border space-y-0.5 mt-1",
259
+ children: group.items.map((item, idx)=>{
260
+ if (!isNavItem(item)) {
261
+ return /*#__PURE__*/ _jsx(DocsSidebarNestedGroup, {
262
+ group: item,
263
+ pathname: pathname,
264
+ onItemSelect: onItemSelect
265
+ }, `nested-group-${item.title}-${idx}`);
266
+ }
267
+ return /*#__PURE__*/ _jsx(DocsSidebarItem, {
268
+ item: item,
269
+ selected: item.href === pathname,
270
+ onSelect: onItemSelect
271
+ }, `${item.href}-${idx}`);
272
+ })
273
+ })
274
+ ]
275
+ });
276
+ }
277
+ function DocsSidebarItem({ item, selected, indent = 0, onSelect }) {
278
+ const Icon = item.icon ? getIcon(item.icon) : null;
279
+ const content = /*#__PURE__*/ _jsxs(_Fragment, {
280
+ children: [
281
+ Icon && /*#__PURE__*/ _jsx(Icon, {
282
+ className: cn('h-4 w-4 shrink-0 mr-2', selected ? 'text-sidebar-primary-foreground' : 'text-sidebar-foreground/60'),
283
+ weight: selected ? 'fill' : 'regular'
284
+ }),
285
+ /*#__PURE__*/ _jsx("span", {
286
+ className: "flex-1 truncate",
287
+ children: item.title
288
+ }),
289
+ item.external && /*#__PURE__*/ _jsx(ArrowSquareOut, {
290
+ className: "h-3 w-3 shrink-0 ml-1 text-sidebar-foreground/40"
291
+ }),
292
+ item.badge && /*#__PURE__*/ _jsx("span", {
293
+ className: "ml-2 px-1.5 py-0.5 text-[10px] font-medium rounded bg-sidebar-primary/10 text-sidebar-primary",
294
+ children: item.badge
295
+ }),
296
+ item.deprecated && /*#__PURE__*/ _jsx("span", {
297
+ className: "ml-2 px-1.5 py-0.5 text-[10px] font-medium rounded bg-amber-500/10 text-amber-600 dark:text-amber-400",
298
+ children: "deprecated"
299
+ })
300
+ ]
301
+ });
302
+ const className = cn('group/button flex items-center rounded-sm px-3 py-1.5 w-full text-left', 'text-sm leading-5 transition-colors duration-150', selected ? 'bg-sidebar-primary text-sidebar-primary-foreground font-medium' : 'text-sidebar-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-accent-foreground');
303
+ const style = indent > 0 ? {
304
+ paddingLeft: `${indent * 12 + 12}px`
305
+ } : undefined;
306
+ if (item.external) {
307
+ return /*#__PURE__*/ _jsx("li", {
308
+ className: "flex flex-col",
309
+ children: /*#__PURE__*/ _jsx("a", {
310
+ href: item.href,
311
+ target: "_blank",
312
+ rel: "noopener noreferrer",
313
+ className: className,
314
+ style: style,
315
+ children: content
316
+ })
317
+ });
318
+ }
319
+ return /*#__PURE__*/ _jsx("li", {
320
+ className: "flex flex-col",
321
+ children: /*#__PURE__*/ _jsx(Link, {
322
+ href: item.href,
323
+ className: className,
324
+ style: style,
325
+ onClick: onSelect,
326
+ children: content
327
+ })
328
+ });
329
+ }
330
+ export function DocsSidebarGroup({ title, items, icon, defaultOpen = false, currentPath, onItemSelect }) {
331
+ const hasActiveItem = items.some((item)=>item.href === currentPath);
332
+ const [isOpen, setIsOpen] = useState(defaultOpen || hasActiveItem);
333
+ const Icon = icon ? getIcon(icon) : null;
334
+ return /*#__PURE__*/ _jsxs("li", {
335
+ className: "flex flex-col gap-px",
336
+ children: [
337
+ /*#__PURE__*/ _jsxs("button", {
338
+ type: "button",
339
+ "aria-expanded": isOpen,
340
+ onClick: ()=>setIsOpen(!isOpen),
341
+ className: cn('group/button flex items-center rounded-sm px-3 py-1.5 w-full text-left', 'text-sm leading-5 transition-colors duration-150', 'text-sidebar-foreground hover:bg-sidebar-accent/50 hover:text-sidebar-accent-foreground'),
342
+ children: [
343
+ /*#__PURE__*/ _jsx("span", {
344
+ className: "mr-1.5 text-sidebar-foreground/60 group-hover/button:text-sidebar-foreground",
345
+ children: isOpen ? /*#__PURE__*/ _jsx(CaretDown, {
346
+ weight: "bold",
347
+ className: "h-3.5 w-3.5"
348
+ }) : /*#__PURE__*/ _jsx(CaretRight, {
349
+ weight: "bold",
350
+ className: "h-3.5 w-3.5"
351
+ })
352
+ }),
353
+ Icon && /*#__PURE__*/ _jsx(Icon, {
354
+ className: "h-4 w-4 mr-2 text-sidebar-foreground/60",
355
+ weight: "regular"
356
+ }),
357
+ /*#__PURE__*/ _jsx("span", {
358
+ className: "flex-1 truncate",
359
+ children: title
360
+ })
361
+ ]
362
+ }),
363
+ isOpen && /*#__PURE__*/ _jsx("ul", {
364
+ className: "flex flex-col gap-px",
365
+ children: items.map((item, index)=>/*#__PURE__*/ _jsx(DocsSidebarItem, {
366
+ item: item,
367
+ selected: item.href === currentPath,
368
+ indent: 1,
369
+ onSelect: onItemSelect
370
+ }, `${item.href}-${index}`))
371
+ })
372
+ ]
373
+ });
374
+ }
375
+ export { DocsSidebarSection, DocsSidebarItem };
@@ -0,0 +1,89 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useEffect, useState } from 'react';
4
+ import { cn } from '@/lib/utils';
5
+ export function TableOfContents({ headings, className }) {
6
+ const [activeId, setActiveId] = useState('');
7
+ // Track which heading is currently in view
8
+ useEffect(()=>{
9
+ if (headings.length === 0) return;
10
+ const observer = new IntersectionObserver((entries)=>{
11
+ entries.forEach((entry)=>{
12
+ if (entry.isIntersecting) {
13
+ setActiveId(entry.target.id);
14
+ }
15
+ });
16
+ }, {
17
+ rootMargin: '-80px 0px -80% 0px',
18
+ threshold: 0
19
+ });
20
+ // Observe all headings
21
+ headings.forEach((heading)=>{
22
+ const element = document.getElementById(heading.id);
23
+ if (element) {
24
+ observer.observe(element);
25
+ }
26
+ });
27
+ return ()=>observer.disconnect();
28
+ }, [
29
+ headings
30
+ ]);
31
+ if (headings.length === 0) return null;
32
+ // Filter to only show h2 and h3
33
+ const filteredHeadings = headings.filter((h)=>h.level >= 2 && h.level <= 3);
34
+ if (filteredHeadings.length === 0) return null;
35
+ return /*#__PURE__*/ _jsxs("nav", {
36
+ className: cn('text-sm', className),
37
+ children: [
38
+ /*#__PURE__*/ _jsx("h4", {
39
+ className: "font-semibold text-foreground mb-3",
40
+ children: "On this page"
41
+ }),
42
+ /*#__PURE__*/ _jsx("ul", {
43
+ className: "space-y-2",
44
+ children: filteredHeadings.map((heading)=>/*#__PURE__*/ _jsx("li", {
45
+ style: {
46
+ paddingLeft: `${(heading.level - 2) * 12}px`
47
+ },
48
+ children: /*#__PURE__*/ _jsx("a", {
49
+ href: `#${heading.id}`,
50
+ onClick: (e)=>{
51
+ e.preventDefault();
52
+ const element = document.getElementById(heading.id);
53
+ if (element) {
54
+ element.scrollIntoView({
55
+ behavior: 'smooth'
56
+ });
57
+ // Update URL without scroll
58
+ window.history.pushState(null, '', `#${heading.id}`);
59
+ setActiveId(heading.id);
60
+ }
61
+ },
62
+ className: cn('block py-1 transition-colors hover:text-foreground', activeId === heading.id ? 'text-primary font-medium' : 'text-muted-foreground'),
63
+ children: heading.title
64
+ })
65
+ }, heading.id))
66
+ })
67
+ ]
68
+ });
69
+ }
70
+ /**
71
+ * Extract headings from rendered content
72
+ * Call this on the client after MDX renders
73
+ */ export function extractHeadingsFromDOM() {
74
+ const headings = [];
75
+ const elements = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
76
+ elements.forEach((el)=>{
77
+ const id = el.id;
78
+ const title = el.textContent || '';
79
+ const level = parseInt(el.tagName[1], 10);
80
+ if (id && title) {
81
+ headings.push({
82
+ id,
83
+ title,
84
+ level
85
+ });
86
+ }
87
+ });
88
+ return headings;
89
+ }
@@ -0,0 +1,77 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useState, useEffect } from 'react';
4
+ import { X } from '@phosphor-icons/react';
5
+ import { cn } from '@/lib/utils';
6
+ import ReactMarkdown from 'react-markdown';
7
+ const STORAGE_PREFIX = 'docs-notice-dismissed-';
8
+ export function Notice({ config, storageKey = 'default', className }) {
9
+ // For non-dismissible notices, show immediately
10
+ // For dismissible notices, start hidden until we check storage
11
+ const [isDismissed, setIsDismissed] = useState(config.dismissible ? true : false);
12
+ const [isLoaded, setIsLoaded] = useState(!config.dismissible);
13
+ const fullStorageKey = `${STORAGE_PREFIX}${storageKey}`;
14
+ useEffect(()=>{
15
+ if (!config.dismissible) return;
16
+ // Check if notice was previously dismissed
17
+ const dismissed = sessionStorage.getItem(fullStorageKey);
18
+ setIsDismissed(dismissed === 'true');
19
+ setIsLoaded(true);
20
+ }, [
21
+ fullStorageKey,
22
+ config.dismissible
23
+ ]);
24
+ const handleDismiss = ()=>{
25
+ sessionStorage.setItem(fullStorageKey, 'true');
26
+ setIsDismissed(true);
27
+ };
28
+ // Don't render until we've checked storage (for dismissible notices)
29
+ if (!isLoaded) return null;
30
+ // Don't render if dismissed
31
+ if (isDismissed && config.dismissible) return null;
32
+ // Don't render if no content
33
+ if (!config.content) return null;
34
+ // Default to a neutral dark color that works with any theme
35
+ const defaultBackground = '#1e293b' // slate-800
36
+ ;
37
+ const backgroundStyle = {
38
+ backgroundColor: config.background || defaultBackground
39
+ };
40
+ return /*#__PURE__*/ _jsx("div", {
41
+ className: cn('docs-notice sticky top-0 z-[100] w-full text-white', 'px-4 py-2.5 text-sm text-center', 'shadow-[0_4px_6px_-1px_rgba(0,0,0,0.3)]', className),
42
+ style: backgroundStyle,
43
+ children: /*#__PURE__*/ _jsxs("div", {
44
+ className: "docs-notice-content max-w-screen-xl mx-auto flex items-center justify-center gap-2",
45
+ children: [
46
+ /*#__PURE__*/ _jsx("div", {
47
+ className: "docs-notice-text flex-1 [&_a]:underline [&_a]:font-medium [&_a]:hover:opacity-80 [&_p]:m-0 [&_p]:inline",
48
+ children: /*#__PURE__*/ _jsx(ReactMarkdown, {
49
+ components: {
50
+ // Render links properly
51
+ a: ({ href, children })=>/*#__PURE__*/ _jsx("a", {
52
+ href: href,
53
+ className: "underline font-medium hover:opacity-80",
54
+ children: children
55
+ }),
56
+ // Render paragraphs inline
57
+ p: ({ children })=>/*#__PURE__*/ _jsx("span", {
58
+ children: children
59
+ })
60
+ },
61
+ children: config.content
62
+ })
63
+ }),
64
+ config.dismissible && /*#__PURE__*/ _jsx("button", {
65
+ type: "button",
66
+ onClick: handleDismiss,
67
+ className: cn('docs-notice-dismiss flex-shrink-0 p-1 rounded-sm', 'hover:bg-white/20 transition-colors', 'focus:outline-none focus-visible:ring-2 focus-visible:ring-white/50'),
68
+ "aria-label": "Dismiss notice",
69
+ children: /*#__PURE__*/ _jsx(X, {
70
+ className: "h-4 w-4",
71
+ weight: "bold"
72
+ })
73
+ })
74
+ ]
75
+ })
76
+ });
77
+ }