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

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-Bj1F8C5K.js} +868 -147
  3. package/dist/cjs/chunks/AsyncApiSpec-Bj1F8C5K.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-CghCPNuw.js} +6 -6
  9. package/dist/cjs/chunks/{OmniSpecRenderer-Dj6Z6W2J.js.map → OmniSpecRenderer-CghCPNuw.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-BzhfaQ_T.js} +876 -155
  24. package/dist/esm/chunks/AsyncApiSpec-BzhfaQ_T.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-BUJSl_2I.js} +6 -6
  30. package/dist/esm/chunks/{OmniSpecRenderer-yF2Zw_B9.js.map → OmniSpecRenderer-BUJSl_2I.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
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var css = require('@emotion/css');
5
- var useSpecFetcher = require('./useSpecFetcher-BKz1jHTV.js');
5
+ var useSpecFetcher = require('./useSpecFetcher-BAbHnXax.js');
6
6
  var React = require('react');
7
7
 
8
8
  const specTypeLabels = {
@@ -249,4 +249,4 @@ function useSpecDetector(content, hintType) {
249
249
  exports.UpgradePrompt = UpgradePrompt;
250
250
  exports.detectSpecType = detectSpecType;
251
251
  exports.useSpecDetector = useSpecDetector;
252
- //# sourceMappingURL=useSpecDetector-A4OwYrmY.js.map
252
+ //# sourceMappingURL=useSpecDetector-BemsWW9u.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSpecDetector-A4OwYrmY.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":["jsxs","jsx","Icon","Button","css","SpecType","useMemo"],"mappings":"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"}
1
+ {"version":3,"file":"useSpecDetector-BemsWW9u.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":["jsxs","jsx","Icon","Button","css","SpecType","useMemo"],"mappings":"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"}
@@ -12476,6 +12476,10 @@ function DocLayout({
12476
12476
  }) {
12477
12477
  const [sidebarOpen, setSidebarOpen] = React.useState(true);
12478
12478
  const [mobileSidebarOpen, setMobileSidebarOpen] = React.useState(false);
12479
+ const drawerRef = React.useRef(null);
12480
+ const drawerCloseRef = React.useRef(null);
12481
+ const drawerTriggerRef = React.useRef(null);
12482
+ const mobileToggleRef = React.useRef(null);
12479
12483
  const isRight = sidebarPosition === "right";
12480
12484
  const hasSidebar = Boolean(sidebar || sidebarHeader || sidebarFooter);
12481
12485
  const { premiumThemingEnabled } = useConfig();
@@ -12499,6 +12503,22 @@ function DocLayout({
12499
12503
  document.body.style.overflow = "";
12500
12504
  };
12501
12505
  }, [mobileSidebarOpen]);
12506
+ React.useEffect(() => {
12507
+ if (mobileSidebarOpen) {
12508
+ drawerTriggerRef.current = document.activeElement;
12509
+ const target = drawerCloseRef.current ?? drawerRef.current;
12510
+ target?.focus();
12511
+ return void 0;
12512
+ }
12513
+ const live = mobileToggleRef.current;
12514
+ const original = drawerTriggerRef.current;
12515
+ if (live && document.contains(live)) {
12516
+ live.focus();
12517
+ } else if (original && typeof original.focus === "function" && document.contains(original)) {
12518
+ original.focus();
12519
+ }
12520
+ return void 0;
12521
+ }, [mobileSidebarOpen]);
12502
12522
  const sidebarContent = React.useMemo(() => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
12503
12523
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: sidebarScrollZone, children: [
12504
12524
  (sidebarHeader || sidebarFooter) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: sidebarHeaderZone, children: [
@@ -12587,10 +12607,13 @@ function DocLayout({
12587
12607
  !mobileSidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
12588
12608
  motion.button,
12589
12609
  {
12610
+ ref: mobileToggleRef,
12590
12611
  type: "button",
12591
12612
  onClick: () => setMobileSidebarOpen(true),
12592
12613
  className: mobileToggleStyle,
12593
12614
  "aria-label": "Open navigation",
12615
+ "aria-expanded": mobileSidebarOpen,
12616
+ "aria-haspopup": "dialog",
12594
12617
  initial: { opacity: 0, scale: 0.8 },
12595
12618
  animate: { opacity: 1, scale: 1 },
12596
12619
  exit: { opacity: 0, scale: 0.8 },
@@ -12615,10 +12638,12 @@ function DocLayout({
12615
12638
  mobileSidebarOpen && /* @__PURE__ */ jsxRuntime.jsxs(
12616
12639
  motion.aside,
12617
12640
  {
12641
+ ref: drawerRef,
12618
12642
  className: mobileDrawerStyle,
12619
12643
  role: "dialog",
12620
12644
  "aria-modal": "true",
12621
12645
  "aria-label": "Navigation",
12646
+ tabIndex: -1,
12622
12647
  onClick: handleDrawerClick,
12623
12648
  initial: { x: "-100%" },
12624
12649
  animate: { x: 0 },
@@ -12628,6 +12653,7 @@ function DocLayout({
12628
12653
  /* @__PURE__ */ jsxRuntime.jsx(
12629
12654
  "button",
12630
12655
  {
12656
+ ref: drawerCloseRef,
12631
12657
  type: "button",
12632
12658
  onClick: () => setMobileSidebarOpen(false),
12633
12659
  className: mobileCloseStyle,
@@ -13040,6 +13066,7 @@ function NavTreeItem({ item, activeId, onSelect, depth, parentToggleOnly }) {
13040
13066
  {
13041
13067
  type: "button",
13042
13068
  onClick: handleClick,
13069
+ "aria-expanded": hasChildren ? expanded : void 0,
13043
13070
  className: css.cx(
13044
13071
  css.css({
13045
13072
  ...itemBaseStyles,
@@ -13666,4 +13693,4 @@ exports.resolveSchemaStyle = resolveSchemaStyle;
13666
13693
  exports.useConfig = useConfig;
13667
13694
  exports.useSpecFetcher = useSpecFetcher;
13668
13695
  exports.useTheme = useTheme;
13669
- //# sourceMappingURL=useSpecFetcher-BKz1jHTV.js.map
13696
+ //# sourceMappingURL=useSpecFetcher-BAbHnXax.js.map