zudoku 0.3.0-dev.6 → 0.3.0-dev.61

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 (529) hide show
  1. package/dist/app/App.d.ts +1 -2
  2. package/dist/app/App.js +1 -29
  3. package/dist/app/App.js.map +1 -1
  4. package/dist/app/demo.d.ts +2 -0
  5. package/dist/app/demo.js +32 -0
  6. package/dist/app/demo.js.map +1 -0
  7. package/dist/app/entry.client.d.ts +2 -0
  8. package/dist/app/entry.client.js +35 -0
  9. package/dist/app/entry.client.js.map +1 -0
  10. package/dist/app/entry.server.d.ts +14 -0
  11. package/dist/app/entry.server.js +105 -0
  12. package/dist/app/entry.server.js.map +1 -0
  13. package/dist/app/main.d.ts +6 -1
  14. package/dist/app/main.js +67 -12
  15. package/dist/app/main.js.map +1 -1
  16. package/dist/app/standalone.d.ts +2 -0
  17. package/dist/app/standalone.js +37 -0
  18. package/dist/app/standalone.js.map +1 -0
  19. package/dist/app/tailwind.d.ts +1 -1
  20. package/dist/app/tailwind.js +0 -4
  21. package/dist/app/tailwind.js.map +1 -1
  22. package/dist/cli/cmds/dev.js +5 -0
  23. package/dist/cli/cmds/dev.js.map +1 -1
  24. package/dist/cli/dev/handler.d.ts +1 -0
  25. package/dist/cli/dev/handler.js +3 -1
  26. package/dist/cli/dev/handler.js.map +1 -1
  27. package/dist/config/config.d.ts +11 -39
  28. package/dist/config/validators/validate.d.ts +908 -2
  29. package/dist/config/validators/validate.js +150 -1
  30. package/dist/config/validators/validate.js.map +1 -1
  31. package/dist/internal.d.ts +1 -0
  32. package/dist/internal.js +2 -0
  33. package/dist/internal.js.map +1 -0
  34. package/dist/lib/authentication/AuthenticationPlugin.d.ts +13 -0
  35. package/dist/lib/authentication/AuthenticationPlugin.js +31 -0
  36. package/dist/lib/authentication/AuthenticationPlugin.js.map +1 -0
  37. package/dist/lib/authentication/Callback.js +1 -1
  38. package/dist/lib/authentication/Callback.js.map +1 -1
  39. package/dist/lib/authentication/authentication.d.ts +6 -9
  40. package/dist/lib/authentication/components/SignIn.d.ts +1 -0
  41. package/dist/lib/authentication/components/SignIn.js +10 -0
  42. package/dist/lib/authentication/components/SignIn.js.map +1 -0
  43. package/dist/lib/authentication/components/SignOut.d.ts +1 -0
  44. package/dist/lib/authentication/components/SignOut.js +10 -0
  45. package/dist/lib/authentication/components/SignOut.js.map +1 -0
  46. package/dist/lib/authentication/components/SignUp.d.ts +1 -0
  47. package/dist/lib/authentication/components/SignUp.js +10 -0
  48. package/dist/lib/authentication/components/SignUp.js.map +1 -0
  49. package/dist/lib/authentication/hook.js +2 -2
  50. package/dist/lib/authentication/hook.js.map +1 -1
  51. package/dist/lib/authentication/providers/auth0.js +2 -2
  52. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  53. package/dist/lib/authentication/providers/clerk.js +59 -30
  54. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  55. package/dist/lib/authentication/providers/openid.d.ts +19 -6
  56. package/dist/lib/authentication/providers/openid.js +45 -16
  57. package/dist/lib/authentication/providers/openid.js.map +1 -1
  58. package/dist/lib/components/Bootstrap.d.ts +13 -0
  59. package/dist/lib/components/Bootstrap.js +12 -0
  60. package/dist/lib/components/Bootstrap.js.map +1 -0
  61. package/dist/lib/components/DevPortal.d.ts +4 -19
  62. package/dist/lib/components/DevPortal.js +30 -12
  63. package/dist/lib/components/DevPortal.js.map +1 -1
  64. package/dist/lib/components/DeveloperHint.d.ts +5 -0
  65. package/dist/lib/components/DeveloperHint.js +10 -0
  66. package/dist/lib/components/DeveloperHint.js.map +1 -0
  67. package/dist/lib/components/ErrorPage.d.ts +6 -0
  68. package/dist/lib/components/ErrorPage.js +9 -0
  69. package/dist/lib/components/ErrorPage.js.map +1 -0
  70. package/dist/lib/components/Header.js +17 -3
  71. package/dist/lib/components/Header.js.map +1 -1
  72. package/dist/lib/components/Heading.d.ts +9 -4
  73. package/dist/lib/components/Heading.js +17 -2
  74. package/dist/lib/components/Heading.js.map +1 -1
  75. package/dist/lib/components/InlineCode.d.ts +5 -0
  76. package/dist/lib/components/InlineCode.js +4 -0
  77. package/dist/lib/components/InlineCode.js.map +1 -0
  78. package/dist/lib/components/Layout.js +3 -2
  79. package/dist/lib/components/Layout.js.map +1 -1
  80. package/dist/lib/components/NotFoundPage.d.ts +1 -0
  81. package/dist/lib/components/NotFoundPage.js +12 -0
  82. package/dist/lib/components/NotFoundPage.js.map +1 -0
  83. package/dist/lib/components/SyntaxHighlight.d.ts +3 -2
  84. package/dist/lib/components/SyntaxHighlight.js +20 -18
  85. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  86. package/dist/lib/components/TopNavigation.d.ts +1 -1
  87. package/dist/lib/components/TopNavigation.js +5 -1
  88. package/dist/lib/components/TopNavigation.js.map +1 -1
  89. package/dist/lib/components/context/DevPortalProvider.d.ts +1 -1
  90. package/dist/lib/components/context/DevPortalProvider.js +20 -3
  91. package/dist/lib/components/context/DevPortalProvider.js.map +1 -1
  92. package/dist/lib/components/index.d.ts +32 -3
  93. package/dist/lib/components/index.js +21 -3
  94. package/dist/lib/components/index.js.map +1 -1
  95. package/dist/lib/components/navigation/SideNavigationCategory.js +2 -2
  96. package/dist/lib/components/navigation/SideNavigationCategory.js.map +1 -1
  97. package/dist/lib/components/navigation/SideNavigationItem.js +1 -1
  98. package/dist/lib/components/navigation/SideNavigationItem.js.map +1 -1
  99. package/dist/lib/core/DevPortalContext.d.ts +46 -12
  100. package/dist/lib/core/DevPortalContext.js +7 -9
  101. package/dist/lib/core/DevPortalContext.js.map +1 -1
  102. package/dist/lib/core/plugins.d.ts +16 -4
  103. package/dist/lib/core/plugins.js +2 -0
  104. package/dist/lib/core/plugins.js.map +1 -1
  105. package/dist/lib/errors/ErrorAlert.d.ts +3 -0
  106. package/dist/lib/errors/ErrorAlert.js +8 -0
  107. package/dist/lib/errors/ErrorAlert.js.map +1 -0
  108. package/dist/lib/errors/RouterError.d.ts +1 -0
  109. package/dist/lib/errors/RouterError.js +12 -0
  110. package/dist/lib/errors/RouterError.js.map +1 -0
  111. package/dist/lib/errors/ServerError.d.ts +3 -0
  112. package/dist/lib/errors/ServerError.js +6 -0
  113. package/dist/lib/errors/ServerError.js.map +1 -0
  114. package/dist/lib/errors/TopLevelError.d.ts +2 -0
  115. package/dist/lib/errors/TopLevelError.js +7 -0
  116. package/dist/lib/errors/TopLevelError.js.map +1 -0
  117. package/dist/lib/oas/graphql/index.js +6 -4
  118. package/dist/lib/oas/graphql/index.js.map +1 -1
  119. package/dist/lib/oas/parser/index.d.ts +1 -1
  120. package/dist/lib/oas/parser/index.js +38 -12
  121. package/dist/lib/oas/parser/index.js.map +1 -1
  122. package/dist/lib/plugins/{api-key → api-keys}/CreateApiKey.js +1 -1
  123. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -0
  124. package/dist/lib/plugins/api-keys/ProtectedRoute.d.ts +1 -0
  125. package/dist/lib/plugins/api-keys/ProtectedRoute.js +14 -0
  126. package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -0
  127. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +39 -0
  128. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -0
  129. package/dist/lib/plugins/{api-key → api-keys}/index.d.ts +4 -5
  130. package/dist/lib/plugins/{api-key → api-keys}/index.js +11 -19
  131. package/dist/lib/plugins/api-keys/index.js.map +1 -0
  132. package/dist/lib/plugins/custom-page/index.d.ts +8 -0
  133. package/dist/lib/plugins/custom-page/index.js +12 -0
  134. package/dist/lib/plugins/custom-page/index.js.map +1 -0
  135. package/dist/lib/plugins/markdown/MdxPage.d.ts +3 -2
  136. package/dist/lib/plugins/markdown/MdxPage.js +7 -6
  137. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  138. package/dist/lib/plugins/markdown/Toc.js +1 -1
  139. package/dist/lib/plugins/markdown/Toc.js.map +1 -1
  140. package/dist/lib/plugins/markdown/generateRoutes.d.ts +3 -3
  141. package/dist/lib/plugins/markdown/generateRoutes.js +4 -4
  142. package/dist/lib/plugins/markdown/generateRoutes.js.map +1 -1
  143. package/dist/lib/plugins/markdown/index.d.ts +4 -1
  144. package/dist/lib/plugins/markdown/index.js +3 -7
  145. package/dist/lib/plugins/markdown/index.js.map +1 -1
  146. package/dist/lib/plugins/openapi/OperationList.js +17 -5
  147. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  148. package/dist/lib/plugins/openapi/OperationListItem.js +10 -5
  149. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  150. package/dist/lib/plugins/openapi/ParameterList.js +1 -1
  151. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  152. package/dist/lib/plugins/openapi/ParameterListItem.js +1 -1
  153. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  154. package/dist/lib/plugins/openapi/{MakeRequest.d.ts → PlaygroundDialogWrapper.d.ts} +1 -1
  155. package/dist/lib/plugins/openapi/{MakeRequest.js → PlaygroundDialogWrapper.js} +4 -16
  156. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -0
  157. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +1 -9
  158. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  159. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +1 -1
  160. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  161. package/dist/lib/plugins/openapi/Route.d.ts +6 -0
  162. package/dist/lib/plugins/openapi/Route.js +8 -0
  163. package/dist/lib/plugins/openapi/Route.js.map +1 -0
  164. package/dist/lib/plugins/openapi/SchemaListView.js +6 -27
  165. package/dist/lib/plugins/openapi/SchemaListView.js.map +1 -1
  166. package/dist/lib/plugins/openapi/SchemaListViewItem.d.ts +7 -0
  167. package/dist/lib/plugins/openapi/SchemaListViewItem.js +16 -0
  168. package/dist/lib/plugins/openapi/SchemaListViewItem.js.map +1 -0
  169. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.d.ts +8 -0
  170. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.js +17 -0
  171. package/dist/lib/plugins/openapi/SchemaListViewItemGroup.js.map +1 -0
  172. package/dist/lib/plugins/openapi/Sidecar.js +10 -8
  173. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  174. package/dist/lib/plugins/openapi/SidecarBox.js +1 -1
  175. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  176. package/dist/lib/plugins/openapi/{Select.d.ts → SimpleSelect.d.ts} +3 -2
  177. package/dist/lib/plugins/openapi/SimpleSelect.js +5 -0
  178. package/dist/lib/plugins/openapi/SimpleSelect.js.map +1 -0
  179. package/dist/lib/plugins/openapi/StaggeredRender.d.ts +8 -0
  180. package/dist/lib/plugins/openapi/StaggeredRender.js +18 -0
  181. package/dist/lib/plugins/openapi/StaggeredRender.js.map +1 -0
  182. package/dist/lib/plugins/openapi/client/createMemoryClient.d.ts +12 -0
  183. package/dist/lib/plugins/openapi/client/createMemoryClient.js +46 -0
  184. package/dist/lib/plugins/openapi/client/createMemoryClient.js.map +1 -0
  185. package/dist/lib/plugins/openapi/client/createServer.d.ts +4 -0
  186. package/dist/lib/plugins/openapi/client/createServer.js +30 -0
  187. package/dist/lib/plugins/openapi/client/createServer.js.map +1 -0
  188. package/dist/lib/plugins/openapi/client/createWorkerClient.d.ts +10 -0
  189. package/dist/lib/plugins/openapi/{worker/createSharedWorkerClient.js → client/createWorkerClient.js} +15 -2
  190. package/dist/lib/plugins/openapi/client/createWorkerClient.js.map +1 -0
  191. package/dist/lib/plugins/openapi/client/interfaces.d.ts +4 -0
  192. package/dist/lib/plugins/openapi/client/interfaces.js +2 -0
  193. package/dist/lib/plugins/openapi/client/interfaces.js.map +1 -0
  194. package/dist/lib/plugins/openapi/{worker → client}/worker.js +2 -2
  195. package/dist/lib/plugins/openapi/client/worker.js.map +1 -0
  196. package/dist/lib/plugins/openapi/context.d.ts +5 -0
  197. package/dist/lib/plugins/openapi/context.js +11 -0
  198. package/dist/lib/plugins/openapi/context.js.map +1 -0
  199. package/dist/lib/plugins/openapi/index.d.ts +4 -18
  200. package/dist/lib/plugins/openapi/index.js +35 -20
  201. package/dist/lib/plugins/openapi/index.js.map +1 -1
  202. package/dist/lib/plugins/openapi/interfaces.d.ts +15 -0
  203. package/dist/lib/plugins/openapi/interfaces.js +2 -0
  204. package/dist/lib/plugins/openapi/interfaces.js.map +1 -0
  205. package/dist/lib/plugins/openapi/playground/Headers.d.ts +2 -3
  206. package/dist/lib/plugins/openapi/playground/Headers.js +16 -6
  207. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  208. package/dist/lib/plugins/openapi/playground/PathParams.d.ts +1 -1
  209. package/dist/lib/plugins/openapi/playground/Playground.d.ts +5 -4
  210. package/dist/lib/plugins/openapi/playground/Playground.js +22 -13
  211. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  212. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.d.ts +3 -0
  213. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +12 -0
  214. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -0
  215. package/dist/lib/plugins/openapi/playground/QueryParams.d.ts +1 -1
  216. package/dist/lib/plugins/openapi/playground/QueryParams.js +2 -1
  217. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  218. package/dist/lib/plugins/openapi/playground/createUrl.d.ts +1 -1
  219. package/dist/lib/plugins/openapi/util/prose.d.ts +1 -0
  220. package/dist/lib/plugins/openapi/util/prose.js +4 -0
  221. package/dist/lib/plugins/openapi/util/prose.js.map +1 -0
  222. package/dist/lib/plugins/openapi-worker.d.ts +1 -1
  223. package/dist/lib/plugins/openapi-worker.js +1 -1
  224. package/dist/lib/plugins/openapi-worker.js.map +1 -1
  225. package/dist/lib/plugins/redirect/index.d.ts +0 -1
  226. package/dist/lib/plugins/redirect/index.js +3 -4
  227. package/dist/lib/plugins/redirect/index.js.map +1 -1
  228. package/dist/lib/ui/Callout.js +2 -2
  229. package/dist/lib/ui/Callout.js.map +1 -1
  230. package/dist/lib/ui/Card.js +1 -1
  231. package/dist/lib/ui/Card.js.map +1 -1
  232. package/dist/lib/ui/DropdownMenu.d.ts +27 -0
  233. package/dist/lib/ui/DropdownMenu.js +36 -0
  234. package/dist/lib/ui/DropdownMenu.js.map +1 -0
  235. package/dist/lib/ui/button-variants.d.ts +2 -2
  236. package/dist/lib/ui/button-variants.js +1 -0
  237. package/dist/lib/ui/button-variants.js.map +1 -1
  238. package/dist/lib/util/MdxComponents.d.ts +2 -2
  239. package/dist/lib/util/MdxComponents.js +7 -5
  240. package/dist/lib/util/MdxComponents.js.map +1 -1
  241. package/dist/lib/util/groupBy.d.ts +1 -6
  242. package/dist/lib/util/groupBy.js +10 -8
  243. package/dist/lib/util/groupBy.js.map +1 -1
  244. package/dist/lib/util/joinPath.js +2 -1
  245. package/dist/lib/util/joinPath.js.map +1 -1
  246. package/dist/lib/util/logInit.d.ts +1 -0
  247. package/dist/lib/util/logInit.js +9 -0
  248. package/dist/lib/util/logInit.js.map +1 -0
  249. package/dist/lib/util/objectEntries.d.ts +4 -0
  250. package/dist/lib/util/objectEntries.js +2 -0
  251. package/dist/lib/util/objectEntries.js.map +1 -0
  252. package/dist/lib/util/renderIf.d.ts +1 -0
  253. package/dist/lib/util/renderIf.js +2 -0
  254. package/dist/lib/util/renderIf.js.map +1 -0
  255. package/dist/vite/build.js +30 -7
  256. package/dist/vite/build.js.map +1 -1
  257. package/dist/vite/config.d.ts +21 -12
  258. package/dist/vite/config.js +107 -55
  259. package/dist/vite/config.js.map +1 -1
  260. package/dist/vite/config.test.js +6 -3
  261. package/dist/vite/config.test.js.map +1 -1
  262. package/dist/vite/dev-server.d.ts +2 -1
  263. package/dist/vite/dev-server.js +44 -15
  264. package/dist/vite/dev-server.js.map +1 -1
  265. package/dist/vite/html.js +18 -5
  266. package/dist/vite/html.js.map +1 -1
  267. package/dist/vite/plugin-api-keys.js +7 -8
  268. package/dist/vite/plugin-api-keys.js.map +1 -1
  269. package/dist/vite/plugin-api.js +9 -20
  270. package/dist/vite/plugin-api.js.map +1 -1
  271. package/dist/vite/plugin-auth.js +5 -6
  272. package/dist/vite/plugin-auth.js.map +1 -1
  273. package/dist/vite/plugin-component.js +5 -2
  274. package/dist/vite/plugin-component.js.map +1 -1
  275. package/dist/vite/plugin-config.d.ts +0 -2
  276. package/dist/vite/plugin-config.js +2 -13
  277. package/dist/vite/plugin-config.js.map +1 -1
  278. package/dist/vite/plugin-custom-css.d.ts +6 -0
  279. package/dist/vite/plugin-custom-css.js +54 -0
  280. package/dist/vite/plugin-custom-css.js.map +1 -0
  281. package/dist/vite/plugin-docs.js +15 -5
  282. package/dist/vite/plugin-docs.js.map +1 -1
  283. package/dist/vite/plugin-mdx.d.ts +3 -1
  284. package/dist/vite/plugin-mdx.js +5 -5
  285. package/dist/vite/plugin-mdx.js.map +1 -1
  286. package/dist/vite/plugin-metadata.js +1 -1
  287. package/dist/vite/plugin-metadata.js.map +1 -1
  288. package/dist/vite/plugin-redirect.js +10 -10
  289. package/dist/vite/plugin-redirect.js.map +1 -1
  290. package/dist/vite/plugin.js +3 -5
  291. package/dist/vite/plugin.js.map +1 -1
  292. package/dist/vite/prerender.d.ts +17 -0
  293. package/dist/vite/prerender.js +79 -0
  294. package/dist/vite/prerender.js.map +1 -0
  295. package/lib/AnchorLink-Bj1hwDuD.js +705 -0
  296. package/lib/AnchorLink-Bj1hwDuD.js.map +1 -0
  297. package/lib/AuthenticationPlugin-RvXALgvS.js +52 -0
  298. package/lib/AuthenticationPlugin-RvXALgvS.js.map +1 -0
  299. package/lib/CategoryHeading-DMkTmmBh.js +10 -0
  300. package/lib/CategoryHeading-DMkTmmBh.js.map +1 -0
  301. package/lib/Combination-lAFQBd6U.js +2774 -0
  302. package/lib/Combination-lAFQBd6U.js.map +1 -0
  303. package/lib/DevPortalProvider-BBhQ8kgI.js +1125 -0
  304. package/lib/DevPortalProvider-BBhQ8kgI.js.map +1 -0
  305. package/lib/Markdown-BjRJKl_E.js +15028 -0
  306. package/lib/Markdown-BjRJKl_E.js.map +1 -0
  307. package/lib/MdxPage-DJTFOCbZ.js +190 -0
  308. package/lib/MdxPage-DJTFOCbZ.js.map +1 -0
  309. package/lib/OperationList-DDTtK3I7.js +5403 -0
  310. package/lib/OperationList-DDTtK3I7.js.map +1 -0
  311. package/lib/Route-Bsrd0acQ.js +13 -0
  312. package/lib/Route-Bsrd0acQ.js.map +1 -0
  313. package/lib/Select-CEnkyfyn.js +2223 -0
  314. package/lib/Select-CEnkyfyn.js.map +1 -0
  315. package/lib/Spinner-Ciq_pWU7.js +359 -0
  316. package/lib/Spinner-Ciq_pWU7.js.map +1 -0
  317. package/lib/_commonjsHelpers-BVfed4GL.js +29 -0
  318. package/lib/_commonjsHelpers-BVfed4GL.js.map +1 -0
  319. package/lib/assets/index-BPdJm2ty.js +1 -0
  320. package/lib/assets/index-BPdJm2ty.js.map +1 -0
  321. package/lib/assets/{worker-BCcpCNJ7.js → worker-BWwCA-wk.js} +10727 -10300
  322. package/lib/assets/worker-BWwCA-wk.js.map +1 -0
  323. package/lib/context-_fYfJFgk.js +14 -0
  324. package/lib/context-_fYfJFgk.js.map +1 -0
  325. package/lib/hook-BY1NP0kj.js +93 -0
  326. package/lib/hook-BY1NP0kj.js.map +1 -0
  327. package/lib/index-BE2a6gGC.js +726 -0
  328. package/lib/index-BE2a6gGC.js.map +1 -0
  329. package/lib/index-pI9JkN46.js +4765 -0
  330. package/lib/index-pI9JkN46.js.map +1 -0
  331. package/lib/jsx-runtime-BIr0WBt_.js +1526 -0
  332. package/lib/jsx-runtime-BIr0WBt_.js.map +1 -0
  333. package/lib/prism-bash.min-DadFsM4Z.js +1 -0
  334. package/lib/prism-bash.min-DadFsM4Z.js.map +1 -0
  335. package/lib/prism-csharp.min-Yizuc34Y.js +35 -0
  336. package/lib/prism-csharp.min-Yizuc34Y.js.map +1 -0
  337. package/lib/prism-java.min-d5iT_mOd.js +1 -0
  338. package/lib/prism-java.min-d5iT_mOd.js.map +1 -0
  339. package/lib/prism-json.min-B1GJqK1k.js +1 -0
  340. package/lib/prism-json.min-B1GJqK1k.js.map +1 -0
  341. package/lib/prism-markup-templating-DZrrEs0A.js +1 -0
  342. package/lib/prism-markup-templating-DZrrEs0A.js.map +1 -0
  343. package/lib/prism-objectivec.min-BXSWqpJJ.js +2 -0
  344. package/lib/prism-objectivec.min-BXSWqpJJ.js.map +1 -0
  345. package/lib/prism-php.min-o7FpoMP_.js +1 -0
  346. package/lib/prism-php.min-o7FpoMP_.js.map +1 -0
  347. package/lib/prism-ruby.min-C7LwcKyz.js +1 -0
  348. package/lib/prism-ruby.min-C7LwcKyz.js.map +1 -0
  349. package/lib/router-BiRCp01d.js +2971 -0
  350. package/lib/router-BiRCp01d.js.map +1 -0
  351. package/lib/slugify-CiPVjteN.js +28 -0
  352. package/lib/slugify-CiPVjteN.js.map +1 -0
  353. package/lib/state-DKdaQzvh.js +288 -0
  354. package/lib/state-DKdaQzvh.js.map +1 -0
  355. package/lib/urql-DMlBWUKL.js +1 -0
  356. package/lib/urql-DMlBWUKL.js.map +1 -0
  357. package/lib/zudoku.auth-auth0.js +10 -7
  358. package/lib/zudoku.auth-auth0.js.map +1 -0
  359. package/lib/zudoku.auth-clerk.js +59 -29
  360. package/lib/zudoku.auth-clerk.js.map +1 -0
  361. package/lib/zudoku.auth-openid.js +714 -538
  362. package/lib/zudoku.auth-openid.js.map +1 -0
  363. package/lib/zudoku.components.js +1793 -512
  364. package/lib/zudoku.components.js.map +1 -0
  365. package/lib/zudoku.openapi-worker.js +15035 -146
  366. package/lib/zudoku.openapi-worker.js.map +1 -0
  367. package/lib/zudoku.plugin-api-keys.js +313 -0
  368. package/lib/zudoku.plugin-api-keys.js.map +1 -0
  369. package/lib/zudoku.plugin-custom-page.js +13 -0
  370. package/lib/zudoku.plugin-custom-page.js.map +1 -0
  371. package/lib/zudoku.plugin-markdown.js +48 -0
  372. package/lib/zudoku.plugin-markdown.js.map +1 -0
  373. package/lib/zudoku.plugin-openapi.js +10 -0
  374. package/lib/zudoku.plugin-openapi.js.map +1 -0
  375. package/lib/zudoku.plugin-redirect.js +11 -0
  376. package/lib/zudoku.plugin-redirect.js.map +1 -0
  377. package/package.json +60 -24
  378. package/src/app/App.tsx +0 -41
  379. package/src/app/demo-cdn.html +26 -0
  380. package/src/app/demo.html +18 -0
  381. package/src/app/demo.tsx +45 -0
  382. package/src/app/entry.client.tsx +47 -0
  383. package/src/app/entry.server.tsx +160 -0
  384. package/src/app/main.css +80 -0
  385. package/src/app/main.tsx +86 -15
  386. package/src/app/standalone.html +20 -0
  387. package/src/app/standalone.tsx +51 -0
  388. package/src/app/tailwind.ts +2 -6
  389. package/src/lib/authentication/AuthenticationPlugin.tsx +38 -0
  390. package/src/lib/authentication/Callback.tsx +1 -1
  391. package/src/lib/authentication/authentication.ts +6 -12
  392. package/src/lib/authentication/components/SignIn.tsx +11 -0
  393. package/src/lib/authentication/components/SignOut.tsx +11 -0
  394. package/src/lib/authentication/components/SignUp.tsx +11 -0
  395. package/src/lib/authentication/hook.ts +2 -2
  396. package/src/lib/authentication/providers/auth0.tsx +4 -2
  397. package/src/lib/authentication/providers/clerk.tsx +63 -31
  398. package/src/lib/authentication/providers/openid.tsx +56 -16
  399. package/src/lib/components/Bootstrap.tsx +44 -0
  400. package/src/lib/components/DevPortal.tsx +55 -49
  401. package/src/lib/components/DeveloperHint.tsx +25 -0
  402. package/src/lib/components/ErrorPage.tsx +28 -0
  403. package/src/lib/components/Header.tsx +89 -28
  404. package/src/lib/components/Heading.tsx +26 -7
  405. package/src/lib/components/InlineCode.tsx +19 -0
  406. package/src/lib/components/Layout.tsx +9 -7
  407. package/src/lib/components/NotFoundPage.tsx +33 -0
  408. package/src/lib/components/SyntaxHighlight.tsx +26 -18
  409. package/src/lib/components/TopNavigation.tsx +6 -1
  410. package/src/lib/components/context/DevPortalProvider.ts +24 -4
  411. package/src/lib/components/index.ts +25 -3
  412. package/src/lib/components/navigation/SideNavigationCategory.tsx +3 -3
  413. package/src/lib/components/navigation/SideNavigationItem.tsx +1 -1
  414. package/src/lib/core/DevPortalContext.ts +54 -25
  415. package/src/lib/core/plugins.ts +26 -5
  416. package/src/lib/errors/ErrorAlert.tsx +21 -0
  417. package/src/lib/errors/RouterError.tsx +13 -0
  418. package/src/lib/errors/ServerError.tsx +5 -0
  419. package/src/lib/errors/TopLevelError.tsx +8 -0
  420. package/src/lib/oas/graphql/index.ts +9 -5
  421. package/src/lib/oas/parser/index.ts +41 -20
  422. package/src/lib/plugins/{api-key → api-keys}/CreateApiKey.tsx +1 -1
  423. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +29 -0
  424. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +139 -0
  425. package/src/lib/plugins/{api-key → api-keys}/index.tsx +16 -40
  426. package/src/lib/plugins/custom-page/index.tsx +22 -0
  427. package/src/lib/plugins/markdown/MdxPage.tsx +51 -34
  428. package/src/lib/plugins/markdown/Toc.tsx +1 -1
  429. package/src/lib/plugins/markdown/generateRoutes.tsx +16 -6
  430. package/src/lib/plugins/markdown/index.tsx +10 -7
  431. package/src/lib/plugins/openapi/OperationList.tsx +46 -10
  432. package/src/lib/plugins/openapi/OperationListItem.tsx +68 -42
  433. package/src/lib/plugins/openapi/ParameterList.tsx +1 -1
  434. package/src/lib/plugins/openapi/ParameterListItem.tsx +3 -4
  435. package/src/lib/plugins/openapi/{MakeRequest.tsx → PlaygroundDialogWrapper.tsx} +3 -19
  436. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +2 -16
  437. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +3 -1
  438. package/src/lib/plugins/openapi/Route.tsx +21 -0
  439. package/src/lib/plugins/openapi/SchemaListView.tsx +23 -192
  440. package/src/lib/plugins/openapi/SchemaListViewItem.tsx +110 -0
  441. package/src/lib/plugins/openapi/SchemaListViewItemGroup.tsx +63 -0
  442. package/src/lib/plugins/openapi/Sidecar.tsx +15 -10
  443. package/src/lib/plugins/openapi/SidecarBox.tsx +1 -1
  444. package/src/lib/plugins/openapi/{Select.tsx → SimpleSelect.tsx} +6 -3
  445. package/src/lib/plugins/openapi/StaggeredRender.tsx +31 -0
  446. package/src/lib/plugins/openapi/client/createMemoryClient.ts +56 -0
  447. package/src/lib/plugins/openapi/client/createServer.ts +33 -0
  448. package/src/lib/plugins/openapi/{worker/createSharedWorkerClient.ts → client/createWorkerClient.ts} +21 -2
  449. package/src/lib/plugins/openapi/client/interfaces.ts +5 -0
  450. package/src/lib/plugins/openapi/{worker → client}/worker.ts +3 -3
  451. package/src/lib/plugins/openapi/context.tsx +16 -0
  452. package/src/lib/plugins/openapi/index.tsx +59 -52
  453. package/src/lib/plugins/openapi/interfaces.ts +9 -0
  454. package/src/lib/plugins/openapi/playground/Headers.tsx +60 -33
  455. package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -1
  456. package/src/lib/plugins/openapi/playground/Playground.tsx +172 -193
  457. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +36 -0
  458. package/src/lib/plugins/openapi/playground/QueryParams.tsx +7 -2
  459. package/src/lib/plugins/openapi/playground/createUrl.ts +1 -1
  460. package/src/lib/plugins/openapi/util/prose.ts +7 -0
  461. package/src/lib/plugins/openapi-worker.ts +1 -1
  462. package/src/lib/plugins/redirect/index.tsx +3 -4
  463. package/src/lib/ui/Callout.tsx +4 -4
  464. package/src/lib/ui/Card.tsx +1 -1
  465. package/src/lib/ui/DropdownMenu.tsx +199 -0
  466. package/src/lib/ui/button-variants.ts +1 -0
  467. package/src/lib/util/MdxComponents.tsx +7 -15
  468. package/src/lib/util/groupBy.ts +7 -12
  469. package/src/lib/util/joinPath.tsx +2 -1
  470. package/src/lib/util/logInit.ts +9 -0
  471. package/src/lib/util/objectEntries.ts +5 -0
  472. package/src/lib/util/renderIf.ts +4 -0
  473. package/dist/lib/components/Link.d.ts +0 -1
  474. package/dist/lib/components/Link.js +0 -2
  475. package/dist/lib/components/Link.js.map +0 -1
  476. package/dist/lib/components/Router.d.ts +0 -4
  477. package/dist/lib/components/Router.js +0 -20
  478. package/dist/lib/components/Router.js.map +0 -1
  479. package/dist/lib/core/helmet.d.ts +0 -4
  480. package/dist/lib/core/helmet.js +0 -5
  481. package/dist/lib/core/helmet.js.map +0 -1
  482. package/dist/lib/core/icons.d.ts +0 -1
  483. package/dist/lib/core/icons.js +0 -2
  484. package/dist/lib/core/icons.js.map +0 -1
  485. package/dist/lib/core/router.d.ts +0 -1
  486. package/dist/lib/core/router.js +0 -2
  487. package/dist/lib/core/router.js.map +0 -1
  488. package/dist/lib/plugins/api-key/CreateApiKey.js.map +0 -1
  489. package/dist/lib/plugins/api-key/SettingsApiKeys.js +0 -38
  490. package/dist/lib/plugins/api-key/SettingsApiKeys.js.map +0 -1
  491. package/dist/lib/plugins/api-key/index.js.map +0 -1
  492. package/dist/lib/plugins/index.d.ts +0 -4
  493. package/dist/lib/plugins/index.js +0 -5
  494. package/dist/lib/plugins/index.js.map +0 -1
  495. package/dist/lib/plugins/openapi/MakeRequest.js.map +0 -1
  496. package/dist/lib/plugins/openapi/Select.js +0 -5
  497. package/dist/lib/plugins/openapi/Select.js.map +0 -1
  498. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.d.ts +0 -5
  499. package/dist/lib/plugins/openapi/worker/createSharedWorkerClient.js.map +0 -1
  500. package/dist/lib/plugins/openapi/worker/shared-worker.d.ts +0 -1
  501. package/dist/lib/plugins/openapi/worker/shared-worker.js +0 -6
  502. package/dist/lib/plugins/openapi/worker/shared-worker.js.map +0 -1
  503. package/dist/lib/plugins/openapi/worker/worker.js.map +0 -1
  504. package/dist/vite/common.d.ts +0 -1
  505. package/dist/vite/common.js +0 -5
  506. package/dist/vite/common.js.map +0 -1
  507. package/dist/vite/plugin-html.d.ts +0 -3
  508. package/dist/vite/plugin-html.js +0 -47
  509. package/dist/vite/plugin-html.js.map +0 -1
  510. package/dist/vite/plugin-openapi-worker.d.ts +0 -4
  511. package/dist/vite/plugin-openapi-worker.js +0 -28
  512. package/dist/vite/plugin-openapi-worker.js.map +0 -1
  513. package/lib/Spinner-BINYpvLB.js +0 -8412
  514. package/lib/clerk-Wslx_mPo.js +0 -19685
  515. package/lib/index-PyGcnQFX.js +0 -3462
  516. package/lib/loglevel-CoH7VSwE.js +0 -152
  517. package/lib/state-2Hu1renZ.js +0 -313
  518. package/lib/zudoku.plugins.js +0 -19892
  519. package/src/lib/components/Link.tsx +0 -1
  520. package/src/lib/components/Router.tsx +0 -28
  521. package/src/lib/core/helmet.ts +0 -5
  522. package/src/lib/core/icons.tsx +0 -1
  523. package/src/lib/core/router.tsx +0 -1
  524. package/src/lib/plugins/api-key/SettingsApiKeys.tsx +0 -117
  525. package/src/lib/plugins/index.ts +0 -4
  526. package/src/lib/plugins/openapi/worker/shared-worker.ts +0 -5
  527. /package/dist/lib/plugins/{api-key → api-keys}/CreateApiKey.d.ts +0 -0
  528. /package/dist/lib/plugins/{api-key → api-keys}/SettingsApiKeys.d.ts +0 -0
  529. /package/dist/lib/plugins/openapi/{worker → client}/worker.d.ts +0 -0
