@apiboost/omnispec 1.0.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/LICENSE.md +202 -0
- package/README.md +166 -0
- package/core/package.json +5 -0
- package/dist/cjs/asyncapi/index.js +17 -0
- package/dist/cjs/asyncapi/index.js.map +1 -0
- package/dist/cjs/chunks/AsyncApiSpec-TBlyRxTP.js +819 -0
- package/dist/cjs/chunks/AsyncApiSpec-TBlyRxTP.js.map +1 -0
- package/dist/cjs/chunks/Collapsible-BHAHk_Ep.js +7527 -0
- package/dist/cjs/chunks/Collapsible-BHAHk_Ep.js.map +1 -0
- package/dist/cjs/chunks/ErrorBoundary-c1piU8da.js +36 -0
- package/dist/cjs/chunks/ErrorBoundary-c1piU8da.js.map +1 -0
- package/dist/cjs/chunks/OmniSpecRenderer-CE4wxVTL.js +104 -0
- package/dist/cjs/chunks/OmniSpecRenderer-CE4wxVTL.js.map +1 -0
- package/dist/cjs/chunks/OpenApiSpec-D0JtmOVQ.js +3157 -0
- package/dist/cjs/chunks/OpenApiSpec-D0JtmOVQ.js.map +1 -0
- package/dist/cjs/chunks/OpenIdConnectManual-oEnN0QJ-.js +2416 -0
- package/dist/cjs/chunks/OpenIdConnectManual-oEnN0QJ-.js.map +1 -0
- package/dist/cjs/chunks/RendererRegistry-DQ7JBLMT.js +24 -0
- package/dist/cjs/chunks/RendererRegistry-DQ7JBLMT.js.map +1 -0
- package/dist/cjs/chunks/binary-response-CSrPCI-1.js +77 -0
- package/dist/cjs/chunks/binary-response-CSrPCI-1.js.map +1 -0
- package/dist/cjs/chunks/ref-resolver-DWu6Q6E5.js +7108 -0
- package/dist/cjs/chunks/ref-resolver-DWu6Q6E5.js.map +1 -0
- package/dist/cjs/chunks/ssrf-guard-B6T2A7Ho.js +25 -0
- package/dist/cjs/chunks/ssrf-guard-B6T2A7Ho.js.map +1 -0
- package/dist/cjs/chunks/useSpecDetector-A4OwYrmY.js +252 -0
- package/dist/cjs/chunks/useSpecDetector-A4OwYrmY.js.map +1 -0
- package/dist/cjs/chunks/useSpecFetcher-BKz1jHTV.js +13669 -0
- package/dist/cjs/chunks/useSpecFetcher-BKz1jHTV.js.map +1 -0
- package/dist/cjs/core/public.js +198 -0
- package/dist/cjs/core/public.js.map +1 -0
- package/dist/cjs/index.js +36 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/openapi/index.js +19 -0
- package/dist/cjs/openapi/index.js.map +1 -0
- package/dist/cjs/server/index.js +154 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/wc/index.js +428 -0
- package/dist/cjs/wc/index.js.map +1 -0
- package/dist/esm/asyncapi/index.js +11 -0
- package/dist/esm/asyncapi/index.js.map +1 -0
- package/dist/esm/chunks/AsyncApiSpec-C3lsUpZk.js +817 -0
- package/dist/esm/chunks/AsyncApiSpec-C3lsUpZk.js.map +1 -0
- package/dist/esm/chunks/Collapsible-DA6-nS46.js +7482 -0
- package/dist/esm/chunks/Collapsible-DA6-nS46.js.map +1 -0
- package/dist/esm/chunks/ErrorBoundary-posRNrbt.js +34 -0
- package/dist/esm/chunks/ErrorBoundary-posRNrbt.js.map +1 -0
- package/dist/esm/chunks/OmniSpecRenderer-MqsQFXro.js +102 -0
- package/dist/esm/chunks/OmniSpecRenderer-MqsQFXro.js.map +1 -0
- package/dist/esm/chunks/OpenApiSpec-Cy-oW6jA.js +3153 -0
- package/dist/esm/chunks/OpenApiSpec-Cy-oW6jA.js.map +1 -0
- package/dist/esm/chunks/OpenIdConnectManual-COfITasf.js +2393 -0
- package/dist/esm/chunks/OpenIdConnectManual-COfITasf.js.map +1 -0
- package/dist/esm/chunks/RendererRegistry-zlh-WYbU.js +21 -0
- package/dist/esm/chunks/RendererRegistry-zlh-WYbU.js.map +1 -0
- package/dist/esm/chunks/binary-response-Cre_H-Rt.js +72 -0
- package/dist/esm/chunks/binary-response-Cre_H-Rt.js.map +1 -0
- package/dist/esm/chunks/ref-resolver-BIrHJOjz.js +7105 -0
- package/dist/esm/chunks/ref-resolver-BIrHJOjz.js.map +1 -0
- package/dist/esm/chunks/ssrf-guard-CsZoYdEq.js +23 -0
- package/dist/esm/chunks/ssrf-guard-CsZoYdEq.js.map +1 -0
- package/dist/esm/chunks/useSpecDetector-5SGcKnJx.js +248 -0
- package/dist/esm/chunks/useSpecDetector-5SGcKnJx.js.map +1 -0
- package/dist/esm/chunks/useSpecFetcher-CZvAnU7Z.js +13625 -0
- package/dist/esm/chunks/useSpecFetcher-CZvAnU7Z.js.map +1 -0
- package/dist/esm/core/public.js +102 -0
- package/dist/esm/core/public.js.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/openapi/index.js +13 -0
- package/dist/esm/openapi/index.js.map +1 -0
- package/dist/esm/server/index.js +152 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/wc/index.js +403 -0
- package/dist/esm/wc/index.js.map +1 -0
- package/dist/types/asyncapi/AsyncApiSpec.d.ts +12 -0
- package/dist/types/asyncapi/AsyncApiSpec.d.ts.map +1 -0
- package/dist/types/asyncapi/components/AsyncOverview.d.ts +16 -0
- package/dist/types/asyncapi/components/AsyncOverview.d.ts.map +1 -0
- package/dist/types/asyncapi/components/ChannelDetail.d.ts +19 -0
- package/dist/types/asyncapi/components/ChannelDetail.d.ts.map +1 -0
- package/dist/types/asyncapi/components/ComponentsSection.d.ts +16 -0
- package/dist/types/asyncapi/components/ComponentsSection.d.ts.map +1 -0
- package/dist/types/asyncapi/components/ProtocolBadge.d.ts +16 -0
- package/dist/types/asyncapi/components/ProtocolBadge.d.ts.map +1 -0
- package/dist/types/asyncapi/components/ServerList.d.ts +16 -0
- package/dist/types/asyncapi/components/ServerList.d.ts.map +1 -0
- package/dist/types/asyncapi/hooks/useAsyncApiSpec.d.ts +12 -0
- package/dist/types/asyncapi/hooks/useAsyncApiSpec.d.ts.map +1 -0
- package/dist/types/asyncapi/index.d.ts +11 -0
- package/dist/types/asyncapi/index.d.ts.map +1 -0
- package/dist/types/asyncapi/parser/asyncapi-parser.d.ts +12 -0
- package/dist/types/asyncapi/parser/asyncapi-parser.d.ts.map +1 -0
- package/dist/types/asyncapi/types/asyncapi.types.d.ts +125 -0
- package/dist/types/asyncapi/types/asyncapi.types.d.ts.map +1 -0
- package/dist/types/core/components/Auth/ApiKeyAuth.d.ts +30 -0
- package/dist/types/core/components/Auth/ApiKeyAuth.d.ts.map +1 -0
- package/dist/types/core/components/Auth/AuthPanel.d.ts +18 -0
- package/dist/types/core/components/Auth/AuthPanel.d.ts.map +1 -0
- package/dist/types/core/components/Auth/AuthPanelModal.d.ts +24 -0
- package/dist/types/core/components/Auth/AuthPanelModal.d.ts.map +1 -0
- package/dist/types/core/components/Auth/BasicAuth.d.ts +20 -0
- package/dist/types/core/components/Auth/BasicAuth.d.ts.map +1 -0
- package/dist/types/core/components/Auth/BearerAuth.d.ts +20 -0
- package/dist/types/core/components/Auth/BearerAuth.d.ts.map +1 -0
- package/dist/types/core/components/Auth/OAuth2AuthManual.d.ts +37 -0
- package/dist/types/core/components/Auth/OAuth2AuthManual.d.ts.map +1 -0
- package/dist/types/core/components/Auth/OpenIdConnectManual.d.ts +33 -0
- package/dist/types/core/components/Auth/OpenIdConnectManual.d.ts.map +1 -0
- package/dist/types/core/components/Auth/SecretInput.d.ts +27 -0
- package/dist/types/core/components/Auth/SecretInput.d.ts.map +1 -0
- package/dist/types/core/components/Auth/index.d.ts +16 -0
- package/dist/types/core/components/Auth/index.d.ts.map +1 -0
- package/dist/types/core/components/CodeBlock/CodeBlock.d.ts +32 -0
- package/dist/types/core/components/CodeBlock/CodeBlock.d.ts.map +1 -0
- package/dist/types/core/components/CodeBlock/index.d.ts +12 -0
- package/dist/types/core/components/CodeBlock/index.d.ts.map +1 -0
- package/dist/types/core/components/Layout/DocLayout.d.ts +24 -0
- package/dist/types/core/components/Layout/DocLayout.d.ts.map +1 -0
- package/dist/types/core/components/Layout/MobileDrawerDismissContext.d.ts +20 -0
- package/dist/types/core/components/Layout/MobileDrawerDismissContext.d.ts.map +1 -0
- package/dist/types/core/components/Layout/SpecStatusScreen.d.ts +38 -0
- package/dist/types/core/components/Layout/SpecStatusScreen.d.ts.map +1 -0
- package/dist/types/core/components/Layout/index.d.ts +11 -0
- package/dist/types/core/components/Layout/index.d.ts.map +1 -0
- package/dist/types/core/components/MarkdownRenderer/MarkdownRenderer.d.ts +16 -0
- package/dist/types/core/components/MarkdownRenderer/MarkdownRenderer.d.ts.map +1 -0
- package/dist/types/core/components/MarkdownRenderer/index.d.ts +11 -0
- package/dist/types/core/components/MarkdownRenderer/index.d.ts.map +1 -0
- package/dist/types/core/components/Navigation/CustomNavSection.d.ts +16 -0
- package/dist/types/core/components/Navigation/CustomNavSection.d.ts.map +1 -0
- package/dist/types/core/components/Navigation/NavTree.d.ts +32 -0
- package/dist/types/core/components/Navigation/NavTree.d.ts.map +1 -0
- package/dist/types/core/components/Navigation/SearchBar.d.ts +16 -0
- package/dist/types/core/components/Navigation/SearchBar.d.ts.map +1 -0
- package/dist/types/core/components/Navigation/buildSidebar.d.ts +13 -0
- package/dist/types/core/components/Navigation/buildSidebar.d.ts.map +1 -0
- package/dist/types/core/components/Navigation/index.d.ts +13 -0
- package/dist/types/core/components/Navigation/index.d.ts.map +1 -0
- package/dist/types/core/components/Reference/ReferenceLayout.d.ts +19 -0
- package/dist/types/core/components/Reference/ReferenceLayout.d.ts.map +1 -0
- package/dist/types/core/components/Reference/ReferenceOperationDetail.d.ts +42 -0
- package/dist/types/core/components/Reference/ReferenceOperationDetail.d.ts.map +1 -0
- package/dist/types/core/components/Reference/SamplesPanel.d.ts +33 -0
- package/dist/types/core/components/Reference/SamplesPanel.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/SchemaPresentation.d.ts +147 -0
- package/dist/types/core/components/SchemaViewer/SchemaPresentation.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/SchemaPrimitives.d.ts +66 -0
- package/dist/types/core/components/SchemaViewer/SchemaPrimitives.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/SchemaTable.d.ts +16 -0
- package/dist/types/core/components/SchemaViewer/SchemaTable.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/SchemaTree.d.ts +26 -0
- package/dist/types/core/components/SchemaViewer/SchemaTree.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/index.d.ts +16 -0
- package/dist/types/core/components/SchemaViewer/index.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/schema-style.d.ts +45 -0
- package/dist/types/core/components/SchemaViewer/schema-style.d.ts.map +1 -0
- package/dist/types/core/components/SchemaViewer/schema-utils.d.ts +83 -0
- package/dist/types/core/components/SchemaViewer/schema-utils.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/CodeSamples.d.ts +26 -0
- package/dist/types/core/components/TryIt/CodeSamples.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/CustomHeaders.d.ts +24 -0
- package/dist/types/core/components/TryIt/CustomHeaders.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/InlineTryIt.d.ts +26 -0
- package/dist/types/core/components/TryIt/InlineTryIt.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/ParameterForm.d.ts +34 -0
- package/dist/types/core/components/TryIt/ParameterForm.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/RequestBodyEditor.d.ts +34 -0
- package/dist/types/core/components/TryIt/RequestBodyEditor.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/ResponseViewer.d.ts +18 -0
- package/dist/types/core/components/TryIt/ResponseViewer.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/TryItPanel.d.ts +38 -0
- package/dist/types/core/components/TryIt/TryItPanel.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/code-generators.d.ts +23 -0
- package/dist/types/core/components/TryIt/code-generators.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/curl-generator.d.ts +12 -0
- package/dist/types/core/components/TryIt/curl-generator.d.ts.map +1 -0
- package/dist/types/core/components/TryIt/index.d.ts +16 -0
- package/dist/types/core/components/TryIt/index.d.ts.map +1 -0
- package/dist/types/core/components/common/Badge.d.ts +19 -0
- package/dist/types/core/components/common/Badge.d.ts.map +1 -0
- package/dist/types/core/components/common/Button.d.ts +44 -0
- package/dist/types/core/components/common/Button.d.ts.map +1 -0
- package/dist/types/core/components/common/Collapsible.d.ts +23 -0
- package/dist/types/core/components/common/Collapsible.d.ts.map +1 -0
- package/dist/types/core/components/common/CopyButton.d.ts +16 -0
- package/dist/types/core/components/common/CopyButton.d.ts.map +1 -0
- package/dist/types/core/components/common/ErrorBoundary.d.ts +40 -0
- package/dist/types/core/components/common/ErrorBoundary.d.ts.map +1 -0
- package/dist/types/core/components/common/ErrorMessage.d.ts +16 -0
- package/dist/types/core/components/common/ErrorMessage.d.ts.map +1 -0
- package/dist/types/core/components/common/ExampleSelector.d.ts +29 -0
- package/dist/types/core/components/common/ExampleSelector.d.ts.map +1 -0
- package/dist/types/core/components/common/ExpandableCard.d.ts +27 -0
- package/dist/types/core/components/common/ExpandableCard.d.ts.map +1 -0
- package/dist/types/core/components/common/Icon.d.ts +53 -0
- package/dist/types/core/components/common/Icon.d.ts.map +1 -0
- package/dist/types/core/components/common/LinkableHeading.d.ts +19 -0
- package/dist/types/core/components/common/LinkableHeading.d.ts.map +1 -0
- package/dist/types/core/components/common/LoadingScreen.d.ts +13 -0
- package/dist/types/core/components/common/LoadingScreen.d.ts.map +1 -0
- package/dist/types/core/components/common/MethodBar.d.ts +18 -0
- package/dist/types/core/components/common/MethodBar.d.ts.map +1 -0
- package/dist/types/core/components/common/Modal.d.ts +19 -0
- package/dist/types/core/components/common/Modal.d.ts.map +1 -0
- package/dist/types/core/components/common/ResponsiveColumns.d.ts +17 -0
- package/dist/types/core/components/common/ResponsiveColumns.d.ts.map +1 -0
- package/dist/types/core/components/common/SpecToolbar.d.ts +27 -0
- package/dist/types/core/components/common/SpecToolbar.d.ts.map +1 -0
- package/dist/types/core/components/common/Tabs.d.ts +29 -0
- package/dist/types/core/components/common/Tabs.d.ts.map +1 -0
- package/dist/types/core/components/common/Tooltip.d.ts +17 -0
- package/dist/types/core/components/common/Tooltip.d.ts.map +1 -0
- package/dist/types/core/components/common/UpgradePrompt.d.ts +18 -0
- package/dist/types/core/components/common/UpgradePrompt.d.ts.map +1 -0
- package/dist/types/core/components/common/index.d.ts +18 -0
- package/dist/types/core/components/common/index.d.ts.map +1 -0
- package/dist/types/core/context/AuthContext.d.ts +35 -0
- package/dist/types/core/context/AuthContext.d.ts.map +1 -0
- package/dist/types/core/context/ConfigContext.d.ts +55 -0
- package/dist/types/core/context/ConfigContext.d.ts.map +1 -0
- package/dist/types/core/context/ExpandContext.d.ts +33 -0
- package/dist/types/core/context/ExpandContext.d.ts.map +1 -0
- package/dist/types/core/context/RendererRegistry.d.ts +24 -0
- package/dist/types/core/context/RendererRegistry.d.ts.map +1 -0
- package/dist/types/core/context/index.d.ts +14 -0
- package/dist/types/core/context/index.d.ts.map +1 -0
- package/dist/types/core/hooks/index.d.ts +12 -0
- package/dist/types/core/hooks/index.d.ts.map +1 -0
- package/dist/types/core/hooks/useHashScroll.d.ts +15 -0
- package/dist/types/core/hooks/useHashScroll.d.ts.map +1 -0
- package/dist/types/core/hooks/useScrollSpy.d.ts +33 -0
- package/dist/types/core/hooks/useScrollSpy.d.ts.map +1 -0
- package/dist/types/core/hooks/useSegmentedRouter.d.ts +19 -0
- package/dist/types/core/hooks/useSegmentedRouter.d.ts.map +1 -0
- package/dist/types/core/hooks/useSpecDetector.d.ts +13 -0
- package/dist/types/core/hooks/useSpecDetector.d.ts.map +1 -0
- package/dist/types/core/hooks/useSpecFetcher.d.ts +17 -0
- package/dist/types/core/hooks/useSpecFetcher.d.ts.map +1 -0
- package/dist/types/core/public.d.ts +86 -0
- package/dist/types/core/public.d.ts.map +1 -0
- package/dist/types/core/styles/breakpoints.d.ts +33 -0
- package/dist/types/core/styles/breakpoints.d.ts.map +1 -0
- package/dist/types/core/styles/css.d.ts +17 -0
- package/dist/types/core/styles/css.d.ts.map +1 -0
- package/dist/types/core/styles/styled.d.ts +25 -0
- package/dist/types/core/styles/styled.d.ts.map +1 -0
- package/dist/types/core/themes/ThemeProvider.d.ts +25 -0
- package/dist/types/core/themes/ThemeProvider.d.ts.map +1 -0
- package/dist/types/core/themes/index.d.ts +12 -0
- package/dist/types/core/themes/index.d.ts.map +1 -0
- package/dist/types/core/themes/tokens.d.ts +13 -0
- package/dist/types/core/themes/tokens.d.ts.map +1 -0
- package/dist/types/core/types/auth.types.d.ts +83 -0
- package/dist/types/core/types/auth.types.d.ts.map +1 -0
- package/dist/types/core/types/common.types.d.ts +141 -0
- package/dist/types/core/types/common.types.d.ts.map +1 -0
- package/dist/types/core/types/index.d.ts +16 -0
- package/dist/types/core/types/index.d.ts.map +1 -0
- package/dist/types/core/types/interactive-auth.types.d.ts +37 -0
- package/dist/types/core/types/interactive-auth.types.d.ts.map +1 -0
- package/dist/types/core/types/sidebar-nav.types.d.ts +41 -0
- package/dist/types/core/types/sidebar-nav.types.d.ts.map +1 -0
- package/dist/types/core/types/spec-detection.types.d.ts +26 -0
- package/dist/types/core/types/spec-detection.types.d.ts.map +1 -0
- package/dist/types/core/types/theme.types.d.ts +119 -0
- package/dist/types/core/types/theme.types.d.ts.map +1 -0
- package/dist/types/core/types/try-it.types.d.ts +50 -0
- package/dist/types/core/types/try-it.types.d.ts.map +1 -0
- package/dist/types/core/utils/binary-response.d.ts +24 -0
- package/dist/types/core/utils/binary-response.d.ts.map +1 -0
- package/dist/types/core/utils/detect-spec.d.ts +12 -0
- package/dist/types/core/utils/detect-spec.d.ts.map +1 -0
- package/dist/types/core/utils/direct-client.d.ts +20 -0
- package/dist/types/core/utils/direct-client.d.ts.map +1 -0
- package/dist/types/core/utils/fetch-spec.d.ts +15 -0
- package/dist/types/core/utils/fetch-spec.d.ts.map +1 -0
- package/dist/types/core/utils/index.d.ts +14 -0
- package/dist/types/core/utils/index.d.ts.map +1 -0
- package/dist/types/core/utils/proxy-client.d.ts +19 -0
- package/dist/types/core/utils/proxy-client.d.ts.map +1 -0
- package/dist/types/core/utils/ref-security.d.ts +78 -0
- package/dist/types/core/utils/ref-security.d.ts.map +1 -0
- package/dist/types/core/utils/resolve-download-link.d.ts +23 -0
- package/dist/types/core/utils/resolve-download-link.d.ts.map +1 -0
- package/dist/types/core/utils/sanitize-html.d.ts +16 -0
- package/dist/types/core/utils/sanitize-html.d.ts.map +1 -0
- package/dist/types/core/utils/tryit-storage.d.ts +45 -0
- package/dist/types/core/utils/tryit-storage.d.ts.map +1 -0
- package/dist/types/index.d.ts +29 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/openapi/OpenApiSpec.d.ts +12 -0
- package/dist/types/openapi/OpenApiSpec.d.ts.map +1 -0
- package/dist/types/openapi/components/ApiOverview.d.ts +19 -0
- package/dist/types/openapi/components/ApiOverview.d.ts.map +1 -0
- package/dist/types/openapi/components/CallbacksSection.d.ts +19 -0
- package/dist/types/openapi/components/CallbacksSection.d.ts.map +1 -0
- package/dist/types/openapi/components/ComponentsSection.d.ts +19 -0
- package/dist/types/openapi/components/ComponentsSection.d.ts.map +1 -0
- package/dist/types/openapi/components/EndpointCard.d.ts +20 -0
- package/dist/types/openapi/components/EndpointCard.d.ts.map +1 -0
- package/dist/types/openapi/components/OperationDetail.d.ts +28 -0
- package/dist/types/openapi/components/OperationDetail.d.ts.map +1 -0
- package/dist/types/openapi/components/OperationView.d.ts +19 -0
- package/dist/types/openapi/components/OperationView.d.ts.map +1 -0
- package/dist/types/openapi/components/SegmentedContent.d.ts +22 -0
- package/dist/types/openapi/components/SegmentedContent.d.ts.map +1 -0
- package/dist/types/openapi/components/ServerSelector.d.ts +18 -0
- package/dist/types/openapi/components/ServerSelector.d.ts.map +1 -0
- package/dist/types/openapi/components/TagGroup.d.ts +19 -0
- package/dist/types/openapi/components/TagGroup.d.ts.map +1 -0
- package/dist/types/openapi/hooks/useOpenApiSpec.d.ts +13 -0
- package/dist/types/openapi/hooks/useOpenApiSpec.d.ts.map +1 -0
- package/dist/types/openapi/index.d.ts +11 -0
- package/dist/types/openapi/index.d.ts.map +1 -0
- package/dist/types/openapi/parser/openapi-parser.d.ts +13 -0
- package/dist/types/openapi/parser/openapi-parser.d.ts.map +1 -0
- package/dist/types/openapi/parser/ref-resolver.d.ts +18 -0
- package/dist/types/openapi/parser/ref-resolver.d.ts.map +1 -0
- package/dist/types/openapi/search.d.ts +16 -0
- package/dist/types/openapi/search.d.ts.map +1 -0
- package/dist/types/openapi/types/openapi.types.d.ts +139 -0
- package/dist/types/openapi/types/openapi.types.d.ts.map +1 -0
- package/dist/types/server/index.d.ts +12 -0
- package/dist/types/server/index.d.ts.map +1 -0
- package/dist/types/server/proxy-router.d.ts +44 -0
- package/dist/types/server/proxy-router.d.ts.map +1 -0
- package/dist/types/server/ssrf-guard.d.ts +20 -0
- package/dist/types/server/ssrf-guard.d.ts.map +1 -0
- package/dist/types/test-setup.d.ts +11 -0
- package/dist/types/test-setup.d.ts.map +1 -0
- package/dist/types/unified/OmniSpecRenderer.d.ts +18 -0
- package/dist/types/unified/OmniSpecRenderer.d.ts.map +1 -0
- package/dist/types/unified/index.d.ts +12 -0
- package/dist/types/unified/index.d.ts.map +1 -0
- package/dist/types/wc/OmniSpecRendererElement.d.ts +48 -0
- package/dist/types/wc/OmniSpecRendererElement.d.ts.map +1 -0
- package/dist/types/wc/attribute-bridge.d.ts +96 -0
- package/dist/types/wc/attribute-bridge.d.ts.map +1 -0
- package/dist/types/wc/index.d.ts +42 -0
- package/dist/types/wc/index.d.ts.map +1 -0
- package/dist/types/wc/style-injection.d.ts +24 -0
- package/dist/types/wc/style-injection.d.ts.map +1 -0
- package/dist/wc/standalone.js +3 -0
- package/dist/wc/standalone.js.LICENSE.txt +65 -0
- package/dist/wc/standalone.js.map +1 -0
- package/package.json +167 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const isPrivateIp = (hostname) => {
|
|
2
|
+
const h = hostname.replace(/^\[|]$/g, "");
|
|
3
|
+
if (h === "localhost" || h.startsWith("127.")) {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
if (h.startsWith("10.")) return true;
|
|
7
|
+
if (h.startsWith("192.168.")) return true;
|
|
8
|
+
if (/^172\.(1[6-9]|2\d|3[01])\./.test(h)) return true;
|
|
9
|
+
if (h.startsWith("169.254.")) return true;
|
|
10
|
+
if (h === "0.0.0.0" || h === "255.255.255.255") return true;
|
|
11
|
+
const lower = h.toLowerCase();
|
|
12
|
+
if (lower === "::1" || lower === "::") return true;
|
|
13
|
+
if (lower.startsWith("fc") || lower.startsWith("fd")) return true;
|
|
14
|
+
if (lower.startsWith("fe80")) return true;
|
|
15
|
+
const v4Mapped = lower.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/);
|
|
16
|
+
if (v4Mapped) {
|
|
17
|
+
return isPrivateIp(v4Mapped[1]);
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { isPrivateIp as i };
|
|
23
|
+
//# sourceMappingURL=ssrf-guard-CsZoYdEq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssrf-guard-CsZoYdEq.js","sources":["../../../src/server/ssrf-guard.ts"],"sourcesContent":["/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\n/**\n * Checks if a hostname or IP address is in a private/reserved range.\n *\n * Blocks RFC 1918 private ranges, loopback, link-local, and IPv6\n * equivalents to prevent SSRF attacks through the proxy.\n *\n * @param hostname - The hostname or IP to check.\n * @returns True if the address is private/reserved and should be blocked.\n */\nexport const isPrivateIp = (hostname: string): boolean => {\n // Normalize — strip IPv6 brackets.\n const h = hostname.replace(/^\\[|]$/g, '')\n\n // IPv4 loopback.\n if (h === 'localhost' || h.startsWith('127.')) {\n return true\n }\n\n // IPv4 private ranges (RFC 1918).\n if (h.startsWith('10.')) return true\n if (h.startsWith('192.168.')) return true\n if (/^172\\.(1[6-9]|2\\d|3[01])\\./.test(h)) return true\n\n // IPv4 link-local.\n if (h.startsWith('169.254.')) return true\n\n // IPv4 special: 0.0.0.0, broadcast.\n if (h === '0.0.0.0' || h === '255.255.255.255') return true\n\n // IPv6 loopback and private.\n const lower = h.toLowerCase()\n if (lower === '::1' || lower === '::') return true\n if (lower.startsWith('fc') || lower.startsWith('fd')) return true // Unique local (fc00::/7)\n if (lower.startsWith('fe80')) return true // Link-local\n\n // IPv4-mapped IPv6 (::ffff:10.0.0.1).\n const v4Mapped = lower.match(/^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/)\n if (v4Mapped) {\n return isPrivateIp(v4Mapped[1])\n }\n\n return false\n}\n"],"names":[],"mappings":"AAmBO,MAAM,WAAA,GAAc,CAAC,QAAA,KAA8B;AAExD,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAA;AAGxC,EAAA,IAAI,CAAA,KAAM,WAAA,IAAe,CAAA,CAAE,UAAA,CAAW,MAAM,CAAA,EAAG;AAC7C,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,IAAA;AAChC,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,UAAU,CAAA,EAAG,OAAO,IAAA;AACrC,EAAA,IAAI,4BAAA,CAA6B,IAAA,CAAK,CAAC,CAAA,EAAG,OAAO,IAAA;AAGjD,EAAA,IAAI,CAAA,CAAE,UAAA,CAAW,UAAU,CAAA,EAAG,OAAO,IAAA;AAGrC,EAAA,IAAI,CAAA,KAAM,SAAA,IAAa,CAAA,KAAM,iBAAA,EAAmB,OAAO,IAAA;AAGvD,EAAA,MAAM,KAAA,GAAQ,EAAE,WAAA,EAAY;AAC5B,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,EAAM,OAAO,IAAA;AAC9C,EAAA,IAAI,KAAA,CAAM,WAAW,IAAI,CAAA,IAAK,MAAM,UAAA,CAAW,IAAI,GAAG,OAAO,IAAA;AAC7D,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG,OAAO,IAAA;AAGrC,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,+BAA+B,CAAA;AAC5D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,WAAA,CAAY,QAAA,CAAS,CAAC,CAAC,CAAA;AAAA,EAChC;AAEA,EAAA,OAAO,KAAA;AACT;;;;"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { css } from '@emotion/css';
|
|
3
|
+
import { I as Icon, B as Button, S as SpecType } from './useSpecFetcher-CZvAnU7Z.js';
|
|
4
|
+
import { useMemo } from 'react';
|
|
5
|
+
|
|
6
|
+
const specTypeLabels = {
|
|
7
|
+
"graphql-sdl": "GraphQL",
|
|
8
|
+
"graphql-introspection": "GraphQL",
|
|
9
|
+
"soap-wsdl": "SOAP/WSDL",
|
|
10
|
+
"grpc-proto": "gRPC/Protobuf"
|
|
11
|
+
};
|
|
12
|
+
function UpgradePrompt({ specType, docsUrl, upgradeUrl }) {
|
|
13
|
+
const label = specTypeLabels[specType] ?? specType;
|
|
14
|
+
return /* @__PURE__ */ jsx("div", { className: containerStyle, children: /* @__PURE__ */ jsxs("div", { className: cardStyle, children: [
|
|
15
|
+
/* @__PURE__ */ jsx("div", { className: iconWrapperStyle, children: /* @__PURE__ */ jsx(Icon, { name: "info", size: "1.5rem" }) }),
|
|
16
|
+
/* @__PURE__ */ jsxs("h2", { className: titleStyle, children: [
|
|
17
|
+
label,
|
|
18
|
+
" specification detected"
|
|
19
|
+
] }),
|
|
20
|
+
/* @__PURE__ */ jsxs("p", { className: descStyle, children: [
|
|
21
|
+
"Rendering ",
|
|
22
|
+
label,
|
|
23
|
+
", along with GraphQL, SOAP, and gRPC specifications, requires ",
|
|
24
|
+
/* @__PURE__ */ jsx("code", { className: codeStyle, children: "@apiboost/omnispec-pro" }),
|
|
25
|
+
"."
|
|
26
|
+
] }),
|
|
27
|
+
/* @__PURE__ */ jsx("pre", { className: installStyle, children: "npm install @apiboost/omnispec-pro" }),
|
|
28
|
+
/* @__PURE__ */ jsxs("div", { className: actionsStyle, children: [
|
|
29
|
+
docsUrl && /* @__PURE__ */ jsxs("a", { href: docsUrl, className: linkStyle, target: "_blank", rel: "noopener noreferrer", children: [
|
|
30
|
+
"View documentation ",
|
|
31
|
+
/* @__PURE__ */ jsx(Icon, { name: "external-link", size: "0.75rem" })
|
|
32
|
+
] }),
|
|
33
|
+
upgradeUrl && /* @__PURE__ */ jsxs(Button, { variant: "primary", href: upgradeUrl, target: "_blank", rel: "noopener noreferrer", children: [
|
|
34
|
+
"Upgrade now ",
|
|
35
|
+
/* @__PURE__ */ jsx(Icon, { name: "external-link", size: "0.75rem" })
|
|
36
|
+
] })
|
|
37
|
+
] })
|
|
38
|
+
] }) });
|
|
39
|
+
}
|
|
40
|
+
const containerStyle = css({
|
|
41
|
+
display: "flex",
|
|
42
|
+
alignItems: "center",
|
|
43
|
+
justifyContent: "center",
|
|
44
|
+
flex: 1,
|
|
45
|
+
minHeight: "20rem",
|
|
46
|
+
padding: "2rem"
|
|
47
|
+
});
|
|
48
|
+
const cardStyle = css({
|
|
49
|
+
display: "flex",
|
|
50
|
+
flexDirection: "column",
|
|
51
|
+
alignItems: "center",
|
|
52
|
+
gap: "0.75rem",
|
|
53
|
+
maxWidth: "32rem",
|
|
54
|
+
textAlign: "center",
|
|
55
|
+
padding: "2.5rem 2rem",
|
|
56
|
+
borderRadius: "var(--omnispec-border-radius)",
|
|
57
|
+
backgroundColor: "var(--omnispec-bg-secondary)",
|
|
58
|
+
boxShadow: "0 0.0625rem 0.25rem rgba(0, 0, 0, 0.08)"
|
|
59
|
+
});
|
|
60
|
+
const iconWrapperStyle = css({
|
|
61
|
+
display: "flex",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
justifyContent: "center",
|
|
64
|
+
width: "3rem",
|
|
65
|
+
height: "3rem",
|
|
66
|
+
borderRadius: "50%",
|
|
67
|
+
backgroundColor: "var(--omnispec-bg-tertiary)",
|
|
68
|
+
color: "var(--omnispec-color-info)"
|
|
69
|
+
});
|
|
70
|
+
const titleStyle = css({
|
|
71
|
+
margin: 0,
|
|
72
|
+
fontSize: "var(--omnispec-font-size-lg)",
|
|
73
|
+
fontWeight: 600,
|
|
74
|
+
color: "var(--omnispec-fg-primary)"
|
|
75
|
+
});
|
|
76
|
+
const descStyle = css({
|
|
77
|
+
margin: 0,
|
|
78
|
+
fontSize: "var(--omnispec-font-size-sm)",
|
|
79
|
+
color: "var(--omnispec-fg-secondary)",
|
|
80
|
+
lineHeight: 1.6
|
|
81
|
+
});
|
|
82
|
+
const codeStyle = css({
|
|
83
|
+
backgroundColor: "var(--omnispec-bg-code)",
|
|
84
|
+
color: "var(--omnispec-fg-code)",
|
|
85
|
+
padding: "0.125rem 0.375rem",
|
|
86
|
+
borderRadius: "0.25rem",
|
|
87
|
+
fontSize: "0.875em",
|
|
88
|
+
fontFamily: "var(--omnispec-font-mono)"
|
|
89
|
+
});
|
|
90
|
+
const installStyle = css({
|
|
91
|
+
margin: 0,
|
|
92
|
+
padding: "0.625rem 1rem",
|
|
93
|
+
backgroundColor: "var(--omnispec-bg-code)",
|
|
94
|
+
color: "var(--omnispec-fg-primary)",
|
|
95
|
+
borderRadius: "var(--omnispec-border-radius)",
|
|
96
|
+
fontFamily: "var(--omnispec-font-mono)",
|
|
97
|
+
fontSize: "var(--omnispec-font-size-sm)",
|
|
98
|
+
userSelect: "all"
|
|
99
|
+
});
|
|
100
|
+
const actionsStyle = css({
|
|
101
|
+
display: "flex",
|
|
102
|
+
gap: "1rem",
|
|
103
|
+
marginTop: "0.5rem",
|
|
104
|
+
flexWrap: "wrap",
|
|
105
|
+
justifyContent: "center"
|
|
106
|
+
});
|
|
107
|
+
const linkStyle = css({
|
|
108
|
+
display: "inline-flex",
|
|
109
|
+
alignItems: "center",
|
|
110
|
+
gap: "0.375rem",
|
|
111
|
+
fontSize: "var(--omnispec-font-size-sm)",
|
|
112
|
+
color: "var(--omnispec-fg-link)",
|
|
113
|
+
textDecoration: "none",
|
|
114
|
+
fontWeight: 500,
|
|
115
|
+
"&:hover": {
|
|
116
|
+
textDecoration: "underline"
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
function detectSpecType(content) {
|
|
121
|
+
if (typeof content === "object") {
|
|
122
|
+
return detectFromObject(content);
|
|
123
|
+
}
|
|
124
|
+
const trimmed = content.trim();
|
|
125
|
+
try {
|
|
126
|
+
const parsed = JSON.parse(trimmed);
|
|
127
|
+
return detectFromObject(parsed);
|
|
128
|
+
} catch {
|
|
129
|
+
}
|
|
130
|
+
const yamlResult = detectFromYamlString(trimmed);
|
|
131
|
+
if (yamlResult) return yamlResult;
|
|
132
|
+
if (trimmed.startsWith("<") || trimmed.startsWith("<?xml")) {
|
|
133
|
+
return detectFromXml(trimmed);
|
|
134
|
+
}
|
|
135
|
+
if (isProtoBuf(trimmed)) {
|
|
136
|
+
return {
|
|
137
|
+
type: SpecType.GRPC_PROTO,
|
|
138
|
+
confidence: "high"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (isGraphQLSDL(trimmed)) {
|
|
142
|
+
return {
|
|
143
|
+
type: SpecType.GRAPHQL_SDL,
|
|
144
|
+
confidence: "medium"
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
function detectFromObject(obj) {
|
|
150
|
+
if ("swagger" in obj && typeof obj.swagger === "string") {
|
|
151
|
+
return {
|
|
152
|
+
type: SpecType.OPENAPI_2,
|
|
153
|
+
confidence: "high",
|
|
154
|
+
version: obj.swagger
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
if ("openapi" in obj && typeof obj.openapi === "string") {
|
|
158
|
+
return {
|
|
159
|
+
type: SpecType.OPENAPI_3,
|
|
160
|
+
confidence: "high",
|
|
161
|
+
version: obj.openapi
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if ("asyncapi" in obj && typeof obj.asyncapi === "string") {
|
|
165
|
+
const version = obj.asyncapi;
|
|
166
|
+
const major = parseInt(version.split(".")[0], 10);
|
|
167
|
+
return {
|
|
168
|
+
type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,
|
|
169
|
+
confidence: "high",
|
|
170
|
+
version
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if ("__schema" in obj || "data" in obj && typeof obj.data === "object" && obj.data !== null && "__schema" in obj.data) {
|
|
174
|
+
return {
|
|
175
|
+
type: SpecType.GRAPHQL_INTROSPECTION,
|
|
176
|
+
confidence: "high"
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
function detectFromYamlString(content) {
|
|
182
|
+
const lines = content.split("\n").slice(0, 20);
|
|
183
|
+
for (const line of lines) {
|
|
184
|
+
const match = line.match(/^(\w+)\s*:\s*['"]?([^'"#\s]+)/);
|
|
185
|
+
if (!match) continue;
|
|
186
|
+
const [, key, value] = match;
|
|
187
|
+
if (key === "swagger") {
|
|
188
|
+
return { type: SpecType.OPENAPI_2, confidence: "high", version: value };
|
|
189
|
+
}
|
|
190
|
+
if (key === "openapi") {
|
|
191
|
+
return { type: SpecType.OPENAPI_3, confidence: "high", version: value };
|
|
192
|
+
}
|
|
193
|
+
if (key === "asyncapi") {
|
|
194
|
+
const major = parseInt(value.split(".")[0], 10);
|
|
195
|
+
return {
|
|
196
|
+
type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,
|
|
197
|
+
confidence: "high",
|
|
198
|
+
version: value
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
function detectFromXml(content) {
|
|
205
|
+
if (content.includes("<definitions") || content.includes("<wsdl:definitions")) {
|
|
206
|
+
return { type: SpecType.SOAP_WSDL, confidence: "high" };
|
|
207
|
+
}
|
|
208
|
+
if (content.includes("<description") && content.includes("wsdl")) {
|
|
209
|
+
return { type: SpecType.SOAP_WSDL, confidence: "medium" };
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
function isGraphQLSDL(content) {
|
|
214
|
+
const sdlPatterns = [
|
|
215
|
+
/^\s*type\s+Query\s*\{/m,
|
|
216
|
+
/^\s*schema\s*\{/m,
|
|
217
|
+
/^\s*type\s+\w+\s*(implements\s+\w+)?\s*\{/m,
|
|
218
|
+
/^\s*directive\s+@/m,
|
|
219
|
+
/^\s*enum\s+\w+\s*\{/m,
|
|
220
|
+
/^\s*input\s+\w+\s*\{/m,
|
|
221
|
+
/^\s*interface\s+\w+\s*\{/m,
|
|
222
|
+
/^\s*union\s+\w+\s*=/m
|
|
223
|
+
];
|
|
224
|
+
let matchCount = 0;
|
|
225
|
+
for (const pattern of sdlPatterns) {
|
|
226
|
+
if (pattern.test(content)) matchCount++;
|
|
227
|
+
}
|
|
228
|
+
return matchCount >= 2;
|
|
229
|
+
}
|
|
230
|
+
function isProtoBuf(content) {
|
|
231
|
+
if (/^\s*syntax\s*=\s*"proto[23]"\s*;/m.test(content)) return true;
|
|
232
|
+
const hasServiceRpc = /\bservice\s+\w+\s*\{/.test(content) && /\brpc\s+\w+\s*\(/.test(content);
|
|
233
|
+
const hasMessage = /\bmessage\s+\w+\s*\{/.test(content);
|
|
234
|
+
return hasServiceRpc && hasMessage;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function useSpecDetector(content, hintType) {
|
|
238
|
+
return useMemo(() => {
|
|
239
|
+
if (hintType && content) {
|
|
240
|
+
return { type: hintType, confidence: "high" };
|
|
241
|
+
}
|
|
242
|
+
if (!content) return null;
|
|
243
|
+
return detectSpecType(content);
|
|
244
|
+
}, [content, hintType]);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export { UpgradePrompt as U, detectSpecType as d, useSpecDetector as u };
|
|
248
|
+
//# sourceMappingURL=useSpecDetector-5SGcKnJx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSpecDetector-5SGcKnJx.js","sources":["../../../src/core/components/common/UpgradePrompt.tsx","../../../src/core/utils/detect-spec.ts","../../../src/core/hooks/useSpecDetector.ts"],"sourcesContent":["/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { css } from '@core/styles/css'\nimport { Icon } from '@core/components/common/Icon'\nimport { Button } from '@core/components/common/Button'\nimport type { SpecType } from '@core/types/spec-detection.types'\n\nconst specTypeLabels: Partial<Record<SpecType, string>> = {\n 'graphql-sdl': 'GraphQL',\n 'graphql-introspection': 'GraphQL',\n 'soap-wsdl': 'SOAP/WSDL',\n 'grpc-proto': 'gRPC/Protobuf',\n}\n\ninterface UpgradePromptProps {\n specType: SpecType\n docsUrl?: string\n upgradeUrl?: string\n}\n\nexport function UpgradePrompt({ specType, docsUrl, upgradeUrl }: UpgradePromptProps) {\n const label = specTypeLabels[specType] ?? specType\n\n return (\n <div className={containerStyle}>\n <div className={cardStyle}>\n <div className={iconWrapperStyle}>\n <Icon name=\"info\" size=\"1.5rem\" />\n </div>\n <h2 className={titleStyle}>{label} specification detected</h2>\n <p className={descStyle}>\n Rendering {label}, along with GraphQL, SOAP, and gRPC specifications,\n requires <code className={codeStyle}>@apiboost/omnispec-pro</code>.\n </p>\n <pre className={installStyle}>npm install @apiboost/omnispec-pro</pre>\n <div className={actionsStyle}>\n {docsUrl && (\n <a href={docsUrl} className={linkStyle} target=\"_blank\" rel=\"noopener noreferrer\">\n View documentation <Icon name=\"external-link\" size=\"0.75rem\" />\n </a>\n )}\n {upgradeUrl && (\n <Button variant=\"primary\" href={upgradeUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n Upgrade now <Icon name=\"external-link\" size=\"0.75rem\" />\n </Button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nconst containerStyle = css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 1,\n minHeight: '20rem',\n padding: '2rem',\n})\n\nconst cardStyle = css({\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '0.75rem',\n maxWidth: '32rem',\n textAlign: 'center',\n padding: '2.5rem 2rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-secondary)',\n boxShadow: '0 0.0625rem 0.25rem rgba(0, 0, 0, 0.08)',\n})\n\nconst iconWrapperStyle = css({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '3rem',\n height: '3rem',\n borderRadius: '50%',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n color: 'var(--omnispec-color-info)',\n})\n\nconst titleStyle = css({\n margin: 0,\n fontSize: 'var(--omnispec-font-size-lg)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst descStyle = css({\n margin: 0,\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n lineHeight: 1.6,\n})\n\nconst codeStyle = css({\n backgroundColor: 'var(--omnispec-bg-code)',\n color: 'var(--omnispec-fg-code)',\n padding: '0.125rem 0.375rem',\n borderRadius: '0.25rem',\n fontSize: '0.875em',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst installStyle = css({\n margin: 0,\n padding: '0.625rem 1rem',\n backgroundColor: 'var(--omnispec-bg-code)',\n color: 'var(--omnispec-fg-primary)',\n borderRadius: 'var(--omnispec-border-radius)',\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-sm)',\n userSelect: 'all',\n})\n\nconst actionsStyle = css({\n display: 'flex',\n gap: '1rem',\n marginTop: '0.5rem',\n flexWrap: 'wrap',\n justifyContent: 'center',\n})\n\nconst linkStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-link)',\n textDecoration: 'none',\n fontWeight: 500,\n '&:hover': {\n textDecoration: 'underline',\n },\n})\n","/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { SpecType } from '../types/spec-detection.types'\nimport type { SpecDetectionResult } from '../types/spec-detection.types'\n\nexport function detectSpecType(content: string | Record<string, unknown>): SpecDetectionResult | null {\n if (typeof content === 'object') {\n return detectFromObject(content)\n }\n\n const trimmed = content.trim()\n\n // Try JSON parse\n try {\n const parsed = JSON.parse(trimmed)\n return detectFromObject(parsed)\n } catch {\n // Not JSON\n }\n\n // Try YAML detection (look for top-level keys without braces)\n const yamlResult = detectFromYamlString(trimmed)\n if (yamlResult) return yamlResult\n\n // Try XML detection (WSDL)\n if (trimmed.startsWith('<') || trimmed.startsWith('<?xml')) {\n return detectFromXml(trimmed)\n }\n\n // Try Protocol Buffers detection (before GraphQL — both use keyword matching)\n if (isProtoBuf(trimmed)) {\n return {\n type: SpecType.GRPC_PROTO,\n confidence: 'high',\n }\n }\n\n // Try GraphQL SDL detection\n if (isGraphQLSDL(trimmed)) {\n return {\n type: SpecType.GRAPHQL_SDL,\n confidence: 'medium',\n }\n }\n\n return null\n}\n\nfunction detectFromObject(obj: Record<string, unknown>): SpecDetectionResult | null {\n // OpenAPI 2.x (Swagger)\n if ('swagger' in obj && typeof obj.swagger === 'string') {\n return {\n type: SpecType.OPENAPI_2,\n confidence: 'high',\n version: obj.swagger as string,\n }\n }\n\n // OpenAPI 3.x\n if ('openapi' in obj && typeof obj.openapi === 'string') {\n return {\n type: SpecType.OPENAPI_3,\n confidence: 'high',\n version: obj.openapi as string,\n }\n }\n\n // AsyncAPI\n if ('asyncapi' in obj && typeof obj.asyncapi === 'string') {\n const version = obj.asyncapi as string\n const major = parseInt(version.split('.')[0], 10)\n return {\n type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,\n confidence: 'high',\n version,\n }\n }\n\n // GraphQL introspection result\n if ('__schema' in obj || ('data' in obj && typeof obj.data === 'object' && obj.data !== null && '__schema' in (obj.data as Record<string, unknown>))) {\n return {\n type: SpecType.GRAPHQL_INTROSPECTION,\n confidence: 'high',\n }\n }\n\n return null\n}\n\nfunction detectFromYamlString(content: string): SpecDetectionResult | null {\n // Simple YAML key detection without a full parser\n const lines = content.split('\\n').slice(0, 20)\n\n for (const line of lines) {\n const match = line.match(/^(\\w+)\\s*:\\s*['\"]?([^'\"#\\s]+)/)\n if (!match) continue\n\n const [, key, value] = match\n\n if (key === 'swagger') {\n return { type: SpecType.OPENAPI_2, confidence: 'high', version: value }\n }\n if (key === 'openapi') {\n return { type: SpecType.OPENAPI_3, confidence: 'high', version: value }\n }\n if (key === 'asyncapi') {\n const major = parseInt(value.split('.')[0], 10)\n return {\n type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,\n confidence: 'high',\n version: value,\n }\n }\n }\n\n return null\n}\n\nfunction detectFromXml(content: string): SpecDetectionResult | null {\n // WSDL 1.1: <definitions> or <wsdl:definitions>\n if (content.includes('<definitions') || content.includes('<wsdl:definitions')) {\n return { type: SpecType.SOAP_WSDL, confidence: 'high' }\n }\n // WSDL 2.0: <description>\n if (content.includes('<description') && content.includes('wsdl')) {\n return { type: SpecType.SOAP_WSDL, confidence: 'medium' }\n }\n return null\n}\n\nfunction isGraphQLSDL(content: string): boolean {\n const sdlPatterns = [\n /^\\s*type\\s+Query\\s*\\{/m,\n /^\\s*schema\\s*\\{/m,\n /^\\s*type\\s+\\w+\\s*(implements\\s+\\w+)?\\s*\\{/m,\n /^\\s*directive\\s+@/m,\n /^\\s*enum\\s+\\w+\\s*\\{/m,\n /^\\s*input\\s+\\w+\\s*\\{/m,\n /^\\s*interface\\s+\\w+\\s*\\{/m,\n /^\\s*union\\s+\\w+\\s*=/m,\n ]\n\n let matchCount = 0\n for (const pattern of sdlPatterns) {\n if (pattern.test(content)) matchCount++\n }\n\n return matchCount >= 2\n}\n\nfunction isProtoBuf(content: string): boolean {\n // Proto files have a distinctive syntax: \"syntax = \"proto3\";\" or service/rpc/message keywords\n if (/^\\s*syntax\\s*=\\s*\"proto[23]\"\\s*;/m.test(content)) return true\n // Fallback: must have both service+rpc and message keywords\n const hasServiceRpc = /\\bservice\\s+\\w+\\s*\\{/.test(content) && /\\brpc\\s+\\w+\\s*\\(/.test(content)\n const hasMessage = /\\bmessage\\s+\\w+\\s*\\{/.test(content)\n return hasServiceRpc && hasMessage\n}\n","/**\n * This source file is part of the Apiboost(R) OmniSpec Core.\n *\n * Copyright (c) Apiboost, Inc.\n *\n * SPDX-License-Identifier: Apache-2.0\n *\n * See LICENSE.md and LICENSING.md in the project root for license information.\n */\n\nimport { useMemo } from 'react'\nimport type { SpecDetectionResult } from '../types/spec-detection.types'\nimport type { SpecType } from '../types/spec-detection.types'\nimport { detectSpecType } from '../utils/detect-spec'\n\nexport function useSpecDetector(\n content: string | Record<string, unknown> | null,\n hintType?: SpecType,\n): SpecDetectionResult | null {\n return useMemo(() => {\n if (hintType && content) {\n return { type: hintType, confidence: 'high' as const }\n }\n if (!content) return null\n return detectSpecType(content)\n }, [content, hintType])\n}\n"],"names":[],"mappings":";;;;;AAeA,MAAM,cAAA,GAAoD;AAAA,EACxD,aAAA,EAAe,SAAA;AAAA,EACf,uBAAA,EAAyB,SAAA;AAAA,EACzB,WAAA,EAAa,WAAA;AAAA,EACb,YAAA,EAAc;AAChB,CAAA;AAQO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,OAAA,EAAS,YAAW,EAAuB;AACnF,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,QAAQ,CAAA,IAAK,QAAA;AAE1C,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,gBACd,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAW,SAAA,EACd,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,gBAAA,EACd,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,QAAA,EAAS,CAAA,EAClC,CAAA;AAAA,oBACA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,UAAA,EAAa,QAAA,EAAA;AAAA,MAAA,KAAA;AAAA,MAAM;AAAA,KAAA,EAAuB,CAAA;AAAA,oBACzD,IAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,SAAA,EAAW,QAAA,EAAA;AAAA,MAAA,YAAA;AAAA,MACZ,KAAA;AAAA,MAAM,gEAAA;AAAA,sBACR,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EAAW,QAAA,EAAA,wBAAA,EAAsB,CAAA;AAAA,MAAO;AAAA,KAAA,EACpE,CAAA;AAAA,oBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EAAc,QAAA,EAAA,oCAAA,EAAkC,CAAA;AAAA,oBAChE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EACb,QAAA,EAAA;AAAA,MAAA,OAAA,oBACC,IAAA,CAAC,OAAE,IAAA,EAAM,OAAA,EAAS,WAAW,SAAA,EAAW,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,qBAAA,EAAsB,QAAA,EAAA;AAAA,QAAA,qBAAA;AAAA,wBAC7D,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,MAAK,SAAA,EAAU;AAAA,OAAA,EAC/D,CAAA;AAAA,MAED,UAAA,oBACC,IAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,MAAM,UAAA,EAAY,MAAA,EAAO,QAAA,EAAS,GAAA,EAAI,qBAAA,EAAsB,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,wBACxE,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,eAAA,EAAgB,MAAK,SAAA,EAAU;AAAA,OAAA,EACxD;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,MAAM,iBAAiB,GAAA,CAAI;AAAA,EACzB,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,IAAA,EAAM,CAAA;AAAA,EACN,SAAA,EAAW,OAAA;AAAA,EACX,OAAA,EAAS;AACX,CAAC,CAAA;AAED,MAAM,YAAY,GAAA,CAAI;AAAA,EACpB,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,SAAA;AAAA,EACL,QAAA,EAAU,OAAA;AAAA,EACV,SAAA,EAAW,QAAA;AAAA,EACX,OAAA,EAAS,aAAA;AAAA,EACT,YAAA,EAAc,+BAAA;AAAA,EACd,eAAA,EAAiB,8BAAA;AAAA,EACjB,SAAA,EAAW;AACb,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAA,CAAI;AAAA,EAC3B,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,cAAA,EAAgB,QAAA;AAAA,EAChB,KAAA,EAAO,MAAA;AAAA,EACP,MAAA,EAAQ,MAAA;AAAA,EACR,YAAA,EAAc,KAAA;AAAA,EACd,eAAA,EAAiB,6BAAA;AAAA,EACjB,KAAA,EAAO;AACT,CAAC,CAAA;AAED,MAAM,aAAa,GAAA,CAAI;AAAA,EACrB,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,8BAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO;AACT,CAAC,CAAA;AAED,MAAM,YAAY,GAAA,CAAI;AAAA,EACpB,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,8BAAA;AAAA,EACV,KAAA,EAAO,8BAAA;AAAA,EACP,UAAA,EAAY;AACd,CAAC,CAAA;AAED,MAAM,YAAY,GAAA,CAAI;AAAA,EACpB,eAAA,EAAiB,yBAAA;AAAA,EACjB,KAAA,EAAO,yBAAA;AAAA,EACP,OAAA,EAAS,mBAAA;AAAA,EACT,YAAA,EAAc,SAAA;AAAA,EACd,QAAA,EAAU,SAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAC,CAAA;AAED,MAAM,eAAe,GAAA,CAAI;AAAA,EACvB,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,eAAA;AAAA,EACT,eAAA,EAAiB,yBAAA;AAAA,EACjB,KAAA,EAAO,4BAAA;AAAA,EACP,YAAA,EAAc,+BAAA;AAAA,EACd,UAAA,EAAY,2BAAA;AAAA,EACZ,QAAA,EAAU,8BAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAC,CAAA;AAED,MAAM,eAAe,GAAA,CAAI;AAAA,EACvB,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,MAAA;AAAA,EACL,SAAA,EAAW,QAAA;AAAA,EACX,QAAA,EAAU,MAAA;AAAA,EACV,cAAA,EAAgB;AAClB,CAAC,CAAA;AAED,MAAM,YAAY,GAAA,CAAI;AAAA,EACpB,OAAA,EAAS,aAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,UAAA;AAAA,EACL,QAAA,EAAU,8BAAA;AAAA,EACV,KAAA,EAAO,yBAAA;AAAA,EACP,cAAA,EAAgB,MAAA;AAAA,EAChB,UAAA,EAAY,GAAA;AAAA,EACZ,SAAA,EAAW;AAAA,IACT,cAAA,EAAgB;AAAA;AAEpB,CAAC,CAAA;;ACrIM,SAAS,eAAe,OAAA,EAAuE;AACpG,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,OAAA,GAAU,QAAQ,IAAA,EAAK;AAG7B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,EAChC,CAAA,CAAA,MAAQ;AAAA,EAER;AAGA,EAAA,MAAM,UAAA,GAAa,qBAAqB,OAAO,CAAA;AAC/C,EAAA,IAAI,YAAY,OAAO,UAAA;AAGvB,EAAA,IAAI,QAAQ,UAAA,CAAW,GAAG,KAAK,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1D,IAAA,OAAO,cAAc,OAAO,CAAA;AAAA,EAC9B;AAGA,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,UAAA;AAAA,MACf,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAGA,EAAA,IAAI,YAAA,CAAa,OAAO,CAAA,EAAG;AACzB,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,WAAA;AAAA,MACf,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAiB,GAAA,EAA0D;AAElF,EAAA,IAAI,SAAA,IAAa,GAAA,IAAO,OAAO,GAAA,CAAI,YAAY,QAAA,EAAU;AACvD,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,SAAA;AAAA,MACf,UAAA,EAAY,MAAA;AAAA,MACZ,SAAS,GAAA,CAAI;AAAA,KACf;AAAA,EACF;AAGA,EAAA,IAAI,SAAA,IAAa,GAAA,IAAO,OAAO,GAAA,CAAI,YAAY,QAAA,EAAU;AACvD,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,SAAA;AAAA,MACf,UAAA,EAAY,MAAA;AAAA,MACZ,SAAS,GAAA,CAAI;AAAA,KACf;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,IAAc,GAAA,IAAO,OAAO,GAAA,CAAI,aAAa,QAAA,EAAU;AACzD,IAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AACpB,IAAA,MAAM,KAAA,GAAQ,SAAS,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAG,EAAE,CAAA;AAChD,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,KAAA,IAAS,CAAA,GAAI,QAAA,CAAS,aAAa,QAAA,CAAS,UAAA;AAAA,MAClD,UAAA,EAAY,MAAA;AAAA,MACZ;AAAA,KACF;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,IAAc,GAAA,IAAQ,MAAA,IAAU,GAAA,IAAO,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,GAAA,CAAI,IAAA,KAAS,IAAA,IAAQ,UAAA,IAAe,IAAI,IAAA,EAAmC;AACpJ,IAAA,OAAO;AAAA,MACL,MAAM,QAAA,CAAS,qBAAA;AAAA,MACf,UAAA,EAAY;AAAA,KACd;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,qBAAqB,OAAA,EAA6C;AAEzE,EAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAE7C,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AACxD,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,GAAG,GAAA,EAAK,KAAK,CAAA,GAAI,KAAA;AAEvB,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,WAAW,UAAA,EAAY,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,IACxE;AACA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,WAAW,UAAA,EAAY,MAAA,EAAQ,SAAS,KAAA,EAAM;AAAA,IACxE;AACA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,GAAG,EAAE,CAAA;AAC9C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,KAAA,IAAS,CAAA,GAAI,QAAA,CAAS,aAAa,QAAA,CAAS,UAAA;AAAA,QAClD,UAAA,EAAY,MAAA;AAAA,QACZ,OAAA,EAAS;AAAA,OACX;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,cAAc,OAAA,EAA6C;AAElE,EAAA,IAAI,QAAQ,QAAA,CAAS,cAAc,KAAK,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAC7E,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,SAAA,EAAW,YAAY,MAAA,EAAO;AAAA,EACxD;AAEA,EAAA,IAAI,QAAQ,QAAA,CAAS,cAAc,KAAK,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,EAAG;AAChE,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,SAAA,EAAW,YAAY,QAAA,EAAS;AAAA,EAC1D;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,OAAA,EAA0B;AAC9C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,wBAAA;AAAA,IACA,kBAAA;AAAA,IACA,4CAAA;AAAA,IACA,oBAAA;AAAA,IACA,sBAAA;AAAA,IACA,uBAAA;AAAA,IACA,2BAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,KAAA,MAAW,WAAW,WAAA,EAAa;AACjC,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG,UAAA,EAAA;AAAA,EAC7B;AAEA,EAAA,OAAO,UAAA,IAAc,CAAA;AACvB;AAEA,SAAS,WAAW,OAAA,EAA0B;AAE5C,EAAA,IAAI,mCAAA,CAAoC,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA;AAE9D,EAAA,MAAM,gBAAgB,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA,IAAK,kBAAA,CAAmB,KAAK,OAAO,CAAA;AAC7F,EAAA,MAAM,UAAA,GAAa,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AACtD,EAAA,OAAO,aAAA,IAAiB,UAAA;AAC1B;;ACtJO,SAAS,eAAA,CACd,SACA,QAAA,EAC4B;AAC5B,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,UAAA,EAAY,MAAA,EAAgB;AAAA,IACvD;AACA,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,OAAO,eAAe,OAAO,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,OAAA,EAAS,QAAQ,CAAC,CAAA;AACxB;;;;"}
|