vocs 2.0.17 → 2.1.2

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 (306) hide show
  1. package/dist/config.d.ts +1 -0
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +1 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/globals.d.ts +16 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/internal/config.d.ts +28 -0
  11. package/dist/internal/config.d.ts.map +1 -1
  12. package/dist/internal/config.js +10 -2
  13. package/dist/internal/config.js.map +1 -1
  14. package/dist/internal/llms.d.ts +21 -2
  15. package/dist/internal/llms.d.ts.map +1 -1
  16. package/dist/internal/llms.js +41 -1
  17. package/dist/internal/llms.js.map +1 -1
  18. package/dist/internal/markdown-negotiation.d.ts +36 -0
  19. package/dist/internal/markdown-negotiation.d.ts.map +1 -0
  20. package/dist/internal/markdown-negotiation.js +81 -0
  21. package/dist/internal/markdown-negotiation.js.map +1 -0
  22. package/dist/internal/markdown.d.ts.map +1 -1
  23. package/dist/internal/markdown.js +5 -0
  24. package/dist/internal/markdown.js.map +1 -1
  25. package/dist/internal/openapi/anchors.d.ts +25 -0
  26. package/dist/internal/openapi/anchors.d.ts.map +1 -0
  27. package/dist/internal/openapi/anchors.js +37 -0
  28. package/dist/internal/openapi/anchors.js.map +1 -0
  29. package/dist/internal/openapi/app.d.ts +89 -0
  30. package/dist/internal/openapi/app.d.ts.map +1 -0
  31. package/dist/internal/openapi/app.js +62 -0
  32. package/dist/internal/openapi/app.js.map +1 -0
  33. package/dist/internal/openapi/index.d.ts +8 -0
  34. package/dist/internal/openapi/index.d.ts.map +1 -0
  35. package/dist/internal/openapi/index.js +5 -0
  36. package/dist/internal/openapi/index.js.map +1 -0
  37. package/dist/internal/openapi/markdown.d.ts +42 -0
  38. package/dist/internal/openapi/markdown.d.ts.map +1 -0
  39. package/dist/internal/openapi/markdown.js +235 -0
  40. package/dist/internal/openapi/markdown.js.map +1 -0
  41. package/dist/internal/openapi/openapi.d.ts +187 -0
  42. package/dist/internal/openapi/openapi.d.ts.map +1 -0
  43. package/dist/internal/openapi/openapi.js +44 -0
  44. package/dist/internal/openapi/openapi.js.map +1 -0
  45. package/dist/internal/openapi/openrpc.d.ts +90 -0
  46. package/dist/internal/openapi/openrpc.d.ts.map +1 -0
  47. package/dist/internal/openapi/openrpc.js +213 -0
  48. package/dist/internal/openapi/openrpc.js.map +1 -0
  49. package/dist/internal/openapi/parser.d.ts +181 -0
  50. package/dist/internal/openapi/parser.d.ts.map +1 -0
  51. package/dist/internal/openapi/parser.js +329 -0
  52. package/dist/internal/openapi/parser.js.map +1 -0
  53. package/dist/internal/openapi/registry.d.ts +36 -0
  54. package/dist/internal/openapi/registry.d.ts.map +1 -0
  55. package/dist/internal/openapi/registry.js +79 -0
  56. package/dist/internal/openapi/registry.js.map +1 -0
  57. package/dist/internal/openapi/sample.d.ts +115 -0
  58. package/dist/internal/openapi/sample.d.ts.map +1 -0
  59. package/dist/internal/openapi/sample.js +434 -0
  60. package/dist/internal/openapi/sample.js.map +1 -0
  61. package/dist/internal/openapi/search.d.ts +19 -0
  62. package/dist/internal/openapi/search.d.ts.map +1 -0
  63. package/dist/internal/openapi/search.js +98 -0
  64. package/dist/internal/openapi/search.js.map +1 -0
  65. package/dist/internal/openapi/sidebar.d.ts +30 -0
  66. package/dist/internal/openapi/sidebar.d.ts.map +1 -0
  67. package/dist/internal/openapi/sidebar.js +67 -0
  68. package/dist/internal/openapi/sidebar.js.map +1 -0
  69. package/dist/internal/openapi/union.d.ts +36 -0
  70. package/dist/internal/openapi/union.d.ts.map +1 -0
  71. package/dist/internal/openapi/union.js +69 -0
  72. package/dist/internal/openapi/union.js.map +1 -0
  73. package/dist/internal/search.d.ts.map +1 -1
  74. package/dist/internal/search.js +20 -0
  75. package/dist/internal/search.js.map +1 -1
  76. package/dist/internal/vite-plugins.d.ts +12 -0
  77. package/dist/internal/vite-plugins.d.ts.map +1 -1
  78. package/dist/internal/vite-plugins.js +102 -11
  79. package/dist/internal/vite-plugins.js.map +1 -1
  80. package/dist/react/Badge.d.ts +2 -3
  81. package/dist/react/Badge.d.ts.map +1 -1
  82. package/dist/react/Layout.client.d.ts.map +1 -1
  83. package/dist/react/Layout.client.js +2 -2
  84. package/dist/react/Layout.client.js.map +1 -1
  85. package/dist/react/OpenApi.d.ts +6 -0
  86. package/dist/react/OpenApi.d.ts.map +1 -0
  87. package/dist/react/OpenApi.js +6 -0
  88. package/dist/react/OpenApi.js.map +1 -0
  89. package/dist/react/internal/CodeToHtml.client.d.ts +53 -2
  90. package/dist/react/internal/CodeToHtml.client.d.ts.map +1 -1
  91. package/dist/react/internal/CodeToHtml.client.js +154 -21
  92. package/dist/react/internal/CodeToHtml.client.js.map +1 -1
  93. package/dist/react/internal/Sidebar.d.ts.map +1 -1
  94. package/dist/react/internal/Sidebar.js +99 -2
  95. package/dist/react/internal/Sidebar.js.map +1 -1
  96. package/dist/react/internal/openapi/CodeSample.client.d.ts +21 -0
  97. package/dist/react/internal/openapi/CodeSample.client.d.ts.map +1 -0
  98. package/dist/react/internal/openapi/CodeSample.client.js +134 -0
  99. package/dist/react/internal/openapi/CodeSample.client.js.map +1 -0
  100. package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts +17 -0
  101. package/dist/react/internal/openapi/CollapsibleChildren.client.d.ts.map +1 -0
  102. package/dist/react/internal/openapi/CollapsibleChildren.client.js +18 -0
  103. package/dist/react/internal/openapi/CollapsibleChildren.client.js.map +1 -0
  104. package/dist/react/internal/openapi/Disclosure.client.d.ts +28 -0
  105. package/dist/react/internal/openapi/Disclosure.client.d.ts.map +1 -0
  106. package/dist/react/internal/openapi/Disclosure.client.js +38 -0
  107. package/dist/react/internal/openapi/Disclosure.client.js.map +1 -0
  108. package/dist/react/internal/openapi/Endpoints.d.ts +26 -0
  109. package/dist/react/internal/openapi/Endpoints.d.ts.map +1 -0
  110. package/dist/react/internal/openapi/Endpoints.js +33 -0
  111. package/dist/react/internal/openapi/Endpoints.js.map +1 -0
  112. package/dist/react/internal/openapi/EndpointsView.d.ts +24 -0
  113. package/dist/react/internal/openapi/EndpointsView.d.ts.map +1 -0
  114. package/dist/react/internal/openapi/EndpointsView.js +26 -0
  115. package/dist/react/internal/openapi/EndpointsView.js.map +1 -0
  116. package/dist/react/internal/openapi/EnumValues.client.d.ts +14 -0
  117. package/dist/react/internal/openapi/EnumValues.client.d.ts.map +1 -0
  118. package/dist/react/internal/openapi/EnumValues.client.js +20 -0
  119. package/dist/react/internal/openapi/EnumValues.client.js.map +1 -0
  120. package/dist/react/internal/openapi/HeadingAnchor.d.ts +15 -0
  121. package/dist/react/internal/openapi/HeadingAnchor.d.ts.map +1 -0
  122. package/dist/react/internal/openapi/HeadingAnchor.js +12 -0
  123. package/dist/react/internal/openapi/HeadingAnchor.js.map +1 -0
  124. package/dist/react/internal/openapi/OpenApiPage.d.ts +79 -0
  125. package/dist/react/internal/openapi/OpenApiPage.d.ts.map +1 -0
  126. package/dist/react/internal/openapi/OpenApiPage.js +72 -0
  127. package/dist/react/internal/openapi/OpenApiPage.js.map +1 -0
  128. package/dist/react/internal/openapi/Operation.d.ts +25 -0
  129. package/dist/react/internal/openapi/Operation.d.ts.map +1 -0
  130. package/dist/react/internal/openapi/Operation.js +101 -0
  131. package/dist/react/internal/openapi/Operation.js.map +1 -0
  132. package/dist/react/internal/openapi/Playground.client.d.ts +33 -0
  133. package/dist/react/internal/openapi/Playground.client.d.ts.map +1 -0
  134. package/dist/react/internal/openapi/Playground.client.js +170 -0
  135. package/dist/react/internal/openapi/Playground.client.js.map +1 -0
  136. package/dist/react/internal/openapi/PropertyExample.client.d.ts +17 -0
  137. package/dist/react/internal/openapi/PropertyExample.client.d.ts.map +1 -0
  138. package/dist/react/internal/openapi/PropertyExample.client.js +21 -0
  139. package/dist/react/internal/openapi/PropertyExample.client.js.map +1 -0
  140. package/dist/react/internal/openapi/Reference.d.ts +55 -0
  141. package/dist/react/internal/openapi/Reference.d.ts.map +1 -0
  142. package/dist/react/internal/openapi/Reference.js +42 -0
  143. package/dist/react/internal/openapi/Reference.js.map +1 -0
  144. package/dist/react/internal/openapi/Schema.d.ts +110 -0
  145. package/dist/react/internal/openapi/Schema.d.ts.map +1 -0
  146. package/dist/react/internal/openapi/Schema.js +239 -0
  147. package/dist/react/internal/openapi/Schema.js.map +1 -0
  148. package/dist/react/internal/openapi/SchemaUnion.client.d.ts +25 -0
  149. package/dist/react/internal/openapi/SchemaUnion.client.d.ts.map +1 -0
  150. package/dist/react/internal/openapi/SchemaUnion.client.js +48 -0
  151. package/dist/react/internal/openapi/SchemaUnion.client.js.map +1 -0
  152. package/dist/react/internal/openapi/anchor-navigation.client.d.ts +47 -0
  153. package/dist/react/internal/openapi/anchor-navigation.client.d.ts.map +1 -0
  154. package/dist/react/internal/openapi/anchor-navigation.client.js +120 -0
  155. package/dist/react/internal/openapi/anchor-navigation.client.js.map +1 -0
  156. package/dist/react/internal/openapi/auth.d.ts +28 -0
  157. package/dist/react/internal/openapi/auth.d.ts.map +1 -0
  158. package/dist/react/internal/openapi/auth.js +75 -0
  159. package/dist/react/internal/openapi/auth.js.map +1 -0
  160. package/dist/react/useLayout.d.ts +2 -0
  161. package/dist/react/useLayout.d.ts.map +1 -1
  162. package/dist/react/useLayout.js +2 -0
  163. package/dist/react/useLayout.js.map +1 -1
  164. package/dist/server/handlers.d.ts +1 -1
  165. package/dist/server/handlers.d.ts.map +1 -1
  166. package/dist/server/handlers.js +26 -5
  167. package/dist/server/handlers.js.map +1 -1
  168. package/dist/server/og-assets.d.ts +5 -0
  169. package/dist/server/og-assets.d.ts.map +1 -0
  170. package/dist/server/og-assets.js +11 -0
  171. package/dist/server/og-assets.js.map +1 -0
  172. package/dist/server/openapi/assets.d.ts +33 -0
  173. package/dist/server/openapi/assets.d.ts.map +1 -0
  174. package/dist/server/openapi/assets.generated.d.ts +9 -0
  175. package/dist/server/openapi/assets.generated.d.ts.map +1 -0
  176. package/dist/server/openapi/assets.generated.js +1091 -0
  177. package/dist/server/openapi/assets.generated.js.map +1 -0
  178. package/dist/server/openapi/assets.js +32 -0
  179. package/dist/server/openapi/assets.js.map +1 -0
  180. package/dist/server/openapi/handler.d.ts +103 -0
  181. package/dist/server/openapi/handler.d.ts.map +1 -0
  182. package/dist/server/openapi/handler.js +198 -0
  183. package/dist/server/openapi/handler.js.map +1 -0
  184. package/dist/server/openapi/handler.test.d.ts +2 -0
  185. package/dist/server/openapi/handler.test.d.ts.map +1 -0
  186. package/dist/server/openapi/handler.test.js +203 -0
  187. package/dist/server/openapi/handler.test.js.map +1 -0
  188. package/dist/server/openapi/html.d.ts +16 -0
  189. package/dist/server/openapi/html.d.ts.map +1 -0
  190. package/dist/server/openapi/html.js +75 -0
  191. package/dist/server/openapi/html.js.map +1 -0
  192. package/dist/server/openapi/pages.d.ts +33 -0
  193. package/dist/server/openapi/pages.d.ts.map +1 -0
  194. package/dist/server/openapi/pages.js +130 -0
  195. package/dist/server/openapi/pages.js.map +1 -0
  196. package/dist/server/openapi/pages.test.d.ts +2 -0
  197. package/dist/server/openapi/pages.test.d.ts.map +1 -0
  198. package/dist/server/openapi/pages.test.js +94 -0
  199. package/dist/server/openapi/pages.test.js.map +1 -0
  200. package/dist/server/openapi/state.d.ts +42 -0
  201. package/dist/server/openapi/state.d.ts.map +1 -0
  202. package/dist/server/openapi/state.js +101 -0
  203. package/dist/server/openapi/state.js.map +1 -0
  204. package/dist/styles/index.css +16 -0
  205. package/dist/styles/markdown.css +9 -7
  206. package/dist/styles/openapi-playground.css +80 -0
  207. package/dist/styles/openapi.css +660 -0
  208. package/dist/vite.d.ts.map +1 -1
  209. package/dist/vite.js +1 -0
  210. package/dist/vite.js.map +1 -1
  211. package/dist/waku/internal/middleware/md-router.d.ts +0 -4
  212. package/dist/waku/internal/middleware/md-router.d.ts.map +1 -1
  213. package/dist/waku/internal/middleware/md-router.js +3 -48
  214. package/dist/waku/internal/middleware/md-router.js.map +1 -1
  215. package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js +1 -1
  216. package/dist/waku/internal/patches/adapters/vercel-build-enhancer.js.map +1 -1
  217. package/dist/waku/internal/patches/router.d.ts.map +1 -1
  218. package/dist/waku/internal/patches/router.js +114 -1
  219. package/dist/waku/internal/patches/router.js.map +1 -1
  220. package/package.json +5 -1
  221. package/src/config.ts +1 -0
  222. package/src/globals.d.ts +16 -0
  223. package/src/index.ts +1 -0
  224. package/src/internal/config.ts +40 -1
  225. package/src/internal/llms.ts +51 -1
  226. package/src/internal/markdown-negotiation.test.ts +42 -0
  227. package/src/internal/markdown-negotiation.ts +95 -0
  228. package/src/internal/markdown.ts +5 -0
  229. package/src/internal/openapi/anchors.ts +44 -0
  230. package/src/internal/openapi/app.ts +127 -0
  231. package/src/internal/openapi/index.ts +24 -0
  232. package/src/internal/openapi/markdown.test.ts +115 -0
  233. package/src/internal/openapi/markdown.ts +275 -0
  234. package/src/internal/openapi/openapi.ts +212 -0
  235. package/src/internal/openapi/openrpc.test.ts +239 -0
  236. package/src/internal/openapi/openrpc.ts +295 -0
  237. package/src/internal/openapi/parser.test.ts +203 -0
  238. package/src/internal/openapi/parser.ts +613 -0
  239. package/src/internal/openapi/registry.test.ts +89 -0
  240. package/src/internal/openapi/registry.ts +89 -0
  241. package/src/internal/openapi/sample.test.ts +283 -0
  242. package/src/internal/openapi/sample.ts +562 -0
  243. package/src/internal/openapi/search.test.ts +62 -0
  244. package/src/internal/openapi/search.ts +108 -0
  245. package/src/internal/openapi/sidebar.test.ts +131 -0
  246. package/src/internal/openapi/sidebar.ts +94 -0
  247. package/src/internal/openapi/union.test.ts +51 -0
  248. package/src/internal/openapi/union.ts +74 -0
  249. package/src/internal/search.ts +20 -0
  250. package/src/internal/test/virtual-config.stub.ts +14 -0
  251. package/src/internal/vite-plugins.ts +106 -11
  252. package/src/openapi-app/App.tsx +64 -0
  253. package/src/openapi-app/blocks.tsx +33 -0
  254. package/src/openapi-app/client.tsx +25 -0
  255. package/src/openapi-app/links.test.ts +84 -0
  256. package/src/openapi-app/links.ts +66 -0
  257. package/src/openapi-app/payload.ts +20 -0
  258. package/src/openapi-app/virtual/config.ts +7 -0
  259. package/src/openapi-app/virtual/group-icons.ts +2 -0
  260. package/src/openapi-app/virtual/langs.ts +6 -0
  261. package/src/openapi-app/virtual/openapi.ts +10 -0
  262. package/src/openapi-app/virtual/search-index.ts +21 -0
  263. package/src/openapi-app/virtual/slots.ts +4 -0
  264. package/src/openapi-app/virtual/user-styles.ts +2 -0
  265. package/src/openapi-app/waku.tsx +154 -0
  266. package/src/react/Badge.tsx +2 -3
  267. package/src/react/Layout.client.tsx +17 -4
  268. package/src/react/OpenApi.tsx +5 -0
  269. package/src/react/internal/CodeToHtml.client.tsx +283 -22
  270. package/src/react/internal/Sidebar.tsx +126 -22
  271. package/src/react/internal/openapi/CodeSample.client.tsx +294 -0
  272. package/src/react/internal/openapi/CollapsibleChildren.client.tsx +41 -0
  273. package/src/react/internal/openapi/Disclosure.client.tsx +67 -0
  274. package/src/react/internal/openapi/Endpoints.tsx +58 -0
  275. package/src/react/internal/openapi/EndpointsView.tsx +76 -0
  276. package/src/react/internal/openapi/EnumValues.client.tsx +49 -0
  277. package/src/react/internal/openapi/HeadingAnchor.tsx +28 -0
  278. package/src/react/internal/openapi/OpenApiPage.tsx +173 -0
  279. package/src/react/internal/openapi/Operation.test.tsx +101 -0
  280. package/src/react/internal/openapi/Operation.tsx +335 -0
  281. package/src/react/internal/openapi/Playground.client.tsx +234 -0
  282. package/src/react/internal/openapi/PropertyExample.client.tsx +55 -0
  283. package/src/react/internal/openapi/Reference.tsx +120 -0
  284. package/src/react/internal/openapi/Schema.tsx +467 -0
  285. package/src/react/internal/openapi/SchemaUnion.client.tsx +123 -0
  286. package/src/react/internal/openapi/anchor-navigation.client.ts +154 -0
  287. package/src/react/internal/openapi/auth.ts +69 -0
  288. package/src/react/useLayout.ts +4 -0
  289. package/src/server/handlers.ts +31 -6
  290. package/src/server/og-assets.ts +14 -0
  291. package/src/server/openapi/assets.generated.ts +1093 -0
  292. package/src/server/openapi/assets.ts +57 -0
  293. package/src/server/openapi/handler.test.ts +244 -0
  294. package/src/server/openapi/handler.ts +277 -0
  295. package/src/server/openapi/html.ts +84 -0
  296. package/src/server/openapi/pages.test.ts +111 -0
  297. package/src/server/openapi/pages.ts +153 -0
  298. package/src/server/openapi/state.ts +136 -0
  299. package/src/styles/index.css +16 -0
  300. package/src/styles/markdown.css +9 -7
  301. package/src/styles/openapi-playground.css +80 -0
  302. package/src/styles/openapi.css +660 -0
  303. package/src/vite.ts +1 -0
  304. package/src/waku/internal/middleware/md-router.ts +8 -52
  305. package/src/waku/internal/patches/adapters/vercel-build-enhancer.ts +1 -1
  306. package/src/waku/internal/patches/router.ts +131 -1
