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
|
@@ -1,12 +1,19 @@
|
|
|
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";
|
|
@@ -23,19 +30,30 @@ const renderMarkdown = (content?: string) =>
|
|
|
23
30
|
const renderBasicSchema = (
|
|
24
31
|
schema: SchemaObject,
|
|
25
32
|
cardHeader?: React.ReactNode,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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
|
-
<
|
|
71
|
+
<Frame>
|
|
54
72
|
{cardHeader}
|
|
55
|
-
<
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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,12 +87,8 @@ 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
94
|
if (schema.type === "array" && typeof schema.items === "object") {
|
|
@@ -92,48 +108,61 @@ export const SchemaView = ({
|
|
|
92
108
|
);
|
|
93
109
|
const groupNames = ["required", "optional", "deprecated"] as const;
|
|
94
110
|
|
|
95
|
-
const additionalProperties
|
|
96
|
-
|
|
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;
|
|
111
|
+
const additionalObjectProperties = typeof schema.additionalProperties ===
|
|
112
|
+
"object" && <SchemaView schema={schema.additionalProperties} embedded />;
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
{
|
|
114
|
+
const itemsList = groupNames.map(
|
|
115
|
+
(group, index) =>
|
|
116
|
+
groupedProperties[group] && (
|
|
117
|
+
<Fragment key={group}>
|
|
118
|
+
{index > 0 && <ItemSeparator />}
|
|
119
|
+
<ItemGroup className="overflow-clip">
|
|
120
|
+
{groupedProperties[group].map(([name, schema], index) => (
|
|
121
|
+
<Fragment key={name}>
|
|
122
|
+
{index > 0 && <ItemSeparator />}
|
|
122
123
|
<SchemaPropertyItem
|
|
123
|
-
key={name}
|
|
124
124
|
name={name}
|
|
125
125
|
schema={schema}
|
|
126
126
|
group={group}
|
|
127
127
|
defaultOpen={defaultOpen}
|
|
128
128
|
/>
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
</Fragment>
|
|
130
|
+
))}
|
|
131
|
+
</ItemGroup>
|
|
132
|
+
</Fragment>
|
|
133
|
+
),
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
if (embedded) {
|
|
137
|
+
return itemsList;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
<Frame>
|
|
142
|
+
{cardHeader}
|
|
143
|
+
{schema.description && (
|
|
144
|
+
<FrameHeader>
|
|
145
|
+
<FrameDescription>{schema.description}</FrameDescription>
|
|
146
|
+
</FrameHeader>
|
|
132
147
|
)}
|
|
133
|
-
|
|
134
|
-
|
|
148
|
+
<FramePanel className="p-0!">
|
|
149
|
+
{itemsList}
|
|
150
|
+
{additionalObjectProperties}
|
|
151
|
+
</FramePanel>
|
|
152
|
+
{schema.additionalProperties === true && (
|
|
153
|
+
<FrameFooter>
|
|
154
|
+
<a
|
|
155
|
+
className="text-sm flex items-center gap-1 hover:underline"
|
|
156
|
+
href="https://swagger.io/docs/specification/v3_0/data-models/dictionaries/"
|
|
157
|
+
rel="noopener noreferrer"
|
|
158
|
+
target="_blank"
|
|
159
|
+
>
|
|
160
|
+
Additional properties are allowed
|
|
161
|
+
<InfoIcon size={14} />
|
|
162
|
+
</a>
|
|
163
|
+
</FrameFooter>
|
|
164
|
+
)}
|
|
165
|
+
</Frame>
|
|
135
166
|
);
|
|
136
167
|
}
|
|
137
|
-
|
|
138
|
-
return null;
|
|
139
168
|
};
|
|
@@ -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 {
|
|
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
|
-
<
|
|
111
|
+
<Frame>
|
|
123
112
|
{cardHeader}
|
|
124
|
-
<
|
|
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 && <
|
|
140
|
-
</
|
|
141
|
-
</
|
|
128
|
+
{currentVariant && <SchemaView schema={currentVariant} />}
|
|
129
|
+
</FramePanel>
|
|
130
|
+
</Frame>
|
|
142
131
|
);
|
|
143
132
|
};
|
|
@@ -85,23 +85,14 @@ export const generateSchemaExample = (
|
|
|
85
85
|
return schema.enum[0];
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
if (schema.oneOf) {
|
|
89
|
-
|
|
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
|
-
|
|
97
|
-
return generateSchemaExample(schema.anyOf[randomIndex] as SchemaObject);
|
|
98
|
-
}
|
|
99
|
-
|
|
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
|
-
}, {});
|
|
95
|
+
return generateSchemaExample(schema.anyOf[0]);
|
|
105
96
|
}
|
|
106
97
|
|
|
107
98
|
// Check for property-level examples
|
|
@@ -110,8 +101,7 @@ export const generateSchemaExample = (
|
|
|
110
101
|
Array.isArray(schema.examples) &&
|
|
111
102
|
schema.examples.length > 0
|
|
112
103
|
) {
|
|
113
|
-
|
|
114
|
-
return schema.examples[randomIndex];
|
|
104
|
+
return schema.examples[0];
|
|
115
105
|
}
|
|
116
106
|
|
|
117
107
|
switch (schema.type) {
|
package/src/lib/ui/Badge.tsx
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
1
2
|
import { cva, type VariantProps } from "class-variance-authority";
|
|
2
3
|
import type * as React from "react";
|
|
3
|
-
|
|
4
4
|
import { cn } from "../util/cn.js";
|
|
5
5
|
|
|
6
6
|
const badgeVariants = cva(
|
|
7
|
-
"inline-flex items-center rounded-full border px-2
|
|
7
|
+
"inline-flex items-center justify-center rounded-full border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
|
|
8
8
|
{
|
|
9
9
|
variants: {
|
|
10
10
|
variant: {
|
|
11
11
|
default:
|
|
12
|
-
"border-transparent bg-primary text-primary-foreground hover:bg-primary/
|
|
12
|
+
"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
|
13
13
|
secondary:
|
|
14
|
-
"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/
|
|
15
|
-
muted: "bg-muted text-muted-foreground ",
|
|
14
|
+
"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
|
16
15
|
destructive:
|
|
17
|
-
"border-transparent bg-destructive text-destructive-
|
|
18
|
-
outline:
|
|
16
|
+
"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
|
17
|
+
outline:
|
|
18
|
+
"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
|
19
|
+
muted: "bg-muted text-muted-foreground ",
|
|
19
20
|
},
|
|
20
21
|
},
|
|
21
22
|
defaultVariants: {
|
|
@@ -24,13 +25,21 @@ const badgeVariants = cva(
|
|
|
24
25
|
},
|
|
25
26
|
);
|
|
26
27
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
function Badge({
|
|
29
|
+
className,
|
|
30
|
+
variant,
|
|
31
|
+
asChild = false,
|
|
32
|
+
...props
|
|
33
|
+
}: React.ComponentProps<"span"> &
|
|
34
|
+
VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
|
|
35
|
+
const Comp = asChild ? Slot : "span";
|
|
30
36
|
|
|
31
|
-
function Badge({ className, variant, ...props }: BadgeProps) {
|
|
32
37
|
return (
|
|
33
|
-
<
|
|
38
|
+
<Comp
|
|
39
|
+
data-slot="badge"
|
|
40
|
+
className={cn(badgeVariants({ variant }), className)}
|
|
41
|
+
{...props}
|
|
42
|
+
/>
|
|
34
43
|
);
|
|
35
44
|
}
|
|
36
45
|
|
package/src/lib/ui/Button.tsx
CHANGED
package/src/lib/ui/Checkbox.tsx
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
2
|
-
import {
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
|
|
2
|
+
import { CheckIcon } from "lucide-react";
|
|
3
|
+
import type * as React from "react";
|
|
5
4
|
import { cn } from "../util/cn.js";
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
>
|
|
20
|
-
<CheckboxPrimitive.Indicator
|
|
21
|
-
className={cn("flex items-center justify-center text-current")}
|
|
6
|
+
function Checkbox({
|
|
7
|
+
className,
|
|
8
|
+
...props
|
|
9
|
+
}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {
|
|
10
|
+
return (
|
|
11
|
+
<CheckboxPrimitive.Root
|
|
12
|
+
data-slot="checkbox"
|
|
13
|
+
className={cn(
|
|
14
|
+
"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
15
|
+
className,
|
|
16
|
+
)}
|
|
17
|
+
{...props}
|
|
22
18
|
>
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
<CheckboxPrimitive.Indicator
|
|
20
|
+
data-slot="checkbox-indicator"
|
|
21
|
+
className="grid place-content-center text-current transition-none"
|
|
22
|
+
>
|
|
23
|
+
<CheckIcon className="size-3.5" />
|
|
24
|
+
</CheckboxPrimitive.Indicator>
|
|
25
|
+
</CheckboxPrimitive.Root>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
29
28
|
export { Checkbox };
|
package/src/lib/ui/CodeBlock.tsx
CHANGED
|
@@ -6,7 +6,6 @@ import { useCopyToClipboard } from "../util/useCopyToClipboard.js";
|
|
|
6
6
|
|
|
7
7
|
export type CodeBlockProps = {
|
|
8
8
|
className?: string;
|
|
9
|
-
noBackground?: boolean;
|
|
10
9
|
wrapLines?: boolean;
|
|
11
10
|
showLanguageIndicator?: boolean;
|
|
12
11
|
language?: string;
|
|
@@ -35,12 +34,12 @@ export const CodeBlock = ({
|
|
|
35
34
|
return (
|
|
36
35
|
<div
|
|
37
36
|
className={cn(
|
|
38
|
-
"border code-block-wrapper relative group rounded-
|
|
37
|
+
"border code-block-wrapper relative group rounded-xl overflow-hidden",
|
|
39
38
|
showLineNumbers && "line-numbers",
|
|
40
39
|
props.className,
|
|
41
40
|
)}
|
|
42
41
|
>
|
|
43
|
-
<div className="border-b flex items-center
|
|
42
|
+
<div className="border-b flex items-center py-1 font-sans bg-black/2">
|
|
44
43
|
<div className="flex items-center gap-1.5 flex-1 text-sm w-full px-3">
|
|
45
44
|
<LanguageIcon language={language} />
|
|
46
45
|
{title}
|
|
@@ -51,7 +50,7 @@ export const CodeBlock = ({
|
|
|
51
50
|
aria-label="Copy code"
|
|
52
51
|
title="Copy code"
|
|
53
52
|
className={cn(
|
|
54
|
-
"transition
|
|
53
|
+
"transition p-1.5 mx-1 rounded-lg",
|
|
55
54
|
!isCopied && "hover:bg-accent hover:brightness-95",
|
|
56
55
|
)}
|
|
57
56
|
disabled={isCopied}
|
|
@@ -1,9 +1,31 @@
|
|
|
1
1
|
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
function Collapsible({
|
|
4
|
+
...props
|
|
5
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {
|
|
6
|
+
return <CollapsiblePrimitive.Root data-slot="collapsible" {...props} />;
|
|
7
|
+
}
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
function CollapsibleTrigger({
|
|
10
|
+
...props
|
|
11
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {
|
|
12
|
+
return (
|
|
13
|
+
<CollapsiblePrimitive.CollapsibleTrigger
|
|
14
|
+
data-slot="collapsible-trigger"
|
|
15
|
+
{...props}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
6
19
|
|
|
7
|
-
|
|
20
|
+
function CollapsibleContent({
|
|
21
|
+
...props
|
|
22
|
+
}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {
|
|
23
|
+
return (
|
|
24
|
+
<CollapsiblePrimitive.CollapsibleContent
|
|
25
|
+
data-slot="collapsible-content"
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
8
30
|
|
|
9
|
-
export { Collapsible,
|
|
31
|
+
export { Collapsible, CollapsibleTrigger, CollapsibleContent };
|
|
@@ -2,10 +2,10 @@ import { CheckIcon, CopyIcon } from "lucide-react";
|
|
|
2
2
|
import type { ReactNode } from "react";
|
|
3
3
|
import { useRef, useState } from "react";
|
|
4
4
|
import { cn } from "../util/cn.js";
|
|
5
|
+
import { Button } from "./Button.js";
|
|
5
6
|
|
|
6
7
|
export type CodeBlockProps = {
|
|
7
8
|
className?: string;
|
|
8
|
-
noBackground?: boolean;
|
|
9
9
|
wrapLines?: boolean;
|
|
10
10
|
showLanguageIndicator?: boolean;
|
|
11
11
|
language?: string;
|
|
@@ -40,20 +40,22 @@ export const EmbeddedCodeBlock = ({
|
|
|
40
40
|
fullHeight && "h-full",
|
|
41
41
|
)}
|
|
42
42
|
>
|
|
43
|
-
<div
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
43
|
+
<div className="relative overflow-auto">
|
|
44
|
+
<div
|
|
45
|
+
className={cn(
|
|
46
|
+
"code-block text-sm not-prose scrollbar [&>pre]:overflow-x-auto [&_code]:p-2",
|
|
47
|
+
fullHeight && "h-full [&>pre]:h-full",
|
|
48
|
+
props.className,
|
|
49
|
+
)}
|
|
50
|
+
ref={ref}
|
|
51
|
+
>
|
|
52
|
+
{children}
|
|
53
|
+
</div>
|
|
52
54
|
</div>
|
|
53
55
|
{showLanguageIndicator && (
|
|
54
56
|
<span
|
|
55
57
|
className={cn(
|
|
56
|
-
"absolute top-1.5 end-3 text-[11px]! font-mono text-muted-foreground transition group-hover:opacity-0",
|
|
58
|
+
"absolute top-1.5 end-3 text-[11px]! font-mono text-muted-foreground transition group-hover:opacity-0 pointer-events-none",
|
|
57
59
|
showCopy === "always" && "hidden",
|
|
58
60
|
)}
|
|
59
61
|
>
|
|
@@ -61,12 +63,12 @@ export const EmbeddedCodeBlock = ({
|
|
|
61
63
|
</span>
|
|
62
64
|
)}
|
|
63
65
|
{showCopy !== "never" && (
|
|
64
|
-
<
|
|
66
|
+
<Button
|
|
65
67
|
type="button"
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
variant="outline"
|
|
69
|
+
size="icon-xs"
|
|
68
70
|
className={cn(
|
|
69
|
-
"absolute top-2 end-2 p-2
|
|
71
|
+
"absolute top-2 end-2 p-2",
|
|
70
72
|
showCopy === "hover" && "opacity-0 group-hover:opacity-100",
|
|
71
73
|
showCopyText && "flex gap-2 items-center font-medium",
|
|
72
74
|
)}
|
|
@@ -81,16 +83,16 @@ export const EmbeddedCodeBlock = ({
|
|
|
81
83
|
>
|
|
82
84
|
{isCopied ? (
|
|
83
85
|
<CheckIcon
|
|
84
|
-
className="text-emerald-600"
|
|
85
|
-
size={
|
|
86
|
+
className="shrink-0 text-emerald-600 dark:text-emerald-300"
|
|
87
|
+
size={13}
|
|
86
88
|
strokeWidth={2.5}
|
|
87
89
|
absoluteStrokeWidth
|
|
88
90
|
/>
|
|
89
91
|
) : (
|
|
90
|
-
<CopyIcon size={
|
|
92
|
+
<CopyIcon className="shrink-0" size={13} />
|
|
91
93
|
)}
|
|
92
94
|
{showCopyText && "Copy"}
|
|
93
|
-
</
|
|
95
|
+
</Button>
|
|
94
96
|
)}
|
|
95
97
|
</div>
|
|
96
98
|
);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { cn } from "../util/cn.js";
|
|
3
|
+
|
|
4
|
+
function Frame({ className, ...props }: React.ComponentProps<"div">) {
|
|
5
|
+
return (
|
|
6
|
+
<div
|
|
7
|
+
data-slot="frame"
|
|
8
|
+
className={cn(
|
|
9
|
+
"relative flex flex-col rounded-2xl bg-muted p-1",
|
|
10
|
+
className,
|
|
11
|
+
)}
|
|
12
|
+
{...props}
|
|
13
|
+
/>
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function FramePanel({ className, ...props }: React.ComponentProps<"div">) {
|
|
18
|
+
return (
|
|
19
|
+
<div
|
|
20
|
+
data-slot="frame-panel"
|
|
21
|
+
className={cn(
|
|
22
|
+
"relative bg-clip-padding rounded-xl border bg-card p-5 shadow-xs",
|
|
23
|
+
"before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-xl)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:bg-clip-border dark:before:shadow-[0_-1px_--theme(--color-white/8%)]",
|
|
24
|
+
className,
|
|
25
|
+
)}
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function FrameHeader({ className, ...props }: React.ComponentProps<"header">) {
|
|
32
|
+
return (
|
|
33
|
+
<header
|
|
34
|
+
data-slot="frame-panel-header"
|
|
35
|
+
className={cn("flex flex-col p-4", className)}
|
|
36
|
+
{...props}
|
|
37
|
+
/>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function FrameTitle({ className, ...props }: React.ComponentProps<"div">) {
|
|
42
|
+
return (
|
|
43
|
+
<div
|
|
44
|
+
data-slot="frame-panel-title"
|
|
45
|
+
className={cn("text-sm font-semibold", className)}
|
|
46
|
+
{...props}
|
|
47
|
+
/>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function FrameDescription({
|
|
52
|
+
className,
|
|
53
|
+
...props
|
|
54
|
+
}: React.ComponentProps<"div">) {
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
data-slot="frame-panel-description"
|
|
58
|
+
className={cn("text-sm text-muted-foreground", className)}
|
|
59
|
+
{...props}
|
|
60
|
+
/>
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function FrameFooter({ className, ...props }: React.ComponentProps<"footer">) {
|
|
65
|
+
return (
|
|
66
|
+
<footer
|
|
67
|
+
data-slot="frame-panel-footer"
|
|
68
|
+
className={cn("flex flex-col gap-1 px-5 py-4", className)}
|
|
69
|
+
{...props}
|
|
70
|
+
/>
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
Frame,
|
|
76
|
+
FramePanel,
|
|
77
|
+
FrameHeader,
|
|
78
|
+
FrameTitle,
|
|
79
|
+
FrameDescription,
|
|
80
|
+
FrameFooter,
|
|
81
|
+
};
|