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,28 +1,33 @@
1
1
  import { MDXProvider } from "@mdx-js/react";
2
2
  import { QueryClientProvider } from "@tanstack/react-query";
3
- import { memo, Suspense, useEffect, useMemo } from "react";
3
+ import { Helmet } from "@zudoku/react-helmet-async";
4
+ import {
5
+ Fragment,
6
+ memo,
7
+ type PropsWithChildren,
8
+ useContext,
9
+ useEffect,
10
+ useMemo,
11
+ useState,
12
+ } from "react";
13
+ import { ErrorBoundary } from "react-error-boundary";
14
+ import { useNavigation } from "react-router-dom";
4
15
  import {
5
16
  DevPortalContext,
6
17
  queryClient,
7
- type NavigationItem,
18
+ ZudokuContextOptions,
8
19
  } from "../core/DevPortalContext.js";
9
- import { HelmetProvider } from "../core/helmet.js";
10
- import { type DevPortalPlugin } from "../core/plugins.js";
11
-
12
- import { AuthenticationProvider } from "../authentication/authentication.js";
13
- import {
14
- MdxComponents,
15
- type MdxComponentsType,
16
- } from "../util/MdxComponents.js";
20
+ import { hasHead } from "../core/plugins.js";
21
+ import { TopLevelError } from "../errors/TopLevelError.js";
22
+ import { StaggeredRenderContext } from "../plugins/openapi/StaggeredRender.js";
23
+ import { MdxComponents } from "../util/MdxComponents.js";
17
24
  import {
18
25
  ComponentsProvider,
19
26
  DEFAULT_COMPONENTS,
20
- type ComponentsContextType,
21
27
  } from "./context/ComponentsContext.js";
22
28
  import { DevPortalProvider } from "./context/DevPortalProvider.js";
23
29
  import { ThemeProvider } from "./context/ThemeContext.js";
24
30
  import { ViewportAnchorProvider } from "./context/ViewportAnchorContext.js";
25
- import { Router } from "./Router.js";
26
31
 
