zudoku 0.0.0-f90a252 → 0.0.0-f9211eb

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 (735) hide show
  1. package/README.md +1 -1
  2. package/cli.js +3 -0
  3. package/dist/app/entry.client.d.ts +5 -0
  4. package/dist/app/entry.client.js +1 -0
  5. package/dist/app/entry.client.js.map +1 -1
  6. package/dist/app/entry.server.d.ts +8 -6
  7. package/dist/app/entry.server.js +12 -8
  8. package/dist/app/entry.server.js.map +1 -1
  9. package/dist/app/main.js +3 -1
  10. package/dist/app/main.js.map +1 -1
  11. package/dist/app/tailwind.js +20 -0
  12. package/dist/app/tailwind.js.map +1 -1
  13. package/dist/cli/build/handler.d.ts +1 -3
  14. package/dist/cli/build/handler.js +9 -1
  15. package/dist/cli/build/handler.js.map +1 -1
  16. package/dist/cli/cli.js +5 -0
  17. package/dist/cli/cli.js.map +1 -1
  18. package/dist/cli/cmds/build.d.ts +11 -3
  19. package/dist/cli/cmds/build.js +20 -13
  20. package/dist/cli/cmds/build.js.map +1 -1
  21. package/dist/cli/cmds/dev.d.ts +1 -1
  22. package/dist/cli/cmds/dev.js.map +1 -1
  23. package/dist/cli/cmds/preview.d.ts +16 -0
  24. package/dist/cli/cmds/preview.js +25 -0
  25. package/dist/cli/cmds/preview.js.map +1 -0
  26. package/dist/cli/dev/handler.js +2 -1
  27. package/dist/cli/dev/handler.js.map +1 -1
  28. package/dist/cli/preview/handler.d.ts +3 -0
  29. package/dist/cli/preview/handler.js +35 -0
  30. package/dist/cli/preview/handler.js.map +1 -0
  31. package/dist/config/common.d.ts +5 -3
  32. package/dist/config/config.d.ts +15 -15
  33. package/dist/config/loader.d.ts +6 -6
  34. package/dist/config/loader.js +20 -28
  35. package/dist/config/loader.js.map +1 -1
  36. package/dist/config/validators/InputSidebarSchema.d.ts +15 -15
  37. package/dist/config/validators/InputSidebarSchema.js +10 -1
  38. package/dist/config/validators/InputSidebarSchema.js.map +1 -1
  39. package/dist/config/validators/common.d.ts +2993 -599
  40. package/dist/config/validators/common.js +107 -12
  41. package/dist/config/validators/common.js.map +1 -1
  42. package/dist/config/validators/icon-types.d.ts +1 -1
  43. package/dist/config/validators/validate.d.ts +1127 -284
  44. package/dist/index.d.ts +1 -0
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/authentication/authentication.d.ts +1 -0
  48. package/dist/lib/authentication/hook.d.ts +1 -0
  49. package/dist/lib/authentication/hook.js +11 -1
  50. package/dist/lib/authentication/hook.js.map +1 -1
  51. package/dist/lib/authentication/providers/auth0.d.ts +2 -2
  52. package/dist/lib/authentication/providers/auth0.js +1 -0
  53. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  54. package/dist/lib/authentication/providers/clerk.d.ts +2 -2
  55. package/dist/lib/authentication/providers/clerk.js +25 -6
  56. package/dist/lib/authentication/providers/clerk.js.map +1 -1
  57. package/dist/lib/authentication/providers/openid.d.ts +5 -3
  58. package/dist/lib/authentication/providers/openid.js +24 -10
  59. package/dist/lib/authentication/providers/openid.js.map +1 -1
  60. package/dist/lib/authentication/providers/supabase.d.ts +4 -0
  61. package/dist/lib/authentication/providers/supabase.js +117 -0
  62. package/dist/lib/authentication/providers/supabase.js.map +1 -0
  63. package/dist/lib/authentication/state.d.ts +0 -26
  64. package/dist/lib/authentication/state.js +9 -18
  65. package/dist/lib/authentication/state.js.map +1 -1
  66. package/dist/lib/components/AnchorLink.d.ts +2 -2
  67. package/dist/lib/components/AnchorLink.js +5 -4
  68. package/dist/lib/components/AnchorLink.js.map +1 -1
  69. package/dist/lib/components/Banner.js +1 -1
  70. package/dist/lib/components/Banner.js.map +1 -1
  71. package/dist/lib/components/Bootstrap.d.ts +2 -1
  72. package/dist/lib/components/Bootstrap.js +3 -2
  73. package/dist/lib/components/Bootstrap.js.map +1 -1
  74. package/dist/lib/components/Footer.d.ts +1 -0
  75. package/dist/lib/components/Footer.js +32 -0
  76. package/dist/lib/components/Footer.js.map +1 -0
  77. package/dist/lib/components/Header.js +4 -4
  78. package/dist/lib/components/Header.js.map +1 -1
  79. package/dist/lib/components/Heading.d.ts +2 -2
  80. package/dist/lib/components/InlineCode.d.ts +2 -1
  81. package/dist/lib/components/InlineCode.js +2 -9
  82. package/dist/lib/components/InlineCode.js.map +1 -1
  83. package/dist/lib/components/Layout.js +8 -29
  84. package/dist/lib/components/Layout.js.map +1 -1
  85. package/dist/lib/components/Main.d.ts +2 -0
  86. package/dist/lib/components/Main.js +17 -0
  87. package/dist/lib/components/Main.js.map +1 -0
  88. package/dist/lib/components/MobileTopNavigation.js +6 -3
  89. package/dist/lib/components/MobileTopNavigation.js.map +1 -1
  90. package/dist/lib/components/Pagination.d.ts +11 -0
  91. package/dist/lib/components/Pagination.js +10 -0
  92. package/dist/lib/components/Pagination.js.map +1 -0
  93. package/dist/lib/components/ThemeSwitch.js +1 -1
  94. package/dist/lib/components/ThemeSwitch.js.map +1 -1
  95. package/dist/lib/components/TopNavigation.d.ts +3 -2
  96. package/dist/lib/components/TopNavigation.js +28 -14
  97. package/dist/lib/components/TopNavigation.js.map +1 -1
  98. package/dist/lib/components/Zudoku.d.ts +1 -1
  99. package/dist/lib/components/Zudoku.js +15 -8
  100. package/dist/lib/components/Zudoku.js.map +1 -1
  101. package/dist/lib/components/cache.d.ts +7 -0
  102. package/dist/lib/components/cache.js +7 -0
  103. package/dist/lib/components/cache.js.map +1 -1
  104. package/dist/lib/components/context/BypassProtectedRoutesContext.d.ts +1 -0
  105. package/dist/lib/components/context/BypassProtectedRoutesContext.js +3 -0
  106. package/dist/lib/components/context/BypassProtectedRoutesContext.js.map +1 -0
  107. package/dist/lib/components/context/RouterEventsEmitter.d.ts +1 -0
  108. package/dist/lib/components/context/RouterEventsEmitter.js +17 -0
  109. package/dist/lib/components/context/RouterEventsEmitter.js.map +1 -0
  110. package/dist/lib/components/context/ViewportAnchorContext.d.ts +2 -4
  111. package/dist/lib/components/context/ViewportAnchorContext.js +5 -10
  112. package/dist/lib/components/context/ViewportAnchorContext.js.map +1 -1
  113. package/dist/lib/components/context/ZudokuContext.d.ts +2 -2
  114. package/dist/lib/components/context/ZudokuContext.js +13 -7
  115. package/dist/lib/components/context/ZudokuContext.js.map +1 -1
  116. package/dist/lib/components/index.d.ts +7 -3
  117. package/dist/lib/components/index.js +2 -0
  118. package/dist/lib/components/index.js.map +1 -1
  119. package/dist/lib/components/navigation/PoweredByZudoku.d.ts +3 -0
  120. package/dist/lib/components/navigation/PoweredByZudoku.js +6 -0
  121. package/dist/lib/components/navigation/PoweredByZudoku.js.map +1 -0
  122. package/dist/lib/components/navigation/Sidebar.d.ts +3 -1
  123. package/dist/lib/components/navigation/Sidebar.js +1 -12
  124. package/dist/lib/components/navigation/Sidebar.js.map +1 -1
  125. package/dist/lib/components/navigation/SidebarBadge.d.ts +2 -0
  126. package/dist/lib/components/navigation/SidebarBadge.js +3 -1
  127. package/dist/lib/components/navigation/SidebarBadge.js.map +1 -1
  128. package/dist/lib/components/navigation/SidebarCategory.d.ts +2 -2
  129. package/dist/lib/components/navigation/SidebarCategory.js +10 -6
  130. package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
  131. package/dist/lib/components/navigation/SidebarItem.d.ts +1 -0
  132. package/dist/lib/components/navigation/SidebarItem.js +17 -11
  133. package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
  134. package/dist/lib/components/navigation/SidebarWrapper.d.ts +7 -6
  135. package/dist/lib/components/navigation/SidebarWrapper.js +18 -3
  136. package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
  137. package/dist/lib/{plugins/markdown → components/navigation}/Toc.js +5 -7
  138. package/dist/lib/components/navigation/Toc.js.map +1 -0
  139. package/dist/lib/components/navigation/ZudokuLogo.d.ts +6 -0
  140. package/dist/lib/components/navigation/ZudokuLogo.js +5 -0
  141. package/dist/lib/components/navigation/ZudokuLogo.js.map +1 -0
  142. package/dist/lib/core/RouteGuard.d.ts +2 -1
  143. package/dist/lib/core/RouteGuard.js +31 -11
  144. package/dist/lib/core/RouteGuard.js.map +1 -1
  145. package/dist/lib/core/ZudokuContext.d.ts +32 -6
  146. package/dist/lib/core/ZudokuContext.js +29 -6
  147. package/dist/lib/core/ZudokuContext.js.map +1 -1
  148. package/dist/lib/core/plugins.d.ts +15 -7
  149. package/dist/lib/core/plugins.js +1 -0
  150. package/dist/lib/core/plugins.js.map +1 -1
  151. package/dist/lib/errors/ErrorAlert.js +6 -1
  152. package/dist/lib/errors/ErrorAlert.js.map +1 -1
  153. package/dist/lib/hooks/index.d.ts +3 -0
  154. package/dist/lib/hooks/index.js +5 -0
  155. package/dist/lib/hooks/index.js.map +1 -0
  156. package/dist/lib/hooks/useEvent.d.ts +11 -0
  157. package/dist/lib/hooks/useEvent.js +19 -0
  158. package/dist/lib/hooks/useEvent.js.map +1 -0
  159. package/dist/lib/hooks/useEvent.test.js +100 -0
  160. package/dist/lib/hooks/useEvent.test.js.map +1 -0
  161. package/dist/lib/oas/graphql/index.d.ts +17 -4
  162. package/dist/lib/oas/graphql/index.js +151 -39
  163. package/dist/lib/oas/graphql/index.js.map +1 -1
  164. package/dist/lib/oas/parser/dereference/index.js +2 -0
  165. package/dist/lib/oas/parser/dereference/index.js.map +1 -1
  166. package/dist/lib/oas/parser/index.d.ts +5 -3
  167. package/dist/lib/oas/parser/index.js +0 -22
  168. package/dist/lib/oas/parser/index.js.map +1 -1
  169. package/dist/lib/plugins/api-catalog/Catalog.d.ts +4 -2
  170. package/dist/lib/plugins/api-catalog/Catalog.js +16 -26
  171. package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -1
  172. package/dist/lib/plugins/api-catalog/index.d.ts +1 -0
  173. package/dist/lib/plugins/api-catalog/index.js +39 -8
  174. package/dist/lib/plugins/api-catalog/index.js.map +1 -1
  175. package/dist/lib/plugins/api-keys/CreateApiKey.js +7 -3
  176. package/dist/lib/plugins/api-keys/CreateApiKey.js.map +1 -1
  177. package/dist/lib/plugins/markdown/MdxPage.d.ts +1 -1
  178. package/dist/lib/plugins/markdown/MdxPage.js +3 -9
  179. package/dist/lib/plugins/markdown/MdxPage.js.map +1 -1
  180. package/dist/lib/plugins/openapi/ColorizedParam.js +1 -1
  181. package/dist/lib/plugins/openapi/ColorizedParam.js.map +1 -1
  182. package/dist/lib/plugins/openapi/Endpoint.js +1 -1
  183. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  184. package/dist/lib/plugins/openapi/OperationList.d.ts +2 -2
  185. package/dist/lib/plugins/openapi/OperationList.js +63 -18
  186. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  187. package/dist/lib/plugins/openapi/OperationListItem.d.ts +1 -1
  188. package/dist/lib/plugins/openapi/OperationListItem.js +7 -12
  189. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  190. package/dist/lib/plugins/openapi/ParamInfos.d.ts +6 -0
  191. package/dist/lib/plugins/openapi/ParamInfos.js +42 -0
  192. package/dist/lib/plugins/openapi/ParamInfos.js.map +1 -0
  193. package/dist/lib/plugins/openapi/ParameterList.d.ts +2 -1
  194. package/dist/lib/plugins/openapi/ParameterList.js +3 -2
  195. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  196. package/dist/lib/plugins/openapi/ParameterListItem.js +9 -4
  197. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  198. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js +3 -1
  199. package/dist/lib/plugins/openapi/PlaygroundDialogWrapper.js.map +1 -1
  200. package/dist/lib/plugins/openapi/SchemaList.d.ts +1 -0
  201. package/dist/lib/plugins/openapi/SchemaList.js +52 -0
  202. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -0
  203. package/dist/lib/plugins/openapi/Sidecar.js +39 -10
  204. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  205. package/dist/lib/plugins/openapi/SidecarExamples.js +2 -2
  206. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  207. package/dist/lib/plugins/openapi/SimpleSelect.js +1 -1
  208. package/dist/lib/plugins/openapi/SimpleSelect.js.map +1 -1
  209. package/dist/lib/plugins/openapi/client/GraphQLClient.d.ts +1 -1
  210. package/dist/lib/plugins/openapi/client/GraphQLClient.js +1 -1
  211. package/dist/lib/plugins/openapi/client/GraphQLClient.js.map +1 -1
  212. package/dist/lib/plugins/openapi/client/useCreateQuery.d.ts +6 -2
  213. package/dist/lib/plugins/openapi/client/useCreateQuery.js +6 -5
  214. package/dist/lib/plugins/openapi/client/useCreateQuery.js.map +1 -1
  215. package/dist/lib/plugins/openapi/components/EnumValues.d.ts +5 -0
  216. package/dist/lib/plugins/openapi/components/EnumValues.js +15 -0
  217. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -0
  218. package/dist/lib/plugins/openapi/components/SelectOnClick.d.ts +5 -0
  219. package/dist/lib/plugins/openapi/components/SelectOnClick.js +16 -0
  220. package/dist/lib/plugins/openapi/components/SelectOnClick.js.map +1 -0
  221. package/dist/lib/plugins/openapi/graphql/gql.d.ts +9 -5
  222. package/dist/lib/plugins/openapi/graphql/gql.js +5 -15
  223. package/dist/lib/plugins/openapi/graphql/gql.js.map +1 -1
  224. package/dist/lib/plugins/openapi/graphql/graphql.d.ts +108 -55
  225. package/dist/lib/plugins/openapi/graphql/graphql.js +59 -34
  226. package/dist/lib/plugins/openapi/graphql/graphql.js.map +1 -1
  227. package/dist/lib/plugins/openapi/index.d.ts +6 -11
  228. package/dist/lib/plugins/openapi/index.js +41 -60
  229. package/dist/lib/plugins/openapi/index.js.map +1 -1
  230. package/dist/lib/plugins/openapi/interfaces.d.ts +36 -10
  231. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.d.ts +2 -2
  232. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -5
  233. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  234. package/dist/lib/plugins/openapi/playground/Headers.js +1 -1
  235. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  236. package/dist/lib/plugins/openapi/playground/IdentityDialog.d.ts +11 -0
  237. package/dist/lib/plugins/openapi/playground/IdentityDialog.js +14 -0
  238. package/dist/lib/plugins/openapi/playground/IdentityDialog.js.map +1 -0
  239. package/dist/lib/plugins/openapi/playground/IdentitySelector.d.ts +7 -0
  240. package/dist/lib/plugins/openapi/playground/IdentitySelector.js +10 -0
  241. package/dist/lib/plugins/openapi/playground/IdentitySelector.js.map +1 -0
  242. package/dist/lib/plugins/openapi/playground/PathParams.d.ts +3 -2
  243. package/dist/lib/plugins/openapi/playground/PathParams.js +3 -2
  244. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  245. package/dist/lib/plugins/openapi/playground/Playground.d.ts +13 -2
  246. package/dist/lib/plugins/openapi/playground/Playground.js +81 -27
  247. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  248. package/dist/lib/plugins/openapi/playground/QueryParams.js +1 -1
  249. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  250. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.d.ts +7 -0
  251. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js +8 -0
  252. package/dist/lib/plugins/openapi/playground/RequestLoginDialog.js.map +1 -0
  253. package/dist/lib/plugins/openapi/playground/rememberedIdentity.d.ts +17 -0
  254. package/dist/lib/plugins/openapi/playground/rememberedIdentity.js +11 -0
  255. package/dist/lib/plugins/openapi/playground/rememberedIdentity.js.map +1 -0
  256. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +20 -14
  257. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  258. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.d.ts +6 -4
  259. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js +4 -3
  260. package/dist/lib/plugins/openapi/playground/result-panel/ResultPanel.js.map +1 -1
  261. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.d.ts +1 -2
  262. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js +2 -2
  263. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.js.map +1 -1
  264. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.d.ts +2 -1
  265. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js +2 -2
  266. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.js.map +1 -1
  267. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.d.ts +0 -1
  268. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js +1 -1
  269. package/dist/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.js.map +1 -1
  270. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.d.ts +4 -0
  271. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +12 -0
  272. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -0
  273. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.d.ts +2 -4
  274. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +18 -13
  275. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  276. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -2
  277. package/dist/lib/plugins/openapi/schema/SchemaView.js +33 -48
  278. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  279. package/dist/lib/plugins/openapi/schema/utils.d.ts +1 -0
  280. package/dist/lib/plugins/openapi/schema/utils.js +3 -1
  281. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  282. package/dist/lib/plugins/openapi/state.d.ts +25 -0
  283. package/dist/lib/plugins/openapi/state.js +18 -0
  284. package/dist/lib/plugins/openapi/state.js.map +1 -0
  285. package/dist/lib/plugins/openapi/util/createSidebarCategory.js +5 -7
  286. package/dist/lib/plugins/openapi/util/createSidebarCategory.js.map +1 -1
  287. package/dist/lib/plugins/openapi/util/getRoutes.js +9 -3
  288. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  289. package/dist/lib/plugins/search-pagefind/PagefindSearch.d.ts +6 -0
  290. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +80 -0
  291. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -0
  292. package/dist/lib/plugins/search-pagefind/ResultList.d.ts +8 -0
  293. package/dist/lib/plugins/search-pagefind/ResultList.js +32 -0
  294. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -0
  295. package/dist/lib/plugins/search-pagefind/get-results.d.ts +10 -0
  296. package/dist/lib/plugins/search-pagefind/get-results.js +42 -0
  297. package/dist/lib/plugins/search-pagefind/get-results.js.map +1 -0
  298. package/dist/lib/plugins/search-pagefind/index.d.ts +6 -0
  299. package/dist/lib/plugins/search-pagefind/index.js +9 -0
  300. package/dist/lib/plugins/search-pagefind/index.js.map +1 -0
  301. package/dist/lib/plugins/search-pagefind/types.d.ts +85 -0
  302. package/dist/lib/plugins/search-pagefind/types.js +2 -0
  303. package/dist/lib/plugins/search-pagefind/types.js.map +1 -0
  304. package/dist/lib/ui/Badge.d.ts +1 -1
  305. package/dist/lib/ui/Button.d.ts +2 -2
  306. package/dist/lib/ui/Button.js +2 -1
  307. package/dist/lib/ui/Button.js.map +1 -1
  308. package/dist/lib/ui/Callout.d.ts +2 -1
  309. package/dist/lib/ui/Callout.js +3 -2
  310. package/dist/lib/ui/Callout.js.map +1 -1
  311. package/dist/lib/ui/Checkbox.d.ts +2 -8
  312. package/dist/lib/ui/Checkbox.js +1 -13
  313. package/dist/lib/ui/Checkbox.js.map +1 -1
  314. package/dist/lib/ui/Command.d.ts +7 -1
  315. package/dist/lib/ui/Command.js +2 -2
  316. package/dist/lib/ui/Command.js.map +1 -1
  317. package/dist/lib/ui/Select.js +1 -1
  318. package/dist/lib/ui/Select.js.map +1 -1
  319. package/dist/lib/ui/Stepper.d.ts +3 -0
  320. package/dist/lib/ui/Stepper.js +7 -0
  321. package/dist/lib/ui/Stepper.js.map +1 -0
  322. package/dist/lib/ui/SyntaxHighlight.d.ts +15 -0
  323. package/dist/lib/ui/SyntaxHighlight.js +62 -0
  324. package/dist/lib/ui/SyntaxHighlight.js.map +1 -0
  325. package/dist/lib/ui/util.d.ts +2 -0
  326. package/dist/lib/ui/util.js +3 -0
  327. package/dist/lib/ui/util.js.map +1 -0
  328. package/dist/lib/util/MdxComponents.d.ts +5 -2
  329. package/dist/lib/util/MdxComponents.js +6 -3
  330. package/dist/lib/util/MdxComponents.js.map +1 -1
  331. package/dist/lib/util/joinPath.d.ts +3 -0
  332. package/dist/lib/util/joinPath.js +3 -0
  333. package/dist/lib/util/joinPath.js.map +1 -1
  334. package/dist/lib/util/traverse.d.ts +2 -8
  335. package/dist/lib/util/traverse.js +2 -2
  336. package/dist/lib/util/traverse.js.map +1 -1
  337. package/dist/lib/util/types.d.ts +7 -0
  338. package/dist/lib/util/types.js +2 -0
  339. package/dist/lib/util/types.js.map +1 -0
  340. package/dist/lib/util/useOnScreen.d.ts +3 -2
  341. package/dist/lib/util/useOnScreen.js +3 -3
  342. package/dist/lib/util/useOnScreen.js.map +1 -1
  343. package/dist/lib/util/useScrollToAnchor.js +26 -20
  344. package/dist/lib/util/useScrollToAnchor.js.map +1 -1
  345. package/dist/vite/api/schema-codegen.d.ts +1 -1
  346. package/dist/vite/api/schema-codegen.js +31 -9
  347. package/dist/vite/api/schema-codegen.js.map +1 -1
  348. package/dist/vite/api/schema-codegen.test.js +66 -0
  349. package/dist/vite/api/schema-codegen.test.js.map +1 -1
  350. package/dist/vite/build.js +2 -0
  351. package/dist/vite/build.js.map +1 -1
  352. package/dist/vite/config.d.ts +2 -5
  353. package/dist/vite/config.js +39 -56
  354. package/dist/vite/config.js.map +1 -1
  355. package/dist/vite/config.test.js +1 -1
  356. package/dist/vite/config.test.js.map +1 -1
  357. package/dist/vite/create-pagefind-index.d.ts +4 -0
  358. package/dist/vite/create-pagefind-index.js +12 -0
  359. package/dist/vite/create-pagefind-index.js.map +1 -0
  360. package/dist/vite/css/plugin.d.ts +2 -2
  361. package/dist/vite/css/plugin.js.map +1 -1
  362. package/dist/vite/dev-server.js +12 -4
  363. package/dist/vite/dev-server.js.map +1 -1
  364. package/dist/vite/plugin-api-keys.d.ts +2 -2
  365. package/dist/vite/plugin-api-keys.js +3 -3
  366. package/dist/vite/plugin-api-keys.js.map +1 -1
  367. package/dist/vite/plugin-api.d.ts +2 -2
  368. package/dist/vite/plugin-api.js +42 -35
  369. package/dist/vite/plugin-api.js.map +1 -1
  370. package/dist/vite/plugin-auth.d.ts +2 -2
  371. package/dist/vite/plugin-auth.js +3 -3
  372. package/dist/vite/plugin-auth.js.map +1 -1
  373. package/dist/vite/plugin-component.d.ts +2 -2
  374. package/dist/vite/plugin-component.js +7 -2
  375. package/dist/vite/plugin-component.js.map +1 -1
  376. package/dist/vite/plugin-config-reload.d.ts +4 -3
  377. package/dist/vite/plugin-config-reload.js +13 -6
  378. package/dist/vite/plugin-config-reload.js.map +1 -1
  379. package/dist/vite/plugin-config.d.ts +2 -2
  380. package/dist/vite/plugin-config.js +7 -4
  381. package/dist/vite/plugin-config.js.map +1 -1
  382. package/dist/vite/plugin-custom-pages.d.ts +2 -2
  383. package/dist/vite/plugin-custom-pages.js +3 -3
  384. package/dist/vite/plugin-custom-pages.js.map +1 -1
  385. package/dist/vite/plugin-docs.d.ts +3 -3
  386. package/dist/vite/plugin-docs.js +23 -6
  387. package/dist/vite/plugin-docs.js.map +1 -1
  388. package/dist/vite/plugin-frontmatter.d.ts +2 -2
  389. package/dist/vite/plugin-frontmatter.js +5 -4
  390. package/dist/vite/plugin-frontmatter.js.map +1 -1
  391. package/dist/vite/plugin-mdx.d.ts +2 -2
  392. package/dist/vite/plugin-mdx.js +1 -1
  393. package/dist/vite/plugin-mdx.js.map +1 -1
  394. package/dist/vite/plugin-redirect.d.ts +2 -2
  395. package/dist/vite/plugin-redirect.js +3 -3
  396. package/dist/vite/plugin-redirect.js.map +1 -1
  397. package/dist/vite/plugin-search.d.ts +2 -2
  398. package/dist/vite/plugin-search.js +5 -1
  399. package/dist/vite/plugin-search.js.map +1 -1
  400. package/dist/vite/plugin-sidebar.d.ts +2 -2
  401. package/dist/vite/plugin-sidebar.js +2 -2
  402. package/dist/vite/plugin-sidebar.js.map +1 -1
  403. package/dist/vite/plugin-theme-css.d.ts +2 -2
  404. package/dist/vite/plugin-theme-css.js.map +1 -1
  405. package/dist/vite/plugin.d.ts +2 -2
  406. package/dist/vite/plugin.js.map +1 -1
  407. package/dist/vite/prerender/FileWritingResponse.d.ts +11 -6
  408. package/dist/vite/prerender/FileWritingResponse.js +9 -6
  409. package/dist/vite/prerender/FileWritingResponse.js.map +1 -1
  410. package/dist/vite/prerender/InMemoryResponse.d.ts +16 -0
  411. package/dist/vite/prerender/InMemoryResponse.js +32 -0
  412. package/dist/vite/prerender/InMemoryResponse.js.map +1 -0
  413. package/dist/vite/prerender/PrerenderResponse.d.ts +10 -0
  414. package/dist/vite/prerender/PrerenderResponse.js +2 -0
  415. package/dist/vite/prerender/PrerenderResponse.js.map +1 -0
  416. package/dist/vite/prerender/prerender.d.ts +1 -0
  417. package/dist/vite/prerender/prerender.js +34 -28
  418. package/dist/vite/prerender/prerender.js.map +1 -1
  419. package/dist/vite/prerender/worker.d.ts +1 -1
  420. package/dist/vite/prerender/worker.js +42 -12
  421. package/dist/vite/prerender/worker.js.map +1 -1
  422. package/dist/vite/sitemap.js +2 -1
  423. package/dist/vite/sitemap.js.map +1 -1
  424. package/dist/zuplo/with-zuplo.js +4 -0
  425. package/dist/zuplo/with-zuplo.js.map +1 -1
  426. package/lib/{AuthenticationPlugin-_YVa673u.js → AuthenticationPlugin-foqdvvkf.js} +4 -4
  427. package/lib/{AuthenticationPlugin-_YVa673u.js.map → AuthenticationPlugin-foqdvvkf.js.map} +1 -1
  428. package/lib/Button-Fp19CMUr.js +49 -0
  429. package/lib/Button-Fp19CMUr.js.map +1 -0
  430. package/lib/Callout-B2vsR09t.js +229 -0
  431. package/lib/Callout-B2vsR09t.js.map +1 -0
  432. package/lib/{CategoryHeading-MYL1u_6K.js → CategoryHeading-DpB47wvk.js} +3 -3
  433. package/lib/{CategoryHeading-MYL1u_6K.js.map → CategoryHeading-DpB47wvk.js.map} +1 -1
  434. package/lib/Dialog-sbgekbjb.js +98 -0
  435. package/lib/Dialog-sbgekbjb.js.map +1 -0
  436. package/lib/Drawer-kDAfOq_2.js +1133 -0
  437. package/lib/Drawer-kDAfOq_2.js.map +1 -0
  438. package/lib/{Markdown-8mv9nhGd.js → Markdown-aF5FdsNi.js} +7822 -6052
  439. package/lib/Markdown-aF5FdsNi.js.map +1 -0
  440. package/lib/MdxPage-Vw_dc9Yz.js +85 -0
  441. package/lib/MdxPage-Vw_dc9Yz.js.map +1 -0
  442. package/lib/{OasProvider-IS9wBrb7.js → OasProvider-CjXTP-nz.js} +6 -6
  443. package/lib/{OasProvider-IS9wBrb7.js.map → OasProvider-CjXTP-nz.js.map} +1 -1
  444. package/lib/OperationList-BYemrDYk.js +5068 -0
  445. package/lib/OperationList-BYemrDYk.js.map +1 -0
  446. package/lib/Pagination-SdlocK96.js +48 -0
  447. package/lib/Pagination-SdlocK96.js.map +1 -0
  448. package/lib/{index.esm-9-TF9KQB.js → RouteGuard-CqZPoZYJ.js} +196 -144
  449. package/lib/RouteGuard-CqZPoZYJ.js.map +1 -0
  450. package/lib/SchemaList-CAeKy9pV.js +148 -0
  451. package/lib/SchemaList-CAeKy9pV.js.map +1 -0
  452. package/lib/SchemaView-B3fOPR4V.js +357 -0
  453. package/lib/SchemaView-B3fOPR4V.js.map +1 -0
  454. package/lib/{Select-D9CKL33X.js → Select-DVFRKf1R.js} +71 -71
  455. package/lib/{Select-D9CKL33X.js.map → Select-DVFRKf1R.js.map} +1 -1
  456. package/lib/SlotletProvider-DXvc0aY6.js +338 -0
  457. package/lib/SlotletProvider-DXvc0aY6.js.map +1 -0
  458. package/lib/Spinner-CE68iCm0.js +7 -0
  459. package/lib/Spinner-CE68iCm0.js.map +1 -0
  460. package/lib/{SyntaxHighlight-B0L4SC_N.js → SyntaxHighlight-BEoSoPEo.js} +496 -592
  461. package/lib/SyntaxHighlight-BEoSoPEo.js.map +1 -0
  462. package/lib/Toc-YBsgI72s.js +92 -0
  463. package/lib/Toc-YBsgI72s.js.map +1 -0
  464. package/lib/{chunk-SYFQ2XB5-QijJrSf0.js → chunk-HA7DTUK3-C4gP41vD.js} +560 -560
  465. package/lib/chunk-HA7DTUK3-C4gP41vD.js.map +1 -0
  466. package/lib/{circular-DxaIIlWD.js → circular-ByJI6Mci.js} +5461 -4993
  467. package/lib/circular-ByJI6Mci.js.map +1 -0
  468. package/lib/context-DLCwaMXN.js +22 -0
  469. package/lib/{context-rwLGh-6_.js.map → context-DLCwaMXN.js.map} +1 -1
  470. package/lib/{createServer-DSQiPwjN.js → createServer-mYvGvmc0.js} +5062 -5209
  471. package/lib/createServer-mYvGvmc0.js.map +1 -0
  472. package/lib/{hook-C_t2ISLC.js → hook-CqpVYDqN.js} +495 -467
  473. package/lib/hook-CqpVYDqN.js.map +1 -0
  474. package/lib/index-Bn6Lc9tq.js +9 -0
  475. package/lib/index-Bn6Lc9tq.js.map +1 -0
  476. package/lib/index-C1OzjGUK.js +2227 -0
  477. package/lib/index-C1OzjGUK.js.map +1 -0
  478. package/lib/index-CPNSgwSb.js +36 -0
  479. package/lib/{index-Djenk2Hj.js.map → index-CPNSgwSb.js.map} +1 -1
  480. package/lib/index-D48iOQvJ.js +1973 -0
  481. package/lib/index-D48iOQvJ.js.map +1 -0
  482. package/lib/index-DwT-v3zK.js +86 -0
  483. package/lib/index-DwT-v3zK.js.map +1 -0
  484. package/lib/{index-CjJS0l4l.js → index-LNp6rxyU.js} +2 -2
  485. package/lib/{index-CjJS0l4l.js.map → index-LNp6rxyU.js.map} +1 -1
  486. package/lib/index-gQD2h1wX.js +447 -0
  487. package/lib/index-gQD2h1wX.js.map +1 -0
  488. package/lib/{index.esm-CrSoEshU.js → index.esm--gIChbWs.js} +3 -3
  489. package/lib/{index.esm-CrSoEshU.js.map → index.esm--gIChbWs.js.map} +1 -1
  490. package/lib/{jsx-runtime-Bdg6XQ1m.js → jsx-runtime-CYK1ROHF.js} +99 -99
  491. package/lib/{jsx-runtime-Bdg6XQ1m.js.map → jsx-runtime-CYK1ROHF.js.map} +1 -1
  492. package/lib/{mutation-Cm3O9f3X.js → mutation-8LjrN7uz.js} +26 -26
  493. package/lib/{mutation-Cm3O9f3X.js.map → mutation-8LjrN7uz.js.map} +1 -1
  494. package/lib/objectEntries-yMIkr2mI.js +5 -0
  495. package/lib/objectEntries-yMIkr2mI.js.map +1 -0
  496. package/lib/post-processors/removeExtensions.js +4 -4
  497. package/lib/post-processors/traverse.js +2 -2
  498. package/lib/post-processors/traverse.js.map +1 -1
  499. package/lib/prism-bash.min-HHIMdNJ_.js.map +1 -1
  500. package/lib/prism-csharp.min-bQAo2pmx.js.map +1 -1
  501. package/lib/prism-java.min-BpvsOuIa.js.map +1 -1
  502. package/lib/prism-javascript.min-CEqHqgbm.js.map +1 -1
  503. package/lib/prism-json.min-B1GJqK1k.js.map +1 -1
  504. package/lib/prism-jsstacktrace.min-BfobCF2F.js +2 -0
  505. package/lib/prism-jsstacktrace.min-BfobCF2F.js.map +1 -0
  506. package/lib/prism-markdown.min-C0Qn0m-5.js.map +1 -1
  507. package/lib/prism-markup-BNGj0Tvm.js.map +1 -1
  508. package/lib/prism-objectivec.min-BXSWqpJJ.js.map +1 -1
  509. package/lib/prism-ruby.min-Dx9KO9ds.js.map +1 -1
  510. package/lib/prism-typescript.min-CD7H2IYQ.js.map +1 -1
  511. package/lib/ui/Accordion.js +1 -1
  512. package/lib/ui/ActionButton.js +11 -10
  513. package/lib/ui/ActionButton.js.map +1 -1
  514. package/lib/ui/Alert.js +2 -2
  515. package/lib/ui/AlertDialog.js +1 -1
  516. package/lib/ui/Badge.js +2 -2
  517. package/lib/ui/Breadcrumb.js +4 -4
  518. package/lib/ui/Button.js +13 -12
  519. package/lib/ui/Button.js.map +1 -1
  520. package/lib/ui/Callout.js +39 -21
  521. package/lib/ui/Callout.js.map +1 -1
  522. package/lib/ui/Card.js +1 -1
  523. package/lib/ui/Carousel.js +1 -1
  524. package/lib/ui/Checkbox.js +16 -26
  525. package/lib/ui/Checkbox.js.map +1 -1
  526. package/lib/ui/Command.js +105 -78
  527. package/lib/ui/Command.js.map +1 -1
  528. package/lib/ui/Dialog.js +1 -1
  529. package/lib/ui/Drawer.js +14 -1151
  530. package/lib/ui/Drawer.js.map +1 -1
  531. package/lib/ui/DropdownMenu.js +1 -1
  532. package/lib/ui/Form.js +5 -5
  533. package/lib/ui/HoverCard.js +1 -1
  534. package/lib/ui/Input.js +1 -1
  535. package/lib/ui/Label.js +2 -2
  536. package/lib/ui/Pagination.js +10 -10
  537. package/lib/ui/Popover.js +1 -1
  538. package/lib/ui/Progress.js +1 -1
  539. package/lib/ui/RadioGroup.js +1 -1
  540. package/lib/ui/ScrollArea.js +1 -1
  541. package/lib/ui/Select.js +2 -2
  542. package/lib/ui/Select.js.map +1 -1
  543. package/lib/ui/Skeleton.js +1 -1
  544. package/lib/ui/Slider.js +1 -1
  545. package/lib/ui/Stepper.js +6 -0
  546. package/lib/ui/Stepper.js.map +1 -0
  547. package/lib/ui/Switch.js +1 -1
  548. package/lib/ui/SyntaxHighlight.js +11 -0
  549. package/lib/ui/SyntaxHighlight.js.map +1 -0
  550. package/lib/ui/Tabs.js +1 -1
  551. package/lib/ui/Textarea.js +1 -1
  552. package/lib/ui/Toggle.js +2 -2
  553. package/lib/ui/ToggleGroup.js +1 -1
  554. package/lib/ui/Tooltip.js +1 -1
  555. package/lib/ui/util.js +6 -0
  556. package/lib/ui/util.js.map +1 -0
  557. package/lib/{useExposedProps-Bbf99zic.js → useExposedProps-B9qXJedG.js} +2 -2
  558. package/lib/{useExposedProps-Bbf99zic.js.map → useExposedProps-B9qXJedG.js.map} +1 -1
  559. package/lib/useLatest-hmRS46UF.js +11 -0
  560. package/lib/useLatest-hmRS46UF.js.map +1 -0
  561. package/lib/zudoku.auth-auth0.js +15 -14
  562. package/lib/zudoku.auth-auth0.js.map +1 -1
  563. package/lib/zudoku.auth-clerk.js +67 -49
  564. package/lib/zudoku.auth-clerk.js.map +1 -1
  565. package/lib/zudoku.auth-openid.js +370 -404
  566. package/lib/zudoku.auth-openid.js.map +1 -1
  567. package/lib/zudoku.components.js +32 -1334
  568. package/lib/zudoku.components.js.map +1 -1
  569. package/lib/zudoku.hooks.js +19 -0
  570. package/lib/zudoku.hooks.js.map +1 -0
  571. package/lib/zudoku.icons.js +1 -1
  572. package/lib/zudoku.plugin-api-catalog.js +106 -111
  573. package/lib/zudoku.plugin-api-catalog.js.map +1 -1
  574. package/lib/zudoku.plugin-api-keys.js +108 -106
  575. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  576. package/lib/zudoku.plugin-custom-pages.js +3 -3
  577. package/lib/zudoku.plugin-markdown.js +2 -2
  578. package/lib/zudoku.plugin-openapi.js +6 -8
  579. package/lib/zudoku.plugin-openapi.js.map +1 -1
  580. package/lib/zudoku.plugin-redirect.js +1 -1
  581. package/lib/zudoku.plugin-search-inkeep.js +9 -9
  582. package/lib/zudoku.plugin-search-pagefind.js +233 -0
  583. package/lib/zudoku.plugin-search-pagefind.js.map +1 -0
  584. package/lib/zudoku.plugins.js +9 -8
  585. package/lib/zudoku.plugins.js.map +1 -1
  586. package/package.json +76 -56
  587. package/src/app/entry.client.tsx +8 -0
  588. package/src/app/entry.server.tsx +23 -13
  589. package/src/app/main.css +98 -57
  590. package/src/app/main.tsx +3 -1
  591. package/src/app/tailwind.ts +20 -0
  592. package/src/lib/authentication/authentication.ts +2 -0
  593. package/src/lib/authentication/hook.ts +12 -1
  594. package/src/lib/authentication/providers/auth0.tsx +3 -2
  595. package/src/lib/authentication/providers/clerk.tsx +32 -8
  596. package/src/lib/authentication/providers/openid.tsx +31 -15
  597. package/src/lib/authentication/providers/supabase.tsx +157 -0
  598. package/src/lib/authentication/state.ts +9 -37
  599. package/src/lib/components/AnchorLink.tsx +9 -7
  600. package/src/lib/components/Banner.tsx +1 -0
  601. package/src/lib/components/Bootstrap.tsx +13 -6
  602. package/src/lib/components/Footer.tsx +136 -0
  603. package/src/lib/components/Header.tsx +12 -8
  604. package/src/lib/components/Heading.tsx +1 -1
  605. package/src/lib/components/InlineCode.tsx +13 -16
  606. package/src/lib/components/Layout.tsx +22 -67
  607. package/src/lib/components/Main.tsx +50 -0
  608. package/src/lib/components/MobileTopNavigation.tsx +27 -18
  609. package/src/lib/components/Pagination.tsx +50 -0
  610. package/src/lib/components/ThemeSwitch.tsx +1 -1
  611. package/src/lib/components/TopNavigation.tsx +51 -24
  612. package/src/lib/components/Zudoku.tsx +20 -7
  613. package/src/lib/components/cache.ts +8 -0
  614. package/src/lib/components/context/BypassProtectedRoutesContext.ts +3 -0
  615. package/src/lib/components/context/RouterEventsEmitter.tsx +19 -0
  616. package/src/lib/components/context/ViewportAnchorContext.tsx +6 -15
  617. package/src/lib/components/context/ZudokuContext.ts +17 -8
  618. package/src/lib/components/index.ts +2 -0
  619. package/src/lib/components/navigation/PoweredByZudoku.tsx +23 -0
  620. package/src/lib/components/navigation/Sidebar.tsx +30 -44
  621. package/src/lib/components/navigation/SidebarBadge.tsx +4 -1
  622. package/src/lib/components/navigation/SidebarCategory.tsx +15 -12
  623. package/src/lib/components/navigation/SidebarItem.tsx +22 -29
  624. package/src/lib/components/navigation/SidebarWrapper.tsx +42 -23
  625. package/src/lib/{plugins/markdown → components/navigation}/Toc.tsx +5 -14
  626. package/src/lib/components/navigation/ZudokuLogo.tsx +25 -0
  627. package/src/lib/core/RouteGuard.tsx +69 -12
  628. package/src/lib/core/ZudokuContext.ts +63 -12
  629. package/src/lib/core/plugins.ts +21 -7
  630. package/src/lib/errors/ErrorAlert.tsx +24 -17
  631. package/src/lib/hooks/index.ts +5 -0
  632. package/src/lib/hooks/useEvent.test.tsx +149 -0
  633. package/src/lib/hooks/useEvent.ts +41 -0
  634. package/src/lib/oas/graphql/index.ts +206 -55
  635. package/src/lib/oas/parser/dereference/index.ts +2 -0
  636. package/src/lib/oas/parser/index.ts +7 -29
  637. package/src/lib/plugins/api-catalog/Catalog.tsx +50 -100
  638. package/src/lib/plugins/api-catalog/index.tsx +66 -15
  639. package/src/lib/plugins/api-keys/CreateApiKey.tsx +7 -3
  640. package/src/lib/plugins/markdown/MdxPage.tsx +15 -47
  641. package/src/lib/plugins/openapi/ColorizedParam.tsx +1 -1
  642. package/src/lib/plugins/openapi/Endpoint.tsx +1 -1
  643. package/src/lib/plugins/openapi/OperationList.tsx +171 -81
  644. package/src/lib/plugins/openapi/OperationListItem.tsx +118 -104
  645. package/src/lib/plugins/openapi/ParamInfos.tsx +87 -0
  646. package/src/lib/plugins/openapi/ParameterList.tsx +4 -0
  647. package/src/lib/plugins/openapi/ParameterListItem.tsx +35 -23
  648. package/src/lib/plugins/openapi/PlaygroundDialogWrapper.tsx +7 -0
  649. package/src/lib/plugins/openapi/SchemaList.tsx +151 -0
  650. package/src/lib/plugins/openapi/Sidecar.tsx +50 -13
  651. package/src/lib/plugins/openapi/SidecarExamples.tsx +1 -2
  652. package/src/lib/plugins/openapi/SimpleSelect.tsx +1 -1
  653. package/src/lib/plugins/openapi/client/GraphQLClient.tsx +1 -1
  654. package/src/lib/plugins/openapi/client/useCreateQuery.ts +13 -5
  655. package/src/lib/plugins/openapi/components/EnumValues.tsx +58 -0
  656. package/src/lib/plugins/openapi/components/SelectOnClick.tsx +29 -0
  657. package/src/lib/plugins/openapi/graphql/gql.ts +34 -17
  658. package/src/lib/plugins/openapi/graphql/graphql.ts +172 -86
  659. package/src/lib/plugins/openapi/index.tsx +55 -87
  660. package/src/lib/plugins/openapi/interfaces.ts +44 -15
  661. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +30 -32
  662. package/src/lib/plugins/openapi/playground/Headers.tsx +0 -1
  663. package/src/lib/plugins/openapi/playground/IdentityDialog.tsx +74 -0
  664. package/src/lib/plugins/openapi/playground/IdentitySelector.tsx +54 -0
  665. package/src/lib/plugins/openapi/playground/PathParams.tsx +8 -2
  666. package/src/lib/plugins/openapi/playground/Playground.tsx +176 -89
  667. package/src/lib/plugins/openapi/playground/QueryParams.tsx +0 -1
  668. package/src/lib/plugins/openapi/playground/RequestLoginDialog.tsx +51 -0
  669. package/src/lib/plugins/openapi/playground/rememberedIdentity.ts +26 -0
  670. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +25 -5
  671. package/src/lib/plugins/openapi/playground/result-panel/ResultPanel.tsx +67 -45
  672. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroup.tsx +1 -8
  673. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupConnector.tsx +3 -0
  674. package/src/lib/plugins/openapi/schema/LogicalGroup/LogicalGroupItem.tsx +6 -3
  675. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +36 -0
  676. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +47 -50
  677. package/src/lib/plugins/openapi/schema/SchemaView.tsx +84 -138
  678. package/src/lib/plugins/openapi/schema/utils.ts +7 -1
  679. package/src/lib/plugins/openapi/state.ts +36 -0
  680. package/src/lib/plugins/openapi/util/createSidebarCategory.tsx +5 -7
  681. package/src/lib/plugins/openapi/util/getRoutes.tsx +9 -6
  682. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +164 -0
  683. package/src/lib/plugins/search-pagefind/ResultList.tsx +105 -0
  684. package/src/lib/plugins/search-pagefind/get-results.tsx +75 -0
  685. package/src/lib/plugins/search-pagefind/index.tsx +21 -0
  686. package/src/lib/plugins/search-pagefind/types.ts +118 -0
  687. package/src/lib/ui/Button.tsx +4 -2
  688. package/src/lib/ui/Callout.tsx +28 -10
  689. package/src/lib/ui/Checkbox.tsx +8 -24
  690. package/src/lib/ui/Command.tsx +25 -3
  691. package/src/lib/ui/Select.tsx +1 -1
  692. package/src/lib/ui/Stepper.tsx +8 -0
  693. package/src/lib/ui/SyntaxHighlight.tsx +186 -0
  694. package/src/lib/ui/util.tsx +3 -0
  695. package/src/lib/util/MdxComponents.tsx +7 -4
  696. package/src/lib/util/joinPath.tsx +3 -0
  697. package/src/lib/util/traverse.ts +4 -8
  698. package/src/lib/util/types.ts +7 -0
  699. package/src/lib/util/useOnScreen.ts +6 -4
  700. package/src/lib/util/useScrollToAnchor.ts +30 -20
  701. package/dist/lib/components/SyntaxHighlight.d.ts +0 -12
  702. package/dist/lib/components/SyntaxHighlight.js +0 -53
  703. package/dist/lib/components/SyntaxHighlight.js.map +0 -1
  704. package/dist/lib/components/context/PluginSystem.js +0 -2
  705. package/dist/lib/components/context/PluginSystem.js.map +0 -1
  706. package/dist/lib/plugins/markdown/Toc.js.map +0 -1
  707. package/lib/Markdown-8mv9nhGd.js.map +0 -1
  708. package/lib/MdxPage-GM1T5jmO.js +0 -193
  709. package/lib/MdxPage-GM1T5jmO.js.map +0 -1
  710. package/lib/OperationList-BTmRbbXk.js +0 -5179
  711. package/lib/OperationList-BTmRbbXk.js.map +0 -1
  712. package/lib/SlotletProvider-D0mFmGJu.js +0 -221
  713. package/lib/SlotletProvider-D0mFmGJu.js.map +0 -1
  714. package/lib/Spinner-BlzrEEk1.js +0 -51
  715. package/lib/Spinner-BlzrEEk1.js.map +0 -1
  716. package/lib/SyntaxHighlight-B0L4SC_N.js.map +0 -1
  717. package/lib/chunk-SYFQ2XB5-QijJrSf0.js.map +0 -1
  718. package/lib/circular-DxaIIlWD.js.map +0 -1
  719. package/lib/context-rwLGh-6_.js +0 -22
  720. package/lib/createServer-DSQiPwjN.js.map +0 -1
  721. package/lib/hook-C_t2ISLC.js.map +0 -1
  722. package/lib/index-B7mqiOei.js +0 -509
  723. package/lib/index-B7mqiOei.js.map +0 -1
  724. package/lib/index-BANyVRgL.js +0 -2098
  725. package/lib/index-BANyVRgL.js.map +0 -1
  726. package/lib/index-Djenk2Hj.js +0 -36
  727. package/lib/index.esm-9-TF9KQB.js.map +0 -1
  728. package/lib/joinUrl-nLx9pD-Z.js +0 -20
  729. package/lib/joinUrl-nLx9pD-Z.js.map +0 -1
  730. package/lib/useScrollToAnchor-BGEcH3HM.js +0 -286
  731. package/lib/useScrollToAnchor-BGEcH3HM.js.map +0 -1
  732. package/src/lib/components/SyntaxHighlight.tsx +0 -171
  733. package/src/lib/components/context/PluginSystem.ts +0 -0
  734. /package/dist/lib/{plugins/markdown → components/navigation}/Toc.d.ts +0 -0
  735. /package/dist/lib/{components/context/PluginSystem.d.ts → hooks/useEvent.test.d.ts} +0 -0
