zudoku 0.45.1 → 0.46.0

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 (532) hide show
  1. package/dist/app/main.js +4 -23
  2. package/dist/app/main.js.map +1 -1
  3. package/dist/config/config.d.ts +2 -2
  4. package/dist/config/file-exists.d.ts +1 -0
  5. package/dist/config/file-exists.js +5 -0
  6. package/dist/config/file-exists.js.map +1 -0
  7. package/dist/config/loader.d.ts +19 -4
  8. package/dist/config/loader.js +94 -14
  9. package/dist/config/loader.js.map +1 -1
  10. package/dist/config/validators/validate.d.ts +3536 -743
  11. package/dist/config/validators/validate.js +396 -11
  12. package/dist/config/validators/validate.js.map +1 -1
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.js +2 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/lib/authentication/AuthenticationPlugin.d.ts +7 -2
  17. package/dist/lib/authentication/AuthenticationPlugin.js +13 -1
  18. package/dist/lib/authentication/AuthenticationPlugin.js.map +1 -1
  19. package/dist/lib/authentication/authentication.d.ts +2 -4
  20. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  21. package/dist/lib/authentication/providers/clerk.js +62 -43
  22. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  23. package/dist/lib/authentication/providers/openid.d.ts +7 -12
  24. package/dist/lib/authentication/providers/openid.js +11 -22
  25. package/dist/lib/authentication/providers/openid.js.map +1 -1
  26. package/dist/lib/authentication/providers/supabase.js +3 -5
  27. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  28. package/dist/lib/components/Autocomplete.js +1 -1
  29. package/dist/lib/components/Banner.js +1 -1
  30. package/dist/lib/components/Banner.js.map +1 -1
  31. package/dist/lib/components/ErrorPage.js +1 -1
  32. package/dist/lib/components/Footer.js +3 -3
  33. package/dist/lib/components/Footer.js.map +1 -1
  34. package/dist/lib/components/Header.js +16 -8
  35. package/dist/lib/components/Header.js.map +1 -1
  36. package/dist/lib/components/Heading.js +6 -1
  37. package/dist/lib/components/Heading.js.map +1 -1
  38. package/dist/lib/components/InlineCode.js +1 -1
  39. package/dist/lib/components/InlineCode.js.map +1 -1
  40. package/dist/lib/components/Layout.js +2 -2
  41. package/dist/lib/components/Layout.js.map +1 -1
  42. package/dist/lib/components/Main.js +2 -2
  43. package/dist/lib/components/Main.js.map +1 -1
  44. package/dist/lib/components/Markdown.js +8 -3
  45. package/dist/lib/components/Markdown.js.map +1 -1
  46. package/dist/lib/components/MobileTopNavigation.js +3 -2
  47. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  48. package/dist/lib/components/NotFoundPage.js +1 -1
  49. package/dist/lib/components/Pagination.js +1 -1
  50. package/dist/lib/components/Pagination.js.map +1 -1
  51. package/dist/lib/components/Search.js +1 -1
  52. package/dist/lib/components/Search.js.map +1 -1
  53. package/dist/lib/components/Slot.d.ts +17 -0
  54. package/dist/lib/components/Slot.js +24 -0
  55. package/dist/lib/components/Slot.js.map +1 -0
  56. package/dist/lib/components/Slot.test.js +168 -0
  57. package/dist/lib/components/Slot.test.js.map +1 -0
  58. package/dist/lib/components/TopNavigation.d.ts +1 -4
  59. package/dist/lib/components/TopNavigation.js +3 -11
  60. package/dist/lib/components/TopNavigation.js.map +1 -1
  61. package/dist/lib/components/Zudoku.js +2 -2
  62. package/dist/lib/components/Zudoku.js.map +1 -1
  63. package/dist/lib/components/context/SlotProvider.d.ts +26 -0
  64. package/dist/lib/components/context/SlotProvider.js +83 -0
  65. package/dist/lib/components/context/SlotProvider.js.map +1 -0
  66. package/dist/lib/components/context/ZudokuContext.d.ts +1 -1
  67. package/dist/lib/components/context/ZudokuProvider.js +2 -1
  68. package/dist/lib/components/context/ZudokuProvider.js.map +1 -1
  69. package/dist/lib/components/index.d.ts +29 -23
  70. package/dist/lib/components/index.js +13 -7
  71. package/dist/lib/components/index.js.map +1 -1
  72. package/dist/lib/components/navigation/PoweredByZudoku.js +1 -1
  73. package/dist/lib/components/navigation/Sidebar.js +3 -3
  74. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  75. package/dist/lib/components/navigation/SidebarBadge.js +1 -1
  76. package/dist/lib/components/navigation/SidebarBadge.js.map +1 -1
  77. package/dist/lib/components/navigation/SidebarCategory.js +3 -3
  78. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  79. package/dist/lib/components/navigation/SidebarItem.d.ts +0 -5
  80. package/dist/lib/components/navigation/SidebarItem.js +19 -23
  81. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  82. package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
  83. package/dist/lib/components/navigation/Toc.js +1 -1
  84. package/dist/lib/components/navigation/Toc.js.map +1 -1
  85. package/dist/lib/components/navigation/utils.d.ts +8 -0
  86. package/dist/lib/components/navigation/utils.js +34 -6
  87. package/dist/lib/components/navigation/utils.js.map +1 -1
  88. package/dist/lib/core/ZudokuContext.d.ts +12 -8
  89. package/dist/lib/core/ZudokuContext.js +6 -5
  90. package/dist/lib/core/ZudokuContext.js.map +1 -1
  91. package/dist/lib/core/plugins.d.ts +5 -2
  92. package/dist/lib/core/plugins.js +1 -0
  93. package/dist/lib/core/plugins.js.map +1 -1
  94. package/dist/lib/errors/ErrorAlert.js +1 -1
  95. package/dist/lib/hooks/index.d.ts +19 -0
  96. package/dist/lib/hooks/index.js +11 -0
  97. package/dist/lib/hooks/index.js.map +1 -1
  98. package/dist/lib/plugins/api-catalog/Catalog.js +1 -1
  99. package/dist/lib/plugins/api-keys/CreateApiKey.d.ts +3 -2
  100. package/dist/lib/plugins/api-keys/CreateApiKey.js +8 -4
  101. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
  102. package/dist/lib/plugins/api-keys/SettingsApiKeys.d.ts +1 -1
  103. package/dist/lib/plugins/api-keys/SettingsApiKeys.js +54 -23
  104. package/dist/lib/plugins/api-keys/SettingsApiKeys.js.map +1 -1
  105. package/dist/lib/plugins/api-keys/index.d.ts +18 -9
  106. package/dist/lib/plugins/api-keys/index.js +49 -34
  107. package/dist/lib/plugins/api-keys/index.js.map +1 -1
  108. package/dist/lib/plugins/custom-pages/index.d.ts +1 -1
  109. package/dist/lib/plugins/markdown/MdxPage.js +1 -1
  110. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  111. package/dist/lib/plugins/markdown/index.d.ts +1 -1
  112. package/dist/lib/plugins/markdown/resolver.d.ts +1 -1
  113. package/dist/lib/plugins/markdown/resolver.js.map +1 -1
  114. package/dist/lib/plugins/openapi/CollapsibleCode.js +1 -1
  115. package/dist/lib/plugins/openapi/ColorizedParam.js +1 -1
  116. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  117. package/dist/lib/plugins/openapi/OperationList.js +1 -1
  118. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  119. package/dist/lib/plugins/openapi/OperationListItem.js +2 -3
  120. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  121. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +5 -1
  122. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  123. package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +2 -4
  124. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +1 -4
  125. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  126. package/dist/lib/plugins/openapi/SchemaList.js +6 -5
  127. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  128. package/dist/lib/plugins/openapi/Sidecar.js +1 -1
  129. package/dist/lib/plugins/openapi/SidecarExamples.js +8 -0
  130. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  131. package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
  132. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
  133. package/dist/lib/plugins/openapi/components/ResponseContent.d.ts +12 -0
  134. package/dist/lib/plugins/openapi/components/ResponseContent.js +21 -0
  135. package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -0
  136. package/dist/lib/plugins/openapi/playground/Playground.js +2 -0
  137. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  138. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +1 -1
  139. package/dist/lib/plugins/openapi/playground/SubmitButton.js +7 -10
  140. package/dist/lib/plugins/openapi/playground/SubmitButton.js.map +1 -1
  141. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +2 -2
  142. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  143. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +2 -1
  144. package/dist/lib/plugins/openapi/schema/SchemaView.js +3 -3
  145. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  146. package/dist/lib/plugins/redirect/index.d.ts +1 -1
  147. package/dist/lib/ui/Badge.d.ts +2 -2
  148. package/dist/lib/ui/Badge.js +1 -1
  149. package/dist/lib/ui/Badge.js.map +1 -1
  150. package/dist/lib/ui/Button.d.ts +2 -2
  151. package/dist/lib/ui/Button.js +8 -6
  152. package/dist/lib/ui/Button.js.map +1 -1
  153. package/dist/lib/ui/Callout.js +1 -1
  154. package/dist/lib/ui/Callout.js.map +1 -1
  155. package/dist/lib/ui/Card.js +1 -1
  156. package/dist/lib/ui/Checkbox.js +1 -1
  157. package/dist/lib/ui/Checkbox.js.map +1 -1
  158. package/dist/lib/ui/Command.d.ts +2 -2
  159. package/dist/lib/ui/Command.js +3 -3
  160. package/dist/lib/ui/Command.js.map +1 -1
  161. package/dist/lib/ui/Dialog.js +1 -1
  162. package/dist/lib/ui/Dialog.js.map +1 -1
  163. package/dist/lib/ui/DropdownMenu.js +4 -4
  164. package/dist/lib/ui/DropdownMenu.js.map +1 -1
  165. package/dist/lib/ui/HoverCard.js +1 -1
  166. package/dist/lib/ui/HoverCard.js.map +1 -1
  167. package/dist/lib/ui/Input.js +1 -1
  168. package/dist/lib/ui/Input.js.map +1 -1
  169. package/dist/lib/ui/Popover.js +1 -1
  170. package/dist/lib/ui/Popover.js.map +1 -1
  171. package/dist/lib/ui/RadioGroup.js +1 -1
  172. package/dist/lib/ui/RadioGroup.js.map +1 -1
  173. package/dist/lib/ui/Select.js +2 -2
  174. package/dist/lib/ui/Select.js.map +1 -1
  175. package/dist/lib/ui/Slider.js +1 -1
  176. package/dist/lib/ui/Slider.js.map +1 -1
  177. package/dist/lib/ui/Switch.js +1 -1
  178. package/dist/lib/ui/Switch.js.map +1 -1
  179. package/dist/lib/ui/Tabs.js +2 -2
  180. package/dist/lib/ui/Tabs.js.map +1 -1
  181. package/dist/lib/ui/Textarea.js +1 -1
  182. package/dist/lib/ui/Textarea.js.map +1 -1
  183. package/dist/lib/ui/Toggle.js +1 -1
  184. package/dist/lib/ui/Toggle.js.map +1 -1
  185. package/dist/lib/ui/Tooltip.d.ts +2 -1
  186. package/dist/lib/ui/Tooltip.js +2 -1
  187. package/dist/lib/ui/Tooltip.js.map +1 -1
  188. package/dist/lib/util/useExposedProps.d.ts +8 -1
  189. package/dist/lib/util/useExposedProps.js.map +1 -1
  190. package/dist/vite/api/SchemaManager.js +16 -1
  191. package/dist/vite/api/SchemaManager.js.map +1 -1
  192. package/dist/vite/build.js +44 -6
  193. package/dist/vite/build.js.map +1 -1
  194. package/dist/vite/config.d.ts +2 -9
  195. package/dist/vite/config.js +6 -95
  196. package/dist/vite/config.js.map +1 -1
  197. package/dist/vite/config.test.js +1 -1
  198. package/dist/vite/config.test.js.map +1 -1
  199. package/dist/vite/css/plugin.d.ts +1 -2
  200. package/dist/vite/css/plugin.js +3 -2
  201. package/dist/vite/css/plugin.js.map +1 -1
  202. package/dist/vite/dev-server.d.ts +0 -1
  203. package/dist/vite/dev-server.js +10 -12
  204. package/dist/vite/dev-server.js.map +1 -1
  205. package/dist/vite/html.d.ts +2 -2
  206. package/dist/vite/html.js +5 -2
  207. package/dist/vite/html.js.map +1 -1
  208. package/dist/vite/plugin-api-keys.d.ts +1 -2
  209. package/dist/vite/plugin-api-keys.js +9 -3
  210. package/dist/vite/plugin-api-keys.js.map +1 -1
  211. package/dist/vite/plugin-api.d.ts +1 -2
  212. package/dist/vite/plugin-api.js +5 -4
  213. package/dist/vite/plugin-api.js.map +1 -1
  214. package/dist/vite/plugin-auth.d.ts +1 -2
  215. package/dist/vite/plugin-auth.js +3 -2
  216. package/dist/vite/plugin-auth.js.map +1 -1
  217. package/dist/vite/plugin-component.d.ts +1 -2
  218. package/dist/vite/plugin-component.js +3 -2
  219. package/dist/vite/plugin-component.js.map +1 -1
  220. package/dist/vite/plugin-config-reload.d.ts +1 -2
  221. package/dist/vite/plugin-config-reload.js +21 -22
  222. package/dist/vite/plugin-config-reload.js.map +1 -1
  223. package/dist/vite/plugin-config.d.ts +1 -2
  224. package/dist/vite/plugin-config.js +4 -3
  225. package/dist/vite/plugin-config.js.map +1 -1
  226. package/dist/vite/plugin-configure-tailwind.d.ts +2 -0
  227. package/dist/vite/plugin-configure-tailwind.js +38 -0
  228. package/dist/vite/plugin-configure-tailwind.js.map +1 -0
  229. package/dist/vite/plugin-custom-pages.d.ts +1 -2
  230. package/dist/vite/plugin-custom-pages.js +3 -2
  231. package/dist/vite/plugin-custom-pages.js.map +1 -1
  232. package/dist/vite/plugin-docs.d.ts +1 -2
  233. package/dist/vite/plugin-docs.js +4 -3
  234. package/dist/vite/plugin-docs.js.map +1 -1
  235. package/dist/vite/plugin-frontmatter.d.ts +1 -2
  236. package/dist/vite/plugin-frontmatter.js +3 -2
  237. package/dist/vite/plugin-frontmatter.js.map +1 -1
  238. package/dist/vite/plugin-mdx.d.ts +1 -2
  239. package/dist/vite/plugin-mdx.js +3 -2
  240. package/dist/vite/plugin-mdx.js.map +1 -1
  241. package/dist/vite/plugin-redirect.d.ts +1 -2
  242. package/dist/vite/plugin-redirect.js +3 -2
  243. package/dist/vite/plugin-redirect.js.map +1 -1
  244. package/dist/vite/plugin-search.d.ts +1 -2
  245. package/dist/vite/plugin-search.js +3 -2
  246. package/dist/vite/plugin-search.js.map +1 -1
  247. package/dist/vite/plugin-shiki-register.d.ts +1 -2
  248. package/dist/vite/plugin-shiki-register.js +2 -1
  249. package/dist/vite/plugin-shiki-register.js.map +1 -1
  250. package/dist/vite/plugin-sidebar.d.ts +1 -2
  251. package/dist/vite/plugin-sidebar.js +3 -2
  252. package/dist/vite/plugin-sidebar.js.map +1 -1
  253. package/dist/vite/plugin-theme-css.d.ts +1 -2
  254. package/dist/vite/plugin-theme-css.js +20 -60
  255. package/dist/vite/plugin-theme-css.js.map +1 -1
  256. package/dist/vite/plugin.d.ts +1 -2
  257. package/dist/vite/plugin.js +22 -21
  258. package/dist/vite/plugin.js.map +1 -1
  259. package/dist/vite/sitemap.d.ts +1 -1
  260. package/dist/zuplo/with-zuplo.d.ts +2 -2
  261. package/dist/zuplo/with-zuplo.js.map +1 -1
  262. package/lib/Button-BE9IVkWV.js +51 -0
  263. package/lib/Button-BE9IVkWV.js.map +1 -0
  264. package/lib/{Callout-XadUe37J.js → Callout-BkgOUkoZ.js} +9 -8
  265. package/lib/Callout-BkgOUkoZ.js.map +1 -0
  266. package/lib/{Card-BlCYNw5W.js → Card-DPhGbYUM.js} +3 -3
  267. package/lib/{Card-BlCYNw5W.js.map → Card-DPhGbYUM.js.map} +1 -1
  268. package/lib/{CategoryHeading-DZi-Szor.js → CategoryHeading-Cu2RwgjC.js} +2 -2
  269. package/lib/{CategoryHeading-DZi-Szor.js.map → CategoryHeading-Cu2RwgjC.js.map} +1 -1
  270. package/lib/{Dialog-CNf2oWXG.js → Dialog-Du6WMcIA.js} +8 -7
  271. package/lib/Dialog-Du6WMcIA.js.map +1 -0
  272. package/lib/{Drawer-BPBxzel2.js → Drawer-BzkOKwgC.js} +2 -2
  273. package/lib/{Drawer-BPBxzel2.js.map → Drawer-BzkOKwgC.js.map} +1 -1
  274. package/lib/Markdown-BRAyzyUJ.js +15348 -0
  275. package/lib/Markdown-BRAyzyUJ.js.map +1 -0
  276. package/lib/{MdxPage-tTTaDsLc.js → MdxPage-B3v1BSKr.js} +11 -11
  277. package/lib/MdxPage-B3v1BSKr.js.map +1 -0
  278. package/lib/{OasProvider-DalHQixM.js → OasProvider-5jrFuhVk.js} +3 -3
  279. package/lib/{OasProvider-DalHQixM.js.map → OasProvider-5jrFuhVk.js.map} +1 -1
  280. package/lib/{OperationList-BB09ENaq.js → OperationList-BmoMLQPO.js} +1039 -1005
  281. package/lib/OperationList-BmoMLQPO.js.map +1 -0
  282. package/lib/Pagination-Cr0fWZS3.js +36 -0
  283. package/lib/Pagination-Cr0fWZS3.js.map +1 -0
  284. package/lib/RouteGuard-PrSVLbSr.js +55 -0
  285. package/lib/RouteGuard-PrSVLbSr.js.map +1 -0
  286. package/lib/{SchemaList-BH9bgMRw.js → SchemaList-B4riYLoP.js} +61 -47
  287. package/lib/SchemaList-B4riYLoP.js.map +1 -0
  288. package/lib/{SchemaView-BsB7EFRl.js → SchemaView-CPZ6RgsF.js} +100 -95
  289. package/lib/SchemaView-CPZ6RgsF.js.map +1 -0
  290. package/lib/{AuthenticationPlugin-BTJ37DKg.js → SignUp-CWaiH0tY.js} +23 -50
  291. package/lib/SignUp-CWaiH0tY.js.map +1 -0
  292. package/lib/Slot-Bo6K4tnb.js +160 -0
  293. package/lib/Slot-Bo6K4tnb.js.map +1 -0
  294. package/lib/{SyntaxHighlight-UxOF1xNb.js → SyntaxHighlight-DedRjJNr.js} +233 -212
  295. package/lib/{SyntaxHighlight-UxOF1xNb.js.map → SyntaxHighlight-DedRjJNr.js.map} +1 -1
  296. package/lib/{Toc-Ax54Pw8S.js → Toc-lL3fzNkl.js} +5 -5
  297. package/lib/Toc-lL3fzNkl.js.map +1 -0
  298. package/lib/{circular-CZaZtOBs.js → circular-oB4auIIg.js} +2 -2
  299. package/lib/{circular-CZaZtOBs.js.map → circular-oB4auIIg.js.map} +1 -1
  300. package/lib/clsx-OuTLNxxd.js +17 -0
  301. package/lib/clsx-OuTLNxxd.js.map +1 -0
  302. package/lib/{cn-CwJPJKOE.js → cn-wvCW-ho6.js} +1015 -562
  303. package/lib/cn-wvCW-ho6.js.map +1 -0
  304. package/lib/{createServer-DmqFeMgf.js → createServer-DCB82j2t.js} +81 -81
  305. package/lib/{createServer-DmqFeMgf.js.map → createServer-DCB82j2t.js.map} +1 -1
  306. package/lib/{hook-BwOB_iZo.js → hook-DawSLaZr.js} +323 -300
  307. package/lib/hook-DawSLaZr.js.map +1 -0
  308. package/lib/{index-sS7O9W-R.js → index-BXYvD5-7.js} +868 -758
  309. package/lib/index-BXYvD5-7.js.map +1 -0
  310. package/lib/{index-Z13x6tPX.js → index-DI5SPFK9.js} +2 -2
  311. package/lib/{index-Z13x6tPX.js.map → index-DI5SPFK9.js.map} +1 -1
  312. package/lib/index-QzXzw_ra.js +24 -0
  313. package/lib/index-QzXzw_ra.js.map +1 -0
  314. package/lib/{RouteGuard-lkdEJoDV.js → index.esm-BFcSKCe-.js} +232 -281
  315. package/lib/index.esm-BFcSKCe-.js.map +1 -0
  316. package/lib/{index.esm-D2ZUREQN.js → index.esm-DSfX_eMP.js} +3 -3
  317. package/lib/{index.esm-D2ZUREQN.js.map → index.esm-DSfX_eMP.js.map} +1 -1
  318. package/lib/joinPath-B7kNnUX4.js +8 -0
  319. package/lib/joinPath-B7kNnUX4.js.map +1 -0
  320. package/lib/{mutation-CL2MCRQL.js → mutation-oxMvODNQ.js} +2 -2
  321. package/lib/{mutation-CL2MCRQL.js.map → mutation-oxMvODNQ.js.map} +1 -1
  322. package/lib/ui/Accordion.js +1 -1
  323. package/lib/ui/ActionButton.js +2 -2
  324. package/lib/ui/Alert.js +2 -2
  325. package/lib/ui/AlertDialog.js +1 -1
  326. package/lib/ui/Badge.js +3 -3
  327. package/lib/ui/Badge.js.map +1 -1
  328. package/lib/ui/Breadcrumb.js +1 -1
  329. package/lib/ui/Button.js +20 -18
  330. package/lib/ui/Button.js.map +1 -1
  331. package/lib/ui/Callout.js +6 -5
  332. package/lib/ui/Callout.js.map +1 -1
  333. package/lib/ui/Card.js +8 -8
  334. package/lib/ui/Card.js.map +1 -1
  335. package/lib/ui/Carousel.js +1 -1
  336. package/lib/ui/Checkbox.js +7 -7
  337. package/lib/ui/Checkbox.js.map +1 -1
  338. package/lib/ui/CodeBlock.js +1 -1
  339. package/lib/ui/Command.js +43 -43
  340. package/lib/ui/Command.js.map +1 -1
  341. package/lib/ui/Dialog.js +2 -2
  342. package/lib/ui/Dialog.js.map +1 -1
  343. package/lib/ui/Drawer.js +2 -2
  344. package/lib/ui/DropdownMenu.js +34 -34
  345. package/lib/ui/DropdownMenu.js.map +1 -1
  346. package/lib/ui/Form.js +2 -2
  347. package/lib/ui/HoverCard.js +5 -5
  348. package/lib/ui/HoverCard.js.map +1 -1
  349. package/lib/ui/Input.js +2 -2
  350. package/lib/ui/Input.js.map +1 -1
  351. package/lib/ui/Label.js +2 -2
  352. package/lib/ui/Pagination.js +1 -1
  353. package/lib/ui/Popover.js +2 -2
  354. package/lib/ui/Popover.js.map +1 -1
  355. package/lib/ui/Progress.js +1 -1
  356. package/lib/ui/RadioGroup.js +10 -10
  357. package/lib/ui/RadioGroup.js.map +1 -1
  358. package/lib/ui/ScrollArea.js +1 -1
  359. package/lib/ui/Select.js +31 -31
  360. package/lib/ui/Select.js.map +1 -1
  361. package/lib/ui/Skeleton.js +1 -1
  362. package/lib/ui/Slider.js +5 -5
  363. package/lib/ui/Slider.js.map +1 -1
  364. package/lib/ui/Switch.js +5 -5
  365. package/lib/ui/Switch.js.map +1 -1
  366. package/lib/ui/SyntaxHighlight.js +2 -2
  367. package/lib/ui/Tabs.js +16 -16
  368. package/lib/ui/Tabs.js.map +1 -1
  369. package/lib/ui/Textarea.js +5 -5
  370. package/lib/ui/Textarea.js.map +1 -1
  371. package/lib/ui/Toggle.js +7 -7
  372. package/lib/ui/Toggle.js.map +1 -1
  373. package/lib/ui/ToggleGroup.js +1 -1
  374. package/lib/ui/Tooltip.js +15 -8
  375. package/lib/ui/Tooltip.js.map +1 -1
  376. package/lib/ui/util.js +1 -1
  377. package/lib/useExposedProps-DG8J6ewJ.js.map +1 -1
  378. package/lib/useMutation-C_j3dA_L.js +97 -0
  379. package/lib/useMutation-C_j3dA_L.js.map +1 -0
  380. package/lib/zudoku.auth-auth0.js +1 -1
  381. package/lib/zudoku.auth-auth0.js.map +1 -1
  382. package/lib/zudoku.auth-clerk.js +99 -82
  383. package/lib/zudoku.auth-clerk.js.map +1 -1
  384. package/lib/zudoku.auth-openid.js +246 -216
  385. package/lib/zudoku.auth-openid.js.map +1 -1
  386. package/lib/zudoku.components.js +4957 -33
  387. package/lib/zudoku.components.js.map +1 -1
  388. package/lib/zudoku.hooks.js +21 -12
  389. package/lib/zudoku.hooks.js.map +1 -1
  390. package/lib/zudoku.plugin-api-catalog.js +8 -8
  391. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  392. package/lib/zudoku.plugin-api-keys.js +5022 -214
  393. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  394. package/lib/zudoku.plugin-custom-pages.js +2 -2
  395. package/lib/zudoku.plugin-custom-pages.js.map +1 -1
  396. package/lib/zudoku.plugin-markdown.js +1 -1
  397. package/lib/zudoku.plugin-markdown.js.map +1 -1
  398. package/lib/zudoku.plugin-openapi.js +3 -3
  399. package/lib/zudoku.plugin-redirect.js.map +1 -1
  400. package/lib/zudoku.plugin-search-pagefind.js +5 -5
  401. package/lib/zudoku.plugins.js +7 -6
  402. package/lib/zudoku.plugins.js.map +1 -1
  403. package/package.json +15 -15
  404. package/src/app/defaultTheme.css +54 -0
  405. package/src/app/font.geist.css +73 -0
  406. package/src/app/main.css +113 -156
  407. package/src/app/main.tsx +4 -28
  408. package/src/lib/authentication/AuthenticationPlugin.tsx +18 -4
  409. package/src/lib/authentication/authentication.ts +2 -5
  410. package/src/lib/authentication/providers/auth0.tsx +8 -2
  411. package/src/lib/authentication/providers/clerk.tsx +72 -48
  412. package/src/lib/authentication/providers/openid.tsx +19 -26
  413. package/src/lib/authentication/providers/supabase.tsx +7 -7
  414. package/src/lib/components/Autocomplete.tsx +1 -1
  415. package/src/lib/components/Banner.tsx +1 -1
  416. package/src/lib/components/ErrorPage.tsx +1 -1
  417. package/src/lib/components/Footer.tsx +4 -4
  418. package/src/lib/components/Header.tsx +29 -29
  419. package/src/lib/components/Heading.tsx +9 -5
  420. package/src/lib/components/InlineCode.tsx +1 -1
  421. package/src/lib/components/Layout.tsx +3 -3
  422. package/src/lib/components/Main.tsx +4 -4
  423. package/src/lib/components/Markdown.tsx +14 -4
  424. package/src/lib/components/MobileTopNavigation.tsx +3 -2
  425. package/src/lib/components/NotFoundPage.tsx +1 -1
  426. package/src/lib/components/Pagination.tsx +3 -9
  427. package/src/lib/components/Search.tsx +1 -1
  428. package/src/lib/components/Slot.test.tsx +465 -0
  429. package/src/lib/components/Slot.tsx +64 -0
  430. package/src/lib/components/TopNavigation.tsx +5 -17
  431. package/src/lib/components/Zudoku.tsx +9 -9
  432. package/src/lib/components/context/SlotProvider.tsx +149 -0
  433. package/src/lib/components/context/ZudokuProvider.tsx +2 -1
  434. package/src/lib/components/index.ts +14 -10
  435. package/src/lib/components/navigation/PoweredByZudoku.tsx +1 -1
  436. package/src/lib/components/navigation/Sidebar.tsx +3 -3
  437. package/src/lib/components/navigation/SidebarBadge.tsx +1 -1
  438. package/src/lib/components/navigation/SidebarCategory.tsx +3 -3
  439. package/src/lib/components/navigation/SidebarItem.tsx +57 -30
  440. package/src/lib/components/navigation/SidebarWrapper.tsx +2 -2
  441. package/src/lib/components/navigation/Toc.tsx +2 -2
  442. package/src/lib/components/navigation/utils.ts +42 -6
  443. package/src/lib/core/ZudokuContext.ts +24 -12
  444. package/src/lib/core/plugins.ts +10 -2
  445. package/src/lib/errors/ErrorAlert.tsx +1 -1
  446. package/src/lib/hooks/index.ts +11 -0
  447. package/src/lib/plugins/api-catalog/Catalog.tsx +1 -1
  448. package/src/lib/plugins/api-keys/CreateApiKey.tsx +54 -42
  449. package/src/lib/plugins/api-keys/SettingsApiKeys.tsx +292 -112
  450. package/src/lib/plugins/api-keys/index.tsx +101 -55
  451. package/src/lib/plugins/custom-pages/index.tsx +1 -1
  452. package/src/lib/plugins/markdown/MdxPage.tsx +2 -2
  453. package/src/lib/plugins/markdown/index.tsx +2 -2
  454. package/src/lib/plugins/markdown/resolver.ts +4 -2
  455. package/src/lib/plugins/openapi/CollapsibleCode.tsx +1 -1
  456. package/src/lib/plugins/openapi/ColorizedParam.tsx +2 -2
  457. package/src/lib/plugins/openapi/OperationList.tsx +2 -2
  458. package/src/lib/plugins/openapi/OperationListItem.tsx +6 -34
  459. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -1
  460. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +5 -16
  461. package/src/lib/plugins/openapi/SchemaList.tsx +20 -8
  462. package/src/lib/plugins/openapi/Sidecar.tsx +1 -1
  463. package/src/lib/plugins/openapi/SidecarExamples.tsx +6 -0
  464. package/src/lib/plugins/openapi/components/EnumValues.tsx +1 -1
  465. package/src/lib/plugins/openapi/components/ResponseContent.tsx +104 -0
  466. package/src/lib/plugins/openapi/playground/Playground.tsx +7 -1
  467. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +1 -1
  468. package/src/lib/plugins/openapi/playground/SubmitButton.tsx +24 -29
  469. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +2 -2
  470. package/src/lib/plugins/openapi/schema/SchemaView.tsx +7 -3
  471. package/src/lib/plugins/redirect/index.tsx +1 -1
  472. package/src/lib/ui/Badge.tsx +2 -2
  473. package/src/lib/ui/Button.tsx +9 -6
  474. package/src/lib/ui/Callout.tsx +1 -0
  475. package/src/lib/ui/Card.tsx +1 -1
  476. package/src/lib/ui/Checkbox.tsx +1 -1
  477. package/src/lib/ui/Command.tsx +5 -5
  478. package/src/lib/ui/Dialog.tsx +1 -1
  479. package/src/lib/ui/DropdownMenu.tsx +4 -4
  480. package/src/lib/ui/HoverCard.tsx +1 -1
  481. package/src/lib/ui/Input.tsx +1 -1
  482. package/src/lib/ui/Popover.tsx +1 -1
  483. package/src/lib/ui/RadioGroup.tsx +1 -1
  484. package/src/lib/ui/Select.tsx +3 -3
  485. package/src/lib/ui/Slider.tsx +1 -1
  486. package/src/lib/ui/Switch.tsx +1 -1
  487. package/src/lib/ui/Tabs.tsx +2 -2
  488. package/src/lib/ui/Textarea.tsx +1 -1
  489. package/src/lib/ui/Toggle.tsx +1 -1
  490. package/src/lib/ui/Tooltip.tsx +16 -1
  491. package/src/lib/util/useExposedProps.tsx +12 -1
  492. package/dist/app/tailwind.d.ts +0 -4
  493. package/dist/app/tailwind.js +0 -97
  494. package/dist/app/tailwind.js.map +0 -1
  495. package/dist/config/common.d.ts +0 -10
  496. package/dist/config/common.js +0 -2
  497. package/dist/config/common.js.map +0 -1
  498. package/dist/config/validators/common.d.ts +0 -8001
  499. package/dist/config/validators/common.js +0 -414
  500. package/dist/config/validators/common.js.map +0 -1
  501. package/dist/lib/components/SlotletProvider.d.ts +0 -17
  502. package/dist/lib/components/SlotletProvider.js +0 -18
  503. package/dist/lib/components/SlotletProvider.js.map +0 -1
  504. package/dist/vite/plugin-docs.test.js +0 -22
  505. package/dist/vite/plugin-docs.test.js.map +0 -1
  506. package/lib/AuthenticationPlugin-BTJ37DKg.js.map +0 -1
  507. package/lib/Button-Bdk_Ij3U.js +0 -49
  508. package/lib/Button-Bdk_Ij3U.js.map +0 -1
  509. package/lib/Callout-XadUe37J.js.map +0 -1
  510. package/lib/Dialog-CNf2oWXG.js.map +0 -1
  511. package/lib/Markdown-D96AphCL.js +0 -7691
  512. package/lib/Markdown-D96AphCL.js.map +0 -1
  513. package/lib/MdxPage-tTTaDsLc.js.map +0 -1
  514. package/lib/OperationList-BB09ENaq.js.map +0 -1
  515. package/lib/Pagination-CtmnJOJi.js +0 -48
  516. package/lib/Pagination-CtmnJOJi.js.map +0 -1
  517. package/lib/RouteGuard-lkdEJoDV.js.map +0 -1
  518. package/lib/SchemaList-BH9bgMRw.js.map +0 -1
  519. package/lib/SchemaView-BsB7EFRl.js.map +0 -1
  520. package/lib/Select-HTio1oSE.js +0 -211
  521. package/lib/Select-HTio1oSE.js.map +0 -1
  522. package/lib/SlotletProvider-CTgIBRWg.js +0 -257
  523. package/lib/SlotletProvider-CTgIBRWg.js.map +0 -1
  524. package/lib/Toc-Ax54Pw8S.js.map +0 -1
  525. package/lib/cn-CwJPJKOE.js.map +0 -1
  526. package/lib/hook-BwOB_iZo.js.map +0 -1
  527. package/lib/index-BnT4-Efz.js +0 -4975
  528. package/lib/index-BnT4-Efz.js.map +0 -1
  529. package/lib/index-sS7O9W-R.js.map +0 -1
  530. package/src/app/tailwind.ts +0 -103
  531. package/src/lib/components/SlotletProvider.tsx +0 -55
  532. /package/dist/{vite/plugin-docs.test.d.ts → lib/components/Slot.test.d.ts} +0 -0
