zudoku 0.0.0-fix-downgrade-openapi-parser.aac00796 → 0.0.0-fix-prevent-full-deref-allof.b02efbe5

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 (548) 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/config/config.d.ts +15 -46
  5. package/dist/config/validators/BuildSchema.js +18 -3
  6. package/dist/config/validators/BuildSchema.js.map +1 -1
  7. package/dist/config/validators/InputNavigationSchema.d.ts +61 -61
  8. package/dist/config/validators/NavigationSchema.js +2 -4
  9. package/dist/config/validators/NavigationSchema.js.map +1 -1
  10. package/dist/config/validators/ProtectedRoutesSchema.d.ts +1 -1
  11. package/dist/config/validators/validate.d.ts +203 -5
  12. package/dist/config/validators/validate.js +44 -1
  13. package/dist/config/validators/validate.js.map +1 -1
  14. package/dist/config/validators/validate.test.js +43 -0
  15. package/dist/config/validators/validate.test.js.map +1 -1
  16. package/dist/flat-config.d.ts +31 -2
  17. package/dist/lib/auth/issuer.js +3 -0
  18. package/dist/lib/auth/issuer.js.map +1 -1
  19. package/dist/lib/authentication/authentication.d.ts +1 -1
  20. package/dist/lib/authentication/providers/auth0.js +6 -1
  21. package/dist/lib/authentication/providers/auth0.js.map +1 -1
  22. package/dist/lib/authentication/providers/firebase.d.ts +4 -0
  23. package/dist/lib/authentication/providers/firebase.js +215 -0
  24. package/dist/lib/authentication/providers/firebase.js.map +1 -0
  25. package/dist/lib/authentication/providers/supabase.js +1 -6
  26. package/dist/lib/authentication/providers/supabase.js.map +1 -1
  27. package/dist/lib/authentication/ui/ZudokuAuthUi.d.ts +24 -0
  28. package/dist/lib/authentication/ui/ZudokuAuthUi.js +124 -0
  29. package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -0
  30. package/dist/lib/authentication/ui/icons/Apple.d.ts +3 -0
  31. package/dist/lib/authentication/ui/icons/Apple.js +4 -0
  32. package/dist/lib/authentication/ui/icons/Apple.js.map +1 -0
  33. package/dist/lib/authentication/ui/icons/Facebook.d.ts +3 -0
  34. package/dist/lib/authentication/ui/icons/Facebook.js +4 -0
  35. package/dist/lib/authentication/ui/icons/Facebook.js.map +1 -0
  36. package/dist/lib/authentication/ui/icons/Github.d.ts +3 -0
  37. package/dist/lib/authentication/ui/icons/Github.js +4 -0
  38. package/dist/lib/authentication/ui/icons/Github.js.map +1 -0
  39. package/dist/lib/authentication/ui/icons/Google.d.ts +3 -0
  40. package/dist/lib/authentication/ui/icons/Google.js +4 -0
  41. package/dist/lib/authentication/ui/icons/Google.js.map +1 -0
  42. package/dist/lib/authentication/ui/icons/Microsoft.d.ts +3 -0
  43. package/dist/lib/authentication/ui/icons/Microsoft.js +4 -0
  44. package/dist/lib/authentication/ui/icons/Microsoft.js.map +1 -0
  45. package/dist/lib/authentication/ui/icons/X.d.ts +3 -0
  46. package/dist/lib/authentication/ui/icons/X.js +4 -0
  47. package/dist/lib/authentication/ui/icons/X.js.map +1 -0
  48. package/dist/lib/components/Autocomplete.d.ts +3 -1
  49. package/dist/lib/components/Autocomplete.js +6 -2
  50. package/dist/lib/components/Autocomplete.js.map +1 -1
  51. package/dist/lib/components/Heading.d.ts +1 -1
  52. package/dist/lib/components/Layout.js +3 -2
  53. package/dist/lib/components/Layout.js.map +1 -1
  54. package/dist/lib/components/Mermaid.d.ts +7 -0
  55. package/dist/lib/components/Mermaid.js +42 -0
  56. package/dist/lib/components/Mermaid.js.map +1 -0
  57. package/dist/lib/components/PagefindSearchMeta.d.ts +8 -0
  58. package/dist/lib/components/PagefindSearchMeta.js +7 -0
  59. package/dist/lib/components/PagefindSearchMeta.js.map +1 -0
  60. package/dist/lib/components/Zudoku.js +2 -5
  61. package/dist/lib/components/Zudoku.js.map +1 -1
  62. package/dist/lib/components/navigation/NavigationItem.js +2 -2
  63. package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
  64. package/dist/lib/core/RouteGuard.js +7 -7
  65. package/dist/lib/core/RouteGuard.js.map +1 -1
  66. package/dist/lib/core/plugins.d.ts +3 -3
  67. package/dist/lib/errors/ErrorAlert.js +1 -1
  68. package/dist/lib/errors/RouterError.d.ts +3 -1
  69. package/dist/lib/errors/RouterError.js +3 -2
  70. package/dist/lib/errors/RouterError.js.map +1 -1
  71. package/dist/lib/oas/parser/index.d.ts +1 -0
  72. package/dist/lib/oas/parser/index.js +7 -3
  73. package/dist/lib/oas/parser/index.js.map +1 -1
  74. package/dist/lib/plugins/api-keys/ProtectedRoute.js +4 -1
  75. package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -1
  76. package/dist/lib/plugins/openapi/CollapsibleCode.d.ts +1 -0
  77. package/dist/lib/plugins/openapi/CollapsibleCode.js +2 -1
  78. package/dist/lib/plugins/openapi/CollapsibleCode.js.map +1 -1
  79. package/dist/lib/plugins/openapi/DownloadSchemaButton.d.ts +3 -0
  80. package/dist/lib/plugins/openapi/DownloadSchemaButton.js +47 -0
  81. package/dist/lib/plugins/openapi/DownloadSchemaButton.js.map +1 -0
  82. package/dist/lib/plugins/openapi/Endpoint.js +3 -6
  83. package/dist/lib/plugins/openapi/Endpoint.js.map +1 -1
  84. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.d.ts +5 -0
  85. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js +10 -0
  86. package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js.map +1 -0
  87. package/dist/lib/plugins/openapi/OasProvider.js +22 -13
  88. package/dist/lib/plugins/openapi/OasProvider.js.map +1 -1
  89. package/dist/lib/plugins/openapi/OperationList.js +16 -6
  90. package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
  91. package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
  92. package/dist/lib/plugins/openapi/OperationListItem.js +4 -3
  93. package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
  94. package/dist/lib/plugins/openapi/ParameterList.js +7 -4
  95. package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
  96. package/dist/lib/plugins/openapi/ParameterListItem.js +17 -6
  97. package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
  98. package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +9 -2
  99. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +5 -2
  100. package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
  101. package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +4 -2
  102. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +26 -4
  103. package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
  104. package/dist/lib/plugins/openapi/SchemaList.js +2 -1
  105. package/dist/lib/plugins/openapi/SchemaList.js.map +1 -1
  106. package/dist/lib/plugins/openapi/Sidecar.d.ts +2 -2
  107. package/dist/lib/plugins/openapi/Sidecar.js +61 -26
  108. package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
  109. package/dist/lib/plugins/openapi/SidecarBox.js +4 -4
  110. package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
  111. package/dist/lib/plugins/openapi/SidecarExamples.d.ts +9 -2
  112. package/dist/lib/plugins/openapi/SidecarExamples.js +24 -43
  113. package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
  114. package/dist/lib/plugins/openapi/components/ConstValue.js +1 -1
  115. package/dist/lib/plugins/openapi/components/ConstValue.js.map +1 -1
  116. package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
  117. package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
  118. package/dist/lib/plugins/openapi/components/NonHighlightedCode.d.ts +4 -0
  119. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js +5 -0
  120. package/dist/lib/plugins/openapi/components/NonHighlightedCode.js.map +1 -0
  121. package/dist/lib/plugins/openapi/components/ResponseContent.js +5 -6
  122. package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -1
  123. package/dist/lib/plugins/openapi/index.js +11 -5
  124. package/dist/lib/plugins/openapi/index.js.map +1 -1
  125. package/dist/lib/plugins/openapi/interfaces.d.ts +29 -13
  126. package/dist/lib/plugins/openapi/playground/BodyPanel.js +67 -15
  127. package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
  128. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +2 -2
  129. package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -1
  130. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -1
  131. package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
  132. package/dist/lib/plugins/openapi/playground/Headers.js +23 -83
  133. package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
  134. package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +10 -2
  135. package/dist/lib/plugins/openapi/playground/ParamsGrid.js +8 -1
  136. package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
  137. package/dist/lib/plugins/openapi/playground/PathParams.js +2 -3
  138. package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
  139. package/dist/lib/plugins/openapi/playground/Playground.d.ts +7 -0
  140. package/dist/lib/plugins/openapi/playground/Playground.js +57 -25
  141. package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
  142. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +3 -2
  143. package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
  144. package/dist/lib/plugins/openapi/playground/QueryParams.js +16 -40
  145. package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
  146. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.d.ts +8 -0
  147. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js +19 -0
  148. package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js.map +1 -0
  149. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +1 -1
  150. package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -1
  151. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.d.ts +1 -0
  152. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js +540 -0
  153. package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js.map +1 -0
  154. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.d.ts +40 -0
  155. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js +205 -0
  156. package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js.map +1 -0
  157. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +2 -2
  158. package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
  159. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +1 -1
  160. package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
  161. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +17 -8
  162. package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
  163. package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -1
  164. package/dist/lib/plugins/openapi/schema/SchemaView.js +31 -16
  165. package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
  166. package/dist/lib/plugins/openapi/schema/UnionView.js +2 -5
  167. package/dist/lib/plugins/openapi/schema/UnionView.js.map +1 -1
  168. package/dist/lib/plugins/openapi/schema/union-helpers.js +0 -1
  169. package/dist/lib/plugins/openapi/schema/union-helpers.js.map +1 -1
  170. package/dist/lib/plugins/openapi/schema/utils.d.ts +2 -2
  171. package/dist/lib/plugins/openapi/schema/utils.js.map +1 -1
  172. package/dist/lib/plugins/openapi/util/generateSchemaExample.js +9 -11
  173. package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
  174. package/dist/lib/plugins/openapi/util/getRoutes.d.ts +6 -1
  175. package/dist/lib/plugins/openapi/util/getRoutes.js +29 -2
  176. package/dist/lib/plugins/openapi/util/getRoutes.js.map +1 -1
  177. package/dist/lib/plugins/search-pagefind/IndexingDialog.d.ts +3 -0
  178. package/dist/lib/plugins/search-pagefind/IndexingDialog.js +64 -0
  179. package/dist/lib/plugins/search-pagefind/IndexingDialog.js.map +1 -0
  180. package/dist/lib/plugins/search-pagefind/PagefindSearch.js +22 -5
  181. package/dist/lib/plugins/search-pagefind/PagefindSearch.js.map +1 -1
  182. package/dist/lib/plugins/search-pagefind/ResultList.js +5 -4
  183. package/dist/lib/plugins/search-pagefind/ResultList.js.map +1 -1
  184. package/dist/lib/shiki.d.ts +1 -1
  185. package/dist/lib/shiki.js +18 -12
  186. package/dist/lib/shiki.js.map +1 -1
  187. package/dist/lib/ui/Badge.d.ts +3 -3
  188. package/dist/lib/ui/Badge.js +9 -7
  189. package/dist/lib/ui/Badge.js.map +1 -1
  190. package/dist/lib/ui/Button.d.ts +2 -2
  191. package/dist/lib/ui/Button.js +9 -7
  192. package/dist/lib/ui/Button.js.map +1 -1
  193. package/dist/lib/ui/ButtonGroup.d.ts +11 -0
  194. package/dist/lib/ui/ButtonGroup.js +28 -0
  195. package/dist/lib/ui/ButtonGroup.js.map +1 -0
  196. package/dist/lib/ui/Checkbox.d.ts +2 -2
  197. package/dist/lib/ui/Checkbox.js +4 -4
  198. package/dist/lib/ui/Checkbox.js.map +1 -1
  199. package/dist/lib/ui/CodeBlock.d.ts +0 -1
  200. package/dist/lib/ui/CodeBlock.js +1 -1
  201. package/dist/lib/ui/CodeBlock.js.map +1 -1
  202. package/dist/lib/ui/Collapsible.d.ts +4 -4
  203. package/dist/lib/ui/Collapsible.js +11 -4
  204. package/dist/lib/ui/Collapsible.js.map +1 -1
  205. package/dist/lib/ui/Command.d.ts +3 -3
  206. package/dist/lib/ui/Command.js +2 -2
  207. package/dist/lib/ui/Command.js.map +1 -1
  208. package/dist/lib/ui/DropdownMenu.d.ts +21 -23
  209. package/dist/lib/ui/DropdownMenu.js +47 -32
  210. package/dist/lib/ui/DropdownMenu.js.map +1 -1
  211. package/dist/lib/ui/EmbeddedCodeBlock.d.ts +0 -1
  212. package/dist/lib/ui/EmbeddedCodeBlock.js +3 -2
  213. package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  214. package/dist/lib/ui/Frame.d.ts +8 -0
  215. package/dist/lib/ui/Frame.js +22 -0
  216. package/dist/lib/ui/Frame.js.map +1 -0
  217. package/dist/lib/ui/Item.d.ts +23 -0
  218. package/dist/lib/ui/Item.js +67 -0
  219. package/dist/lib/ui/Item.js.map +1 -0
  220. package/dist/lib/ui/Kbd.d.ts +3 -0
  221. package/dist/lib/ui/Kbd.js +10 -0
  222. package/dist/lib/ui/Kbd.js.map +1 -0
  223. package/dist/lib/ui/NativeSelect.d.ts +5 -0
  224. package/dist/lib/ui/NativeSelect.js +14 -0
  225. package/dist/lib/ui/NativeSelect.js.map +1 -0
  226. package/dist/lib/ui/Select.d.ts +13 -11
  227. package/dist/lib/ui/Select.js +34 -23
  228. package/dist/lib/ui/Select.js.map +1 -1
  229. package/dist/lib/ui/Separator.d.ts +4 -0
  230. package/dist/lib/ui/Separator.js +8 -0
  231. package/dist/lib/ui/Separator.js.map +1 -0
  232. package/dist/lib/ui/Tooltip.d.ts +7 -7
  233. package/dist/lib/ui/Tooltip.js +16 -10
  234. package/dist/lib/ui/Tooltip.js.map +1 -1
  235. package/dist/lib/util/MdxComponents.d.ts +1 -0
  236. package/dist/lib/util/MdxComponents.js +2 -0
  237. package/dist/lib/util/MdxComponents.js.map +1 -1
  238. package/dist/lib/util/createVariantComponent.d.ts +5 -2
  239. package/dist/lib/util/createVariantComponent.js +5 -2
  240. package/dist/lib/util/createVariantComponent.js.map +1 -1
  241. package/dist/lib/util/flattenAllOf.d.ts +4 -0
  242. package/dist/lib/util/flattenAllOf.js +88 -0
  243. package/dist/lib/util/flattenAllOf.js.map +1 -0
  244. package/dist/lib/util/flattenAllOf.test.d.ts +1 -0
  245. package/dist/lib/util/flattenAllOf.test.js +532 -0
  246. package/dist/lib/util/flattenAllOf.test.js.map +1 -0
  247. package/dist/lib/util/readFrontmatter.d.ts +6 -0
  248. package/dist/lib/util/readFrontmatter.js +12 -0
  249. package/dist/lib/util/readFrontmatter.js.map +1 -0
  250. package/dist/vite/api/SchemaManager.d.ts +5 -0
  251. package/dist/vite/api/SchemaManager.js +30 -18
  252. package/dist/vite/api/SchemaManager.js.map +1 -1
  253. package/dist/vite/config.js +7 -1
  254. package/dist/vite/config.js.map +1 -1
  255. package/dist/vite/dev-server.js +25 -0
  256. package/dist/vite/dev-server.js.map +1 -1
  257. package/dist/vite/mdx/remark-last-modified.js +57 -3
  258. package/dist/vite/mdx/remark-last-modified.js.map +1 -1
  259. package/dist/vite/pagefind-dev-index.d.ts +16 -0
  260. package/dist/vite/pagefind-dev-index.js +68 -0
  261. package/dist/vite/pagefind-dev-index.js.map +1 -0
  262. package/dist/vite/plugin-api.js +41 -3
  263. package/dist/vite/plugin-api.js.map +1 -1
  264. package/dist/vite/plugin-frontmatter.js +3 -5
  265. package/dist/vite/plugin-frontmatter.js.map +1 -1
  266. package/dist/vite/plugin-markdown-export.js +3 -4
  267. package/dist/vite/plugin-markdown-export.js.map +1 -1
  268. package/dist/vite/plugin-theme.js +10 -1
  269. package/dist/vite/plugin-theme.js.map +1 -1
  270. package/dist/vite/prerender/prerender.js +1 -19
  271. package/dist/vite/prerender/prerender.js.map +1 -1
  272. package/dist/vite/prerender/utils.d.ts +2 -0
  273. package/dist/vite/prerender/utils.js +24 -0
  274. package/dist/vite/prerender/utils.js.map +1 -0
  275. package/lib/Button-CynVW1JV.js +53 -0
  276. package/lib/Button-CynVW1JV.js.map +1 -0
  277. package/lib/ClaudeLogo-PxFjou9w.js +69 -0
  278. package/lib/ClaudeLogo-PxFjou9w.js.map +1 -0
  279. package/lib/{Command-CUcrW3qs.js → Command-BpT1iBE6.js} +25 -25
  280. package/lib/Command-BpT1iBE6.js.map +1 -0
  281. package/lib/Drawer-Ci7XwhqT.js.map +1 -1
  282. package/lib/DropdownMenu-C8SX_-S_.js +104 -0
  283. package/lib/DropdownMenu-C8SX_-S_.js.map +1 -0
  284. package/lib/{ErrorAlert-DE3Sf66a.js → ErrorAlert-BqjbNHIn.js} +475 -456
  285. package/lib/ErrorAlert-BqjbNHIn.js.map +1 -0
  286. package/lib/IndexingDialog-B5zCiUKr.js +100 -0
  287. package/lib/IndexingDialog-B5zCiUKr.js.map +1 -0
  288. package/lib/MdxPage-CVFatbHw.js +210 -0
  289. package/lib/MdxPage-CVFatbHw.js.map +1 -0
  290. package/lib/Mermaid-CIFixY6C.js +102 -0
  291. package/lib/Mermaid-CIFixY6C.js.map +1 -0
  292. package/lib/{OAuthErrorPage-BycMozgn.js → OAuthErrorPage-Dup79DJk.js} +7 -7
  293. package/lib/{OAuthErrorPage-BycMozgn.js.map → OAuthErrorPage-Dup79DJk.js.map} +1 -1
  294. package/lib/OasProvider-C10RPbY8.js +40 -0
  295. package/lib/OasProvider-C10RPbY8.js.map +1 -0
  296. package/lib/OperationList--zX7OAlH.js +5824 -0
  297. package/lib/OperationList--zX7OAlH.js.map +1 -0
  298. package/lib/RouteGuard-BXy13JSz.js +77 -0
  299. package/lib/RouteGuard-BXy13JSz.js.map +1 -0
  300. package/lib/RouterError-CKOZTsDD.js +42 -0
  301. package/lib/RouterError-CKOZTsDD.js.map +1 -0
  302. package/lib/{SchemaList-xZSf3IMh.js → SchemaList-CxafJA_P.js} +28 -27
  303. package/lib/SchemaList-CxafJA_P.js.map +1 -0
  304. package/lib/SchemaView-j0PtjY8U.js +597 -0
  305. package/lib/SchemaView-j0PtjY8U.js.map +1 -0
  306. package/lib/Select-VmDZ-nKe.js +337 -0
  307. package/lib/Select-VmDZ-nKe.js.map +1 -0
  308. package/lib/{SignUp-6SGx9Yyq.js → SignUp-Pm_LGm6T.js} +13 -13
  309. package/lib/{SignUp-6SGx9Yyq.js.map → SignUp-Pm_LGm6T.js.map} +1 -1
  310. package/lib/{SyntaxHighlight-zvlnSnHB.js → SyntaxHighlight-bkmst3oV.js} +710 -662
  311. package/lib/{SyntaxHighlight-zvlnSnHB.js.map → SyntaxHighlight-bkmst3oV.js.map} +1 -1
  312. package/lib/{Toc-Da9yp7lo.js → Toc-TUXNFbKl.js} +2 -2
  313. package/lib/{Toc-Da9yp7lo.js.map → Toc-TUXNFbKl.js.map} +1 -1
  314. package/lib/{ZudokuContext-BUZ5hkWB.js → ZudokuContext-np1wheDl.js} +8 -8
  315. package/lib/{ZudokuContext-BUZ5hkWB.js.map → ZudokuContext-np1wheDl.js.map} +1 -1
  316. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js +9 -0
  317. package/lib/___vite-browser-external_commonjs-proxy-Cga3HsWk.js.map +1 -0
  318. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js → chunk-PVWAREVJ-dLIqswPy.js} +5 -5
  319. package/lib/{chunk-PVWAREVJ-BMhpCH5D.js.map → chunk-PVWAREVJ-dLIqswPy.js.map} +1 -1
  320. package/lib/{circular-DvuimBGQ.js → circular-GQ_uaom2.js} +6360 -5953
  321. package/lib/circular-GQ_uaom2.js.map +1 -0
  322. package/lib/createServer-sU0O9wfJ.js +16693 -0
  323. package/lib/createServer-sU0O9wfJ.js.map +1 -0
  324. package/lib/{errors-CuGgh3hf.js → errors-B0hNTPFO.js} +3 -3
  325. package/lib/{errors-CuGgh3hf.js.map → errors-B0hNTPFO.js.map} +1 -1
  326. package/lib/{hook-CMeoxziF.js → hook-CvSwcbk6.js} +3 -3
  327. package/lib/{hook-CMeoxziF.js.map → hook-CvSwcbk6.js.map} +1 -1
  328. package/lib/index-B6SRNBIt.js +3700 -0
  329. package/lib/index-B6SRNBIt.js.map +1 -0
  330. package/lib/index-CrcNWbel.js.map +1 -1
  331. package/lib/index-DnMgJWrI.js +133 -0
  332. package/lib/index-DnMgJWrI.js.map +1 -0
  333. package/lib/{index-rYHsvtTo.js → index-DscsS121.js} +2 -2
  334. package/lib/{index-rYHsvtTo.js.map → index-DscsS121.js.map} +1 -1
  335. package/lib/{index-B1rmok4X.js → index-mfkNWYG-.js} +10 -10
  336. package/lib/{index-B1rmok4X.js.map → index-mfkNWYG-.js.map} +1 -1
  337. package/lib/{index.esm-BnYHxCYC.js → index.esm-DtzT_KoE.js} +20 -20
  338. package/lib/{index.esm-BnYHxCYC.js.map → index.esm-DtzT_KoE.js.map} +1 -1
  339. package/lib/{invariant-Bm-FVUQE.js → invariant-CGOLuIIz.js} +3 -3
  340. package/lib/{invariant-Bm-FVUQE.js.map → invariant-CGOLuIIz.js.map} +1 -1
  341. package/lib/{mutation-BSU0xu4m.js → mutation-BlmnL5qL.js} +2 -2
  342. package/lib/{mutation-BSU0xu4m.js.map → mutation-BlmnL5qL.js.map} +1 -1
  343. package/lib/ui/ActionButton.js +1 -1
  344. package/lib/ui/Badge.js +27 -13
  345. package/lib/ui/Badge.js.map +1 -1
  346. package/lib/ui/Button.js +26 -24
  347. package/lib/ui/Button.js.map +1 -1
  348. package/lib/ui/ButtonGroup.js +77 -0
  349. package/lib/ui/ButtonGroup.js.map +1 -0
  350. package/lib/ui/Checkbox.js +29 -26
  351. package/lib/ui/Checkbox.js.map +1 -1
  352. package/lib/ui/CodeBlock.js +7 -7
  353. package/lib/ui/CodeBlock.js.map +1 -1
  354. package/lib/ui/Collapsible.js +32 -5
  355. package/lib/ui/Collapsible.js.map +1 -1
  356. package/lib/ui/Command.js +3 -3
  357. package/lib/ui/Command.js.map +1 -1
  358. package/lib/ui/DropdownMenu.js +227 -140
  359. package/lib/ui/DropdownMenu.js.map +1 -1
  360. package/lib/ui/EmbeddedCodeBlock.js +26 -25
  361. package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
  362. package/lib/ui/Frame.js +81 -0
  363. package/lib/ui/Frame.js.map +1 -0
  364. package/lib/ui/Item.js +188 -0
  365. package/lib/ui/Item.js.map +1 -0
  366. package/lib/ui/Kbd.js +32 -0
  367. package/lib/ui/Kbd.js.map +1 -0
  368. package/lib/ui/NativeSelect.js +57 -0
  369. package/lib/ui/NativeSelect.js.map +1 -0
  370. package/lib/ui/Select.js +166 -116
  371. package/lib/ui/Select.js.map +1 -1
  372. package/lib/ui/Separator.js +27 -0
  373. package/lib/ui/Separator.js.map +1 -0
  374. package/lib/ui/SyntaxHighlight.js +3 -3
  375. package/lib/ui/Tabs.js +10 -10
  376. package/lib/ui/Tooltip.js +55 -28
  377. package/lib/ui/Tooltip.js.map +1 -1
  378. package/lib/zudoku.__internal.js +349 -349
  379. package/lib/zudoku.__internal.js.map +1 -1
  380. package/lib/zudoku.auth-auth0.js +7 -7
  381. package/lib/zudoku.auth-auth0.js.map +1 -1
  382. package/lib/zudoku.auth-azureb2c.js +4 -4
  383. package/lib/zudoku.auth-clerk.js +2 -2
  384. package/lib/zudoku.auth-openid.js +5 -5
  385. package/lib/zudoku.auth-supabase.js +31 -34
  386. package/lib/zudoku.auth-supabase.js.map +1 -1
  387. package/lib/zudoku.components.js +7 -7
  388. package/lib/zudoku.hooks.js +11 -24
  389. package/lib/zudoku.hooks.js.map +1 -1
  390. package/lib/zudoku.mermaid.js +10 -0
  391. package/lib/zudoku.mermaid.js.map +1 -0
  392. package/lib/zudoku.plugin-api-catalog.js +6 -6
  393. package/lib/zudoku.plugin-api-keys.js +223 -198
  394. package/lib/zudoku.plugin-api-keys.js.map +1 -1
  395. package/lib/zudoku.plugin-custom-pages.js +1 -1
  396. package/lib/zudoku.plugin-markdown.js +1 -1
  397. package/lib/zudoku.plugin-openapi.js +3 -3
  398. package/lib/zudoku.plugin-redirect.js +1 -1
  399. package/lib/zudoku.plugin-search-pagefind.js +184 -226
  400. package/lib/zudoku.plugin-search-pagefind.js.map +1 -1
  401. package/lib/zudoku.plugins.js.map +1 -1
  402. package/lib/zudoku.router.js +2 -2
  403. package/package.json +36 -23
  404. package/src/app/main.css +1 -1
  405. package/src/app/main.tsx +5 -1
  406. package/src/lib/auth/issuer.ts +3 -0
  407. package/src/lib/authentication/authentication.ts +1 -1
  408. package/src/lib/authentication/providers/auth0.tsx +6 -1
  409. package/src/lib/authentication/providers/firebase.tsx +284 -0
  410. package/src/lib/authentication/providers/supabase.tsx +2 -7
  411. package/src/lib/authentication/ui/ZudokuAuthUi.tsx +335 -0
  412. package/src/lib/authentication/ui/icons/Apple.tsx +10 -0
  413. package/src/lib/authentication/ui/icons/Facebook.tsx +15 -0
  414. package/src/lib/authentication/ui/icons/Github.tsx +16 -0
  415. package/src/lib/authentication/ui/icons/Google.tsx +16 -0
  416. package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -0
  417. package/src/lib/authentication/ui/icons/X.tsx +10 -0
  418. package/src/lib/components/Autocomplete.tsx +11 -2
  419. package/src/lib/components/Layout.tsx +3 -2
  420. package/src/lib/components/Mermaid.tsx +68 -0
  421. package/src/lib/components/PagefindSearchMeta.tsx +14 -0
  422. package/src/lib/components/Zudoku.tsx +4 -7
  423. package/src/lib/components/navigation/NavigationItem.tsx +7 -20
  424. package/src/lib/core/RouteGuard.tsx +9 -9
  425. package/src/lib/core/plugins.ts +2 -2
  426. package/src/lib/errors/ErrorAlert.tsx +1 -1
  427. package/src/lib/errors/RouterError.tsx +7 -2
  428. package/src/lib/oas/parser/index.ts +10 -3
  429. package/src/lib/plugins/api-keys/ProtectedRoute.tsx +11 -7
  430. package/src/lib/plugins/openapi/CollapsibleCode.tsx +5 -3
  431. package/src/lib/plugins/openapi/DownloadSchemaButton.tsx +115 -0
  432. package/src/lib/plugins/openapi/Endpoint.tsx +20 -27
  433. package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -0
  434. package/src/lib/plugins/openapi/OasProvider.tsx +30 -17
  435. package/src/lib/plugins/openapi/OperationList.tsx +46 -21
  436. package/src/lib/plugins/openapi/OperationListItem.tsx +15 -12
  437. package/src/lib/plugins/openapi/ParameterList.tsx +37 -23
  438. package/src/lib/plugins/openapi/ParameterListItem.tsx +105 -54
  439. package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +48 -7
  440. package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +101 -33
  441. package/src/lib/plugins/openapi/SchemaList.tsx +4 -0
  442. package/src/lib/plugins/openapi/Sidecar.tsx +145 -65
  443. package/src/lib/plugins/openapi/SidecarBox.tsx +26 -4
  444. package/src/lib/plugins/openapi/SidecarExamples.tsx +91 -79
  445. package/src/lib/plugins/openapi/components/ConstValue.tsx +1 -1
  446. package/src/lib/plugins/openapi/components/EnumValues.tsx +2 -2
  447. package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -0
  448. package/src/lib/plugins/openapi/components/ResponseContent.tsx +63 -53
  449. package/src/lib/plugins/openapi/index.tsx +16 -7
  450. package/src/lib/plugins/openapi/interfaces.ts +28 -7
  451. package/src/lib/plugins/openapi/playground/BodyPanel.tsx +246 -30
  452. package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +10 -6
  453. package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +3 -2
  454. package/src/lib/plugins/openapi/playground/Headers.tsx +103 -219
  455. package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +33 -1
  456. package/src/lib/plugins/openapi/playground/PathParams.tsx +26 -34
  457. package/src/lib/plugins/openapi/playground/Playground.tsx +74 -32
  458. package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +9 -30
  459. package/src/lib/plugins/openapi/playground/QueryParams.tsx +82 -136
  460. package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -0
  461. package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +1 -1
  462. package/src/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.tsx +872 -0
  463. package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +349 -0
  464. package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +2 -6
  465. package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +1 -1
  466. package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +89 -55
  467. package/src/lib/plugins/openapi/schema/SchemaView.tsx +98 -60
  468. package/src/lib/plugins/openapi/schema/UnionView.tsx +6 -17
  469. package/src/lib/plugins/openapi/schema/union-helpers.ts +0 -1
  470. package/src/lib/plugins/openapi/schema/utils.ts +5 -2
  471. package/src/lib/plugins/openapi/util/generateSchemaExample.ts +11 -11
  472. package/src/lib/plugins/openapi/util/getRoutes.tsx +35 -3
  473. package/src/lib/plugins/search-pagefind/IndexingDialog.tsx +163 -0
  474. package/src/lib/plugins/search-pagefind/PagefindSearch.tsx +61 -22
  475. package/src/lib/plugins/search-pagefind/ResultList.tsx +8 -3
  476. package/src/lib/shiki.ts +21 -12
  477. package/src/lib/ui/Badge.tsx +21 -12
  478. package/src/lib/ui/Button.tsx +10 -9
  479. package/src/lib/ui/ButtonGroup.tsx +82 -0
  480. package/src/lib/ui/Checkbox.tsx +23 -24
  481. package/src/lib/ui/CodeBlock.tsx +3 -4
  482. package/src/lib/ui/Collapsible.tsx +26 -4
  483. package/src/lib/ui/Command.tsx +3 -3
  484. package/src/lib/ui/DropdownMenu.tsx +226 -170
  485. package/src/lib/ui/EmbeddedCodeBlock.tsx +21 -19
  486. package/src/lib/ui/Frame.tsx +81 -0
  487. package/src/lib/ui/Item.tsx +192 -0
  488. package/src/lib/ui/Kbd.tsx +28 -0
  489. package/src/lib/ui/NativeSelect.tsx +47 -0
  490. package/src/lib/ui/Select.tsx +153 -126
  491. package/src/lib/ui/Separator.tsx +25 -0
  492. package/src/lib/ui/Tooltip.tsx +54 -32
  493. package/src/lib/util/MdxComponents.tsx +2 -0
  494. package/src/lib/util/createVariantComponent.tsx +31 -5
  495. package/src/lib/util/flattenAllOf.test.ts +637 -0
  496. package/src/lib/util/flattenAllOf.ts +122 -0
  497. package/src/lib/util/readFrontmatter.ts +13 -0
  498. package/src/shiki/langs/markdown-nix.js +1 -0
  499. package/src/shiki/langs/openscad.js +1 -0
  500. package/dist/lib/plugins/openapi/playground/InlineInput.d.ts +0 -4
  501. package/dist/lib/plugins/openapi/playground/InlineInput.js +0 -3
  502. package/dist/lib/plugins/openapi/playground/InlineInput.js.map +0 -1
  503. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.d.ts +0 -5
  504. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js +0 -7
  505. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js.map +0 -1
  506. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.d.ts +0 -4
  507. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js +0 -10
  508. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js.map +0 -1
  509. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.d.ts +0 -5
  510. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js +0 -16
  511. package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js.map +0 -1
  512. package/dist/vite/create-pagefind-index.d.ts +0 -4
  513. package/dist/vite/create-pagefind-index.js +0 -12
  514. package/dist/vite/create-pagefind-index.js.map +0 -1
  515. package/lib/Button-DmS4u8Lj.js +0 -51
  516. package/lib/Button-DmS4u8Lj.js.map +0 -1
  517. package/lib/Command-CUcrW3qs.js.map +0 -1
  518. package/lib/DropdownMenu-BZ2NKQ3K.js +0 -126
  519. package/lib/DropdownMenu-BZ2NKQ3K.js.map +0 -1
  520. package/lib/ErrorAlert-DE3Sf66a.js.map +0 -1
  521. package/lib/MdxPage-DZfeC0QY.js +0 -240
  522. package/lib/MdxPage-DZfeC0QY.js.map +0 -1
  523. package/lib/OasProvider-Bf5zBDBY.js +0 -36
  524. package/lib/OasProvider-Bf5zBDBY.js.map +0 -1
  525. package/lib/OperationList-Cmiw1xm2.js +0 -5446
  526. package/lib/OperationList-Cmiw1xm2.js.map +0 -1
  527. package/lib/Pagination-CJszmeSA.js +0 -37
  528. package/lib/Pagination-CJszmeSA.js.map +0 -1
  529. package/lib/RouteGuard-DhU3LRr1.js +0 -81
  530. package/lib/RouteGuard-DhU3LRr1.js.map +0 -1
  531. package/lib/RouterError-VDLnrFqF.js +0 -41
  532. package/lib/RouterError-VDLnrFqF.js.map +0 -1
  533. package/lib/SchemaList-xZSf3IMh.js.map +0 -1
  534. package/lib/SchemaView-tHXTm5oM.js +0 -458
  535. package/lib/SchemaView-tHXTm5oM.js.map +0 -1
  536. package/lib/Select-C1DeCqKv.js +0 -372
  537. package/lib/Select-C1DeCqKv.js.map +0 -1
  538. package/lib/circular-DvuimBGQ.js.map +0 -1
  539. package/lib/createServer-D9UvCoDf.js +0 -12559
  540. package/lib/createServer-D9UvCoDf.js.map +0 -1
  541. package/lib/index-Cr9_YzOZ.js +0 -3364
  542. package/lib/index-Cr9_YzOZ.js.map +0 -1
  543. package/lib/useExposedProps-U3pmsHaG.js +0 -113
  544. package/lib/useExposedProps-U3pmsHaG.js.map +0 -1
  545. package/src/lib/plugins/openapi/playground/InlineInput.tsx +0 -6
  546. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.tsx +0 -36
  547. package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.tsx +0 -25
  548. 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
  );