@@ -12,11 +12,73 @@ import { Badge } from '../Badge.js';
12
12
  import { Link } from '../Link.js';
13
13
  import { useSidebar } from '../useSidebar.js';
14
14
  const maxDepth = 5;
15
+ /** Active in-page anchor id, for hash-link sidebar items (e.g. OpenAPI). */
16
+ const ActiveAnchorContext = React.createContext(null);
17
+ /** Whether any sidebar item links to an in-page anchor. */
18
+ function hasHashLink(items) {
19
+ return items.some((item) => item.link?.includes('#') || (item.items && hasHashLink(item.items)));
20
+ }
21
+ /**
22
+ * Tracks the in-page section currently in view, so hash-link sidebar items
23
+ * (used by the OpenAPI section) can show active state. Mirrors the Outline's
24
+ * IntersectionObserver approach.
25
+ */
26
+ function useActiveAnchor(enabled, path) {
27
+ const [activeId, setActiveId] = React.useState(null);
28
+ React.useEffect(() => {
29
+ if (!enabled || typeof window === 'undefined')
30
+ return;
31
+ // Reset on every client-side navigation: derive the active section from the
32
+ // hash of the destination `path` (landing pages like the OpenAPI section
33
+ // root have none, so they start with no active section). Reading `path`
34
+ // here — rather than only `window.location` — keeps it a genuine effect
35
+ // dependency so navigation reliably re-runs this.
36
+ const hashFromPath = path.includes('#') ? path.slice(path.indexOf('#') + 1) : '';
37
+ const hash = hashFromPath || (window.location.hash ? window.location.hash.slice(1) : '');
38
+ setActiveId(hash || null);
39
+ // OpenAPI pages render inside `article[data-v-content]` too, so the generic
40
+ // markdown selector would also match operation sub-headings (Parameters,
41
+ // Responses, schema anchors, …) whose ids have no sidebar entry — hijacking
42
+ // the active anchor as you scroll through a section. On those pages observe
43
+ // only the group header (`<h1>`) and per-operation titles, which back the
44
+ // hash-link sidebar items, so the active item persists across the section.
45
+ const isOpenApi = document.querySelector('[data-v-openapi]') !== null;
46
+ const selector = isOpenApi
47
+ ? '[data-v-openapi-h1][id], [data-v-openapi-operation-title][id]'
48
+ : 'article[data-v-content] :is(h2, h3, h4, h5, h6)[id]';
49
+ const observer = new IntersectionObserver((entries) => {
50
+ for (const entry of entries)
51
+ if (entry.isIntersecting) {
52
+ setActiveId(entry.target.id);
53
+ break;
54
+ }
55
+ }, { rootMargin: '0px 0px -80% 0px' });
56
+ const observeAll = () => {
57
+ observer.disconnect();
58
+ for (const element of document.querySelectorAll(selector))
59
+ observer.observe(element);
60
+ };
61
+ observeAll();
62
+ const content = document.querySelector('article[data-v-content]') ??
63
+ document.querySelector('[data-v-openapi]');
64
+ const mutation = content ? new MutationObserver(observeAll) : null;
65
+ if (content && mutation)
66
+ mutation.observe(content, { childList: true, subtree: true });
67
+ return () => {
68
+ observer.disconnect();
69
+ mutation?.disconnect();
70
+ };
71
+ }, [enabled, path]);
72
+ return activeId;
73
+ }
15
74
  export function Sidebar(props) {
16
75
  const { className, onNavigate, scrollRef } = props;
17
76
  const sidebar = useSidebar();
18
77
  const condenseSidebar = React.useMemo(() => Sidebar_core.length(sidebar.items, { startDepth: 2 }) > 25, [sidebar.items]);
19
- return (_jsxs("nav", { className: cx("vocs:flex-1 vocs:flex vocs:flex-col vocs:text-sm vocs:font-[450] vocs:[&>*:not(:last-child)[data-collapsed='false']]:mb-4", className), "data-v-sidebar": true, children: [sidebar.backLink && _jsx(BackLink, { onNavigate: onNavigate }), sidebar.items.map((item, i) => (_jsx(Section, { ...item, condensed: condenseSidebar, onNavigate: onNavigate, scrollRef: scrollRef }, `${item.text}-${i}`)))] }));
78
+ const hashLinks = React.useMemo(() => hasHashLink(sidebar.items), [sidebar.items]);
79
+ const { path } = useRouter();
80
+ const activeAnchor = useActiveAnchor(hashLinks, path);
81
+ return (_jsx(ActiveAnchorContext.Provider, { value: activeAnchor, children: _jsxs("nav", { className: cx("vocs:flex-1 vocs:flex vocs:flex-col vocs:text-sm vocs:font-[450] vocs:[&>*:not(:last-child)[data-collapsed='false']]:mb-4", className), "data-v-sidebar": true, children: [sidebar.backLink && _jsx(BackLink, { onNavigate: onNavigate }), sidebar.items.map((item, i) => (_jsx(Section, { ...item, condensed: condenseSidebar, onNavigate: onNavigate, scrollRef: scrollRef }, `${item.text}-${i}`)))] }) }));
20
82
  }
