@apiboost/omnispec 1.1.0-next.1 → 1.1.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cjs/asyncapi/index.js +4 -4
  2. package/dist/cjs/chunks/{AsyncApiSpec-CHvM1swf.js → AsyncApiSpec-BzgUioEK.js} +872 -151
  3. package/dist/cjs/chunks/AsyncApiSpec-BzgUioEK.js.map +1 -0
  4. package/dist/cjs/chunks/{Collapsible-Jlb_vtdW.js → Collapsible-BTWyDBkX.js} +161 -2
  5. package/dist/cjs/chunks/Collapsible-BTWyDBkX.js.map +1 -0
  6. package/dist/cjs/chunks/{ErrorBoundary-c1piU8da.js → ErrorBoundary-CezYgQDG.js} +2 -2
  7. package/dist/cjs/chunks/{ErrorBoundary-c1piU8da.js.map → ErrorBoundary-CezYgQDG.js.map} +1 -1
  8. package/dist/cjs/chunks/{OmniSpecRenderer-Dj6Z6W2J.js → OmniSpecRenderer-CRipDRtC.js} +6 -6
  9. package/dist/cjs/chunks/{OmniSpecRenderer-Dj6Z6W2J.js.map → OmniSpecRenderer-CRipDRtC.js.map} +1 -1
  10. package/dist/cjs/chunks/{OpenApiSpec-BPtXvk7C.js → OpenApiSpec-BOlesoUX.js} +7 -7
  11. package/dist/cjs/chunks/OpenApiSpec-BOlesoUX.js.map +1 -0
  12. package/dist/cjs/chunks/{OpenIdConnectManual-DBP0Do-3.js → OpenIdConnectManual-Bh7tdxoH.js} +3 -162
  13. package/dist/cjs/chunks/OpenIdConnectManual-Bh7tdxoH.js.map +1 -0
  14. package/dist/cjs/chunks/{useSpecDetector-A4OwYrmY.js → useSpecDetector-BemsWW9u.js} +2 -2
  15. package/dist/cjs/chunks/{useSpecDetector-A4OwYrmY.js.map → useSpecDetector-BemsWW9u.js.map} +1 -1
  16. package/dist/cjs/chunks/{useSpecFetcher-BKz1jHTV.js → useSpecFetcher-BAbHnXax.js} +28 -1
  17. package/dist/{esm/chunks/useSpecFetcher-CZvAnU7Z.js.map → cjs/chunks/useSpecFetcher-BAbHnXax.js.map} +1 -1
  18. package/dist/cjs/core/public.js +5 -5
  19. package/dist/cjs/index.js +8 -8
  20. package/dist/cjs/openapi/index.js +5 -5
  21. package/dist/cjs/wc/index.js +4 -4
  22. package/dist/esm/asyncapi/index.js +4 -4
  23. package/dist/esm/chunks/{AsyncApiSpec-BPiA9b5T.js → AsyncApiSpec-B757IIHz.js} +880 -159
  24. package/dist/esm/chunks/AsyncApiSpec-B757IIHz.js.map +1 -0
  25. package/dist/esm/chunks/{Collapsible-0ryLh6wX.js → Collapsible-MyJB2agz.js} +161 -3
  26. package/dist/esm/chunks/Collapsible-MyJB2agz.js.map +1 -0
  27. package/dist/esm/chunks/{ErrorBoundary-posRNrbt.js → ErrorBoundary-9pDlZFfM.js} +2 -2
  28. package/dist/esm/chunks/{ErrorBoundary-posRNrbt.js.map → ErrorBoundary-9pDlZFfM.js.map} +1 -1
  29. package/dist/esm/chunks/{OmniSpecRenderer-yF2Zw_B9.js → OmniSpecRenderer-5RUZx-C7.js} +6 -6
  30. package/dist/esm/chunks/{OmniSpecRenderer-yF2Zw_B9.js.map → OmniSpecRenderer-5RUZx-C7.js.map} +1 -1
  31. package/dist/esm/chunks/{OpenApiSpec-MGJ3oFHZ.js → OpenApiSpec-wm3tH2vF.js} +5 -5
  32. package/dist/esm/chunks/OpenApiSpec-wm3tH2vF.js.map +1 -0
  33. package/dist/esm/chunks/{OpenIdConnectManual-BS-n811Z.js → OpenIdConnectManual-DPmTIIIy.js} +4 -162
  34. package/dist/esm/chunks/OpenIdConnectManual-DPmTIIIy.js.map +1 -0
  35. package/dist/esm/chunks/{useSpecDetector-5SGcKnJx.js → useSpecDetector-BJBNbfN5.js} +2 -2
  36. package/dist/esm/chunks/{useSpecDetector-5SGcKnJx.js.map → useSpecDetector-BJBNbfN5.js.map} +1 -1
  37. package/dist/esm/chunks/{useSpecFetcher-CZvAnU7Z.js → useSpecFetcher-BvVfMuzf.js} +28 -1
  38. package/dist/{cjs/chunks/useSpecFetcher-BKz1jHTV.js.map → esm/chunks/useSpecFetcher-BvVfMuzf.js.map} +1 -1
  39. package/dist/esm/core/public.js +4 -4
  40. package/dist/esm/index.js +8 -8
  41. package/dist/esm/openapi/index.js +5 -5
  42. package/dist/esm/wc/index.js +4 -4
  43. package/dist/types/asyncapi/AsyncApiSpec.d.ts +1 -1
  44. package/dist/types/asyncapi/AsyncApiSpec.d.ts.map +1 -1
  45. package/dist/types/asyncapi/components/AsyncOverview.d.ts.map +1 -1
  46. package/dist/types/asyncapi/components/ChannelDetail.d.ts +6 -1
  47. package/dist/types/asyncapi/components/ChannelDetail.d.ts.map +1 -1
  48. package/dist/types/asyncapi/components/ChannelReferenceDetail.d.ts +35 -0
  49. package/dist/types/asyncapi/components/ChannelReferenceDetail.d.ts.map +1 -0
  50. package/dist/types/asyncapi/components/ComponentsSection.d.ts.map +1 -1
  51. package/dist/types/asyncapi/components/ExternalDocsLink.d.ts +29 -0
  52. package/dist/types/asyncapi/components/ExternalDocsLink.d.ts.map +1 -0
  53. package/dist/types/asyncapi/components/MessagePayload.d.ts.map +1 -1
  54. package/dist/types/asyncapi/components/SecurityRequirementBadges.d.ts +13 -6
  55. package/dist/types/asyncapi/components/SecurityRequirementBadges.d.ts.map +1 -1
  56. package/dist/types/asyncapi/components/TagGroupHeader.d.ts +1 -1
  57. package/dist/types/asyncapi/components/TagGroupHeader.d.ts.map +1 -1
  58. package/dist/types/asyncapi/components/field-display.d.ts +11 -1
  59. package/dist/types/asyncapi/components/field-display.d.ts.map +1 -1
  60. package/dist/types/asyncapi/parser/asyncapi-parser.d.ts.map +1 -1
  61. package/dist/types/asyncapi/tag-grouping.d.ts +5 -1
  62. package/dist/types/asyncapi/tag-grouping.d.ts.map +1 -1
  63. package/dist/types/asyncapi/types/asyncapi.types.d.ts +37 -8
  64. package/dist/types/asyncapi/types/asyncapi.types.d.ts.map +1 -1
  65. package/dist/types/core/components/Layout/DocLayout.d.ts.map +1 -1
  66. package/dist/types/core/types/auth.types.d.ts +1 -1
  67. package/dist/wc/standalone.js +1 -1
  68. package/dist/wc/standalone.js.map +1 -1
  69. package/package.json +1 -1
  70. package/dist/cjs/chunks/AsyncApiSpec-CHvM1swf.js.map +0 -1
  71. package/dist/cjs/chunks/Collapsible-Jlb_vtdW.js.map +0 -1
  72. package/dist/cjs/chunks/OpenApiSpec-BPtXvk7C.js.map +0 -1
  73. package/dist/cjs/chunks/OpenIdConnectManual-DBP0Do-3.js.map +0 -1
  74. package/dist/esm/chunks/AsyncApiSpec-BPiA9b5T.js.map +0 -1
  75. package/dist/esm/chunks/Collapsible-0ryLh6wX.js.map +0 -1
  76. package/dist/esm/chunks/OpenApiSpec-MGJ3oFHZ.js.map +0 -1
  77. package/dist/esm/chunks/OpenIdConnectManual-BS-n811Z.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { css } from '@emotion/css';