27
32
  export const DevPortalSystemPaths = {
28
33
  Settings: "/settings",
@@ -32,31 +37,33 @@ export type DevPortalPath =
32
37
  | string
33
38
  | (typeof DevPortalSystemPaths)[keyof typeof DevPortalSystemPaths];
34
39
 
35
- export type DevPortalProps = {
36
- meta?: Partial<{
37
- headerTitle: string;
38
- pageTitle: string;
39
- description: string;
40
- logo: string;
41
- favicon: string;
42
- }>;
43
- authentication?: AuthenticationProvider;
44
- navigation: NavigationItem[];
45
- plugins?: DevPortalPlugin[];
46
- mdxComponents?: MdxComponentsType;
47
- overrides?: ComponentsContextType;
48
- };
49
-
50
- const DevPortalInner = (props: DevPortalProps) => {
40
+ const DevPortalInner = ({
41
+ children,
42
+ ...props
43
+ }: PropsWithChildren<ZudokuContextOptions>) => {
51
44
  const components = useMemo(
52
45
  () => ({ ...DEFAULT_COMPONENTS, ...props.overrides }),
53
46
  [props.overrides],
54
47
  );
55
48
 
56
49
  const mdxComponents = useMemo(
57
- () => ({ ...MdxComponents, ...props.mdxComponents }),
58
- [props.mdxComponents],
50
+ () => ({ ...MdxComponents, ...props.mdx?.components }),
51
+ [props.mdx?.components],
52
+ );
53
+ const { stagger } = useContext(StaggeredRenderContext);
54
+ const [didNavigate, setDidNavigate] = useState(false);
55
+ const staggeredValue = useMemo(
56
+ () => (didNavigate ? { stagger: true } : { stagger }),
57
+ [stagger, didNavigate],
59
58
  );
59
+ const navigation = useNavigation();
60
+
61
+ useEffect(() => {
62
+ if (didNavigate) {
63
+ return;
64
+ }
65
+ setDidNavigate(true);
66
+ }, [didNavigate, navigation.location]);
60
67
 
61
68
  const devPortalContext = useMemo(() => new DevPortalContext(props), [props]);
62
69
 
@@ -64,39 +71,38 @@ const DevPortalInner = (props: DevPortalProps) => {
64
71
  void devPortalContext.initialize();
65
72
  }, [devPortalContext]);
66
73
 
74
+ const heads = props.plugins
75
+ ?.filter(hasHead)
76
+ // eslint-disable-next-line react/no-array-index-key
77
+ .map((plugin, i) => <Fragment key={i}>{plugin.getHead?.()}</Fragment>);
78
+
67
79
  return (
68
80
  <QueryClientProvider client={queryClient}>
69
- <HelmetProvider>
81
+ <Helmet>{heads}</Helmet>
82
+ <StaggeredRenderContext.Provider value={staggeredValue}>
70
83
  <DevPortalProvider value={devPortalContext}>
71
84
  <MDXProvider components={mdxComponents}>
72
85
  <ThemeProvider>
73
86
  <ComponentsProvider value={components}>
74
- <ViewportAnchorProvider>
75
- <Suspense
76
- fallback={
77
- <div className="grid place-items-center h-full">
78
- Loading...
79
- </div>
80
- }
81
- >
82
- <Router
83
- plugins={[
84
- ...(props.plugins ?? []),
85
- ...(props.authentication ? [props.authentication] : []),
86
- ]}
87
- />
88
- </Suspense>
89
- </ViewportAnchorProvider>
87
+ <ViewportAnchorProvider>{children}</ViewportAnchorProvider>
90
88
  </ComponentsProvider>
91
89
  </ThemeProvider>
92
90
  </MDXProvider>
93
91
  </DevPortalProvider>
94
- </HelmetProvider>
92
+ </StaggeredRenderContext.Provider>
95
93
  </QueryClientProvider>
96
94
  );
97
95
  };
98
96
 
99
- const DevPortal = memo(DevPortalInner);
97
+ const Inner = memo(DevPortalInner);
98
+
99
+ const DevPortal = (props: ZudokuContextOptions) => {
100
+ return (
101
+ <ErrorBoundary FallbackComponent={TopLevelError}>
102
+ <Inner {...props} />
103
+ </ErrorBoundary>
104
+ );
105
+ };
100
106
  DevPortal.displayName = "DevPortal";
101
107
 
102
108
  export { DevPortal };
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from "react";
2
+ import { Callout } from "../ui/Callout.js";
3
+
4
+ export const DeveloperHint = ({
5
+ children,
6
+ className,
7
+ }: {
8
+ children: ReactNode;
9
+ className?: string;
10
+ }) => {
11
+ // TODO: figure out a way to do that in consumer dev mode not "internal"
12
+ // so this doesn't get stripped out in the build
13
+ if (!import.meta.env.DEV) return;
14
+
15
+ return (
16
+ <Callout type="caution" title="Developer hint" className={className}>
17
+ <div className="flex flex-col gap-2">
18
+ <div>{children}</div>
19
+ <small className="italic">
20
+ Note: This hint is only shown in development mode.
21
+ </small>
22
+ </div>
23
+ </Callout>
24
+ );
25
+ };
@@ -0,0 +1,28 @@
1
+ import type { ReactNode } from "react";
2
+ import { Link } from "react-router-dom";
3
+ import { CategoryHeading } from "./CategoryHeading.js";
4
+ import { Heading } from "./Heading.js";
5
+ import { ProseClasses } from "./Markdown.js";
6
+
7
+ export const ErrorPage = ({
8
+ title = "An error occurred",
9
+ message,
10
+ category,
11
+ }: {
12
+ title?: ReactNode;
13
+ message?: ReactNode;
14
+ category?: ReactNode;
15
+ }) => {
16
+ return (
17
+ <div className={ProseClasses + " h-full pt-[--padding-content-top]"}>
18
+ {category && <CategoryHeading>{category}</CategoryHeading>}
19
+ {title && (
20
+ <Heading level={1} className="flex gap-3.5 items-center">
21
+ {title}
22
+ </Heading>
23
+ )}
24
+ <p>{message}</p>
25
+ <Link to="/">Go back home</Link>
26
+ </div>
27
+ );
28
+ };
@@ -1,64 +1,125 @@
1
- import { MoonStarIcon, SearchIcon, SunIcon } from "lucide-react";
1
+ import { MoonStarIcon, SunIcon } from "lucide-react";
2
2
  import { memo } from "react";
3
3
 
4
+ import { Link } from "react-router-dom";
4
5
  import { useAuth } from "../authentication/hook.js";
6
+ import { isProfileMenuPlugin, NavigationItem } from "../core/plugins.js";
7
+ import { Button } from "../ui/Button.js";
8
+ import {
9
+ DropdownMenu,
10
+ DropdownMenuContent,
11
+ DropdownMenuItem,
12
+ DropdownMenuLabel,
13
+ DropdownMenuPortal,
14
+ DropdownMenuSeparator,
15
+ DropdownMenuSub,
16
+ DropdownMenuSubContent,
17
+ DropdownMenuSubTrigger,
18
+ DropdownMenuTrigger,
19
+ } from "../ui/DropdownMenu.js";
20
+ import { cn } from "../util/cn.js";
5
21
  import { TopNavigation } from "./TopNavigation.js";
6
22
  import { useDevPortal } from "./context/DevPortalProvider.js";
7
23
  import { useTheme } from "./context/ThemeContext.js";
8
24
 
25
+ const RecursiveMenu = ({ item }: { item: NavigationItem }) => {
26
+ return item.children ? (
27
+ <DropdownMenuSub key={item.label}>
28
+ <DropdownMenuSubTrigger>{item.label}</DropdownMenuSubTrigger>
29
+ <DropdownMenuPortal>
30
+ <DropdownMenuSubContent>
31
+ {item.children.map((item, i) => (
32
+ // eslint-disable-next-line react/no-array-index-key
33
+ <RecursiveMenu key={i} item={item} />
34
+ ))}
35
+ </DropdownMenuSubContent>
36
+ </DropdownMenuPortal>
37
+ </DropdownMenuSub>
38
+ ) : (
39
+ <Link to={item.path ?? ""}>
40
+ <DropdownMenuItem key={item.label}>{item.label}</DropdownMenuItem>
41
+ </Link>
42
+ );
43
+ };
44
+
9
45
  export const Header = memo(function HeaderInner() {
10
46
  const [isDark, toggleTheme] = useTheme();
11
47
  const { isAuthenticated, profile, isAuthEnabled, login, logout } = useAuth();
12
- const { meta } = useDevPortal();
48
+ const context = useDevPortal();
49
+ const { page, plugins } = context;
13
50
 
14
51
  const ThemeIcon = isDark ? MoonStarIcon : SunIcon;
15
52
 
16
53
  return (
17
54
  <header className="fixed top-0 w-full z-10 bg-background/80 backdrop-blur">
18
55
  <div className="max-w-screen-2xl mx-auto">
19
- <div className="grid grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b border-border px-12 h-[--top-header-height]">
56
+ <div className="grid grid-cols-[calc(var(--side-nav-width))_1fr] lg:gap-12 items-center border-b px-12 h-[--top-header-height]">
20
57
  <div className="flex items-center gap-3.5">
21
- {meta?.logo && (
22
- <img src={meta.logo} alt="My Dev Portal" className="h-10" />
58
+ {page?.logo && (
59
+ <>
60
+ <img
61
+ src={page.logo.src.light}
62
+ alt={page.logo.alt ?? page.pageTitle}
63
+ style={{ width: page.logo.width }}
64
+ className={cn("h-10", isDark && "hidden")}
65
+ loading="lazy"
66
+ />
67
+ <img
68
+ src={page.logo.src.dark}
69
+ alt={page.logo.alt ?? page.pageTitle}
70
+ style={{ width: page.logo.width }}
71
+ className={cn("h-10", !isDark && "hidden")}
72
+ loading="lazy"
73
+ />
74
+ </>
23
75
  )}
24
76
  <span className="font-bold text-2xl text-foreground/85 tracking-wide">
25
- {meta?.headerTitle}
77
+ {page?.pageTitle}
26
78
  </span>
27
79
  </div>
28
80
  <div className="grid grid-cols-[--sidecar-grid-cols] items-center gap-8">
29
81
  <div className="w-full max-w-prose">
30
- <button className="flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-40 sm:w-72">
82
+ {/*<button className="flex items-center border border-input hover:bg-accent hover:text-accent-foreground p-4 relative h-8 justify-start rounded-lg bg-background text-sm text-muted-foreground shadow-none w-40 sm:w-72">
31
83
  <div className="flex items-center gap-2 flex-grow">
32
84
  <SearchIcon size={14} />
33
85
  Search
34
86
  </div>
35
- <kbd className="absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border border-border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex">
87
+ <kbd className="absolute right-[0.3rem] top-[0.3rem] hidden h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[11px] font-medium opacity-100 sm:flex">
36
88
  ⌘K
37
89
  </kbd>
38
- </button>
90
+ </button>*/}
39
91
  </div>
40
92
 
41
- <div className="items-center justify-self-end text-sm hidden lg:flex">
42
- {isAuthEnabled && (
43
- <>
44
- {isAuthenticated ? (
45
- <button
46
- className="cursor-pointer hover:bg-secondary p-1 px-2 mx-2 rounded text-nowrap"
47
- onClick={logout}
48
- >
49
- Logout {profile?.email ? `(${profile.email})` : null}
50
- </button>
51
- ) : (
52
- <button
53
- className="cursor-pointer hover:bg-secondary p-1 px-2 mx-2 rounded"
54
- onClick={login}
55
- >
56
- Login
57
- </button>
58
- )}
59
- </>
93
+ <div className="items-center justify-self-end text-sm hidden lg:flex gap-2">
94
+ {isAuthEnabled && !isAuthenticated ? (
95
+ <Button variant="ghost" asChild>
96
+ <Link to="/signin">Login</Link>
97
+ </Button>
98
+ ) : (
99
+ <DropdownMenu>
100
+ <DropdownMenuTrigger asChild>
101
+ <Button variant="ghost">
102
+ {profile?.email ? `${profile.email}` : "My Account"}
103
+ </Button>
104
+ </DropdownMenuTrigger>
105
+ <DropdownMenuContent className="w-56">
106
+ <DropdownMenuLabel>My Account</DropdownMenuLabel>
107
+ <DropdownMenuSeparator />
108
+ {plugins
109
+ .filter((p) => isProfileMenuPlugin(p))
110
+ .flatMap((p) => p.getProfileMenuItems(context))
111
+ .map((i) => (
112
+ <RecursiveMenu key={i.label} item={i} />
113
+ ))}
114
+ </DropdownMenuContent>
115
+ </DropdownMenu>
60
116
  )}
117
+
61
118
  <button
119
+ type="button"
120
+ aria-label={
121
+ isDark ? "Switch to light mode" : "Switch to dark mode"
122
+ }
62
123
  className="cursor-pointer hover:bg-secondary p-2.5 -m-2.5 rounded-full"
63
124
  onClick={toggleTheme}
64
125
  >
@@ -1,7 +1,24 @@
1
- import { type ReactNode } from "react";
2
- import { cn } from "../util/cn.js";
1
+ import React, { type ReactNode } from "react";
3
2
  import { useRegisterAnchorElement } from "./context/ViewportAnchorContext.js";
4
3
 
4
+ import { cva, type VariantProps } from "class-variance-authority";
5
+
6
+ const heading = cva("group relative", {
7
+ variants: {
8
+ level: {
9
+ 6: "text-md",
10
+ 5: "text-lg",
11
+ 4: "text-xl",
12
+ 3: "text-xl font-semibold",
13
+ 2: "text-2xl font-bold",
14
+ 1: "text-4xl font-extrabold",
15
+ },
16
+ },
17
+ defaultVariants: {
18
+ level: 1,
19
+ },
20
+ });
21
+
5
22
  const getComponent = (level: number) => {
6
23
  switch (level) {
7
24
  case 1:
@@ -21,27 +38,29 @@ const getComponent = (level: number) => {
21
38
  }
22
39
  };
23
40
 
24
- export type HeadingProps = {
41
+ export interface HeadingProps
42
+ extends React.ButtonHTMLAttributes<HTMLButtonElement>,
43
+ VariantProps<typeof heading> {
25
44
  children: ReactNode;
26
45
  className?: string;
27
46
  id?: string;
28
47
  level?: 1 | 2 | 3 | 4 | 5 | 6;
29
48
  registerSidebarAnchor?: boolean;
30
- };
49
+ }
31
50
 
32
- export const Heading = ({
51
+ export const Heading: React.FC<HeadingProps> = ({
33
52
  level,
34
53
  children,
35
54
  id,
36
55
  className,
37
56
  registerSidebarAnchor,
38
- }: HeadingProps) => {
57
+ }) => {
39
58
  const Component = getComponent(level ?? 1);
40
59
  const { ref } = useRegisterAnchorElement();
41
60
 
42
61
  return (
43
62
  <Component
44
- className={cn("group relative", className)}
63
+ className={heading({ className, level })}
45
64
  ref={registerSidebarAnchor ? ref : undefined}
46
65
  id={id}
47
66
  >
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from "react";
2
+ import { cn } from "../util/cn.js";
3
+
4
+ export const InlineCode = ({
5
+ className,
6
+ children,
7
+ }: {
8
+ className?: string;
9
+ children: ReactNode;
10
+ }) => (
11
+ <code
12
+ className={cn(
13
+ className,
14
+ "font-mono border p-1 py-0.5 rounded bg-border/50 dark:bg-border/70 whitespace-nowrap",
15
+ )}
16
+ >
17
+ {children}
18
+ </code>
19
+ );
@@ -1,6 +1,7 @@
1
+ import { Helmet } from "@zudoku/react-helmet-async";
1
2
  import { Suspense, useEffect, useRef, type ReactNode } from "react";
2
3
  import { Outlet, useLocation } from "react-router-dom";
3
- import { Helmet } from "../core/helmet.js";
4
+ import { cn } from "../util/cn.js";
4
5
  import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
5
6
  import { useScrollToTop } from "../util/useScrollToTop.js";
6
7
  import { useDevPortal } from "./context/DevPortalProvider.js";
@@ -29,8 +30,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
29
30
 
30
31
  return (
31
32
  <>
32
- <Helmet titleTemplate={meta?.pageTitle}>
33
- <title>Home</title>
33
+ <Helmet titleTemplate={meta?.title}>
34
34
  {meta?.description && (
35
35
  <meta name="description" content={meta.description} />
36
36
  )}
@@ -48,10 +48,12 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
48
48
  >
49
49
  <SideNavigation />
50
50
  <main
51
- className="dark:border-white/10 translate-x-0 h-full
52
- lg:overflow-visible
53
- lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]
54
- lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] peer-data-[navigation=true]:pl-12"
51
+ className={cn(
52
+ "dark:border-white/10 translate-x-0 h-full",
53
+ "lg:overflow-visible",
54
+ "lg:peer-data-[navigation=true]:w-[calc(100%-var(--side-nav-width))]",
55
+ "lg:peer-data-[navigation=true]:translate-x-[--side-nav-width] lg:peer-data-[navigation=true]:pl-12",
56
+ )}
55
57
  >
56
58
  {children ?? <Outlet />}
57
59
  </main>
@@ -0,0 +1,33 @@
1
+ import { UnlinkIcon } from "lucide-react";
2
+ import { Link, useParams } from "react-router-dom";
3
+ import { CategoryHeading } from "./CategoryHeading.js";
4
+ import { DeveloperHint } from "./DeveloperHint.js";
5
+ import { Heading } from "./Heading.js";
6
+ import { ProseClasses } from "./Markdown.js";
7
+
8
+ export const NotFoundPage = () => {
9
+ const params = useParams();
10
+
11
+ return (
12
+ <div className={ProseClasses + " h-full pt-[--padding-content-top]"}>
13
+ <CategoryHeading>404</CategoryHeading>
14
+ <Heading level={1} className="flex gap-3.5 items-center">
15
+ Page not found
16
+ <UnlinkIcon size={24} />
17
+ </Heading>
18
+ <DeveloperHint>
19
+ Start by adding a file at{" "}
20
+ <code>
21
+ {"{PROJECT_ROOT}"}/{params["*"]}.mdx
22
+ </code>{" "}
23
+ and add some content to make this error go away.
24
+ </DeveloperHint>
25
+ <p>
26
+ It seems that the page you are looking for does not exist or may have
27
+ been moved. Please check the URL for any typos or use the navigation
28
+ menu to find the correct page.
29
+ </p>
30
+ <Link to="/">Go back home</Link>
31
+ </div>
32
+ );
33
+ };
@@ -7,21 +7,23 @@ import {
7
7
 
8
8
  import { CheckIcon, CopyIcon } from "lucide-react";
9
9
 
10
- if (!import.meta.env.SSR) {
11
- globalThis.Prism = Prism;
12
- // @ts-expect-error This is untyped
13
- import("prismjs/components/prism-bash.min.js");
14
- // @ts-expect-error This is untyped
15
- import("prismjs/components/prism-ruby.min.js");
16
- // @ts-expect-error This is untyped
17
- import("prismjs/components/prism-markup-templating.js");
18
- // @ts-expect-error This is untyped
19
- import("prismjs/components/prism-php.min.js");
20
- // @ts-expect-error This is untyped
21
- import("prismjs/components/prism-json.min.js");
22
- // @ts-expect-error This is untyped
23
- import("prismjs/components/prism-java.min.js");
24
- }
10
+ globalThis.Prism = Prism;
11
+ // @ts-expect-error This is untyped
12
+ import("prismjs/components/prism-bash.min.js");
13
+ // @ts-expect-error This is untyped
14
+ import("prismjs/components/prism-ruby.min.js");
15
+ // @ts-expect-error This is untyped
16
+ import("prismjs/components/prism-markup-templating.js");
17
+ // @ts-expect-error This is untyped
18
+ import("prismjs/components/prism-php.min.js");
19
+ // @ts-expect-error This is untyped
20
+ import("prismjs/components/prism-json.min.js");
21
+ // @ts-expect-error This is untyped
22
+ import("prismjs/components/prism-java.min.js");
23
+ // @ts-expect-error This is untyped
24
+ import("prismjs/components/prism-csharp.min.js");
25
+ // @ts-expect-error This is untyped
26
+ import("prismjs/components/prism-objectivec.min.js");
25
27
 
26
28
  import { useState } from "react";
27
29
  import { cn } from "../util/cn.js";
@@ -33,10 +35,12 @@ type SyntaxHighlightProps = {
33
35
  wrapLines?: boolean;
34
36
  copyable?: boolean;
35
37
  showLanguageIndicator?: boolean;
36
- } & Omit<HighlightProps, "children">;
38
+ language?: string;
39
+ } & Omit<HighlightProps, "children" | "language">;
37
40
 
38
41
  export const SyntaxHighlight = ({
39
42
  copyable = true,
43
+ language = "plain",
40
44
  ...props
41
45
  }: SyntaxHighlightProps) => {
42
46
  const [isDark] = useTheme();
@@ -47,7 +51,11 @@ export const SyntaxHighlight = ({
47
51
  }
48
52
 
49
53
  return (
50
- <Highlight theme={isDark ? themes.vsDark : themes.github} {...props}>
54
+ <Highlight
55
+ theme={isDark ? themes.vsDark : themes.github}
56
+ language={language}
57
+ {...props}
58
+ >
51
59
  {({ className, style, tokens, getLineProps, getTokenProps }) => (
52
60
  <pre
53
61
  className={cn(
@@ -84,7 +92,7 @@ export const SyntaxHighlight = ({
84
92
  )}
85
93
  {props.showLanguageIndicator && (
86
94
  <span className="absolute top-1.5 right-3 text-[11px] font-mono text-muted-foreground transition group-hover:opacity-0">
87
- {props.language}
95
+ {language}
88
96
  </span>
89
97
  )}
90
98
  {tokens.map((line, i) => (
@@ -6,8 +6,13 @@ import { useDevPortal } from "./context/DevPortalProvider.js";
6
6
  export const TopNavigation = () => {
7
7
  const { navigation } = useDevPortal();
8
8
 
9
+ // Hide tope nav if there is only one item
10
+ if (navigation.length <= 1) {
11
+ return null;
12
+ }
13
+
9
14
  return (
10
- <nav className="border-b border-border text-sm px-12 h-[--top-nav-height]">
15
+ <nav className="border-b text-sm px-12 h-[--top-nav-height]">
11
16
  <ul className="flex flex-row items-center gap-8">
12
17
  {navigation.map((item) => (
13
18
  <li key={item.label}>
@@ -1,7 +1,8 @@
1
- import { useSuspenseQuery } from "@tanstack/react-query";
1
+ import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
2
2
  import { createContext, useContext } from "react";
3
3
  import { matchPath, useLocation } from "react-router-dom";
4
4
  import { DevPortalContext } from "../../core/DevPortalContext.js";
5
+ import { traverseNavigation } from "../../util/traverseNavigation.js";
5
6
 
6
7
  const DevPortalReactContext = createContext<DevPortalContext | undefined>(
7
8
  undefined,
@@ -21,7 +22,7 @@ export const useDevPortal = () => {
21
22
 
22
23
  export const useApiIdentities = () => {
23
24
  const { getApiIdentities } = useDevPortal();
24
- return useSuspenseQuery({
25
+ return useQuery({
25
26
  queryFn: getApiIdentities,
26
27
  queryKey: ["api-identities"],
27
28
  });
@@ -31,8 +32,27 @@ export const useTopNavigationItem = () => {
31
32
  const { navigation } = useDevPortal();
32
33
  const location = useLocation();
33
34
 
34
- return navigation.find((item) =>
35
- matchPath({ path: item.path, end: false }, location.pathname),
35
+ // The `/` path needs this logic because it would always match:
36
+ // Only if a leaf node actually matches the current path it is active
37
+ for (const item of navigation) {
38
+ const foundNavItem = traverseNavigation(item, (_node, fullPath) => {
39
+ if (location.pathname === fullPath) {
40
+ return item;
41
+ }
42
+ });
43
+
44
+ if (foundNavItem) {
45
+ return foundNavItem;
46
+ }
47
+ }
48
+ if (location.pathname === "/") {
49
+ return navigation.find((item) => item.path === "/");
50
+ }
51
+
52
+ return navigation.find(
53
+ (item) =>
54
+ item.path !== "/" &&
55
+ matchPath({ path: item.path, end: false }, location.pathname),
36
56
  );
37
57
  };
38
58