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

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 (59) hide show
  1. package/dist/cjs/asyncapi/index.js +2 -2
  2. package/dist/cjs/chunks/{AsyncApiSpec-BzgUioEK.js → AsyncApiSpec-B-RGmOUL.js} +345 -122
  3. package/dist/cjs/chunks/AsyncApiSpec-B-RGmOUL.js.map +1 -0
  4. package/dist/cjs/chunks/{Collapsible-BTWyDBkX.js → Collapsible-qjYtxwP0.js} +17 -6
  5. package/dist/cjs/chunks/Collapsible-qjYtxwP0.js.map +1 -0
  6. package/dist/cjs/chunks/{OmniSpecRenderer-CRipDRtC.js → OmniSpecRenderer-Bh-IQod3.js} +3 -3
  7. package/dist/cjs/chunks/{OmniSpecRenderer-CRipDRtC.js.map → OmniSpecRenderer-Bh-IQod3.js.map} +1 -1
  8. package/dist/cjs/chunks/{OpenApiSpec-BOlesoUX.js → OpenApiSpec-5V9E-wQH.js} +3 -3
  9. package/dist/cjs/chunks/{OpenApiSpec-BOlesoUX.js.map → OpenApiSpec-5V9E-wQH.js.map} +1 -1
  10. package/dist/cjs/chunks/{OpenIdConnectManual-Bh7tdxoH.js → OpenIdConnectManual-DXDG8bcp.js} +2 -2
  11. package/dist/cjs/chunks/{OpenIdConnectManual-Bh7tdxoH.js.map → OpenIdConnectManual-DXDG8bcp.js.map} +1 -1
  12. package/dist/cjs/core/public.js +2 -2
  13. package/dist/cjs/index.js +5 -5
  14. package/dist/cjs/openapi/index.js +3 -3
  15. package/dist/cjs/wc/index.js +1 -1
  16. package/dist/esm/asyncapi/index.js +2 -2
  17. package/dist/esm/chunks/{AsyncApiSpec-B757IIHz.js → AsyncApiSpec-C0tdvyEP.js} +345 -122
  18. package/dist/esm/chunks/AsyncApiSpec-C0tdvyEP.js.map +1 -0
  19. package/dist/esm/chunks/{Collapsible-MyJB2agz.js → Collapsible-CPxS90KX.js} +17 -6
  20. package/dist/esm/chunks/Collapsible-CPxS90KX.js.map +1 -0
  21. package/dist/esm/chunks/{OmniSpecRenderer-5RUZx-C7.js → OmniSpecRenderer-DmXZtPRr.js} +3 -3
  22. package/dist/esm/chunks/{OmniSpecRenderer-5RUZx-C7.js.map → OmniSpecRenderer-DmXZtPRr.js.map} +1 -1
  23. package/dist/esm/chunks/{OpenApiSpec-wm3tH2vF.js → OpenApiSpec-CoPhPro1.js} +3 -3
  24. package/dist/esm/chunks/{OpenApiSpec-wm3tH2vF.js.map → OpenApiSpec-CoPhPro1.js.map} +1 -1
  25. package/dist/esm/chunks/{OpenIdConnectManual-DPmTIIIy.js → OpenIdConnectManual-DhrAcSCa.js} +2 -2
  26. package/dist/esm/chunks/{OpenIdConnectManual-DPmTIIIy.js.map → OpenIdConnectManual-DhrAcSCa.js.map} +1 -1
  27. package/dist/esm/core/public.js +2 -2
  28. package/dist/esm/index.js +5 -5
  29. package/dist/esm/openapi/index.js +3 -3
  30. package/dist/esm/wc/index.js +1 -1
  31. package/dist/types/asyncapi/AsyncApiSpec.d.ts.map +1 -1
  32. package/dist/types/asyncapi/components/AsyncOverview.d.ts.map +1 -1
  33. package/dist/types/asyncapi/components/BindingsSection.d.ts.map +1 -1
  34. package/dist/types/asyncapi/components/ChannelDetail.d.ts.map +1 -1
  35. package/dist/types/asyncapi/components/ComponentsSection.d.ts.map +1 -1
  36. package/dist/types/asyncapi/components/ExternalDocsLink.d.ts.map +1 -1
  37. package/dist/types/asyncapi/components/ExternalLink.d.ts +31 -0
  38. package/dist/types/asyncapi/components/ExternalLink.d.ts.map +1 -0
  39. package/dist/types/asyncapi/components/MessagePayload.d.ts.map +1 -1
  40. package/dist/types/asyncapi/components/SecurityRequirementBadges.d.ts.map +1 -1
  41. package/dist/types/asyncapi/components/TagChips.d.ts +27 -0
  42. package/dist/types/asyncapi/components/TagChips.d.ts.map +1 -0
  43. package/dist/types/asyncapi/components/field-display.d.ts +11 -3
  44. package/dist/types/asyncapi/components/field-display.d.ts.map +1 -1
  45. package/dist/types/asyncapi/parser/asyncapi-parser.d.ts.map +1 -1
  46. package/dist/types/asyncapi/tag-grouping.d.ts +9 -5
  47. package/dist/types/asyncapi/tag-grouping.d.ts.map +1 -1
  48. package/dist/types/asyncapi/types/asyncapi.types.d.ts +25 -12
  49. package/dist/types/asyncapi/types/asyncapi.types.d.ts.map +1 -1
  50. package/dist/types/core/components/Navigation/SearchBar.d.ts +7 -1
  51. package/dist/types/core/components/Navigation/SearchBar.d.ts.map +1 -1
  52. package/dist/types/core/components/SchemaViewer/schema-utils.d.ts.map +1 -1
  53. package/dist/wc/standalone.js +1 -1
  54. package/dist/wc/standalone.js.map +1 -1
  55. package/package.json +12 -2
  56. package/dist/cjs/chunks/AsyncApiSpec-BzgUioEK.js.map +0 -1
  57. package/dist/cjs/chunks/Collapsible-BTWyDBkX.js.map +0 -1
  58. package/dist/esm/chunks/AsyncApiSpec-B757IIHz.js.map +0 -1
  59. package/dist/esm/chunks/Collapsible-MyJB2agz.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncApiSpec-C0tdvyEP.js","sources":["../../../src/asyncapi/parser/asyncapi-parser.ts","../../../src/asyncapi/hooks/useAsyncApiSpec.ts","../../../src/asyncapi/components/ExternalLink.tsx","../../../src/asyncapi/components/ExternalDocsLink.tsx","../../../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/components/TagChips.tsx","../../../src/asyncapi/schema-formats.ts","../../../src/asyncapi/components/MessagePayload.tsx","../../../src/asyncapi/components/ChannelDetail.tsx","../../../src/asyncapi/components/ChannelReferenceDetail.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 AsyncApiSecurityRequirement,\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 defaultContentType?: 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 externalDocs?: { description?: string; url: string }\n tags?: Array<{ name: string; description?: string }>\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 externalDocs?: { description?: string; url: string }\n traits?: Array<Partial<OperationObjectV2>>\n}\n\ninterface OperationObjectV3 {\n action: 'send' | 'receive'\n channel?: { $ref?: string } | ChannelObject\n title?: string\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 externalDocs?: { description?: string; url: string }\n reply?: {\n channel?: unknown\n messages?: Array<{ $ref?: string } | MessageObject>\n // Per the 3.x spec the reply address is a Reply Address Object with a\n // runtime-expression `location`; some documents also give a fixed literal\n // address as a plain string. Accept both.\n address?: { location?: string; description?: string } | string\n }\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 externalDocs?: { description?: string; url: string }\n traits?: MessageObject[]\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/**\n * Merge one message layer over a base; `override` wins on scalars, tags and\n * externalDocs (RFC 7386: a present array/scalar replaces). Composite fields\n * (headers, examples, bindings) keep their QA-approved merge behavior.\n */\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 === '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 // Scalars, `tags` and `externalDocs` all follow the override-wins rule.\n ;(result as Record<string, unknown>)[key] = value\n }\n }\n return result\n}\n\n/**\n * Derive the identifier of each applied trait, in applied (declaration) order.\n * Prefers the raw (pre-resolution) `$ref` target name (traits are commonly\n * `$ref`s whose pointer resolveRefs has since inlined), then the resolved\n * trait's `name`/`title`, then a positional fallback so every applied trait is\n * still surfaced.\n */\nfunction deriveAppliedTraitNames(\n traits: MessageObject[],\n rawTraits?: unknown[],\n): string[] {\n return traits.map((trait, i) => {\n const raw = rawTraits?.[i] as Record<string, unknown> | undefined\n if (raw && typeof raw === 'object' && typeof raw.$ref === 'string') {\n const last = raw.$ref.split('/').pop()\n if (last) return decodeJsonPointerSegment(last)\n }\n return trait.name ?? trait.title ?? `trait ${i + 1}`\n })\n}\n\n/**\n * Apply AsyncAPI message traits. `$ref`s in `traits` are already inlined by\n * resolveRefs. Version-aware per the AsyncAPI spec:\n * - 2.x: the TRAIT wins — base is the object, then each trait is applied on top\n * in declaration order (`acc = merge(acc, trait)`), so traits override the\n * object's scalars and a later trait overrides an earlier one.\n * - 3.x: the OBJECT wins — fold traits in declaration order, then the object\n * last.\n */\nfunction applyMessageTraits(msg: MessageObject, isV3: boolean): MessageObject {\n if (!msg.traits || msg.traits.length === 0) return msg\n if (isV3) {\n let acc: MessageObject = {}\n for (const trait of msg.traits) acc = mergeMessageLayer(acc, trait)\n return mergeMessageLayer(acc, msg)\n }\n let acc: MessageObject = msg\n for (const trait of msg.traits) acc = mergeMessageLayer(acc, trait)\n return acc\n}\n\n/**\n * Merge one operation layer over a base; `override` wins on scalars, tags and\n * externalDocs. `bindings` object-merge is preserved.\n */\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 === 'bindings') {\n result.bindings = { ...(base.bindings as Record<string, unknown> ?? {}), ...(value as Record<string, unknown>) }\n } else {\n // Scalars, `tags` and `externalDocs` all follow the override-wins rule.\n result[key] = value\n }\n }\n return result as T\n}\n\n/**\n * Apply AsyncAPI operation traits. Version-aware (see applyMessageTraits):\n * - 2.x: the trait wins (base = object, apply traits on top).\n * - 3.x: the object wins (fold traits, then the object last).\n * Preserves operation-shape keys (action, channel, message).\n */\nfunction applyOperationTraits<T extends { traits?: Array<Partial<T>> }>(op: T, isV3: boolean): T {\n if (!op.traits || op.traits.length === 0) return op\n if (isV3) {\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 let acc = op\n for (const trait of op.traits) acc = mergeOperationLayer(acc, trait as T)\n return acc\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 defaultContentType = api.defaultContentType\n const channels = isV3\n ? extractChannelsV3(api, rawApi, defaultContentType)\n : extractChannelsV2(api, defaultContentType)\n const components = extractComponents(api, rawApi, isV3, defaultContentType)\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 defaultContentType,\n }\n}\n\nfunction extractServers(api: AsyncApiDocument, rawApi: AsyncApiDocument): AsyncApiServer[] {\n if (!api.servers) return []\n\n const isV3 = parseInt(api.asyncapi.split('.')[0], 10) >= 3\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 securityRequirements: deriveSecurityRequirements(rawSecurity, s.security, isV3),\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, defaultContentType?: string): 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, defaultContentType))\n }\n if (ch.subscribe) {\n operations.push(convertOperationV2('subscribe', ch.subscribe, defaultContentType))\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 // 2.x channels have no externalDocs or channel-level tags.\n xInternal: raw['x-internal'] as boolean | undefined,\n }\n })\n}\n\nfunction convertOperationV2(\n action: 'publish' | 'subscribe',\n rawOp: OperationObjectV2,\n defaultContentType?: string,\n): AsyncApiOperation {\n const op = applyOperationTraits(rawOp, false)\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, false, defaultContentType))\n }\n } else {\n messages.push(convertMessage(op.message as MessageObject, false, defaultContentType))\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 externalDocs: op.externalDocs,\n securityNames: deriveSecurityNames(undefined, op.security),\n securityRequirements: deriveSecurityRequirements(undefined, op.security, false),\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\ntype ReplyAddress = { location?: string; value?: string; description?: string }\n\n/**\n * Normalize a 3.x reply `address` into the model shape. A plain string is a\n * fixed literal address (`value`); an object carries a runtime-expression\n * `location` (dynamic) plus an optional `description`.\n */\nfunction normalizeReplyAddress(\n address: { location?: string; description?: string } | string | undefined,\n): ReplyAddress | undefined {\n if (typeof address === 'string') {\n return address.length > 0 ? { value: address } : undefined\n }\n if (address && typeof address === 'object') {\n const { location, description } = address\n if (location || description) return { location, description }\n }\n return undefined\n}\n\nfunction extractChannelsV3(\n api: AsyncApiDocument,\n rawApi: AsyncApiDocument,\n defaultContentType?: string,\n): AsyncApiChannel[] {\n const channelMap = new Map<string, AsyncApiChannel>()\n const addressToName = new Map<string, string>()\n\n // First, register all channels (a document may legally define none)\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 externalDocs: ch.externalDocs,\n tags: ch.tags,\n xInternal: raw['x-internal'] as boolean | undefined,\n })\n }\n\n // Then attach operations to channels\n const orphanOperations: AsyncApiOperation[] = []\n if (api.operations) {\n for (const [opKey, resolvedOp] of Object.entries(api.operations)) {\n const op = applyOperationTraits(resolvedOp, true)\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, true, defaultContentType))\n }\n return out\n }\n\n let messages = collectMessages(op.messages)\n // Per the AsyncAPI 3.0 spec, an operation that declares no `messages`\n // applies to ALL of its channel's messages (not none).\n if (messages.length === 0 && channelName && api.channels?.[channelName]?.messages) {\n messages = collectMessages(\n Object.values(api.channels[channelName].messages as Record<string, unknown>) as Array<\n { $ref?: string } | MessageObject\n >,\n )\n }\n const replyMessages = collectMessages(op.reply?.messages)\n // The reply `channel` $ref tail (prefer the pre-resolution raw pointer).\n const rawReplyChannel = (rawOp?.reply as { channel?: unknown } | undefined)?.channel as\n | OperationObjectV3['channel']\n | undefined\n const replyChannelName = resolveChannelName(\n rawReplyChannel,\n op.reply?.channel as OperationObjectV3['channel'] | undefined,\n addressToName,\n )\n\n const raw = op as unknown as Record<string, unknown>\n const replyAddress = normalizeReplyAddress(op.reply?.address)\n const reply =\n replyMessages.length > 0 || replyAddress || replyChannelName\n ? {\n messages: replyMessages,\n address: replyAddress,\n channelName: replyChannelName,\n }\n : undefined\n\n const operation: AsyncApiOperation = {\n action: op.action,\n // 3.x has no operationId field; the operations-map key is the id.\n operationId: opKey,\n title: op.title,\n summary: op.summary,\n description: op.description,\n messages,\n message: messages[0],\n tags: op.tags,\n bindings: op.bindings,\n externalDocs: op.externalDocs,\n securityNames: deriveSecurityNames(rawOp?.security, op.security),\n securityRequirements: deriveSecurityRequirements(rawOp?.security, op.security, true),\n reply,\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 } else {\n // The operation references a channel that isn't defined in this\n // document (an invalid spec). Surface it under a synthetic group\n // rather than silently dropping it.\n orphanOperations.push(operation)\n }\n }\n }\n\n const channels = Array.from(channelMap.values())\n if (orphanOperations.length > 0) {\n channels.push({\n name: '__unassigned__',\n address: 'Unassigned operations',\n description:\n 'Unresolved reference: these operations reference an undefined channel ' +\n '(the channel is missing from this document, or the document defines no channels). ' +\n 'They are surfaced here rather than dropped.',\n operations: orphanOperations,\n })\n }\n return channels\n}\n\nfunction convertMessage(\n rawMsg: MessageObject,\n isV3: boolean,\n defaultContentType?: string,\n rawTraits?: unknown[],\n): AsyncApiMessage {\n const msg = applyMessageTraits(rawMsg, isV3)\n const hasOwnContentType = typeof msg.contentType === 'string' && msg.contentType.length > 0\n const contentType = hasOwnContentType\n ? msg.contentType\n : defaultContentType ?? 'application/json'\n const appliedTraits =\n rawMsg.traits && rawMsg.traits.length > 0\n ? deriveAppliedTraitNames(rawMsg.traits, rawTraits)\n : undefined\n return {\n name: msg.name,\n title: msg.title,\n summary: msg.summary,\n description: msg.description,\n contentType,\n contentTypeInherited: hasOwnContentType ? undefined : true,\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 externalDocs: msg.externalDocs,\n appliedTraits,\n }\n}\n\nfunction extractComponents(\n api: AsyncApiDocument,\n rawApi: AsyncApiDocument,\n isV3: boolean,\n defaultContentType?: string,\n): 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 // The pre-resolution component messages still hold their trait `$ref` pointers\n // (resolveRefs inlines them), so read trait identifiers from there.\n const rawComponentMessages = (rawApi.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, isV3, defaultContentType, rawComponentMessages[name]?.traits)\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\n/**\n * Derive full security requirements (name + per-requirement scopes), preserving\n * the OR/AND structure. The outer array is the OR list (one entry per `security`\n * array element); each inner array is the AND set within that alternative.\n *\n * - 2.x: each `security` entry is a map `{ schemeName: [scopes...] }`. A map with\n * several keys is an AND, so one inner array holds one requirement per key.\n * - 3.x: each `security` entry is a Security Scheme Object (usually a `$ref`, so\n * read the name from the pre-resolution `$ref` tail). The required scopes live\n * on the entry's `scopes` array (3.0). → a singleton inner array.\n */\nfunction deriveSecurityRequirements(\n raw: unknown[] | undefined,\n resolved: unknown[] | undefined,\n isV3: boolean,\n): AsyncApiSecurityRequirement[][] | 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 out: AsyncApiSecurityRequirement[][] = []\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\n if (isV3) {\n // 3.x: a Security Scheme Object entry → one requirement.\n let name: string | undefined\n if (rawEntry && typeof rawEntry === 'object' && typeof rawEntry.$ref === 'string') {\n name = decodeJsonPointerSegment(rawEntry.$ref.split('/').pop() as string)\n } else if (resEntry && typeof resEntry.type === 'string') {\n name = resEntry.type\n }\n if (name === undefined) continue\n // Scopes may be a sibling of the `$ref` (raw) or survive onto the resolved\n // entry after the ref is inlined.\n const rawScopes = rawEntry?.scopes\n const resScopes = resEntry?.scopes\n const scopesSource = Array.isArray(rawScopes)\n ? rawScopes\n : Array.isArray(resScopes)\n ? resScopes\n : []\n const scopes = (scopesSource as unknown[]).map(String)\n out.push([{ name, scopes }])\n } else {\n // 2.x: a requirement map `{ schemeName: [scopes...] }` → AND of its keys.\n const map = (rawEntry ?? resEntry) as Record<string, unknown> | undefined\n if (!map || typeof map !== 'object') continue\n const inner: AsyncApiSecurityRequirement[] = Object.entries(map).map(([name, scopes]) => ({\n name,\n scopes: Array.isArray(scopes) ? (scopes as unknown[]).map(String) : [],\n }))\n if (inner.length > 0) out.push(inner)\n }\n }\n return out.length > 0 ? out : 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 type { ReactNode } from 'react'\nimport { css, cx } from '@core/styles/css'\nimport { Icon } from '@core/components/common/Icon'\n\ninterface ExternalLinkProps {\n href: string\n /** Visible link text. */\n children: ReactNode\n /**\n * Accessible name for the link. The \"opens in new tab\" affordance is appended\n * automatically so screen-reader users know the target opens in a new tab.\n */\n label: string\n className?: string\n}\n\n/**\n * The shared \"opens in a new tab\" link treatment used across the AsyncAPI\n * renderer — a safe `target=\"_blank\"` anchor with the ↗ external-link icon and\n * an accessible \"opens in new tab\" label. `ExternalDocsLink` composes this for\n * documentation links; overview contact/license links use it directly so every\n * new-tab link gets the same icon + a11y treatment.\n */\nexport function ExternalLink({ href, children, label, className }: ExternalLinkProps) {\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`${label}, opens in new tab`}\n className={cx(linkStyle, className)}\n >\n {children}\n <Icon name=\"external-link\" size=\"0.875em\" />\n </a>\n )\n}\n\nconst linkStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\n color: 'var(--omnispec-fg-link)',\n textDecoration: 'none',\n minWidth: 0,\n overflowWrap: 'anywhere',\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 { css, cx } from '@core/styles/css'\nimport { ExternalLink } from '@asyncapi/components/ExternalLink'\nimport type { AsyncApiExternalDocs } from '../types/asyncapi.types'\n\ninterface ExternalDocsLinkProps {\n externalDocs: AsyncApiExternalDocs\n /**\n * A short name for the thing these docs belong to (tag, operation, message, or\n * \"API\"). Used only to disambiguate the accessible label — several\n * \"External docs\" links on one page are indistinguishable to a screen reader\n * otherwise.\n */\n context?: string\n className?: string\n}\n\n/**\n * The single external-documentation link used across the AsyncAPI renderer\n * (root, tag, channel, operation, message). Guarantees a consistent ↗ icon,\n * safe `target=\"_blank\"`, and an accessible \"opens in new tab\" label everywhere.\n */\nexport function ExternalDocsLink({ externalDocs, context, className }: ExternalDocsLinkProps) {\n const label = externalDocs.description ?? 'External docs'\n const ariaLabel = context ? `${context} external docs` : 'External docs'\n\n return (\n <ExternalLink href={externalDocs.url} label={ariaLabel} className={cx(docsLinkStyle, className)}>\n {label}\n </ExternalLink>\n )\n}\n\nconst docsLinkStyle = css({\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 { css, cx } from '@core/styles/css'\nimport type { ParsedAsyncApiSpec } from '../types/asyncapi.types'\nimport { MarkdownRenderer } from '@core/components/MarkdownRenderer'\nimport { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\nimport { ExternalLink } from '@asyncapi/components/ExternalLink'\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> · <ExternalLink\n href={spec.contact.url}\n label={`${spec.contact.name ?? spec.title ?? 'Contact'} website`}\n >{spec.contact.url}</ExternalLink></span>\n )}\n </div>\n )}\n\n {spec.license && (\n <div className={metaStyle}>\n License: {spec.license.url\n ? <ExternalLink href={spec.license.url} label={`${spec.license.name} license`}>{spec.license.name}</ExternalLink>\n : spec.license.name\n }\n </div>\n )}\n\n {spec.externalDocs && (\n <div className={metaStyle}>\n <ExternalDocsLink externalDocs={spec.externalDocs} context={spec.title ?? 'API'} />\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/**\n * `\"cleanSession\"` / `\"clean_session\"` → `\"Clean Session\"`.\n *\n * Keys that start with `x-` (case-insensitive) are vendor/custom extensions, not\n * official binding fields, so their literal key is preserved (`x-subprotocol`\n * stays `x-subprotocol`, never \"X subprotocol\") to signal that distinction.\n */\nexport function humanizeField(field: string): string {\n if (/^x-/i.test(field)) return field\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 isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Heuristic: does this object look like a JSON Schema (as opposed to a plain\n * config object)? AsyncAPI binding fields like Kafka `key`/`groupId` and\n * WebSocket/HTTP `query`/`headers` are JSON Schemas and read best as a schema\n * table; plain config objects (Kafka `topicConfiguration`, AMQP\n * `queue`/`exchange`) read best as nested labelled rows.\n */\nconst JSON_SCHEMA_TYPES = new Set([\n 'string', 'number', 'integer', 'boolean', 'object', 'array', 'null',\n])\n\n/** True when `type` names a JSON-schema type (not e.g. an AMQP exchange \"topic\"). */\nfunction hasSchemaType(value: Record<string, unknown>): boolean {\n const t = value.type\n if (typeof t === 'string') return JSON_SCHEMA_TYPES.has(t)\n if (Array.isArray(t)) return t.every((x) => typeof x === 'string' && JSON_SCHEMA_TYPES.has(x))\n return false\n}\n\nfunction isJsonSchema(value: Record<string, unknown>): boolean {\n // `properties`/`enum`/`items` are unambiguous schema keywords. A bare `type`\n // only counts when its value is an actual JSON-schema type — config objects\n // like AMQP `exchange`/`queue` also carry a `type` (e.g. \"topic\"/\"fanout\").\n return 'properties' in value || 'enum' in value || 'items' in value || hasSchemaType(value)\n}\n\n/** Arrays whose every element is a scalar (string/number/boolean/null). */\nfunction isScalarArray(value: unknown[]): boolean {\n return value.every(\n (item) => item === null || typeof item !== 'object',\n )\n}\n\nfunction renderValue(value: unknown, verbatim: boolean): 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\n if (Array.isArray(value)) {\n if (value.length === 0) return <span className={mutedStyle}>none</span>\n // Arrays of scalars (e.g. AMQP cc/bcc) → comma-separated, not a raw literal.\n if (isScalarArray(value)) {\n return <span>{value.map((item) => String(item)).join(', ')}</span>\n }\n // Array of objects — fall through to a readable JSON block (rare in bindings).\n return <code className={jsonStyle}>{JSON.stringify(value, null, 2)}</code>\n }\n\n if (isPlainObject(value)) {\n // JSON Schemas render as a compact schema table.\n if (isJsonSchema(value)) {\n return <SchemaValue schema={value} />\n }\n // Plain config objects render as nested labelled rows.\n const nested = Object.entries(value).filter(([, v]) => v !== undefined)\n if (nested.length === 0) return <span className={mutedStyle}>none</span>\n return (\n <div className={nestedStyle}>\n <FieldRows fields={nested} verbatim={verbatim} />\n </div>\n )\n }\n\n // Fallback for anything unexpected.\n return <code className={jsonStyle}>{JSON.stringify(value)}</code>\n}\n\n/**\n * Renders a JSON Schema binding value (e.g. Kafka `key`/`groupId`, WebSocket\n * `query`) as a compact name / type / description table matching the payload\n * schema look. For a schema whose `properties` are defined, each property is a\n * row; for a leaf schema, a single row shows its type, description, and any\n * `enum` of allowed values.\n */\nfunction SchemaValue({ schema }: { schema: Record<string, unknown> }) {\n const properties = isPlainObject(schema.properties) ? schema.properties : undefined\n\n if (properties && Object.keys(properties).length > 0) {\n return (\n <div className={schemaTableStyle}>\n {Object.entries(properties).map(([name, propSchema]) => (\n <SchemaRow\n key={name}\n name={name}\n schema={isPlainObject(propSchema) ? propSchema : {}}\n />\n ))}\n </div>\n )\n }\n\n // Leaf schema — a single description row.\n return (\n <div className={schemaTableStyle}>\n <SchemaLeaf schema={schema} />\n </div>\n )\n}\n\nfunction SchemaRow({ name, schema }: { name: string; schema: Record<string, unknown> }) {\n return (\n <div className={schemaRowStyle}>\n <code className={schemaNameStyle}>{name}</code>\n <SchemaLeaf schema={schema} />\n </div>\n )\n}\n\n/** The type / description / enum portion of a schema entry. */\nfunction SchemaLeaf({ schema }: { schema: Record<string, unknown> }) {\n const type = typeof schema.type === 'string' ? schema.type : undefined\n const description = typeof schema.description === 'string' ? schema.description : undefined\n const enumValues = Array.isArray(schema.enum) ? schema.enum : undefined\n\n // A single allowed/fixed value is just that value — showing \"type + Allowed:\n // [value]\" for one option is noise. Render the lone value on its own.\n if (enumValues && enumValues.length === 1 && !description) {\n return (\n <div className={schemaLeafStyle}>\n <code className={enumItemStyle}>{String(enumValues[0])}</code>\n </div>\n )\n }\n\n return (\n <div className={schemaLeafStyle}>\n {type && <span className={schemaTypeStyle}>{type}</span>}\n {description && <span className={schemaDescStyle}>{description}</span>}\n {enumValues && enumValues.length > 0 && (\n <span className={enumWrapStyle}>\n <span className={enumLabelStyle}>Allowed:</span>\n {enumValues.map((v, i) => (\n <code key={i} className={enumItemStyle}>\n {String(v)}\n </code>\n ))}\n </span>\n )}\n </div>\n )\n}\n\n/**\n * A key/value grid used to render binding fields and security-scheme fields.\n * Values are formatted by type. Shared so binding and security displays stay\n * visually identical and a change lands in one place.\n *\n * `verbatim` shows field keys exactly as written in the spec (like `x-` keys) —\n * used for protocol-binding/config fields, whose keys carry acronyms (`URL`,\n * `ID`) and dotted names (`cleanup.policy`) that generic title-casing mangles.\n * When unset, keys are humanized (`clean_session` → \"Clean session\") for the\n * security-scheme fields that read better that way. The flag threads into nested\n * config objects so a binding's child keys stay verbatim too.\n *\n * Object values recurse: plain config objects render as nested labelled rows,\n * JSON-Schema values render as a compact schema table, and scalar arrays render\n * as comma-separated values rather than raw JSON.\n */\nexport function FieldRows({\n fields,\n verbatim = false,\n}: {\n fields: Array<[string, unknown]>\n verbatim?: boolean\n}) {\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}>{verbatim ? field : humanizeField(field)}</dt>\n <dd className={valueStyle}>{renderValue(value, verbatim)}</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 minWidth: 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 overflowWrap: 'anywhere',\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 display: 'block',\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-code)',\n margin: 0,\n whiteSpace: 'pre',\n overflowX: 'auto',\n maxWidth: '100%',\n overflowWrap: 'anywhere',\n})\n\nconst mutedStyle = css({\n color: 'var(--omnispec-fg-muted)',\n})\n\n/** Nested labelled rows for a plain config object, indented under the parent. */\nconst nestedStyle = css({\n minWidth: 0,\n paddingLeft: '0.5rem',\n marginTop: '0.125rem',\n boxShadow: 'inset 2px 0 0 0 var(--omnispec-border-color)',\n})\n\n/** Compact schema table for JSON-Schema binding values. */\nconst schemaTableStyle = css({\n display: 'flex',\n flexDirection: 'column',\n gap: '0.25rem',\n minWidth: 0,\n})\n\nconst schemaRowStyle = css({\n display: 'flex',\n flexDirection: 'column',\n gap: '0.125rem',\n minWidth: 0,\n})\n\nconst schemaNameStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-primary)',\n overflowWrap: 'anywhere',\n})\n\nconst schemaLeafStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'baseline',\n gap: '0.375rem',\n minWidth: 0,\n})\n\nconst schemaTypeStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-code)',\n})\n\nconst schemaDescStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-secondary)',\n overflowWrap: 'anywhere',\n wordBreak: 'break-word',\n})\n\nconst enumWrapStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'baseline',\n gap: '0.25rem',\n minWidth: 0,\n})\n\nconst enumLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst enumItemStyle = 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 borderRadius: 'var(--omnispec-border-radius)',\n padding: '0.02rem 0.3rem',\n overflowWrap: 'anywhere',\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 // Binding/config keys are shown verbatim — their acronyms (URL,\n // ID) and dotted names (cleanup.policy) must not be title-cased.\n <FieldRows fields={rows} verbatim />\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 { Fragment } from 'react'\nimport { css } from '@core/styles/css'\nimport { Icon } from '@core/components/common/Icon'\nimport type { AsyncApiSecurityRequirement } from '../types/asyncapi.types'\n\ninterface SecurityRequirementBadgesProps {\n /**\n * Security requirements to render. Outer array = OR alternatives; inner array\n * = schemes that must ALL apply (AND) within an alternative.\n */\n requirements: AsyncApiSecurityRequirement[][]\n label?: string\n}\n\n/**\n * Renders a server- or operation-level security requirement as a row of lock-badge\n * links, each pointing to its entry in the Security Schemes section. Per-requirement\n * scopes render beside the scheme name (e.g. `oauth2Auth · read, write`). When more\n * than one OR alternative exists, alternatives are separated by an \"OR\" divider so\n * \"any one of\" semantics read clearly. Shared by ServerList and ChannelDetail so the\n * two stay visually identical.\n */\nexport function SecurityRequirementBadges({ requirements, label = 'Security' }: SecurityRequirementBadgesProps) {\n if (!requirements || requirements.length === 0) return null\n\n return (\n <div className={rowStyle}>\n <span className={labelStyle}>{label}</span>\n {requirements.map((alternative, altIndex) => {\n const chips = alternative.map((scheme) => (\n <a key={scheme.name} href={`#security-${scheme.name}`} className={badgeStyle}>\n <Icon name=\"lock\" size=\"0.625rem\" strokeWidth={2.5} />\n {scheme.name}\n {scheme.scopes.length > 0 && (\n <span className={scopesStyle}>\n <span className={scopeSepStyle}>·</span>\n {scheme.scopes.join(', ')}\n </span>\n )}\n </a>\n ))\n // Keep the \"OR\" divider glued to the chip(s) that follow it so the pair\n // wraps together as a unit — the divider never strands alone at the end\n // of a line on narrow screens (finding 4).\n return altIndex === 0 ? (\n <Fragment key={altIndex}>{chips}</Fragment>\n ) : (\n <span key={altIndex} className={orGroupStyle}>\n <span className={orStyle}>OR</span>\n {chips}\n </span>\n )\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 // Breathing room below the security row so it doesn't butt against the next\n // section on narrow screens (finding 3).\n marginBottom: '0.5rem',\n})\n\n// An OR divider and the chip(s) that follow it share a non-wrapping group so\n// the pair wraps as a single unit, never leaving \"OR\" stranded (finding 4).\nconst orGroupStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n whiteSpace: 'nowrap',\n})\n\nconst labelStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n lineHeight: 1.5,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst orStyle = css({\n fontSize: 'var(--omnispec-font-size-xxs)',\n lineHeight: 1.5,\n fontWeight: 700,\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\nconst scopesStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.3125rem',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst scopeSepStyle = 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 { 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 requirements={server.securityRequirements ?? []} />\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\nimport { css } from '@core/styles/css'\nimport { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\nimport type { AsyncApiTag } from '@asyncapi/types/asyncapi.types'\n\ninterface TagChipsProps {\n tags: AsyncApiTag[]\n /**\n * When provided, each chip becomes a button that invokes this with the tag\n * name (e.g. to filter by tag). When absent, chips render as static spans.\n */\n onTagClick?: (tagName: string) => void\n}\n\n/**\n * The shared tag-chip row used wherever AsyncAPI tags render (channel,\n * operation, message). Renders each tag as a chip and, when a tag carries its\n * own `externalDocs`, that tag's docs link via the shared `ExternalDocsLink`\n * (↗ icon + accessible \"opens in new tab\" label).\n */\nexport function TagChips({ tags, onTagClick }: TagChipsProps) {\n if (!tags || tags.length === 0) return null\n\n return (\n <div className={tagChipsStyle}>\n {tags.map((tag) => (\n <span key={tag.name} className={tagItemStyle}>\n {onTagClick ? (\n <button\n type=\"button\"\n className={tagChipButtonStyle}\n title={tag.description}\n onClick={() => onTagClick(tag.name)}\n >\n {tag.name}\n </button>\n ) : (\n <span className={tagChipStyle} title={tag.description}>{tag.name}</span>\n )}\n {tag.externalDocs && (\n <ExternalDocsLink externalDocs={tag.externalDocs} context={tag.name} />\n )}\n </span>\n ))}\n </div>\n )\n}\n\nconst tagChipsStyle = css({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n})\n\nconst tagItemStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.25rem',\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\nconst tagChipButtonStyle = 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 border: 'none',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--omnispec-fg-primary)',\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'\nimport { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\nimport { TagChips } from '@asyncapi/components/TagChips'\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.tags && message.tags.length > 0 && <TagChips tags={message.tags} />}\n {/* Which message traits were applied, in applied order (compact chips). */}\n {message.appliedTraits && message.appliedTraits.length > 0 && (\n <div className={traitsRowStyle}>\n <span className={traitsLabelStyle}>Traits:</span>\n {message.appliedTraits.map((trait, i) => (\n <code key={`${trait}-${i}`} className={traitChipStyle}>{trait}</code>\n ))}\n </div>\n )}\n {message.externalDocs && (\n <div className={externalDocsStyle}>\n <ExternalDocsLink\n externalDocs={message.externalDocs}\n context={message.name ?? message.title ?? 'message'}\n />\n </div>\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.\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 format = detectSchemaFormat(schemaFormat)\n\n // Protobuf: full `.proto` field-tree parsing is a Pro capability; the free core\n // surfaces the `.proto` source cleanly in a code block (inside a tab affordance\n // matching JSON/Avro payloads) rather than collapsing it to the bare word \"any\"\n // or dumping a JSON-escaped one-line string. A string payload is the raw\n // `.proto` source and renders verbatim; a structured object is pretty-printed.\n if (format === 'protobuf') {\n const isSource = typeof rawPayload === 'string'\n const code = isSource ? (rawPayload as unknown as string) : JSON.stringify(rawPayload, null, 2)\n return (\n <Tabs\n tabs={[\n {\n id: `schema-${idx}`,\n label: 'Payload Schema',\n content: (\n <div>\n <CodeBlock code={code} language={isSource ? 'text' : 'json'} />\n <p className={proNoteStyle}>Full Protobuf schema rendering is available in Pro.</p>\n </div>\n ),\n },\n ]}\n />\n )\n }\n\n const schema = format === '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 externalDocsStyle = css({\n marginBottom: '0.5rem',\n})\n\nconst traitsRowStyle = css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '0.375rem',\n marginBottom: '0.5rem',\n})\n\nconst traitsLabelStyle = css({\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 700,\n color: 'var(--omnispec-fg-muted)',\n})\n\nconst traitChipStyle = css({\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})\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 proNoteStyle = css({\n margin: '0.375rem 0 0',\n fontSize: 'var(--omnispec-font-size-xxs)',\n color: 'var(--omnispec-fg-muted)',\n fontStyle: 'italic',\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 { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\nimport { TagChips } from '@asyncapi/components/TagChips'\nimport { MessagePayload } from './MessagePayload'\n\ninterface ChannelDetailProps {\n channel: AsyncApiChannel\n id?: string\n expandAll?: boolean\n expandGeneration?: number\n /**\n * When provided, operation tag chips become buttons that invoke this with the\n * tag name (e.g. to filter the spec by tag). When absent, chips render static.\n */\n onTagClick?: (tagName: string) => void\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, onTagClick }: 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 {/* Channel's own tags (2.x and 3.x) — chips, each with its docs link */}\n {channel.tags && channel.tags.length > 0 && (\n <TagChips tags={channel.tags} onTagClick={onTagClick} />\n )}\n\n {/* Channel-level external documentation (3.x) */}\n {channel.externalDocs && (\n <div className={sectionStyle}>\n <ExternalDocsLink externalDocs={channel.externalDocs} context={channel.address} />\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 className={opNameLineStyle}>\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.title && <span className={opTitleStyle}>{op.title}</span>}\n </span>\n {/* Summary stacks under the name line (flexBasis 100%) so it isn't\n crushed beside the operation name on narrow viewports (finding 5). */}\n {op.summary && <span className={opSummaryStyle}>{op.summary}</span>}\n </div>\n\n {op.tags && op.tags.length > 0 && (\n <TagChips tags={op.tags} onTagClick={onTagClick} />\n )}\n\n {op.description && (\n <div className={sectionStyle}>\n <MarkdownRenderer content={op.description} />\n </div>\n )}\n\n {op.externalDocs && (\n <div className={opExternalDocsStyle}>\n <ExternalDocsLink\n externalDocs={op.externalDocs}\n context={op.operationId ?? op.summary ?? 'operation'}\n />\n </div>\n )}\n\n <SecurityRequirementBadges requirements={op.securityRequirements ?? []} />\n\n <OperationMessages operation={op} idx={idx} />\n\n {op.reply && (op.reply.messages.length > 0 || op.reply.address || op.reply.channelName) && (\n <div className={replyStyle}>\n <h4 className={replyTitleStyle}>Reply</h4>\n {op.reply.channelName && (\n <div className={replyMetaRowStyle}>\n <span className={replyMetaLabelStyle}>channel</span>\n <code className={replyMetaValueStyle}>{op.reply.channelName}</code>\n </div>\n )}\n {op.reply.address && (op.reply.address.value || op.reply.address.location || op.reply.address.description) && (\n <div className={replyMetaRowStyle}>\n <span className={replyMetaLabelStyle}>address</span>\n {/* A fixed literal address (`reply.address` as a string) and a\n dynamic/runtime-expression `location` are both surfaced. */}\n {op.reply.address.value && (\n <code className={replyMetaValueStyle}>{op.reply.address.value}</code>\n )}\n {op.reply.address.location && (\n <code className={replyMetaValueStyle}>{op.reply.address.location}</code>\n )}\n {op.reply.address.description && (\n <span className={replyMetaDescStyle}>{op.reply.address.description}</span>\n )}\n </div>\n )}\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 flexWrap: 'wrap',\n gap: '0.25rem 0.5rem',\n marginBottom: '0.5rem',\n})\n\n// The action badge + operationId + title share one line; the summary (below)\n// stacks under them so it keeps its full width on narrow screens.\nconst opNameLineStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '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 opTitleStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-primary)',\n})\n\nconst opSummaryStyle = css({\n flexBasis: '100%',\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-secondary)',\n})\n\nconst opExternalDocsStyle = css({\n marginBottom: '0.75rem',\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 replyMetaRowStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n flexWrap: 'wrap',\n marginBottom: '0.5rem',\n})\n\nconst replyMetaLabelStyle = 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 replyMetaValueStyle = 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 replyMetaDescStyle = 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 { css, cx } from '@core/styles/css'\nimport { mq } from '@core/styles/breakpoints'\nimport type { AsyncApiChannel, AsyncApiOperation } from '@asyncapi/types/asyncapi.types'\nimport { MarkdownRenderer } from '@core/components/MarkdownRenderer'\nimport { MethodBar } from '@core/components/common/MethodBar'\nimport { ExpandableCard } from '@core/components/common/ExpandableCard'\nimport { ReferenceLayout } from '@core/components/Reference/ReferenceLayout'\nimport { buildConstraints } from '@core/components/SchemaViewer/schema-utils'\nimport { SchemaBadge } from '@core/components/SchemaViewer/SchemaPrimitives'\nimport { BindingsSection } from './BindingsSection'\nimport { SecurityRequirementBadges } from './SecurityRequirementBadges'\nimport { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\nimport { MessagePayload } from './MessagePayload'\n\ninterface ChannelReferenceDetailProps {\n channel: AsyncApiChannel\n id?: string\n expandAll?: boolean\n expandGeneration?: number\n /**\n * When provided, operation tag chips become buttons that invoke this with the\n * tag name (e.g. to filter the spec by tag). When absent, chips render static.\n */\n onTagClick?: (tagName: string) => void\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\n/**\n * Reference (three-panel) presentation of a channel — the AsyncAPI parallel to\n * the OpenAPI `displayMode: 'reference'` layout. Each operation renders in a\n * `ReferenceLayout`: the left column carries the operation detail (action,\n * description, parameters, security, bindings) and the right \"Samples\" column\n * carries the message payload schema + example (via the read-only\n * `MessagePayload`). AsyncAPI has no browser Try-It, so the Try-It slot is empty.\n *\n * Compact mode keeps using `ChannelDetail`; this wrapper is only mounted when\n * `displayMode === 'reference'`.\n */\nexport function ChannelReferenceDetail({ channel, id, expandAll, expandGeneration, onTagClick }: ChannelReferenceDetailProps) {\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 <MethodBar label={primaryLabel} path={channel.address} color={primaryColor} />\n\n {channel.description && (\n <div className={channelMetaStyle}>\n <MarkdownRenderer content={channel.description} />\n </div>\n )}\n {channel.externalDocs && (\n <div className={channelMetaStyle}>\n <ExternalDocsLink externalDocs={channel.externalDocs} context={channel.address} />\n </div>\n )}\n\n {channel.operations.map((op, idx) => (\n <div key={idx} id={id ? `${id}-op-${idx}` : undefined} className={operationWrapStyle}>\n <ReferenceLayout\n operationId={op.operationId ?? `${channel.name}-op-${idx}`}\n schema={\n <OperationSchemaColumn\n channel={channel}\n operation={op}\n onTagClick={onTagClick}\n />\n }\n samples={<OperationSamplesColumn operation={op} idx={idx} />}\n tryIt={<div className={tryItNaStyle}>Interactive testing is not available for AsyncAPI protocols.</div>}\n />\n </div>\n ))}\n </ExpandableCard>\n )\n}\n\n/**\n * Left \"schema\" column: the operation's metadata + channel parameters. Mirrors\n * the compact ChannelDetail body minus the inline message payload (which moves\n * to the samples column in reference mode).\n */\nfunction OperationSchemaColumn({\n channel,\n operation,\n onTagClick,\n}: {\n channel: AsyncApiChannel\n operation: AsyncApiOperation\n onTagClick?: (tagName: string) => void\n}) {\n return (\n <div>\n <div className={opHeaderStyle}>\n <span\n className={cx(actionBadgeBase, css({\n backgroundColor: actionColors[operation.action] ?? 'var(--omnispec-fg-muted)',\n }))}\n >\n {actionLabels[operation.action] ?? operation.action.toUpperCase()}\n </span>\n {operation.operationId && <span className={opIdStyle}>{operation.operationId}</span>}\n {operation.title && <span className={opTitleStyle}>{operation.title}</span>}\n {operation.summary && <span className={opSummaryStyle}>{operation.summary}</span>}\n </div>\n\n {operation.tags && operation.tags.length > 0 && (\n <div className={tagChipsStyle}>\n {operation.tags.map((tag) =>\n onTagClick ? (\n <button\n key={tag.name}\n type=\"button\"\n className={tagChipButtonStyle}\n title={tag.description}\n onClick={() => onTagClick(tag.name)}\n >\n {tag.name}\n </button>\n ) : (\n <span key={tag.name} className={tagChipStyle} title={tag.description}>{tag.name}</span>\n ),\n )}\n </div>\n )}\n\n {operation.description && (\n <div className={sectionStyle}>\n <MarkdownRenderer content={operation.description} />\n </div>\n )}\n\n {operation.externalDocs && (\n <div className={sectionStyle}>\n <ExternalDocsLink\n externalDocs={operation.externalDocs}\n context={operation.operationId ?? operation.summary ?? 'operation'}\n />\n </div>\n )}\n\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 && <pre className={typeBadgeStyle}>{paramType}</pre>}\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 && <p className={paramDescStyle}>{param.description}</p>}\n </div>\n )\n })}\n </div>\n </div>\n )}\n\n <SecurityRequirementBadges requirements={operation.securityRequirements ?? []} />\n\n <BindingsSection bindings={operation.bindings} title=\"Operation Bindings\" />\n <BindingsSection bindings={channel.bindings} title=\"Channel Bindings\" />\n </div>\n )\n}\n\n/**\n * Right \"samples\" column: the message payload schema + example for each message\n * the operation carries (plus any reply messages). Composes the read-only\n * `MessagePayload`, the same renderer compact mode uses inline.\n */\nfunction OperationSamplesColumn({ operation, idx }: { operation: AsyncApiOperation; idx: number }) {\n const messages = operation.messages ?? []\n const replyMessages = operation.reply?.messages ?? []\n\n if (messages.length === 0 && replyMessages.length === 0) {\n return <div className={emptySamplesStyle}>No message payload is defined for this operation.</div>\n }\n\n return (\n <div className={samplesColumnStyle}>\n {messages.map((message, i) => (\n <div key={i}>\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.contentType && <code className={contentTypeStyle}>{message.contentType}</code>}\n <MessagePayload message={message} idx={`${idx}-msg-${i}`} />\n </div>\n ))}\n\n {replyMessages.length > 0 && (\n <div className={replyStyle}>\n <h4 className={sectionTitleStyle}>Reply</h4>\n {replyMessages.map((message, i) => (\n <MessagePayload key={i} message={message} idx={`${idx}-reply-${i}`} />\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// --- Styles (mirrors ChannelDetail so both display modes look consistent) ---\n\nconst channelMetaStyle = css({\n padding: '0.75rem 1rem 0',\n [mq.desktop]: {\n padding: '1rem 1.25rem 0',\n },\n})\n\nconst operationWrapStyle = css({\n borderTop: '1px solid var(--omnispec-border-color)',\n})\n\nconst tryItNaStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-muted)',\n fontStyle: 'italic',\n padding: '0.5rem 0',\n})\n\nconst samplesColumnStyle = css({\n display: 'flex',\n flexDirection: 'column',\n gap: '1.5rem',\n})\n\nconst emptySamplesStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n color: 'var(--omnispec-fg-muted)',\n fontStyle: 'italic',\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 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 opTitleStyle = css({\n fontSize: 'var(--omnispec-font-size-sm)',\n fontWeight: 600,\n color: 'var(--omnispec-fg-primary)',\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 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 replyStyle = css({\n paddingLeft: '0.75rem',\n borderLeft: '0.125rem solid var(--omnispec-border-color)',\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\nconst tagChipButtonStyle = 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 border: 'none',\n cursor: 'pointer',\n '&:hover': {\n color: 'var(--omnispec-fg-primary)',\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 } 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 && (\n <code className={contentTypeStyle}>{message.contentType}</code>\n )}\n <MessagePayload message={message} idx={`message-${name}`} />\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 {message.headers && (\n <div className={headersWrapStyle}>\n <h4 className={headersTitleStyle}>Headers</h4>\n <SchemaTree nodes={schemaToNodes(message.headers as Record<string, unknown>)} />\n </div>\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\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 headersWrapStyle = css({\n marginTop: '1rem',\n})\n\nconst headersTitleStyle = 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","/**\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/**\n * The set of tag names a channel groups under: the channel's own (3.x) tags plus\n * every tag carried by its operations. A channel tagged only at the channel level\n * (untagged operations) still groups correctly.\n */\nexport function channelTagNames(channel: AsyncApiChannel): string[] {\n const names = new Set<string>()\n for (const tag of channel.tags ?? []) names.add(tag.name)\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, in priority:\n * 1. the `x-tagGroups` order (when provided) — so the main content matches the\n * sidebar, which nests groups under their `x-tagGroups` parent;\n * 2. then the document's declared `tags` order (tag descriptions/externalDocs\n * order is preserved);\n * 3. then any tags only found on operations (alphabetical);\n * 4. then \"Untagged\" last.\n * Groups with no channels are omitted.\n */\nexport function groupChannelsByTag(\n channels: AsyncApiChannel[],\n specTags: ParsedAsyncApiSpec['tags'],\n xTagGroups?: ParsedAsyncApiSpec['tagGroups'],\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 // Order priority: x-tagGroups order, then declared tag order, then\n // operation-only tags (alphabetical). The sidebar nests groups under their\n // x-tagGroup parent, so honoring x-tagGroups here keeps the main content in\n // the same order as the nav (and matches 2.x).\n const xGrouped = (xTagGroups ?? []).flatMap((xg) => xg.tags).filter((name) => byName.has(name))\n const declared = (specTags ?? []).map((t) => t.name)\n const seen = new Set<string>(xGrouped)\n const declaredRemaining = declared.filter((name) => byName.has(name) && !seen.has(name))\n declaredRemaining.forEach((name) => seen.add(name))\n const operationOnly = Array.from(byName.keys())\n .filter((name) => !seen.has(name))\n .sort()\n // De-dup xGrouped (an x-tagGroup may list a tag more than once).\n const orderedNames = [...new Set([...xGrouped, ...declaredRemaining, ...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 { ExternalDocsLink } from '@asyncapi/components/ExternalDocsLink'\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.\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 <div className={docsStyle}>\n <ExternalDocsLink externalDocs={group.tag.externalDocs} context={group.label} />\n </div>\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 marginTop: '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 { 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 { Icon } from '@core/components/common/Icon'\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 { ChannelReferenceDetail } from './components/ChannelReferenceDetail'\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 displayMode,\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 // Match OpenApiSpec: `reference` switches to the three-panel layout; anything\n // else (including unset) stays compact single-column.\n const resolvedDisplayMode = displayMode ?? 'compact'\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 // When a tag chip is clicked it drives the same search filter, but we also\n // track which tag is active so the filter can be shown as a dismissible\n // indicator and toggled off by re-clicking the active chip.\n const [activeTagFilter, setActiveTagFilter] = useState<string | null>(null)\n\n const handleToggleExpand = useCallback(() => {\n setAllExpanded((prev) => !prev)\n setExpandGeneration((prev) => prev + 1)\n }, [])\n\n // Clicking a tag chip filters to that tag; clicking the already-active tag\n // toggles the filter back off (so there's always a way to clear it).\n const handleTagFilter = useCallback((tagName: string) => {\n setActiveTagFilter((prev) => {\n const next = prev === tagName ? null : tagName\n setSearchQuery(next ?? '')\n return next\n })\n }, [])\n\n // Typing in the filter box is an independent search — it supersedes (and\n // clears) any active tag filter so the indicator never lies about why the\n // list is filtered.\n const handleSearch = useCallback((query: string) => {\n setSearchQuery(query)\n setActiveTagFilter(null)\n }, [])\n\n const clearTagFilter = useCallback(() => {\n setActiveTagFilter(null)\n setSearchQuery('')\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, parsedSpec?.tagGroups) : []),\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 // Operations referencing a channel that isn't defined (including documents\n // with zero channels) are collected by the parser under a synthetic\n // \"__unassigned__\" group. Surface an always-visible notice so they never\n // disappear silently behind a collapsed card.\n const unassignedOpCount = useMemo(\n () =>\n parsedSpec?.channels\n .filter((ch) => ch.name === '__unassigned__')\n .reduce((sum, ch) => sum + ch.operations.length, 0) ?? 0,\n [parsedSpec],\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 // Dedupe actions so a channel with two same-action operations shows one\n // badge (e.g. `RECEIVE`, not `RECEIVE/RECEIVE`).\n const uniqueActions = [...new Set(ch.operations.map((op) => actionLabel(op.action)))]\n return {\n id: `${idPrefix}channel-${ch.name}`,\n label: ch.address,\n badge: uniqueActions.join('/') || undefined,\n badgeColor: actionColor(ch.operations[0]?.action ?? ''),\n }\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 // When a search filters every channel out, don't leave a bare empty\n // \"Channels\" parent — surface a non-navigating \"No results\" affordance\n // instead. If the spec genuinely has no channels, omit the\n // group entirely rather than show a misleading \"No results\".\n const searchedToEmpty = channelChildren.length === 0 && searchQuery.trim().length > 0\n const channelsChildren: NavItem[] = searchedToEmpty\n ? [{ id: 'channels-no-results', label: 'No results', className: noResultsNavStyle }]\n : channelChildren\n\n if (channelsChildren.length > 0) {\n items.push({\n id: 'channels',\n label: navGrouping === 'operation' ? 'Operations' : 'Channels',\n children: channelsChildren,\n })\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, searchQuery])\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={handleSearch}\n value={searchQuery}\n />\n {activeTagFilter && (\n <div className={activeFilterStyle}>\n <span className={activeFilterLabelStyle}>Filtered by tag:</span>\n <span className={activeFilterTagStyle}>{activeTagFilter}</span>\n <button\n type=\"button\"\n className={activeFilterClearStyle}\n onClick={clearTagFilter}\n aria-label={`Clear tag filter: ${activeTagFilter}`}\n >\n Clear\n <Icon name=\"xmark\" size=\"0.75rem\" strokeWidth={2.5} />\n </button>\n </div>\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, displayMode: resolvedDisplayMode, 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 {unassignedOpCount > 0 && (\n <p className={unassignedNoticeStyle} role=\"alert\">\n {`Unresolved reference: ${unassignedOpCount} ${unassignedOpCount === 1 ? 'operation references' : 'operations reference'} an undefined channel. ${unassignedOpCount === 1 ? 'It is' : 'They are'} listed under \"Unassigned operations\" below rather than dropped.`}\n </p>\n )}\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 <ChannelCard\n key={`${group.id}-${channel.name}`}\n id={`${group.id}-channel-${channel.name}`}\n channel={channel}\n displayMode={resolvedDisplayMode}\n expandAll={allExpanded}\n expandGeneration={expandGeneration}\n onTagClick={handleTagFilter}\n />\n ))}\n </section>\n ))\n ) : (\n filteredChannels.map((channel) => (\n <ChannelCard\n key={channel.name}\n id={`channel-${channel.name}`}\n channel={channel}\n displayMode={resolvedDisplayMode}\n expandAll={allExpanded}\n expandGeneration={expandGeneration}\n onTagClick={handleTagFilter}\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 * Picks the channel renderer by display mode: the three-panel\n * `ChannelReferenceDetail` for `reference`, the compact single-column\n * `ChannelDetail` otherwise. Both accept the same props, so switching modes is a\n * pure presentation change — anchors, expand state, and tag-click wiring carry\n * over unchanged.\n */\nfunction ChannelCard({\n channel,\n id,\n displayMode,\n expandAll,\n expandGeneration,\n onTagClick,\n}: {\n channel: ParsedAsyncApiSpec['channels'][number]\n id: string\n displayMode: 'compact' | 'reference'\n expandAll: boolean\n expandGeneration: number\n onTagClick: (tagName: string) => void\n}) {\n const Renderer = displayMode === 'reference' ? ChannelReferenceDetail : ChannelDetail\n return (\n <Renderer\n id={id}\n channel={channel}\n expandAll={expandAll}\n expandGeneration={expandGeneration}\n onTagClick={onTagClick}\n />\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 unassignedNoticeStyle = css({\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.625rem 0.875rem',\n marginBottom: '1rem',\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 noResultsNavStyle = css({\n fontStyle: 'italic',\n color: 'var(--omnispec-fg-muted)',\n cursor: 'default',\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\n// Active tag-filter indicator, shown under the filter box so there's always a\n// visible sign that (and why) the list is filtered, plus a way to clear it.\nconst activeFilterStyle = css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n gap: '0.375rem',\n padding: '0 0.75rem 0.5rem',\n})\n\nconst activeFilterLabelStyle = 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 activeFilterTagStyle = css({\n fontFamily: 'var(--omnispec-font-mono)',\n fontSize: 'var(--omnispec-font-size-xs)',\n fontWeight: 500,\n color: 'var(--omnispec-fg-primary)',\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n padding: '0.125rem 0.5rem',\n borderRadius: 'var(--omnispec-border-radius)',\n})\n\nconst activeFilterClearStyle = css({\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.1875rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n marginLeft: 'auto',\n padding: '0.125rem 0.25rem',\n borderRadius: 'var(--omnispec-border-radius)',\n fontSize: 'var(--omnispec-font-size-xxs)',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--omnispec-color-primary)',\n '&:hover': {\n backgroundColor: 'var(--omnispec-bg-tertiary)',\n },\n})\n"],"names":["acc","raw","rawServers","parseYaml","linkStyle","containerStyle","titleStyle","versionStyle","schemaNameStyle","listStyle","rowStyle","nameStyle","scopesStyle","cardStyle","Fragment","tagChipsStyle","tagChipButtonStyle","tagChipStyle","actionLabels","actionColors","sectionStyle","sectionTitleStyle","paramListStyle","paramRowStyle","paramHeaderStyle","paramNameStyle","typeBadgeStyle","paramConstraintsStyle","paramDescStyle","opHeaderStyle","actionBadgeBase","opIdStyle","opTitleStyle","opSummaryStyle","replyStyle","messageTitleStyle","messageSummaryStyle","contentTypeStyle","correlationIdStyle","correlationIdLabelStyle","correlationIdLocationStyle","correlationIdDescStyle","headersWrapStyle","headerStyle","descStyle"],"mappings":"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"}