zudoku 0.0.0-fed343e → 0.0.0-ff3751f

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 (599) hide show
  1. package/README.md +121 -0
  2. package/cli.js +2 -2
  3. package/dist/app/entry.client.js +2 -2
  4. package/dist/app/entry.client.js.map +1 -1
  5. package/dist/app/entry.server.js +3 -0
  6. package/dist/app/entry.server.js.map +1 -1
  7. package/dist/app/main.d.ts +1 -0
  8. package/dist/app/main.js +12 -29
  9. package/dist/app/main.js.map +1 -1
  10. package/dist/app/standalone.js.map +1 -1
  11. package/dist/cli/cli.js +1 -2
  12. package/dist/cli/cli.js.map +1 -1
  13. package/dist/cli/common/machine-id/lib.js.map +1 -1
  14. package/dist/cli/common/outdated.js.map +1 -1
  15. package/dist/cli/common/utils/box.js.map +1 -1
  16. package/dist/cli/dev/handler.js +2 -2
  17. package/dist/cli/dev/handler.js.map +1 -1
  18. package/dist/config/config.d.ts +2 -6
  19. package/dist/config/validators/InputSidebarSchema.d.ts +21 -5
  20. package/dist/config/validators/InputSidebarSchema.js +7 -28
  21. package/dist/config/validators/InputSidebarSchema.js.map +1 -1
  22. package/dist/config/validators/SidebarSchema.d.ts +24 -1
  23. package/dist/config/validators/SidebarSchema.js +80 -44
  24. package/dist/config/validators/SidebarSchema.js.map +1 -1
  25. package/dist/config/validators/validate.d.ts +590 -311
  26. package/dist/config/validators/validate.js +42 -19
  27. package/dist/config/validators/validate.js.map +1 -1
  28. package/dist/index.d.ts +5 -1
  29. package/dist/index.js +1 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/lib/authentication/components/CallbackHandler.js +21 -31
  32. package/dist/lib/authentication/components/CallbackHandler.js.map +1 -1
  33. package/dist/lib/authentication/hook.d.ts +1 -1
  34. package/dist/lib/authentication/hook.js +1 -1
  35. package/dist/lib/authentication/hook.js.map +1 -1
  36. package/dist/lib/authentication/state.d.ts +16 -0
  37. package/dist/lib/authentication/state.js +5 -0
  38. package/dist/lib/authentication/state.js.map +1 -1
  39. package/dist/lib/components/Banner.js +7 -1
  40. package/dist/lib/components/Banner.js.map +1 -1
  41. package/dist/lib/components/ErrorPage.js +1 -2
  42. package/dist/lib/components/ErrorPage.js.map +1 -1
  43. package/dist/lib/components/Header.js +6 -1
  44. package/dist/lib/components/Header.js.map +1 -1
  45. package/dist/lib/components/Heading.d.ts +1 -1
  46. package/dist/lib/components/InlineCode.d.ts +2 -1
  47. package/dist/lib/components/InlineCode.js +9 -1
  48. package/dist/lib/components/InlineCode.js.map +1 -1
  49. package/dist/lib/components/Layout.js +1 -1
  50. package/dist/lib/components/Layout.js.map +1 -1
  51. package/dist/lib/components/MobileTopNavigation.js +5 -1
  52. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  53. package/dist/lib/components/Search.js +1 -1
  54. package/dist/lib/components/Search.js.map +1 -1
  55. package/dist/lib/components/SlotletProvider.d.ts +10 -2
  56. package/dist/lib/components/SlotletProvider.js +4 -2
  57. package/dist/lib/components/SlotletProvider.js.map +1 -1
  58. package/dist/lib/components/SyntaxHighlight.js +4 -1
  59. package/dist/lib/components/SyntaxHighlight.js.map +1 -1
  60. package/dist/lib/components/TopNavigation.d.ts +3 -0
  61. package/dist/lib/components/TopNavigation.js +38 -5
  62. package/dist/lib/components/TopNavigation.js.map +1 -1
  63. package/dist/lib/components/context/ZudokuContext.d.ts +6 -10
  64. package/dist/lib/components/context/ZudokuContext.js +26 -20
  65. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  66. package/dist/lib/components/index.d.ts +18 -8
  67. package/dist/lib/components/index.js +10 -3
  68. package/dist/lib/components/index.js.map +1 -1
  69. package/dist/lib/components/navigation/Sidebar.js +3 -3
  70. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  71. package/dist/lib/components/navigation/SidebarCategory.js +18 -9
  72. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  73. package/dist/lib/components/navigation/SidebarItem.js +12 -7
  74. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  75. package/dist/lib/components/navigation/utils.js +10 -14
  76. package/dist/lib/components/navigation/utils.js.map +1 -1
  77. package/dist/lib/core/DevPortalContext.d.ts +4 -7
  78. package/dist/lib/core/DevPortalContext.js.map +1 -1
  79. package/dist/lib/core/plugins.d.ts +1 -0
  80. package/dist/lib/core/plugins.js.map +1 -1
  81. package/dist/lib/errors/ErrorAlert.d.ts +1 -1
  82. package/dist/lib/errors/ErrorAlert.js +8 -3
  83. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  84. package/dist/lib/oas/graphql/index.d.ts +2 -1
  85. package/dist/lib/oas/graphql/index.js +24 -16
  86. package/dist/lib/oas/graphql/index.js.map +1 -1
  87. package/dist/lib/oas/parser/index.d.ts +1 -0
  88. package/dist/lib/oas/parser/index.js.map +1 -1
  89. package/dist/lib/plugins/api-keys/CreateApiKey.js +1 -1
  90. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
  91. package/dist/lib/plugins/custom-pages/CustomPage.d.ts +2 -0
  92. package/dist/lib/plugins/custom-pages/CustomPage.js +11 -0
  93. package/dist/lib/plugins/custom-pages/CustomPage.js.map +1 -0
  94. package/dist/lib/plugins/custom-pages/index.d.ts +10 -0
  95. package/dist/lib/plugins/custom-pages/index.js +11 -0
  96. package/dist/lib/plugins/custom-pages/index.js.map +1 -0
  97. package/dist/lib/plugins/markdown/MdxPage.js +2 -2
  98. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  99. package/dist/lib/plugins/markdown/index.d.ts +5 -5
  100. package/dist/lib/plugins/markdown/index.js +31 -3
  101. package/dist/lib/plugins/markdown/index.js.map +1 -1
  102. package/dist/lib/plugins/markdown/resolver.d.ts +38 -0
  103. package/dist/lib/plugins/markdown/resolver.js +75 -0
  104. package/dist/lib/plugins/markdown/resolver.js.map +1 -0
  105. package/dist/lib/plugins/openapi/Endpoint.d.ts +1 -3
  106. package/dist/lib/plugins/openapi/Endpoint.js +46 -8
  107. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  108. package/dist/lib/plugins/openapi/OperationList.js +2 -2
  109. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  110. package/dist/lib/plugins/openapi/OperationListItem.js +1 -1
  111. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  112. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.d.ts +2 -1
  113. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +2 -2
  114. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  115. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  116. package/dist/lib/plugins/openapi/Route.d.ts +1 -1
  117. package/dist/lib/plugins/openapi/Route.js +1 -1
  118. package/dist/lib/plugins/openapi/Route.js.map +1 -1
  119. package/dist/lib/plugins/openapi/Sidecar.js +17 -6
  120. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  121. package/dist/lib/plugins/openapi/SimpleSelect.d.ts +2 -1
  122. package/dist/lib/plugins/openapi/SimpleSelect.js +1 -1
  123. package/dist/lib/plugins/openapi/SimpleSelect.js.map +1 -1
  124. package/dist/lib/plugins/openapi/client/createMemoryClient.js +1 -1
  125. package/dist/lib/plugins/openapi/client/createMemoryClient.js.map +1 -1
  126. package/dist/lib/plugins/openapi/client/createWorkerClient.js +1 -1
  127. package/dist/lib/plugins/openapi/client/createWorkerClient.js.map +1 -1
  128. package/dist/lib/plugins/openapi/client/worker.js.map +1 -1
  129. package/dist/lib/plugins/openapi/graphql/gql.d.ts +10 -2
  130. package/dist/lib/plugins/openapi/graphql/gql.js +2 -1
  131. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  132. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +29 -3
  133. package/dist/lib/plugins/openapi/graphql/graphql.js +87 -0
  134. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  135. package/dist/lib/plugins/openapi/index.js +1 -1
  136. package/dist/lib/plugins/openapi/index.js.map +1 -1
  137. package/dist/lib/plugins/openapi/interfaces.d.ts +3 -0
  138. package/dist/lib/plugins/openapi/playground/Playground.d.ts +2 -1
  139. package/dist/lib/plugins/openapi/playground/Playground.js +15 -6
  140. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  141. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  142. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  143. package/dist/lib/plugins/openapi/playground/ResponseTab.js +1 -1
  144. package/dist/lib/plugins/openapi/playground/ResponseTab.js.map +1 -1
  145. package/dist/lib/plugins/openapi/playground/createUrl.js +3 -1
  146. package/dist/lib/plugins/openapi/playground/createUrl.js.map +1 -1
  147. package/dist/lib/plugins/redirect/index.d.ts +2 -5
  148. package/dist/lib/plugins/redirect/index.js +1 -1
  149. package/dist/lib/plugins/redirect/index.js.map +1 -1
  150. package/dist/lib/ui/Accordion.d.ts +7 -0
  151. package/dist/lib/ui/Accordion.js +14 -0
  152. package/dist/lib/ui/Accordion.js.map +1 -0
  153. package/dist/lib/ui/Alert.d.ts +8 -0
  154. package/dist/lib/ui/Alert.js +23 -0
  155. package/dist/lib/ui/Alert.js.map +1 -0
  156. package/dist/lib/ui/AlertDialog.d.ts +20 -0
  157. package/dist/lib/ui/AlertDialog.js +27 -0
  158. package/dist/lib/ui/AlertDialog.js.map +1 -0
  159. package/dist/lib/ui/AspectRatio.d.ts +3 -0
  160. package/dist/lib/ui/AspectRatio.js +4 -0
  161. package/dist/lib/ui/AspectRatio.js.map +1 -0
  162. package/dist/lib/ui/Badge.d.ts +9 -0
  163. package/dist/lib/ui/Badge.js +21 -0
  164. package/dist/lib/ui/Badge.js.map +1 -0
  165. package/dist/lib/ui/Breadcrumb.d.ts +19 -0
  166. package/dist/lib/ui/Breadcrumb.js +24 -0
  167. package/dist/lib/ui/Breadcrumb.js.map +1 -0
  168. package/dist/lib/ui/Button.d.ts +2 -3
  169. package/dist/lib/ui/Button.js +1 -1
  170. package/dist/lib/ui/Button.js.map +1 -1
  171. package/dist/lib/ui/Callout.d.ts +36 -35
  172. package/dist/lib/ui/Callout.js.map +1 -1
  173. package/dist/lib/ui/Carousel.d.ts +18 -0
  174. package/dist/lib/ui/Carousel.js +99 -0
  175. package/dist/lib/ui/Carousel.js.map +1 -0
  176. package/dist/lib/ui/Checkbox.d.ts +4 -0
  177. package/dist/lib/ui/Checkbox.js +9 -0
  178. package/dist/lib/ui/Checkbox.js.map +1 -0
  179. package/dist/lib/ui/Collapsible.d.ts +5 -0
  180. package/dist/lib/ui/Collapsible.js +6 -0
  181. package/dist/lib/ui/Collapsible.js.map +1 -0
  182. package/dist/lib/ui/Command.d.ts +80 -0
  183. package/dist/lib/ui/Command.js +31 -0
  184. package/dist/lib/ui/Command.js.map +1 -0
  185. package/dist/lib/{components → ui}/Dialog.js +2 -2
  186. package/dist/lib/ui/Dialog.js.map +1 -0
  187. package/dist/lib/ui/Drawer.d.ts +8 -10
  188. package/dist/lib/ui/Drawer.js.map +1 -1
  189. package/dist/lib/ui/Form.d.ts +23 -0
  190. package/dist/lib/ui/Form.js +63 -0
  191. package/dist/lib/ui/Form.js.map +1 -0
  192. package/dist/lib/ui/HoverCard.d.ts +6 -0
  193. package/dist/lib/ui/HoverCard.js +10 -0
  194. package/dist/lib/ui/HoverCard.js.map +1 -0
  195. package/dist/lib/ui/Label.d.ts +5 -0
  196. package/dist/lib/ui/Label.js +10 -0
  197. package/dist/lib/ui/Label.js.map +1 -0
  198. package/dist/lib/ui/Pagination.d.ts +28 -0
  199. package/dist/lib/ui/Pagination.js +24 -0
  200. package/dist/lib/ui/Pagination.js.map +1 -0
  201. package/dist/lib/ui/Popover.d.ts +6 -0
  202. package/dist/lib/ui/Popover.js +10 -0
  203. package/dist/lib/ui/Popover.js.map +1 -0
  204. package/dist/lib/ui/Progress.d.ts +4 -0
  205. package/dist/lib/ui/Progress.js +8 -0
  206. package/dist/lib/ui/Progress.js.map +1 -0
  207. package/dist/lib/ui/RadioGroup.d.ts +5 -0
  208. package/dist/lib/ui/RadioGroup.js +15 -0
  209. package/dist/lib/ui/RadioGroup.js.map +1 -0
  210. package/dist/lib/ui/ScrollArea.d.ts +5 -0
  211. package/dist/lib/ui/ScrollArea.js +12 -0
  212. package/dist/lib/ui/ScrollArea.js.map +1 -0
  213. package/dist/lib/ui/Select.js.map +1 -0
  214. package/dist/lib/ui/Skeleton.d.ts +2 -0
  215. package/dist/lib/ui/Skeleton.js +7 -0
  216. package/dist/lib/ui/Skeleton.js.map +1 -0
  217. package/dist/lib/ui/Slider.d.ts +4 -0
  218. package/dist/lib/ui/Slider.js +8 -0
  219. package/dist/lib/ui/Slider.js.map +1 -0
  220. package/dist/lib/ui/Switch.d.ts +4 -0
  221. package/dist/lib/ui/Switch.js +8 -0
  222. package/dist/lib/ui/Switch.js.map +1 -0
  223. package/dist/lib/ui/Textarea.d.ts +4 -0
  224. package/dist/lib/ui/Textarea.js +9 -0
  225. package/dist/lib/ui/Textarea.js.map +1 -0
  226. package/dist/lib/ui/Toggle.d.ts +12 -0
  227. package/dist/lib/ui/Toggle.js +26 -0
  228. package/dist/lib/ui/Toggle.js.map +1 -0
  229. package/dist/lib/ui/ToggleGroup.d.ts +12 -0
  230. package/dist/lib/ui/ToggleGroup.js +21 -0
  231. package/dist/lib/ui/ToggleGroup.js.map +1 -0
  232. package/dist/lib/ui/Tooltip.d.ts +7 -0
  233. package/dist/lib/ui/Tooltip.js +11 -0
  234. package/dist/lib/ui/Tooltip.js.map +1 -0
  235. package/dist/lib/util/MdxComponents.js.map +1 -1
  236. package/dist/lib/util/invariant.d.ts +9 -0
  237. package/dist/lib/util/invariant.js +7 -3
  238. package/dist/lib/util/invariant.js.map +1 -1
  239. package/dist/lib/util/useExposedProps.d.ts +2 -0
  240. package/dist/lib/util/useExposedProps.js +9 -0
  241. package/dist/lib/util/useExposedProps.js.map +1 -0
  242. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  243. package/dist/vite/build.js +12 -3
  244. package/dist/vite/build.js.map +1 -1
  245. package/dist/vite/config.d.ts +3 -9
  246. package/dist/vite/config.js +40 -69
  247. package/dist/vite/config.js.map +1 -1
  248. package/dist/vite/debug.d.ts +1 -0
  249. package/dist/vite/debug.js +10 -0
  250. package/dist/vite/debug.js.map +1 -0
  251. package/dist/vite/dev-server.d.ts +7 -1
  252. package/dist/vite/dev-server.js +20 -16
  253. package/dist/vite/dev-server.js.map +1 -1
  254. package/dist/vite/output.d.ts +101 -0
  255. package/dist/vite/output.js +30 -0
  256. package/dist/vite/output.js.map +1 -0
  257. package/dist/vite/plugin-api.js +4 -7
  258. package/dist/vite/plugin-api.js.map +1 -1
  259. package/dist/vite/plugin-component.js +17 -8
  260. package/dist/vite/plugin-component.js.map +1 -1
  261. package/dist/vite/plugin-config-reload.js +7 -4
  262. package/dist/vite/plugin-config-reload.js.map +1 -1
  263. package/dist/vite/plugin-config.d.ts +2 -3
  264. package/dist/vite/plugin-config.js +2 -3
  265. package/dist/vite/plugin-config.js.map +1 -1
  266. package/dist/vite/plugin-custom-pages.d.ts +4 -0
  267. package/dist/vite/plugin-custom-pages.js +30 -0
  268. package/dist/vite/plugin-custom-pages.js.map +1 -0
  269. package/dist/vite/plugin-docs.js +37 -24
  270. package/dist/vite/plugin-docs.js.map +1 -1
  271. package/dist/vite/plugin-frontmatter.d.ts +3 -0
  272. package/dist/vite/plugin-frontmatter.js +33 -0
  273. package/dist/vite/plugin-frontmatter.js.map +1 -0
  274. package/dist/vite/plugin-mdx.js +17 -0
  275. package/dist/vite/plugin-mdx.js.map +1 -1
  276. package/dist/vite/plugin-search.d.ts +3 -0
  277. package/dist/vite/plugin-search.js +26 -0
  278. package/dist/vite/plugin-search.js.map +1 -0
  279. package/dist/vite/plugin-sidebar.js +21 -7
  280. package/dist/vite/plugin-sidebar.js.map +1 -1
  281. package/dist/vite/plugin.js +7 -3
  282. package/dist/vite/plugin.js.map +1 -1
  283. package/dist/vite/prerender.d.ts +5 -1
  284. package/dist/vite/prerender.js +6 -5
  285. package/dist/vite/prerender.js.map +1 -1
  286. package/lib/{utils-ByIc_KIM.js → AnchorLink-BbB2q-jx.js} +231 -275
  287. package/lib/AnchorLink-BbB2q-jx.js.map +1 -0
  288. package/lib/{AuthenticationPlugin-Bx9FK124.js → AuthenticationPlugin-C9BHGXlE.js} +3 -3
  289. package/lib/{AuthenticationPlugin-Bx9FK124.js.map → AuthenticationPlugin-C9BHGXlE.js.map} +1 -1
  290. package/lib/{CategoryHeading-XnFqN2lJ.js → CategoryHeading-Bb9dqxD3.js} +4 -4
  291. package/lib/{CategoryHeading-XnFqN2lJ.js.map → CategoryHeading-Bb9dqxD3.js.map} +1 -1
  292. package/lib/ClientOnly-CVN6leDu.js +11 -0
  293. package/lib/ClientOnly-CVN6leDu.js.map +1 -0
  294. package/lib/{DeveloperHint-FBb2uXJe.js → DeveloperHint-DHdLXGHA.js} +2 -2
  295. package/lib/{DeveloperHint-FBb2uXJe.js.map → DeveloperHint-DHdLXGHA.js.map} +1 -1
  296. package/lib/Dialog-k70Qfukb.js +67 -0
  297. package/lib/Dialog-k70Qfukb.js.map +1 -0
  298. package/lib/{Markdown-B4aR03g6.js → Markdown-BDcCAWwm.js} +4298 -6518
  299. package/lib/Markdown-BDcCAWwm.js.map +1 -0
  300. package/lib/{MdxPage-BZyQsH8Z.js → MdxPage-DKMH_t0f.js} +25 -23
  301. package/lib/MdxPage-DKMH_t0f.js.map +1 -0
  302. package/lib/{OperationList-2NeWEM0u.js → OperationList-Tj7ubW_t.js} +181 -137
  303. package/lib/OperationList-Tj7ubW_t.js.map +1 -0
  304. package/lib/{Route-BZPewmrN.js → Route-C3DGB6OS.js} +3 -4
  305. package/lib/Route-C3DGB6OS.js.map +1 -0
  306. package/lib/Select-Bagt3Bme.js +223 -0
  307. package/lib/Select-Bagt3Bme.js.map +1 -0
  308. package/lib/SlotletProvider-Da7eFgd2.js +241 -0
  309. package/lib/SlotletProvider-Da7eFgd2.js.map +1 -0
  310. package/lib/Spinner-C6zroowC.js +40 -0
  311. package/lib/Spinner-C6zroowC.js.map +1 -0
  312. package/lib/StaggeredRender-DDHSzQKE.js +17 -0
  313. package/lib/StaggeredRender-DDHSzQKE.js.map +1 -0
  314. package/lib/ZudokuContext-BKXGJTmu.js +1222 -0
  315. package/lib/ZudokuContext-BKXGJTmu.js.map +1 -0
  316. package/lib/__vite-browser-external-BYRIRx8p.js +9 -0
  317. package/lib/__vite-browser-external-BYRIRx8p.js.map +1 -0
  318. package/lib/assets/{index-B9EWVYfo.js → index-B_Jk_Yzp.js} +968 -938
  319. package/lib/assets/index-B_Jk_Yzp.js.map +1 -0
  320. package/lib/assets/{worker-BvD7B6MG.js → worker-Bf8vjASY.js} +6769 -4411
  321. package/lib/assets/worker-Bf8vjASY.js.map +1 -0
  322. package/lib/cn-BmFQLtkS.js +2279 -0
  323. package/lib/cn-BmFQLtkS.js.map +1 -0
  324. package/lib/hook-sn0zMTkE.js +229 -0
  325. package/lib/hook-sn0zMTkE.js.map +1 -0
  326. package/lib/{index-Dv2KZuEw.js → index-AjWCJNGC.js} +1681 -1676
  327. package/lib/index-AjWCJNGC.js.map +1 -0
  328. package/lib/index-Bn6Lc9tq.js +9 -0
  329. package/lib/index-Bn6Lc9tq.js.map +1 -0
  330. package/lib/index-BuAyrJe3.js +46 -0
  331. package/lib/index-BuAyrJe3.js.map +1 -0
  332. package/lib/{index-BG0g4WW0.js → index-CRo94sKK.js} +750 -738
  333. package/lib/index-CRo94sKK.js.map +1 -0
  334. package/lib/{index-CLd8ycZz.js → index-CkwDvuPt.js} +947 -917
  335. package/lib/index-CkwDvuPt.js.map +1 -0
  336. package/lib/index-LNp6rxyU.js +2094 -0
  337. package/lib/index-LNp6rxyU.js.map +1 -0
  338. package/lib/index.esm-C5mr_sKO.js +1193 -0
  339. package/lib/index.esm-C5mr_sKO.js.map +1 -0
  340. package/lib/invariant-Caa8-XvF.js +26 -0
  341. package/lib/invariant-Caa8-XvF.js.map +1 -0
  342. package/lib/router-BsfSoK2j.js +3024 -0
  343. package/lib/router-BsfSoK2j.js.map +1 -0
  344. package/lib/state-CsuHT8ZO.js +183 -0
  345. package/lib/state-CsuHT8ZO.js.map +1 -0
  346. package/lib/ui/Accordion.js +47 -0
  347. package/lib/ui/Accordion.js.map +1 -0
  348. package/lib/ui/Alert.js +51 -0
  349. package/lib/ui/Alert.js.map +1 -0
  350. package/lib/ui/AlertDialog.js +114 -0
  351. package/lib/ui/AlertDialog.js.map +1 -0
  352. package/lib/ui/AspectRatio.js +6 -0
  353. package/lib/ui/AspectRatio.js.map +1 -0
  354. package/lib/ui/Badge.js +27 -0
  355. package/lib/ui/Badge.js.map +1 -0
  356. package/lib/ui/Breadcrumb.js +94 -0
  357. package/lib/ui/Breadcrumb.js.map +1 -0
  358. package/lib/ui/Button.js +49 -0
  359. package/lib/ui/Button.js.map +1 -0
  360. package/lib/ui/Callout.js +77 -0
  361. package/lib/ui/Callout.js.map +1 -0
  362. package/lib/ui/Card.js +62 -0
  363. package/lib/ui/Card.js.map +1 -0
  364. package/lib/ui/Carousel.js +1410 -0
  365. package/lib/ui/Carousel.js.map +1 -0
  366. package/lib/ui/Checkbox.js +28 -0
  367. package/lib/ui/Checkbox.js.map +1 -0
  368. package/lib/ui/Collapsible.js +8 -0
  369. package/lib/ui/Collapsible.js.map +1 -0
  370. package/lib/ui/Command.js +550 -0
  371. package/lib/ui/Command.js.map +1 -0
  372. package/lib/ui/Dialog.js +101 -0
  373. package/lib/ui/Dialog.js.map +1 -0
  374. package/lib/ui/Drawer.js +1153 -0
  375. package/lib/ui/Drawer.js.map +1 -0
  376. package/lib/ui/DropdownMenu.js +145 -0
  377. package/lib/ui/DropdownMenu.js.map +1 -0
  378. package/lib/ui/Form.js +95 -0
  379. package/lib/ui/Form.js.map +1 -0
  380. package/lib/ui/HoverCard.js +24 -0
  381. package/lib/ui/HoverCard.js.map +1 -0
  382. package/lib/ui/Input.js +22 -0
  383. package/lib/ui/Input.js.map +1 -0
  384. package/lib/ui/Label.js +20 -0
  385. package/lib/ui/Label.js.map +1 -0
  386. package/lib/ui/Pagination.js +106 -0
  387. package/lib/ui/Pagination.js.map +1 -0
  388. package/lib/ui/Popover.js +24 -0
  389. package/lib/ui/Popover.js.map +1 -0
  390. package/lib/ui/Progress.js +27 -0
  391. package/lib/ui/Progress.js.map +1 -0
  392. package/lib/ui/RadioGroup.js +32 -0
  393. package/lib/ui/RadioGroup.js.map +1 -0
  394. package/lib/ui/ScrollArea.js +39 -0
  395. package/lib/ui/ScrollArea.js.map +1 -0
  396. package/lib/ui/Select.js +122 -0
  397. package/lib/ui/Select.js.map +1 -0
  398. package/lib/ui/Skeleton.js +18 -0
  399. package/lib/ui/Skeleton.js.map +1 -0
  400. package/lib/ui/Slider.js +24 -0
  401. package/lib/ui/Slider.js.map +1 -0
  402. package/lib/ui/Switch.js +28 -0
  403. package/lib/ui/Switch.js.map +1 -0
  404. package/lib/ui/Tabs.js +47 -0
  405. package/lib/ui/Tabs.js.map +1 -0
  406. package/lib/ui/Textarea.js +21 -0
  407. package/lib/ui/Textarea.js.map +1 -0
  408. package/lib/ui/Toggle.js +38 -0
  409. package/lib/ui/Toggle.js.map +1 -0
  410. package/lib/ui/ToggleGroup.js +42 -0
  411. package/lib/ui/ToggleGroup.js.map +1 -0
  412. package/lib/ui/Tooltip.js +24 -0
  413. package/lib/ui/Tooltip.js.map +1 -0
  414. package/lib/urql-core-KJnLL26g.js +1455 -0
  415. package/lib/urql-core-KJnLL26g.js.map +1 -0
  416. package/lib/useExposedProps-ChOIUaS4.js +9 -0
  417. package/lib/useExposedProps-ChOIUaS4.js.map +1 -0
  418. package/lib/zudoku.auth-auth0.js +1 -1
  419. package/lib/zudoku.auth-clerk.js +2 -2
  420. package/lib/zudoku.auth-openid.js +541 -534
  421. package/lib/zudoku.auth-openid.js.map +1 -1
  422. package/lib/zudoku.components.js +953 -2849
  423. package/lib/zudoku.components.js.map +1 -1
  424. package/lib/zudoku.openapi-worker.js +4668 -4380
  425. package/lib/zudoku.openapi-worker.js.map +1 -1
  426. package/lib/zudoku.plugin-api-keys.js +69 -76
  427. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  428. package/lib/zudoku.plugin-custom-pages.js +22 -0
  429. package/lib/zudoku.plugin-custom-pages.js.map +1 -0
  430. package/lib/zudoku.plugin-markdown.js +93 -24
  431. package/lib/zudoku.plugin-markdown.js.map +1 -1
  432. package/lib/zudoku.plugin-openapi.js +9 -10
  433. package/lib/zudoku.plugin-openapi.js.map +1 -1
  434. package/lib/zudoku.plugin-redirect.js +2 -2
  435. package/lib/zudoku.plugin-redirect.js.map +1 -1
  436. package/lib/zudoku.plugin-search-inkeep.js +9 -13
  437. package/lib/zudoku.plugin-search-inkeep.js.map +1 -1
  438. package/package.json +98 -72
  439. package/src/app/entry.client.tsx +4 -2
  440. package/src/app/entry.server.tsx +4 -0
  441. package/src/app/main.css +4 -1
  442. package/src/app/main.tsx +15 -33
  443. package/src/app/standalone.tsx +1 -1
  444. package/src/lib/authentication/components/CallbackHandler.tsx +20 -51
  445. package/src/lib/authentication/hook.ts +1 -1
  446. package/src/lib/authentication/state.ts +17 -0
  447. package/src/lib/components/Banner.tsx +12 -2
  448. package/src/lib/components/ErrorPage.tsx +0 -2
  449. package/src/lib/components/Header.tsx +21 -4
  450. package/src/lib/components/InlineCode.tsx +10 -0
  451. package/src/lib/components/Layout.tsx +2 -1
  452. package/src/lib/components/MobileTopNavigation.tsx +10 -2
  453. package/src/lib/components/Search.tsx +1 -1
  454. package/src/lib/components/SlotletProvider.tsx +29 -4
  455. package/src/lib/components/SyntaxHighlight.tsx +5 -1
  456. package/src/lib/components/TopNavigation.tsx +70 -23
  457. package/src/lib/components/context/ZudokuContext.ts +28 -20
  458. package/src/lib/components/index.ts +13 -4
  459. package/src/lib/components/navigation/Sidebar.tsx +6 -6
  460. package/src/lib/components/navigation/SidebarCategory.tsx +35 -29
  461. package/src/lib/components/navigation/SidebarItem.tsx +17 -20
  462. package/src/lib/components/navigation/utils.ts +11 -16
  463. package/src/lib/core/DevPortalContext.ts +4 -3
  464. package/src/lib/core/plugins.ts +2 -0
  465. package/src/lib/errors/ErrorAlert.tsx +18 -5
  466. package/src/lib/oas/graphql/index.ts +36 -24
  467. package/src/lib/oas/parser/index.ts +1 -0
  468. package/src/lib/plugins/api-keys/CreateApiKey.tsx +2 -2
  469. package/src/lib/plugins/custom-pages/CustomPage.tsx +18 -0
  470. package/src/lib/plugins/custom-pages/index.tsx +24 -0
  471. package/src/lib/plugins/markdown/MdxPage.tsx +11 -9
  472. package/src/lib/plugins/markdown/index.tsx +49 -10
  473. package/src/lib/plugins/markdown/resolver.ts +92 -0
  474. package/src/lib/plugins/openapi/Endpoint.tsx +86 -22
  475. package/src/lib/plugins/openapi/OperationList.tsx +4 -2
  476. package/src/lib/plugins/openapi/OperationListItem.tsx +1 -1
  477. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +3 -0
  478. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +1 -1
  479. package/src/lib/plugins/openapi/Route.tsx +1 -2
  480. package/src/lib/plugins/openapi/Sidecar.tsx +21 -6
  481. package/src/lib/plugins/openapi/SimpleSelect.tsx +10 -2
  482. package/src/lib/plugins/openapi/client/createMemoryClient.ts +1 -6
  483. package/src/lib/plugins/openapi/client/createWorkerClient.ts +1 -6
  484. package/src/lib/plugins/openapi/client/worker.ts +2 -2
  485. package/src/lib/plugins/openapi/graphql/gql.ts +11 -3
  486. package/src/lib/plugins/openapi/graphql/graphql.ts +116 -4
  487. package/src/lib/plugins/openapi/index.tsx +2 -6
  488. package/src/lib/plugins/openapi/interfaces.ts +4 -1
  489. package/src/lib/plugins/openapi/playground/Playground.tsx +42 -7
  490. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  491. package/src/lib/plugins/openapi/playground/ResponseTab.tsx +0 -1
  492. package/src/lib/plugins/openapi/playground/createUrl.ts +6 -1
  493. package/src/lib/plugins/redirect/index.tsx +3 -7
  494. package/src/lib/ui/Accordion.tsx +56 -0
  495. package/src/lib/ui/{Note.tsx → Alert.tsx} +11 -10
  496. package/src/lib/ui/AlertDialog.tsx +139 -0
  497. package/src/lib/ui/AspectRatio.tsx +5 -0
  498. package/src/lib/ui/Badge.tsx +36 -0
  499. package/src/lib/ui/Breadcrumb.tsx +115 -0
  500. package/src/lib/ui/Button.tsx +1 -1
  501. package/src/lib/ui/Callout.tsx +7 -6
  502. package/src/lib/ui/Carousel.tsx +260 -0
  503. package/src/lib/ui/Checkbox.tsx +28 -0
  504. package/src/lib/ui/Collapsible.tsx +9 -0
  505. package/src/lib/ui/Command.tsx +151 -0
  506. package/src/lib/{components → ui}/Dialog.tsx +4 -3
  507. package/src/lib/ui/Drawer.tsx +38 -36
  508. package/src/lib/ui/Form.tsx +177 -0
  509. package/src/lib/ui/HoverCard.tsx +27 -0
  510. package/src/lib/ui/Label.tsx +24 -0
  511. package/src/lib/ui/Pagination.tsx +117 -0
  512. package/src/lib/ui/Popover.tsx +29 -0
  513. package/src/lib/ui/Progress.tsx +26 -0
  514. package/src/lib/ui/RadioGroup.tsx +42 -0
  515. package/src/lib/ui/ScrollArea.tsx +46 -0
  516. package/src/lib/ui/Skeleton.tsx +15 -0
  517. package/src/lib/ui/Slider.tsx +26 -0
  518. package/src/lib/ui/Switch.tsx +27 -0
  519. package/src/lib/ui/Textarea.tsx +23 -0
  520. package/src/lib/ui/Toggle.tsx +43 -0
  521. package/src/lib/ui/ToggleGroup.tsx +59 -0
  522. package/src/lib/ui/Tooltip.tsx +28 -0
  523. package/src/lib/util/MdxComponents.tsx +0 -1
  524. package/src/lib/util/invariant.ts +15 -3
  525. package/src/lib/util/useExposedProps.tsx +16 -0
  526. package/src/lib/util/useScrollToAnchor.ts +1 -1
  527. package/dist/internal.d.ts +0 -1
  528. package/dist/internal.js +0 -2
  529. package/dist/internal.js.map +0 -1
  530. package/dist/lib/components/Dialog.js.map +0 -1
  531. package/dist/lib/components/Select.js.map +0 -1
  532. package/dist/lib/plugins/custom-page/index.d.ts +0 -8
  533. package/dist/lib/plugins/custom-page/index.js +0 -12
  534. package/dist/lib/plugins/custom-page/index.js.map +0 -1
  535. package/dist/lib/plugins/markdown/generateRoutes.d.ts +0 -3
  536. package/dist/lib/plugins/markdown/generateRoutes.js +0 -19
  537. package/dist/lib/plugins/markdown/generateRoutes.js.map +0 -1
  538. package/dist/lib/plugins/openapi/playground/Editor.d.ts +0 -1
  539. package/dist/lib/plugins/openapi/playground/Editor.js +0 -5
  540. package/dist/lib/plugins/openapi/playground/Editor.js.map +0 -1
  541. package/dist/lib/plugins/openapi/util/urql.d.ts +0 -7
  542. package/dist/lib/plugins/openapi/util/urql.js +0 -8
  543. package/dist/lib/plugins/openapi/util/urql.js.map +0 -1
  544. package/dist/lib/ui/Note.d.ts +0 -8
  545. package/dist/lib/ui/Note.js +0 -23
  546. package/dist/lib/ui/Note.js.map +0 -1
  547. package/dist/lib/util/slugify.d.ts +0 -2
  548. package/dist/lib/util/slugify.js +0 -3
  549. package/dist/lib/util/slugify.js.map +0 -1
  550. package/dist/vite/plugin-icons.d.ts +0 -3
  551. package/dist/vite/plugin-icons.js +0 -47
  552. package/dist/vite/plugin-icons.js.map +0 -1
  553. package/lib/ErrorPage-knunPbKI.js +0 -18
  554. package/lib/ErrorPage-knunPbKI.js.map +0 -1
  555. package/lib/Input-BEDZAKw0.js +0 -2198
  556. package/lib/Input-BEDZAKw0.js.map +0 -1
  557. package/lib/Markdown-B4aR03g6.js.map +0 -1
  558. package/lib/MdxPage-BZyQsH8Z.js.map +0 -1
  559. package/lib/OperationList-2NeWEM0u.js.map +0 -1
  560. package/lib/Route-BZPewmrN.js.map +0 -1
  561. package/lib/SidebarBadge-COz0hgfa.js +0 -498
  562. package/lib/SidebarBadge-COz0hgfa.js.map +0 -1
  563. package/lib/SlotletProvider-DJMaOUDs.js +0 -238
  564. package/lib/SlotletProvider-DJMaOUDs.js.map +0 -1
  565. package/lib/Spinner-3cQDBVGr.js +0 -7
  566. package/lib/Spinner-3cQDBVGr.js.map +0 -1
  567. package/lib/ZudokuContext-cr-pTRY1.js +0 -1084
  568. package/lib/ZudokuContext-cr-pTRY1.js.map +0 -1
  569. package/lib/assets/index-B9EWVYfo.js.map +0 -1
  570. package/lib/assets/worker-BvD7B6MG.js.map +0 -1
  571. package/lib/index-1EDgIO6b.js +0 -124
  572. package/lib/index-1EDgIO6b.js.map +0 -1
  573. package/lib/index-BG0g4WW0.js.map +0 -1
  574. package/lib/index-CLd8ycZz.js.map +0 -1
  575. package/lib/index-Dv2KZuEw.js.map +0 -1
  576. package/lib/index-Zezcv0xb.js +0 -2814
  577. package/lib/index-Zezcv0xb.js.map +0 -1
  578. package/lib/joinPath-B7kNnUX4.js +0 -8
  579. package/lib/joinPath-B7kNnUX4.js.map +0 -1
  580. package/lib/router-D2p7Olpn.js +0 -2971
  581. package/lib/router-D2p7Olpn.js.map +0 -1
  582. package/lib/slugify-DbLhpSPt.js +0 -28
  583. package/lib/slugify-DbLhpSPt.js.map +0 -1
  584. package/lib/state-lIwt9isb.js +0 -288
  585. package/lib/state-lIwt9isb.js.map +0 -1
  586. package/lib/urql-YhcsXYy8.js +0 -1591
  587. package/lib/urql-YhcsXYy8.js.map +0 -1
  588. package/lib/utils-ByIc_KIM.js.map +0 -1
  589. package/lib/zudoku.plugin-custom-page.js +0 -13
  590. package/lib/zudoku.plugin-custom-page.js.map +0 -1
  591. package/src/lib/plugins/custom-page/index.tsx +0 -22
  592. package/src/lib/plugins/markdown/generateRoutes.tsx +0 -35
  593. package/src/lib/plugins/openapi/playground/Editor.tsx +0 -4
  594. package/src/lib/plugins/openapi/util/urql.ts +0 -8
  595. package/src/lib/util/slugify.ts +0 -3
  596. /package/dist/lib/{components → ui}/Dialog.d.ts +0 -0
  597. /package/dist/lib/{components → ui}/Select.d.ts +0 -0
  598. /package/dist/lib/{components → ui}/Select.js +0 -0
  599. /package/src/lib/{components → ui}/Select.tsx +0 -0
