zudoku 0.0.0-fix-downgrade-openapi-parser.aac00796 → 0.0.0-fix-firebase-export.2e421fda

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 (566) hide show
  1. package/dist/app/main.d.ts +91 -1
  2. package/dist/app/main.js +5 -1
  3. package/dist/app/main.js.map +1 -1
  4. package/dist/app/sentry.js +1 -1
  5. package/dist/config/config.d.ts +15 -46
  6. package/dist/config/validators/BuildSchema.js +18 -3
  7. package/dist/config/validators/BuildSchema.js.map +1 -1
  8. package/dist/config/validators/InputNavigationSchema.d.ts +61 -61
  9. package/dist/config/validators/NavigationSchema.js +2 -4
  10. package/dist/config/validators/NavigationSchema.js.map +1 -1
  11. package/dist/config/validators/ProtectedRoutesSchema.d.ts +1 -1
  12. package/dist/config/validators/validate.d.ts +203 -5
  13. package/dist/config/validators/validate.js +44 -1
  14. package/dist/config/validators/validate.js.map +1 -1
  15. package/dist/config/validators/validate.test.js +43 -0
  16. package/dist/config/validators/validate.test.js.map +1 -1
  17. package/dist/flat-config.d.ts +31 -2
  18. package/dist/lib/auth/issuer.js +3 -0
  19. package/dist/lib/auth/issuer.js.map +1 -1
  20. package/dist/lib/authentication/authentication.d.ts +1 -1
  21. package/dist/lib/authentication/providers/auth0.js +6 -1
  22. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  23. package/dist/lib/authentication/providers/firebase.d.ts +4 -0
  24. package/dist/lib/authentication/providers/firebase.js +215 -0
  25. package/dist/lib/authentication/providers/firebase.js.map +1 -0
  26. package/dist/lib/authentication/providers/supabase.js +1 -6
  27. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  28. package/dist/lib/authentication/ui/ZudokuAuthUi.d.ts +24 -0
  29. package/dist/lib/authentication/ui/ZudokuAuthUi.js +124 -0
  30. package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -0
  31. package/dist/lib/authentication/ui/icons/Apple.d.ts +3 -0
  32. package/dist/lib/authentication/ui/icons/Apple.js +4 -0
  33. package/dist/lib/authentication/ui/icons/Apple.js.map +1 -0
  34. package/dist/lib/authentication/ui/icons/Facebook.d.ts +3 -0
  35. package/dist/lib/authentication/ui/icons/Facebook.js +4 -0
  36. package/dist/lib/authentication/ui/icons/Facebook.js.map +1 -0
  37. package/dist/lib/authentication/ui/icons/Github.d.ts +3 -0
  38. package/dist/lib/authentication/ui/icons/Github.js +4 -0
  39. package/dist/lib/authentication/ui/icons/Github.js.map +1 -0
  40. package/dist/lib/authentication/ui/icons/Google.d.ts +3 -0
  41. package/dist/lib/authentication/ui/icons/Google.js +4 -0
  42. package/dist/lib/authentication/ui/icons/Google.js.map +1 -0
  43. package/dist/lib/authentication/ui/icons/Microsoft.d.ts +3 -0
  44. package/dist/lib/authentication/ui/icons/Microsoft.js +4 -0
  45. package/dist/lib/authentication/ui/icons/Microsoft.js.map +1 -0
  46. package/dist/lib/authentication/ui/icons/X.d.ts +3 -0
  47. package/dist/lib/authentication/ui/icons/X.js +4 -0
  48. package/dist/lib/authentication/ui/icons/X.js.map +1 -0
  49. package/dist/lib/components/Autocomplete.d.ts +3 -1
  50. package/dist/lib/components/Autocomplete.js +6 -2
  51. package/dist/lib/components/Autocomplete.js.map +1 -1
  52. package/dist/lib/components/Heading.d.ts +1 -1
  53. package/dist/lib/components/Layout.js +3 -2
  54. package/dist/lib/components/Layout.js.map +1 -1
  55. package/dist/lib/components/Mermaid.d.ts +7 -0
  56. package/dist/lib/components/Mermaid.js +42 -0
  57. package/dist/lib/components/Mermaid.js.map +1 -0
  58. package/dist/lib/components/PagefindSearchMeta.d.ts +8 -0
  59. package/dist/lib/components/PagefindSearchMeta.js +7 -0
  60. package/dist/lib/components/PagefindSearchMeta.js.map +1 -0
  61. package/dist/lib/components/Zudoku.js +2 -5
  62. package/dist/lib/components/Zudoku.js.map +1 -1
  63. package/dist/lib/components/navigation/NavigationItem.js +2 -2
  64. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  65. package/dist/lib/core/RouteGuard.js +7 -7
  66. package/dist/lib/core/RouteGuard.js.map +1 -1
  67. package/dist/lib/core/plugins.d.ts +3 -3
  68. package/dist/lib/errors/ErrorAlert.js +1 -1
  69. package/dist/lib/errors/RouterError.d.ts +3 -1
  70. package/dist/lib/errors/RouterError.js +3 -2
  71. package/dist/lib/errors/RouterError.js.map +1 -1
  72. package/dist/lib/oas/parser/index.d.ts +1 -0
  73. package/dist/lib/oas/parser/index.js +7 -3
  74. package/dist/lib/oas/parser/index.js.map +1 -1
  75. package/dist/lib/plugins/api-keys/ProtectedRoute.js +4 -1
  76. package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -1
  77. package/dist/lib/plugins/openapi/CollapsibleCode.d.ts +1 -0
  78. package/dist/lib/plugins/openapi/CollapsibleCode.js +2 -1
  79. package/dist/lib/plugins/openapi/CollapsibleCode.js.map +1 -1
  80. package/dist/lib/plugins/openapi/DownloadSchemaButton.d.ts +3 -0
  81. package/dist/lib/plugins/openapi/DownloadSchemaButton.js +47 -0
  82. package/dist/lib/plugins/openapi/DownloadSchemaButton.js.map +1 -0
  83. package/dist/lib/plugins/openapi/Endpoint.js +3 -6
  84. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  85. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.d.ts +5 -0
  86. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js +10 -0
  87. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js.map +1 -0
  88. package/dist/lib/plugins/openapi/OasProvider.js +22 -13
  89. package/dist/lib/plugins/openapi/OasProvider.js.map +1 -1
  90. package/dist/lib/plugins/openapi/OperationList.js +16 -6
  91. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  92. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  93. package/dist/lib/plugins/openapi/OperationListItem.js +4 -3
  94. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  95. package/dist/lib/plugins/openapi/ParameterList.js +7 -4
  96. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  97. package/dist/lib/plugins/openapi/ParameterListItem.js +17 -6
  98. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  99. package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +9 -2
  100. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +5 -2
  101. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  102. package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +4 -2
  103. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +26 -4
  104. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  105. package/dist/lib/plugins/openapi/SchemaList.js +2 -1
  106. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  107. package/dist/lib/plugins/openapi/Sidecar.d.ts +2 -2
  108. package/dist/lib/plugins/openapi/Sidecar.js +61 -26
  109. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  110. package/dist/lib/plugins/openapi/SidecarBox.js +4 -4
  111. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  112. package/dist/lib/plugins/openapi/SidecarExamples.d.ts +9 -2
  113. package/dist/lib/plugins/openapi/SidecarExamples.js +24 -43
  114. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  115. package/dist/lib/plugins/openapi/components/ConstValue.js +1 -1
  116. package/dist/lib/plugins/openapi/components/ConstValue.js.map +1 -1
  117. package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
  118. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
  119. package/dist/lib/plugins/openapi/components/NonHighlightedCode.d.ts +4 -0
  120. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js +5 -0
  121. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js.map +1 -0
  122. package/dist/lib/plugins/openapi/components/ResponseContent.js +5 -6
  123. package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -1
  124. package/dist/lib/plugins/openapi/index.js +11 -5
  125. package/dist/lib/plugins/openapi/index.js.map +1 -1
  126. package/dist/lib/plugins/openapi/interfaces.d.ts +29 -13
  127. package/dist/lib/plugins/openapi/playground/BodyPanel.js +67 -15
  128. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  129. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +2 -2
  130. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -1
  131. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -1
  132. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  133. package/dist/lib/plugins/openapi/playground/Headers.js +23 -83
  134. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  135. package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +10 -2
  136. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +8 -1
  137. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  138. package/dist/lib/plugins/openapi/playground/PathParams.js +2 -3
  139. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  140. package/dist/lib/plugins/openapi/playground/Playground.d.ts +7 -0
  141. package/dist/lib/plugins/openapi/playground/Playground.js +58 -26
  142. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  143. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +3 -2
  144. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  145. package/dist/lib/plugins/openapi/playground/QueryParams.js +16 -40
  146. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  147. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.d.ts +8 -0
  148. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js +19 -0
  149. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js.map +1 -0
  150. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +1 -1
  151. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -1
  152. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.d.ts +1 -0
  153. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js +540 -0
  154. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js.map +1 -0
  155. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.d.ts +40 -0
  156. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js +205 -0
  157. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js.map +1 -0
  158. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +2 -2
  159. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  160. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +1 -1
  161. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  162. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +17 -8
  163. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  164. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -1
  165. package/dist/lib/plugins/openapi/schema/SchemaView.js +31 -16
  166. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  167. package/dist/lib/plugins/openapi/schema/UnionView.js +2 -5
  168. package/dist/lib/plugins/openapi/schema/UnionView.js.map +1 -1
  169. package/dist/lib/plugins/openapi/schema/union-helpers.js +0 -1
  170. package/dist/lib/plugins/openapi/schema/union-helpers.js.map +1 -1
  171. package/dist/lib/plugins/openapi/schema/utils.d.ts +2 -2
  172. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  173. package/dist/lib/plugins/openapi/util/generateSchemaExample.js +9 -11
  174. package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
  175. package/dist/lib/plugins/openapi/util/getRoutes.d.ts +6 -1
  176. package/dist/lib/plugins/openapi/util/getRoutes.js +29 -2
  177. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  178. package/dist/lib/plugins/search-pagefind/IndexingDialog.d.ts +3 -0
  179. package/dist/lib/plugins/search-pagefind/IndexingDialog.js +64 -0
  180. package/dist/lib/plugins/search-pagefind/IndexingDialog.js.map +1 -0
  181. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +22 -5
  182. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  183. package/dist/lib/plugins/search-pagefind/ResultList.js +5 -4
  184. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  185. package/dist/lib/shiki.d.ts +1 -1
  186. package/dist/lib/shiki.js +18 -12
  187. package/dist/lib/shiki.js.map +1 -1
  188. package/dist/lib/ui/Badge.d.ts +3 -3
  189. package/dist/lib/ui/Badge.js +9 -7
  190. package/dist/lib/ui/Badge.js.map +1 -1
  191. package/dist/lib/ui/Button.d.ts +2 -2
  192. package/dist/lib/ui/Button.js +9 -7
  193. package/dist/lib/ui/Button.js.map +1 -1
  194. package/dist/lib/ui/ButtonGroup.d.ts +11 -0
  195. package/dist/lib/ui/ButtonGroup.js +28 -0
  196. package/dist/lib/ui/ButtonGroup.js.map +1 -0
  197. package/dist/lib/ui/Checkbox.d.ts +2 -2
  198. package/dist/lib/ui/Checkbox.js +4 -4
  199. package/dist/lib/ui/Checkbox.js.map +1 -1
  200. package/dist/lib/ui/CodeBlock.d.ts +0 -1
  201. package/dist/lib/ui/CodeBlock.js +1 -1
  202. package/dist/lib/ui/CodeBlock.js.map +1 -1
  203. package/dist/lib/ui/Collapsible.d.ts +4 -4
  204. package/dist/lib/ui/Collapsible.js +11 -4
  205. package/dist/lib/ui/Collapsible.js.map +1 -1
  206. package/dist/lib/ui/Command.d.ts +3 -3
  207. package/dist/lib/ui/Command.js +2 -2
  208. package/dist/lib/ui/Command.js.map +1 -1
  209. package/dist/lib/ui/DropdownMenu.d.ts +21 -23
  210. package/dist/lib/ui/DropdownMenu.js +47 -32
  211. package/dist/lib/ui/DropdownMenu.js.map +1 -1
  212. package/dist/lib/ui/EmbeddedCodeBlock.d.ts +0 -1
  213. package/dist/lib/ui/EmbeddedCodeBlock.js +3 -2
  214. package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  215. package/dist/lib/ui/Frame.d.ts +8 -0
  216. package/dist/lib/ui/Frame.js +22 -0
  217. package/dist/lib/ui/Frame.js.map +1 -0
  218. package/dist/lib/ui/Item.d.ts +23 -0
  219. package/dist/lib/ui/Item.js +67 -0
  220. package/dist/lib/ui/Item.js.map +1 -0
  221. package/dist/lib/ui/Kbd.d.ts +3 -0
  222. package/dist/lib/ui/Kbd.js +10 -0
  223. package/dist/lib/ui/Kbd.js.map +1 -0
  224. package/dist/lib/ui/NativeSelect.d.ts +5 -0
  225. package/dist/lib/ui/NativeSelect.js +14 -0
  226. package/dist/lib/ui/NativeSelect.js.map +1 -0
  227. package/dist/lib/ui/Select.d.ts +13 -11
  228. package/dist/lib/ui/Select.js +34 -23
  229. package/dist/lib/ui/Select.js.map +1 -1
  230. package/dist/lib/ui/Separator.d.ts +4 -0
  231. package/dist/lib/ui/Separator.js +8 -0
  232. package/dist/lib/ui/Separator.js.map +1 -0
  233. package/dist/lib/ui/Tooltip.d.ts +7 -7
  234. package/dist/lib/ui/Tooltip.js +16 -10
  235. package/dist/lib/ui/Tooltip.js.map +1 -1
  236. package/dist/lib/util/MdxComponents.d.ts +1 -0
  237. package/dist/lib/util/MdxComponents.js +2 -0
  238. package/dist/lib/util/MdxComponents.js.map +1 -1
  239. package/dist/lib/util/createVariantComponent.d.ts +5 -2
  240. package/dist/lib/util/createVariantComponent.js +5 -2
  241. package/dist/lib/util/createVariantComponent.js.map +1 -1
  242. package/dist/lib/util/flattenAllOf.d.ts +4 -0
  243. package/dist/lib/util/flattenAllOf.js +88 -0
  244. package/dist/lib/util/flattenAllOf.js.map +1 -0
  245. package/dist/lib/util/flattenAllOf.test.d.ts +1 -0
  246. package/dist/lib/util/flattenAllOf.test.js +587 -0
  247. package/dist/lib/util/flattenAllOf.test.js.map +1 -0
  248. package/dist/lib/util/readFrontmatter.d.ts +6 -0
  249. package/dist/lib/util/readFrontmatter.js +12 -0
  250. package/dist/lib/util/readFrontmatter.js.map +1 -0
  251. package/dist/vite/api/SchemaManager.d.ts +5 -0
  252. package/dist/vite/api/SchemaManager.js +30 -18
  253. package/dist/vite/api/SchemaManager.js.map +1 -1
  254. package/dist/vite/api/SchemaManager.test.js +67 -0
  255. package/dist/vite/api/SchemaManager.test.js.map +1 -1
  256. package/dist/vite/config.js +8 -2
  257. package/dist/vite/config.js.map +1 -1
  258. package/dist/vite/dev-server.js +25 -0
  259. package/dist/vite/dev-server.js.map +1 -1
  260. package/dist/vite/mdx/remark-last-modified.js +57 -3
  261. package/dist/vite/mdx/remark-last-modified.js.map +1 -1
  262. package/dist/vite/pagefind-dev-index.d.ts +16 -0
  263. package/dist/vite/pagefind-dev-index.js +68 -0
  264. package/dist/vite/pagefind-dev-index.js.map +1 -0
  265. package/dist/vite/plugin-api.js +41 -3
  266. package/dist/vite/plugin-api.js.map +1 -1
  267. package/dist/vite/plugin-frontmatter.js +3 -5
  268. package/dist/vite/plugin-frontmatter.js.map +1 -1
  269. package/dist/vite/plugin-markdown-export.js +3 -4
  270. package/dist/vite/plugin-markdown-export.js.map +1 -1
  271. package/dist/vite/plugin-theme.js +10 -1
  272. package/dist/vite/plugin-theme.js.map +1 -1
  273. package/dist/vite/prerender/prerender.js +1 -19
  274. package/dist/vite/prerender/prerender.js.map +1 -1
  275. package/dist/vite/prerender/utils.d.ts +2 -0
  276. package/dist/vite/prerender/utils.js +24 -0
  277. package/dist/vite/prerender/utils.js.map +1 -0
  278. package/lib/ActionButton-DUgvSylL.js +25 -0
  279. package/lib/ActionButton-DUgvSylL.js.map +1 -0
  280. package/lib/Button-CynVW1JV.js +53 -0
  281. package/lib/Button-CynVW1JV.js.map +1 -0
  282. package/lib/ClaudeLogo-B4Xxt-x_.js +69 -0
  283. package/lib/ClaudeLogo-B4Xxt-x_.js.map +1 -0
  284. package/lib/{Command-CUcrW3qs.js → Command-BpT1iBE6.js} +25 -25
  285. package/lib/Command-BpT1iBE6.js.map +1 -0
  286. package/lib/Drawer-Ci7XwhqT.js.map +1 -1
  287. package/lib/DropdownMenu-C8SX_-S_.js +104 -0
  288. package/lib/DropdownMenu-C8SX_-S_.js.map +1 -0
  289. package/lib/{ErrorAlert-DE3Sf66a.js → ErrorAlert-DrOR8w3f.js} +475 -456
  290. package/lib/ErrorAlert-DrOR8w3f.js.map +1 -0
  291. package/lib/IndexingDialog-B5zCiUKr.js +100 -0
  292. package/lib/IndexingDialog-B5zCiUKr.js.map +1 -0
  293. package/lib/MdxPage-BagO2c-n.js +210 -0
  294. package/lib/MdxPage-BagO2c-n.js.map +1 -0
  295. package/lib/Mermaid-D_VSX7_Q.js +102 -0
  296. package/lib/Mermaid-D_VSX7_Q.js.map +1 -0
  297. package/lib/{OAuthErrorPage-BycMozgn.js → OAuthErrorPage-Fq54RLgt.js} +7 -7
  298. package/lib/{OAuthErrorPage-BycMozgn.js.map → OAuthErrorPage-Fq54RLgt.js.map} +1 -1
  299. package/lib/OasProvider-DPH8mwDa.js +40 -0
  300. package/lib/OasProvider-DPH8mwDa.js.map +1 -0
  301. package/lib/OperationList-C0jiEaG5.js +5805 -0
  302. package/lib/OperationList-C0jiEaG5.js.map +1 -0
  303. package/lib/RouteGuard-9wjejsKm.js +77 -0
  304. package/lib/RouteGuard-9wjejsKm.js.map +1 -0
  305. package/lib/RouterError-DSLXagd5.js +42 -0
  306. package/lib/RouterError-DSLXagd5.js.map +1 -0
  307. package/lib/{SchemaList-xZSf3IMh.js → SchemaList-BU0zCHn9.js} +28 -27
  308. package/lib/SchemaList-BU0zCHn9.js.map +1 -0
  309. package/lib/SchemaView-DVae4RO2.js +597 -0
  310. package/lib/SchemaView-DVae4RO2.js.map +1 -0
  311. package/lib/Select-CkxXP5I7.js +243 -0
  312. package/lib/Select-CkxXP5I7.js.map +1 -0
  313. package/lib/Separator-CTPSeW1S.js +27 -0
  314. package/lib/Separator-CTPSeW1S.js.map +1 -0
  315. package/lib/{SignUp-6SGx9Yyq.js → SignUp-BjS4ozA7.js} +13 -13
  316. package/lib/{SignUp-6SGx9Yyq.js.map → SignUp-BjS4ozA7.js.map} +1 -1
  317. package/lib/{SyntaxHighlight-zvlnSnHB.js → SyntaxHighlight-Kdyskw3C.js} +710 -662
  318. package/lib/{SyntaxHighlight-zvlnSnHB.js.map → SyntaxHighlight-Kdyskw3C.js.map} +1 -1
  319. package/lib/{Toc-Da9yp7lo.js → Toc-DJxFPfcS.js} +2 -2
  320. package/lib/{Toc-Da9yp7lo.js.map → Toc-DJxFPfcS.js.map} +1 -1
  321. package/lib/{ZudokuContext-BUZ5hkWB.js → ZudokuContext-BXldanA8.js} +11 -11
  322. package/lib/{ZudokuContext-BUZ5hkWB.js.map → ZudokuContext-BXldanA8.js.map} +1 -1
  323. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js +9 -0
  324. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js.map +1 -0
  325. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js → chunk-PVWAREVJ-dLIqswPy.js} +5 -5
  326. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js.map → chunk-PVWAREVJ-dLIqswPy.js.map} +1 -1
  327. package/lib/{circular-DvuimBGQ.js → circular-CzWF1hj5.js} +6360 -5953
  328. package/lib/circular-CzWF1hj5.js.map +1 -0
  329. package/lib/createServer-BIr2_tGn.js +16693 -0
  330. package/lib/createServer-BIr2_tGn.js.map +1 -0
  331. package/lib/createVariantComponent-B9_dVBvu.js +35 -0
  332. package/lib/createVariantComponent-B9_dVBvu.js.map +1 -0
  333. package/lib/{errors-CuGgh3hf.js → errors-Bs4duWDy.js} +3 -3
  334. package/lib/{errors-CuGgh3hf.js.map → errors-Bs4duWDy.js.map} +1 -1
  335. package/lib/firebase-Cax7HPzn.js +7360 -0
  336. package/lib/firebase-Cax7HPzn.js.map +1 -0
  337. package/lib/{hook-CMeoxziF.js → hook-BNxidGQq.js} +3 -3
  338. package/lib/{hook-CMeoxziF.js.map → hook-BNxidGQq.js.map} +1 -1
  339. package/lib/index-0oT9beQN.js +3676 -0
  340. package/lib/index-0oT9beQN.js.map +1 -0
  341. package/lib/{index-rYHsvtTo.js → index-Bh-MffiL.js} +2 -2
  342. package/lib/{index-rYHsvtTo.js.map → index-Bh-MffiL.js.map} +1 -1
  343. package/lib/{index-B1rmok4X.js → index-CCmMJp02.js} +10 -10
  344. package/lib/{index-B1rmok4X.js.map → index-CCmMJp02.js.map} +1 -1
  345. package/lib/index-CrcNWbel.js.map +1 -1
  346. package/lib/index-Css56y3F.js +133 -0
  347. package/lib/index-Css56y3F.js.map +1 -0
  348. package/lib/index.esm-DDENMN4y.js +32 -0
  349. package/lib/index.esm-DDENMN4y.js.map +1 -0
  350. package/lib/{index.esm-BnYHxCYC.js → index.esm-DtzT_KoE.js} +20 -20
  351. package/lib/{index.esm-BnYHxCYC.js.map → index.esm-DtzT_KoE.js.map} +1 -1
  352. package/lib/{invariant-Bm-FVUQE.js → invariant-CGOLuIIz.js} +3 -3
  353. package/lib/{invariant-Bm-FVUQE.js.map → invariant-CGOLuIIz.js.map} +1 -1
  354. package/lib/{mutation-BSU0xu4m.js → mutation-BoVlx8yA.js} +2 -2
  355. package/lib/{mutation-BSU0xu4m.js.map → mutation-BoVlx8yA.js.map} +1 -1
  356. package/lib/ui/ActionButton.js +1 -1
  357. package/lib/ui/Badge.js +27 -13
  358. package/lib/ui/Badge.js.map +1 -1
  359. package/lib/ui/Button.js +26 -24
  360. package/lib/ui/Button.js.map +1 -1
  361. package/lib/ui/ButtonGroup.js +77 -0
  362. package/lib/ui/ButtonGroup.js.map +1 -0
  363. package/lib/ui/Checkbox.js +29 -26
  364. package/lib/ui/Checkbox.js.map +1 -1
  365. package/lib/ui/CodeBlock.js +7 -7
  366. package/lib/ui/CodeBlock.js.map +1 -1
  367. package/lib/ui/Collapsible.js +32 -5
  368. package/lib/ui/Collapsible.js.map +1 -1
  369. package/lib/ui/Command.js +3 -3
  370. package/lib/ui/Command.js.map +1 -1
  371. package/lib/ui/DropdownMenu.js +227 -140
  372. package/lib/ui/DropdownMenu.js.map +1 -1
  373. package/lib/ui/EmbeddedCodeBlock.js +26 -25
  374. package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  375. package/lib/ui/Frame.js +81 -0
  376. package/lib/ui/Frame.js.map +1 -0
  377. package/lib/ui/Item.js +188 -0
  378. package/lib/ui/Item.js.map +1 -0
  379. package/lib/ui/Kbd.js +32 -0
  380. package/lib/ui/Kbd.js.map +1 -0
  381. package/lib/ui/NativeSelect.js +57 -0
  382. package/lib/ui/NativeSelect.js.map +1 -0
  383. package/lib/ui/Select.js +166 -116
  384. package/lib/ui/Select.js.map +1 -1
  385. package/lib/ui/Separator.js +27 -0
  386. package/lib/ui/Separator.js.map +1 -0
  387. package/lib/ui/SyntaxHighlight.js +3 -3
  388. package/lib/ui/Tabs.js +10 -10
  389. package/lib/ui/Tooltip.js +55 -28
  390. package/lib/ui/Tooltip.js.map +1 -1
  391. package/lib/useMutation-C6RqWmTS.js +97 -0
  392. package/lib/useMutation-C6RqWmTS.js.map +1 -0
  393. package/lib/zudoku.__internal.js +349 -349
  394. package/lib/zudoku.__internal.js.map +1 -1
  395. package/lib/zudoku.auth-auth0.js +7 -7
  396. package/lib/zudoku.auth-auth0.js.map +1 -1
  397. package/lib/zudoku.auth-azureb2c.js +4 -4
  398. package/lib/zudoku.auth-clerk.js +2 -2
  399. package/lib/zudoku.auth-firebase.js +9 -0
  400. package/lib/zudoku.auth-firebase.js.map +1 -0
  401. package/lib/zudoku.auth-openid.js +5 -5
  402. package/lib/zudoku.auth-supabase.js +31 -34
  403. package/lib/zudoku.auth-supabase.js.map +1 -1
  404. package/lib/zudoku.components.js +7 -7
  405. package/lib/zudoku.hooks.js +11 -24
  406. package/lib/zudoku.hooks.js.map +1 -1
  407. package/lib/zudoku.mermaid.js +10 -0
  408. package/lib/zudoku.mermaid.js.map +1 -0
  409. package/lib/zudoku.plugin-api-catalog.js +6 -6
  410. package/lib/zudoku.plugin-api-keys.js +225 -216
  411. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  412. package/lib/zudoku.plugin-custom-pages.js +1 -1
  413. package/lib/zudoku.plugin-markdown.js +1 -1
  414. package/lib/zudoku.plugin-openapi.js +3 -3
  415. package/lib/zudoku.plugin-redirect.js +1 -1
  416. package/lib/zudoku.plugin-search-pagefind.js +184 -226
  417. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  418. package/lib/zudoku.plugins.js.map +1 -1
  419. package/lib/zudoku.router.js +2 -2
  420. package/package.json +44 -27
  421. package/src/app/main.css +1 -1
  422. package/src/app/main.tsx +5 -1
  423. package/src/app/sentry.ts +1 -1
  424. package/src/lib/auth/issuer.ts +3 -0
  425. package/src/lib/authentication/authentication.ts +1 -1
  426. package/src/lib/authentication/providers/auth0.tsx +6 -1
  427. package/src/lib/authentication/providers/firebase.tsx +284 -0
  428. package/src/lib/authentication/providers/supabase.tsx +2 -7
  429. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +335 -0
  430. package/src/lib/authentication/ui/icons/Apple.tsx +10 -0
  431. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -0
  432. package/src/lib/authentication/ui/icons/Github.tsx +16 -0
  433. package/src/lib/authentication/ui/icons/Google.tsx +16 -0
  434. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -0
  435. package/src/lib/authentication/ui/icons/X.tsx +10 -0
  436. package/src/lib/components/Autocomplete.tsx +11 -2
  437. package/src/lib/components/Layout.tsx +3 -2
  438. package/src/lib/components/Mermaid.tsx +68 -0
  439. package/src/lib/components/PagefindSearchMeta.tsx +14 -0
  440. package/src/lib/components/Zudoku.tsx +4 -7
  441. package/src/lib/components/navigation/NavigationItem.tsx +7 -20
  442. package/src/lib/core/RouteGuard.tsx +9 -9
  443. package/src/lib/core/plugins.ts +2 -2
  444. package/src/lib/errors/ErrorAlert.tsx +1 -1
  445. package/src/lib/errors/RouterError.tsx +7 -2
  446. package/src/lib/oas/parser/index.ts +10 -3
  447. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +11 -7
  448. package/src/lib/plugins/openapi/CollapsibleCode.tsx +5 -3
  449. package/src/lib/plugins/openapi/DownloadSchemaButton.tsx +115 -0
  450. package/src/lib/plugins/openapi/Endpoint.tsx +20 -27
  451. package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -0
  452. package/src/lib/plugins/openapi/OasProvider.tsx +30 -17
  453. package/src/lib/plugins/openapi/OperationList.tsx +46 -21
  454. package/src/lib/plugins/openapi/OperationListItem.tsx +15 -12
  455. package/src/lib/plugins/openapi/ParameterList.tsx +37 -23
  456. package/src/lib/plugins/openapi/ParameterListItem.tsx +105 -54
  457. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +48 -7
  458. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +101 -33
  459. package/src/lib/plugins/openapi/SchemaList.tsx +4 -0
  460. package/src/lib/plugins/openapi/Sidecar.tsx +145 -65
  461. package/src/lib/plugins/openapi/SidecarBox.tsx +26 -4
  462. package/src/lib/plugins/openapi/SidecarExamples.tsx +91 -79
  463. package/src/lib/plugins/openapi/components/ConstValue.tsx +1 -1
  464. package/src/lib/plugins/openapi/components/EnumValues.tsx +2 -2
  465. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -0
  466. package/src/lib/plugins/openapi/components/ResponseContent.tsx +63 -53
  467. package/src/lib/plugins/openapi/index.tsx +16 -7
  468. package/src/lib/plugins/openapi/interfaces.ts +28 -7
  469. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +246 -30
  470. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +10 -6
  471. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +3 -2
  472. package/src/lib/plugins/openapi/playground/Headers.tsx +103 -219
  473. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +33 -1
  474. package/src/lib/plugins/openapi/playground/PathParams.tsx +26 -34
  475. package/src/lib/plugins/openapi/playground/Playground.tsx +75 -33
  476. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +9 -30
  477. package/src/lib/plugins/openapi/playground/QueryParams.tsx +82 -136
  478. package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -0
  479. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +1 -1
  480. package/src/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.tsx +872 -0
  481. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +349 -0
  482. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +2 -6
  483. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +1 -1
  484. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +89 -55
  485. package/src/lib/plugins/openapi/schema/SchemaView.tsx +98 -60
  486. package/src/lib/plugins/openapi/schema/UnionView.tsx +6 -17
  487. package/src/lib/plugins/openapi/schema/union-helpers.ts +0 -1
  488. package/src/lib/plugins/openapi/schema/utils.ts +5 -2
  489. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +11 -11
  490. package/src/lib/plugins/openapi/util/getRoutes.tsx +35 -3
  491. package/src/lib/plugins/search-pagefind/IndexingDialog.tsx +163 -0
  492. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +61 -22
  493. package/src/lib/plugins/search-pagefind/ResultList.tsx +8 -3
  494. package/src/lib/shiki.ts +21 -12
  495. package/src/lib/ui/Badge.tsx +21 -12
  496. package/src/lib/ui/Button.tsx +10 -9
  497. package/src/lib/ui/ButtonGroup.tsx +82 -0
  498. package/src/lib/ui/Checkbox.tsx +23 -24
  499. package/src/lib/ui/CodeBlock.tsx +3 -4
  500. package/src/lib/ui/Collapsible.tsx +26 -4
  501. package/src/lib/ui/Command.tsx +3 -3
  502. package/src/lib/ui/DropdownMenu.tsx +226 -170
  503. package/src/lib/ui/EmbeddedCodeBlock.tsx +21 -19
  504. package/src/lib/ui/Frame.tsx +81 -0
  505. package/src/lib/ui/Item.tsx +192 -0
  506. package/src/lib/ui/Kbd.tsx +28 -0
  507. package/src/lib/ui/NativeSelect.tsx +47 -0
  508. package/src/lib/ui/Select.tsx +153 -126
  509. package/src/lib/ui/Separator.tsx +25 -0
  510. package/src/lib/ui/Tooltip.tsx +54 -32
  511. package/src/lib/util/MdxComponents.tsx +2 -0
  512. package/src/lib/util/createVariantComponent.tsx +31 -5
  513. package/src/lib/util/flattenAllOf.test.ts +689 -0
  514. package/src/lib/util/flattenAllOf.ts +122 -0
  515. package/src/lib/util/readFrontmatter.ts +13 -0
  516. package/src/shiki/langs/markdown-nix.js +1 -0
  517. package/src/shiki/langs/openscad.js +1 -0
  518. package/dist/lib/plugins/openapi/playground/InlineInput.d.ts +0 -4
  519. package/dist/lib/plugins/openapi/playground/InlineInput.js +0 -3
  520. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +0 -1
  521. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.d.ts +0 -5
  522. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js +0 -7
  523. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js.map +0 -1
  524. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.d.ts +0 -4
  525. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js +0 -10
  526. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js.map +0 -1
  527. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.d.ts +0 -5
  528. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js +0 -16
  529. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js.map +0 -1
  530. package/dist/vite/create-pagefind-index.d.ts +0 -4
  531. package/dist/vite/create-pagefind-index.js +0 -12
  532. package/dist/vite/create-pagefind-index.js.map +0 -1
  533. package/lib/Button-DmS4u8Lj.js +0 -51
  534. package/lib/Button-DmS4u8Lj.js.map +0 -1
  535. package/lib/Command-CUcrW3qs.js.map +0 -1
  536. package/lib/DropdownMenu-BZ2NKQ3K.js +0 -126
  537. package/lib/DropdownMenu-BZ2NKQ3K.js.map +0 -1
  538. package/lib/ErrorAlert-DE3Sf66a.js.map +0 -1
  539. package/lib/MdxPage-DZfeC0QY.js +0 -240
  540. package/lib/MdxPage-DZfeC0QY.js.map +0 -1
  541. package/lib/OasProvider-Bf5zBDBY.js +0 -36
  542. package/lib/OasProvider-Bf5zBDBY.js.map +0 -1
  543. package/lib/OperationList-Cmiw1xm2.js +0 -5446
  544. package/lib/OperationList-Cmiw1xm2.js.map +0 -1
  545. package/lib/Pagination-CJszmeSA.js +0 -37
  546. package/lib/Pagination-CJszmeSA.js.map +0 -1
  547. package/lib/RouteGuard-DhU3LRr1.js +0 -81
  548. package/lib/RouteGuard-DhU3LRr1.js.map +0 -1
  549. package/lib/RouterError-VDLnrFqF.js +0 -41
  550. package/lib/RouterError-VDLnrFqF.js.map +0 -1
  551. package/lib/SchemaList-xZSf3IMh.js.map +0 -1
  552. package/lib/SchemaView-tHXTm5oM.js +0 -458
  553. package/lib/SchemaView-tHXTm5oM.js.map +0 -1
  554. package/lib/Select-C1DeCqKv.js +0 -372
  555. package/lib/Select-C1DeCqKv.js.map +0 -1
  556. package/lib/circular-DvuimBGQ.js.map +0 -1
  557. package/lib/createServer-D9UvCoDf.js +0 -12559
  558. package/lib/createServer-D9UvCoDf.js.map +0 -1
  559. package/lib/index-Cr9_YzOZ.js +0 -3364
  560. package/lib/index-Cr9_YzOZ.js.map +0 -1
  561. package/lib/useExposedProps-U3pmsHaG.js +0 -113
  562. package/lib/useExposedProps-U3pmsHaG.js.map +0 -1
  563. package/src/lib/plugins/openapi/playground/InlineInput.tsx +0 -6
  564. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.tsx +0 -36
  565. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.tsx +0 -25
  566. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.tsx +0 -42