@@ -1,26 +1,25 @@
1
- import logger from "loglevel";
2
- import { Outlet, useRouteError } from "react-router-dom";
1
+ import { type RouteObject } from "react-router-dom";
3
2
  import invariant from "tiny-invariant";
4
- import { useAuth } from "../../authentication/hook.js";
5
3
  import { DevPortalContext } from "../../core/DevPortalContext.js";
6
4
  import {
7
5
  type ApiIdentityPlugin,
8
6
  type DevPortalPlugin,
7
+ ProfileMenuPlugin,
9
8
  } from "../../core/plugins.js";
10
- import { Button } from "../../ui/Button.js";
9
+ import { RouterError } from "../../errors/RouterError.js";
11
10
  import { CreateApiKey } from "./CreateApiKey.js";
11
+ import { ProtectedRoute } from "./ProtectedRoute.js";
12
12
  import { SettingsApiKeys } from "./SettingsApiKeys.js";
13
13
 
14
- export type ApiKeyResults = Promise<ApiKey[]>;
15
14
  const DEFAULT_API_KEY_ENDPOINT =
16
15
  "https://zudoku-rewiringamerica-main-ef9c9c0.d2.zuplo.dev";
17
16
 
18
17
  export type ApiKeyService = {
19
- getKeys: (context: DevPortalContext) => ApiKeyResults;
18
+ getKeys: (context: DevPortalContext) => Promise<ApiKey[]>;
20
19
  rollKey?: (id: string, context: DevPortalContext) => Promise<void>;
21
20
  deleteKey?: (id: string, context: DevPortalContext) => Promise<void>;
22
21
  updateKeyDescription?: (
23
- apiKey: { jd: string; description: string },
22
+ apiKey: { id: string; description: string },
24
23
  context: DevPortalContext,
25
24
  ) => Promise<void>;
26
25
  getUsage?: (apiKeys: string[], context: DevPortalContext) => Promise<void>;
@@ -82,39 +81,9 @@ const createDefaultHandler = (endpoint: string): ApiKeyService => {
82
81
  };
83
82
  };
