zudoku 0.64.1 → 0.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app/main.d.ts +91 -1
- package/dist/app/main.js +5 -1
- package/dist/app/main.js.map +1 -1
- package/dist/config/config.d.ts +15 -46
- package/dist/config/validators/InputNavigationSchema.d.ts +61 -61
- package/dist/config/validators/NavigationSchema.js +2 -4
- package/dist/config/validators/NavigationSchema.js.map +1 -1
- package/dist/config/validators/ProtectedRoutesSchema.d.ts +1 -1
- package/dist/config/validators/validate.d.ts +158 -2
- package/dist/config/validators/validate.js +37 -0
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/config/validators/validate.test.js +43 -0
- package/dist/config/validators/validate.test.js.map +1 -1
- package/dist/flat-config.d.ts +22 -0
- package/dist/lib/auth/issuer.js +3 -0
- package/dist/lib/auth/issuer.js.map +1 -1
- package/dist/lib/authentication/authentication.d.ts +1 -1
- package/dist/lib/authentication/providers/auth0.js +6 -1
- package/dist/lib/authentication/providers/auth0.js.map +1 -1
- package/dist/lib/authentication/providers/firebase.d.ts +4 -0
- package/dist/lib/authentication/providers/firebase.js +215 -0
- package/dist/lib/authentication/providers/firebase.js.map +1 -0
- package/dist/lib/authentication/providers/supabase.js +1 -6
- package/dist/lib/authentication/providers/supabase.js.map +1 -1
- package/dist/lib/authentication/ui/ZudokuAuthUi.d.ts +24 -0
- package/dist/lib/authentication/ui/ZudokuAuthUi.js +124 -0
- package/dist/lib/authentication/ui/ZudokuAuthUi.js.map +1 -0
- package/dist/lib/authentication/ui/icons/Apple.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/Apple.js +4 -0
- package/dist/lib/authentication/ui/icons/Apple.js.map +1 -0
- package/dist/lib/authentication/ui/icons/Facebook.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/Facebook.js +4 -0
- package/dist/lib/authentication/ui/icons/Facebook.js.map +1 -0
- package/dist/lib/authentication/ui/icons/Github.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/Github.js +4 -0
- package/dist/lib/authentication/ui/icons/Github.js.map +1 -0
- package/dist/lib/authentication/ui/icons/Google.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/Google.js +4 -0
- package/dist/lib/authentication/ui/icons/Google.js.map +1 -0
- package/dist/lib/authentication/ui/icons/Microsoft.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/Microsoft.js +4 -0
- package/dist/lib/authentication/ui/icons/Microsoft.js.map +1 -0
- package/dist/lib/authentication/ui/icons/X.d.ts +3 -0
- package/dist/lib/authentication/ui/icons/X.js +4 -0
- package/dist/lib/authentication/ui/icons/X.js.map +1 -0
- package/dist/lib/components/Autocomplete.d.ts +3 -1
- package/dist/lib/components/Autocomplete.js +6 -2
- package/dist/lib/components/Autocomplete.js.map +1 -1
- package/dist/lib/components/Heading.d.ts +1 -1
- package/dist/lib/components/Layout.js +3 -2
- package/dist/lib/components/Layout.js.map +1 -1
- package/dist/lib/components/navigation/NavigationItem.js +2 -2
- package/dist/lib/components/navigation/NavigationItem.js.map +1 -1
- package/dist/lib/core/RouteGuard.js +6 -6
- package/dist/lib/core/RouteGuard.js.map +1 -1
- package/dist/lib/errors/ErrorAlert.js +1 -1
- package/dist/lib/errors/RouterError.d.ts +3 -1
- package/dist/lib/errors/RouterError.js +3 -2
- package/dist/lib/errors/RouterError.js.map +1 -1
- package/dist/lib/oas/parser/index.js +7 -3
- package/dist/lib/oas/parser/index.js.map +1 -1
- package/dist/lib/plugins/api-keys/ProtectedRoute.js +4 -1
- package/dist/lib/plugins/api-keys/ProtectedRoute.js.map +1 -1
- package/dist/lib/plugins/openapi/CollapsibleCode.d.ts +1 -0
- package/dist/lib/plugins/openapi/CollapsibleCode.js +2 -1
- package/dist/lib/plugins/openapi/CollapsibleCode.js.map +1 -1
- package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.d.ts +5 -0
- package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js +10 -0
- package/dist/lib/plugins/openapi/GeneratedExampleSidecarBox.js.map +1 -0
- package/dist/lib/plugins/openapi/OperationList.js +5 -1
- package/dist/lib/plugins/openapi/OperationList.js.map +1 -1
- package/dist/lib/plugins/openapi/OperationListItem.d.ts +2 -1
- package/dist/lib/plugins/openapi/OperationListItem.js +3 -2
- package/dist/lib/plugins/openapi/OperationListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/ParameterList.js +7 -4
- package/dist/lib/plugins/openapi/ParameterList.js.map +1 -1
- package/dist/lib/plugins/openapi/ParameterListItem.js +17 -6
- package/dist/lib/plugins/openapi/ParameterListItem.js.map +1 -1
- package/dist/lib/plugins/openapi/RequestBodySidecarBox.d.ts +9 -2
- package/dist/lib/plugins/openapi/RequestBodySidecarBox.js +5 -2
- package/dist/lib/plugins/openapi/RequestBodySidecarBox.js.map +1 -1
- package/dist/lib/plugins/openapi/ResponsesSidecarBox.d.ts +3 -2
- package/dist/lib/plugins/openapi/ResponsesSidecarBox.js +25 -4
- package/dist/lib/plugins/openapi/ResponsesSidecarBox.js.map +1 -1
- package/dist/lib/plugins/openapi/Sidecar.d.ts +2 -2
- package/dist/lib/plugins/openapi/Sidecar.js +53 -26
- package/dist/lib/plugins/openapi/Sidecar.js.map +1 -1
- package/dist/lib/plugins/openapi/SidecarBox.js +4 -4
- package/dist/lib/plugins/openapi/SidecarBox.js.map +1 -1
- package/dist/lib/plugins/openapi/SidecarExamples.d.ts +9 -2
- package/dist/lib/plugins/openapi/SidecarExamples.js +24 -43
- package/dist/lib/plugins/openapi/SidecarExamples.js.map +1 -1
- package/dist/lib/plugins/openapi/components/ConstValue.js +1 -1
- package/dist/lib/plugins/openapi/components/ConstValue.js.map +1 -1
- package/dist/lib/plugins/openapi/components/EnumValues.js +1 -1
- package/dist/lib/plugins/openapi/components/EnumValues.js.map +1 -1
- package/dist/lib/plugins/openapi/components/NonHighlightedCode.d.ts +4 -0
- package/dist/lib/plugins/openapi/components/NonHighlightedCode.js +5 -0
- package/dist/lib/plugins/openapi/components/NonHighlightedCode.js.map +1 -0
- package/dist/lib/plugins/openapi/components/ResponseContent.js +5 -6
- package/dist/lib/plugins/openapi/components/ResponseContent.js.map +1 -1
- package/dist/lib/plugins/openapi/interfaces.d.ts +13 -0
- package/dist/lib/plugins/openapi/playground/BodyPanel.js +67 -15
- package/dist/lib/plugins/openapi/playground/BodyPanel.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js +2 -2
- package/dist/lib/plugins/openapi/playground/CollapsibleHeader.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js +1 -1
- package/dist/lib/plugins/openapi/playground/ExamplesDropdown.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Headers.js +23 -83
- package/dist/lib/plugins/openapi/playground/Headers.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/ParamsGrid.d.ts +10 -2
- package/dist/lib/plugins/openapi/playground/ParamsGrid.js +8 -1
- package/dist/lib/plugins/openapi/playground/ParamsGrid.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js +2 -3
- package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/Playground.d.ts +7 -0
- package/dist/lib/plugins/openapi/playground/Playground.js +56 -28
- package/dist/lib/plugins/openapi/playground/Playground.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js +3 -2
- package/dist/lib/plugins/openapi/playground/PlaygroundDialog.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/QueryParams.js +16 -40
- package/dist/lib/plugins/openapi/playground/QueryParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.d.ts +8 -0
- package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js +19 -0
- package/dist/lib/plugins/openapi/playground/request-panel/MultipartField.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js +1 -1
- package/dist/lib/plugins/openapi/playground/request-panel/UrlQueryParams.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.d.ts +1 -0
- package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js +540 -0
- package/dist/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.d.ts +40 -0
- package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js +205 -0
- package/dist/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.js.map +1 -0
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js +2 -2
- package/dist/lib/plugins/openapi/playground/result-panel/ResponseTab.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaExampleAndDefault.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js +17 -8
- package/dist/lib/plugins/openapi/schema/SchemaPropertyItem.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.d.ts +1 -1
- package/dist/lib/plugins/openapi/schema/SchemaView.js +20 -13
- package/dist/lib/plugins/openapi/schema/SchemaView.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/UnionView.js +2 -5
- package/dist/lib/plugins/openapi/schema/UnionView.js.map +1 -1
- package/dist/lib/plugins/openapi/schema/union-helpers.js +0 -1
- package/dist/lib/plugins/openapi/schema/union-helpers.js.map +1 -1
- package/dist/lib/plugins/openapi/util/generateSchemaExample.js +5 -14
- package/dist/lib/plugins/openapi/util/generateSchemaExample.js.map +1 -1
- package/dist/lib/ui/Badge.d.ts +3 -3
- package/dist/lib/ui/Badge.js +9 -7
- package/dist/lib/ui/Badge.js.map +1 -1
- package/dist/lib/ui/Button.d.ts +1 -1
- package/dist/lib/ui/Button.js +1 -0
- package/dist/lib/ui/Button.js.map +1 -1
- package/dist/lib/ui/Checkbox.d.ts +2 -2
- package/dist/lib/ui/Checkbox.js +4 -4
- package/dist/lib/ui/Checkbox.js.map +1 -1
- package/dist/lib/ui/CodeBlock.d.ts +0 -1
- package/dist/lib/ui/CodeBlock.js +1 -1
- package/dist/lib/ui/CodeBlock.js.map +1 -1
- package/dist/lib/ui/Collapsible.d.ts +4 -4
- package/dist/lib/ui/Collapsible.js +11 -4
- package/dist/lib/ui/Collapsible.js.map +1 -1
- package/dist/lib/ui/Command.d.ts +3 -3
- package/dist/lib/ui/EmbeddedCodeBlock.d.ts +0 -1
- package/dist/lib/ui/EmbeddedCodeBlock.js +3 -2
- package/dist/lib/ui/EmbeddedCodeBlock.js.map +1 -1
- package/dist/lib/ui/Frame.d.ts +8 -0
- package/dist/lib/ui/Frame.js +22 -0
- package/dist/lib/ui/Frame.js.map +1 -0
- package/dist/lib/ui/Item.d.ts +23 -0
- package/dist/lib/ui/Item.js +67 -0
- package/dist/lib/ui/Item.js.map +1 -0
- package/dist/lib/ui/NativeSelect.d.ts +5 -0
- package/dist/lib/ui/NativeSelect.js +14 -0
- package/dist/lib/ui/NativeSelect.js.map +1 -0
- package/dist/lib/ui/Select.d.ts +13 -11
- package/dist/lib/ui/Select.js +34 -23
- package/dist/lib/ui/Select.js.map +1 -1
- package/dist/lib/ui/Separator.d.ts +4 -0
- package/dist/lib/ui/Separator.js +8 -0
- package/dist/lib/ui/Separator.js.map +1 -0
- package/dist/lib/ui/Tooltip.d.ts +7 -7
- package/dist/lib/ui/Tooltip.js +16 -10
- package/dist/lib/ui/Tooltip.js.map +1 -1
- package/dist/lib/util/createVariantComponent.d.ts +5 -2
- package/dist/lib/util/createVariantComponent.js +5 -2
- package/dist/lib/util/createVariantComponent.js.map +1 -1
- package/dist/lib/util/flattenAllOf.d.ts +4 -0
- package/dist/lib/util/flattenAllOf.js +65 -0
- package/dist/lib/util/flattenAllOf.js.map +1 -0
- package/dist/lib/util/flattenAllOf.test.d.ts +1 -0
- package/dist/lib/util/flattenAllOf.test.js +532 -0
- package/dist/lib/util/flattenAllOf.test.js.map +1 -0
- package/dist/lib/util/readFrontmatter.d.ts +6 -0
- package/dist/lib/util/readFrontmatter.js +12 -0
- package/dist/lib/util/readFrontmatter.js.map +1 -0
- package/dist/vite/api/SchemaManager.js +6 -18
- package/dist/vite/api/SchemaManager.js.map +1 -1
- package/dist/vite/mdx/remark-last-modified.js +57 -3
- package/dist/vite/mdx/remark-last-modified.js.map +1 -1
- package/dist/vite/plugin-api.js +2 -2
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-frontmatter.js +3 -5
- package/dist/vite/plugin-frontmatter.js.map +1 -1
- package/dist/vite/plugin-markdown-export.js +3 -4
- package/dist/vite/plugin-markdown-export.js.map +1 -1
- package/dist/vite/plugin-theme.js +10 -1
- package/dist/vite/plugin-theme.js.map +1 -1
- package/lib/{Button-DmS4u8Lj.js → Button-B3ucvvQw.js} +7 -6
- package/lib/Button-B3ucvvQw.js.map +1 -0
- package/lib/{ErrorAlert-DE3Sf66a.js → ErrorAlert-BOVgwTRP.js} +2832 -2857
- package/lib/ErrorAlert-BOVgwTRP.js.map +1 -0
- package/lib/{MdxPage-DZfeC0QY.js → MdxPage-CBYFyqUs.js} +6 -6
- package/lib/{MdxPage-DZfeC0QY.js.map → MdxPage-CBYFyqUs.js.map} +1 -1
- package/lib/{OAuthErrorPage-BycMozgn.js → OAuthErrorPage-DlTYnbLO.js} +4 -4
- package/lib/{OAuthErrorPage-BycMozgn.js.map → OAuthErrorPage-DlTYnbLO.js.map} +1 -1
- package/lib/{OasProvider-1XEOsIiW.js → OasProvider-DIPAQ79S.js} +2 -2
- package/lib/{OasProvider-1XEOsIiW.js.map → OasProvider-DIPAQ79S.js.map} +1 -1
- package/lib/OperationList-BOTFIfda.js +5688 -0
- package/lib/OperationList-BOTFIfda.js.map +1 -0
- package/lib/{Pagination-CJszmeSA.js → Pagination-BOZ9Pxcw.js} +2 -2
- package/lib/{Pagination-CJszmeSA.js.map → Pagination-BOZ9Pxcw.js.map} +1 -1
- package/lib/RouteGuard-Brz95MSt.js +77 -0
- package/lib/RouteGuard-Brz95MSt.js.map +1 -0
- package/lib/RouterError-DQS_bMwf.js +42 -0
- package/lib/RouterError-DQS_bMwf.js.map +1 -0
- package/lib/{SchemaList-qOHkDzSz.js → SchemaList-Bu95q_q2.js} +7 -7
- package/lib/{SchemaList-qOHkDzSz.js.map → SchemaList-Bu95q_q2.js.map} +1 -1
- package/lib/SchemaView-CaxK_HV4.js +586 -0
- package/lib/SchemaView-CaxK_HV4.js.map +1 -0
- package/lib/Select-DFRCS31-.js +399 -0
- package/lib/Select-DFRCS31-.js.map +1 -0
- package/lib/{SignUp-6SGx9Yyq.js → SignUp-CfB278ao.js} +2 -2
- package/lib/{SignUp-6SGx9Yyq.js.map → SignUp-CfB278ao.js.map} +1 -1
- package/lib/{SyntaxHighlight-zvlnSnHB.js → SyntaxHighlight-C19vH0V_.js} +525 -509
- package/lib/SyntaxHighlight-C19vH0V_.js.map +1 -0
- package/lib/{Toc-Da9yp7lo.js → Toc-DQIqdghO.js} +2 -2
- package/lib/{Toc-Da9yp7lo.js.map → Toc-DQIqdghO.js.map} +1 -1
- package/lib/{circular-CSSuz-LS.js → circular-B-_VyILZ.js} +6360 -5953
- package/lib/circular-B-_VyILZ.js.map +1 -0
- package/lib/{createServer-CLbcVLbK.js → createServer-C5lXk4ba.js} +4732 -4273
- package/lib/createServer-C5lXk4ba.js.map +1 -0
- package/lib/{errors-CuGgh3hf.js → errors-DqoyOKev.js} +2 -2
- package/lib/{errors-CuGgh3hf.js.map → errors-DqoyOKev.js.map} +1 -1
- package/lib/index-B7yD7ZUk.js +3680 -0
- package/lib/index-B7yD7ZUk.js.map +1 -0
- package/lib/{index-rYHsvtTo.js → index-BG79m3lF.js} +2 -2
- package/lib/{index-rYHsvtTo.js.map → index-BG79m3lF.js.map} +1 -1
- package/lib/{index-B1rmok4X.js → index-DHDtI9H5.js} +3 -3
- package/lib/{index-B1rmok4X.js.map → index-DHDtI9H5.js.map} +1 -1
- package/lib/ui/ActionButton.js +1 -1
- package/lib/ui/Badge.js +27 -13
- package/lib/ui/Badge.js.map +1 -1
- package/lib/ui/Button.js +6 -5
- package/lib/ui/Button.js.map +1 -1
- package/lib/ui/Checkbox.js +29 -26
- package/lib/ui/Checkbox.js.map +1 -1
- package/lib/ui/CodeBlock.js +7 -7
- package/lib/ui/CodeBlock.js.map +1 -1
- package/lib/ui/Collapsible.js +32 -5
- package/lib/ui/Collapsible.js.map +1 -1
- package/lib/ui/EmbeddedCodeBlock.js +26 -25
- package/lib/ui/EmbeddedCodeBlock.js.map +1 -1
- package/lib/ui/Frame.js +81 -0
- package/lib/ui/Frame.js.map +1 -0
- package/lib/ui/Item.js +188 -0
- package/lib/ui/Item.js.map +1 -0
- package/lib/ui/NativeSelect.js +57 -0
- package/lib/ui/NativeSelect.js.map +1 -0
- package/lib/ui/Select.js +166 -116
- package/lib/ui/Select.js.map +1 -1
- package/lib/ui/Separator.js +27 -0
- package/lib/ui/Separator.js.map +1 -0
- package/lib/ui/SyntaxHighlight.js +1 -1
- package/lib/ui/Tabs.js +10 -10
- package/lib/ui/Tooltip.js +55 -28
- package/lib/ui/Tooltip.js.map +1 -1
- package/lib/zudoku.__internal.js +345 -345
- package/lib/zudoku.__internal.js.map +1 -1
- package/lib/zudoku.auth-auth0.js +7 -7
- package/lib/zudoku.auth-auth0.js.map +1 -1
- package/lib/zudoku.auth-azureb2c.js +3 -3
- package/lib/zudoku.auth-clerk.js +1 -1
- package/lib/zudoku.auth-openid.js +3 -3
- package/lib/zudoku.auth-supabase.js +30 -33
- package/lib/zudoku.auth-supabase.js.map +1 -1
- package/lib/zudoku.components.js +2 -2
- package/lib/zudoku.plugin-api-catalog.js +3 -3
- package/lib/zudoku.plugin-api-keys.js +5 -5
- package/lib/zudoku.plugin-api-keys.js.map +1 -1
- package/lib/zudoku.plugin-markdown.js +1 -1
- package/lib/zudoku.plugin-openapi.js +1 -1
- package/lib/zudoku.plugin-search-pagefind.js +2 -2
- package/package.json +18 -13
- package/src/app/main.css +1 -1
- package/src/app/main.tsx +5 -1
- package/src/lib/auth/issuer.ts +3 -0
- package/src/lib/authentication/authentication.ts +1 -1
- package/src/lib/authentication/providers/auth0.tsx +6 -1
- package/src/lib/authentication/providers/firebase.tsx +284 -0
- package/src/lib/authentication/providers/supabase.tsx +2 -7
- package/src/lib/authentication/ui/ZudokuAuthUi.tsx +335 -0
- package/src/lib/authentication/ui/icons/Apple.tsx +10 -0
- package/src/lib/authentication/ui/icons/Facebook.tsx +15 -0
- package/src/lib/authentication/ui/icons/Github.tsx +16 -0
- package/src/lib/authentication/ui/icons/Google.tsx +16 -0
- package/src/lib/authentication/ui/icons/Microsoft.tsx +12 -0
- package/src/lib/authentication/ui/icons/X.tsx +10 -0
- package/src/lib/components/Autocomplete.tsx +11 -2
- package/src/lib/components/Layout.tsx +3 -2
- package/src/lib/components/navigation/NavigationItem.tsx +7 -20
- package/src/lib/core/RouteGuard.tsx +8 -8
- package/src/lib/errors/ErrorAlert.tsx +1 -1
- package/src/lib/errors/RouterError.tsx +7 -2
- package/src/lib/oas/parser/index.ts +8 -3
- package/src/lib/plugins/api-keys/ProtectedRoute.tsx +11 -7
- package/src/lib/plugins/openapi/CollapsibleCode.tsx +5 -3
- package/src/lib/plugins/openapi/GeneratedExampleSidecarBox.tsx +52 -0
- package/src/lib/plugins/openapi/OperationList.tsx +7 -0
- package/src/lib/plugins/openapi/OperationListItem.tsx +10 -7
- package/src/lib/plugins/openapi/ParameterList.tsx +37 -23
- package/src/lib/plugins/openapi/ParameterListItem.tsx +105 -54
- package/src/lib/plugins/openapi/RequestBodySidecarBox.tsx +48 -7
- package/src/lib/plugins/openapi/ResponsesSidecarBox.tsx +81 -33
- package/src/lib/plugins/openapi/Sidecar.tsx +129 -65
- package/src/lib/plugins/openapi/SidecarBox.tsx +26 -4
- package/src/lib/plugins/openapi/SidecarExamples.tsx +91 -79
- package/src/lib/plugins/openapi/components/ConstValue.tsx +1 -1
- package/src/lib/plugins/openapi/components/EnumValues.tsx +2 -2
- package/src/lib/plugins/openapi/components/NonHighlightedCode.tsx +22 -0
- package/src/lib/plugins/openapi/components/ResponseContent.tsx +63 -53
- package/src/lib/plugins/openapi/interfaces.ts +12 -0
- package/src/lib/plugins/openapi/playground/BodyPanel.tsx +246 -30
- package/src/lib/plugins/openapi/playground/CollapsibleHeader.tsx +10 -6
- package/src/lib/plugins/openapi/playground/ExamplesDropdown.tsx +3 -2
- package/src/lib/plugins/openapi/playground/Headers.tsx +103 -219
- package/src/lib/plugins/openapi/playground/ParamsGrid.tsx +33 -1
- package/src/lib/plugins/openapi/playground/PathParams.tsx +26 -34
- package/src/lib/plugins/openapi/playground/Playground.tsx +73 -35
- package/src/lib/plugins/openapi/playground/PlaygroundDialog.tsx +9 -30
- package/src/lib/plugins/openapi/playground/QueryParams.tsx +82 -136
- package/src/lib/plugins/openapi/playground/request-panel/MultipartField.tsx +91 -0
- package/src/lib/plugins/openapi/playground/request-panel/UrlQueryParams.tsx +1 -1
- package/src/lib/plugins/openapi/playground/request-panel/fieldManager/useKeyValueFieldManager.test.tsx +872 -0
- package/src/lib/plugins/openapi/playground/request-panel/useKeyValueFieldManager.ts +349 -0
- package/src/lib/plugins/openapi/playground/result-panel/ResponseTab.tsx +2 -6
- package/src/lib/plugins/openapi/schema/SchemaExampleAndDefault.tsx +1 -1
- package/src/lib/plugins/openapi/schema/SchemaPropertyItem.tsx +89 -55
- package/src/lib/plugins/openapi/schema/SchemaView.tsx +82 -53
- package/src/lib/plugins/openapi/schema/UnionView.tsx +6 -17
- package/src/lib/plugins/openapi/schema/union-helpers.ts +0 -1
- package/src/lib/plugins/openapi/util/generateSchemaExample.ts +5 -15
- package/src/lib/ui/Badge.tsx +21 -12
- package/src/lib/ui/Button.tsx +1 -0
- package/src/lib/ui/Checkbox.tsx +23 -24
- package/src/lib/ui/CodeBlock.tsx +3 -4
- package/src/lib/ui/Collapsible.tsx +26 -4
- package/src/lib/ui/EmbeddedCodeBlock.tsx +21 -19
- package/src/lib/ui/Frame.tsx +81 -0
- package/src/lib/ui/Item.tsx +192 -0
- package/src/lib/ui/NativeSelect.tsx +47 -0
- package/src/lib/ui/Select.tsx +153 -126
- package/src/lib/ui/Separator.tsx +25 -0
- package/src/lib/ui/Tooltip.tsx +54 -32
- package/src/lib/util/createVariantComponent.tsx +31 -5
- package/src/lib/util/flattenAllOf.test.ts +637 -0
- package/src/lib/util/flattenAllOf.ts +101 -0
- package/src/lib/util/readFrontmatter.ts +13 -0
- package/dist/lib/plugins/openapi/playground/InlineInput.d.ts +0 -4
- package/dist/lib/plugins/openapi/playground/InlineInput.js +0 -3
- package/dist/lib/plugins/openapi/playground/InlineInput.js.map +0 -1
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.d.ts +0 -5
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js +0 -7
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.js.map +0 -1
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.d.ts +0 -4
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js +0 -10
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.js.map +0 -1
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.d.ts +0 -5
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js +0 -16
- package/dist/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.js.map +0 -1
- package/lib/Button-DmS4u8Lj.js.map +0 -1
- package/lib/ErrorAlert-DE3Sf66a.js.map +0 -1
- package/lib/OperationList-DCJw6wXL.js +0 -5450
- package/lib/OperationList-DCJw6wXL.js.map +0 -1
- package/lib/RouteGuard-DhU3LRr1.js +0 -81
- package/lib/RouteGuard-DhU3LRr1.js.map +0 -1
- package/lib/RouterError-VDLnrFqF.js +0 -41
- package/lib/RouterError-VDLnrFqF.js.map +0 -1
- package/lib/SchemaView-D3hm65cc.js +0 -458
- package/lib/SchemaView-D3hm65cc.js.map +0 -1
- package/lib/Select-C1DeCqKv.js +0 -372
- package/lib/Select-C1DeCqKv.js.map +0 -1
- package/lib/SyntaxHighlight-zvlnSnHB.js.map +0 -1
- package/lib/circular-CSSuz-LS.js.map +0 -1
- package/lib/createServer-CLbcVLbK.js.map +0 -1
- package/lib/index-RNAxx6IF.js +0 -3364
- package/lib/index-RNAxx6IF.js.map +0 -1
- package/src/lib/plugins/openapi/playground/InlineInput.tsx +0 -6
- package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupConnector.tsx +0 -36
- package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupItem.tsx +0 -25
- package/src/lib/plugins/openapi/schema/AllOfGroup/AllOfGroupView.tsx +0 -42
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SVGProps } from "react";
|
|
2
|
+
|
|
3
|
+
const GoogleIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
4
|
+
<svg
|
|
5
|
+
viewBox="0 0 24 24"
|
|
6
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
7
|
+
width="1em"
|
|
8
|
+
height="1em"
|
|
9
|
+
{...props}
|
|
10
|
+
>
|
|
11
|
+
<title>{"Google"}</title>
|
|
12
|
+
<path d="M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z" />
|
|
13
|
+
</svg>
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
export default GoogleIcon;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SVGProps } from "react";
|
|
2
|
+
|
|
3
|
+
const MicrosoftIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
4
|
+
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" {...props}>
|
|
5
|
+
<path fill="#f25022" d="M1 1h9v9H1z" />
|
|
6
|
+
<path fill="#00a4ef" d="M1 11h9v9H1z" />
|
|
7
|
+
<path fill="#7fba00" d="M11 1h9v9h-9z" />
|
|
8
|
+
<path fill="#ffb900" d="M11 11h9v9h-9z" />
|
|
9
|
+
</svg>
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
export default MicrosoftIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SVGProps } from "react";
|
|
2
|
+
|
|
3
|
+
const XIcon = (props: SVGProps<SVGSVGElement>) => (
|
|
4
|
+
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" {...props}>
|
|
5
|
+
<title>{"X"}</title>
|
|
6
|
+
<path d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z" />
|
|
7
|
+
</svg>
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
export default XIcon;
|
|
@@ -11,12 +11,14 @@ import { Popover, PopoverContent } from "zudoku/ui/Popover.js";
|
|
|
11
11
|
import { cn } from "../util/cn.js";
|
|
12
12
|
|
|
13
13
|
type AutocompleteProps = {
|
|
14
|
-
value
|
|
14
|
+
value?: string | number | readonly string[] | undefined;
|
|
15
15
|
options: readonly string[];
|
|
16
16
|
onChange: (e: string) => void;
|
|
17
|
+
onSelect?: (e: string) => void;
|
|
17
18
|
className?: string;
|
|
18
19
|
placeholder?: string;
|
|
19
20
|
onEnterPress?: (e: KeyboardEvent<HTMLInputElement>) => void;
|
|
21
|
+
onKeyDown?: (e: KeyboardEvent<HTMLInputElement>) => void;
|
|
20
22
|
ref?: Ref<HTMLInputElement>;
|
|
21
23
|
shouldFilter?: boolean;
|
|
22
24
|
};
|
|
@@ -28,7 +30,9 @@ const AutocompletePopover = ({
|
|
|
28
30
|
className,
|
|
29
31
|
placeholder = "Value",
|
|
30
32
|
onEnterPress,
|
|
33
|
+
onKeyDown,
|
|
31
34
|
ref,
|
|
35
|
+
onSelect,
|
|
32
36
|
}: AutocompleteProps) => {
|
|
33
37
|
const [open, setOpen] = useState(false);
|
|
34
38
|
const [dontClose, setDontClose] = useState(false);
|
|
@@ -48,7 +52,7 @@ const AutocompletePopover = ({
|
|
|
48
52
|
ref.current = el;
|
|
49
53
|
}
|
|
50
54
|
}}
|
|
51
|
-
value={value}
|
|
55
|
+
value={value ? String(value) : undefined}
|
|
52
56
|
placeholder={placeholder}
|
|
53
57
|
className={cn("h-9 bg-transparent", className)}
|
|
54
58
|
onFocus={() => setOpen(true)}
|
|
@@ -59,6 +63,10 @@ const AutocompletePopover = ({
|
|
|
59
63
|
setOpen(false);
|
|
60
64
|
}}
|
|
61
65
|
onKeyDown={(e) => {
|
|
66
|
+
onKeyDown?.(e);
|
|
67
|
+
|
|
68
|
+
if (e.defaultPrevented) return;
|
|
69
|
+
|
|
62
70
|
if (e.key === "Enter") {
|
|
63
71
|
setOpen(false);
|
|
64
72
|
inputRef.current?.blur();
|
|
@@ -91,6 +99,7 @@ const AutocompletePopover = ({
|
|
|
91
99
|
key={enumValue}
|
|
92
100
|
value={enumValue}
|
|
93
101
|
onSelect={(selected) => {
|
|
102
|
+
onSelect?.(selected);
|
|
94
103
|
onChange(selected);
|
|
95
104
|
setOpen(false);
|
|
96
105
|
}}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ReactNode, Suspense, useEffect } from "react";
|
|
2
2
|
import { Outlet } from "react-router";
|
|
3
|
+
import { TooltipProvider } from "zudoku/ui/Tooltip.js";
|
|
3
4
|
import { cn } from "../util/cn.js";
|
|
4
5
|
import { useScrollToAnchor } from "../util/useScrollToAnchor.js";
|
|
5
6
|
import { useScrollToTop } from "../util/useScrollToTop.js";
|
|
@@ -28,7 +29,7 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
|
|
|
28
29
|
}, [authentication]);
|
|
29
30
|
|
|
30
31
|
return (
|
|
31
|
-
|
|
32
|
+
<TooltipProvider>
|
|
32
33
|
<Slot.Target name="layout-before-head" />
|
|
33
34
|
<Header />
|
|
34
35
|
<Slot.Target name="layout-after-head" />
|
|
@@ -45,6 +46,6 @@ export const Layout = ({ children }: { children?: ReactNode }) => {
|
|
|
45
46
|
</Suspense>
|
|
46
47
|
</div>
|
|
47
48
|
<Footer />
|
|
48
|
-
|
|
49
|
+
</TooltipProvider>
|
|
49
50
|
);
|
|
50
51
|
};
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { ExternalLinkIcon } from "lucide-react";
|
|
2
2
|
import { useEffect, useRef, useState } from "react";
|
|
3
3
|
import { NavLink, useLocation } from "react-router";
|
|
4
|
-
import {
|
|
5
|
-
Tooltip,
|
|
6
|
-
TooltipArrow,
|
|
7
|
-
TooltipContent,
|
|
8
|
-
TooltipProvider,
|
|
9
|
-
TooltipTrigger,
|
|
10
|
-
} from "zudoku/ui/Tooltip.js";
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "zudoku/ui/Tooltip.js";
|
|
11
5
|
import type { NavigationItem as NavigationItemType } from "../../../config/validators/NavigationSchema.js";
|
|
12
6
|
import { useAuth } from "../../authentication/hook.js";
|
|
13
7
|
import { cn } from "../../util/cn.js";
|
|
@@ -47,19 +41,12 @@ const TruncatedLabel = ({
|
|
|
47
41
|
{label}
|
|
48
42
|
</span>
|
|
49
43
|
{isTruncated && (
|
|
50
|
-
<
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
align="center"
|
|
57
|
-
>
|
|
58
|
-
<TooltipArrow />
|
|
59
|
-
{label}
|
|
60
|
-
</TooltipContent>
|
|
61
|
-
</Tooltip>
|
|
62
|
-
</TooltipProvider>
|
|
44
|
+
<Tooltip disableHoverableContent>
|
|
45
|
+
<TooltipTrigger className="absolute inset-0 z-10" />
|
|
46
|
+
<TooltipContent className="max-w-64" side="bottom" align="center">
|
|
47
|
+
{label}
|
|
48
|
+
</TooltipContent>
|
|
49
|
+
</Tooltip>
|
|
63
50
|
)}
|
|
64
51
|
</>
|
|
65
52
|
);
|
|
@@ -38,6 +38,14 @@ export const RouteGuard = () => {
|
|
|
38
38
|
const needsToSignIn =
|
|
39
39
|
isProtectedRoute && !authCheckFn({ auth, context: zudoku });
|
|
40
40
|
|
|
41
|
+
if (isProtectedRoute && !auth.isAuthEnabled) {
|
|
42
|
+
throw new ZudokuError("Authentication is not enabled", {
|
|
43
|
+
title: "Authentication is not enabled",
|
|
44
|
+
developerHint:
|
|
45
|
+
"To use protectedRoutes you need authentication to be enabled",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
41
49
|
if (needsToSignIn && auth.isPending && typeof window !== "undefined") {
|
|
42
50
|
return null;
|
|
43
51
|
}
|
|
@@ -91,14 +99,6 @@ export const RouteGuard = () => {
|
|
|
91
99
|
);
|
|
92
100
|
}
|
|
93
101
|
|
|
94
|
-
if (isProtectedRoute && !auth.isAuthEnabled) {
|
|
95
|
-
throw new ZudokuError("Authentication is not enabled", {
|
|
96
|
-
title: "Authentication is not enabled",
|
|
97
|
-
developerHint:
|
|
98
|
-
"To use protectedRoutes you need authentication to be enabled",
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
|
|
102
102
|
return (
|
|
103
103
|
<>
|
|
104
104
|
{shouldBypass && (
|
|
@@ -17,7 +17,7 @@ export function ErrorAlert({ error }: { error: unknown }) {
|
|
|
17
17
|
const stringError = cause instanceof Error ? String(cause.stack) : stack;
|
|
18
18
|
|
|
19
19
|
return (
|
|
20
|
-
<Typography className="grid grid-cols-1
|
|
20
|
+
<Typography className="grid grid-cols-1 max-w-none! pt-(--padding-content-top)">
|
|
21
21
|
<Heading level={1}>{title}</Heading>
|
|
22
22
|
Error: {message}
|
|
23
23
|
{hint && <DeveloperHint className="mb-4">{hint}</DeveloperHint>}
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { isRouteErrorResponse, useRouteError } from "react-router";
|
|
2
2
|
import { NotFoundPage } from "../components/NotFoundPage.js";
|
|
3
|
+
import { cn } from "../util/cn.js";
|
|
3
4
|
import { ErrorAlert } from "./ErrorAlert.js";
|
|
4
5
|
|
|
5
|
-
export function RouterError() {
|
|
6
|
+
export function RouterError({ className }: { className?: string }) {
|
|
6
7
|
const error = useRouteError();
|
|
7
8
|
|
|
8
9
|
if (isRouteErrorResponse(error) && error.status === 404) {
|
|
9
10
|
return <NotFoundPage />;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
return
|
|
13
|
+
return (
|
|
14
|
+
<div className={cn("mx-4 max-w-2xl", className)}>
|
|
15
|
+
<ErrorAlert error={error} />
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
13
18
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { merge as mergeAllOf } from "allof-merge";
|
|
2
1
|
import { GraphQLError } from "graphql/error/index.js";
|
|
3
2
|
import { OpenAPIV3, type OpenAPIV3_1 } from "openapi-types";
|
|
3
|
+
import { flattenAllOfProcessor } from "../../util/flattenAllOf.js";
|
|
4
4
|
import { dereference, type JSONSchema } from "./dereference/index.js";
|
|
5
5
|
import { upgradeSchema } from "./upgrade/index.js";
|
|
6
6
|
|
|
@@ -101,7 +101,12 @@ export const validate = async (schemaInput: unknown) => {
|
|
|
101
101
|
|
|
102
102
|
const dereferenced = await dereference(schema);
|
|
103
103
|
const upgraded = upgradeSchema(dereferenced);
|
|
104
|
-
const merged = mergeAllOf(upgraded) as OpenAPIDocument;
|
|
105
104
|
|
|
106
|
-
|
|
105
|
+
const flattened = await flattenAllOfProcessor({
|
|
106
|
+
schema: upgraded,
|
|
107
|
+
file: "schema.json",
|
|
108
|
+
dereference: async (schema) => schema,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
return flattened;
|
|
107
112
|
};
|
|
@@ -11,15 +11,19 @@ export const ProtectedRoute = () => {
|
|
|
11
11
|
return null;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
if (!auth.isAuthEnabled) {
|
|
15
|
+
return (
|
|
16
|
+
<div className="flex flex-col justify-center gap-2 items-center h-1/2">
|
|
17
|
+
<DeveloperHint className="max-w-[600px]">
|
|
18
|
+
Authentication needs to be enabled for API keys to work. Enable it in
|
|
19
|
+
your Zudoku configuration under <code>authentication</code>.
|
|
20
|
+
</DeveloperHint>
|
|
21
|
+
</div>
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
14
25
|
return auth.isAuthenticated ? (
|
|
15
26
|
<Outlet />
|
|
16
|
-
) : !auth.isAuthEnabled ? (
|
|
17
|
-
<div className="flex flex-col justify-center gap-2 items-center h-1/2">
|
|
18
|
-
<DeveloperHint className="max-w-[600px]">
|
|
19
|
-
Authentication needs to be enabled for API keys to work. Enable it in
|
|
20
|
-
your Zudoku configuration under <code>authentication</code>.
|
|
21
|
-
</DeveloperHint>
|
|
22
|
-
</div>
|
|
23
27
|
) : (
|
|
24
28
|
<div className="flex flex-col justify-center gap-2 items-center h-1/2">
|
|
25
29
|
Please login first to view this page
|
|
@@ -9,6 +9,10 @@ import {
|
|
|
9
9
|
import { cn } from "../../util/cn.js";
|
|
10
10
|
import useIsomorphicLayoutEffect from "../../util/useIsomorphicLayoutEffect.js";
|
|
11
11
|
|
|
12
|
+
export const OverflowOverlay = () => (
|
|
13
|
+
<div className="absolute inset-0 bg-linear-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 transition-all group-hover:to-transparent" />
|
|
14
|
+
);
|
|
15
|
+
|
|
12
16
|
export const CollapsibleCode = ({
|
|
13
17
|
children,
|
|
14
18
|
maxHeight = 250,
|
|
@@ -48,9 +52,7 @@ export const CollapsibleCode = ({
|
|
|
48
52
|
!open && isOverflowing && "max-h-(--max-height)",
|
|
49
53
|
)}
|
|
50
54
|
>
|
|
51
|
-
{!open && isOverflowing &&
|
|
52
|
-
<div className=" absolute inset-0 bg-gradient-to-b from-transparent to-zinc-50/60 dark:to-zinc-950/90 z-10 transition-all group-hover:to-transparent"></div>
|
|
53
|
-
)}
|
|
55
|
+
{!open && isOverflowing && <OverflowOverlay />}
|
|
54
56
|
<div ref={contentRef}>{children}</div>
|
|
55
57
|
{!open && isOverflowing && (
|
|
56
58
|
<CollapsibleTrigger
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { InfoIcon } from "lucide-react";
|
|
2
|
+
import { SyntaxHighlight } from "zudoku/ui/SyntaxHighlight.js";
|
|
3
|
+
import {
|
|
4
|
+
Tooltip,
|
|
5
|
+
TooltipContent,
|
|
6
|
+
TooltipProvider,
|
|
7
|
+
TooltipTrigger,
|
|
8
|
+
} from "zudoku/ui/Tooltip.js";
|
|
9
|
+
import { NonHighlightedCode } from "./components/NonHighlightedCode.js";
|
|
10
|
+
import * as SidecarBox from "./SidecarBox.js";
|
|
11
|
+
|
|
12
|
+
export const GeneratedExampleSidecarBox = ({
|
|
13
|
+
code,
|
|
14
|
+
isOnScreen,
|
|
15
|
+
shouldLazyHighlight,
|
|
16
|
+
}: {
|
|
17
|
+
code: string;
|
|
18
|
+
isOnScreen: boolean;
|
|
19
|
+
shouldLazyHighlight?: boolean;
|
|
20
|
+
}) => {
|
|
21
|
+
return (
|
|
22
|
+
<SidecarBox.Root>
|
|
23
|
+
<SidecarBox.Head className="text-xs flex justify-between items-center">
|
|
24
|
+
<div className="flex items-center gap-1.5">
|
|
25
|
+
<span className="font-medium">Request Body Example</span>
|
|
26
|
+
<TooltipProvider>
|
|
27
|
+
<Tooltip>
|
|
28
|
+
<TooltipTrigger asChild>
|
|
29
|
+
<InfoIcon size={13} />
|
|
30
|
+
</TooltipTrigger>
|
|
31
|
+
<TooltipContent>
|
|
32
|
+
This example is auto-generated from the schema.
|
|
33
|
+
</TooltipContent>
|
|
34
|
+
</Tooltip>
|
|
35
|
+
</TooltipProvider>
|
|
36
|
+
</div>
|
|
37
|
+
</SidecarBox.Head>
|
|
38
|
+
<SidecarBox.Body className="p-0">
|
|
39
|
+
{shouldLazyHighlight && !isOnScreen ? (
|
|
40
|
+
<NonHighlightedCode code={code} />
|
|
41
|
+
) : (
|
|
42
|
+
<SyntaxHighlight
|
|
43
|
+
embedded
|
|
44
|
+
language="json"
|
|
45
|
+
code={code}
|
|
46
|
+
className="[--scrollbar-color:gray] rounded-none text-xs max-h-[200px]"
|
|
47
|
+
/>
|
|
48
|
+
)}
|
|
49
|
+
</SidecarBox.Body>
|
|
50
|
+
</SidecarBox.Root>
|
|
51
|
+
);
|
|
52
|
+
};
|
|
@@ -146,6 +146,8 @@ const OperationsForTagQuery = graphql(/* GraphQL */ `
|
|
|
146
146
|
}
|
|
147
147
|
`);
|
|
148
148
|
|
|
149
|
+
const LAZY_OPERATION_LIST_THRESHOLD = 30;
|
|
150
|
+
|
|
149
151
|
export const OperationList = ({
|
|
150
152
|
tag,
|
|
151
153
|
untagged,
|
|
@@ -200,6 +202,10 @@ export const OperationList = ({
|
|
|
200
202
|
|
|
201
203
|
const { operations, next, prev, description: tagDescription } = schema.tag;
|
|
202
204
|
|
|
205
|
+
// Simple heuristic to determine if we should lazy highlight the code
|
|
206
|
+
// This is to avoid the performance issues when there are a lot of operations
|
|
207
|
+
const shouldLazyHighlight = operations.length > LAZY_OPERATION_LIST_THRESHOLD;
|
|
208
|
+
|
|
203
209
|
// The summary property is preferable here as it is a short description of
|
|
204
210
|
// the API, whereas the description property is typically longer and supports
|
|
205
211
|
// commonmark formatting, making it ill-suited for use in the meta description
|
|
@@ -337,6 +343,7 @@ export const OperationList = ({
|
|
|
337
343
|
<OperationListItem
|
|
338
344
|
operationFragment={fragment}
|
|
339
345
|
globalSelectedServer={globalSelectedServer}
|
|
346
|
+
shouldLazyHighlight={shouldLazyHighlight}
|
|
340
347
|
/>
|
|
341
348
|
<hr className="my-10" />
|
|
342
349
|
</div>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
|
|
2
2
|
import { useState } from "react";
|
|
3
3
|
import { Badge } from "zudoku/ui/Badge.js";
|
|
4
|
+
import { Separator } from "zudoku/ui/Separator.js";
|
|
4
5
|
import { Heading } from "../../components/Heading.js";
|
|
5
6
|
import { Markdown } from "../../components/Markdown.js";
|
|
6
7
|
import { cn } from "../../util/cn.js";
|
|
@@ -23,9 +24,11 @@ export type ParameterGroup = (typeof PARAM_GROUPS)[number];
|
|
|
23
24
|
export const OperationListItem = ({
|
|
24
25
|
operationFragment,
|
|
25
26
|
globalSelectedServer,
|
|
27
|
+
shouldLazyHighlight,
|
|
26
28
|
}: {
|
|
27
29
|
operationFragment: FragmentType<typeof OperationsFragment>;
|
|
28
30
|
globalSelectedServer?: string;
|
|
31
|
+
shouldLazyHighlight?: boolean;
|
|
29
32
|
}) => {
|
|
30
33
|
const operation = useFragment(OperationsFragment, operationFragment);
|
|
31
34
|
const groupedParameters = groupBy(
|
|
@@ -118,10 +121,13 @@ export const OperationListItem = ({
|
|
|
118
121
|
[]
|
|
119
122
|
),
|
|
120
123
|
)}
|
|
124
|
+
{renderIf(operation.requestBody?.content?.at(0)?.schema, () => (
|
|
125
|
+
<Separator className="my-4" />
|
|
126
|
+
))}
|
|
121
127
|
{renderIf(
|
|
122
128
|
operation.requestBody?.content?.at(0)?.schema,
|
|
123
129
|
(schema) => (
|
|
124
|
-
<div className="
|
|
130
|
+
<div className="flex flex-col gap-4">
|
|
125
131
|
<Heading
|
|
126
132
|
level={3}
|
|
127
133
|
className="capitalize flex items-center gap-2"
|
|
@@ -143,13 +149,10 @@ export const OperationListItem = ({
|
|
|
143
149
|
</div>
|
|
144
150
|
),
|
|
145
151
|
)}
|
|
152
|
+
<Separator className="my-4" />
|
|
146
153
|
{operation.responses.length > 0 && (
|
|
147
154
|
<>
|
|
148
|
-
<Heading
|
|
149
|
-
level={3}
|
|
150
|
-
className="capitalize mt-8 pt-8 border-t"
|
|
151
|
-
id={`${operation.slug}/responses`}
|
|
152
|
-
>
|
|
155
|
+
<Heading level={3} id={`${operation.slug}/responses`}>
|
|
153
156
|
{operation.summary && (
|
|
154
157
|
<VisuallyHidden>
|
|
155
158
|
{operation.summary} ›{" "}
|
|
@@ -170,9 +173,9 @@ export const OperationListItem = ({
|
|
|
170
173
|
{renderIf(!options?.disableSidecar && !isMCPEndpoint, () => (
|
|
171
174
|
<Sidecar
|
|
172
175
|
selectedResponse={selectedResponse}
|
|
173
|
-
onSelectResponse={setSelectedResponse}
|
|
174
176
|
operation={operation}
|
|
175
177
|
globalSelectedServer={globalSelectedServer}
|
|
178
|
+
shouldLazyHighlight={shouldLazyHighlight}
|
|
176
179
|
/>
|
|
177
180
|
))}
|
|
178
181
|
</div>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
|
|
2
|
+
import { Fragment } from "react";
|
|
2
3
|
import { Heading } from "../../components/Heading.js";
|
|
3
|
-
import {
|
|
4
|
+
import { Frame, FramePanel } from "../../ui/Frame.js";
|
|
5
|
+
import { ItemGroup, ItemSeparator } from "../../ui/Item.js";
|
|
4
6
|
import type { ParameterItem } from "./graphql/graphql.js";
|
|
5
7
|
import type { ParameterGroup } from "./OperationListItem.js";
|
|
6
8
|
import { ParameterListItem } from "./ParameterListItem.js";
|
|
@@ -15,25 +17,37 @@ export const ParameterList = ({
|
|
|
15
17
|
group: ParameterGroup;
|
|
16
18
|
parameters: ParameterItem[];
|
|
17
19
|
id: string;
|
|
18
|
-
}) =>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
20
|
+
}) => {
|
|
21
|
+
const sortedParameters = parameters.sort((a, b) =>
|
|
22
|
+
a.required === b.required ? 0 : a.required ? -1 : 1,
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<Heading
|
|
28
|
+
level={3}
|
|
29
|
+
id={`${id}/${group}-parameters`}
|
|
30
|
+
className="capitalize"
|
|
31
|
+
>
|
|
32
|
+
{summary && <VisuallyHidden>{summary} › </VisuallyHidden>}
|
|
33
|
+
{group === "header" ? "Headers" : `${group} Parameters`}
|
|
34
|
+
</Heading>
|
|
35
|
+
<Frame>
|
|
36
|
+
<FramePanel className="p-0!">
|
|
37
|
+
<ItemGroup className="overflow-clip">
|
|
38
|
+
{sortedParameters.map((parameter) => (
|
|
39
|
+
<Fragment key={`${parameter.name}-${parameter.in}`}>
|
|
40
|
+
<ParameterListItem
|
|
41
|
+
parameter={parameter}
|
|
42
|
+
id={id}
|
|
43
|
+
group={group}
|
|
44
|
+
/>
|
|
45
|
+
<ItemSeparator />
|
|
46
|
+
</Fragment>
|
|
47
|
+
))}
|
|
48
|
+
</ItemGroup>
|
|
49
|
+
</FramePanel>
|
|
50
|
+
</Frame>
|
|
51
|
+
</>
|
|
52
|
+
);
|
|
53
|
+
};
|