@@ -1,16 +1,23 @@
1
1
  import { InfoIcon } from "lucide-react";
2
+ import { Fragment } from "react";
3
+ import {
4
+ Frame,
5
+ FrameDescription,
6
+ FrameFooter,
7
+ FrameHeader,
8
+ FramePanel,
9
+ } from "zudoku/ui/Frame.js";
10
+ import { ItemGroup, ItemSeparator } from "zudoku/ui/Item.js";
2
11
  import { Markdown } from "../../../components/Markdown.js";
3
12
  import type { SchemaObject } from "../../../oas/parser/index.js";
4
- import { Card } from "../../../ui/Card.js";
5
13
  import { groupBy } from "../../../util/groupBy.js";
6
14
  import { ConstValue } from "../components/ConstValue.js";
7
15
  import { EnumValues } from "../components/EnumValues.js";
8
16
  import { ParamInfos } from "../ParamInfos.js";
9
- import { AllOfGroupView } from "./AllOfGroup/AllOfGroupView.js";
10
17
  import { SchemaExampleAndDefault } from "./SchemaExampleAndDefault.js";
11
18
  import { SchemaPropertyItem } from "./SchemaPropertyItem.js";
12
19
  import { UnionView } from "./UnionView.js";
13
- import { isBasicType } from "./utils.js";
20
+ import { isArrayType, isBasicType } from "./utils.js";
14
21
 