3
- import { I as Icon, B as Button, S as SpecType } from './useSpecFetcher-CZvAnU7Z.js';
3
+ import { I as Icon, B as Button, S as SpecType } from './useSpecFetcher-BvVfMuzf.js';
4
4
  import { useMemo } from 'react';
5
5
 
6
6
  const specTypeLabels = {
@@ -245,4 +245,4 @@ function useSpecDetector(content, hintType) {
245
245
  }
246
246
 
247
247
  export { UpgradePrompt as U, detectSpecType as d, useSpecDetector as u };
248
- //# sourceMappingURL=useSpecDetector-5SGcKnJx.js.map
248
+ //# sourceMappingURL=useSpecDetector-BJBNbfN5.js.map
@@ -1 +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":"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"}
1
+ {"version":3,"file":"useSpecDetector-BJBNbfN5.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":"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"}
@@ -12455,6 +12455,10 @@ function DocLayout({
12455
12455
  }) {
12456
12456
  const [sidebarOpen, setSidebarOpen] = useState(true);
12457
12457
  const [mobileSidebarOpen, setMobileSidebarOpen] = useState(false);
12458
+ const drawerRef = useRef(null);
12459
+ const drawerCloseRef = useRef(null);
12460
+ const drawerTriggerRef = useRef(null);
12461
+ const mobileToggleRef = useRef(null);
12458
12462
  const isRight = sidebarPosition === "right";
12459
12463
  const hasSidebar = Boolean(sidebar || sidebarHeader || sidebarFooter);
12460
12464
  const { premiumThemingEnabled } = useConfig();
@@ -12478,6 +12482,22 @@ function DocLayout({
12478
12482
  document.body.style.overflow = "";
12479
12483
  };
12480
12484
  }, [mobileSidebarOpen]);
12485
+ useEffect(() => {
12486
+ if (mobileSidebarOpen) {
12487
+ drawerTriggerRef.current = document.activeElement;
12488
+ const target = drawerCloseRef.current ?? drawerRef.current;
12489
+ target?.focus();
12490
+ return void 0;
12491
+ }
12492
+ const live = mobileToggleRef.current;
12493
+ const original = drawerTriggerRef.current;
12494
+ if (live && document.contains(live)) {
12495
+ live.focus();
12496
+ } else if (original && typeof original.focus === "function" && document.contains(original)) {
12497
+ original.focus();
12498
+ }
12499
+ return void 0;
12500
+ }, [mobileSidebarOpen]);
12481
12501
  const sidebarContent = useMemo(() => /* @__PURE__ */ jsxs(Fragment, { children: [
12482
12502
  /* @__PURE__ */ jsxs("div", { className: sidebarScrollZone, children: [
12483
12503
  (sidebarHeader || sidebarFooter) && /* @__PURE__ */ jsxs("div", { className: sidebarHeaderZone, children: [
@@ -12566,10 +12586,13 @@ function DocLayout({
12566
12586
  !mobileSidebarOpen && /* @__PURE__ */ jsx(
12567
12587
  motion.button,
12568
12588
  {
12589
+ ref: mobileToggleRef,
12569
12590
  type: "button",
12570
12591
  onClick: () => setMobileSidebarOpen(true),
12571
12592
  className: mobileToggleStyle,
12572
12593
  "aria-label": "Open navigation",
12594
+ "aria-expanded": mobileSidebarOpen,
12595
+ "aria-haspopup": "dialog",
12573
12596
  initial: { opacity: 0, scale: 0.8 },
12574
12597
  animate: { opacity: 1, scale: 1 },
12575
12598
  exit: { opacity: 0, scale: 0.8 },
@@ -12594,10 +12617,12 @@ function DocLayout({
12594
12617
  mobileSidebarOpen && /* @__PURE__ */ jsxs(
12595
12618
  motion.aside,
12596
12619
  {
12620
+ ref: drawerRef,
12597
12621
  className: mobileDrawerStyle,
12598
12622
  role: "dialog",
12599
12623
  "aria-modal": "true",
12600
12624
  "aria-label": "Navigation",
12625
+ tabIndex: -1,
12601
12626
  onClick: handleDrawerClick,
12602
12627
  initial: { x: "-100%" },
12603
12628
  animate: { x: 0 },
@@ -12607,6 +12632,7 @@ function DocLayout({
12607
12632
  /* @__PURE__ */ jsx(
12608
12633
  "button",
12609
12634
  {
12635
+ ref: drawerCloseRef,
12610
12636
  type: "button",
12611
12637
  onClick: () => setMobileSidebarOpen(false),
12612
12638
  className: mobileCloseStyle,
@@ -13019,6 +13045,7 @@ function NavTreeItem({ item, activeId, onSelect, depth, parentToggleOnly }) {
13019
13045
  {
13020
13046
  type: "button",
13021
13047
  onClick: handleClick,
13048
+ "aria-expanded": hasChildren ? expanded : void 0,
13022
13049
  className: cx(
13023
13050
  css({
13024
13051
  ...itemBaseStyles,
@@ -13622,4 +13649,4 @@ function useSpecFetcher(spec, parse) {
13622
13649
  }
13623
13650
 
13624
13651
  export { Button as B, ConfigProvider as C, DEFAULT_SCHEMA_STYLE as D, ErrorMessage as E, FREE_SCHEMA_STYLES as F, Icon as I, LoadingScreen as L, NavTree as N, SpecType as S, ThemeProvider as T, useSpecFetcher as a, SpecStatusScreen as b, CustomNavSection as c, darkTheme as d, DocLayout as e, fetchSpec as f, breakpoints as g, buildSidebar as h, isSidebarNavGroup as i, useConfig as j, lightTheme as l, mq as m, resolveSchemaStyle as r, useTheme as u };
13625
- //# sourceMappingURL=useSpecFetcher-CZvAnU7Z.js.map
13652
+ //# sourceMappingURL=useSpecFetcher-BvVfMuzf.js.map