21
83
  function BackLink(props) {
22
84
  const { onNavigate } = props;
@@ -33,7 +95,25 @@ function Item(props) {
33
95
  const { badge, condensed = false, depth = 0, disabled, external, link, onNavigate, scrollRef, text, } = props;
34
96
  const { path } = useRouter();
35
97
  const isExternal = external ?? Path.isExternal(link);
36
- const active = React.useMemo(() => (isExternal ? false : Path.matches(path, link)), [path, link, isExternal]);
98
+ const activeAnchor = React.useContext(ActiveAnchorContext);
99
+ const hashId = link?.includes('#') ? link.split('#')[1] : undefined;
100
+ const active = React.useMemo(() => {
101
+ if (isExternal)
102
+ return false;
103
+ if (hashId)
104
+ return hashId === activeAnchor;
105
+ if (!Path.matches(path, link))
106
+ return false;
107
+ // Page-level item (e.g. the OpenAPI "Overview"). When in-page anchor
108
+ // tracking is active, only highlight it while viewing the top of the page —
109
+ // i.e. when the active section is the page's top heading (whose id matches
110
+ // the last path segment) or no section is active yet. Otherwise the matching
111
+ // anchor item below it is highlighted instead.
112
+ if (activeAnchor == null)
113
+ return true;
114
+ const topId = (link?.split('#')[0] ?? '').split('/').filter(Boolean).pop();
115
+ return activeAnchor === topId;
116
+ }, [path, link, isExternal, hashId, activeAnchor]);
37
117
  const itemRef = React.useRef(null);
38
118
  const prevPath = React.useRef(path);
39
119
  React.useEffect(() => {
@@ -60,6 +140,23 @@ function Item(props) {
60
140
  });
61
141
  });
62
142
  }, [link, path, scrollRef]);