15
22
  const renderMarkdown = (content?: string) =>
16
23
  content && (
@@ -23,19 +30,30 @@ const renderMarkdown = (content?: string) =>
23
30
  const renderBasicSchema = (
24
31
  schema: SchemaObject,
25
32
  cardHeader?: React.ReactNode,
26
- ) => (
27
- <Card className="overflow-hidden">
28
- {cardHeader}
29
- <div className="p-4 space-y-2">
33
+ embedded?: boolean,
34
+ ) => {
35
+ const content = (
36
+ <>
30
37
  <span className="text-sm text-muted-foreground">
31
38
  <ParamInfos schema={schema} />
32
39
  </span>
33
40
  {schema.enum && <EnumValues values={schema.enum} />}
34
41
  {renderMarkdown(schema.description)}
35
42
  <SchemaExampleAndDefault schema={schema} />
36
- </div>
37
- </Card>
38
- );
43
+ </>
44
+ );
45
+
46
+ if (embedded) {
47
+ return <div className="space-y-2 p-4">{content}</div>;
48
+ }
49
+
50
+ return (
51
+ <Frame>
52
+ {cardHeader}
53
+ <FramePanel className="space-y-2">{content}</FramePanel>
54
+ </Frame>
55
+ );
56
+ };
39
57
 
