@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 +0,0 @@
1
- {"version":3,"file":"AsyncApiSpec-BPiA9b5T.js","sources":["../../../src/asyncapi/parser/asyncapi-parser.ts","../../../src/asyncapi/hooks/useAsyncApiSpec.ts","../../../src/asyncapi/components/AsyncOverview.tsx","../../../src/asyncapi/components/ProtocolBadge.tsx","../../../src/asyncapi/components/field-display.tsx","../../../src/asyncapi/components/BindingsSection.tsx","../../../src/asyncapi/components/SecurityRequirementBadges.tsx","../../../src/asyncapi/components/ServerList.tsx","../../../src/asyncapi/schema-formats.ts","../../../src/asyncapi/components/MessagePayload.tsx","../../../src/asyncapi/components/ChannelDetail.tsx","../../../src/asyncapi/components/ComponentsSection.tsx","../../../src/asyncapi/components/SecuritySchemesSection.tsx","../../../src/asyncapi/tag-grouping.ts","../../../src/asyncapi/components/TagGroupHeader.tsx","../../../src/asyncapi/AsyncApiSpec.tsx"],"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 { parse as parseYaml } from 'yaml'\nimport { resolveRefs, decodeJsonPointerSegment } from '../../openapi/parser/ref-resolver'\nimport type {\n ParsedAsyncApiSpec,\n AsyncApiServer,\n AsyncApiChannel,\n AsyncApiOperation,\n AsyncApiMessage,\n AsyncApiComponents,\n} from '../types/asyncapi.types'\n\ninterface AsyncApiDocument {\n asyncapi: string\n info: { title: string; description?: string; version: string; contact?: Record<string, string>; license?: Record<string, string>; termsOfService?: string }\n servers?: Record<string, ServerObject> | Array<{ name?: string } & ServerObject>\n channels?: Record<string, ChannelObject>\n operations?: Record<string, OperationObjectV3>\n tags?: Array<{ name: string; description?: string }>\n components?: { schemas?: Record<string, unknown>; messages?: Record<string, unknown> }\n externalDocs?: { description?: string; url: string }\n}\n\ninterface ServerObject {\n url?: string\n host?: string\n pathname?: string\n protocol: string\n protocolVersion?: string\n description?: string\n variables?: Record<string, { default?: string; description?: string; enum?: string[] }>\n security?: Record<string, string[]>[]\n bindings?: Record<string, unknown>\n}\n\ninterface ChannelObject {\n // v2\n description?: string\n publish?: OperationObjectV2\n subscribe?: OperationObjectV2\n parameters?: Record<string, { description?: string; schema?: Record<string, unknown>; location?: string }>\n bindings?: Record<string, unknown>\n // v3\n address?: string\n messages?: Record<string, unknown>\n}\n\ninterface OperationObjectV2 {\n operationId?: string\n summary?: string\n description?: string\n message?: MessageObject | { oneOf: MessageObject[] }\n tags?: Array<{ name: string; description?: string }>\n bindings?: Record<string, unknown>\n security?: Array<Record<string, string[]>>\n traits?: Array<Partial<OperationObjectV2>>\n}\n\ninterface OperationObjectV3 {\n action: 'send' | 'receive'\n channel?: { $ref?: string } | ChannelObject\n summary?: string\n description?: string\n messages?: Array<{ $ref?: string } | MessageObject>\n tags?: Array<{ name: string; description?: string }>\n bindings?: Record<string, unknown>\n security?: unknown[]\n reply?: { channel?: unknown; messages?: Array<{ $ref?: string } | MessageObject> }\n traits?: Array<Partial<OperationObjectV3>>\n}\n\ninterface MessageObject {\n name?: string\n title?: string\n summary?: string\n description?: string\n contentType?: string\n schemaFormat?: string\n payload?: Record<string, unknown>\n headers?: Record<string, unknown>\n correlationId?: { description?: string; location: string }\n tags?: Array<{ name: string; description?: string }>\n examples?: Array<{ name?: string; summary?: string; payload?: unknown; headers?: unknown }>\n bindings?: Record<string, unknown>\n traits?: MessageObject[]\n}\n\ntype TagList = Array<{ name: string; description?: string }>\n\n/** Union two tag lists by name; the first occurrence wins. */\nfunction unionTags(a?: TagList, b?: TagList): TagList | undefined {\n if (!a && !b) return undefined\n const byName = new Map<string, { name: string; description?: string }>()\n for (const tag of [...(a ?? []), ...(b ?? [])]) {\n if (!byName.has(tag.name)) byName.set(tag.name, tag)\n }\n return Array.from(byName.values())\n}\n\n/** Merge two JSON-Schema-shaped objects (used for message headers). Override wins. */\nfunction mergeSchema(\n base?: Record<string, unknown>,\n override?: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (!base) return override\n if (!override) return base\n const result: Record<string, unknown> = { ...base, ...override }\n const baseProps = base.properties as Record<string, unknown> | undefined\n const overrideProps = override.properties as Record<string, unknown> | undefined\n if (baseProps || overrideProps) {\n result.properties = { ...(baseProps ?? {}), ...(overrideProps ?? {}) }\n }\n const required = Array.from(\n new Set([...((base.required as string[]) ?? []), ...((override.required as string[]) ?? [])]),\n )\n if (required.length > 0) result.required = required\n return result\n}\n\n/** Merge one message layer over a base; `override` wins on scalars. */\nfunction mergeMessageLayer(base: MessageObject, override: MessageObject): MessageObject {\n const result: MessageObject = { ...base }\n for (const [key, value] of Object.entries(override)) {\n if (key === 'traits' || value === undefined) continue\n if (key === 'tags') {\n result.tags = unionTags(base.tags, value as TagList)\n } else if (key === 'headers') {\n result.headers = mergeSchema(base.headers, value as Record<string, unknown>)\n } else if (key === 'examples') {\n result.examples = [...(base.examples ?? []), ...(value as MessageObject['examples'] ?? [])]\n } else if (key === 'bindings') {\n result.bindings = { ...(base.bindings ?? {}), ...(value as Record<string, unknown>) }\n } else {\n ;(result as Record<string, unknown>)[key] = value\n }\n }\n return result\n}\n\n/**\n * Apply AsyncAPI message traits. Traits are folded in declaration order, then\n * the message's own definition is folded last so it wins (per the AsyncAPI spec).\n * $refs in `traits` are already inlined by resolveRefs.\n */\nfunction applyMessageTraits(msg: MessageObject): MessageObject {\n if (!msg.traits || msg.traits.length === 0) return msg\n let acc: MessageObject = {}\n for (const trait of msg.traits) acc = mergeMessageLayer(acc, trait)\n return mergeMessageLayer(acc, msg)\n}\n\n/** Merge one operation layer over a base; `override` wins on scalars. */\nfunction mergeOperationLayer<T extends Record<string, unknown>>(base: T, override: T): T {\n const result: Record<string, unknown> = { ...base }\n for (const [key, value] of Object.entries(override)) {\n if (key === 'traits' || value === undefined) continue\n if (key === 'tags') {\n result.tags = unionTags(base.tags as TagList, value as TagList)\n } else if (key === 'bindings') {\n result.bindings = { ...(base.bindings as Record<string, unknown> ?? {}), ...(value as Record<string, unknown>) }\n } else {\n result[key] = value\n }\n }\n return result as T\n}\n\n/**\n * Apply AsyncAPI operation traits. Same fold-then-own-wins semantics as messages.\n * Preserves operation-shape keys (action, channel, message) since the operation\n * itself is folded last.\n */\nfunction applyOperationTraits<T extends { traits?: Array<Partial<T>> }>(op: T): T {\n if (!op.traits || op.traits.length === 0) return op\n let acc = {} as T\n for (const trait of op.traits) acc = mergeOperationLayer(acc, trait as T)\n return mergeOperationLayer(acc, op)\n}\n\nexport async function parseAsyncApiSpec(specInput: string | Record<string, unknown>): Promise<ParsedAsyncApiSpec> {\n const raw = typeof specInput === 'string' ? parseSpecString(specInput) : specInput\n const api = await resolveRefs(raw as Record<string, unknown>) as unknown as AsyncApiDocument\n\n const majorVersion = parseInt(api.asyncapi.split('.')[0], 10)\n const isV3 = majorVersion >= 3\n\n const servers = extractServers(api, raw as unknown as AsyncApiDocument)\n // `raw` still holds the original `$ref` pointers (resolveRefs returns a fresh\n // tree and never mutates its input). 3.x wires operations to channels via\n // `channel: { $ref: '#/channels/...' }`, and once resolveRefs inlines that\n // ref the pointer is gone — so channel attachment must read the name from the\n // pre-resolution document.\n const rawApi = raw as unknown as AsyncApiDocument\n const channels = isV3 ? extractChannelsV3(api, rawApi) : extractChannelsV2(api)\n const components = extractComponents(api)\n\n const root = api as unknown as Record<string, unknown>\n\n const tags = api.tags?.map((tag) => {\n const raw = tag as Record<string, unknown>\n return {\n name: tag.name,\n description: tag.description,\n displayName: raw['x-displayName'] as string | undefined,\n externalDocs: raw.externalDocs as { description?: string; url: string } | undefined,\n }\n })?.filter((tag) => !(tag as Record<string, unknown>)['x-internal'])\n\n return {\n title: api.info.title,\n description: api.info.description,\n version: api.info.version,\n specVersion: api.asyncapi,\n servers,\n channels: channels.filter((ch) => !ch.xInternal),\n components,\n tags,\n tagGroups: root['x-tagGroups'] as ParsedAsyncApiSpec['tagGroups'],\n externalDocs: api.externalDocs,\n contact: api.info.contact as ParsedAsyncApiSpec['contact'],\n license: api.info.license as ParsedAsyncApiSpec['license'],\n termsOfService: api.info.termsOfService,\n logo: (api.info as Record<string, unknown>)['x-logo'] as ParsedAsyncApiSpec['logo'],\n }\n}\n\nfunction extractServers(api: AsyncApiDocument, rawApi: AsyncApiDocument): AsyncApiServer[] {\n if (!api.servers) return []\n\n const toServer = (s: ServerObject, name: string, rawSecurity?: unknown[]): AsyncApiServer => ({\n name,\n url: s.host ? `${s.protocol}://${s.host}${s.pathname ?? ''}` : s.url ?? '',\n protocol: s.protocol,\n protocolVersion: s.protocolVersion,\n description: s.description,\n variables: s.variables,\n security: s.security,\n securityNames: deriveSecurityNames(rawSecurity, s.security),\n bindings: s.bindings,\n })\n\n if (Array.isArray(api.servers)) {\n const rawServers = Array.isArray(rawApi.servers) ? rawApi.servers : []\n return api.servers.map((s, idx) => toServer(s, s.name ?? `server-${idx}`, rawServers[idx]?.security))\n }\n\n const rawServers = (!Array.isArray(rawApi.servers) && rawApi.servers) || {}\n return Object.entries(api.servers).map(([name, s]) => toServer(s, name, rawServers[name]?.security))\n}\n\nfunction extractChannelsV2(api: AsyncApiDocument): AsyncApiChannel[] {\n if (!api.channels) return []\n\n return Object.entries(api.channels).map(([channelName, ch]) => {\n const operations: AsyncApiOperation[] = []\n\n if (ch.publish) {\n operations.push(convertOperationV2('publish', ch.publish))\n }\n if (ch.subscribe) {\n operations.push(convertOperationV2('subscribe', ch.subscribe))\n }\n\n const raw = ch as Record<string, unknown>\n\n return {\n name: channelName,\n address: channelName,\n description: ch.description,\n operations: operations.filter((op) => !op.xInternal),\n parameters: ch.parameters,\n bindings: ch.bindings,\n xInternal: raw['x-internal'] as boolean | undefined,\n }\n })\n}\n\nfunction convertOperationV2(action: 'publish' | 'subscribe', rawOp: OperationObjectV2): AsyncApiOperation {\n const op = applyOperationTraits(rawOp)\n const messages: AsyncApiMessage[] = []\n\n if (op.message) {\n if ('oneOf' in op.message) {\n for (const m of op.message.oneOf) {\n messages.push(convertMessage(m))\n }\n } else {\n messages.push(convertMessage(op.message as MessageObject))\n }\n }\n\n const raw = op as Record<string, unknown>\n\n return {\n action,\n operationId: op.operationId,\n summary: op.summary,\n description: op.description,\n messages,\n message: messages[0],\n tags: op.tags,\n bindings: op.bindings,\n securityNames: deriveSecurityNames(undefined, op.security),\n xBadges: raw['x-badges'] as AsyncApiOperation['xBadges'],\n xInternal: raw['x-internal'] as boolean | undefined,\n }\n}\n\n/**\n * Extract the channel name a `channel:` reference points at.\n *\n * In a resolved document the `$ref` is gone, so we prefer the raw (pre-resolution)\n * value which still holds `{ $ref: '#/channels/<name>' }`. Falls back to a\n * still-present `$ref`, then to matching the resolved channel's `address`.\n */\nfunction resolveChannelName(\n rawChannel: OperationObjectV3['channel'] | undefined,\n resolvedChannel: OperationObjectV3['channel'] | undefined,\n addressToName: Map<string, string>,\n): string | undefined {\n const refString =\n rawChannel && typeof rawChannel === 'object' && '$ref' in rawChannel && typeof rawChannel.$ref === 'string'\n ? rawChannel.$ref\n : resolvedChannel && typeof resolvedChannel === 'object' && '$ref' in resolvedChannel && typeof resolvedChannel.$ref === 'string'\n ? resolvedChannel.$ref\n : undefined\n\n if (refString) {\n // e.g. \"#/channels/userSignedUp\" -> \"userSignedUp\". Decode JSON-pointer\n // escapes (`~1`→`/`, `~0`→`~`, percent-encoding) so the name matches the\n // channel key exactly as lookupRef resolved it.\n const last = refString.split('/').pop()\n return last !== undefined ? decodeJsonPointerSegment(last) : undefined\n }\n\n // The ref was inlined without a $ref surviving; match on the channel address.\n const address = (resolvedChannel as ChannelObject | undefined)?.address\n if (address && addressToName.has(address)) {\n return addressToName.get(address)\n }\n\n return undefined\n}\n\nfunction extractChannelsV3(api: AsyncApiDocument, rawApi: AsyncApiDocument): AsyncApiChannel[] {\n if (!api.channels) return []\n\n const channelMap = new Map<string, AsyncApiChannel>()\n const addressToName = new Map<string, string>()\n\n // First, register all channels\n for (const [channelName, ch] of Object.entries(api.channels)) {\n const raw = ch as Record<string, unknown>\n const address = ch.address ?? channelName\n addressToName.set(address, channelName)\n channelMap.set(channelName, {\n name: channelName,\n address,\n description: ch.description,\n operations: [],\n parameters: ch.parameters,\n bindings: ch.bindings,\n xInternal: raw['x-internal'] as boolean | undefined,\n })\n }\n\n // Then attach operations to channels\n if (api.operations) {\n for (const [opKey, resolvedOp] of Object.entries(api.operations)) {\n const op = applyOperationTraits(resolvedOp)\n const rawOp = rawApi.operations?.[opKey]\n const channelName = resolveChannelName(rawOp?.channel, op.channel, addressToName)\n\n const collectMessages = (list?: Array<{ $ref?: string } | MessageObject>): AsyncApiMessage[] => {\n const out: AsyncApiMessage[] = []\n for (const msg of list ?? []) {\n // After resolveRefs a successfully-resolved message has no `$ref` (its\n // siblings are merged over the target). A surviving `$ref` means the\n // ref was unresolvable, or circular (`{ $ref, x-circular }`) — skip it\n // rather than emit an empty message, regardless of sibling keys.\n if (msg && typeof msg === 'object' && '$ref' in msg) continue\n out.push(convertMessage(msg as MessageObject))\n }\n return out\n }\n\n const messages = collectMessages(op.messages)\n const replyMessages = collectMessages(op.reply?.messages)\n\n const raw = op as unknown as Record<string, unknown>\n const operation: AsyncApiOperation = {\n action: op.action,\n summary: op.summary,\n description: op.description,\n messages,\n message: messages[0],\n tags: op.tags,\n bindings: op.bindings,\n securityNames: deriveSecurityNames(rawOp?.security, op.security),\n reply: replyMessages.length > 0 ? { messages: replyMessages } : undefined,\n xBadges: raw['x-badges'] as AsyncApiOperation['xBadges'],\n xInternal: raw['x-internal'] as boolean | undefined,\n }\n\n if (operation.xInternal) continue\n\n if (channelName && channelMap.has(channelName)) {\n channelMap.get(channelName)!.operations.push(operation)\n }\n }\n }\n\n return Array.from(channelMap.values())\n}\n\nfunction convertMessage(rawMsg: MessageObject): AsyncApiMessage {\n const msg = applyMessageTraits(rawMsg)\n return {\n name: msg.name,\n title: msg.title,\n summary: msg.summary,\n description: msg.description,\n contentType: msg.contentType,\n schemaFormat: msg.schemaFormat,\n payload: msg.payload,\n headers: msg.headers,\n correlationId: msg.correlationId,\n tags: msg.tags,\n examples: msg.examples,\n bindings: msg.bindings,\n }\n}\n\nfunction extractComponents(api: AsyncApiDocument): AsyncApiComponents {\n const components = api.components as Record<string, unknown> | undefined\n\n // Run component messages through convertMessage() — the same path channel\n // messages take — so trait-merging, schemaFormat, examples, etc. apply in the\n // browsable Messages section too, not only inside ChannelDetail.\n const rawMessages = (api.components?.messages ?? {}) as Record<string, MessageObject>\n const messages: Record<string, AsyncApiMessage> = {}\n for (const [name, msg] of Object.entries(rawMessages)) {\n messages[name] = convertMessage(msg)\n }\n\n return {\n schemas: (api.components?.schemas ?? {}) as Record<string, Record<string, unknown>>,\n messages,\n securitySchemes: (components?.securitySchemes ?? {}) as AsyncApiComponents['securitySchemes'],\n }\n}\n\n/**\n * Derive the security-scheme names for a `security` requirement list, covering:\n * - 2.x requirement maps `{ schemeName: scopes }` → the map keys;\n * - 3.x `$ref` entries (resolveRefs inlines them, so read the ref from `raw`);\n * - 3.x inline scheme objects → the scheme `type` as a fallback label.\n */\nfunction deriveSecurityNames(raw?: unknown[], resolved?: unknown[]): string[] | undefined {\n const rawArr = raw ?? []\n const resArr = resolved ?? []\n const count = Math.max(rawArr.length, resArr.length)\n if (count === 0) return undefined\n\n const names: string[] = []\n for (let i = 0; i < count; i++) {\n const rawEntry = rawArr[i] as Record<string, unknown> | undefined\n const resEntry = resArr[i] as Record<string, unknown> | undefined\n if (rawEntry && typeof rawEntry === 'object' && typeof rawEntry.$ref === 'string') {\n names.push(decodeJsonPointerSegment(rawEntry.$ref.split('/').pop() as string))\n } else if (resEntry && typeof resEntry === 'object') {\n if (typeof resEntry.type === 'string') {\n names.push(resEntry.type)\n } else {\n names.push(...Object.keys(resEntry))\n }\n }\n }\n return names.length > 0 ? names : undefined\n}\n\nfunction parseSpecString(input: string): Record<string, unknown> {\n const trimmed = input.trim()\n if (trimmed.startsWith('{')) {\n try {\n return JSON.parse(trimmed)\n } catch {\n // Fall through to YAML\n }\n }\n return parseYaml(trimmed) as Record<string, unknown>\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 { useCallback } from 'react'\nimport { useSpecFetcher } from '../../core/hooks/useSpecFetcher'\nimport { parseAsyncApiSpec } from '../parser/asyncapi-parser'\nimport type { ParsedAsyncApiSpec } from '../types/asyncapi.types'\n\nexport function useAsyncApiSpec(spec: string | Record<string, unknown>) {\n const parser = useCallback(async (raw: string) => {\n return parseAsyncApiSpec(raw)\n }, [])\n\n return useSpecFetcher<ParsedAsyncApiSpec>(spec, parser)\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 { css, cx } from '../../core/styles/css'\nimport type { ParsedAsyncApiSpec } from '../types/asyncapi.types'\nimport { MarkdownRenderer } from '../../core/components/MarkdownRenderer'\n\ninterface AsyncOverviewProps {\n spec: ParsedAsyncApiSpec\n}\n\nconst containerStyle = css({\n marginBottom: '2rem',\n paddingBottom: '1.5rem',\n borderBottom: '1px solid var(--omnispec-border-color)',\n})\n\nconst titleStyle = css({\n margin: '0 0 0.25rem',\n fontSize: 'var(--omnispec-h2-font-size)',\n color: 'var(--omnispec-h2-color)',\n fontWeight: 700,\n display: 'inline',\n})\n\nconst versionStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-muted)',\n marginLeft: '0.75rem',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst specBadgeStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-color-primary)',\n border: '1px solid var(--omnispec-color-primary)',\n borderRadius: '0.25rem',\n padding: '1px 0.375rem',\n marginLeft: '0.5rem',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst metaStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n marginTop: '0.25rem',\n})\n\nconst linkStyle = css({\n color: 'var(--omnispec-fg-link)',\n textDecoration: 'none',\n '&:hover': {\n textDecoration: 'underline',\n },\n})\n\nexport function AsyncOverview({ spec }: AsyncOverviewProps) {\n return (\n <div className={cx('omnispec-async-overview', containerStyle)}>\n <h1 className={titleStyle}>{spec.title}</h1>\n <span className={versionStyle}>v{spec.version}</span>\n <span className={specBadgeStyle}>AsyncAPI {spec.specVersion}</span>\n\n {spec.description && (\n <MarkdownRenderer content={spec.description} />\n )}\n\n {spec.contact && (\n <div className={metaStyle}>\n {spec.contact.name && <span>Contact: {spec.contact.name}</span>}\n {spec.contact.email && (\n <span> &lt;<a href={`mailto:${spec.contact.email}`} className={linkStyle}>{spec.contact.email}</a>&gt;</span>\n )}\n {spec.contact.url && (\n <span> · <a href={spec.contact.url} target=\"_blank\" rel=\"noopener noreferrer\" className={linkStyle}>{spec.contact.url}</a></span>\n )}\n </div>\n )}\n\n {spec.license && (\n <div className={metaStyle}>\n License: {spec.license.url\n ? <a href={spec.license.url} target=\"_blank\" rel=\"noopener noreferrer\" className={linkStyle}>{spec.license.name}</a>\n : spec.license.name\n }\n </div>\n )}\n\n {spec.externalDocs && (\n <div className={metaStyle}>\n <a href={spec.externalDocs.url} target=\"_blank\" rel=\"noopener noreferrer\" className={linkStyle}>\n {spec.externalDocs.description ?? 'External Documentation'}\n </a>\n </div>\n )}\n </div>\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 { css, cx } from '../../core/styles/css'\n\ninterface ProtocolBadgeProps {\n protocol: string\n version?: string\n}\n\nconst protocolColors: Record<string, string> = {\n kafka: '#231F20',\n 'kafka-secure': '#231F20',\n mqtt: '#660066',\n 'mqtt5': '#660066',\n amqp: '#FF6600',\n 'amqp1': '#FF6600',\n ws: '#4A90D9',\n wss: '#4A90D9',\n http: 'var(--omnispec-color-get)',\n https: 'var(--omnispec-color-get)',\n nats: '#27AAE1',\n redis: '#DC382D',\n sns: '#FF9900',\n sqs: '#FF9900',\n stomp: '#6DB33F',\n mercure: '#1D1D1D',\n}\n\nconst badgeBase = css({\n display: 'inline-block',\n padding: '0.125rem 0.5rem',\n borderRadius: '0.25rem',\n fontSize: '0.625rem',\n fontWeight: 700,\n fontFamily: 'var(--omnispec-font-mono)',\n color: '#ffffff',\n letterSpacing: '0.0313rem',\n})\n\nconst versionStyle = css({\n fontWeight: 400,\n opacity: 0.8,\n})\n\nexport function ProtocolBadge({ protocol, version }: ProtocolBadgeProps) {\n const color = protocolColors[protocol.toLowerCase()] ?? 'var(--omnispec-fg-muted)'\n\n return (\n <span className={cx(badgeBase, css({ backgroundColor: color }))}>\n {protocol.toUpperCase()}\n {version && <span className={versionStyle}> {version}</span>}\n </span>\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 type { ReactNode } from 'react'\nimport { css } from '@core/styles/css'\n\n/** `\"cleanSession\"` / `\"clean_session\"` → `\"Clean Session\"`. */\nexport function humanizeField(field: string): string {\n const spaced = field\n .replace(/[_-]+/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim()\n return spaced.charAt(0).toUpperCase() + spaced.slice(1)\n}\n\nfunction renderValue(value: unknown): ReactNode {\n if (value === null) return <span className={mutedStyle}>null</span>\n if (typeof value === 'boolean') return <code className={codeStyle}>{value ? 'true' : 'false'}</code>\n if (typeof value === 'number') return <code className={codeStyle}>{String(value)}</code>\n if (typeof value === 'string') return <span>{value}</span>\n // Objects/arrays (e.g. MQTT lastWill, WebSocket query schema).\n return <code className={jsonStyle}>{JSON.stringify(value)}</code>\n}\n\n/**\n * A key/value grid used to render binding fields and security-scheme fields.\n * Keys are humanized; values are formatted by type. Shared so binding and\n * security displays stay visually identical and a change lands in one place.\n */\nexport function FieldRows({ fields }: { fields: Array<[string, unknown]> }) {\n if (fields.length === 0) return null\n return (\n <dl className={listStyle}>\n {fields.map(([field, value]) => (\n <div key={field} className={rowStyle}>\n <dt className={nameStyle}>{humanizeField(field)}</dt>\n <dd className={valueStyle}>{renderValue(value)}</dd>\n </div>\n ))}\n </dl>\n )\n}\n\nconst listStyle = css({\n display: 'grid',\n gridTemplateColumns: 'max-content 1fr',\n gap: '0.25rem 1rem',\n margin: '0.25rem 0 0',\n})\n\nconst rowStyle = css({ display: 'contents' })\n\nconst nameStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst valueStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-primary)',\n margin: 0,\n minWidth: 0,\n wordBreak: 'break-word',\n})\n\nconst codeStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n})\n\nconst jsonStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-code)',\n wordBreak: 'break-all',\n})\n\nconst mutedStyle = css({\n color: 'var(--omnispec-fg-muted)',\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 { css } from '@core/styles/css'\nimport { ProtocolBadge } from './ProtocolBadge'\nimport { FieldRows } from './field-display'\n\ninterface BindingsSectionProps {\n bindings?: Record<string, unknown>\n /** Heading shown above the protocol groups. Defaults to \"Bindings\". */\n title?: string\n}\n\n/** Keys that are AsyncAPI housekeeping rather than user-facing binding data. */\nconst HIDDEN_KEYS = new Set(['bindingVersion'])\n\n/**\n * Renders protocol bindings for a server, channel, operation, or message.\n *\n * AsyncAPI defines dozens of protocol-specific binding fields and adds more over\n * time, so rather than hard-code each protocol's schema we render every field as\n * a labelled row. This covers all known protocols (MQTT, Kafka, WebSocket, AMQP,\n * STOMP, HTTP, …) and degrades gracefully for unrecognized protocols — their raw\n * fields are shown instead of being dropped or crashing the renderer.\n */\nexport function BindingsSection({ bindings, title = 'Bindings' }: BindingsSectionProps) {\n if (!bindings || Object.keys(bindings).length === 0) return null\n\n const protocols = Object.entries(bindings).filter(\n ([, cfg]) => cfg && typeof cfg === 'object',\n )\n if (protocols.length === 0) return null\n\n return (\n <div className={containerStyle}>\n <h4 className={titleStyle}>{title}</h4>\n <div className={protocolListStyle}>\n {protocols.map(([protocol, cfg]) => {\n const rows = Object.entries(cfg as Record<string, unknown>).filter(\n ([key, value]) => !HIDDEN_KEYS.has(key) && value !== undefined,\n )\n return (\n <div key={protocol} className={protocolCardStyle}>\n <div className={protocolHeaderStyle}>\n <ProtocolBadge protocol={protocol} />\n </div>\n {rows.length > 0 ? (\n <FieldRows fields={rows} />\n ) : (\n <p className={emptyStyle}>No binding fields.</p>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nconst containerStyle = css({\n marginTop: '1rem',\n})\n\nconst titleStyle = css({\n margin: '0 0 0.75rem',\n fontSize: 'var(--omnispec-font-size-md)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-primary)',\n letterSpacing: '0.02em',\n})\n\nconst protocolListStyle = css({\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n})\n\nconst protocolCardStyle = css({\n padding: '0.625rem 0.75rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-secondary)',\n})\n\nconst protocolHeaderStyle = css({\n marginBottom: '0.5rem',\n})\n\nconst emptyStyle = css({\n margin: 0,\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-muted)',\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 { css } from '@core/styles/css'\nimport { Icon } from '@core/components/common/Icon'\n\ninterface SecurityRequirementBadgesProps {\n /** Security-scheme names to render as lock badges linking to the schemes section. */\n names?: string[]\n label?: string\n}\n\n/**\n * Renders a row of security-scheme lock badges (server- or operation-level),\n * each linking to its entry in the Security Schemes section. Shared by\n * ServerList and ChannelDetail so the two stay visually identical.\n */\nexport function SecurityRequirementBadges({ names, label = 'Security' }: SecurityRequirementBadgesProps) {\n if (!names || names.length === 0) return null\n return (\n <div className={rowStyle}>\n <span className={labelStyle}>{label}</span>\n {names.map((name) => (\n <a key={name} href={`#security-${name}`} className={badgeStyle}>\n <Icon name=\"lock\" size=\"0.625rem\" strokeWidth={2.5} />\n {name}\n </a>\n ))}\n </div>\n )\n}\n\nconst rowStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.375rem',\n flexWrap: 'wrap',\n marginTop: '0.5rem',\n})\n\nconst labelStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst badgeStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.3125rem',\n fontSize: 'var(--omnispec-font-size-xs)',\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-fg-primary)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.1875rem 0.625rem',\n borderRadius: 'var(--omnispec-border-radius)',\n fontWeight: 500,\n textDecoration: 'none',\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 { useState } from 'react'\nimport { css, cx } from '@core/styles/css'\nimport type { AsyncApiServer } from '@asyncapi/types/asyncapi.types'\nimport { ProtocolBadge } from './ProtocolBadge'\nimport { BindingsSection } from './BindingsSection'\nimport { SecurityRequirementBadges } from './SecurityRequirementBadges'\n\ninterface ServerListProps {\n servers: AsyncApiServer[]\n}\n\nconst containerStyle = css({\n marginBottom: '1.5rem',\n})\n\nconst titleStyle = css({\n margin: '0 0 0.75rem',\n fontSize: 'var(--omnispec-h3-font-size)',\n color: 'var(--omnispec-h3-color)',\n fontWeight: 600,\n})\n\nconst tabStripStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '0.25rem',\n marginBottom: '0.5rem',\n})\n\nconst tabStyle = css({\n padding: '0.25rem 0.75rem',\n border: 'none',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n color: 'var(--omnispec-fg-secondary)',\n fontSize: 'var(--omnispec-font-size-sm)',\n fontFamily: 'var(--omnispec-font-mono)',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--omnispec-fg-primary)',\n },\n})\n\nconst tabActiveStyle = css({\n backgroundColor: 'var(--omnispec-color-primary)',\n color: '#ffffff',\n '&:hover': {\n color: '#ffffff',\n },\n})\n\nconst cardStyle = css({\n padding: '0.75rem',\n border: '1px solid var(--omnispec-border-color)',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-secondary)',\n '&:hover': {\n borderColor: 'var(--omnispec-color-primary)',\n },\n})\n\nconst cardHeaderStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.375rem',\n})\n\nconst serverNameStyle = css({\n fontWeight: 600,\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst urlStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-code)',\n display: 'block',\n marginBottom: '0.25rem',\n})\n\nconst descriptionStyle = css({\n margin: '0.25rem 0 0',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst variablesStyle = css({\n marginTop: '0.5rem',\n fontSize: 'var(--omnispec-font-size-xs)',\n})\n\nconst varRowStyle = css({\n display: 'flex',\n gap: '0.375rem',\n marginBottom: '0.125rem',\n})\n\nconst varNameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-fg-primary)',\n fontWeight: 600,\n})\n\nconst varDefaultStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst varDescStyle = css({\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst varEnumStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-color-info)',\n})\n\nconst varTokenStyle = css({\n color: 'var(--omnispec-color-primary)',\n backgroundColor: 'color-mix(in srgb, var(--omnispec-color-primary) 12%, transparent)',\n borderRadius: 'var(--omnispec-border-radius)',\n padding: '0 0.125rem',\n '&::before': { content: '\"{\"' },\n '&::after': { content: '\"}\"' },\n})\n\n/** Render a server URL with `{variable}` placeholders visually highlighted. */\nfunction highlightVariables(url: string) {\n const parts = url.split(/(\\{[^}]+\\})/g)\n return parts.map((part, i) =>\n /^\\{[^}]+\\}$/.test(part)\n ? <span key={i} className={varTokenStyle}>{part.slice(1, -1)}</span>\n : <span key={i}>{part}</span>,\n )\n}\n\nfunction ServerCard({ server }: { server: AsyncApiServer }) {\n return (\n <div className={cardStyle}>\n <div className={cardHeaderStyle}>\n <span className={serverNameStyle}>{server.name}</span>\n <ProtocolBadge protocol={server.protocol} version={server.protocolVersion} />\n </div>\n <code className={urlStyle}>{highlightVariables(server.url)}</code>\n {server.description && (\n <p className={descriptionStyle}>{server.description}</p>\n )}\n {server.variables && Object.entries(server.variables).length > 0 && (\n <div className={variablesStyle}>\n {Object.entries(server.variables).map(([name, variable]) => (\n <div key={name} className={varRowStyle}>\n <code className={varNameStyle}>{name}</code>\n {variable.default && <span className={varDefaultStyle}>= {variable.default}</span>}\n {variable.enum && variable.enum.length > 0 && (\n <span className={varEnumStyle}>enum: {variable.enum.join(' | ')}</span>\n )}\n {variable.description && <span className={varDescStyle}>{variable.description}</span>}\n </div>\n ))}\n </div>\n )}\n <SecurityRequirementBadges names={server.securityNames} />\n <BindingsSection bindings={server.bindings} title=\"Server Bindings\" />\n </div>\n )\n}\n\nexport function ServerList({ servers }: ServerListProps) {\n const [selected, setSelected] = useState(0)\n if (servers.length === 0) return null\n\n const activeIndex = Math.min(selected, servers.length - 1)\n\n return (\n <div className={cx('omnispec-async-servers', containerStyle)}>\n <h3 className={titleStyle}>Servers</h3>\n {servers.length > 1 ? (\n <>\n <div className={tabStripStyle} role=\"tablist\" aria-label=\"Servers\">\n {servers.map((server, idx) => (\n <button\n key={server.name}\n type=\"button\"\n role=\"tab\"\n aria-selected={idx === activeIndex}\n className={cx(tabStyle, idx === activeIndex && tabActiveStyle)}\n onClick={() => setSelected(idx)}\n >\n {server.name}\n </button>\n ))}\n </div>\n <ServerCard server={servers[activeIndex]} />\n </>\n ) : (\n <ServerCard server={servers[0]} />\n )}\n </div>\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\n/**\n * Normalizes non-JSON-Schema message payload formats (Avro, Protobuf) into the\n * JSON-Schema shape the shared SchemaTree already renders, so an AsyncAPI message\n * whose `schemaFormat` is Avro/Protobuf shows a real field tree instead of the\n * bare wrapper word (\"record\", \"any\").\n */\n\ntype JsonObject = Record<string, unknown>\n\n/** Classify a message `schemaFormat` string. */\nexport function detectSchemaFormat(schemaFormat?: string): 'avro' | 'protobuf' | 'json' {\n if (!schemaFormat) return 'json'\n const f = schemaFormat.toLowerCase()\n if (f.includes('avro')) return 'avro'\n if (f.includes('protobuf') || f.includes('proto')) return 'protobuf'\n return 'json'\n}\n\n/**\n * Convert an Avro schema to a JSON-Schema-like object.\n * Handles records, enums, arrays, maps, fixed, logicalTypes, and unions\n * (including the `['null', T]` nullable idiom).\n */\nexport function avroToJsonSchema(avro: unknown): JsonObject {\n return convert(avro)\n}\n\nfunction convert(node: unknown): JsonObject {\n // Primitive named by a bare string, e.g. \"string\", \"long\".\n if (typeof node === 'string') return primitive(node)\n\n // Union — an array of alternatives. `['null', T]` is Avro's nullable idiom.\n if (Array.isArray(node)) {\n const nonNull = node.filter((n) => n !== 'null')\n const nullable = node.length !== nonNull.length\n if (nonNull.length === 1) {\n return { ...convert(nonNull[0]), nullable }\n }\n return { oneOf: nonNull.map(convert), nullable }\n }\n\n if (node && typeof node === 'object') {\n const obj = node as JsonObject\n const type = obj.type\n\n if (type === 'record') {\n const fields = (obj.fields as Array<JsonObject> | undefined) ?? []\n const properties: JsonObject = {}\n const required: string[] = []\n for (const field of fields) {\n const name = field.name as string\n const schema = convert(field.type)\n if (field.doc) schema.description = field.doc\n if (field.default !== undefined) schema.default = field.default\n properties[name] = schema\n // A field is required unless its type is nullable or it has a default.\n if (field.default === undefined && !(schema as JsonObject).nullable) required.push(name)\n }\n const result: JsonObject = { type: 'object', properties }\n if (obj.doc) result.description = obj.doc\n if (required.length > 0) result.required = required\n return result\n }\n\n if (type === 'enum') {\n return { type: 'string', enum: (obj.symbols as string[]) ?? [] }\n }\n\n if (type === 'array') {\n return { type: 'array', items: convert(obj.items) }\n }\n\n if (type === 'map') {\n return { type: 'object', additionalProperties: convert(obj.values) }\n }\n\n if (type === 'fixed') {\n return { type: 'string', format: `fixed(${obj.size ?? '?'})` }\n }\n\n // A nested `{ type: <primitive>, logicalType?: ... }`.\n if (typeof type === 'string') {\n const base = primitive(type)\n if (obj.logicalType) base.format = String(obj.logicalType)\n return base\n }\n\n // A nested complex type given directly as the `type` value.\n if (type && typeof type === 'object') return convert(type)\n }\n\n return { type: 'object' }\n}\n\nconst AVRO_PRIMITIVES: Record<string, JsonObject> = {\n null: { type: 'null' },\n boolean: { type: 'boolean' },\n int: { type: 'integer', format: 'int32' },\n long: { type: 'integer', format: 'int64' },\n float: { type: 'number', format: 'float' },\n double: { type: 'number', format: 'double' },\n bytes: { type: 'string', format: 'byte' },\n string: { type: 'string' },\n}\n\nfunction primitive(name: string): JsonObject {\n return { ...(AVRO_PRIMITIVES[name] ?? { type: name }) }\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 { useState } from 'react'\nimport { css } from '@core/styles/css'\nimport { SchemaTree } from '@core/components/SchemaViewer/SchemaTree'\nimport { schemaToNodes, generateExample } from '@core/components/SchemaViewer/schema-utils'\nimport { CodeBlock } from '@core/components/CodeBlock/CodeBlock'\nimport { Tabs } from '@core/components/common/Tabs'\nimport { Icon } from '@core/components/common/Icon'\nimport { ExampleSelector, type NamedExample } from '@core/components/common/ExampleSelector'\nimport type { AsyncApiMessage } from '@asyncapi/types/asyncapi.types'\nimport { avroToJsonSchema, detectSchemaFormat } from '@asyncapi/schema-formats'\n\n/**\n * Renders a message payload as Schema + Example tabs. Avro payloads are\n * normalized to a JSON-Schema field tree first (via `schemaFormat`) so they show\n * real fields instead of the bare wrapper word; an unresolvable `$ref` payload\n * shows a visible notice. Shared by ChannelDetail and the component Messages\n * section so both get identical, format-aware rendering.\n */\nexport function MessagePayload({ message, idx }: { message: AsyncApiMessage; idx: string | number }) {\n const rawPayload = message.payload as Record<string, unknown> | undefined\n\n return (\n <>\n {message.schemaFormat && (\n <span className={schemaFormatBadgeStyle}>{message.schemaFormat}</span>\n )}\n {rawPayload && <PayloadBody rawPayload={rawPayload} schemaFormat={message.schemaFormat} message={message} idx={idx} />}\n </>\n )\n}\n\nfunction PayloadBody({\n rawPayload,\n schemaFormat,\n message,\n idx,\n}: {\n rawPayload: Record<string, unknown>\n schemaFormat?: string\n message: AsyncApiMessage\n idx: string | number\n}) {\n // An unresolvable $ref survives resolution as a bare `{ $ref }` — surface it\n // rather than rendering an empty/misleading schema (ABOSPEC-50).\n if (typeof rawPayload.$ref === 'string') {\n return (\n <div className={unresolvedRefStyle} role=\"alert\">\n <Icon name=\"warning\" size=\"0.875rem\" />\n <span>Unresolved reference: <code className={unresolvedRefCodeStyle}>{rawPayload.$ref}</code></span>\n </div>\n )\n }\n\n const schema = detectSchemaFormat(schemaFormat) === 'avro' ? avroToJsonSchema(rawPayload) : rawPayload\n\n return (\n <Tabs\n tabs={[\n {\n id: `schema-${idx}`,\n label: 'Payload Schema',\n content: <SchemaTree nodes={schemaToNodes(schema)} />,\n },\n {\n id: `example-${idx}`,\n label: 'Example',\n content: <MessageExample message={message} schema={schema} />,\n },\n ]}\n />\n )\n}\n\n/**\n * The Example tab. Prefers the message's declared `examples` (with a selector\n * when several are named); falls back to synthesizing one from the payload schema.\n */\nfunction MessageExample({ message, schema }: { message: AsyncApiMessage; schema?: Record<string, unknown> }) {\n const named: NamedExample[] = (message.examples ?? [])\n .filter((ex) => ex.payload !== undefined)\n .map((ex, i) => ({\n name: ex.name ?? `example ${i + 1}`,\n summary: ex.summary,\n value: ex.payload,\n }))\n\n const [selectedName, setSelectedName] = useState(named[0]?.name ?? '')\n const active = named.find((ex) => ex.name === selectedName) ?? named[0]\n\n const exampleSchema = schema ?? (message.payload as Record<string, unknown> | undefined)\n const code = active?.value !== undefined\n ? JSON.stringify(active.value, null, 2)\n : exampleSchema\n ? JSON.stringify(generateExample(exampleSchema), null, 2)\n : '{}'\n\n return (\n <>\n <ExampleSelector examples={named} selectedName={selectedName || (named[0]?.name ?? '')} onSelect={setSelectedName} />\n <CodeBlock code={code} language=\"json\" />\n </>\n )\n}\n\nconst schemaFormatBadgeStyle = css({\n display: 'inline-block',\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xxs)',\n color: 'var(--omnispec-fg-secondary)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.0625rem 0.375rem',\n borderRadius: 'var(--omnispec-border-radius)',\n marginBottom: '0.5rem',\n})\n\nconst unresolvedRefStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 0.75rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'color-mix(in srgb, var(--omnispec-color-warning) 12%, transparent)',\n color: 'var(--omnispec-color-warning)',\n fontSize: 'var(--omnispec-font-size-sm)',\n})\n\nconst unresolvedRefCodeStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\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 { useState } from 'react'\nimport { css, cx } from '@core/styles/css'\nimport { mq } from '@core/styles/breakpoints'\nimport type { AsyncApiChannel, AsyncApiOperation, AsyncApiMessage } from '@asyncapi/types/asyncapi.types'\nimport { MarkdownRenderer } from '@core/components/MarkdownRenderer'\nimport { SchemaTree } from '@core/components/SchemaViewer/SchemaTree'\nimport { schemaToNodes, buildConstraints } from '@core/components/SchemaViewer/schema-utils'\nimport { SchemaBadge } from '@core/components/SchemaViewer/SchemaPrimitives'\nimport { ExpandableCard } from '@core/components/common/ExpandableCard'\nimport { MethodBar } from '@core/components/common/MethodBar'\nimport { BindingsSection } from './BindingsSection'\nimport { SecurityRequirementBadges } from './SecurityRequirementBadges'\nimport { MessagePayload } from './MessagePayload'\n\ninterface ChannelDetailProps {\n channel: AsyncApiChannel\n id?: string\n expandAll?: boolean\n expandGeneration?: number\n}\n\nconst actionLabels: Record<string, string> = {\n publish: 'PUB',\n subscribe: 'SUB',\n send: 'SEND',\n receive: 'RECV',\n}\n\nconst actionColors: Record<string, string> = {\n publish: 'var(--omnispec-color-publish)',\n subscribe: 'var(--omnispec-color-subscribe)',\n send: 'var(--omnispec-color-publish)',\n receive: 'var(--omnispec-color-subscribe)',\n}\n\nexport function ChannelDetail({ channel, id, expandAll, expandGeneration }: ChannelDetailProps) {\n const primaryAction = channel.operations[0]?.action\n const primaryLabel = actionLabels[primaryAction] ?? primaryAction?.toUpperCase() ?? ''\n const primaryColor = actionColors[primaryAction] ?? 'var(--omnispec-fg-muted)'\n\n return (\n <ExpandableCard\n id={id}\n title={channel.address}\n rightLabel={`${channel.operations.length} ${channel.operations.length === 1 ? 'operation' : 'operations'}`}\n expandAll={expandAll}\n expandGeneration={expandGeneration}\n >\n {/* Method bar — matches OpenAPI MethodBar pattern */}\n <MethodBar label={primaryLabel} path={channel.address} color={primaryColor} />\n\n {/* Body content */}\n <div className={bodyStyle}>\n {channel.description && (\n <div className={sectionStyle}>\n <MarkdownRenderer content={channel.description} />\n </div>\n )}\n\n {/* Parameters — match OpenAPI inline param style */}\n {channel.parameters && Object.keys(channel.parameters).length > 0 && (\n <div className={sectionStyle}>\n <h4 className={sectionTitleStyle}>Parameters</h4>\n <div className={paramListStyle}>\n {Object.entries(channel.parameters).map(([name, param]) => {\n const schema = (param.schema ?? {}) as Record<string, unknown>\n const paramType = schema.type as string | undefined\n const paramFormat = schema.format as string | undefined\n const paramEnum = schema.enum as unknown[] | undefined\n const constraintBadges = buildConstraints(schema)\n return (\n <div key={name} className={paramRowStyle}>\n <div className={paramHeaderStyle}>\n <span className={paramNameStyle}>{name}</span>\n {paramType && (\n <pre className={typeBadgeStyle}>{paramType}</pre>\n )}\n </div>\n {(paramFormat || constraintBadges.length > 0 || (paramEnum && paramEnum.length > 0)) && (\n <div className={paramConstraintsStyle}>\n {paramFormat && <SchemaBadge variant=\"constraint\">{paramFormat}</SchemaBadge>}\n {constraintBadges.map((c) => (\n <SchemaBadge key={c} variant=\"constraint\">{c}</SchemaBadge>\n ))}\n {paramEnum && paramEnum.length > 0 && (\n <SchemaBadge variant=\"enum\">enum: {paramEnum.map(String).join(' | ')}</SchemaBadge>\n )}\n </div>\n )}\n {param.description && (\n <p className={paramDescStyle}>{param.description}</p>\n )}\n </div>\n )\n })}\n </div>\n </div>\n )}\n\n {/* Channel-level protocol bindings */}\n <BindingsSection bindings={channel.bindings} title=\"Channel Bindings\" />\n\n {/* Operations */}\n {channel.operations.map((op, idx) => (\n <div key={idx} id={id ? `${id}-op-${idx}` : undefined} className={operationStyle}>\n <div className={opHeaderStyle}>\n <span\n className={cx(actionBadgeBase, css({\n backgroundColor: actionColors[op.action] ?? 'var(--omnispec-fg-muted)',\n }))}\n >\n {actionLabels[op.action] ?? op.action.toUpperCase()}\n </span>\n {op.operationId && <span className={opIdStyle}>{op.operationId}</span>}\n {op.summary && <span className={opSummaryStyle}>{op.summary}</span>}\n </div>\n\n {op.tags && op.tags.length > 0 && (\n <div className={tagChipsStyle}>\n {op.tags.map((tag) => (\n <span key={tag.name} className={tagChipStyle} title={tag.description}>{tag.name}</span>\n ))}\n </div>\n )}\n\n {op.description && (\n <div className={sectionStyle}>\n <MarkdownRenderer content={op.description} />\n </div>\n )}\n\n <SecurityRequirementBadges names={op.securityNames} />\n\n <OperationMessages operation={op} idx={idx} />\n\n {op.reply && op.reply.messages.length > 0 && (\n <div className={replyStyle}>\n <h4 className={replyTitleStyle}>Reply</h4>\n {op.reply.messages.map((replyMsg, i) => (\n <MessageView key={i} message={replyMsg} idx={`${idx}-reply-${i}`} />\n ))}\n </div>\n )}\n\n <BindingsSection bindings={op.bindings} title=\"Operation Bindings\" />\n </div>\n ))}\n </div>\n </ExpandableCard>\n )\n}\n\nfunction messageLabel(message: AsyncApiMessage, index: number): string {\n return message.title ?? message.name ?? `Message ${index + 1}`\n}\n\n/**\n * Renders the message(s) an operation carries. AsyncAPI allows more than one\n * possible message (2.x `oneOf`, 3.x `messages` array); when there is more than\n * one, a selector switches between them so none are silently dropped.\n */\nfunction OperationMessages({ operation, idx }: { operation: AsyncApiOperation; idx: number }) {\n const messages = operation.messages ?? []\n const [selectedIndex, setSelectedIndex] = useState(0)\n\n if (messages.length === 0) return null\n\n const active = messages[Math.min(selectedIndex, messages.length - 1)]\n\n return (\n <div className={sectionStyle}>\n {messages.length > 1 && (\n <div className={messageSelectorStyle}>\n <label htmlFor={`msg-select-${idx}`} className={messageSelectorLabelStyle}>Message</label>\n <select\n id={`msg-select-${idx}`}\n className={messageSelectStyle}\n value={selectedIndex}\n onChange={(e) => setSelectedIndex(Number(e.target.value))}\n >\n {messages.map((m, i) => (\n <option key={i} value={i}>{messageLabel(m, i)}</option>\n ))}\n </select>\n <span className={messageCountStyle}>{messages.length} messages</span>\n </div>\n )}\n <MessageView message={active} idx={idx} />\n </div>\n )\n}\n\nfunction MessageView({ message, idx }: { message: AsyncApiMessage; idx: string | number }) {\n return (\n <div>\n <h4 className={sectionTitleStyle}>\n Message\n {(message.title ?? message.name) && (\n <span className={messageTitleStyle}> — {message.title ?? message.name}</span>\n )}\n </h4>\n {message.summary && <p className={messageSummaryStyle}>{message.summary}</p>}\n {message.contentType && <code className={contentTypeStyle}>{message.contentType}</code>}\n\n <MessagePayload message={message} idx={idx} />\n\n {message.correlationId && (\n <div className={correlationIdStyle}>\n <span className={correlationIdLabelStyle}>correlationId</span>\n <code className={correlationIdLocationStyle}>{message.correlationId.location}</code>\n {message.correlationId.description && (\n <span className={correlationIdDescStyle}>{message.correlationId.description}</span>\n )}\n </div>\n )}\n\n {message.headers && (\n <div className={headersWrapStyle}>\n <h4 className={sectionTitleStyle}>Headers</h4>\n <SchemaTree nodes={schemaToNodes(message.headers as Record<string, unknown>)} />\n </div>\n )}\n\n <BindingsSection bindings={message.bindings} title=\"Message Bindings\" />\n </div>\n )\n}\n\n// --- Styles matching OpenAPI OperationDetail ---\n\nconst bodyStyle = css({\n padding: '0.75rem 1rem',\n [mq.desktop]: {\n padding: '1rem 1.25rem',\n },\n})\n\nconst sectionStyle = css({\n marginBottom: '1.5rem',\n})\n\nconst sectionTitleStyle = css({\n margin: '0 0 0.75rem',\n fontSize: 'var(--omnispec-font-size-md)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-primary)',\n letterSpacing: '0.02em',\n})\n\nconst paramListStyle = css({\n display: 'flex',\n flexDirection: 'column',\n})\n\nconst paramRowStyle = css({\n padding: '0.75rem 0',\n})\n\nconst paramHeaderStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n flexWrap: 'wrap',\n})\n\nconst paramNameStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n fontWeight: 700,\n backgroundColor: 'transparent',\n padding: 0,\n})\n\nconst typeBadgeStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 400,\n})\n\nconst paramDescStyle = css({\n margin: '0.25rem 0 0',\n fontSize: 'var(--omnispec-font-size-base)',\n color: 'var(--omnispec-fg-secondary)',\n lineHeight: 1.5,\n})\n\nconst paramConstraintsStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '0.375rem',\n marginTop: '0.375rem',\n})\n\nconst operationStyle = css({\n padding: '0.75rem 0',\n borderTop: '1px solid var(--omnispec-border-color)',\n})\n\nconst opHeaderStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n})\n\nconst actionBadgeBase = css({\n display: 'inline-block',\n padding: '0.125rem 0.375rem',\n borderRadius: '0.1875rem',\n fontSize: '0.5625rem',\n fontWeight: 700,\n fontFamily: 'var(--omnispec-font-mono)',\n color: '#ffffff',\n letterSpacing: '0.0313rem',\n})\n\nconst opIdStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n fontWeight: 700,\n backgroundColor: 'transparent',\n padding: 0,\n})\n\nconst opSummaryStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst messageTitleStyle = css({\n fontWeight: 400,\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst messageSummaryStyle = css({\n margin: '0 0 0.5rem',\n fontSize: 'var(--omnispec-font-size-base)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst contentTypeStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-muted)',\n display: 'block',\n marginBottom: '0.5rem',\n backgroundColor: 'transparent',\n padding: 0,\n})\n\nconst headersWrapStyle = css({\n marginTop: '1rem',\n})\n\nconst messageSelectorStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n flexWrap: 'wrap',\n marginBottom: '0.75rem',\n})\n\nconst messageSelectorLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.0313rem',\n whiteSpace: 'nowrap',\n})\n\nconst messageSelectStyle = css({\n padding: '0.375rem 0.625rem',\n border: '1px solid var(--omnispec-input-border)',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-input-bg)',\n color: 'var(--omnispec-fg-primary)',\n fontSize: 'var(--omnispec-font-size-sm)',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst messageCountStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst correlationIdStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n flexWrap: 'wrap',\n marginTop: '0.75rem',\n})\n\nconst correlationIdLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-primary)',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst correlationIdLocationStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-code)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '1px 0.375rem',\n borderRadius: '0.1875rem',\n})\n\nconst correlationIdDescStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst replyStyle = css({\n marginTop: '1rem',\n paddingLeft: '0.75rem',\n borderLeft: '0.125rem solid var(--omnispec-border-color)',\n})\n\nconst replyTitleStyle = css({\n margin: '0 0 0.5rem',\n fontSize: 'var(--omnispec-font-size-md)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-primary)',\n letterSpacing: '0.02em',\n})\n\nconst tagChipsStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n gap: '0.25rem',\n marginBottom: '0.5rem',\n})\n\nconst tagChipStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-fg-secondary)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '1px 0.5rem',\n borderRadius: '0.625rem',\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 { css } from '@core/styles/css'\nimport { mq } from '@core/styles/breakpoints'\nimport type { AsyncApiComponents } from '@asyncapi/types/asyncapi.types'\nimport { Collapsible } from '@core/components/common/Collapsible'\nimport { SchemaTree } from '@core/components/SchemaViewer/SchemaTree'\nimport { schemaToNodes } from '@core/components/SchemaViewer/schema-utils'\nimport { MessagePayload } from './MessagePayload'\n\ninterface ComponentsSectionProps {\n components: AsyncApiComponents\n}\n\nexport function ComponentsSection({ components }: ComponentsSectionProps) {\n const schemas = Object.entries(components.schemas)\n const messages = Object.entries(components.messages ?? {})\n if (schemas.length === 0 && messages.length === 0) return null\n\n return (\n <>\n {messages.length > 0 && (\n <div className={`omnispec-async-messages ${containerStyle}`} id=\"messages\">\n <h2 className={titleStyle}>Messages</h2>\n <div className={schemaWrapperStyle}>\n {messages.map(([name, message]) => (\n <div key={name} className={schemaStyle} id={`message-${name}`}>\n <Collapsible\n title={<code className={schemaNameStyle}>{name}</code>}\n defaultOpen={false}\n >\n {message.title && <p className={messageSummaryStyle}>{message.title}</p>}\n {message.summary && <p className={messageSummaryStyle}>{message.summary}</p>}\n {message.contentType && <code className={contentTypeStyle}>{message.contentType}</code>}\n <MessagePayload message={message} idx={`message-${name}`} />\n {message.headers && (\n <SchemaTree nodes={schemaToNodes(message.headers as Record<string, unknown>)} />\n )}\n </Collapsible>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {schemas.length > 0 && (\n <div className={`omnispec-async-components ${containerStyle}`} id=\"schemas\">\n <h2 className={titleStyle}>Schemas</h2>\n <div className={schemaWrapperStyle}>\n {schemas.map(([name, schema]) => (\n <div key={name} className={schemaStyle} id={`schema-${name}`}>\n <Collapsible\n title={<code className={schemaNameStyle}>{name}</code>}\n defaultOpen={false}\n >\n <SchemaTree nodes={schemaToNodes(schema)} />\n </Collapsible>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )\n}\n\nconst containerStyle = css({\n marginTop: '2rem',\n paddingTop: '1.5rem',\n borderTop: '1px solid var(--omnispec-border-color)',\n [mq.mobile]: {\n borderTop: 'none',\n marginTop: '1.5rem',\n paddingTop: '1rem',\n },\n})\n\nconst titleStyle = css({\n margin: '0 0 1rem',\n fontSize: 'var(--omnispec-h2-font-size)',\n color: 'var(--omnispec-h2-color)',\n fontWeight: 700,\n})\n\nconst schemaWrapperStyle = css({\n border: '1px solid var(--omnispec-border-color)',\n borderRadius: '0.5rem',\n padding: '1.5rem 1rem',\n})\n\nconst schemaStyle = css({\n marginBottom: '0.5rem',\n})\n\nconst schemaNameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-base)',\n fontWeight: 600,\n color: 'var(--omnispec-color-primary)',\n backgroundColor: 'transparent',\n padding: 0,\n '&:hover': {\n textDecoration: 'underline',\n },\n})\n\nconst messageSummaryStyle = css({\n margin: '0 0 0.5rem',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst contentTypeStyle = css({\n display: 'block',\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-muted)',\n marginBottom: '0.5rem',\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 { css } from '@core/styles/css'\nimport { mq } from '@core/styles/breakpoints'\nimport { Icon } from '@core/components/common/Icon'\nimport type { AsyncApiSecurityScheme, AsyncApiOAuthFlow } from '@asyncapi/types/asyncapi.types'\nimport { FieldRows } from './field-display'\n\ninterface SecuritySchemesSectionProps {\n securitySchemes: Record<string, AsyncApiSecurityScheme>\n}\n\n/** Scheme keys rendered specially or already shown, so they skip the generic row list. */\nconst SPECIAL_KEYS = new Set(['type', 'description', 'flows'])\n\n/**\n * Renders the components.securitySchemes for an AsyncAPI document. Every scheme\n * type is supported: the `type` shows as a badge, `description` as prose, OAuth2\n * `flows` render their scopes, and all remaining fields render as labelled rows —\n * so apiKey, http, oauth2, openIdConnect, userPassword, X509, scramSha256/512,\n * gssapi, plain, and the rest all display without a bespoke renderer per type.\n */\nexport function SecuritySchemesSection({ securitySchemes }: SecuritySchemesSectionProps) {\n const entries = Object.entries(securitySchemes ?? {})\n if (entries.length === 0) return null\n\n return (\n <div className={`omnispec-async-security ${containerStyle}`} id=\"security\">\n <h2 className={titleStyle}>Security Schemes</h2>\n <div className={listStyle}>\n {entries.map(([name, scheme]) => (\n <div key={name} className={cardStyle} id={`security-${name}`}>\n <div className={headerStyle}>\n <Icon name=\"lock\" size=\"0.875rem\" />\n <code className={nameStyle}>{name}</code>\n <span className={typeBadgeStyle}>{scheme.type}</span>\n </div>\n\n {scheme.description && <p className={descStyle}>{scheme.description}</p>}\n\n <FieldRows\n fields={Object.entries(scheme).filter(\n ([key, value]) => !SPECIAL_KEYS.has(key) && value !== undefined && typeof value !== 'object',\n )}\n />\n\n {scheme.flows && Object.keys(scheme.flows).length > 0 && (\n <div className={flowsStyle}>\n {Object.entries(scheme.flows).map(([flowName, flow]) => (\n <OAuthFlow key={flowName} name={flowName} flow={flow} />\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction OAuthFlow({ name, flow }: { name: string; flow: AsyncApiOAuthFlow }) {\n const scopes = flow.availableScopes ?? flow.scopes ?? {}\n const urls = Object.entries(flow).filter(\n ([key, value]) => key !== 'availableScopes' && key !== 'scopes' && typeof value === 'string',\n )\n return (\n <div className={flowCardStyle}>\n <div className={flowNameStyle}>{name}</div>\n <FieldRows fields={urls} />\n {Object.keys(scopes).length > 0 && (\n <div className={scopesStyle}>\n <span className={scopesLabelStyle}>Scopes</span>\n <ul className={scopeListStyle}>\n {Object.entries(scopes).map(([scope, desc]) => (\n <li key={scope} className={scopeRowStyle}>\n <code className={scopeNameStyle}>{scope}</code>\n {desc && <span className={scopeDescStyle}>{desc}</span>}\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\nconst containerStyle = css({\n marginTop: '1.5rem',\n paddingTop: '1rem',\n [mq.desktop]: {\n marginTop: '2rem',\n paddingTop: '1.5rem',\n borderTop: '1px solid var(--omnispec-border-color)',\n },\n})\n\nconst titleStyle = css({\n margin: '0 0 1rem',\n fontSize: 'var(--omnispec-h2-font-size)',\n color: 'var(--omnispec-h2-color)',\n fontWeight: 700,\n})\n\nconst listStyle = css({\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n})\n\nconst cardStyle = css({\n padding: '0.75rem 0.875rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-secondary)',\n})\n\nconst headerStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.375rem',\n})\n\nconst nameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-sm)',\n fontWeight: 700,\n color: 'var(--omnispec-color-primary)',\n backgroundColor: 'transparent',\n padding: 0,\n})\n\nconst typeBadgeStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontFamily: 'var(--omnispec-font-mono)',\n color: 'var(--omnispec-fg-secondary)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.0625rem 0.375rem',\n borderRadius: 'var(--omnispec-border-radius)',\n})\n\nconst descStyle = css({\n margin: '0 0 0.5rem',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst flowsStyle = css({\n marginTop: '0.625rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n})\n\nconst flowCardStyle = css({\n padding: '0.5rem 0.625rem',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n})\n\nconst flowNameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst scopesStyle = css({\n marginTop: '0.375rem',\n})\n\nconst scopesLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst scopeListStyle = css({\n listStyle: 'none',\n margin: '0.25rem 0 0',\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '0.125rem',\n})\n\nconst scopeRowStyle = css({\n display: 'flex',\n gap: '0.5rem',\n alignItems: 'baseline',\n flexWrap: 'wrap',\n})\n\nconst scopeNameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-color-primary)',\n})\n\nconst scopeDescStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-secondary)',\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 type { AsyncApiChannel, ParsedAsyncApiSpec } from './types/asyncapi.types'\n\nexport type TagMeta = NonNullable<ParsedAsyncApiSpec['tags']>[number]\n\nexport interface TagGroup {\n /** Tag metadata, or undefined for the synthetic \"Untagged\" bucket. */\n tag?: TagMeta\n /**\n * Stable, DOM/URL-safe identifier for keys and element ids. Derived from the\n * tag `name` (not the display label, which may contain spaces/punctuation and\n * is not unique). De-duplicated across groups.\n */\n id: string\n /** Display label for the group. */\n label: string\n channels: AsyncApiChannel[]\n}\n\nexport const UNTAGGED_LABEL = 'Untagged'\n\n/** Slugify a tag name into a DOM/URL-safe id fragment. */\nfunction slugify(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'tag'\n}\n\n/** The set of tag names carried by a channel's operations. */\nexport function channelTagNames(channel: AsyncApiChannel): string[] {\n const names = new Set<string>()\n for (const op of channel.operations) {\n for (const tag of op.tags ?? []) names.add(tag.name)\n }\n return Array.from(names)\n}\n\n/** True when at least one channel has a tag — i.e. grouping is meaningful. */\nexport function hasAnyTags(channels: AsyncApiChannel[]): boolean {\n return channels.some((ch) => channelTagNames(ch).length > 0)\n}\n\n/**\n * Group channels by the tags their operations carry. A channel with multiple\n * tags appears under each of its tag groups; channels with no tags fall into a\n * trailing \"Untagged\" group. Group order follows the document's declared `tags`\n * first (so tag descriptions/externalDocs order is preserved), then any tags\n * only found on operations, then \"Untagged\" last. Groups with no channels are\n * omitted.\n */\nexport function groupChannelsByTag(\n channels: AsyncApiChannel[],\n specTags: ParsedAsyncApiSpec['tags'],\n): TagGroup[] {\n const byName = new Map<string, AsyncApiChannel[]>()\n const untagged: AsyncApiChannel[] = []\n\n for (const channel of channels) {\n const names = channelTagNames(channel)\n if (names.length === 0) {\n untagged.push(channel)\n continue\n }\n for (const name of names) {\n const list = byName.get(name) ?? []\n list.push(channel)\n byName.set(name, list)\n }\n }\n\n // Preserve declared tag order first, then operation-only tags (alphabetical).\n const declared = (specTags ?? []).map((t) => t.name)\n const operationOnly = Array.from(byName.keys())\n .filter((name) => !declared.includes(name))\n .sort()\n const orderedNames = [...declared.filter((name) => byName.has(name)), ...operationOnly]\n\n const tagMetaByName = new Map((specTags ?? []).map((t) => [t.name, t]))\n\n // Assign a unique, DOM-safe id per group derived from the tag name.\n const usedIds = new Set<string>()\n const uniqueId = (base: string): string => {\n let id = base\n let n = 2\n while (usedIds.has(id)) id = `${base}-${n++}`\n usedIds.add(id)\n return id\n }\n\n const groups: TagGroup[] = orderedNames.map((name) => ({\n tag: tagMetaByName.get(name) ?? { name },\n id: uniqueId(slugify(name)),\n label: tagMetaByName.get(name)?.displayName ?? name,\n channels: byName.get(name) ?? [],\n }))\n\n if (untagged.length > 0) {\n groups.push({ tag: undefined, id: uniqueId('untagged'), label: UNTAGGED_LABEL, channels: untagged })\n }\n\n return groups\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 { css } from '@core/styles/css'\nimport { MarkdownRenderer } from '@core/components/MarkdownRenderer'\nimport type { TagGroup } from '../tag-grouping'\n\n/**\n * Header shown above a tag group's channels: the tag label, a channel count, the\n * tag description, and its externalDocs link (ABOSPEC-51).\n */\nexport function TagGroupHeader({ group }: { group: TagGroup }) {\n return (\n <div className={headerStyle}>\n <h3 className={titleStyle}>\n {group.label}\n <span className={countStyle}>{group.channels.length}</span>\n </h3>\n {group.tag?.description && (\n <div className={descStyle}>\n <MarkdownRenderer content={group.tag.description} />\n </div>\n )}\n {group.tag?.externalDocs && (\n <a\n href={group.tag.externalDocs.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={docsStyle}\n >\n {group.tag.externalDocs.description ?? 'External docs'}\n <span aria-hidden=\"true\"> &#8599;</span>\n </a>\n )}\n </div>\n )\n}\n\nconst headerStyle = css({\n marginBottom: '0.75rem',\n paddingBottom: '0.5rem',\n borderBottom: '0.125rem solid var(--omnispec-border-color)',\n})\n\nconst titleStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.625rem',\n margin: 0,\n fontSize: 'var(--omnispec-h3-font-size)',\n fontWeight: 800,\n color: 'var(--omnispec-h3-color)',\n})\n\nconst countStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 500,\n color: 'var(--omnispec-fg-muted)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.125rem 0.5rem',\n borderRadius: '0.625rem',\n fontFamily: 'var(--omnispec-font-mono)',\n})\n\nconst descStyle = css({\n marginTop: '0.5rem',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n lineHeight: 1.6,\n})\n\nconst docsStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\n marginTop: '0.5rem',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-link)',\n textDecoration: 'none',\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 { useCallback, useMemo, useState } from 'react'\nimport { css, cx } from '@core/styles/css'\nimport type { BaseSpecProps } from '@core/types/common.types'\nimport { SpecType } from '@core/types/spec-detection.types'\nimport { ThemeProvider } from '@core/themes/ThemeProvider'\nimport { ConfigProvider } from '@core/context/ConfigContext'\nimport { ExpandProvider } from '@core/context/ExpandContext'\nimport { resolveSchemaStyle } from '@core/components/SchemaViewer/schema-style'\nimport { DocLayout } from '@core/components/Layout/DocLayout'\nimport { NavTree } from '@core/components/Navigation/NavTree'\nimport type { NavItem } from '@core/components/Navigation/NavTree'\nimport { useScrollSpy, flattenNavItemIds } from '@core/hooks/useScrollSpy'\nimport { useHashScroll, requestExpand } from '@core/hooks/useHashScroll'\nimport { SearchBar } from '@core/components/Navigation/SearchBar'\nimport { buildSidebar } from '@core/components/Navigation/buildSidebar'\nimport { LoadingScreen } from '@core/components/common/LoadingScreen'\nimport { ErrorMessage } from '@core/components/common/ErrorMessage'\nimport { ErrorBoundary } from '@core/components/common/ErrorBoundary'\nimport { SpecStatusScreen } from '@core/components/Layout/SpecStatusScreen'\nimport { SpecToolbar } from '@core/components/common/SpecToolbar'\nimport { resolveDownloadLink } from '@core/utils/resolve-download-link'\nimport { useAsyncApiSpec } from './hooks/useAsyncApiSpec'\nimport { AsyncOverview } from './components/AsyncOverview'\nimport { ServerList } from './components/ServerList'\nimport { ChannelDetail } from './components/ChannelDetail'\nimport { ComponentsSection } from './components/ComponentsSection'\nimport { SecuritySchemesSection } from './components/SecuritySchemesSection'\nimport { groupChannelsByTag, hasAnyTags, type TagGroup } from './tag-grouping'\nimport type { ParsedAsyncApiSpec } from './types/asyncapi.types'\nimport { TagGroupHeader } from './components/TagGroupHeader'\n\nexport function AsyncApiSpec({\n spec,\n theme,\n layout = 'sidebar',\n sidebarPosition = 'left',\n defaultExpandOperations = false,\n downloadLink,\n sidebarNav,\n slots = {},\n schemaStyle,\n pro,\n onSpecLoaded,\n className,\n}: BaseSpecProps) {\n const resolvedSchemaStyle = resolveSchemaStyle(schemaStyle, pro?.advancedSchemaStyles ?? false)\n const { data: parsedSpec, state } = useAsyncApiSpec(spec)\n const [searchQuery, setSearchQuery] = useState('')\n const [allExpanded, setAllExpanded] = useState(defaultExpandOperations)\n const [expandGeneration, setExpandGeneration] = useState(0)\n // Sidebar grouping: by channel (default) or by operation. AsyncAPI 3.x treats\n // operations as first-class, so an operation-first index is offered as a toggle.\n const [navGrouping, setNavGrouping] = useState<'channel' | 'operation'>('channel')\n\n const handleToggleExpand = useCallback(() => {\n setAllExpanded((prev) => !prev)\n setExpandGeneration((prev) => prev + 1)\n }, [])\n\n useMemo(() => {\n if (parsedSpec && onSpecLoaded) {\n const major = parseInt(parsedSpec.specVersion.split('.')[0], 10)\n onSpecLoaded({\n title: parsedSpec.title,\n version: parsedSpec.version,\n type: major >= 3 ? SpecType.ASYNCAPI_3 : SpecType.ASYNCAPI_2,\n })\n }\n }, [parsedSpec, onSpecLoaded])\n\n const filteredChannels = useMemo(() => {\n if (!parsedSpec || !searchQuery.trim()) return parsedSpec?.channels ?? []\n\n const q = searchQuery.toLowerCase()\n return parsedSpec.channels.filter((ch) =>\n ch.address.toLowerCase().includes(q) ||\n ch.description?.toLowerCase().includes(q) ||\n ch.operations.some((op) =>\n op.operationId?.toLowerCase().includes(q) ||\n op.summary?.toLowerCase().includes(q) ||\n (op.tags ?? []).some((t) => t.name.toLowerCase().includes(q)),\n ),\n )\n }, [parsedSpec, searchQuery])\n\n // Group channels by tag when any channel is tagged; otherwise keep a flat list.\n const grouped = useMemo(() => hasAnyTags(filteredChannels), [filteredChannels])\n const tagGroups = useMemo(\n () => (grouped ? groupChannelsByTag(filteredChannels, parsedSpec?.tags) : []),\n [grouped, filteredChannels, parsedSpec],\n )\n\n // The DOM id of each channel's first rendered card. In tag-grouped content a\n // channel can appear under several tag groups; operation-mode nav targets the\n // first occurrence so a single stable anchor always exists.\n const channelDomId = useMemo(() => {\n const map = new Map<string, string>()\n if (grouped) {\n for (const group of tagGroups) {\n for (const ch of group.channels) {\n if (!map.has(ch.name)) map.set(ch.name, `${group.id}-channel-${ch.name}`)\n }\n }\n } else {\n for (const ch of filteredChannels) map.set(ch.name, `channel-${ch.name}`)\n }\n return map\n }, [grouped, tagGroups, filteredChannels])\n\n // The DOM id of an operation block (rendered inside its channel's first card),\n // plus a lookup from that id back to the channel card so operation-mode nav can\n // expand the (collapsed) card before scrolling.\n const operationDomId = useCallback(\n (channelName: string, idx: number) => `${channelDomId.get(channelName) ?? `channel-${channelName}`}-op-${idx}`,\n [channelDomId],\n )\n const opToCard = useMemo(() => {\n const map = new Map<string, string>()\n for (const ch of filteredChannels) {\n const card = channelDomId.get(ch.name) ?? `channel-${ch.name}`\n ch.operations.forEach((_, idx) => map.set(`${card}-op-${idx}`, card))\n }\n return map\n }, [filteredChannels, channelDomId])\n\n const hasOperations = useMemo(\n () => filteredChannels.some((ch) => ch.operations.length > 0),\n [filteredChannels],\n )\n\n const navItems: NavItem[] = useMemo(() => {\n if (!parsedSpec) return []\n\n const actionLabel = (action: string) => action.toUpperCase()\n const actionColor = (action: string) =>\n action === 'subscribe' || action === 'receive'\n ? 'var(--omnispec-color-subscribe)'\n : 'var(--omnispec-color-publish)'\n\n const channelNavItem = (ch: typeof filteredChannels[number], idPrefix: string): NavItem => ({\n id: `${idPrefix}channel-${ch.name}`,\n label: ch.address,\n badge: ch.operations.map((op) => actionLabel(op.action)).join('/') || undefined,\n badgeColor: actionColor(ch.operations[0]?.action ?? ''),\n })\n\n // Operation-first index: one entry per operation. The id is the operation's\n // real DOM anchor so scroll-spy can highlight it (finding 2).\n const operationNavItems = (): NavItem[] =>\n filteredChannels.flatMap((ch) =>\n ch.operations.map((op, idx) => ({\n id: operationDomId(ch.name, idx),\n label: op.operationId ?? op.summary ?? `${actionLabel(op.action)} ${ch.address}`,\n badge: actionLabel(op.action),\n badgeColor: actionColor(op.action),\n })),\n )\n\n const tagGroupNavItem = (group: typeof tagGroups[number]): NavItem => ({\n id: `taggroup-${group.id}`,\n label: group.label,\n badge: String(group.channels.length),\n children: group.channels.map((ch) => channelNavItem(ch, `${group.id}-`)),\n })\n\n // Channel mode: flat tags, or — when x-tagGroups is present — tag groups\n // nested under their x-tagGroup, matching OpenApiSpec (finding 7).\n const channelChildren: NavItem[] = navGrouping === 'operation'\n ? operationNavItems()\n : grouped\n ? nestByTagGroups(tagGroups, parsedSpec.tagGroups, tagGroupNavItem)\n : filteredChannels.map((ch) => channelNavItem(ch, ''))\n\n const items: NavItem[] = []\n\n if (parsedSpec.servers.length > 0) {\n items.push({ id: 'servers', label: 'Servers' })\n }\n\n items.push({\n id: 'channels',\n label: navGrouping === 'operation' ? 'Operations' : 'Channels',\n children: channelChildren,\n })\n\n if (Object.keys(parsedSpec.components.messages ?? {}).length > 0) {\n items.push({\n id: 'messages',\n label: 'Messages',\n children: Object.keys(parsedSpec.components.messages).map((name) => ({\n id: `message-${name}`,\n label: name,\n })),\n })\n }\n\n if (Object.keys(parsedSpec.components.schemas).length > 0) {\n items.push({\n id: 'schemas',\n label: 'Schemas',\n children: Object.keys(parsedSpec.components.schemas).map((name) => ({\n id: `schema-${name}`,\n label: name,\n })),\n })\n }\n\n if (Object.keys(parsedSpec.components.securitySchemes).length > 0) {\n items.push({ id: 'security', label: 'Security Schemes' })\n }\n\n return items\n }, [parsedSpec, grouped, tagGroups, filteredChannels, navGrouping, operationDomId])\n\n const { navigateTo } = useHashScroll(filteredChannels.length)\n\n const handleNavSelect = useCallback((id: string) => {\n // Operation-mode items point at an operation block inside a (collapsed)\n // channel card; expand the card first, then scroll to the operation.\n const cardId = opToCard.get(id)\n if (cardId) {\n requestExpand(cardId)\n navigateTo(id)\n return\n }\n navigateTo(id)\n }, [navigateTo, opToCard])\n\n // Highlight the sidebar entry for the channel/section currently in view.\n const navSectionIds = useMemo(() => flattenNavItemIds(navItems), [navItems])\n const activeSection = useScrollSpy(navSectionIds)\n\n if (state.status === 'loading') {\n return (\n <ThemeProvider theme={theme}>\n <div className={`omnispec-asyncapi ${className ?? ''}`}>\n <LoadingScreen />\n </div>\n </ThemeProvider>\n )\n }\n\n if (state.status === 'error') {\n return (\n <SpecStatusScreen\n theme={theme}\n layout={layout}\n sidebarPosition={sidebarPosition}\n slots={slots}\n sidebarNav={sidebarNav}\n premiumThemingEnabled={pro?.premiumThemingEnabled ?? false}\n className={`omnispec-asyncapi ${className ?? ''}`}\n >\n <ErrorMessage title=\"Failed to load specification\" message={state.error} />\n </SpecStatusScreen>\n )\n }\n\n if (!parsedSpec) return null\n\n const specNav = (\n <>\n <SearchBar\n placeholder=\"Filter channels...\"\n onSearch={setSearchQuery}\n />\n {hasOperations && (\n <div className={groupToggleStyle} role=\"group\" aria-label=\"Sidebar grouping\">\n <span className={groupToggleLabelStyle}>Group by</span>\n <div className={groupToggleButtonsStyle}>\n <button\n type=\"button\"\n className={cx(groupToggleButtonStyle, navGrouping === 'channel' && groupToggleActiveStyle)}\n aria-pressed={navGrouping === 'channel'}\n aria-label=\"Group by channel\"\n onClick={() => setNavGrouping('channel')}\n >\n Channel\n </button>\n <button\n type=\"button\"\n className={cx(groupToggleButtonStyle, navGrouping === 'operation' && groupToggleActiveStyle)}\n aria-pressed={navGrouping === 'operation'}\n aria-label=\"Group by operation\"\n onClick={() => setNavGrouping('operation')}\n >\n Operation\n </button>\n </div>\n </div>\n )}\n <NavTree\n items={navItems}\n activeId={activeSection}\n onSelect={handleNavSelect}\n />\n </>\n )\n\n const sidebar = buildSidebar(sidebarNav, specNav)\n const resolvedDownloadLink = resolveDownloadLink(downloadLink, spec)\n\n return (\n <ConfigProvider config={{ allowTryIt: false, layout, sidebarPosition, defaultExpandOperations, schemaStyle: resolvedSchemaStyle, slots, proRenderers: pro?.renderers ?? new Map(), premiumThemingEnabled: pro?.premiumThemingEnabled ?? false }}>\n <ExpandProvider expandAll={allExpanded} expandGeneration={expandGeneration}>\n <ThemeProvider theme={theme}>\n <div className={`omnispec-asyncapi ${className ?? ''}`}>\n <ErrorBoundary title=\"Failed to render this API reference\">\n <DocLayout\n layout={layout}\n sidebarPosition={sidebarPosition}\n sidebar={sidebar}\n sidebarHeader={slots.sidebarHeader}\n sidebarFooter={slots.sidebarFooter}\n header={slots.header}\n footer={slots.footer}\n >\n <SpecToolbar\n overview={<AsyncOverview spec={parsedSpec} />}\n expandLabel=\"channels\"\n allExpanded={allExpanded}\n onToggleExpand={handleToggleExpand}\n downloadLink={resolvedDownloadLink}\n />\n\n <div id=\"servers\">\n <ServerList servers={parsedSpec.servers} />\n </div>\n\n <div id=\"channels\">\n <h2 className={css({ margin: '0 0 1rem', fontSize: 'var(--omnispec-h2-font-size)', fontWeight: 'var(--omnispec-h2-font-weight)', color: 'var(--omnispec-h2-color)' })}>\n Channels\n </h2>\n {filteredChannels.length === 0 ? (\n <p className={emptyStateStyle}>\n {parsedSpec.channels.length === 0\n ? 'No channels are defined for this API.'\n : 'No channels match your filter.'}\n </p>\n ) : grouped ? (\n tagGroups.map((group) => (\n <section key={group.id} id={`taggroup-${group.id}`} className={tagSectionStyle}>\n <TagGroupHeader group={group} />\n {group.channels.map((channel) => (\n <ChannelDetail\n key={`${group.id}-${channel.name}`}\n id={`${group.id}-channel-${channel.name}`}\n channel={channel}\n expandAll={allExpanded}\n expandGeneration={expandGeneration}\n />\n ))}\n </section>\n ))\n ) : (\n filteredChannels.map((channel) => (\n <ChannelDetail\n key={channel.name}\n id={`channel-${channel.name}`}\n channel={channel}\n expandAll={allExpanded}\n expandGeneration={expandGeneration}\n />\n ))\n )}\n </div>\n\n <ComponentsSection components={parsedSpec.components} />\n\n <SecuritySchemesSection securitySchemes={parsedSpec.components.securitySchemes} />\n </DocLayout>\n </ErrorBoundary>\n </div>\n </ThemeProvider>\n </ExpandProvider>\n </ConfigProvider>\n )\n}\n\n/**\n * Nest tag-group nav items under their `x-tagGroups` parent when the spec\n * declares them (mirrors OpenApiSpec), falling back to a flat list otherwise.\n * Tag groups not referenced by any x-tagGroup (and the Untagged bucket) are\n * appended at the top level so nothing is hidden.\n */\nfunction nestByTagGroups(\n groups: TagGroup[],\n xTagGroups: ParsedAsyncApiSpec['tagGroups'],\n toNav: (group: TagGroup) => NavItem,\n): NavItem[] {\n if (!xTagGroups?.length) return groups.map(toNav)\n\n const byTagName = new Map<string, TagGroup>()\n for (const g of groups) if (g.tag?.name) byTagName.set(g.tag.name, g)\n\n const used = new Set<TagGroup>()\n const grouped: NavItem[] = xTagGroups\n .map((xg) => {\n const children = xg.tags\n .map((t) => byTagName.get(t))\n .filter((g): g is TagGroup => !!g)\n children.forEach((g) => used.add(g))\n return {\n id: `xtaggroup-${xg.name.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'group'}`,\n label: xg.name,\n children: children.map(toNav),\n }\n })\n .filter((item) => (item.children?.length ?? 0) > 0)\n\n const leftover = groups.filter((g) => !used.has(g)).map(toNav)\n return [...grouped, ...leftover]\n}\n\nconst emptyStateStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-muted)',\n fontStyle: 'italic',\n})\n\nconst groupToggleStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 0.75rem 0.25rem',\n flexWrap: 'wrap',\n})\n\nconst groupToggleLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst groupToggleButtonsStyle = css({\n display: 'inline-flex',\n borderRadius: 'var(--omnispec-border-radius)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.125rem',\n})\n\nconst groupToggleButtonStyle = css({\n border: 'none',\n background: 'transparent',\n color: 'var(--omnispec-fg-secondary)',\n fontSize: 'var(--omnispec-font-size-xs)',\n padding: '0.125rem 0.625rem',\n borderRadius: 'calc(var(--omnispec-border-radius) - 1px)',\n cursor: 'pointer',\n})\n\nconst groupToggleActiveStyle = css({\n backgroundColor: 'var(--omnispec-bg-primary)',\n color: 'var(--omnispec-fg-primary)',\n fontWeight: 600,\n boxShadow: 'var(--omnispec-shadow-sm, 0 1px 0.125rem rgba(0,0,0,0.1))',\n})\n\nconst tagSectionStyle = css({\n marginBottom: '2rem',\n})\n"],"names":["raw","rawServers","parseYaml","containerStyle","titleStyle","versionStyle","listStyle","rowStyle","nameStyle","cardStyle","typeBadgeStyle","messageSummaryStyle","contentTypeStyle","headerStyle","descStyle"],"mappings":"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"}