@@ -1,12 +1,10 @@
1
1
  import { useMutation } from "@tanstack/react-query";
2
2
  import { InfoIcon } from "lucide-react";
3
- import { Fragment, useEffect, useRef, useTransition } from "react";
3
+ import { Fragment, useEffect, useRef, useState, useTransition } from "react";
4
4
  import { FormProvider, useForm } from "react-hook-form";
5
5
  import { Alert, AlertDescription, AlertTitle } from "zudoku/ui/Alert.js";
6
6
  import { PathRenderer } from "../../../components/PathRenderer.js";
7
7
 
8
- import { Label } from "zudoku/ui/Label.js";
9
- import { RadioGroup, RadioGroupItem } from "zudoku/ui/RadioGroup.js";
10
8
  import {
11
9
  Select,
12
10
  SelectContent,
@@ -15,18 +13,23 @@ import {
15
13
  SelectValue,
16
14
  } from "zudoku/ui/Select.js";
17
15
  import { Textarea } from "zudoku/ui/Textarea.js";
18
- import { useSelectedServer } from "../../../authentication/state.js";
19
16
  import { useApiIdentities } from "../../../components/context/ZudokuContext.js";
20
- import { Card } from "../../../ui/Card.js";
21
17
  import { Tabs, TabsContent, TabsList, TabsTrigger } from "../../../ui/Tabs.js";
22
18
  import { cn } from "../../../util/cn.js";
19
+ import { objectEntries } from "../../../util/objectEntries.js";
20
+ import { useLatest } from "../../../util/useLatest.js";
23
21
  import { ColorizedParam } from "../ColorizedParam.js";
24
- import { Content } from "../SidecarExamples.js";
22
+ import { type Content } from "../SidecarExamples.js";
23
+ import { useSelectedServer } from "../state.js";
25
24
  import { createUrl } from "./createUrl.js";
26
25
  import ExamplesDropdown from "./ExamplesDropdown.js";
27
26
  import { Headers } from "./Headers.js";
27
+ import { IdentityDialog } from "./IdentityDialog.js";
28
+ import IdentitySelector from "./IdentitySelector.js";
28
29
  import { PathParams } from "./PathParams.js";
29
30
  import { QueryParams } from "./QueryParams.js";
31
+ import { useIdentityStore } from "./rememberedIdentity.js";
32
+ import RequestLoginDialog from "./RequestLoginDialog.js";
30
33
  import { ResultPanel } from "./result-panel/ResultPanel.js";
31
34
  import SubmitButton from "./SubmitButton.js";
32
35
 
@@ -55,8 +58,17 @@ export type PathParam = {
55
58
  isRequired?: boolean;
56
59
  };
57
60
 
61
+ const bodyContentTypeMap = {
62
+ Plain: "text/plain",
63
+ JSON: "application/json",
64
+ XML: "application/xml",
65
+ YAML: "application/yaml",
66
+ CSV: "text/csv",
67
+ } as const;
68
+
58
69
  export type PlaygroundForm = {
59
70
  body: string;
71
+ bodyContentType: keyof typeof bodyContentTypeMap;
60
72
  queryParams: Array<{
61
73
  name: string;
62
74
  value: string;
@@ -97,6 +109,9 @@ export type PlaygroundContentProps = {
97
109
  pathParams?: PathParam[];
98
110
  defaultBody?: string;
99
111
  examples?: Content;
112
+ requiresLogin?: boolean;
113
+ onLogin?: () => void;
114
+ onSignUp?: () => void;
100
115
  };
101
116
 
102
117
  export const Playground = ({
@@ -109,15 +124,27 @@ export const Playground = ({
109
124
  pathParams = [],
110
125
  defaultBody = "",
111
126
  examples,
127
+ requiresLogin = false,
128
+ onLogin,
129
+ onSignUp,
112
130
  }: PlaygroundContentProps) => {
113
131
  const { selectedServer, setSelectedServer } = useSelectedServer(
114
132
  servers.map((url) => ({ url })),
115
133
  );
134
+ const [showSelectIdentity, setShowSelectIdentity] = useState(false);
135
+ const identities = useApiIdentities();
136
+ const { setRememberedIdentity, getRememberedIdentity } = useIdentityStore();
116
137
  const [, startTransition] = useTransition();
138
+ const [skipLogin, setSkipLogin] = useState(false);
139
+ const [showLongRunningWarning, setShowLongRunningWarning] = useState(false);
140
+ const abortControllerRef = useRef<AbortController | undefined>(undefined);
141
+ const latestSetRememberedIdentity = useLatest(setRememberedIdentity);
142
+
117
143
  const { register, control, handleSubmit, watch, setValue, ...form } =
118
144
  useForm<PlaygroundForm>({
119
145
  defaultValues: {
120
146
  body: defaultBody,
147
+ bodyContentType: "JSON",
121
148
  queryParams: queryParams
122
149
  .map((param) => ({
123
150
  name: param.name,
@@ -150,36 +177,42 @@ export const Playground = ({
150
177
  active: false,
151
178
  },
152
179
  ]),
153
- identity: NO_IDENTITY,
180
+ identity: getRememberedIdentity(
181
+ identities.data?.map((i) => i.id) ?? [],
182
+ ),
154
183
  },
155
184
  });
156
185
  const formState = watch();
157
- const identities = useApiIdentities();
186
+ const formRef = useRef<HTMLFormElement>(null);
158
187
 
159
- const setOnce = useRef(false);
160
188
  useEffect(() => {
161
- if (setOnce.current) return;
162
- const firstIdentity = identities.data?.at(0);
163
- if (firstIdentity) {
164
- setValue("identity", firstIdentity.id);
165
- setOnce.current = true;
189
+ if (formState.identity) {
190
+ latestSetRememberedIdentity.current(formState.identity);
166
191
  }
167
- }, [setValue, identities.data]);
168
-
169
- const formRef = useRef<HTMLFormElement>(null);
192
+ }, [latestSetRememberedIdentity, formState.identity]);
170
193
 
171
194
  const queryMutation = useMutation({
172
195
  mutationFn: async (data: PlaygroundForm) => {
173
196
  const start = performance.now();
197
+
198
+ const shouldSetContentType = !data.headers.some(
199
+ (h) => h.active && h.name.toLowerCase() === "content-type",
200
+ );
201
+
202
+ const headers = Object.fromEntries([
203
+ ...data.headers
204
+ .filter((h) => h.name && h.active)
205
+ .map((header) => [header.name, header.value]),
206
+ ...(shouldSetContentType
207
+ ? [["content-type", bodyContentTypeMap[data.bodyContentType]]]
208
+ : []),
209
+ ]);
210
+
174
211
  const request = new Request(
175
212
  createUrl(server ?? selectedServer, url, data),
176
213
  {
177
214
  method: method.toUpperCase(),
178
- headers: Object.fromEntries(
179
- data.headers
180
- .filter((h) => h.name && h.active)
181
- .map((header) => [header.name, header.value]),
182
- ),
215
+ headers,
183
216
  body: data.body ? data.body : undefined,
184
217
  },
185
218
  );
@@ -189,15 +222,23 @@ export const Playground = ({
189
222
  ?.find((i) => i.id === data.identity)
190
223
  ?.authorizeRequest(request);
191
224
  }
225
+
226
+ const warningTimeout = setTimeout(
227
+ () => setShowLongRunningWarning(true),
228
+ 3210,
229
+ );
230
+ abortControllerRef.current = new AbortController();
231
+
192
232
  try {
193
233
  const response = await fetch(request, {
194
- signal: AbortSignal.timeout(5000),
234
+ signal: abortControllerRef.current.signal,
195
235
  });
196
236
 
197
- const time = performance.now() - start;
237
+ clearTimeout(warningTimeout);
238
+ setShowLongRunningWarning(false);
198
239
 
240
+ const time = performance.now() - start;
199
241
  const body = await response.text();
200
-
201
242
  const url = new URL(request.url);
202
243
 
203
244
  return {
@@ -218,6 +259,8 @@ export const Playground = ({
218
259
  },
219
260
  } satisfies PlaygroundResult;
220
261
  } catch (error) {
262
+ clearTimeout(warningTimeout);
263
+ setShowLongRunningWarning(false);
221
264
  if (error instanceof TypeError) {
222
265
  throw new Error(
223
266
  "The request failed, possibly due to network issues or CORS policy.",
@@ -229,6 +272,12 @@ export const Playground = ({
229
272
  },
230
273
  });
231
274
 
275
+ useEffect(() => {
276
+ return () => {
277
+ abortControllerRef.current?.abort();
278
+ };
279
+ }, []);
280
+
232
281
  const path = (
233
282
  <PathRenderer
234
283
  path={url}
@@ -264,7 +313,7 @@ export const Playground = ({
264
313
  const serverSelect = (
265
314
  <div className="inline-block opacity-50 hover:opacity-100 transition">
266
315
  {server ? (
267
- <span>{server.replace(/^https?:\/\//, "")}</span>
316
+ <span>{server.replace(/^https?:\/\//, "").replace(/\/$/, "")}</span>
268
317
  ) : (
269
318
  servers.length > 1 && (
270
319
  <Select
@@ -274,13 +323,13 @@ export const Playground = ({
274
323
  value={selectedServer}
275
324
  defaultValue={selectedServer}
276
325
  >
277
- <SelectTrigger className="p-0 border-none flex-row-reverse bg-transparent text-xs gap-0.5 h-auto">
326
+ <SelectTrigger className="p-0 border-none flex-row-reverse bg-transparent text-xs gap-0.5 h-auto translate-y-[4px]">
278
327
  <SelectValue />
279
328
  </SelectTrigger>
280
329
  <SelectContent>
281
330
  {servers.map((s) => (
282
331
  <SelectItem key={s} value={s}>
283
- {s.replace(/^https?:\/\//, "")}
332
+ {s.replace(/^https?:\/\//, "").replace(/\/$/, "")}
284
333
  </SelectItem>
285
334
  ))}
286
335
  </SelectContent>
@@ -290,14 +339,45 @@ export const Playground = ({
290
339
  </div>
291
340
  );
292
341
 
342
+ const showLogin = requiresLogin && !skipLogin;
343
+ const isBodySupported = ["POST", "PUT", "PATCH", "DELETE"].includes(
344
+ method.toUpperCase(),
345
+ );
346
+
293
347
  return (
294
348
  <FormProvider
295
349
  {...{ register, control, handleSubmit, watch, setValue, ...form }}
296
350
  >
297
351
  <form
298
- onSubmit={handleSubmit((data) => queryMutation.mutateAsync(data))}
352
+ onSubmit={handleSubmit((data) => {
353
+ if (identities.data?.length === 0 || data.identity) {
354
+ queryMutation.mutate(data);
355
+ } else {
356
+ setShowSelectIdentity(true);
357
+ }
358
+ })}
299
359
  ref={formRef}
360
+ className="relative"
300
361
  >
362
+ <IdentityDialog
363
+ identities={identities.data ?? []}
364
+ open={showSelectIdentity}
365
+ onOpenChange={setShowSelectIdentity}
366
+ onSubmit={({ rememberedIdentity, identity }) => {
367
+ if (rememberedIdentity) {
368
+ setValue("identity", identity ?? NO_IDENTITY);
369
+ }
370
+ setShowSelectIdentity(false);
371
+ queryMutation.mutate({ ...formState, identity });
372
+ }}
373
+ />
374
+ <RequestLoginDialog
375
+ open={showLogin}
376
+ setOpen={(open) => setSkipLogin(!open)}
377
+ onSignUp={onSignUp}
378
+ onLogin={onLogin}
379
+ />
380
+
301
381
  <div className="grid grid-cols-2 text-sm h-full">
302
382
  <div className="flex flex-col gap-4 p-4 after:bg-muted-foreground/20 relative after:absolute after:w-px after:inset-0 after:left-auto">
303
383
  <div className="flex gap-2 items-stretch">
@@ -305,7 +385,7 @@ export const Playground = ({
305
385
  <div className="border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono flex items-center">
306
386
  {method.toUpperCase()}
307
387
  </div>
308
- <div className="items-center p-2 font-mono text-xs break-words">
388
+ <div className="items-center px-2 py-0.5 font-mono text-xs break-all leading-6">
309
389
  {serverSelect}
310
390
  {path}
311
391
  {urlQueryParams.length > 0 ? "?" : ""}
@@ -316,7 +396,7 @@ export const Playground = ({
316
396
  <SubmitButton
317
397
  identities={identities.data ?? []}
318
398
  formRef={formRef}
319
- disabled={form.formState.isSubmitting}
399
+ disabled={identities.isLoading || form.formState.isSubmitting}
320
400
  />
321
401
  </div>
322
402
  <Tabs defaultValue="parameters">
@@ -341,7 +421,12 @@ export const Playground = ({
341
421
  <div className="w-2 h-2 rounded-full bg-blue-400 ml-2" />
342
422
  )}
343
423
  </TabsTrigger>
344
- <TabsTrigger value="body">Body</TabsTrigger>
424
+ <TabsTrigger value="body">
425
+ Body
426
+ {formState.body && (
427
+ <div className="w-2 h-2 rounded-full bg-blue-400 ml-2" />
428
+ )}
429
+ </TabsTrigger>
345
430
  </TabsList>
346
431
  </div>
347
432
  <TabsContent value="headers">
@@ -351,7 +436,7 @@ export const Playground = ({
351
436
  {pathParams.length > 0 && (
352
437
  <div className="flex flex-col gap-4 my-4">
353
438
  <span className="font-semibold">Path Parameters</span>
354
- <PathParams control={control} />
439
+ <PathParams url={url} control={control} />
355
440
  </div>
356
441
  )}
357
442
  <div className="flex flex-col gap-4 my-4">
@@ -375,31 +460,58 @@ export const Playground = ({
375
460
  <Textarea
376
461
  {...register("body")}
377
462
  className={cn(
378
- "border w-full rounded-lg p-2 bg-muted h-40 font-mono",
379
- !["POST", "PUT", "PATCH", "DELETE"].includes(
380
- method.toUpperCase(),
381
- ) && "h-20",
463
+ "border w-full rounded-lg bg-muted/40 p-2 h-64 font-mono text-[13px]",
464
+ !isBodySupported && "h-20 bg-muted",
382
465
  )}
383
466
  placeholder={
384
- !["POST", "PUT", "PATCH", "DELETE"].includes(
385
- method.toUpperCase(),
386
- )
467
+ !isBodySupported
387
468
  ? "This request does not support a body"
388
469
  : undefined
389
470
  }
390
- disabled={
391
- !["POST", "PUT", "PATCH", "DELETE"].includes(
392
- method.toUpperCase(),
393
- )
394
- }
471
+ disabled={!isBodySupported}
395
472
  />
396
- {examples && (
397
- <ExamplesDropdown
398
- examples={examples}
399
- onSelect={(example) =>
400
- setValue("body", JSON.stringify(example.value, null, 2))
401
- }
402
- />
473
+ {isBodySupported && (
474
+ <div className="flex items-center gap-2 mt-2 justify-between">
475
+ <Select
476
+ value={formState.bodyContentType}
477
+ onValueChange={(value) =>
478
+ setValue(
479
+ "bodyContentType",
480
+ value as keyof typeof bodyContentTypeMap,
481
+ )
482
+ }
483
+ >
484
+ <SelectTrigger className="w-[100px]">
485
+ <SelectValue />
486
+ </SelectTrigger>
487
+ <SelectContent>
488
+ {Object.keys(bodyContentTypeMap).map((format) => (
489
+ <SelectItem key={format} value={format}>
490
+ {format}
491
+ </SelectItem>
492
+ ))}
493
+ </SelectContent>
494
+ </Select>
495
+ {examples && examples.length > 0 && (
496
+ <ExamplesDropdown
497
+ examples={examples}
498
+ onSelect={(example, mediaType) => {
499
+ setValue(
500
+ "body",
501
+ JSON.stringify(example.value, null, 2),
502
+ );
503
+
504
+ const format = objectEntries(bodyContentTypeMap).find(
505
+ ([_, contentType]) => contentType === mediaType,
506
+ )?.[0];
507
+
508
+ if (format) {
509
+ setValue("bodyContentType", format);
510
+ }
511
+ }}
512
+ />
513
+ )}
514
+ </div>
403
515
  )}
404
516
  </TabsContent>
405
517
  <TabsContent value="auth">
@@ -414,43 +526,11 @@ export const Playground = ({
414
526
  </Alert>
415
527
  )}
416
528
  <div className="flex flex-col items-center gap-2">
417
- <Card className="w-full overflow-hidden">
418
- <RadioGroup
419
- onValueChange={(value) => setValue("identity", value)}
420
- value={formState.identity}
421
- defaultValue={formState.identity}
422
- className="gap-0"
423
- disabled={identities.data?.length === 0}
424
- >
425
- <Label
426
- className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
427
- htmlFor="none"
428
- >
429
- <RadioGroupItem value={NO_IDENTITY} id="none">
430
- None
431
- </RadioGroupItem>
432
- <Label htmlFor="none" className="ml-2">
433
- None
434
- </Label>
435
- </Label>
436
- {identities.data?.map((identity) => (
437
- <Label
438
- key={identity.id}
439
- className="h-12 border-b items-center flex p-4 cursor-pointer hover:bg-accent"
440
- >
441
- <RadioGroupItem
442
- value={identity.id}
443
- id={identity.id}
444
- >
445
- {identity.label}
446
- </RadioGroupItem>
447
- <Label htmlFor={identity.id} className="ml-2">
448
- {identity.label}
449
- </Label>
450
- </Label>
451
- ))}
452
- </RadioGroup>
453
- </Card>
529
+ <IdentitySelector
530
+ value={formState.identity}
531
+ identities={identities.data ?? []}
532
+ setValue={(value) => setValue("identity", value)}
533
+ />
454
534
  </div>
455
535
  </div>
456
536
  </TabsContent>
@@ -461,6 +541,13 @@ export const Playground = ({
461
541
  showPathParamsWarning={formState.pathParams.some(
462
542
  (p) => p.value === "",
463
543
  )}
544
+ showLongRunningWarning={showLongRunningWarning}
545
+ onCancel={() => {
546
+ abortControllerRef.current?.abort(
547
+ "Request cancelled by the user",
548
+ );
549
+ setShowLongRunningWarning(false);
550
+ }}
464
551
  />
465
552
  </div>
466
553
  </form>
@@ -43,7 +43,6 @@ export const QueryParams = ({
43
43
  name={`queryParams.${i}.active`}
44
44
  render={({ field }) => (
45
45
  <Checkbox
46
- variant="outline"
47
46
  id={`queryParams.${i}.active`}
48
47
  className="mr-2"
49
48
  checked={field.value}
@@ -0,0 +1,51 @@
1
+ import { Button } from "zudoku/ui/Button.js";
2
+ import {
3
+ Dialog,
4
+ DialogContent,
5
+ DialogDescription,
6
+ DialogFooter,
7
+ DialogTitle,
8
+ } from "zudoku/ui/Dialog.js";
9
+
10
+ const RequestLoginDialog = ({
11
+ open,
12
+ setOpen,
13
+ onSignUp,
14
+ onLogin,
15
+ }: {
16
+ open: boolean;
17
+ onSignUp?: () => void;
18
+ onLogin?: () => void;
19
+ setOpen: (open: boolean) => void;
20
+ }) => {
21
+ return (
22
+ <Dialog open={open} onOpenChange={setOpen}>
23
+ <DialogContent>
24
+ <DialogTitle>Welcome to the Playground!</DialogTitle>
25
+ <DialogDescription>
26
+ The Playground is a tool for developers to test and explore our APIs.
27
+ To use the Playground, you need to login.
28
+ </DialogDescription>
29
+ <DialogFooter className="flex gap-2 sm:justify-between">
30
+ <Button type="button" variant="ghost" onClick={() => setOpen(false)}>
31
+ Skip
32
+ </Button>
33
+ <div className="flex gap-2">
34
+ {onSignUp && (
35
+ <Button type="button" variant="outline" onClick={onSignUp}>
36
+ Sign Up
37
+ </Button>
38
+ )}
39
+ {onLogin && (
40
+ <Button type="button" variant="default" onClick={onLogin}>
41
+ Login
42
+ </Button>
43
+ )}
44
+ </div>
45
+ </DialogFooter>
46
+ </DialogContent>
47
+ </Dialog>
48
+ );
49
+ };
50
+
51
+ export default RequestLoginDialog;
@@ -0,0 +1,26 @@
1
+ import { create } from "zustand";
2
+ import { createJSONStorage, persist } from "zustand/middleware";
3
+
4
+ interface IdentityState {
5
+ rememberedIdentity: string | null;
6
+ setRememberedIdentity: (identity: string | null) => void;
7
+ getRememberedIdentity: (availableIdentities: string[]) => string | undefined;
8
+ }
9
+
10
+ export const useIdentityStore = create<IdentityState>()(
11
+ persist(
12
+ (set, get) => ({
13
+ rememberedIdentity: null,
14
+ setRememberedIdentity: (identity: string | null) =>
15
+ set({ rememberedIdentity: identity }),
16
+ getRememberedIdentity: (availableIdentities: string[]) =>
17
+ availableIdentities.find(
18
+ (identity) => identity === get().rememberedIdentity,
19
+ ),
20
+ }),
21
+ {
22
+ name: "identity-storage",
23
+ storage: createJSONStorage(() => sessionStorage),
24
+ },
25
+ ),
26
+ );
@@ -1,6 +1,7 @@
1
1
  import { useQuery } from "@tanstack/react-query";
2
2
  import { ChevronRightIcon } from "lucide-react";
3
3
  import { Fragment, useState } from "react";
4
+ import { Callout } from "zudoku/ui/Callout.js";
4
5
  import {
5
6
  Collapsible,
6
7
  CollapsibleContent,
@@ -13,8 +14,8 @@ import {
13
14
  SelectTrigger,
14
15
  SelectValue,
15
16
  } from "zudoku/ui/Select.js";
16
- import { SyntaxHighlight } from "../../../../components/SyntaxHighlight.js";
17
17
  import { Card } from "../../../../ui/Card.js";
18
+ import { SyntaxHighlight } from "../../../../ui/SyntaxHighlight.js";
18
19
  import { convertToTypes } from "./convertToTypes.js";
19
20
 
20
21
  const statusCodeMap: Record<number, string> = {
@@ -30,6 +31,14 @@ const statusCodeMap: Record<number, string> = {
30
31
  500: "Internal Server Error",
31
32
  };
32
33
 
34
+ const humanFileSize = (bytes: number) => {
35
+ const exponent = Math.floor(Math.log(bytes) / Math.log(1000.0));
36
+ const decimal = (bytes / Math.pow(1000.0, exponent)).toFixed(
37
+ exponent ? 2 : 0,
38
+ );
39
+ return `${decimal} ${exponent ? `${"kMGTPEZY"[exponent - 1]}B` : "B"}`;
40
+ };
41
+
33
42
  const mimeTypeToLanguage = (mimeType: string) => {
34
43
  const mimeTypeMapping = {
35
44
  "application/json": "json",
@@ -83,6 +92,8 @@ const sortHeadersByRelevance = (
83
92
  });
84
93
  };
85
94
 
95
+ const SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD = 64_000;
96
+
86
97
  export const ResponseTab = ({
87
98
  body = "",
88
99
  headers,
@@ -114,9 +125,10 @@ export const ResponseTab = ({
114
125
  });
115
126
 
116
127
  const sortedHeaders = sortHeadersByRelevance([...headers]);
128
+ const shouldDisableHighlighting = size > SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD;
117
129
 
118
130
  return (
119
- <div className="flex flex-col gap-2 h-full overflow-y-scroll max-h-[calc(100vh-220px)] py-4">
131
+ <div className="flex flex-col gap-2 h-full overflow-auto max-h-[calc(100vh-220px)] ">
120
132
  <Collapsible defaultOpen>
121
133
  <CollapsibleTrigger className="flex items-center gap-2 hover:text-primary group">
122
134
  <ChevronRightIcon className="h-4 w-4 transition-transform duration-200 group-data-[state=open]:rotate-[90deg]" />
@@ -151,6 +163,12 @@ export const ResponseTab = ({
151
163
  </Collapsible>
152
164
 
153
165
  <Card className="shadow-none">
166
+ {shouldDisableHighlighting && (
167
+ <Callout type="info" className="my-0 p-2">
168
+ Code highlight is disabled for responses larger than{" "}
169
+ {humanFileSize(SYNTAX_HIGHLIGHT_MAX_SIZE_THRESHOLD)}
170
+ </Callout>
171
+ )}
154
172
  <SyntaxHighlight
155
173
  language={
156
174
  view === "types"
@@ -161,8 +179,9 @@ export const ResponseTab = ({
161
179
  : detectedLanguage
162
180
  : "json"
163
181
  }
182
+ showCopy="always"
183
+ disabled={shouldDisableHighlighting}
164
184
  noBackground
165
- // playground dialog has h-5/6 ≈ 83.333vh
166
185
  className="overflow-x-auto p-4 text-xs max-h-[calc(83.333vh-180px)]"
167
186
  code={
168
187
  (view === "raw"
@@ -173,7 +192,7 @@ export const ResponseTab = ({
173
192
  }
174
193
  />
175
194
  </Card>
176
- <div className="flex gap-2 justify-between">
195
+ <div className="flex gap-2 justify-between items-center">
177
196
  <div className="flex text-xs gap-2 border bg-muted rounded-md p-2 items-center h-8 font-mono divide-x">
178
197
  <div>
179
198
  <span className="text-muted-foreground">Status</span> {status}{" "}
@@ -184,7 +203,8 @@ export const ResponseTab = ({
184
203
  {time.toFixed(0)}ms
185
204
  </div>
186
205
  <div>
187
- <span className="text-muted-foreground">Size</span> {size}B
206
+ <span className="text-muted-foreground">Size</span>{" "}
207
+ {humanFileSize(size)}
188
208
  </div>
189
209
  </div>
190
210
  {jsonContent && (