84
83
 
85
- const ProtectedRoute = () => {
86
- const auth = useAuth();
87
-
88
- // TODO: should we suspend here somehow?
89
- if (auth.isPending) {
90
- return null;
91
- }
92
-
93
- return auth.isAuthenticated ? (
94
- <Outlet />
95
- ) : (
96
- <div className="flex flex-col justify-center gap-2 items-center h-1/2 my-12">
97
- Please login first to view this page
98
- <Button onClick={() => auth.login()}>Login</Button>
99
- </div>
100
- );
101
- };
102
-
103
- const SettingsErrorBoundary = () => {
104
- const error = useRouteError();
105
- logger.error(String(error));
106
-
107
- return (
108
- <div className="flex flex-col justify-center gap-2 items-center h-1/2 my-12">
109
- <h1>Something went wrong</h1>
110
- {error instanceof Error && <p>{error.message}</p>}
111
- </div>
112
- );
113
- };
114
-
115
84
  export const apiKeyPlugin = (
116
85
  options: ApiKeyPluginOptions,
117
- ): DevPortalPlugin & ApiIdentityPlugin => {
86
+ ): DevPortalPlugin & ApiIdentityPlugin & ProfileMenuPlugin => {
118
87
  const endpoint =
119
88
  "endpoint" in options ? options.endpoint : DEFAULT_API_KEY_ENDPOINT;
120
89
 
@@ -122,6 +91,12 @@ export const apiKeyPlugin = (
122
91
  "getKeys" in options ? options : createDefaultHandler(endpoint);
123
92
 
124
93
  return {
94
+ getProfileMenuItems: () => [
95
+ {
96
+ label: "API Keys",
97
+ path: "/settings/api-keys",
98
+ },
99
+ ],
125
100
  getIdentities: async (context) => {
126
101
  try {
127
102
  const keys = await service.getKeys(context);
@@ -138,11 +113,12 @@ export const apiKeyPlugin = (
138
113
  return [];
139
114
  }
140
115
  },
141
- getRoutes: () => {
116
+ getRoutes: (): RouteObject[] => {
117
+ // TODO: Make lazy
142
118
  return [
143
119
  {
144
120
  element: <ProtectedRoute />,
145
- errorElement: <SettingsErrorBoundary />,
121
+ errorElement: <RouterError />,
146
122
  children: [
147
123
  {
148
124
  path: "/settings/api-keys",
@@ -0,0 +1,22 @@
1
+ import type { ReactNode } from "react";
2
+ import type { RouteObject } from "react-router-dom";
3
+ import { ProseClasses } from "../../components/Markdown.js";
4
+ import type { DevPortalPlugin, NavigationPlugin } from "../../core/plugins.js";
5
+
6
+ type CustomPageConfig = Array<{
7
+ path: string;
8
+ element: ReactNode;
9
+ }>;
10
+
11
+ export const customPagePlugin = (
12
+ config: CustomPageConfig,
13
+ ): DevPortalPlugin & NavigationPlugin => {
14
+ return {
15
+ getRoutes: (): RouteObject[] =>
16
+ config.map(({ path, element }) => ({
17
+ path,
18
+ // TODO: we should componentize prose pages
19
+ element: <div className={ProseClasses + " max-w-full"}>{element}</div>,
20
+ })),
21
+ };
22
+ };
@@ -1,18 +1,18 @@
1
1
  import { useMDXComponents } from "@mdx-js/react";
2
+ import { Helmet } from "@zudoku/react-helmet-async";
2
3
  import { useMemo, type PropsWithChildren, type ReactNode } from "react";
4
+ import { Link, useLocation } from "react-router-dom";
3
5
  import { CategoryHeading } from "../../components/CategoryHeading.js";
4
6
  import { Heading } from "../../components/Heading.js";
5
7
  import { ProseClasses } from "../../components/Markdown.js";
6
8
  import { useTopNavigationItem } from "../../components/context/DevPortalProvider.js";
7
9
  import { isPathItem } from "../../components/navigation/util.js";
8
- import { Helmet } from "../../core/helmet.js";
9
- import { Link, useLocation } from "../../core/router.js";
10
10
  import type { MdxComponentsType } from "../../util/MdxComponents.js";
11
11
  import { cn } from "../../util/cn.js";
12
12
  import slugify from "../../util/slugify.js";
13
13
  import { traverseNavigation } from "../../util/traverseNavigation.js";
14
14
  import { Toc } from "./Toc.js";
15
- import type { MDXImport } from "./index.js";
15
+ import { MarkdownPluginDefaultOptions, MDXImport } from "./index.js";
16
16
 
17
17
  const MarkdownHeadings = {
18
18
  h2: ({ children, id }) => (
@@ -31,10 +31,12 @@ const MarkdownHeadings = {
31
31
  export const MdxPage = ({
32
32
  mdxComponent: MdxComponent,
33
33
  frontmatter = {},
34
+ defaultOptions,
34
35
  tableOfContents,
35
36
  }: PropsWithChildren<
36
37
  Omit<MDXImport, "default"> & {
37
38
  mdxComponent: MDXImport["default"];
39
+ defaultOptions?: MarkdownPluginDefaultOptions;
38
40
  }
39
41
  >) => {
40
42
  const navItem = useTopNavigationItem();
@@ -50,10 +52,11 @@ export const MdxPage = ({
50
52
 
51
53
  const title = frontmatter.title;
52
54
  const category = frontmatter.category ?? categoryTitle;
53
- const hideToc = frontmatter.toc === false;
54
-
55
+ const hideToc = frontmatter.toc === false || defaultOptions?.toc === false;
55
56
  const pageTitle =
56
57
  tableOfContents.find((item) => item.depth === 1)?.value ?? title;
58
+ const hidePager =
59
+ frontmatter.disablePager ?? defaultOptions?.disablePager ?? false;
57
60
 
58
61
  const tocEntries =
59
62
  tableOfContents.find((item) => item.depth === 1)?.children ??
@@ -112,35 +115,49 @@ export const MdxPage = ({
112
115
  <MdxComponent
113
116
  components={{ ...useMDXComponents(), ...MarkdownHeadings }}
114
117
  />
115
- <hr />
116
- <div className="not-prose flex items-center justify-between gap-8">
117
- {prev.path ? (
118
- <Link
119
- to={prev.path}
120
- className="flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md"
121
- title={typeof prev.label === "string" ? prev.label : undefined}
122
- >
123
- <div className="text-sm text-muted-foreground">
124
- Previous page
125
- </div>
126
- <div className="text-lg text-primary truncate">{prev.label}</div>
127
- </Link>
128
- ) : (
129
- <div className="flex-1" />
130
- )}
131
- {next.path ? (
132
- <Link
133
- to={next.path}
134
- className="flex flex-col items-stretch gap-2 flex-1 truncate border border-border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md"
135
- title={typeof next.label === "string" ? next.label : undefined}
136
- >
137
- <div className="text-sm text-muted-foreground">Next page →</div>
138
- <div className="text-lg text-primary truncate">{next.label}</div>
139
- </Link>
140
- ) : (
141
- <div className="flex-1" />
142
- )}
143
- </div>
118
+ {!hidePager && (
119
+ <>
120
+ <hr />
121
+ <div className="not-prose flex items-center justify-between gap-8">
122
+ {prev.path ? (
123
+ <Link
124
+ to={prev.path}
125
+ className="flex flex-col items-stretch gap-2 flex-1 truncate border rounded px-6 py-4 text-start hover:border-primary/85 transition shadow-sm hover:shadow-md"
126
+ title={
127
+ typeof prev.label === "string" ? prev.label : undefined
128
+ }
129
+ >
130
+ <div className="text-sm text-muted-foreground">
131
+ Previous page
132
+ </div>
133
+ <div className="text-lg text-primary truncate">
134
+ {prev.label}
135
+ </div>
136
+ </Link>
137
+ ) : (
138
+ <div className="flex-1" />
139
+ )}
140
+ {next.path ? (
141
+ <Link
142
+ to={next.path}
143
+ className="flex flex-col items-stretch gap-2 flex-1 truncate border rounded px-6 py-4 text-end hover:border-primary/85 transition shadow-sm hover:shadow-md"
144
+ title={
145
+ typeof next.label === "string" ? next.label : undefined
146
+ }
147
+ >
148
+ <div className="text-sm text-muted-foreground">
149
+ Next page →
150
+ </div>
151
+ <div className="text-lg text-primary truncate">
152
+ {next.label}
153
+ </div>
154
+ </Link>
155
+ ) : (
156
+ <div className="flex-1" />
157
+ )}
158
+ </div>
159
+ </>
160
+ )}
144
161
  </div>
145
162
  <div className="hidden xl:block">
146
163
  {showToc && <Toc entries={tocEntries} />}
@@ -1,4 +1,5 @@
1
1
  import type { TocEntry } from "@stefanprobst/rehype-extract-toc";
2
+ import { ListTreeIcon } from "lucide-react";
2
3
  import {
3
4
  useEffect,
4
5
  useRef,
@@ -8,7 +9,6 @@ import {
8
9
  } from "react";
9
10
  import { AnchorLink } from "../../components/AnchorLink.js";
10
11
  import { useViewportAnchor } from "../../components/context/ViewportAnchorContext.js";
11
- import { ListTreeIcon } from "../../core/icons.js";
12
12
  import { cn } from "../../util/cn.js";
13
13
 
14
14
  const DATA_ANCHOR_ATTR = "data-active";
@@ -1,12 +1,16 @@
1
+ import { Navigate, type RouteObject } from "react-router-dom";
1
2
  import { useTopNavigationItem } from "../../components/context/DevPortalProvider.js";
2
3
  import { isPathItem } from "../../components/navigation/util.js";
3
- import { Navigate, type RouteObject } from "../../core/router.js";
4
4
  import { traverseNavigation } from "../../util/traverseNavigation.js";
5
- import { MdxPage } from "./MdxPage.js";
6
- import type { MarkdownPluginOptions } from "./index.js";
5
+
6
+ import {
7
+ MarkdownPluginDefaultOptions,
8
+ MarkdownPluginOptions,
9
+ } from "./index.js";
7
10
 
8
11
  export const generateRoutes = (
9
12
  markdownFiles: MarkdownPluginOptions["markdownFiles"],
13
+ defaultOptions?: MarkdownPluginDefaultOptions,
10
14
  ): RouteObject[] => {
11
15
  const routes = Object.entries(markdownFiles).flatMap(
12
16
  ([file, importPromise]) => {
@@ -25,17 +29,23 @@ export const generateRoutes = (
25
29
  return {
26
30
  path: routePath,
27
31
  lazy: async () => {
32
+ const { MdxPage } = await import("./MdxPage.js");
28
33
  const { default: Component, ...props } = await importPromise();
29
-
30
34
  return {
31
- element: <MdxPage mdxComponent={Component} {...props} />,
35
+ element: (
36
+ <MdxPage
37
+ mdxComponent={Component}
38
+ {...props}
39
+ defaultOptions={defaultOptions}
40
+ />
41
+ ),
32
42
  };
33
43
  },
34
44
  } satisfies RouteObject;
35
45
  },
36
46
  );
37
47
 
38
- const rootRoutes = Array.from(
48
+ const rootRoutes: RouteObject[] = Array.from(
39
49
  new Set(routes.map((route) => route.path.split("/").at(0))),
40
50
  ).map((dir) => ({
41
51
  path: `/${dir}`,
@@ -5,13 +5,19 @@ import { generateRoutes } from "./generateRoutes.js";
5
5
 
6
6
  export type MarkdownPluginOptions = {
7
7
  markdownFiles: Record<string, () => Promise<MDXImport>>;
8
+ defaultOptions?: MarkdownPluginDefaultOptions;
8
9
  };
10
+ export type MarkdownPluginDefaultOptions = Pick<
11
+ Frontmatter,
12
+ "toc" | "disablePager"
13
+ >;
9
14
 
10
15
  export type Frontmatter = {
11
16
  title?: string;
12
17
  description?: string;
13
18
  category?: string;
14
19
  toc?: boolean;
20
+ disablePager?: boolean;
15
21
  };
16
22
 
17
23
  export type MDXImport = {
@@ -22,10 +28,7 @@ export type MDXImport = {
22
28
 
23
29
  export const markdownPlugin = ({
24
30
  markdownFiles,
25
- }: MarkdownPluginOptions): DevPortalPlugin => {
26
- return {
27
- getRoutes() {
28
- return generateRoutes(markdownFiles);
29
- },
30
- };
31
- };
31
+ defaultOptions,
32
+ }: MarkdownPluginOptions): DevPortalPlugin => ({
33
+ getRoutes: () => generateRoutes(markdownFiles, defaultOptions),
34
+ });
@@ -1,11 +1,17 @@
1
1
  import { ResultOf } from "@graphql-typed-document-node/core";
2
2
  import { CategoryHeading } from "../../components/CategoryHeading.js";
3
+ import { DeveloperHint } from "../../components/DeveloperHint.js";
4
+ import { ErrorPage } from "../../components/ErrorPage.js";
3
5
  import { Heading } from "../../components/Heading.js";
4
- import { Markdown, ProseClasses } from "../../components/Markdown.js";
6
+ import { InlineCode } from "../../components/InlineCode.js";
7
+ import { Markdown } from "../../components/Markdown.js";
8
+ import { SyntaxHighlight } from "../../components/SyntaxHighlight.js";
5
9
  import { cn } from "../../util/cn.js";
6
10
  import { OperationListItem } from "./OperationListItem.js";
11
+ import StaggeredRender from "./StaggeredRender.js";
12
+ import { useOasConfig } from "./context.js";
7
13
  import { graphql } from "./graphql/index.js";
8
- import { useOasConfig } from "./index.js";
14
+ import { SchemaProseClasses } from "./util/prose.js";
9
15
  import { useQuery } from "./util/urql.js";
10
16
 
11
17
  export const OperationsFragment = graphql(/* GraphQL */ `
@@ -90,11 +96,39 @@ export const OperationList = () => {
90
96
  context: suspenseContext,
91
97
  });
92
98
 
99
+ const error = result.error?.graphQLErrors.at(0);
100
+
101
+ // Looks like there is no Suspense level error handling (yet)?
102
+ // So we handle the error case in the component directly
103
+ if (error) {
104
+ return (
105
+ <ErrorPage
106
+ category="Error"
107
+ title="Schema cannot be displayed"
108
+ message={
109
+ <>
110
+ <DeveloperHint className="mb-4">
111
+ Check your configuration value <InlineCode>apis.type</InlineCode>{" "}
112
+ and <InlineCode>apis.input</InlineCode> in the Zudoku config.
113
+ </DeveloperHint>
114
+ An error occurred while trying to fetch the API reference:
115
+ <SyntaxHighlight code={error.toString()} language="plain" />
116
+ </>
117
+ }
118
+ />
119
+ );
120
+ }
121
+
93
122
  if (!result.data) return null;
94
123
 
95
124
  return (
96
125
  <div className="pt-[--padding-content-top]">
97
- <div className={cn(ProseClasses, "mb-16")}>
126
+ <div
127
+ className={cn(
128
+ SchemaProseClasses,
129
+ "mb-16 max-w-full prose-img:max-w-prose",
130
+ )}
131
+ >
98
132
  <CategoryHeading>Overview</CategoryHeading>
99
133
  <Heading level={1} id="description" registerSidebarAnchor>
100
134
  {result.data.schema.title}
@@ -108,17 +142,19 @@ export const OperationList = () => {
108
142
  {tag.name && <CategoryHeading>{tag.name}</CategoryHeading>}
109
143
  {tag.description && (
110
144
  <Markdown
111
- className={`${ProseClasses} mt-2 mb-12`}
145
+ className={`${SchemaProseClasses} mt-2 mb-12`}
112
146
  content={tag.description}
113
147
  />
114
148
  )}
115
149
  <div className="operation mb-12">
116
- {tag.operations.map((fragment) => (
117
- <OperationListItem
118
- key={fragment.slug}
119
- operationFragment={fragment}
120
- />
121
- ))}
150
+ <StaggeredRender>
151
+ {tag.operations.map((fragment) => (
152
+ <OperationListItem
153
+ key={fragment.slug}
154
+ operationFragment={fragment}
155
+ />
156
+ ))}
157
+ </StaggeredRender>
122
158
  </div>
123
159
  </div>
124
160
  ))}
@@ -1,11 +1,14 @@
1
1
  import { Heading } from "../../components/Heading.js";
2
- import { Markdown, ProseClasses } from "../../components/Markdown.js";
2
+ import { Markdown } from "../../components/Markdown.js";
3
3
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../ui/Tabs.js";
4
+ import { groupBy } from "../../util/groupBy.js";
5
+ import { renderIf } from "../../util/renderIf.js";
4
6
  import { OperationsFragment } from "./OperationList.js";
5
7
  import { ParameterList } from "./ParameterList.js";
6
8
  import { SchemaListView } from "./SchemaListView.js";
7
9
  import { Sidecar } from "./Sidecar.js";
8
10
  import { FragmentType, useFragment } from "./graphql/index.js";
11
+ import { SchemaProseClasses } from "./util/prose.js";
9
12
 
10
13
  export const PARAM_GROUPS = ["path", "query", "header", "cookie"] as const;
11
14
  export type ParameterGroup = (typeof PARAM_GROUPS)[number];
@@ -16,28 +19,29 @@ export const OperationListItem = ({
16
19
  operationFragment: FragmentType<typeof OperationsFragment>;
17
20
  }) => {
18
21
  const operation = useFragment(OperationsFragment, operationFragment);
19
- const groupedParameters = Object.groupBy(
22
+ const groupedParameters = groupBy(
20
23
  operation.parameters ?? [],
21
24
  (param) => param.in,
22
25
  );
23
- const first = operation.responses.find((re) => re.statusCode === "200");
26
+
27
+ const first = operation.responses.at(0);
24
28
  return (
25
29
  <div
26
30
  key={operation.operationId}
27
- className="grid grid-cols-2 gap-8 items-start border-b-2 mb-16 pb-16 border-border"
31
+ className="grid grid-cols-1 lg:grid-cols-[4fr_3fr] gap-8 items-start border-b-2 mb-16 pb-16 border-border"
28
32
  >
29
- <div className={ProseClasses}>
30
- <Heading
31
- level={2}
32
- className="mt-0"
33
- id={operation.slug}
34
- registerSidebarAnchor
35
- >
33
+ <div className="flex flex-col gap-4">
34
+ <Heading level={2} id={operation.slug} registerSidebarAnchor>
36
35
  {operation.summary}
37
36
  </Heading>
38
- {operation.description && <Markdown content={operation.description} />}
37
+ {operation.description && (
38
+ <Markdown
39
+ className={SchemaProseClasses}
40
+ content={operation.description}
41
+ />
42
+ )}
39
43
  {operation.parameters && operation.parameters.length > 0 && (
40
- <div className="mt-4">
44
+ <>
41
45
  {PARAM_GROUPS.flatMap((group) =>
42
46
  groupedParameters[group]?.length ? (
43
47
  <ParameterList
@@ -50,37 +54,59 @@ export const OperationListItem = ({
50
54
  []
51
55
  ),
52
56
  )}
57
+ </>
58
+ )}
59
+ {renderIf(operation.requestBody?.content?.at(0)?.schema, (schema) => (
60
+ <div className="mt-4 flex flex-col gap-4">
61
+ <Heading level={3} className="capitalize">
62
+ Request Body
63
+ </Heading>
64
+ <SchemaListView schema={schema} />
53
65
  </div>
66
+ ))}
67
+ {operation.responses.length > 0 && (
68
+ <>
69
+ <Heading level={3} className="capitalize mt-8 pt-8 border-t">
70
+ Responses
71
+ </Heading>
72
+ <Tabs defaultValue={`${first?.statusCode}${first?.description}`}>
73
+ {operation.responses.length > 1 && (
74
+ <TabsList>
75
+ {operation.responses.map((response) => (
76
+ <TabsTrigger
77
+ value={response.statusCode + response.description}
78
+ key={response.statusCode}
79
+ title={response.description}
80
+ >
81
+ {response.statusCode}
82
+ </TabsTrigger>
83
+ ))}
84
+ </TabsList>
85
+ )}
86
+ <ul className="list-none m-0 px-0 overflow-hidden">
87
+ {operation.responses.map((response) => (
88
+ <TabsContent
89
+ value={response.statusCode + response.description}
90
+ key={response.statusCode}
91
+ >
92
+ {renderIf(
93
+ response.content?.find((content) => content.schema),
94
+ (content) => {
95
+ return (
96
+ <SchemaListView schema={content.schema} name="" />
97
+ );
98
+ },
99
+ ) ?? (
100
+ <div className="border-border font-mono text-sm border rounded p-4">
101
+ No response body
102
+ </div>
103
+ )}
104
+ </TabsContent>
105
+ ))}
106
+ </ul>
107
+ </Tabs>
108
+ </>
54
109
  )}
55
- <Heading level={3} className="capitalize">
56
- Responses
57
- </Heading>
58
- <Tabs defaultValue={`${first?.statusCode}${first?.description}`}>
59
- <TabsList>
60
- {operation.responses.map((response) => (
61
- <TabsTrigger
62
- value={response.statusCode + response.description}
63
- key={response.statusCode}
64
- title={response.description}
65
- >
66
- {response.statusCode}
67
- </TabsTrigger>
68
- ))}
69
- </TabsList>
70
- <ul className="list-none m-0 px-0 overflow-hidden">
71
- {operation.responses.map((response) => (
72
- <TabsContent
73
- value={response.statusCode + response.description}
74
- key={response.statusCode}
75
- >
76
- <SchemaListView
77
- schema={response.content?.at(0)?.schema}
78
- name=""
79
- />
80
- </TabsContent>
81
- ))}
82
- </ul>
83
- </Tabs>
84
110
  </div>
85
111
 
86
112
  <Sidecar operation={operation} />
@@ -18,7 +18,7 @@ export const ParameterList = ({
18
18
  <Heading level={3} id={`${id}/${group}-parameters`} className="capitalize">
19
19
  {group === "header" ? "Headers" : `${group} Parameters`}
20
20
  </Heading>
21
- <ul className="list-none m-0 px-0 overflow-hidden">
21
+ <ul className="list-none m-0 px-0 overflow-hidden border divide-y divide-border rounded">
22
22
  {parameters.map((parameter) => (
23
23
  <ParameterListItem
24
24
  key={`${parameter.name}-${parameter.in}`}
@@ -28,14 +28,13 @@ export const ParameterListItem = ({
28
28
  group: ParameterGroup;
29
29
  id: string;
30
30
  }) => (
31
- <li className="not-prose px-2 py-4 border-t border-border bg-border/20 text-sm flex flex-col gap-1">
31
+ <li className="p-4 bg-border/20 text-sm flex flex-col gap-1">
32
32
  <div className="flex items-center gap-2">
33
33
  <code>
34
34
  {group === "path" ? (
35
35
  <ColorizedParam
36
36
  name={parameter.name}
37
37
  backgroundOpacity="15%"
38
- className="px-1"
39
38
  slug={id + "-" + parameter.name.toLocaleLowerCase()}
40
39
  />
41
40
  ) : (
@@ -43,12 +42,12 @@ export const ParameterListItem = ({
43
42
  )}
44
43
  </code>
45
44
  {parameter.required && (
46
- <span className="py-px px-1.5 font-medium text-xs bg-primary/75 text-muted rounded-lg">
45
+ <span className="py-px px-1.5 font-medium bg-primary/75 text-muted rounded-lg">
47
46
  required
48
47
  </span>
49
48
  )}
50
49
  {getParameterSchema(parameter).type && (
51
- <span className="text-xs text-muted-foreground">
50
+ <span className="text-muted-foreground">
52
51
  {getParameterSchema(parameter).type}
53
52
  </span>
54
53
  )}
@@ -1,26 +1,11 @@
1
- import { graphql } from "./graphql/index.js";
2
- import { useOasConfig } from "./index.js";
3
1
  import type { OperationListItemResult } from "./OperationList.js";
4
- import { Playground } from "./playground/Playground.js";
2
+ import { PlaygroundDialog } from "./playground/PlaygroundDialog.js";
5
3
 
6
- import { useQuery } from "urql";
7
-
8
- const GetServerQuery = graphql(/* GraphQL */ `
9
- query getServerQuery($input: JSON!, $type: SchemaType!) {
10
- schema(input: $input, type: $type) {
11
- url
12
- }
13
- }
14
- `);
15
-
16
- export const MakeRequest = ({
4
+ export const PlaygroundDialogWrapper = ({
17
5
  operation,
18
6
  }: {
19
7
  operation: OperationListItemResult;
20
8
  }) => {
21
- const variables = useOasConfig();
22
- const [server] = useQuery({ query: GetServerQuery, variables });
23
-
24
9
  const headers = operation.parameters
25
10
  ?.filter((p) => p.in === "header")
26
11
  .map((p) => ({
@@ -50,8 +35,7 @@ export const MakeRequest = ({
50
35
  false;
51
36
 
52
37
  return (
53
- <Playground
54
- host={server.data?.schema.url ?? ""}
38
+ <PlaygroundDialog
55
39
  method={operation.method}
56
40
  url={operation.path}
57
41
  headers={headers}