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
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Renders a schema's enum literals as a vertical "values" list (one per row)
3
+ * rather than a wrapping inline union. Shows the first {@link previewCount}
4
+ * values and reveals the rest behind a "Show all values" toggle, matching the
5
+ * Scalar/Stripe reference UI.
6
+ */
7
+ export declare function EnumValues(props: EnumValues.Props): import("react/jsx-runtime").JSX.Element;
8
+ export declare namespace EnumValues {
9
+ type Props = {
10
+ /** Enum literal values as display strings. */
11
+ values: string[];
12
+ };
13
+ }
14
+ //# sourceMappingURL=EnumValues.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumValues.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EnumValues.client.tsx"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,2CA2BjD;AAED,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,KAAK,GAAG;QACX,8CAA8C;QAC9C,MAAM,EAAE,MAAM,EAAE,CAAA;KACjB,CAAA;CACF"}
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import LucidePlus from '~icons/lucide/plus';
5
+ import LucideX from '~icons/lucide/x';
6
+ const previewCount = 5;
7
+ /**
8
+ * Renders a schema's enum literals as a vertical "values" list (one per row)
9
+ * rather than a wrapping inline union. Shows the first {@link previewCount}
10
+ * values and reveals the rest behind a "Show all values" toggle, matching the
11
+ * Scalar/Stripe reference UI.
12
+ */
13
+ export function EnumValues(props) {
14
+ const { values } = props;
15
+ const [expanded, setExpanded] = useState(false);
16
+ const hasMore = values.length > previewCount;
17
+ const visible = expanded ? values : values.slice(0, previewCount);
18
+ return (_jsxs("div", { "data-v-openapi-values": true, children: [_jsx("span", { "data-v-openapi-values-label": true, children: "Values" }), _jsx("div", { "data-v-openapi-values-list": true, children: visible.map((value) => (_jsx("code", { "data-v-openapi-values-item": true, children: value }, value))) }), hasMore && (_jsxs("button", { type: "button", onClick: () => setExpanded((value) => !value), "data-v-openapi-pill": true, children: [expanded ? (_jsx(LucideX, { "data-v-openapi-pill-icon": true })) : (_jsx(LucidePlus, { "data-v-openapi-pill-icon": true })), expanded ? 'Hide values' : 'Show all values'] }))] }));
19
+ }
20
+ //# sourceMappingURL=EnumValues.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnumValues.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/EnumValues.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAC3C,OAAO,OAAO,MAAM,iBAAiB,CAAA;AAErC,MAAM,YAAY,GAAG,CAAC,CAAA;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAA;IACxB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,YAAY,CAAA;IAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;IACjE,OAAO,CACL,yDACE,yEAA+C,EAC/C,4DACG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,6DACG,KAAK,IADG,KAAK,CAET,CACR,CAAC,GACE,EACL,OAAO,IAAI,CACV,kBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,0CAChE,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,OAAO,uCAA4B,CACrC,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,uCAA4B,CACxC,EACA,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,IACtC,CACV,IACG,CACP,CAAA;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * A copy-link anchor appended to an OpenAPI heading. Reuses the markdown
3
+ * `heading-anchor`/`heading-anchor-icon` classes so it inherits the same
4
+ * hover-reveal and "copied" styling, and is handled by the global
5
+ * `HeadingAnchors` client (which copies the anchor's URL on click).
6
+ */
7
+ export declare function HeadingAnchor(props: HeadingAnchor.Props): import("react/jsx-runtime").JSX.Element;
8
+ export declare namespace HeadingAnchor {
9
+ type Props = {
10
+ id: string;
11
+ /** Extra classes appended to the anchor (e.g. to override the left margin). */
12
+ className?: string | undefined;
13
+ };
14
+ }
15
+ //# sourceMappingURL=HeadingAnchor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadingAnchor.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/HeadingAnchor.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,2CAWvD;AAED,MAAM,CAAC,OAAO,WAAW,aAAa,CAAC;IACrC,KAAK,KAAK,GAAG;QACX,EAAE,EAAE,MAAM,CAAA;QACV,+EAA+E;QAC/E,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC/B,CAAA;CACF"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import LucideLink from '~icons/lucide/link';
3
+ /**
4
+ * A copy-link anchor appended to an OpenAPI heading. Reuses the markdown
5
+ * `heading-anchor`/`heading-anchor-icon` classes so it inherits the same
6
+ * hover-reveal and "copied" styling, and is handled by the global
7
+ * `HeadingAnchors` client (which copies the anchor's URL on click).
8
+ */
9
+ export function HeadingAnchor(props) {
10
+ return (_jsx("a", { href: `#${props.id}`, className: `heading-anchor${props.className ? ` ${props.className}` : ''}`, "aria-label": "Copy link and go to this section", title: "Copy link and go to this section", children: _jsx(LucideLink, { className: "heading-anchor-icon vocs:size-[0.75em]" }) }));
11
+ }
12
+ //# sourceMappingURL=HeadingAnchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeadingAnchor.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/HeadingAnchor.tsx"],"names":[],"mappings":";AAAA,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAA0B;IACtD,OAAO,CACL,YACE,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE,EACpB,SAAS,EAAE,iBAAiB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,gBAC/D,kCAAkC,EAC7C,KAAK,EAAC,kCAAkC,YAExC,KAAC,UAAU,IAAC,SAAS,EAAC,wCAAwC,GAAG,GAC/D,CACL,CAAA;AACH,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Renders a consumer-authored "guide" page (a normal MDX page mounted under an
4
+ * OpenAPI section path, e.g. `pages/api/auth.mdx`).
5
+ *
6
+ * Uses the same full-bleed layout as the section landing page (the left
7
+ * centering gutter collapses to the sidebar, so content sits flush after it).
8
+ * Like the landing page it is single-column, so it keeps the normal right
9
+ * gutter/TOC outline (the default). The authored prose is wrapped in
10
+ * `[data-v-openapi-guide]`, which caps it to the readable content width and
11
+ * reapplies markdown block rhythm/heading treatment, so the guide keeps a
12
+ * regular page's article width and padding while matching the gutter layout of
13
+ * the rest of the section.
14
+ *
15
+ * For authored guide pages the frontmatter `title`/`description` are
16
+ * intentionally not rendered as an on-page header; the authored MDX owns its own
17
+ * headings (like a normal page). Trait pages (`x-traitTag`) opt in via `header`,
18
+ * since their title/subtitle come from the spec tag and the body has no heading.
19
+ */
20
+ export declare function OpenApiGuide(props: OpenApiGuide.Props): import("react/jsx-runtime").JSX.Element;
21
+ export declare namespace OpenApiGuide {
22
+ type Props = {
23
+ /** Authored MDX content. */
24
+ children?: ReactNode | undefined;
25
+ /** Document `<title>` and page heading (from the page's frontmatter). */
26
+ title?: string | undefined;
27
+ /** Subtitle Markdown rendered below the heading. */
28
+ description?: string | undefined;
29
+ /**
30
+ * Render `title`/`description` as an on-page header above the content (used
31
+ * by trait pages, whose Markdown body has no heading of its own).
32
+ */
33
+ header?: boolean | undefined;
34
+ /** Anchor id for the rendered header heading (enables a copy-link anchor). */
35
+ id?: string | undefined;
36
+ };
37
+ }
38
+ /**
39
+ * Renders an isolated, auto-generated OpenAPI reference section (Vite/RSC site
40
+ * integration). The actual content is rendered by the framework-agnostic
41
+ * {@link file://./Reference.tsx `Reference`} components; this is the Waku
42
+ * adapter that resolves the spec from `virtual:vocs/openapi` and wraps it in the
43
+ * site `Layout`.
44
+ *
45
+ * Behavior depends on the optional `group` prop:
46
+ *
47
+ * - with `group`: renders a single category page.
48
+ * - without `group`: renders an overview/landing page.
49
+ *
50
+ * An optional `intro` (a consumer-authored MDX "override" page mounted at the
51
+ * same route) replaces the auto-generated header while the generated body still
52
+ * renders below it automatically.
53
+ */
54
+ export declare function OpenApiPage(props: OpenApiPage.Props): import("react/jsx-runtime").JSX.Element;
55
+ export declare namespace OpenApiPage {
56
+ type Props = {
57
+ /** Mount path identifying which spec to render (e.g. `/api`). */
58
+ mount: string;
59
+ /**
60
+ * Category id to render. When omitted, renders the overview page listing
61
+ * every category.
62
+ */
63
+ group?: string | undefined;
64
+ /**
65
+ * Consumer-authored override content rendered in place of the auto-generated
66
+ * header (spec title/description). The generated body still renders below.
67
+ */
68
+ intro?: ReactNode | undefined;
69
+ /** Document `<title>` override (e.g. from the override page's frontmatter). */
70
+ title?: string | undefined;
71
+ /**
72
+ * Render the domain/endpoint list on the overview page (ignored when `group`
73
+ * or `intro` is set). The standalone handler enables this so its
74
+ * Introduction lists every endpoint by default.
75
+ */
76
+ endpoints?: boolean | undefined;
77
+ };
78
+ }
79
+ //# sourceMappingURL=OpenApiPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenApiPage.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/OpenApiPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AA+BtC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,2CAkBrD;AAED,MAAM,CAAC,OAAO,WAAW,YAAY,CAAC;IACpC,KAAK,KAAK,GAAG;QACX,4BAA4B;QAC5B,QAAQ,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;QAChC,yEAAyE;QACzE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,oDAAoD;QACpD,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC;;;WAGG;QACH,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC5B,8EAA8E;QAC9E,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACxB,CAAA;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,2CA2CnD;AAED,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC;IACnC,KAAK,KAAK,GAAG;QACX,iEAAiE;QACjE,KAAK,EAAE,MAAM,CAAA;QACb;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;;WAGG;QACH,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;QAC7B,+EAA+E;QAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B;;;;WAIG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAChC,CAAA;CACF"}
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { specs } from 'virtual:vocs/openapi';
3
+ import { Layout } from '../../Layout.js';
4
+ import * as MdxPageContext from '../../MdxPageContext.js';
5
+ import { Endpoints } from './Endpoints.js';
6
+ import { HeadingAnchor } from './HeadingAnchor.js';
7
+ import { PlaygroundProvider } from './Playground.client.js';
8
+ import { Prose, ReferenceGroup, ReferenceOverview } from './Reference.js';
9
+ /**
10
+ * Layout for OpenAPI pages.
11
+ *
12
+ * Single-column pages (the overview and consumer guide pages) show the normal
13
+ * outline (the regular Vocs right gutter) — this is the default. The two-column
14
+ * operation (category) pages opt out (`outline={false}`), since the sidebar
15
+ * already exposes every operation as an anchor and the sticky playground
16
+ * occupies the right column.
17
+ */
18
+ function OpenApiLayout(props) {
19
+ return (_jsx(MdxPageContext.Provider, { frontmatter: { outline: props.outline ?? true, content: { width: props.width ?? 'full' } }, children: _jsx(Layout, { children: props.children }) }));
20
+ }
21
+ /**
22
+ * Renders a consumer-authored "guide" page (a normal MDX page mounted under an
23
+ * OpenAPI section path, e.g. `pages/api/auth.mdx`).
24
+ *
25
+ * Uses the same full-bleed layout as the section landing page (the left
26
+ * centering gutter collapses to the sidebar, so content sits flush after it).
27
+ * Like the landing page it is single-column, so it keeps the normal right
28
+ * gutter/TOC outline (the default). The authored prose is wrapped in
29
+ * `[data-v-openapi-guide]`, which caps it to the readable content width and
30
+ * reapplies markdown block rhythm/heading treatment, so the guide keeps a
31
+ * regular page's article width and padding while matching the gutter layout of
32
+ * the rest of the section.
33
+ *
34
+ * For authored guide pages the frontmatter `title`/`description` are
35
+ * intentionally not rendered as an on-page header; the authored MDX owns its own
36
+ * headings (like a normal page). Trait pages (`x-traitTag`) opt in via `header`,
37
+ * since their title/subtitle come from the spec tag and the body has no heading.
38
+ */
39
+ export function OpenApiGuide(props) {
40
+ return (_jsxs(OpenApiLayout, { width: "full", children: [props.title ? _jsx("title", { children: props.title }) : null, _jsxs("div", { "data-v-openapi-guide": true, children: [props.header && props.title ? (_jsxs("header", { "data-v-openapi-header": true, children: [_jsxs("h1", { "data-v": true, "data-v-openapi-h1": true, id: props.id, children: [props.title, props.id ? _jsx(HeadingAnchor, { id: props.id }) : null] }), props.description ? _jsx(Prose, { markdown: props.description, attr: "description" }) : null] })) : null, props.children] })] }));
41
+ }
42
+ /**
43
+ * Renders an isolated, auto-generated OpenAPI reference section (Vite/RSC site
44
+ * integration). The actual content is rendered by the framework-agnostic
45
+ * {@link file://./Reference.tsx `Reference`} components; this is the Waku
46
+ * adapter that resolves the spec from `virtual:vocs/openapi` and wraps it in the
47
+ * site `Layout`.
48
+ *
49
+ * Behavior depends on the optional `group` prop:
50
+ *
51
+ * - with `group`: renders a single category page.
52
+ * - without `group`: renders an overview/landing page.
53
+ *
54
+ * An optional `intro` (a consumer-authored MDX "override" page mounted at the
55
+ * same route) replaces the auto-generated header while the generated body still
56
+ * renders below it automatically.
57
+ */
58
+ export function OpenApiPage(props) {
59
+ const ir = specs[props.mount];
60
+ if (!ir)
61
+ return (_jsx(OpenApiLayout, { children: _jsxs("p", { children: ["No OpenAPI spec is mounted at ", props.mount, "."] }) }));
62
+ // Single category page.
63
+ if (props.group) {
64
+ const group = ir.groups.find((candidate) => candidate.id === props.group);
65
+ if (!group)
66
+ return (_jsx(OpenApiLayout, { children: _jsxs("p", { children: ["No category \u201C", props.group, "\u201D exists in the API mounted at ", props.mount, "."] }) }));
67
+ return (_jsxs(OpenApiLayout, { outline: false, children: [_jsx("title", { children: props.title ?? `${group.name} · ${ir.info.title}` }), _jsx(PlaygroundProvider, { client: ir.client, mount: ir.path, children: _jsx(ReferenceGroup, { ir: ir, group: group, intro: props.intro }) })] }));
68
+ }
69
+ // Overview / landing page.
70
+ return (_jsxs(OpenApiLayout, { width: "full", children: [_jsx("title", { children: props.title ?? ir.info.title }), _jsx(ReferenceOverview, { ir: ir, intro: props.intro, endpoints: props.endpoints ? _jsx(Endpoints, { path: ir.path || undefined }) : undefined })] }));
71
+ }
72
+ //# sourceMappingURL=OpenApiPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpenApiPage.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/OpenApiPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type * as OpenApi from '../../../internal/openapi/index.js';
2
+ export declare function Operation(props: Operation.Props): import("react/jsx-runtime").JSX.Element;
3
+ export declare namespace Operation {
4
+ type Props = {
5
+ operation: OpenApi.IrOperation;
6
+ /** Base server URL used to build request code samples. */
7
+ server?: string | undefined;
8
+ /**
9
+ * Heading level for the operation title. Use `2` on per-category pages
10
+ * (category name is `<h1>`) and `3` on the single-page layout (category is
11
+ * `<h2>`).
12
+ *
13
+ * @default 3
14
+ */
15
+ headingLevel?: 2 | 3 | undefined;
16
+ /**
17
+ * Renders a top border separating this operation from the previous one.
18
+ * Pass `true` for every operation except the first.
19
+ *
20
+ * @default false
21
+ */
22
+ separator?: boolean | undefined;
23
+ };
24
+ }
25
+ //# sourceMappingURL=Operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Operation.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Operation.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,OAAO,MAAM,oCAAoC,CAAA;AA8BlE,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,2CAgF/C;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,KAAK,KAAK,GAAG;QACX,SAAS,EAAE,OAAO,CAAC,WAAW,CAAA;QAC9B,0DAA0D;QAC1D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B;;;;;;WAMG;QACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAA;QAChC;;;;;WAKG;QACH,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAChC,CAAA;CACF"}
@@ -0,0 +1,101 @@
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 * as Markdown from '../../../internal/markdown.js';
4
+ import { mediaIdBase, requestBodyIdBase, responseIdBase, slug, } from '../../../internal/openapi/anchors.js';
5
+ import { codeSamples, responseSamples } from '../../../internal/openapi/sample.js';
6
+ import { methodVariant } from '../../../internal/openapi/sidebar.js';
7
+ import { unwrapSingleVariant } from '../../../internal/openapi/union.js';
8
+ import { Badge } from '../../Badge.js';
9
+ import { CodeSample } from './CodeSample.client.js';
10
+ import { CollapsibleChildren } from './CollapsibleChildren.client.js';
11
+ import { Disclosure } from './Disclosure.client.js';
12
+ import { HeadingAnchor } from './HeadingAnchor.js';
13
+ import { TestRequestButton } from './Playground.client.js';
14
+ import { enumValues, PropertyRow, Schema, schemaExample, schemaMeta, typeLabel, UnionView, unionVariants, } from './Schema.js';
15
+ const parameterGroups = [
16
+ { in: 'path', title: 'Path Parameters' },
17
+ { in: 'query', title: 'Query Parameters' },
18
+ { in: 'header', title: 'Header Parameters' },
19
+ { in: 'cookie', title: 'Cookie Parameters' },
20
+ // JSON-RPC method params (expanded from an OpenRPC document).
21
+ { in: 'rpc', title: 'Parameters' },
22
+ ];
23
+ export function Operation(props) {
24
+ const { operation, server, headingLevel = 3, separator = false } = props;
25
+ const title = operation.summary || `${operation.method} ${operation.path}`;
26
+ const Heading = `h${headingLevel}`;
27
+ const samples = codeSamples(operation, server);
28
+ const responses = responseSamples(operation);
29
+ return (_jsxs("section", { "data-v-openapi-operation": true, "data-separator": separator || undefined, "data-deprecated": operation.deprecated || undefined, children: [_jsxs("div", { "data-v-openapi-operation-header": true, children: [_jsxs(Heading, { "data-v": true, "data-v-openapi-operation-title": true, id: operation.id, children: [title, operation.deprecated && _jsx(Badge, { variant: "warning", children: "Deprecated" }), _jsx(HeadingAnchor, { id: operation.id })] }), _jsxs("div", { "data-v-openapi-endpoint": true, children: [_jsx(Badge, { variant: methodVariant(operation.method), children: operation.method }), _jsx("code", { "data-v-openapi-endpoint-path": true, children: operation.path })] }), operation.description && _jsx(Prose, { markdown: operation.description })] }), _jsxs("div", { "data-v-openapi-operation-body": true, children: [parameterGroups.map((group) => {
30
+ const params = operation.parameters.filter((parameter) => parameter.in === group.in);
31
+ if (params.length === 0)
32
+ return null;
33
+ return (_jsx(Section, { id: `${operation.id}-${slug(group.title)}`, title: group.title, children: _jsx(ParameterList, { parameters: params, idPrefix: operation.id }) }, group.in));
34
+ }), operation.requestBody && !operation.requestBody.hidden && (_jsx(Section, { id: `${operation.id}-request-body`, title: "Request Body", children: _jsx(Content, { content: operation.requestBody.content, idBase: requestBodyIdBase(operation.id) }) })), operation.responses.length > 0 && (_jsx(Section, { id: `${operation.id}-responses`, title: "Responses", children: _jsx("div", { "data-v-openapi-responses": true, children: operation.responses.map((response) => (_jsx(ResponseRow, { operationId: operation.id, response: response }, response.status))) }) }))] }), samples.length > 0 && (_jsx("div", { "data-v-openapi-operation-aside": true, children: _jsx(CodeSample, { samples: samples, responses: responses, action: _jsx(TestRequestButton, { method: operation.method, path: operation.path, example: operation.rpcExample }) }) }))] }));
35
+ }
36
+ function Section(props) {
37
+ return (_jsxs("section", { "data-v-openapi-section": true, children: [_jsxs("h3", { "data-v": true, "data-v-openapi-section-title": true, id: props.id, children: [props.title, _jsx(HeadingAnchor, { id: props.id })] }), props.children] }));
38
+ }
39
+ function ParameterList(props) {
40
+ return (_jsx("div", { "data-v-openapi-params": true, children: props.parameters.map((parameter) => {
41
+ // Unwrap a nullable single-variant union (e.g. `oneOf: [null, X]`) so X's
42
+ // type and nested properties render instead of a bare `null | object`.
43
+ const schema = parameter.schema
44
+ ? (unwrapSingleVariant(parameter.schema) ?? parameter.schema)
45
+ : parameter.schema;
46
+ const union = unionVariants(schema);
47
+ return (_jsx(PropertyRow, { id: `${props.idPrefix}-${slug(parameter.name)}`, name: parameter.name, type: union ? undefined : typeLabel(schema), values: union ? undefined : enumValues(schema), meta: union ? [] : schemaMeta(schema), example: union ? undefined : parameterExample(parameter), required: parameter.required, deprecated: parameter.deprecated, description: parameter.description, children: union ? (_jsx(UnionView, { union: union, depth: 1, prefix: `${parameter.name}.` })) : (schema &&
48
+ hasChildSchema(schema) && (_jsx(CollapsibleChildren, { children: _jsx("div", { "data-v-openapi-children": true, children: _jsx(Schema, { schema: schema, depth: 1, prefix: `${parameter.name}${schema['type'] === 'array' ? '[]' : ''}.` }) }) }))) }, parameter.name));
49
+ }) }));
50
+ }
51
+ /** Resolves a parameter/header example, preferring the item-level value. */
52
+ function parameterExample(parameter) {
53
+ if (parameter.example !== undefined)
54
+ return typeof parameter.example === 'string'
55
+ ? parameter.example
56
+ : JSON.stringify(parameter.example);
57
+ return schemaExample(parameter.schema);
58
+ }
59
+ /** Whether a parameter's schema has nested object/array properties to expand. */
60
+ function hasChildSchema(schema) {
61
+ if (schema['properties'])
62
+ return true;
63
+ if (schema['type'] === 'array' && schema['items'])
64
+ return hasChildSchema(schema['items']);
65
+ return false;
66
+ }
67
+ function Content(props) {
68
+ if (props.content.length === 0)
69
+ return null;
70
+ return (_jsx("div", { "data-v-openapi-content": true, children: props.content.map((media) => {
71
+ const schemaIdBase = props.idBase
72
+ ? mediaIdBase(props.idBase, media.mediaType, props.content.length)
73
+ : undefined;
74
+ return (_jsxs("div", { "data-v-openapi-media": true, children: [!props.hideMediaType && _jsx("code", { "data-v-openapi-media-type": true, children: media.mediaType }), media.schema ? (_jsx(Schema, { schema: media.schema, idBase: schemaIdBase })) : media.example !== undefined ? (_jsx(Example, { value: media.example })) : null] }, media.mediaType));
75
+ }) }));
76
+ }
77
+ function ResponseRow(props) {
78
+ const { operationId, response } = props;
79
+ const headers = response.headers ?? [];
80
+ const idBase = responseIdBase(operationId, response.status);
81
+ const variant = response.status.startsWith('2') || response.status === 'default'
82
+ ? 'success'
83
+ : response.status.startsWith('4') || response.status.startsWith('5')
84
+ ? 'danger'
85
+ : 'info';
86
+ const hasContent = response.content.length > 0 || headers.length > 0;
87
+ const header = (_jsxs(_Fragment, { children: [hasContent ? (_jsx(LucideChevronRight, { "data-v-openapi-response-chevron": true })) : (_jsx("span", { "data-v-openapi-response-spacer": true, "aria-hidden": true })), _jsx(Badge, { variant: variant, "data-v-openapi-response-status": true, children: response.status }), response.description && (_jsx("span", { "data-v-openapi-response-description": true, title: response.description, children: response.description }))] }));
88
+ // Responses without a body have nothing to expand — render a static row.
89
+ if (!hasContent)
90
+ return (_jsx("div", { "data-v-openapi-response": true, "data-static": true, children: header }));
91
+ return (_jsx("div", { "data-v-openapi-response": true, children: _jsx(Disclosure, { trigger: header, children: _jsxs("div", { "data-v-openapi-response-content": true, children: [headers.length > 0 && (_jsx(CollapsibleChildren, { label: "Headers", children: _jsx("div", { "data-v-openapi-params": true, children: headers.map((item) => (_jsx(PropertyRow, { name: item.name, type: typeLabel(item.schema), values: enumValues(item.schema), meta: schemaMeta(item.schema), example: parameterExample(item), required: item.required, deprecated: item.deprecated, description: item.description }, item.name))) }) })), response.content.length > 0 && (_jsx(Content, { content: response.content, hideMediaType: true, idBase: idBase }))] }) }) }));
92
+ }
93
+ function Example(props) {
94
+ return (_jsx("pre", { "data-v-openapi-example": true, children: _jsx("code", { children: JSON.stringify(props.value, null, 2) }) }));
95
+ }
96
+ function Prose(props) {
97
+ return (_jsx("div", { "data-v-openapi-prose": true, "data-v-content": true,
98
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: server-rendered trusted spec content
99
+ dangerouslySetInnerHTML: { __html: Markdown.toHtml(props.markdown) } }));
100
+ }
101
+ //# sourceMappingURL=Operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Operation.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Operation.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import '@scalar/api-client/style.css';
2
+ import '../../../styles/openapi-playground.css';
3
+ import * as React from 'react';
4
+ import type { Ir } from '../../../internal/openapi/parser.js';
5
+ /**
6
+ * Mounts the Scalar API client modal once per spec and exposes an `open`
7
+ * function to its descendants. The modal is a Vue app loaded lazily on the
8
+ * client only (Scalar is untested under SSR), so nothing is imported during
9
+ * server rendering.
10
+ */
11
+ export declare function PlaygroundProvider(props: PlaygroundProvider.Props): import("react/jsx-runtime").JSX.Element;
12
+ export declare namespace PlaygroundProvider {
13
+ type Props = {
14
+ client: Ir['client'];
15
+ children: React.ReactNode;
16
+ /** Spec mount path; scopes the persisted auth (e.g. `/api`). */
17
+ mount?: string | undefined;
18
+ };
19
+ }
20
+ /**
21
+ * Button that opens the Scalar API client modal for a single operation. Renders
22
+ * a disabled placeholder until the modal finishes loading on the client.
23
+ */
24
+ export declare function TestRequestButton(props: TestRequestButton.Props): import("react/jsx-runtime").JSX.Element;
25
+ export declare namespace TestRequestButton {
26
+ type Props = {
27
+ method: string;
28
+ path: string;
29
+ /** Name of the request example to preselect (JSON-RPC method name). */
30
+ example?: string | undefined;
31
+ };
32
+ }
33
+ //# sourceMappingURL=Playground.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Playground.client.d.ts","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Playground.client.tsx"],"names":[],"mappings":"AAOA,OAAO,8BAA8B,CAAA;AAKrC,OAAO,wCAAwC,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAA;AAQ7D;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,2CAuIjE;AAED,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,KAAK,KAAK,GAAG;QACX,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAA;QACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;QACzB,gEAAgE;QAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;CACF;AA8BD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,KAAK,2CAgB/D;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,KAAK,KAAK,GAAG;QACX,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,uEAAuE;QACvE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
@@ -0,0 +1,170 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ // Scalar's stylesheet, loaded with this client-only chunk (i.e. only on
4
+ // OpenAPI pages). It is largely unlayered, so it outranks Vocs's layered
5
+ // Tailwind and styles the modal without further layer wiring. During SSR this
6
+ // import is a no-op. A static import is used because Vite reliably injects CSS
7
+ // for static client imports, unlike dynamic `import('*.css')`.
8
+ import '@scalar/api-client/style.css';
9
+ // Maps Scalar's theme variables onto Vocs tokens (loaded after Scalar's CSS so
10
+ // the overrides win). Lives under `src/styles` so the build emits it to
11
+ // `dist/styles` (zile only copies CSS assets reachable from the `./styles/*`
12
+ // export glob; a colocated `./playground.css` would not be emitted).
13
+ import '../../../styles/openapi-playground.css';
14
+ import * as React from 'react';
15
+ import { createPortal } from 'react-dom';
16
+ import LucidePlay from '~icons/lucide/play';
17
+ import { useColorScheme } from '../../useColorScheme.js';
18
+ import * as Auth from './auth.js';
19
+ const PlaygroundContext = React.createContext(null);
20
+ /**
21
+ * Mounts the Scalar API client modal once per spec and exposes an `open`
22
+ * function to its descendants. The modal is a Vue app loaded lazily on the
23
+ * client only (Scalar is untested under SSR), so nothing is imported during
24
+ * server rendering.
25
+ */
26
+ export function PlaygroundProvider(props) {
27
+ const { client, children, mount: specMount = '/' } = props;
28
+ const containerRef = React.useRef(null);
29
+ // biome-ignore lint/suspicious/noExplicitAny: Scalar's modal type lives in a client-only module.
30
+ const modalRef = React.useRef(null);
31
+ // The Scalar workspace store backing the modal; kept so cross-page auth
32
+ // updates can be loaded into the live store without reopening the modal.
33
+ // biome-ignore lint/suspicious/noExplicitAny: client-only Scalar store instance.
34
+ const storeRef = React.useRef(null);
35
+ const [ready, setReady] = React.useState(false);
36
+ React.useEffect(() => {
37
+ let cancelled = false;
38
+ // biome-ignore lint/suspicious/noExplicitAny: client-only Scalar app instance.
39
+ let modal = null;
40
+ async function mount() {
41
+ try {
42
+ const [{ createWorkspaceStore }, { createApiClientModal }] = await Promise.all([
43
+ import('@scalar/workspace-store/client'),
44
+ import('@scalar/api-client/modal'),
45
+ ]);
46
+ // Register a plugin so we're notified whenever the consumer edits
47
+ // credentials in Scalar's "Try" auth UI. We mirror Scalar's exported
48
+ // auth state into localStorage so every other playground instance
49
+ // (other pages, future reloads) picks it up.
50
+ const store = createWorkspaceStore({
51
+ plugins: [
52
+ {
53
+ hooks: {
54
+ onWorkspaceStateChanges(event) {
55
+ if (event.type !== 'auth')
56
+ return;
57
+ const next = serializeAuth(store);
58
+ // Skip writes that match what's already stored — including the
59
+ // change fired by our own `auth.load()` below — to avoid a
60
+ // persist → subscribe → load → persist feedback loop.
61
+ if (next === Auth.read(specMount))
62
+ return;
63
+ Auth.write(specMount, next);
64
+ },
65
+ },
66
+ },
67
+ ],
68
+ });
69
+ storeRef.current = store;
70
+ await store.addDocument({
71
+ name: 'default',
72
+ ...('url' in client ? { url: client.url } : { document: client.content }),
73
+ });
74
+ if (cancelled)
75
+ return;
76
+ // Seed credentials captured from a previous "Try" session (this page's
77
+ // first mount, another page, or a prior visit).
78
+ loadStoredAuth(store, specMount);
79
+ modal = createApiClientModal({
80
+ el: containerRef.current,
81
+ workspaceStore: store,
82
+ });
83
+ modalRef.current = modal;
84
+ setReady(true);
85
+ }
86
+ catch (error) {
87
+ // Surface load failures without breaking the docs page.
88
+ console.error('[vocs] Failed to initialize the OpenAPI playground.', error);
89
+ }
90
+ }
91
+ mount();
92
+ return () => {
93
+ cancelled = true;
94
+ try {
95
+ modal?.app?.unmount();
96
+ }
97
+ catch { }
98
+ modalRef.current = null;
99
+ storeRef.current = null;
100
+ };
101
+ }, [client, specMount]);
102
+ // When another playground instance (another page/tab) persists new
103
+ // credentials, load them into this live store so its "Try" stays in sync
104
+ // without reopening the modal.
105
+ React.useEffect(() => Auth.subscribe(specMount, () => {
106
+ const store = storeRef.current;
107
+ if (store)
108
+ loadStoredAuth(store, specMount);
109
+ }), [specMount]);
110
+ const open = React.useCallback((operation) => {
111
+ modalRef.current?.open({
112
+ method: operation.method.toLowerCase(),
113
+ path: operation.path,
114
+ // Preselect the JSON-RPC method's request example (expanded OpenRPC
115
+ // operations all share one path + verb, so the example disambiguates).
116
+ ...(operation.example ? { example: operation.example } : {}),
117
+ });
118
+ }, []);
119
+ const value = React.useMemo(() => ({ open, ready }), [open, ready]);
120
+ // Render the Scalar host at `document.body` (client-only) so it sits outside
121
+ // Vocs's layout: a transformed/contained ancestor would otherwise break the
122
+ // modal's `position: fixed` overlay.
123
+ const [mounted, setMounted] = React.useState(false);
124
+ React.useEffect(() => setMounted(true), []);
125
+ // Scalar's `--scalar-*` theme variables are defined under `.light-mode` /
126
+ // `.dark-mode`; without one of those classes every `var(--scalar-*)` resolves
127
+ // to nothing. Mirror Vocs's active color scheme onto the host.
128
+ const colorScheme = useColorScheme();
129
+ return (_jsxs(PlaygroundContext.Provider, { value: value, children: [children, mounted &&
130
+ createPortal(_jsxs("div", { className: `scalar-app scalar-client ${colorScheme === 'dark' ? 'dark-mode' : 'light-mode'}`, "data-v-openapi-playground-root": true, children: [_jsx("div", { ref: containerRef }), _jsx("div", { id: "headlessui-portal-root" })] }), document.body)] }));
131
+ }
132
+ /**
133
+ * Serializes Scalar's exported auth state to a JSON string for persistence,
134
+ * or `null` when the store holds no credentials.
135
+ */
136
+ // biome-ignore lint/suspicious/noExplicitAny: client-only Scalar store instance.
137
+ function serializeAuth(store) {
138
+ try {
139
+ const data = store.auth.export();
140
+ return data && Object.keys(data).length > 0 ? JSON.stringify(data) : null;
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ /**
147
+ * Loads the persisted auth blob for a mount into a Scalar store. Skips the load
148
+ * when the store already matches what's stored, so the change `auth.load()`
149
+ * fires doesn't churn or feed back into a persist loop.
150
+ */
151
+ // biome-ignore lint/suspicious/noExplicitAny: client-only Scalar store instance.
152
+ function loadStoredAuth(store, mount) {
153
+ const saved = Auth.read(mount);
154
+ if (!saved || saved === serializeAuth(store))
155
+ return;
156
+ try {
157
+ store.auth.load(JSON.parse(saved));
158
+ }
159
+ catch { }
160
+ }
161
+ /**
162
+ * Button that opens the Scalar API client modal for a single operation. Renders
163
+ * a disabled placeholder until the modal finishes loading on the client.
164
+ */
165
+ export function TestRequestButton(props) {
166
+ const { method, path, example } = props;
167
+ const context = React.useContext(PlaygroundContext);
168
+ return (_jsxs("button", { type: "button", "data-v-openapi-action": true, "data-v-openapi-test-request": true, disabled: !context?.ready, onClick: () => context?.open({ method, path, example }), children: [_jsx(LucidePlay, { "data-v-openapi-action-icon": true }), "Try"] }));
169
+ }
170
+ //# sourceMappingURL=Playground.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Playground.client.js","sourceRoot":"","sources":["../../../../src/react/internal/openapi/Playground.client.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAC9E,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,8BAA8B,CAAA;AACrC,+EAA+E;AAC/E,wEAAwE;AACxE,6EAA6E;AAC7E,qEAAqE;AACrE,OAAO,wCAAwC,CAAA;AAC/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,UAAU,MAAM,oBAAoB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAIjC,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAA0C,IAAI,CAAC,CAAA;AAE5F;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA+B;IAChE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,KAAK,CAAA;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAA;IACvD,iGAAiG;IACjG,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAM,IAAI,CAAC,CAAA;IACxC,wEAAwE;IACxE,yEAAyE;IACzE,iFAAiF;IACjF,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAM,IAAI,CAAC,CAAA;IACxC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE/C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,+EAA+E;QAC/E,IAAI,KAAK,GAAQ,IAAI,CAAA;QAErB,KAAK,UAAU,KAAK;YAClB,IAAI,CAAC;gBACH,MAAM,CAAC,EAAE,oBAAoB,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBAC7E,MAAM,CAAC,gCAAgC,CAAC;oBACxC,MAAM,CAAC,0BAA0B,CAAC;iBACnC,CAAC,CAAA;gBAEF,kEAAkE;gBAClE,qEAAqE;gBACrE,kEAAkE;gBAClE,6CAA6C;gBAC7C,MAAM,KAAK,GAAG,oBAAoB,CAAC;oBACjC,OAAO,EAAE;wBACP;4BACE,KAAK,EAAE;gCACL,uBAAuB,CAAC,KAAK;oCAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wCAAE,OAAM;oCACjC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;oCACjC,+DAA+D;oCAC/D,2DAA2D;oCAC3D,sDAAsD;oCACtD,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;wCAAE,OAAM;oCACzC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;gCAC7B,CAAC;6BACF;yBACF;qBACF;iBACF,CAAC,CAAA;gBACF,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;gBACxB,MAAM,KAAK,CAAC,WAAW,CAAC;oBACtB,IAAI,EAAE,SAAS;oBACf,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;iBAC1E,CAAC,CAAA;gBACF,IAAI,SAAS;oBAAE,OAAM;gBAErB,uEAAuE;gBACvE,gDAAgD;gBAChD,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;gBAEhC,KAAK,GAAG,oBAAoB,CAAC;oBAC3B,EAAE,EAAE,YAAY,CAAC,OAAO;oBACxB,cAAc,EAAE,KAAK;iBACtB,CAAC,CAAA;gBACF,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;gBACxB,QAAQ,CAAC,IAAI,CAAC,CAAA;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wDAAwD;gBACxD,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,KAAK,CAAC,CAAA;YAC7E,CAAC;QACH,CAAC;QAED,KAAK,EAAE,CAAA;QACP,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;YAChB,IAAI,CAAC;gBACH,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAA;YACvB,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;QACzB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IAEvB,mEAAmE;IACnE,yEAAyE;IACzE,+BAA+B;IAC/B,KAAK,CAAC,SAAS,CACb,GAAG,EAAE,CACH,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE;QAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAA;QAC9B,IAAI,KAAK;YAAE,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7C,CAAC,CAAC,EACJ,CAAC,SAAS,CAAC,CACZ,CAAA;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAS,CAAC,SAAS,EAAE,EAAE;QACnD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;YACrB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE;YACtC,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,oEAAoE;YACpE,uEAAuE;YACvE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEnE,6EAA6E;IAC7E,4EAA4E;IAC5E,qCAAqC;IACrC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;IAE3C,0EAA0E;IAC1E,8EAA8E;IAC9E,+DAA+D;IAC/D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAA;IAEpC,OAAO,CACL,MAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,aACrC,QAAQ,EACR,OAAO;gBACN,YAAY,CAOV,eACE,SAAS,EAAE,4BAA4B,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,EAAE,qDAG5F,cAAK,GAAG,EAAE,YAAY,GAAI,EAC1B,cAAK,EAAE,EAAC,wBAAwB,GAAG,IAC/B,EACN,QAAQ,CAAC,IAAI,CACd,IACwB,CAC9B,CAAA;AACH,CAAC;AAWD;;;GAGG;AACH,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAAU;IAC/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAA;QAChC,OAAO,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,iFAAiF;AACjF,SAAS,cAAc,CAAC,KAAU,EAAE,KAAa;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC;QAAE,OAAM;IACpD,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACpC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAA8B;IAC9D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAEnD,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,sEAGb,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,aAEvD,KAAC,UAAU,yCAA8B,WAElC,CACV,CAAA;AACH,CAAC"}