143
+ // Keep the active in-page anchor item (OpenAPI endpoints) visible as the page
144
+ // scrolls, since `path` doesn't change between same-page anchors.
145
+ React.useEffect(() => {
146
+ if (!active || !hashId)
147
+ return;
148
+ const item = itemRef.current;
149
+ const container = scrollRef?.current;
150
+ if (!item || !container)
151
+ return;
152
+ const itemTop = item.offsetTop;
153
+ const itemBottom = itemTop + item.offsetHeight;
154
+ const containerScrollTop = container.scrollTop;
155
+ const containerHeight = container.clientHeight;
156
+ if (itemTop >= containerScrollTop && itemBottom <= containerScrollTop + containerHeight)
157
+ return;
158
+ container.scrollTo({ behavior: 'smooth', top: itemTop - 100 });
159
+ }, [active, hashId, scrollRef]);
63
160
  if (link && !disabled) {
64
161
  if (isExternal)
65
162
  return (_jsxs("a", { className: Item.className, "data-condensed": condensed && depth > 1, "data-link": true, "data-v-sidebar-item": true, href: link, ref: itemRef, target: "_blank", rel: "noopener noreferrer", onClick: onNavigate, children: [_jsxs("span", { className: "vocs:inline-flex vocs:items-center vocs:gap-1 vocs:min-w-0 vocs:truncate", children: [text, _jsx(LucideArrowUpRight, { className: "vocs:size-3 vocs:shrink-0" })] }), badge && _jsx(ItemBadge, { badge: badge })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/react/internal/Sidebar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../../../src/react/internal/Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type * as OpenApi from '../../../internal/openapi/index.js';
2
+ /**
3
+ * The sticky right-hand panel for an operation: a request code sample with a
4
+ * language selector, an action slot (the `Test Request` button), and the
5
+ * response examples grouped by status code.
6
+ *
7
+ * Snippets are generated server-side with `@scalar/snippetz`; this component
8
+ * only handles tab selection and defers highlighting to Vocs's own Shiki
9
+ * highlighter via `CodeToHtml`. All styling lives in `openapi.css` keyed on the
10
+ * `data-v-openapi-sample*` attributes below.
11
+ */
12
+ export declare function CodeSample(props: CodeSample.Props): import("react/jsx-runtime").JSX.Element;
13
+ export declare namespace CodeSample {
14
+ type Props = {
15
+ samples: OpenApi.CodeSample[];
16
+ responses: OpenApi.ResponseSample[];
17
+ /** Action slot rendered between the request and response (the test button). */
18
+ action?: React.ReactNode;
19
+ };
20
+ }
21
+ //# sourceMappingURL=CodeSample.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeSample.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CodeSample.client.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,OAAO,MAAM,oCAAoC,CAAA;AAIlE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,2CAqJjD;AAmHD,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,KAAK,GAAG;QACX,OAAO,EAAE,OAAO,CAAC,UAAU,EAAE,CAAA;QAC7B,SAAS,EAAE,OAAO,CAAC,cAAc,EAAE,CAAA;QACnC,+EAA+E;QAC/E,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;KACzB,CAAA;CACF"}
@@ -0,0 +1,134 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useEffect, useMemo, useState } from 'react';
4
+ import LucideCheck from '~icons/lucide/check';
5
+ import LucideChevronDown from '~icons/lucide/chevron-down';
6
+ import LucideChevronUp from '~icons/lucide/chevron-up';
7
+ import LucideClipboard from '~icons/lucide/clipboard';
8
+ import { schemaPropertyId } from '../../../internal/openapi/anchors.js';
9
+ import { CodeToHtml } from '../CodeToHtml.client.js';
10
+ import { registerSampleAnchors, revealAnchor } from './anchor-navigation.client.js';
11
+ /**
12
+ * The sticky right-hand panel for an operation: a request code sample with a
13
+ * language selector, an action slot (the `Test Request` button), and the
14
+ * response examples grouped by status code.
15
+ *
16
+ * Snippets are generated server-side with `@scalar/snippetz`; this component
17
+ * only handles tab selection and defers highlighting to Vocs's own Shiki
18
+ * highlighter via `CodeToHtml`. All styling lives in `openapi.css` keyed on the
19
+ * `data-v-openapi-sample*` attributes below.
20
+ */
21
+ export function CodeSample(props) {
22
+ const { samples, responses, action } = props;
23
+ const [sampleId, setSampleId] = useState(samples[0]?.id);
24
+ const [status, setStatus] = useState(responses[0]?.status);
25
+ // When a request has many query params, the extras collapse by default.
26
+ const [queryExpanded, setQueryExpanded] = useState(false);
27
+ const sample = samples.find((entry) => entry.id === sampleId) ?? samples[0];
28
+ const response = responses.find((entry) => entry.status === status) ?? responses[0];
29
+ // Map each response to the set of schema anchor ids its example lines target,
30
+ // so a left-hand "Example" click can switch to the owning response tab before
31
+ // the matching line is revealed (see `revealResponseLine`).
32
+ const responseAnchors = useMemo(() => responses.map((entry) => ({
33
+ status: entry.status,
34
+ ids: new Set(entry.linePaths
35
+ .map((path) => (path ? schemaPropertyId(entry.idBase, path) : undefined))
36
+ .filter((value) => Boolean(value))),
37
+ })), [responses]);
38
+ // Request sample anchor ids (path + query parameters). Path params are inline
39
+ // spans; query params are whole lines. Both share the operation-scoped id used
40
+ // by the left-hand parameter rows, so a left "Example" can reveal them too.
41
+ // Query params beyond the collapse threshold only render once expanded, so we
42
+ // track which ids are hidden to expand the snippet before revealing them.
43
+ const requestAnchors = useMemo(() => {
44
+ const ids = new Set();
45
+ const collapsedIds = new Set();
46
+ let hasCollapsed = false;
47
+ for (const entry of samples) {
48
+ for (const anchor of entry.anchors)
49
+ ids.add(anchor.id);
50
+ for (const id of entry.lineAnchors)
51
+ if (id)
52
+ ids.add(id);
53
+ if (entry.collapsed) {
54
+ hasCollapsed = true;
55
+ for (const anchor of entry.collapsed.anchors)
56
+ collapsedIds.add(anchor.id);
57
+ for (const id of entry.collapsed.lineAnchors)
58
+ if (id)
59
+ collapsedIds.add(id);
60
+ }
61
+ }
62
+ const hiddenIds = hasCollapsed
63
+ ? new Set([...ids].filter((id) => !collapsedIds.has(id)))
64
+ : new Set();
65
+ return { ids, hiddenIds };
66
+ }, [samples]);
67
+ useEffect(() => registerSampleAnchors({
68
+ has: (id) => requestAnchors.ids.has(id) || responseAnchors.some((entry) => entry.ids.has(id)),
69
+ select: (id) => {
70
+ const match = responseAnchors.find((entry) => entry.ids.has(id));
71
+ if (match) {
72
+ setStatus(match.status);
73
+ return;
74
+ }
75
+ if (requestAnchors.hiddenIds.has(id))
76
+ setQueryExpanded(true);
77
+ },
78
+ }), [responseAnchors, requestAnchors]);
79
+ // Use the collapsed snippet variant (first few query params) unless expanded.
80
+ const view = sample?.collapsed && !queryExpanded ? sample.collapsed : sample;
81
+ return (_jsxs("div", { "data-v-openapi-sample": true, children: [sample && view && (_jsxs("div", { "data-v-openapi-sample-request": true, children: [_jsxs("div", { "data-v-openapi-sample-header": true, children: [_jsx(LanguageDropdown, { samples: samples, selected: sample, onSelect: (id) => setSampleId(id) }), _jsxs("div", { "data-v-openapi-sample-actions": true, children: [_jsx(CopyButton, { code: sample.code }), action] })] }), _jsx("div", { "data-v-openapi-sample-request-body": true, onClick: onAnchorClick, children: _jsx(CodeToHtml, { code: view.display, lang: sample.lang, shrinkIndent: false, anchorRanges: view.anchors, colorRanges: view.colorRanges, lineAnchors: view.lineAnchors }) }), sample.collapsed && (_jsx("button", { type: "button", "data-v-openapi-sample-more": true, onClick: () => setQueryExpanded((value) => !value), children: queryExpanded ? (_jsxs(_Fragment, { children: [_jsx(LucideChevronUp, { "data-v-openapi-sample-more-icon": true }), "Show less"] })) : (_jsxs(_Fragment, { children: [_jsx(LucideChevronDown, { "data-v-openapi-sample-more-icon": true }), "Show ", sample.hiddenQueryCount, " more"] })) }))] })), response && (_jsxs("div", { "data-v-openapi-sample-response": true, children: [_jsx("div", { "data-v-openapi-sample-tabs": true, children: responses.map((entry) => (_jsx(Tab, { active: entry.status === response.status, onClick: () => setStatus(entry.status), children: entry.status }, entry.status))) }), _jsx("div", { "data-v-openapi-sample-response-body": true, onClick: onAnchorClick, children: _jsx(CodeToHtml, { code: response.code, lang: response.lang, shrinkIndent: false, dimRanges: response.placeholders, lineAnchors: response.linePaths.map((path) => path ? schemaPropertyId(response.idBase, path) : undefined) }) })] }))] }));
82
+ }
83
+ /**
84
+ * Navigates to the schema row matching a clicked element carrying a
85
+ * `data-anchor` id. Used for both response example lines (per-line anchors) and
86
+ * request sample path/query parameter spans (per-range anchors).
87
+ */
88
+ function onAnchorClick(event) {
89
+ // Don't hijack text selection.
90
+ if (window.getSelection()?.toString())
91
+ return;
92
+ if (!(event.target instanceof Element))
93
+ return;
94
+ const line = event.target.closest('[data-anchor]');
95
+ if (!line || !event.currentTarget.contains(line))
96
+ return;
97
+ const anchor = line.dataset['anchor'];
98
+ if (!anchor)
99
+ return;
100
+ event.preventDefault();
101
+ void revealAnchor(anchor);
102
+ }
103
+ /** Copies the current request sample's source to the clipboard. */
104
+ function CopyButton(props) {
105
+ const { code } = props;
106
+ const [copied, setCopied] = useState(false);
107
+ useEffect(() => {
108
+ if (!copied)
109
+ return;
110
+ const timeout = setTimeout(() => setCopied(false), 1000);
111
+ return () => clearTimeout(timeout);
112
+ }, [copied]);
113
+ return (_jsxs("button", { type: "button", onClick: () => {
114
+ navigator.clipboard?.writeText(code).then(() => setCopied(true), () => { });
115
+ }, "data-v-openapi-action": true, children: [copied ? (_jsx(LucideCheck, { "data-v-openapi-action-icon": true, "data-copied": true })) : (_jsx(LucideClipboard, { "data-v-openapi-action-icon": true })), "Copy"] }));
116
+ }
117
+ /**
118
+ * Language selector for the request sample, rendered as a dropdown (defaulting
119
+ * to the first sample, i.e. cURL) rather than a row of tabs.
120
+ */
121
+ function LanguageDropdown(props) {
122
+ const { samples, selected, onSelect } = props;
123
+ const [open, setOpen] = useState(false);
124
+ if (samples.length <= 1)
125
+ return _jsx("span", { "data-v-openapi-lang-label": true, children: selected.label });
126
+ return (_jsxs("div", { "data-v-openapi-lang": true, children: [_jsxs("button", { type: "button", onClick: () => setOpen((value) => !value), "data-v-openapi-lang-trigger": true, children: [selected.label, _jsx(LucideChevronDown, { "data-v-openapi-lang-chevron": true })] }), open && (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "aria-label": "Close", tabIndex: -1, "data-v-openapi-dropdown-backdrop": true, onClick: () => setOpen(false) }), _jsx("ul", { "data-v-openapi-lang-menu": true, children: samples.map((entry) => (_jsx("li", { children: _jsxs("button", { type: "button", onClick: () => {
127
+ onSelect(entry.id);
128
+ setOpen(false);
129
+ }, "data-v-openapi-lang-option": true, "data-selected": entry.id === selected.id || undefined, children: [_jsx(LucideCheck, { "data-v-openapi-lang-option-check": true }), _jsx("span", { "data-v-openapi-lang-option-label": true, children: entry.label })] }) }, entry.id))) })] }))] }));
130
+ }
131
+ function Tab(props) {
132
+ return (_jsx("button", { type: "button", onClick: props.onClick, "data-v-openapi-tab": true, "data-active": props.active || undefined, children: props.children }));
133
+ }
134
+ //# sourceMappingURL=CodeSample.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeSample.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CodeSample.client.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Collapses nested schema properties (e.g. `error.details`) behind a toggle,
3
+ * matching the "Show/Hide Child Attributes" pattern from Scalar/Stripe.
4
+ * Built on the shared {@link Disclosure} accordion. The wrapping
5
+ * `data-v-openapi-collapse` element scopes the trigger/panel styling (see
6
+ * `openapi.css`); the Show/Hide icons and labels swap on the trigger's Base UI
7
+ * `data-panel-open` state.
8
+ */
9
+ export declare function CollapsibleChildren(props: CollapsibleChildren.Props): import("react/jsx-runtime").JSX.Element;
10
+ export declare namespace CollapsibleChildren {
11
+ type Props = {
12
+ children: React.ReactNode;
13
+ /** Text after the Show/Hide verb. @default 'Child Attributes' */
14
+ label?: string | undefined;
15
+ };
16
+ }
17
+ //# sourceMappingURL=CollapsibleChildren.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleChildren.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CollapsibleChildren.client.tsx"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,2CAkBnE;AAED,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC;IAC3C,KAAK,KAAK,GAAG;QACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;QACzB,iEAAiE;QACjE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;CACF"}
@@ -0,0 +1,18 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import LucidePlus from '~icons/lucide/plus';
4
+ import LucideX from '~icons/lucide/x';
5
+ import { Disclosure } from './Disclosure.client.js';
6
+ /**
7
+ * Collapses nested schema properties (e.g. `error.details`) behind a toggle,
8
+ * matching the "Show/Hide Child Attributes" pattern from Scalar/Stripe.
9
+ * Built on the shared {@link Disclosure} accordion. The wrapping
10
+ * `data-v-openapi-collapse` element scopes the trigger/panel styling (see
11
+ * `openapi.css`); the Show/Hide icons and labels swap on the trigger's Base UI
12
+ * `data-panel-open` state.
13
+ */
14
+ export function CollapsibleChildren(props) {
15
+ const { children, label = 'Child Attributes' } = props;
16
+ return (_jsx("div", { "data-v-openapi-collapse": true, children: _jsx(Disclosure, { trigger: _jsxs(_Fragment, { children: [_jsx(LucidePlus, { "data-v-openapi-collapse-icon-show": true }), _jsx(LucideX, { "data-v-openapi-collapse-icon-hide": true }), _jsxs("span", { "data-v-openapi-collapse-label-show": true, children: ["Show ", label] }), _jsxs("span", { "data-v-openapi-collapse-label-hide": true, children: ["Hide ", label] })] }), children: children }) }));
17
+ }
18
+ //# sourceMappingURL=CollapsibleChildren.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleChildren.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/CollapsibleChildren.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,OAAO,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,MAAM,EAAE,QAAQ,EAAE,KAAK,GAAG,kBAAkB,EAAE,GAAG,KAAK,CAAA;IACtD,OAAO,CACL,yDACE,KAAC,UAAU,IACT,OAAO,EACL,8BACE,KAAC,UAAU,gDAAqC,EAChD,KAAC,OAAO,gDAAqC,EAC7C,gFAA+C,KAAK,IAAQ,EAC5D,gFAA+C,KAAK,IAAQ,IAC3D,YAGJ,QAAQ,GACE,GACT,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * A single collapsible disclosure built on the Base UI Accordion primitive,
3
+ * used for the toggleable sections across OpenAPI pages (nested "child
4
+ * attributes", responses, etc.). Collapsed by default.
5
+ *
6
+ * The panel is kept mounted so its content is always present in the DOM; this
7
+ * lets {@link revealAnchor} scroll to a property inside a collapsed disclosure
8
+ * (e.g. when clicking a response example line). The disclosure registers its
9
+ * panel + an `open()` callback so navigation can reveal it on demand.
10
+ *
11
+ * The trigger is a plain node so it can be passed from server components.
12
+ * Styling is attached via stable data attributes — `data-v-openapi-disclosure`,
13
+ * `-disclosure-trigger`, `-disclosure-panel` — which consumers scope by
14
+ * ancestor (e.g. `[data-v-openapi-response] [data-v-openapi-disclosure-trigger]`)
15
+ * so no Tailwind classes are passed through props. Open-state styling is driven
16
+ * via the Base UI `data-panel-open` attribute on the trigger.
17
+ */
18
+ export declare function Disclosure(props: Disclosure.Props): import("react/jsx-runtime").JSX.Element;
19
+ export declare namespace Disclosure {
20
+ type Props = {
21
+ /** Content of the trigger button. Style open state via `data-panel-open`. */
22
+ trigger: React.ReactNode;
23
+ /** @default false */
24
+ defaultOpen?: boolean | undefined;
25
+ children: React.ReactNode;
26
+ };
27
+ }
28
+ //# sourceMappingURL=Disclosure.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Disclosure.client.tsx"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,2CAiCjD;AAED,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,KAAK,GAAG;QACX,6EAA6E;QAC7E,OAAO,EAAE,KAAK,CAAC,SAAS,CAAA;QACxB,qBAAqB;QACrB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Accordion } from '@base-ui/react/accordion';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { registerDisclosure } from './anchor-navigation.client.js';
6
+ /**
7
+ * A single collapsible disclosure built on the Base UI Accordion primitive,
8
+ * used for the toggleable sections across OpenAPI pages (nested "child
9
+ * attributes", responses, etc.). Collapsed by default.
10
+ *
11
+ * The panel is kept mounted so its content is always present in the DOM; this
12
+ * lets {@link revealAnchor} scroll to a property inside a collapsed disclosure
13
+ * (e.g. when clicking a response example line). The disclosure registers its
14
+ * panel + an `open()` callback so navigation can reveal it on demand.
15
+ *
16
+ * The trigger is a plain node so it can be passed from server components.
17
+ * Styling is attached via stable data attributes — `data-v-openapi-disclosure`,
18
+ * `-disclosure-trigger`, `-disclosure-panel` — which consumers scope by
19
+ * ancestor (e.g. `[data-v-openapi-response] [data-v-openapi-disclosure-trigger]`)
20
+ * so no Tailwind classes are passed through props. Open-state styling is driven
21
+ * via the Base UI `data-panel-open` attribute on the trigger.
22
+ */
23
+ export function Disclosure(props) {
24
+ const { trigger, defaultOpen = false, children } = props;
25
+ const [value, setValue] = useState(defaultOpen ? ['disclosure'] : []);
26
+ const panelRef = useRef(null);
27
+ const open = useCallback(() => {
28
+ setValue((current) => (current.includes('disclosure') ? current : ['disclosure']));
29
+ }, []);
30
+ useEffect(() => {
31
+ const panel = panelRef.current;
32
+ if (!panel)
33
+ return;
34
+ return registerDisclosure(panel, open);
35
+ }, [open]);
36
+ return (_jsx(Accordion.Root, { "data-v-openapi-disclosure": true, value: value, onValueChange: (next) => setValue(next), multiple: true, keepMounted: true, children: _jsxs(Accordion.Item, { value: "disclosure", children: [_jsx(Accordion.Header, { "data-v-openapi-disclosure-header": true, children: _jsx(Accordion.Trigger, { "data-v-openapi-disclosure-trigger": true, children: trigger }) }), _jsx(Accordion.Panel, { ref: panelRef, "data-v-openapi-disclosure-panel": true, children: children })] }) }));
37
+ }
38
+ //# sourceMappingURL=Disclosure.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Disclosure.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Disclosure.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC/E,MAAM,QAAQ,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAA;IAEpD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACpF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO,CACL,KAAC,SAAS,CAAC,IAAI,uCAEb,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAgB,CAAC,EACnD,QAAQ,QACR,WAAW,kBAEX,MAAC,SAAS,CAAC,IAAI,IAAC,KAAK,EAAC,YAAY,aAChC,KAAC,SAAS,CAAC,MAAM,wDACf,KAAC,SAAS,CAAC,OAAO,yDAAoC,OAAO,GAAqB,GACjE,EACnB,KAAC,SAAS,CAAC,KAAK,IAAC,GAAG,EAAE,QAAQ,qDAC3B,QAAQ,GACO,IACH,GACF,CAClB,CAAA;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Renders the domain/category list for an OpenAPI spec as an accordion (Vite/RSC
3
+ * site integration). The UI lives in the framework-agnostic
4
+ * {@link file://./EndpointsView.tsx `EndpointsView`}; this is the Waku adapter
5
+ * that resolves the spec from `virtual:vocs/openapi` and links with the Vocs
6
+ * `Link`.
7
+ *
8
+ * This is an opt-in component — OpenAPI landing pages no longer render the list
9
+ * automatically. Drop `<OpenApi.Endpoints />` into a consumer override page
10
+ * (e.g. `pages/api.mdx`) to surface it.
11
+ *
12
+ * The target spec is resolved from `path` (the OpenAPI mount, e.g. `/api`).
13
+ * When omitted, it defaults to the only configured spec; if multiple specs
14
+ * exist, `path` is required.
15
+ */
16
+ export declare function Endpoints(props: Endpoints.Props): import("react/jsx-runtime").JSX.Element;
17
+ export declare namespace Endpoints {
18
+ type Props = {
19
+ /**
20
+ * OpenAPI mount path identifying which spec to render (e.g. `/api`).
21
+ * Optional when only one spec is configured.
22
+ */
23
+ path?: string | undefined;
24
+ };
25
+ }
26
+ //# sourceMappingURL=Endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Endpoints.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,2CA4B/C;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,KAAK,GAAG;QACX;;;WAGG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { specs } from 'virtual:vocs/openapi';
3
+ import { Link } from '../../Link.js';
4
+ import { EndpointsView } from './EndpointsView.js';
5
+ /**
6
+ * Renders the domain/category list for an OpenAPI spec as an accordion (Vite/RSC
7
+ * site integration). The UI lives in the framework-agnostic
8
+ * {@link file://./EndpointsView.tsx `EndpointsView`}; this is the Waku adapter
9
+ * that resolves the spec from `virtual:vocs/openapi` and links with the Vocs
10
+ * `Link`.
11
+ *
12
+ * This is an opt-in component — OpenAPI landing pages no longer render the list
13
+ * automatically. Drop `<OpenApi.Endpoints />` into a consumer override page
14
+ * (e.g. `pages/api.mdx`) to surface it.
15
+ *
16
+ * The target spec is resolved from `path` (the OpenAPI mount, e.g. `/api`).
17
+ * When omitted, it defaults to the only configured spec; if multiple specs
18
+ * exist, `path` is required.
19
+ */
20
+ export function Endpoints(props) {
21
+ const mounts = Object.keys(specs);
22
+ const mount = props.path ?? (mounts.length === 1 ? mounts[0] : undefined);
23
+ if (!mount) {
24
+ if (mounts.length === 0)
25
+ return _jsx("p", { children: "No OpenAPI spec is configured." });
26
+ return (_jsxs("p", { children: ["Multiple OpenAPI specs are configured. Pass a ", _jsx("code", { children: "path" }), " to", ' ', _jsx("code", { children: "<Endpoints />" }), " (one of: ", mounts.join(', '), ")."] }));
27
+ }
28
+ const ir = specs[mount];
29
+ if (!ir)
30
+ return _jsxs("p", { children: ["No OpenAPI spec is mounted at ", mount, "."] });
31
+ return (_jsx(EndpointsView, { ir: ir, href: (to) => to, Link: ({ href, children, ...rest }) => (_jsx(Link, { to: href ?? '', ...rest, children: children })) }));
32
+ }
33
+ //# sourceMappingURL=Endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Endpoints.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Endpoints.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAEzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,yDAAqC,CAAA;QACrE,OAAO,CACL,0EACgD,kCAAiB,SAAI,GAAG,EACtE,2CAAgC,gBAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAC1D,CACL,CAAA;IACH,CAAC;IAED,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;IACvB,IAAI,CAAC,EAAE;QAAE,OAAO,0DAAkC,KAAK,SAAM,CAAA;IAE7D,OAAO,CACL,KAAC,aAAa,IACZ,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAChB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,CACrC,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,IAAI,EAAE,KAAM,IAAI,YAC3B,QAAQ,GACJ,CACR,GACD,CACH,CAAA;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { Ir } from '../../../internal/openapi/parser.js';
3
+ /**
4
+ * Prop-driven domain/category accordion for an OpenAPI spec: each category
5
+ * expands to its operations (method badge + summary), every entry linking to
6
+ * that operation's anchor on its category page.
7
+ *
8
+ * Framework-agnostic — the caller supplies the parsed {@link Ir}, an `href`
9
+ * mapper (so links resolve correctly under any mount), and an optional `Link`
10
+ * component (the Vocs/Waku `Link` for the site, a plain `<a>` for the standalone
11
+ * client).
12
+ */
13
+ export declare function EndpointsView(props: EndpointsView.Props): import("react/jsx-runtime").JSX.Element;
14
+ export declare namespace EndpointsView {
15
+ type Props = {
16
+ /** Parsed OpenAPI spec. */
17
+ ir: Ir;
18
+ /** Maps a section-relative href to a final href (e.g. mount-prefixed). */
19
+ href: (to: string) => string;
20
+ /** Link component. Defaults to a plain anchor. */
21
+ Link?: ComponentType<React.ComponentProps<'a'>> | undefined;
22
+ };
23
+ }
24
+ //# sourceMappingURL=EndpointsView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointsView.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EndpointsView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAA;AAK7D;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,2CA2CvD;AAMD,MAAM,CAAC,OAAO,WAAW,aAAa,CAAC;IACrC,KAAK,KAAK,GAAG;QACX,2BAA2B;QAC3B,EAAE,EAAE,EAAE,CAAA;QACN,0EAA0E;QAC1E,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;QAC5B,kDAAkD;QAClD,IAAI,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAA;KAC5D,CAAA;CACF"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import LucideChevronRight from '~icons/lucide/chevron-right';
3
+ import { methodVariant } from '../../../internal/openapi/sidebar.js';
4
+ import { Badge } from '../../Badge.js';
5
+ import { Disclosure } from './Disclosure.client.js';
6
+ /**
7
+ * Prop-driven domain/category accordion for an OpenAPI spec: each category
8
+ * expands to its operations (method badge + summary), every entry linking to
9
+ * that operation's anchor on its category page.
10
+ *
11
+ * Framework-agnostic — the caller supplies the parsed {@link Ir}, an `href`
12
+ * mapper (so links resolve correctly under any mount), and an optional `Link`
13
+ * component (the Vocs/Waku `Link` for the site, a plain `<a>` for the standalone
14
+ * client).
15
+ */
16
+ export function EndpointsView(props) {
17
+ const { ir, href, Link = DefaultLink } = props;
18
+ // Root-mounted specs have `ir.path === '/'`; collapse it to '' so links read
19
+ // `/group#op` instead of `//group#op` (which the browser treats as a host).
20
+ const base = ir.path === '/' ? '' : ir.path.replace(/\/$/, '');
21
+ return (_jsx("div", { "data-v-openapi-overview": true, children: ir.groups.map((category) => (_jsx("div", { "data-v-openapi-overview-category": true, children: _jsx(Disclosure, { trigger: _jsxs(_Fragment, { children: [_jsx(LucideChevronRight, { "data-v-openapi-overview-chevron": true }), _jsxs("span", { "data-v-openapi-overview-category-head": true, children: [_jsx("span", { "data-v-openapi-overview-category-name": true, children: category.name }), category.description && (_jsx("span", { "data-v-openapi-overview-category-description": true, children: category.description }))] })] }), children: _jsx("ul", { "data-v-openapi-overview-endpoints": true, children: category.operations.map((operation) => (_jsx("li", { children: _jsxs(Link, { href: href(`${base}/${category.id}#${operation.id}`), "data-v-openapi-overview-endpoint": true, children: [_jsx(Badge, { variant: methodVariant(operation.method), children: operation.method }), _jsx("span", { "data-v-openapi-overview-endpoint-title": true, children: operation.summary || operation.path }), _jsx(LucideChevronRight, { "data-v-openapi-overview-endpoint-chevron": true })] }) }, operation.id))) }) }) }, category.id))) }));
22
+ }
23
+ function DefaultLink(props) {
24
+ return _jsx("a", { ...props });
25
+ }
26
+ //# sourceMappingURL=EndpointsView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndpointsView.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EndpointsView.tsx"],"names":[],"mappings":";AACA,OAAO,kBAAkB,MAAM,6BAA6B,CAAA;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEnD;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,WAAW,EAAE,GAAG,KAAK,CAAA;IAC9C,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAC9D,OAAO,CACL,yDACG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC3B,kEACE,KAAC,UAAU,IACT,OAAO,EACL,8BACE,KAAC,kBAAkB,8CAAmC,EACtD,0EACE,wEAA6C,QAAQ,CAAC,IAAI,GAAQ,EACjE,QAAQ,CAAC,WAAW,IAAI,CACvB,+EAAoD,QAAQ,CAAC,WAAW,GAAQ,CACjF,IACI,IACN,YAGL,kEACG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACtC,uBACE,MAAC,IAAI,IACH,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC,uDAGpD,KAAC,KAAK,IAAC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,YAAG,SAAS,CAAC,MAAM,GAAS,EAC3E,yEACG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,GAC/B,EACP,KAAC,kBAAkB,uDAA4C,IAC1D,IAVA,SAAS,CAAC,EAAE,CAWhB,CACN,CAAC,GACC,GACM,IA9BL,QAAQ,CAAC,EAAE,CA+Bf,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAgC;IACnD,OAAO,eAAO,KAAK,GAAI,CAAA;AACzB,CAAC"}