@@ -1,11 +1,10 @@
1
1
  import * as Collapsible from "@radix-ui/react-collapsible";
2
2
  import { ChevronRightIcon } from "lucide-react";
3
3
  import { useEffect, useState } from "react";
4
- import { NavLink } from "react-router-dom";
4
+ import { NavLink, useMatch } from "react-router-dom";
5
5
  import type { SidebarItemCategory } from "../../../config/validators/SidebarSchema.js";
6
6
  import { cn } from "../../util/cn.js";
7
7
  import { joinPath } from "../../util/joinPath.js";
8
- import { useTopNavigationItem } from "../context/ZudokuContext.js";
9
8
  import { navigationListItem, SidebarItem } from "./SidebarItem.js";
10
9
  import { useIsCategoryOpen } from "./utils.js";
11
10
 
@@ -16,7 +15,6 @@ export const SidebarCategory = ({
16
15
  category: SidebarItemCategory;
17
16
  level: number;
18
17
  }) => {
19
- const topNavItem = useTopNavigationItem();
20
18
  const isCategoryOpen = useIsCategoryOpen(category);
21
19
  const [hasInteracted, setHasInteracted] = useState(false);
22
20
 
@@ -26,6 +24,7 @@ export const SidebarCategory = ({
26
24
  !isCollapsible || !isCollapsed || isCategoryOpen,
27
25
  );
28
26
  const [open, setOpen] = useState(isDefaultOpen);
27
+ const isActive = useMatch(category.link?.id ?? "");
29
28
 
30
29
  useEffect(() => {
31
30
  // this is triggered when an item from the sidebar is clicked
@@ -56,46 +55,54 @@ export const SidebarCategory = ({
56
55
 
57
56
  return (
58
57
  <Collapsible.Root
59
- className={cn("flex flex-col", level === 0 && "-mx-[--padding-nav-item]")}
58
+ className="flex flex-col"
60
59
  defaultOpen={isDefaultOpen}
61
60
  open={open}
62
61
  onOpenChange={() => setOpen(true)}
63
62
  >
64
63
  <Collapsible.Trigger className="group" asChild disabled={!isCollapsible}>
65
64
  <div
66
- className={cn(
67
- "text-start",
68
- navigationListItem({ isActive: false, isTopLevel: level === 0 }),
69
- isCollapsible
70
- ? "cursor-pointer"
71
- : "cursor-default hover:bg-transparent",
72
- )}
65
+ onClick={() => setHasInteracted(true)}
66
+ className={navigationListItem({
67
+ isActive: false,
68
+ isTopLevel: level === 0,
69
+ className: [
70
+ "text-start",
71
+ isCollapsible
72
+ ? "cursor-pointer"
73
+ : "cursor-default hover:bg-transparent",
74
+ ],
75
+ })}
73
76
  >
74
77
  {category.icon && (
75
78
  <category.icon
76
79
  size={16}
77
- className="align-[-0.125em] -translate-x-1"
80
+ className={cn(
81
+ "align-[-0.125em] -translate-x-1",
82
+ isActive && "text-primary",
83
+ )}
78
84
  />
79
85
  )}
80
86
  {category.link?.type === "doc" ? (
81
87
  <NavLink
82
- to={joinPath(topNavItem?.id, category.link.id)}
88
+ to={joinPath(category.link.id)}
83
89
  className="flex-1"
84
- onClick={() => setHasInteracted(true)}
90
+ onClick={() => {
91
+ // if it is the current path and closed then open it because there's no path change to trigger the open
92
+ if (isActive && !open) {
93
+ setOpen(true);
94
+ }
95
+ }}
85
96
  >
86
- {({ isActive }) => (
87
- <div
88
- className={cn(
89
- "flex items-center gap-2 justify-between w-full",
90
- isActive
91
- ? "text-primary font-medium"
92
- : "text-foreground/80",
93
- )}
94
- >
95
- <div className="truncate">{category.label}</div>
96
- {ToggleButton}
97
- </div>
98
- )}
97
+ <div
98
+ className={cn(
99
+ "flex items-center gap-2 justify-between w-full",
100
+ isActive ? "text-primary" : "text-foreground/80",
101
+ )}
102
+ >
103
+ <div className="truncate">{category.label}</div>
104
+ {ToggleButton}
105
+ </div>
99
106
  </NavLink>
100
107
  ) : (
101
108
  <div className="flex items-center justify-between w-full">
@@ -109,10 +116,9 @@ export const SidebarCategory = ({
109
116
  className={cn(
110
117
  // CollapsibleContent class is used to animate and it should only be applied when the user has triggered the toggle
111
118
  hasInteracted && "CollapsibleContent",
112
- "ms-[calc(var(--padding-nav-item)*1.125)]",
113
119
  )}
114
120
  >
115
- <ul className="mt-1 border-l ps-2">
121
+ <ul className="mt-1 border-l ms-0.5">
116
122
  {category.items.map((item) => (
117
123
  <SidebarItem
118
124
  key={
@@ -3,11 +3,9 @@ import { ExternalLinkIcon } from "lucide-react";
3
3
  import { NavLink, useSearchParams } from "react-router-dom";
4
4
 
5
5
  import type { SidebarItem as SidebarItemType } from "../../../config/validators/SidebarSchema.js";
6
- import { cn } from "../../util/cn.js";
7
6
  import { joinPath } from "../../util/joinPath.js";
8
7
  import { AnchorLink } from "../AnchorLink.js";
9
8
  import { useViewportAnchor } from "../context/ViewportAnchorContext.js";
10
- import { useTopNavigationItem } from "../context/ZudokuContext.js";
11
9
  import { SidebarBadge } from "./SidebarBadge.js";
12
10
  import { SidebarCategory } from "./SidebarCategory.js";
13
11
 
@@ -16,7 +14,8 @@ export const navigationListItem = cva(
16
14
  {
17
15
  variants: {
18
16
  isTopLevel: {
19
- true: "font-semibold",
17
+ true: "font-medium -mx-[--padding-nav-item]",
18
+ false: "-mr-[--padding-nav-item] ml-[--padding-nav-item]",
20
19
  },
21
20
  isActive: {
22
21
  true: "text-primary font-medium",
@@ -27,6 +26,9 @@ export const navigationListItem = cva(
27
26
  false: "",
28
27
  },
29
28
  },
29
+ defaultVariants: {
30
+ isActive: false,
31
+ },
30
32
  },
31
33
  );
32
34
 
@@ -40,7 +42,6 @@ export const SidebarItem = ({
40
42
  basePath?: string;
41
43
  level?: number;
42
44
  }) => {
43
- const topNavItem = useTopNavigationItem();
44
45
  const { activeAnchor } = useViewportAnchor();
45
46
  const [searchParams] = useSearchParams();
46
47
 
@@ -53,12 +54,12 @@ export const SidebarItem = ({
53
54
  className={({ isActive }) =>
54
55
  navigationListItem({ isActive, isTopLevel: level === 0 })
55
56
  }
56
- to={joinPath(topNavItem?.id, item.id)}
57
+ to={joinPath(item.id)}
57
58
  >
58
59
  {item.icon && <item.icon size={16} className="align-[-0.125em]" />}
59
60
  {item.badge ? (
60
61
  <>
61
- <span className="truncate" title={item.label}>
62
+ <span className="truncate flex-1" title={item.label}>
62
63
  {item.label}
63
64
  </span>
64
65
  <SidebarBadge {...item.badge} />
@@ -73,13 +74,11 @@ export const SidebarItem = ({
73
74
  <AnchorLink
74
75
  to={{ hash: item.href, search: searchParams.toString() }}
75
76
  {...{ [DATA_ANCHOR_ATTR]: item.href.slice(1) }}
76
- className={cn(
77
- "flex gap-2.5 justify-between",
78
- level === 0 && "-mx-[--padding-nav-item]",
79
- navigationListItem({
80
- isActive: item.href.slice(1) === activeAnchor,
81
- }),
82
- )}
77
+ className={navigationListItem({
78
+ isActive: item.href.slice(1) === activeAnchor,
79
+ isTopLevel: level === 0,
80
+ className: item.badge?.placement !== "start" && "justify-between",
81
+ })}
83
82
  >
84
83
  {item.badge ? (
85
84
  <>
@@ -94,7 +93,9 @@ export const SidebarItem = ({
94
93
  </AnchorLink>
95
94
  ) : !item.href.startsWith("http") ? (
96
95
  <NavLink
97
- className={cn("flex gap-2.5 justify-between", navigationListItem())}
96
+ className={navigationListItem({
97
+ className: item.badge?.placement !== "start" && "justify-between",
98
+ })}
98
99
  to={item.href}
99
100
  >
100
101
  {item.badge ? (
@@ -110,10 +111,7 @@ export const SidebarItem = ({
110
111
  </NavLink>
111
112
  ) : (
112
113
  <a
113
- className={cn(
114
- navigationListItem({ isTopLevel: level === 0 }),
115
- "block",
116
- )}
114
+ className={navigationListItem({ isTopLevel: level === 0 })}
117
115
  href={item.href}
118
116
  target="_blank"
119
117
  rel="noopener noreferrer"
@@ -121,8 +119,7 @@ export const SidebarItem = ({
121
119
  <span className="whitespace-normal">{item.label}</span>
122
120
  {/* This prevents that the icon would be positioned in its own line if the text fills a line entirely */}
123
121
  <span className="whitespace-nowrap">
124
- &nbsp;
125
- <ExternalLinkIcon className="inline ml-1" size={12} />
122
+ <ExternalLinkIcon className="inline -translate-y-0.5" size={12} />
126
123
  </span>
127
124
  </a>
128
125
  );
@@ -4,7 +4,7 @@ import type {
4
4
  SidebarItemCategory,
5
5
  } from "../../../config/validators/SidebarSchema.js";
6
6
  import { joinPath } from "../../util/joinPath.js";
7
- import { useTopNavigationItem, useZudoku } from "../context/ZudokuContext.js";
7
+ import { useCurrentNavigation } from "../context/ZudokuContext.js";
8
8
 
9
9
  export type TraverseCallback<T> = (
10
10
  item: SidebarItem,
@@ -42,15 +42,12 @@ export const traverseSidebarItem = <T>(
42
42
 
43
43
  export const useCurrentItem = () => {
44
44
  const location = useLocation();
45
- const topNavItem = useTopNavigationItem();
46
- const { sidebars } = useZudoku();
47
- const currentSidebar = topNavItem?.id ? sidebars[topNavItem.id] : [];
45
+ const nav = useCurrentNavigation();
46
+
47
+ const currentSidebar = nav.data.sidebar;
48
48
 
49
49
  return traverseSidebar(currentSidebar, (item) => {
50
- if (
51
- item.type === "doc" &&
52
- joinPath(topNavItem?.id, item.id) === location.pathname
53
- ) {
50
+ if (item.type === "doc" && joinPath(item.id) === location.pathname) {
54
51
  return item;
55
52
  }
56
53
  });
@@ -58,18 +55,17 @@ export const useCurrentItem = () => {
58
55
 
59
56
  export const useIsCategoryOpen = (category: SidebarItemCategory) => {
60
57
  const location = useLocation();
61
- const topNavItem = useTopNavigationItem();
62
58
 
63
59
  return traverseSidebarItem(category, (item) => {
64
60
  if (item.type === "category" && item.link) {
65
- const categoryLinkPath = joinPath(topNavItem?.id, item.link.id);
61
+ const categoryLinkPath = joinPath(item.link.id);
66
62
  if (categoryLinkPath === location.pathname) {
67
63
  return true;
68
64
  }
69
65
  }
70
66
 
71
67
  if (item.type === "doc") {
72
- const docPath = joinPath(topNavItem?.id, item.id);
68
+ const docPath = joinPath(item.id);
73
69
  if (docPath === location.pathname) {
74
70
  return true;
75
71
  }
@@ -82,9 +78,8 @@ export const usePrevNext = (): {
82
78
  next?: { label: string; id: string };
83
79
  } => {
84
80
  const currentId = useLocation().pathname;
85
- const { sidebars } = useZudoku();
86
- const topNavItem = useTopNavigationItem();
87
- const currentSidebar = topNavItem?.id ? sidebars[topNavItem.id] : [];
81
+ const nav = useCurrentNavigation();
82
+ const currentSidebar = nav.data.sidebar;
88
83
 
89
84
  let prev;
90
85
  let next;
@@ -94,9 +89,9 @@ export const usePrevNext = (): {
94
89
  traverseSidebar(currentSidebar, (item) => {
95
90
  const itemId =
96
91
  item.type === "doc"
97
- ? joinPath(topNavItem?.id, item.id)
92
+ ? joinPath(item.id)
98
93
  : item.type === "category" && item.link
99
- ? joinPath(topNavItem?.id, item.link.id)
94
+ ? joinPath(item.link.id)
100
95
  : undefined;
101
96
 
102
97
  if (!itemId) return;
@@ -1,6 +1,7 @@
1
1
  import { QueryClient } from "@tanstack/react-query";
2
2
  import { ReactNode } from "react";
3
3
  import type { SidebarConfig } from "../../config/validators/SidebarSchema.js";
4
+ import { TopNavigationItem } from "../../config/validators/validate.js";
4
5
  import { type AuthenticationProvider } from "../authentication/authentication.js";
5
6
  import type { ComponentsContextType } from "../components/context/ComponentsContext.js";
6
7
  import { Slotlets } from "../components/SlotletProvider.js";
@@ -51,7 +52,7 @@ type Page = Partial<{
51
52
  };
52
53
  banner?: {
53
54
  message: ReactNode;
54
- color?: "note" | "tip" | "info" | "caution" | "danger";
55
+ color?: "note" | "tip" | "info" | "caution" | "danger" | (string & {});
55
56
  dismissible?: boolean;
56
57
  };
57
58
  }>;
@@ -60,7 +61,7 @@ export type ZudokuContextOptions = {
60
61
  metadata?: Metadata;
61
62
  page?: Page;
62
63
  authentication?: AuthenticationProvider;
63
- topNavigation?: Array<{ id: string; label: string; default?: string }>;
64
+ topNavigation?: TopNavigationItem[];
64
65
  sidebars?: SidebarConfig;
65
66
  plugins?: DevPortalPlugin[];
66
67
  slotlets?: Slotlets;
@@ -72,7 +73,7 @@ export type ZudokuContextOptions = {
72
73
 
73
74
  export class DevPortalContext {
74
75
  public plugins: NonNullable<ZudokuContextOptions["plugins"]>;
75
- public sidebars: NonNullable<ZudokuContextOptions["sidebars"]>;
76
+ public sidebars: SidebarConfig;
76
77
  public topNavigation: NonNullable<ZudokuContextOptions["topNavigation"]>;
77
78
  public meta: ZudokuContextOptions["metadata"];
78
79
  public page: ZudokuContextOptions["page"];
@@ -11,6 +11,8 @@ export type DevPortalPlugin =
11
11
  | ApiIdentityPlugin
12
12
  | SearchProviderPlugin;
13
13
 
14
+ export type { RouteObject };
15
+
14
16
  export interface NavigationPlugin {
15
17
  getRoutes: () => RouteObject[];
16
18
  getSidebar?: (path: string) => Promise<Sidebar>;
@@ -1,16 +1,29 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2
- export function ErrorAlert({ error }: { error: any }) {
3
- const message = error?.message ?? "Something went wrong";
4
- const stack = error?.stack;
2
+ import { DeveloperHint } from "../components/DeveloperHint.js";
3
+ import { ZudokuError } from "../util/invariant.js";
4
+
5
+ export function ErrorAlert({ error }: { error: unknown }) {
6
+ const message =
7
+ error instanceof Error ? error.message : "Something went wrong";
8
+ const hint = error instanceof ZudokuError ? error.developerHint : undefined;
9
+ const title =
10
+ error instanceof ZudokuError ? error.title : "Something went wrong";
11
+ const stack = error instanceof Error ? error.stack : undefined;
12
+ const cause = error instanceof Error ? error.cause : undefined;
5
13
 
6
14
  return (
7
15
  <div className="flex h-screen max-h-screen min-h-full items-center justify-center bg-primary-background px-4 py-16 lg:px-8">
8
16
  <div className="mx-auto max-w-[85%] sm:max-w-[50%]">
9
17
  <h1 className="text-4xl font-bold tracking-tight text-h1-text sm:text-5xl">
10
- Something went wrong
18
+ {title}
11
19
  </h1>
12
20
  <p className="mt-5 text-h1-text">{message}</p>
13
- {stack ? (
21
+ {hint && <DeveloperHint className="mb-4">{hint}</DeveloperHint>}
22
+ {cause instanceof Error ? (
23
+ <pre className="mt-5 max-h-[400px] w-full overflow-scroll rounded-md border border-input-border bg-input-background p-3 text-property-name-text text-red-700">
24
+ {cause.stack}
25
+ </pre>
26
+ ) : stack ? (
14
27
  <pre className="mt-5 max-h-[400px] w-full overflow-scroll rounded-md border border-input-border bg-input-background p-3 text-property-name-text text-red-700">
15
28
  {stack}
16
29
  </pre>
@@ -1,10 +1,13 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import SchemaBuilder from "@pothos/core";
3
+ import {
4
+ slugifyWithCounter,
5
+ type CountableSlugify,
6
+ } from "@sindresorhus/slugify";
3
7
  import { GraphQLJSON, GraphQLJSONObject } from "graphql-type-json";
4
8
  import { createYoga, type YogaServerOptions } from "graphql-yoga";
5
9
  import { LRUCache } from "lru-cache";
6
10
  import hashit from "object-hash";
7
- import slugify from "../../util/slugify.js";
8
11
  import {
9
12
  HttpMethods,
10
13
  validate,
@@ -15,6 +18,7 @@ import {
15
18
  type ParameterObject,
16
19
  type PathsObject,
17
20
  type SchemaObject,
21
+ type ServerObject,
18
22
  type TagObject,
19
23
  } from "../parser/index.js";
20
24
 
@@ -35,7 +39,12 @@ type OperationLike = {
35
39
  path: string;
36
40
  method: string;
37
41
  };
38
- export const slugifyOperation = (operation: OperationLike, tag?: string) => {
42
+
43
+ export const createOperationSlug = (
44
+ slugify: CountableSlugify,
45
+ operation: OperationLike,
46
+ tag?: string,
47
+ ) => {
39
48
  const summary =
40
49
  (operation.summary ?? "") +
41
50
  (operation.operationId
@@ -46,13 +55,13 @@ export const slugifyOperation = (operation: OperationLike, tag?: string) => {
46
55
  return slugify(
47
56
  (tag ? tag + "-" : "") +
48
57
  (summary || `${operation.method}-${operation.path}`),
49
- { lower: true, trim: true },
50
58
  );
51
59
  };
52
60
 
53
- const cache = new LRUCache<string, Promise<OpenAPIDocument>>({
61
+ const cache = new LRUCache<string, OpenAPIDocument>({
54
62
  ttl: 60 * 10 * 1000,
55
63
  ttlAutopurge: true,
64
+ fetchMethod: (_key, _oldValue, { context }) => validate(context as string),
56
65
  });
57
66
 
58
67
  const builder = new SchemaBuilder<{
@@ -88,6 +97,8 @@ const getAllTags = (schema: OpenAPIDocument): TagObject[] => {
88
97
  };
89
98
 
90
99
  const getAllOperations = (paths?: PathsObject, tag?: string) => {
100
+ const slugify = slugifyWithCounter();
101
+
91
102
  return Object.entries(paths ?? {}).flatMap(([path, value]) =>
92
103
  HttpMethods.flatMap((method) => {
93
104
  if (!value?.[method]) return [];
@@ -109,21 +120,20 @@ const getAllOperations = (paths?: PathsObject, tag?: string) => {
109
120
  ...operationParameters,
110
121
  ];
111
122
 
123
+ const slugData = {
124
+ summary: operation.summary,
125
+ operationId: operation.operationId,
126
+ path,
127
+ method,
128
+ };
129
+
112
130
  return {
113
131
  ...operation,
114
132
  method,
115
133
  path,
116
134
  parameters,
117
135
  tags: operation.tags ?? [],
118
- slug: slugifyOperation(
119
- {
120
- summary: operation.summary,
121
- operationId: operation.operationId,
122
- path,
123
- method,
124
- },
125
- tag,
126
- ),
136
+ slug: createOperationSlug(slugify, slugData, tag),
127
137
  };
128
138
  }),
129
139
  );
@@ -150,6 +160,13 @@ const SchemaTag = builder.objectRef<TagObject>("SchemaTag").implement({
150
160
  }),
151
161
  });
152
162
 
163
+ const ServerItem = builder.objectRef<ServerObject>("Server").implement({
164
+ fields: (t) => ({
165
+ url: t.exposeString("url"),
166
+ description: t.exposeString("description", { nullable: true }),
167
+ }),
168
+ });
169
+
153
170
  const PathItem = builder
154
171
  .objectRef<{
155
172
  path: string;
@@ -363,6 +380,10 @@ const Schema = builder.objectRef<OpenAPIDocument>("Schema").implement({
363
380
  fields: (t) => ({
364
381
  openapi: t.string({ resolve: (root) => root.openapi }),
365
382
  url: t.string({ resolve: (root) => root.servers?.at(0)?.url ?? "/" }),
383
+ servers: t.field({
384
+ type: [ServerItem],
385
+ resolve: (root) => root.servers ?? [],
386
+ }),
366
387
  title: t.string({ resolve: (root) => root.info.title }),
367
388
  version: t.string({ resolve: (root) => root.info.version }),
368
389
  description: t.string({
@@ -409,20 +430,11 @@ const Schema = builder.objectRef<OpenAPIDocument>("Schema").implement({
409
430
 
410
431
  const loadOpenAPISchema = async (input: NonNullable<unknown>) => {
411
432
  const hash = hashit(input);
412
-
413
- if (cache.has(hash)) {
414
- return cache.get(hash)!;
415
- }
416
-
417
- const schema = validate(input);
418
-
419
- cache.set(hash, schema);
420
-
421
- return schema;
433
+ return await cache.forceFetch(hash, { context: input });
422
434
  };
423
435
 
424
436
  const SchemaSource = builder.enumType("SchemaType", {
425
- values: ["url", "file"] as const,
437
+ values: ["url", "file", "raw"] as const,
426
438
  });
427
439
 
428
440
  builder.queryType({
@@ -20,6 +20,7 @@ export type TagObject = DeepOmitReference<OpenAPIV3_1.TagObject>;
20
20
  export type ExampleObject = DeepOmitReference<OpenAPIV3_1.ExampleObject>;
21
21
  export type EncodingObject = DeepOmitReference<OpenAPIV3_1.EncodingObject>;
22
22
  export type SchemaObject = DeepOmitReference<OpenAPIV3_1.SchemaObject>;
23
+ export type ServerObject = DeepOmitReference<OpenAPIV3_1.ServerObject>;
23
24
 
24
25
  export const HttpMethods = Object.values(OpenAPIV3.HttpMethods);
25
26
 
@@ -1,7 +1,6 @@
1
1
  import { useMutation } from "@tanstack/react-query";
2
2
  import { useForm } from "react-hook-form";
3
3
  import { Link, useNavigate } from "react-router-dom";
4
- import { useZudoku } from "../../components/context/ZudokuContext.js";
5
4
  import {
6
5
  Select,
7
6
  SelectContent,
@@ -9,7 +8,8 @@ import {
9
8
  SelectItem,
10
9
  SelectTrigger,
11
10
  SelectValue,
12
- } from "../../components/Select.js";
11
+ } from "zudoku/ui/Select.js";
12
+ import { useZudoku } from "../../components/context/ZudokuContext.js";
13
13
  import { Button } from "../../ui/Button.js";
14
14
  import { Input } from "../../ui/Input.js";
15
15
  import { ApiKeyService } from "./index.js";
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { ProseClasses } from "../../components/Markdown.js";
3
+ import { cn } from "../../util/cn.js";
4
+ import { useExposedProps } from "../../util/useExposedProps.js";
5
+ import type { CustomPageConfig } from "./index.js";
6
+
7
+ export const CustomPage = ({
8
+ element,
9
+ render,
10
+ prose = true,
11
+ }: Omit<CustomPageConfig, "path">) => {
12
+ const exposedProps = useExposedProps();
13
+ const content = render ? React.createElement(render, exposedProps) : element;
14
+
15
+ return (
16
+ <div className={cn(prose && ProseClasses, "max-w-full")}>{content}</div>
17
+ );
18
+ };
@@ -0,0 +1,24 @@
1
+ import { type ComponentType, type ReactNode } from "react";
2
+ import type { RouteObject } from "react-router-dom";
3
+ import { type ExposedComponentProps } from "../../components/SlotletProvider.js";
4
+ import type { DevPortalPlugin, NavigationPlugin } from "../../core/plugins.js";
5
+ import { CustomPage } from "./CustomPage.js";
6
+
7
+ export type CustomPageConfig = {
8
+ path: string;
9
+ prose?: boolean;
10
+ element?: ReactNode;
11
+ render?: ComponentType<ExposedComponentProps>;
12
+ };
13
+
14
+ export const customPagesPlugin = (
15
+ config: CustomPageConfig[],
16
+ ): DevPortalPlugin & NavigationPlugin => {
17
+ return {
18
+ getRoutes: (): RouteObject[] =>
19
+ config.map(({ path, ...props }) => ({
20
+ path,
21
+ element: <CustomPage {...props} />,
22
+ })),
23
+ };
24
+ };
@@ -1,4 +1,5 @@
1
1
  import { useMDXComponents } from "@mdx-js/react";
2
+ import slugify from "@sindresorhus/slugify";
2
3
  import { Helmet } from "@zudoku/react-helmet-async";
3
4
  import { type PropsWithChildren } from "react";
4
5
  import { Link } from "react-router-dom";
@@ -11,7 +12,6 @@ import {
11
12
  } from "../../components/navigation/utils.js";
12
13
  import type { MdxComponentsType } from "../../util/MdxComponents.js";
13
14
  import { cn } from "../../util/cn.js";
14
- import slugify from "../../util/slugify.js";
15
15
  import { Toc } from "./Toc.js";
16
16
  import { MarkdownPluginDefaultOptions, MDXImport } from "./index.js";
17
17
 
@@ -68,14 +68,16 @@ export const MdxPage = ({
68
68
  "max-w-full xl:w-full xl:max-w-prose flex-1 flex-shrink pt-[--padding-content-top] pb-[--padding-content-bottom]",
69
69
  )}
70
70
  >
71
- <header>
72
- {category && <CategoryHeading>{category}</CategoryHeading>}
73
- {title && (
74
- <Heading level={1} id={slugify(title, { lower: true })}>
75
- {title}
76
- </Heading>
77
- )}
78
- </header>
71
+ {(category || title) && (
72
+ <header>
73
+ {category && <CategoryHeading>{category}</CategoryHeading>}
74
+ {title && (
75
+ <Heading level={1} id={slugify(title)}>
76
+ {title}
77
+ </Heading>
78
+ )}
79
+ </header>
80
+ )}
79
81
  <MdxComponent
80
82
  components={{ ...useMDXComponents(), ...MarkdownHeadings }}
81
83
  />