40
58
  export const SchemaView = ({
41
59
  schema,
@@ -50,12 +68,14 @@ export const SchemaView = ({
50
68
  }) => {
51
69
  if (!schema || Object.keys(schema).length === 0) {
52
70
  return (
53
- <Card className="overflow-hidden">
71
+ <Frame>
54
72
  {cardHeader}
55
- <div className="text-sm text-muted-foreground italic p-4">
56
- No data returned
57
- </div>
58
- </Card>
73
+ <FramePanel>
74
+ <div className="text-sm text-muted-foreground italic">
75
+ No data returned
76
+ </div>
77
+ </FramePanel>
78
+ </Frame>
59
79
  );
60
80
  }
61
81
 
@@ -67,18 +87,24 @@ export const SchemaView = ({
67
87
  return <UnionView schema={schema} cardHeader={cardHeader} />;
68
88
  }
69
89
 
70
- if (Array.isArray(schema.allOf)) {
71
- return <AllOfGroupView schema={schema} cardHeader={cardHeader} />;
72
- }
73
-
74
90
  if (isBasicType(schema.type)) {
75
- return renderBasicSchema(schema, cardHeader);
91
+ return renderBasicSchema(schema, cardHeader, embedded);
76
92
  }
77
93
 
78
- if (schema.type === "array" && typeof schema.items === "object") {
79
- return <SchemaView schema={schema.items} cardHeader={cardHeader} />;
94
+ if (isArrayType(schema) && typeof schema.items === "object") {
95
+ const wrappedSchema: SchemaObject = {
96
+ type: "object",
97
+ properties: { "": schema },
98
+ };
99
+
100
+ return (
101
+ <SchemaView schema={wrappedSchema} cardHeader={cardHeader} defaultOpen />
102
+ );
80
103
  }
81
104
 
105
+ const additionalObjectProperties = typeof schema.additionalProperties ===
106
+ "object" && <SchemaView schema={schema.additionalProperties} embedded />;
107
+
82
108
  if (schema.type === "object") {
83
109
  const groupedProperties = groupBy(
84
110
  Object.entries(schema.properties ?? {}),
@@ -90,50 +116,62 @@ export const SchemaView = ({
90
116
  : "optional";
91
117
  },
92
118
  );
119
+
93
120
  const groupNames = ["required", "optional", "deprecated"] as const;
121
+ const groups = groupNames.flatMap((group) => {
122
+ const properties = groupedProperties[group];
123
+ return properties ? { group, properties } : [];
124
+ });
125
+
126
+ const itemsList = groups.map(({ group, properties }, index) => (
127
+ <Fragment key={group}>
128
+ {index > 0 && <ItemSeparator />}
129
+ <ItemGroup className="overflow-clip">
130
+ {properties.map(([name, schema], index) => (
131
+ <Fragment key={name}>
132
+ {index > 0 && <ItemSeparator />}
133
+ <SchemaPropertyItem
134
+ name={name}
135
+ schema={schema}
136
+ group={group}
137
+ defaultOpen={defaultOpen}
138
+ />
139
+ </Fragment>
140
+ ))}
141
+ </ItemGroup>
142
+ </Fragment>
143
+ ));
94
144
 
95
- const additionalProperties =
96
- typeof schema.additionalProperties === "object" ? (
97
- <SchemaView schema={schema.additionalProperties} embedded />
98
- ) : schema.additionalProperties === true ? (
99
- <div className="text-sm p-4 bg-border/20 hover:bg-border/30 flex items-center gap-1">
100
- <span>Additional properties are allowed</span>
101
- <a
102
- className="p-0.5 -m-0.5"
103
- href="https://swagger.io/docs/specification/v3_0/data-models/dictionaries/"
104
- rel="noopener noreferrer"
105
- target="_blank"
106
- >
107
- <InfoIcon size={14} />
108
- </a>
109
- </div>
110
- ) : null;
111
-
112
- const Component = embedded ? "div" : Card;
145
+ if (embedded) {
146
+ return itemsList;
147
+ }
113
148
 
114
149
  return (
115
- <Component className="divide-y overflow-hidden">
150
+ <Frame>
116
151
  {cardHeader}
117
- {groupNames.map(
118
- (group) =>
119
- groupedProperties[group] && (
120
- <ul key={group} className="divide-y">
121
- {groupedProperties[group].map(([name, schema]) => (
122
- <SchemaPropertyItem
123
- key={name}
124
- name={name}
125
- schema={schema}
126
- group={group}
127
- defaultOpen={defaultOpen}
128
- />
129
- ))}
130
- </ul>
131
- ),
152
+ {schema.description && (
153
+ <FrameHeader>
154
+ <FrameDescription>{schema.description}</FrameDescription>
155
+ </FrameHeader>
132
156
  )}
133
- {additionalProperties}
134
- </Component>
157
+ <FramePanel className="p-0!">
158
+ {itemsList}
159
+ {additionalObjectProperties}
160
+ </FramePanel>
161
+ {schema.additionalProperties === true && (
162
+ <FrameFooter>
163
+ <a
164
+ className="text-sm flex items-center gap-1 hover:underline"
165
+ href="https://swagger.io/docs/specification/v3_0/data-models/dictionaries/"
166
+ rel="noopener noreferrer"
167
+ target="_blank"
168
+ >
169
+ Additional properties are allowed
170
+ <InfoIcon size={14} />
171
+ </a>
172
+ </FrameFooter>
173
+ )}
174
+ </Frame>
135
175
  );
136
176
  }
137
-
138
- return null;
139
177
  };
@@ -1,7 +1,7 @@
1
1
  import { useState } from "react";
2
2
  import type { SchemaObject } from "../../../oas/parser/index.js";
3
3
  import { Badge } from "../../../ui/Badge.js";
4
- import { Card } from "../../../ui/Card.js";
4
+ import { Frame, FramePanel } from "../../../ui/Frame.js";
5
5
  import { cn } from "../../../util/cn.js";
6
6
  import { SchemaView } from "./SchemaView.js";
7
7
  import {
@@ -67,17 +67,6 @@ const DecisionTable = ({
67
67
  );
68
68
  };
69
69
 
70
- const VariantPanel = ({ variant }: { variant: SchemaObject }) => {
71
- return (
72
- <div className="space-y-2">
73
- {variant.description && (
74
- <p className="text-sm text-muted-foreground">{variant.description}</p>
75
- )}
76
- <SchemaView schema={variant} />
77
- </div>
78
- );
79
- };
80
-
81
70
  export const UnionView = ({
82
71
  schema,
83
72
  cardHeader,
@@ -119,9 +108,9 @@ export const UnionView = ({
119
108
  currentVariantIndex >= 0 ? variants[currentVariantIndex] : null;
120
109
 
121
110
  return (
122
- <Card className="overflow-hidden text-sm">
111
+ <Frame>
123
112
  {cardHeader}
124
- <div className="flex flex-col gap-4 p-4">
113
+ <FramePanel className="text-sm flex flex-col gap-4">
125
114
  <div className="flex items-center gap-2">
126
115
  <Badge variant="outline">{mode}</Badge>
127
116
  <div className="flex-1 p-2">
@@ -136,8 +125,8 @@ export const UnionView = ({
136
125
  onSelectVariant={setSelectedVariant}
137
126
  />
138
127
  <strong>Properties for {selectedVariant}:</strong>
139
- {currentVariant && <VariantPanel variant={currentVariant} />}
140
- </div>
141
- </Card>
128
+ {currentVariant && <SchemaView schema={currentVariant} />}
129
+ </FramePanel>
130
+ </Frame>
142
131
  );
143
132
  };
@@ -36,7 +36,6 @@ export const unionVariants = (schema: SchemaObject): SchemaObject[] => {
36
36
  const shouldInherit =
37
37
  !variant.properties &&
38
38
  !variant.type &&
39
- !variant.allOf &&
40
39
  !variant.oneOf &&
41
40
  !variant.anyOf;
42
41
 
@@ -1,5 +1,8 @@
1
1
  import { CIRCULAR_REF } from "../../../oas/graphql/circular.js";
2
- import type { SchemaObject } from "../../../oas/parser/index.js";
2
+ import type {
3
+ ArraySchemaObject,
4
+ SchemaObject,
5
+ } from "../../../oas/parser/index.js";
3
6
 
4
7
  export const isBasicType = (
5
8
  type: unknown,
@@ -8,7 +11,7 @@ export const isBasicType = (
8
11
  ["string", "number", "boolean", "integer", "null"].includes(type)) ||
9
12
  (Array.isArray(type) && type.every(isBasicType));
10
13
 
11
- export const isArrayType = (value: SchemaObject) =>
14
+ export const isArrayType = (value: SchemaObject): value is ArraySchemaObject =>
12
15
  value.type === "array" ||
13
16
  // schema.type might be an array of types, so we need to check if "array" is one of them
14
17
  (Array.isArray(value.type) && value.type.includes("array"));
@@ -85,23 +85,23 @@ export const generateSchemaExample = (
85
85
  return schema.enum[0];
86
86
  }
87
87
 
88
- if (schema.oneOf) {
89
- const randomIndex = Math.floor(Math.random() * schema.oneOf.length);
90
- return generateSchemaExample(schema.oneOf[randomIndex] as SchemaObject);
88
+ if (schema.oneOf && schema.oneOf.length > 0) {
89
+ return generateSchemaExample(schema.oneOf[0]);
91
90
  }
92
91
 
93
- if (schema.anyOf) {
92
+ if (schema.anyOf && schema.anyOf.length > 0) {
94
93
  // Should likely be expanded to return a partial set of values, but it would require
95
94
  // detection if being used within an array or a string type.
96
- const randomIndex = Math.floor(Math.random() * schema.anyOf.length);
97
- return generateSchemaExample(schema.anyOf[randomIndex] as SchemaObject);
95
+ return generateSchemaExample(schema.anyOf[0]);
98
96
  }
99
97
 
100
- if (schema.allOf) {
101
- // https://swagger.io/docs/specification/v3_0/data-models/oneof-anyof-allof-not/#allof
102
- return schema.allOf.reduce((acc, allOfSchema) => {
103
- return { ...acc, ...generateSchemaExample(allOfSchema as SchemaObject) };
104
- }, {});
98
+ // Check for property-level examples
99
+ if (
100
+ schema.examples &&
101
+ Array.isArray(schema.examples) &&
102
+ schema.examples.length > 0
103
+ ) {
104
+ return schema.examples[0];
105
105
  }
106
106
 
107
107
  switch (schema.type) {
@@ -148,8 +148,18 @@ const createVersionRoutes = (
148
148
  ];
149
149
  };
150
150
 
151
- export const getVersions = (config: OasPluginConfig) =>
152
- config.type === "file" ? Object.keys(config.input) : [];
151
+ export const getVersionMetadata = (config: OasPluginConfig) => {
152
+ if (config.type === "raw" || !Array.isArray(config.input)) {
153
+ return { versions: [], labels: {} };
154
+ }
155
+
156
+ return {
157
+ versions: config.input.map((v) => v.path),
158
+ labels: Object.fromEntries(
159
+ config.input.map((v) => [v.path, v.label ?? v.path]),
160
+ ),
161
+ };
162
+ };
153
163
 
154
164
  export const getRoutes = ({
155
165
  basePath,
@@ -161,10 +171,33 @@ export const getRoutes = ({
161
171
  basePath: string;
162
172
  }): RouteObject[] => {
163
173
  const tagPages = config.tagPages;
174
+ const { versions } = getVersionMetadata(config);
164
175
 
165
176
  // If the config does not provide tag pages the catch-all
166
177
  // route handles all operations on a single page
167
178
  if (!tagPages) {
179
+ // If there are versions, create versioned routes even without tag pages
180
+ if (versions.length > 0) {
181
+ const versionsInPath =
182
+ versions.length > 1 ? [undefined, ...versions] : [undefined];
183
+
184
+ return versionsInPath.map((version) => {
185
+ const versionPath = joinUrl(basePath, version);
186
+ return createOasProvider({
187
+ basePath,
188
+ version,
189
+ routePath: versionPath,
190
+ routes: [
191
+ createNonTagPagesRoute({ path: `${versionPath}/:tag?` }),
192
+ ...createAdditionalRoutes(versionPath),
193
+ ],
194
+ client,
195
+ config,
196
+ });
197
+ });
198
+ }
199
+
200
+ // No versions, single route
168
201
  return [
169
202
  createOasProvider({
170
203
  basePath,
@@ -179,7 +212,6 @@ export const getRoutes = ({
179
212
  ];
180
213
  }
181
214
 
182
- const versions = getVersions(config);
183
215
  // The latest version always is added as index path
184
216
  const versionsInPath =
185
217
  versions.length > 1 ? [undefined, ...versions] : [undefined];
@@ -0,0 +1,163 @@
1
+ import { DialogTrigger } from "@radix-ui/react-dialog";
2
+ import {
3
+ type PropsWithChildren,
4
+ useCallback,
5
+ useEffect,
6
+ useState,
7
+ } from "react";
8
+ import { Button } from "zudoku/ui/Button.js";
9
+ import {
10
+ Dialog,
11
+ DialogContent,
12
+ DialogDescription,
13
+ DialogFooter,
14
+ DialogHeader,
15
+ DialogTitle,
16
+ } from "zudoku/ui/Dialog.js";
17
+
18
+ type IndexingState =
19
+ | { status: "idle" }
20
+ | { status: "indexing"; total: number; current: number; path: string }
21
+ | { status: "complete"; indexed: number }
22
+ | { status: "error"; message: string };
23
+
24
+ const ProgressBar = ({
25
+ total,
26
+ current,
27
+ barLength = 25,
28
+ emptyChar = "░",
29
+ filledChar = "█",
30
+ }: {
31
+ total: number;
32
+ current: number;
33
+ barLength?: number;
34
+ emptyChar?: string;
35
+ filledChar?: string;
36
+ }) => {
37
+ const percent = Math.round((current / total) * 100);
38
+ const filled = Math.round((percent / 100) * barLength);
39
+ const empty = barLength - filled;
40
+
41
+ return (
42
+ <>
43
+ {filledChar.repeat(filled)}
44
+ {emptyChar.repeat(empty)} {percent}% ({current}/{total})
45
+ </>
46
+ );
47
+ };
48
+
49
+ const IndexingDialog = ({ children }: PropsWithChildren) => {
50
+ const [indexingState, setIndexingState] = useState<IndexingState>({
51
+ status: "idle",
52
+ });
53
+
54
+ const startIndexing = useCallback(() => {
55
+ setIndexingState({ status: "indexing", total: 0, current: 0, path: "" });
56
+
57
+ const eventSource = new EventSource("/__z/pagefind-reindex");
58
+
59
+ eventSource.onmessage = (event) => {
60
+ const data = JSON.parse(event.data);
61
+
62
+ if (data.type === "progress") {
63
+ setIndexingState({
64
+ status: "indexing",
65
+ total: data.total,
66
+ current: data.current,
67
+ path: data.path,
68
+ });
69
+ } else if (data.type === "complete") {
70
+ eventSource.close();
71
+ if (data.success) {
72
+ setIndexingState({ status: "complete", indexed: data.indexed });
73
+ } else {
74
+ setIndexingState({
75
+ status: "error",
76
+ message: data.error ?? "Indexing failed",
77
+ });
78
+ }
79
+ }
80
+ };
81
+
82
+ eventSource.onerror = () => {
83
+ eventSource.close();
84
+ setIndexingState({
85
+ status: "error",
86
+ message: "Connection lost during indexing",
87
+ });
88
+ };
89
+
90
+ return () => eventSource.close();
91
+ }, []);
92
+
93
+ useEffect(() => {
94
+ if (indexingState.status !== "idle") return;
95
+ return startIndexing();
96
+ }, [indexingState.status, startIndexing]);
97
+
98
+ const handleDone = () => {
99
+ if (indexingState.status !== "complete") return;
100
+ window.location.reload();
101
+ };
102
+
103
+ return (
104
+ <Dialog>
105
+ <DialogTrigger asChild>{children}</DialogTrigger>
106
+ <DialogContent
107
+ className="max-w-sm! top-1/3"
108
+ showCloseButton={false}
109
+ onInteractOutside={(e) => e.preventDefault()}
110
+ >
111
+ <DialogHeader>
112
+ <DialogTitle>
113
+ {indexingState.status === "indexing" && "Building Search Index"}
114
+ {indexingState.status === "complete" && "Indexing Complete"}
115
+ {indexingState.status === "error" && "Indexing Failed"}
116
+ {indexingState.status === "idle" && "Build Search Index"}
117
+ </DialogTitle>
118
+ <DialogDescription>
119
+ {indexingState.status === "indexing" && (
120
+ <>
121
+ {indexingState.total > 0 && (
122
+ <div className="font-mono text-sm mb-2">
123
+ <ProgressBar {...indexingState} />
124
+ </div>
125
+ )}
126
+ {indexingState.path && (
127
+ <span className="block text-xs truncate">
128
+ {indexingState.path}
129
+ </span>
130
+ )}
131
+ </>
132
+ )}
133
+ {indexingState.status === "complete" && (
134
+ <>Successfully indexed {indexingState.indexed} pages.</>
135
+ )}
136
+ {indexingState.status === "error" && (
137
+ <span className="text-destructive">{indexingState.message}</span>
138
+ )}
139
+ </DialogDescription>
140
+ </DialogHeader>
141
+ <DialogFooter>
142
+ <div className="flex justify-end gap-2">
143
+ {indexingState.status === "complete" && (
144
+ <Button size="sm" onClick={handleDone}>
145
+ Close and reload
146
+ </Button>
147
+ )}
148
+ {indexingState.status === "error" && (
149
+ <>
150
+ <Button variant="outline" onClick={handleDone}>
151
+ Cancel
152
+ </Button>
153
+ <Button onClick={startIndexing}>Retry</Button>
154
+ </>
155
+ )}
156
+ </div>
157
+ </DialogFooter>
158
+ </DialogContent>
159
+ </Dialog>
160
+ );
161
+ };
162
+
163
+ export default IndexingDialog;
@@ -1,14 +1,15 @@
1
1
  import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
2
2
  import { keepPreviousData, useQuery } from "@tanstack/react-query";
3
- import { useRef, useState } from "react";
3
+ import { ListPlusIcon } from "lucide-react";
4
+ import { lazy, useEffect, useRef, useState } from "react";
4
5
  import { Button } from "zudoku/ui/Button.js";
5
- import { Callout } from "zudoku/ui/Callout.js";
6
6
  import {
7
7
  CommandDialog,
8
8
  CommandEmpty,
9
9
  CommandInput,
10
10
  } from "zudoku/ui/Command.js";
11
11
  import { DialogTitle } from "zudoku/ui/Dialog.js";
12
+ import { Kbd, KbdGroup } from "zudoku/ui/Kbd.js";
12
13
  import { useAuthState } from "../../authentication/state.js";
13
14
  import { useZudoku } from "../../components/context/ZudokuContext.js";
14
15
  import { SEARCH_PROTECTED_SECTION } from "../../core/RouteGuard.js";
@@ -18,6 +19,8 @@ import type { PagefindOptions } from "./index.js";
18
19
  import { ResultList } from "./ResultList.js";
19
20
  import type { Pagefind } from "./types.js";
20
21
 
22
+ const IndexingDialog = lazy(() => import("./IndexingDialog.js"));
23
+
21
24
  const DEFAULT_RANKING = {
22
25
  // Slightly lower than default because API docs tend to have repetitive terms (parameter names, HTTP methods, etc.)
23
26
  termFrequency: 0.8,
@@ -81,6 +84,7 @@ export const PagefindSearch = ({
81
84
  }) => {
82
85
  const { pagefind, error, isError } = usePagefind(options);
83
86
  const [searchTerm, setSearchTerm] = useState("");
87
+ const [selectedValue, setSelectedValue] = useState<string>("");
84
88
  const auth = useAuthState();
85
89
  const context = useZudoku();
86
90
  const inputRef = useRef<HTMLInputElement>(null);
@@ -100,9 +104,24 @@ export const PagefindSearch = ({
100
104
  enabled: !!pagefind && !!searchTerm,
101
105
  });
102
106
 
107
+ useEffect(() => {
108
+ if (!searchResults?.length) return;
109
+
110
+ const firstResult = searchResults.at(0);
111
+ if (!firstResult) return;
112
+
113
+ const firstValue = `${firstResult.meta.title}-${firstResult.url}`;
114
+ setSelectedValue(firstValue);
115
+ }, [searchResults]);
116
+
103
117
  return (
104
118
  <CommandDialog
105
- command={{ shouldFilter: false }}
119
+ command={{
120
+ shouldFilter: false,
121
+ loop: true,
122
+ value: selectedValue,
123
+ onValueChange: setSelectedValue,
124
+ }}
106
125
  content={{ className: "max-w-[750px]" }}
107
126
  open={isOpen}
108
127
  onOpenChange={onClose}
@@ -135,28 +154,48 @@ export const PagefindSearch = ({
135
154
  "Start typing to search"
136
155
  )}
137
156
  </CommandEmpty>
138
- {isError ? (
157
+ {isError && error.message !== "NOT_BUILT_YET" ? (
139
158
  <div className="p-4 text-sm">
140
- {error.message === "NOT_BUILT_YET" ? (
141
- <Callout type="info">
142
- Search is currently not available in development mode by default.
143
- <br />
144
- To still use search in development, run <code>zudoku build</code>{" "}
145
- and copy the <code>dist/pagefind</code> directory to your{" "}
146
- <code>public</code> directory.
147
- </Callout>
148
- ) : (
149
- "An error occurred while loading search."
150
- )}
159
+ An error occurred while loading search.
151
160
  </div>
152
161
  ) : (
153
- <ResultList
154
- basePath={context.options.basePath}
155
- searchResults={searchResults ?? []}
156
- searchTerm={searchTerm}
157
- onClose={onClose}
158
- maxSubResults={options.maxSubResults}
159
- />
162
+ <>
163
+ <ResultList
164
+ basePath={context.options.basePath}
165
+ searchResults={searchResults ?? []}
166
+ searchTerm={searchTerm}
167
+ onClose={onClose}
168
+ maxSubResults={options.maxSubResults}
169
+ />
170
+ <div className="flex justify-between p-2 items-center">
171
+ <div className="flex items-center text-xs text-muted-foreground">
172
+ <KbdGroup className="ms-0 me-1">
173
+ <Kbd>↑</Kbd>
174
+ <Kbd>↓</Kbd>
175
+ </KbdGroup>
176
+ Navigate
177
+ <KbdGroup className="ms-4 me-1">
178
+ <Kbd>↵</Kbd>
179
+ </KbdGroup>
180
+ Select
181
+ <KbdGroup className="ms-4 me-1">
182
+ <Kbd>Esc</Kbd>
183
+ </KbdGroup>
184
+ Close dialog
185
+ </div>
186
+ {import.meta.env.DEV && (
187
+ <IndexingDialog>
188
+ <Button
189
+ variant="outline"
190
+ className="h-7 text-xs text-muted-foreground"
191
+ >
192
+ <ListPlusIcon />
193
+ Build Search Index
194
+ </Button>
195
+ </IndexingDialog>
196
+ )}
197
+ </div>
198
+ </>
160
199
  )}
161
200
  </CommandDialog>
162
201
  );