@@ -1,24 +1,26 @@
1
- import { FileKey2Icon } from "lucide-react";
1
+ import { KeyRoundIcon } from "lucide-react";
2
2
  import { type RouteObject } from "react-router";
3
- import { ZudokuContext } from "../../core/ZudokuContext.js";
3
+ import { type ZudokuContext } from "../../core/ZudokuContext.js";
4
4
  import {
5
5
  type ApiIdentityPlugin,
6
+ type ProfileMenuPlugin,
6
7
  type ZudokuPlugin,
7
- ProfileMenuPlugin,
8
8
  } from "../../core/plugins.js";
9
9
  import { RouterError } from "../../errors/RouterError.js";
10
10
  import invariant from "../../util/invariant.js";
11
- import { CreateApiKey } from "./CreateApiKey.js";
12
11
  import { ProtectedRoute } from "./ProtectedRoute.js";
13
12
  import { SettingsApiKeys } from "./SettingsApiKeys.js";
14
13
 
15
- const DEFAULT_API_KEY_ENDPOINT =
16
- "https://zudoku-rewiringamerica-main-ef9c9c0.d2.zuplo.dev";
14
+ const DEFAULT_API_KEY_ENDPOINT = "https://api.zuploedge.com/v2/client";
17
15
 
18
16
  export type ApiKeyService = {
19
- getKeys: (context: ZudokuContext) => Promise<ApiKey[]>;
20
- rollKey?: (id: string, context: ZudokuContext) => Promise<void>;
21
- deleteKey?: (id: string, context: ZudokuContext) => Promise<void>;
17
+ getConsumers: (context: ZudokuContext) => Promise<ApiConsumer[]>;
18
+ rollKey?: (consumerId: string, context: ZudokuContext) => Promise<void>;
19
+ deleteKey?: (
20
+ consumerId: string,
21
+ keyId: string,
22
+ context: ZudokuContext,
23
+ ) => Promise<void>;
22
24
  updateKeyDescription?: (
23
25
  apiKey: { id: string; description: string },
24
26
  context: ZudokuContext,
@@ -30,9 +32,9 @@ export type ApiKeyService = {
30
32
  ) => Promise<void>;
31
33
  };
32
34
 
33
- export type GetApiKeysOptions = ApiKeyService | { endpoint: string } | object;
34
-
35
- export type ApiKeyPluginOptions = object & GetApiKeysOptions;
35
+ export type ApiKeyPluginOptions =
36
+ | ApiKeyService
37
+ | ({ deploymentName: string } & Partial<ApiKeyService>);
36
38
 
37
39
  export interface ApiKey {
38
40
  id: string;
@@ -43,51 +45,79 @@ export interface ApiKey {
43
45
  key: string;
44
46
  }
45
47
 
46
- const createDefaultHandler = (endpoint: string): ApiKeyService => {
47
- return {
48
- deleteKey: async (id, context) => {
49
- const request = new Request(endpoint + `/v1/developer/api-keys/${id}`, {
50
- method: "DELETE",
51
- });
48
+ export interface ApiConsumer {
49
+ id: string;
50
+ name: string;
51
+ apiKeys: ApiKey[];
52
+ description?: string;
53
+ createdOn?: string;
54
+ updatedOn?: string;
55
+ expiresOn?: string;
56
+ key?: ApiKey;
57
+ }
52
58
 
59
+ const createDefaultHandler = (deploymentName: string): ApiKeyService => {
60
+ return {
61
+ deleteKey: async (consumerId, keyId, context) => {
62
+ const request = new Request(
63
+ DEFAULT_API_KEY_ENDPOINT +
64
+ `/${deploymentName}/consumers/${consumerId}/keys/${keyId}`,
65
+ {
66
+ method: "DELETE",
67
+ },
68
+ );
53
69
  await context.signRequest(request);
54
70
 
55
71
  const response = await fetch(request);
56
72
  invariant(response.ok, "Failed to delete API key");
57
73
  },
58
- rollKey: async (id, context) => {
74
+ rollKey: async (consumerId, context) => {
59
75
  const response = await fetch(
60
76
  await context.signRequest(
61
- new Request(endpoint + `/v1/developer/api-keys/${id}/key`, {
62
- method: "DELETE",
63
- }),
77
+ new Request(
78
+ DEFAULT_API_KEY_ENDPOINT +
79
+ `/${deploymentName}/consumers/${consumerId}/roll-key`,
80
+ {
81
+ method: "POST",
82
+ headers: {
83
+ "Content-Type": "application/json",
84
+ },
85
+ body: JSON.stringify({
86
+ expiresOn: new Date(),
87
+ }),
88
+ },
89
+ ),
64
90
  ),
65
91
  );
66
92
  invariant(response.ok, "Failed to delete API key");
67
93
  },
68
- createKey: async (apiKey, context) => {
69
- const request = new Request(endpoint + `/v1/developer/api-keys`, {
70
- method: "POST",
71
- headers: {
72
- "Content-Type": "application/json",
73
- },
74
- body: JSON.stringify(apiKey),
75
- });
76
-
77
- await context.signRequest(request);
78
-
79
- const response = await fetch(request);
80
- invariant(response.ok, "Failed to create API key");
81
- },
82
- getKeys: async (context) => {
83
- const request = new Request(endpoint + `/v1/developer/api-keys`);
84
-
94
+ getConsumers: async (context) => {
95
+ const request = new Request(
96
+ DEFAULT_API_KEY_ENDPOINT + `/${deploymentName}/consumers`,
97
+ );
85
98
  await context.signRequest(request);
86
99
 
87
100
  const keys = await fetch(request);
88
101
  invariant(keys.ok, "Failed to fetch API keys");
89
102
 
90
- return await keys.json();
103
+ const data = (await keys.json()) as {
104
+ data: [
105
+ {
106
+ id: string;
107
+ name: string;
108
+ apiKeys: {
109
+ data: ApiKey[];
110
+ };
111
+ },
112
+ ];
113
+ };
114
+
115
+ return data.data.map((consumer) => ({
116
+ id: consumer.id,
117
+ name: consumer.name,
118
+ apiKeys: consumer.apiKeys.data,
119
+ key: consumer.apiKeys.data.at(0),
120
+ }));
91
121
  },
92
122
  };
93
123
  };
@@ -98,11 +128,10 @@ export const createApiKeyService = <T extends ApiKeyService>(service: T): T =>
98
128
  export const apiKeyPlugin = (
99
129
  options: ApiKeyPluginOptions,
100
130
  ): ZudokuPlugin & ApiIdentityPlugin & ProfileMenuPlugin => {
101
- const endpoint =
102
- "endpoint" in options ? options.endpoint : DEFAULT_API_KEY_ENDPOINT;
103
-
104
- const service =
105
- "getKeys" in options ? options : createDefaultHandler(endpoint);
131
+ const service: ApiKeyService =
132
+ "deploymentName" in options
133
+ ? createDefaultHandler(options.deploymentName)
134
+ : options;
106
135
 
107
136
  return {
108
137
  getProfileMenuItems: () => [
@@ -110,20 +139,37 @@ export const apiKeyPlugin = (
110
139
  label: "API Keys",
111
140
  path: "/settings/api-keys",
112
141
  category: "middle",
113
- icon: FileKey2Icon,
142
+ icon: KeyRoundIcon,
114
143
  },
115
144
  ],
145
+ getSidebar: async (path) => {
146
+ if (!path.startsWith("/settings")) {
147
+ return [];
148
+ }
149
+
150
+ return [
151
+ {
152
+ type: "link",
153
+ label: "API Keys",
154
+ icon: KeyRoundIcon,
155
+ href: "/settings/api-keys",
156
+ },
157
+ ];
158
+ },
116
159
  getIdentities: async (context) => {
117
160
  try {
118
- const keys = await service.getKeys(context);
161
+ const consumers = await service.getConsumers(context);
119
162
 
120
- return keys.map((key) => ({
163
+ return consumers.map((consumer) => ({
121
164
  authorizeRequest: (request) => {
122
- request.headers.set("Authorization", `Bearer ${key.key}`);
165
+ request.headers.set(
166
+ "Authorization",
167
+ `Bearer ${consumer.apiKeys.at(0)?.key}`,
168
+ );
123
169
  return request;
124
170
  },
125
- id: key.id,
126
- label: key.description ?? key.id,
171
+ id: consumer.id,
172
+ label: consumer.description ?? consumer.id,
127
173
  }));
128
174
  } catch {
129
175
  return [];
@@ -140,10 +186,10 @@ export const apiKeyPlugin = (
140
186
  path: "/settings/api-keys",
141
187
  element: <SettingsApiKeys service={service} />,
142
188
  },
143
- {
144
- path: "/settings/api-keys/new",
145
- element: <CreateApiKey service={service} />,
146
- },
189
+ // {
190
+ // path: "/settings/api-keys/new",
191
+ // element: <CreateApiKey service={service} />,
192
+ // },
147
193
  ],
148
194
  },
149
195
  ];
@@ -1,7 +1,7 @@
1
1
  import { type ComponentType, type ReactNode } from "react";
2
2
  import type { RouteObject } from "react-router";
3
- import { type ExposedComponentProps } from "../../components/SlotletProvider.js";
4
3
  import type { NavigationPlugin, ZudokuPlugin } from "../../core/plugins.js";
4
+ import type { ExposedComponentProps } from "../../util/useExposedProps.js";
5
5
  import { CustomPage } from "./CustomPage.js";
6
6
 
7
7
  export type CustomPageConfig = {
@@ -85,7 +85,7 @@ export const MdxPage = ({
85
85
 
86
86
  return (
87
87
  <div
88
- className="grid grid-cols-1 xl:grid-cols-[--sidecar-grid-cols] gap-8 justify-between"
88
+ className="grid grid-cols-1 xl:grid-cols-(--sidecar-grid-cols) gap-8 justify-between"
89
89
  data-pagefind-filter="section:markdown"
90
90
  data-pagefind-meta="section:markdown"
91
91
  >
@@ -96,7 +96,7 @@ export const MdxPage = ({
96
96
  <div
97
97
  className={cn(
98
98
  ProseClasses,
99
- "max-w-full xl:w-full xl:max-w-3xl flex-1 flex-shrink pt-[--padding-content-top]",
99
+ "max-w-full xl:w-full xl:max-w-3xl flex-1 shrink pt-(--padding-content-top)",
100
100
  )}
101
101
  >
102
102
  {(category || title) && (
@@ -1,8 +1,8 @@
1
1
  import type { Toc } from "@stefanprobst/rehype-extract-toc";
2
2
  import type { MDXProps } from "mdx/types.js";
3
3
  import { type JSX } from "react";
4
- import { RouteObject } from "react-router";
5
- import { ZudokuDocsConfig } from "../../../config/validators/common.js";
4
+ import type { RouteObject } from "react-router";
5
+ import type { ZudokuDocsConfig } from "../../../config/validators/validate.js";
6
6
  import type { ZudokuPlugin } from "../../core/plugins.js";
7
7
  import { DocResolver } from "./resolver.js";
8
8
 
@@ -1,5 +1,7 @@
1
- import { ZudokuDocsConfig } from "../../../config/validators/common.js";
2
- import { ZudokuConfig } from "../../../config/validators/validate.js";
1
+ import type {
2
+ ZudokuConfig,
3
+ ZudokuDocsConfig,
4
+ } from "../../../config/validators/validate.js";
3
5
 
4
6
  const DEFAULT_DOCS_FILES = "/pages/**/*.{md,mdx}";
5
7
 
@@ -45,7 +45,7 @@ export const CollapsibleCode = ({
45
45
  forceMount
46
46
  className={cn(
47
47
  "relative overflow-hidden group",
48
- !open && isOverflowing && "max-h-[--max-height]",
48
+ !open && isOverflowing && "max-h-(--max-height)",
49
49
  )}
50
50
  >
51
51
  {!open && isOverflowing && (
@@ -91,8 +91,8 @@ export const ColorizedParam = ({
91
91
  className={cn(
92
92
  // This may not contain (inline-)flex or (inline-)block otherwise it breaks the browser's full text search
93
93
  "relative transition-all duration-100 rounded-lg",
94
- "border border-[--border-color] p-0.5 text-[--param-color] bg-[--background-color]",
95
- "data-[active=true]:border-[--param-color] data-[active=true]:shadow data-[active=true]:bottom-px",
94
+ "border border-(--border-color) p-0.5 text-(--param-color) bg-(--background-color)",
95
+ "data-[active=true]:border-(--param-color) data-[active=true]:shadow-sm data-[active=true]:bottom-px",
96
96
  className,
97
97
  )}
98
98
  title={title}
@@ -223,7 +223,7 @@ export const OperationList = ({
223
223
 
224
224
  return (
225
225
  <div
226
- className="pt-[--padding-content-top]"
226
+ className="pt-(--padding-content-top)"
227
227
  data-pagefind-filter="section:openapi"
228
228
  data-pagefind-meta="section:openapi"
229
229
  >
@@ -298,7 +298,7 @@ export const OperationList = ({
298
298
  )}
299
299
  >
300
300
  <Markdown
301
- className="border rounded bg-muted/25 border-border px-2.5 md:px-4"
301
+ className="border rounded-sm bg-muted/25 border-border px-2.5 md:px-4"
302
302
  content={schema.description}
303
303
  />
304
304
  </div>
@@ -3,13 +3,13 @@ import { useState } from "react";
3
3
  import { Badge } from "zudoku/ui/Badge.js";
4
4
  import { Heading } from "../../components/Heading.js";
5
5
  import { Markdown, ProseClasses } from "../../components/Markdown.js";
6
- import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../ui/Tabs.js";
7
6
  import { cn } from "../../util/cn.js";
8
7
  import { groupBy } from "../../util/groupBy.js";
9
8
  import { renderIf } from "../../util/renderIf.js";
10
9
  import { OperationsFragment } from "./OperationList.js";
11
10
  import { ParameterList } from "./ParameterList.js";
12
11
  import { Sidecar } from "./Sidecar.js";
12
+ import { ResponseContent } from "./components/ResponseContent.js";
13
13
  import { SelectOnClick } from "./components/SelectOnClick.js";
14
14
  import { useOasConfig } from "./context.js";
15
15
  import { type FragmentType, useFragment } from "./graphql/index.js";
@@ -135,39 +135,11 @@ export const OperationListItem = ({
135
135
  )}
136
136
  Responses
137
137
  </Heading>
138
- <Tabs
139
- onValueChange={(value) => setSelectedResponse(value)}
140
- value={selectedResponse}
141
- >
142
- {operation.responses.length > 1 && (
143
- <TabsList>
144
- {operation.responses.map((response) => (
145
- <TabsTrigger
146
- value={response.statusCode}
147
- key={response.statusCode}
148
- title={response.description ?? undefined}
149
- >
150
- {response.statusCode}
151
- </TabsTrigger>
152
- ))}
153
- </TabsList>
154
- )}
155
- <ul className="list-none m-0 px-0">
156
- {operation.responses.map((response) => (
157
- <TabsContent
158
- value={response.statusCode}
159
- key={response.statusCode}
160
- >
161
- <SchemaView
162
- schema={
163
- response.content?.find((content) => content.schema)
164
- ?.schema
165
- }
166
- />
167
- </TabsContent>
168
- ))}
169
- </ul>
170
- </Tabs>
138
+ <ResponseContent
139
+ responses={operation.responses}
140
+ selectedResponse={selectedResponse}
141
+ onSelectResponse={setSelectedResponse}
142
+ />
171
143
  </>
172
144
  )}
173
145
  </div>
@@ -29,6 +29,7 @@ export const PlaygroundDialogWrapper = ({
29
29
  enum: p.schema?.type == "array" ? p.schema?.items?.enum : p.schema?.enum,
30
30
  type: p.schema?.type ?? "string",
31
31
  }));
32
+
32
33
  const queryParams = operation.parameters
33
34
  ?.filter((p) => p.in === "query")
34
35
  .sort((a, b) => (a.required && !b.required ? -1 : 1))
@@ -38,10 +39,15 @@ export const PlaygroundDialogWrapper = ({
38
39
  isRequired: p.required ?? false,
39
40
  enum: p.schema?.type == "array" ? p.schema?.items?.enum : p.schema?.enum,
40
41
  type: p.schema?.type ?? "string",
42
+ defaultValue: p.schema?.default,
41
43
  }));
44
+
42
45
  const pathParams = operation.parameters
43
46
  ?.filter((p) => p.in === "path")
44
- .map((p) => ({ name: p.name }));
47
+ .map((p) => ({
48
+ name: p.name,
49
+ defaultValue: p.schema?.default,
50
+ }));
45
51
 
46
52
  return (
47
53
  <PlaygroundDialog
@@ -1,28 +1,15 @@
1
1
  import * as Tabs from "@radix-ui/react-tabs";
2
2
  import { cn } from "../../util/cn.js";
3
- import type { OperationListItemResult } from "./OperationList.js";
4
3
  import * as SidecarBox from "./SidecarBox.js";
5
4
  import { SidecarExamples } from "./SidecarExamples.js";
6
-
7
- type Responses = OperationListItemResult["responses"];
8
-
9
- const ResponseContent = ({ response }: { response: Responses[number] }) => {
10
- return (
11
- <Tabs.Content value={response.statusCode}>
12
- <SidecarExamples
13
- content={response.content ?? []}
14
- description={response.description ?? undefined}
15
- />
16
- </Tabs.Content>
17
- );
18
- };
5
+ import type { ResponseItem } from "./graphql/graphql.js";
19
6
 
20
7
  export const ResponsesSidecarBox = ({
21
8
  responses,
22
9
  selectedResponse,
23
10
  onSelectResponse,
24
11
  }: {
25
- responses: Responses;
12
+ responses: ResponseItem[];
26
13
  selectedResponse?: string;
27
14
  onSelectResponse: (response: string) => void;
28
15
  }) => {
@@ -52,7 +39,9 @@ export const ResponsesSidecarBox = ({
52
39
  </Tabs.List>
53
40
  </SidecarBox.Head>
54
41
  {responses.map((response) => (
55
- <ResponseContent key={response.statusCode} response={response} />
42
+ <Tabs.Content key={response.statusCode} value={response.statusCode}>
43
+ <SidecarExamples content={response.content ?? []} />
44
+ </Tabs.Content>
56
45
  ))}
57
46
  </Tabs.Root>
58
47
  </SidecarBox.Root>
@@ -1,5 +1,6 @@
1
1
  import slugify from "@sindresorhus/slugify";
2
2
  import { useSuspenseQuery } from "@tanstack/react-query";
3
+ import { Helmet } from "@zudoku/react-helmet-async";
3
4
  import {
4
5
  ChevronRightIcon,
5
6
  ChevronsDownUpIcon,
@@ -47,23 +48,34 @@ export function SchemaList() {
47
48
  const { data } = useSuspenseQuery(schemasQuery);
48
49
 
49
50
  const schemas = data.schema.components?.schemas ?? [];
50
-
51
- if (!schemas.length) {
52
- return <div>No schemas found</div>;
53
- }
54
-
55
51
  const hasMultipleVersions = Object.entries(versions).length > 1;
56
52
  const showVersions =
57
53
  options?.showVersionSelect === "always" ||
58
54
  (hasMultipleVersions && options?.showVersionSelect !== "hide");
59
55
 
56
+ if (!schemas.length) {
57
+ return (
58
+ <div>
59
+ <Helmet>
60
+ <title>Schemas {showVersions ? version : ""}</title>
61
+ <meta name="description" content="List of schemas used by the API." />
62
+ </Helmet>
63
+ No schemas found
64
+ </div>
65
+ );
66
+ }
67
+
60
68
  return (
61
69
  <div
62
- className="grid grid-cols-[--sidecar-grid-cols] gap-8 justify-between"
70
+ className="grid grid-cols-(--sidecar-grid-cols) gap-8 justify-between"
63
71
  data-pagefind-filter="section:openapi"
64
72
  data-pagefind-meta="section:openapi"
65
73
  >
66
- <div className="pt-[--padding-content-top] pb-[--padding-content-bottom]">
74
+ <Helmet>
75
+ <title>Schemas {showVersions ? version : ""}</title>
76
+ <meta name="description" content="List of schemas used by the API." />
77
+ </Helmet>
78
+ <div className="pt-(--padding-content-top) pb-(--padding-content-bottom)">
67
79
  <Collapsible className="w-full">
68
80
  <div className="flex flex-col gap-y-4 sm:flex-row justify-around items-start sm:items-end">
69
81
  <div className="flex-1">
@@ -105,7 +117,7 @@ export function SchemaList() {
105
117
  )}
106
118
  >
107
119
  <Markdown
108
- className="border rounded bg-muted/25 border-border px-2.5 md:px-4"
120
+ className="border rounded-sm bg-muted/25 border-border px-2.5 md:px-4"
109
121
  content={data.schema.description}
110
122
  />
111
123
  </div>
@@ -231,7 +231,7 @@ export const Sidecar = ({
231
231
  return (
232
232
  <aside
233
233
  ref={ref}
234
- className="flex flex-col overflow-hidden sticky top-[--scroll-padding] gap-4"
234
+ className="flex flex-col overflow-hidden sticky top-(--scroll-padding) gap-4"
235
235
  data-pagefind-ignore="all"
236
236
  >
237
237
  <SidecarBox.Root>
@@ -22,7 +22,13 @@ const formatForDisplay = (value: unknown): string => {
22
22
 
23
23
  const getLanguage = (mediaType?: string): string => {
24
24
  if (!mediaType) return "plain";
25
+ if (mediaType.endsWith("+json")) return "json";
26
+ if (mediaType.endsWith("+xml")) return "xml";
27
+ if (mediaType.endsWith("+yaml")) return "yaml";
28
+
25
29
  const languages: Record<string, string> = {
30
+ "text/html": "html",
31
+ "application/x-ndjson": "json",
26
32
  "application/json": "json",
27
33
  "application/xml": "xml",
28
34
  "application/x-yaml": "yaml",
@@ -26,7 +26,7 @@ export const EnumValues = ({
26
26
  <span className="text-muted-foreground">Enum values: </span>
27
27
  {visibleValues.map((value) => (
28
28
  <div key={value}>
29
- <SelectOnClick className="border rounded px-1 font-mono">
29
+ <SelectOnClick className="border rounded-sm px-1 font-mono">
30
30
  {value}
31
31
  </SelectOnClick>
32
32
  </div>
@@ -0,0 +1,104 @@
1
+ import * as Tabs from "@radix-ui/react-tabs";
2
+ import { useState } from "react";
3
+ import { Markdown } from "zudoku/components";
4
+ import {
5
+ Select,
6
+ SelectContent,
7
+ SelectItem,
8
+ SelectTrigger,
9
+ SelectValue,
10
+ } from "zudoku/ui/Select.js";
11
+ import { cn } from "zudoku/ui/util.js";
12
+ import type { MediaTypeObject } from "../graphql/graphql.js";
13
+ import { SchemaView } from "../schema/SchemaView.js";
14
+
15
+ type Response = {
16
+ statusCode: string;
17
+ description?: string | null;
18
+ content?: MediaTypeObject[] | null;
19
+ };
20
+
21
+ export const ResponseContent = ({
22
+ responses,
23
+ selectedResponse,
24
+ onSelectResponse,
25
+ }: {
26
+ responses: Response[];
27
+ selectedResponse?: string;
28
+ onSelectResponse?: (value: string) => void;
29
+ }) => {
30
+ const [selectedMediaType, setSelectedMediaType] = useState(
31
+ responses[0]?.content?.[0]?.mediaType ?? "",
32
+ );
33
+ const currentResponse =
34
+ responses.find((r) => r.statusCode === selectedResponse) ?? responses[0];
35
+
36
+ const cardHeader = (
37
+ <div className="flex flex-col bg-muted text-muted-foreground">
38
+ <div className="flex flex-row items-center gap-2 justify-between px-4 py-2">
39
+ <Tabs.List className="flex flex-row font-medium text-sm gap-4">
40
+ {responses.map((response) => (
41
+ <Tabs.Trigger
42
+ key={response.statusCode}
43
+ value={response.statusCode}
44
+ className={cn(
45
+ "py-1 -mx-2 px-2 rounded-md",
46
+ "data-[state=active]:dark:ring-1 data-[state=active]:dark:ring-border data-[state=active]:bg-background data-[state=active]:drop-shadow",
47
+ "data-[state=active]:font-semibold data-[state=active]:text-foreground",
48
+ )}
49
+ >
50
+ {response.statusCode}
51
+ </Tabs.Trigger>
52
+ ))}
53
+ </Tabs.List>
54
+ {currentResponse?.content && currentResponse.content.length > 1 && (
55
+ <Select
56
+ value={selectedMediaType}
57
+ onValueChange={setSelectedMediaType}
58
+ >
59
+ <SelectTrigger className="h-8 mt-0 max-w-48 text-xs truncate">
60
+ <SelectValue placeholder="Select a type" />
61
+ </SelectTrigger>
62
+ <SelectContent>
63
+ {currentResponse.content.map((c) => (
64
+ <SelectItem key={c.mediaType} value={c.mediaType}>
65
+ {c.mediaType}
66
+ </SelectItem>
67
+ ))}
68
+ </SelectContent>
69
+ </Select>
70
+ )}
71
+ </div>
72
+ {currentResponse?.description && (
73
+ <Markdown
74
+ className="text-sm border-t px-4 py-2 text-muted-foreground"
75
+ content={currentResponse.description}
76
+ />
77
+ )}
78
+ </div>
79
+ );
80
+
81
+ return (
82
+ <div className="flex flex-col gap-2">
83
+ <Tabs.Root
84
+ value={selectedResponse}
85
+ onValueChange={(value) => {
86
+ onSelectResponse?.(value);
87
+ const newResponse = responses.find((r) => r.statusCode === value);
88
+ setSelectedMediaType(newResponse?.content?.[0]?.mediaType ?? "");
89
+ }}
90
+ >
91
+ {responses.map((response) => {
92
+ const content = response.content?.find(
93
+ (c) => c.mediaType === selectedMediaType,
94
+ );
95
+ return (
96
+ <Tabs.Content key={response.statusCode} value={response.statusCode}>
97
+ <SchemaView schema={content?.schema} cardHeader={cardHeader} />
98
+ </Tabs.Content>
99
+ );
100
+ })}
101
+ </Tabs.Root>
102
+ </div>
103
+ );
104
+ };