@redocly/theme 0.69.0-next.0 → 0.69.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/components/Buttons/ConnectMCPButton.js +43 -14
  2. package/lib/components/MCP/McpConnectionTabs.d.ts +7 -0
  3. package/lib/components/MCP/McpConnectionTabs.js +151 -0
  4. package/lib/components/Markdown/Markdown.js +1 -1
  5. package/lib/core/constants/accordion.d.ts +3 -0
  6. package/lib/core/constants/accordion.js +7 -0
  7. package/lib/core/constants/index.d.ts +1 -0
  8. package/lib/core/constants/index.js +1 -0
  9. package/lib/core/constants/mcp.d.ts +2 -0
  10. package/lib/core/constants/mcp.js +8 -1
  11. package/lib/core/hooks/use-active-section-id.js +3 -1
  12. package/lib/core/hooks/use-connect-mcp-button.d.ts +1 -1
  13. package/lib/core/hooks/use-connect-mcp-button.js +16 -13
  14. package/lib/core/styles/global.js +46 -39
  15. package/lib/core/types/catalog.d.ts +2 -0
  16. package/lib/core/types/l10n.d.ts +1 -1
  17. package/lib/core/types/mcp.d.ts +1 -1
  18. package/lib/core/utils/mcp.d.ts +5 -0
  19. package/lib/core/utils/mcp.js +35 -0
  20. package/lib/icons/CodexIcon/CodexIcon.d.ts +25 -0
  21. package/lib/icons/CodexIcon/CodexIcon.js +22 -0
  22. package/lib/layouts/McpNotAllowed.js +5 -3
  23. package/lib/markdoc/components/Accordion/Accordion.d.ts +9 -0
  24. package/lib/markdoc/components/Accordion/Accordion.js +132 -0
  25. package/lib/markdoc/components/Accordion/AccordionGroup.d.ts +5 -0
  26. package/lib/markdoc/components/Accordion/AccordionGroup.js +29 -0
  27. package/lib/markdoc/components/Accordion/variables.d.ts +1 -0
  28. package/lib/markdoc/components/Accordion/variables.js +40 -0
  29. package/lib/markdoc/components/default.d.ts +2 -0
  30. package/lib/markdoc/components/default.js +2 -0
  31. package/lib/markdoc/default.d.ts +4 -0
  32. package/lib/markdoc/default.js +4 -0
  33. package/lib/markdoc/tags/accordion-group.d.ts +2 -0
  34. package/lib/markdoc/tags/accordion-group.js +10 -0
  35. package/lib/markdoc/tags/accordion.d.ts +2 -0
  36. package/lib/markdoc/tags/accordion.js +14 -0
  37. package/lib/markdoc/tags/connect-mcp.js +2 -1
  38. package/package.json +2 -2
  39. package/src/components/Buttons/ConnectMCPButton.tsx +44 -14
  40. package/src/components/MCP/McpConnectionTabs.tsx +263 -0
  41. package/src/components/Markdown/Markdown.tsx +2 -1
  42. package/src/core/constants/accordion.ts +4 -0
  43. package/src/core/constants/index.ts +1 -0
  44. package/src/core/constants/mcp.ts +10 -0
  45. package/src/core/hooks/use-active-section-id.ts +3 -1
  46. package/src/core/hooks/use-connect-mcp-button.ts +23 -15
  47. package/src/core/styles/global.ts +8 -1
  48. package/src/core/types/catalog.ts +3 -0
  49. package/src/core/types/l10n.ts +17 -0
  50. package/src/core/types/mcp.ts +1 -1
  51. package/src/core/utils/mcp.ts +39 -0
  52. package/src/icons/CodexIcon/CodexIcon.tsx +23 -0
  53. package/src/layouts/McpNotAllowed.tsx +4 -2
  54. package/src/markdoc/components/Accordion/Accordion.tsx +128 -0
  55. package/src/markdoc/components/Accordion/AccordionGroup.tsx +41 -0
  56. package/src/markdoc/components/Accordion/variables.ts +37 -0
  57. package/src/markdoc/components/default.ts +2 -0
  58. package/src/markdoc/default.ts +4 -0
  59. package/src/markdoc/tags/accordion-group.ts +8 -0
  60. package/src/markdoc/tags/accordion.ts +12 -0
  61. package/src/markdoc/tags/connect-mcp.ts +3 -1
@@ -1,5 +1,5 @@
1
1
  import type { TOptions } from 'i18next';
2
- export type TranslationKey = 'dev.newApp' | 'dev.newApp.text' | 'dev.sidebar.header' | 'dev.sidebar.footer.text' | 'dev.create.app.dialog.appName.placeholder' | 'dev.create.app.dialog.appName.error' | 'dev.create.app.dialog.selectAPIs' | 'dev.create.app.dialog.description' | 'dev.create.app.dialog.description.placeholder' | 'dev.create.app.dialog.create' | 'dev.create.app.dialog.cancel' | 'dev.main.tab.appKeys' | 'dev.main.tab.logs' | 'dev.app.description.title' | 'dev.edit.description.dialog.title' | 'dev.edit.description.dialog.save' | 'dev.edit.description.dialog.cancel' | 'dev.create.app.dialog.callbackUrls' | 'dev.create.app.dialog.callbackUrls.placeholder' | 'dev.create.app.dialog.callbackUrls.hint' | 'dev.app.callbackUrls.title' | 'dev.edit.callbackUrls.dialog.title' | 'dev.edit.callbackUrls.dialog.placeholder' | 'dev.edit.callbackUrls.dialog.hint' | 'dev.edit.callbackUrls.dialog.save' | 'dev.edit.callbackUrls.dialog.cancel' | 'dev.edit.apis.dialog.selectedAPIs' | 'dev.app.key.create' | 'dev.create.key.dialog.title' | 'dev.create.key.dialog.create' | 'dev.create.key.dialog.cancel' | 'dev.app.edit' | 'dev.app.delete' | 'dev.edit.app.dialog.title' | 'dev.edit.app.dialog.save' | 'dev.edit.app.dialog.cancel' | 'dev.delete.app.dialog.title' | 'dev.delete.app.dialog.confirmation' | 'dev.delete.app.dialog.delete' | 'dev.delete.app.dialog.cancel' | 'dev.app.key.roll' | 'dev.roll.key.dialog.title' | 'dev.roll.key.dialog.apiKey' | 'dev.roll.key.dialog.expires' | 'dev.roll.key.dialog.confirmation' | 'dev.roll.key.dialog.cancel' | 'dev.roll.key.dialog.roll' | 'dev.update.key.dialog.title' | 'dev.update.key.dialog.update' | 'dev.update.key.dialog.cancel' | 'dev.app.key.api.name' | 'dev.app.key.api.status' | 'dev.app.key.api.edit' | 'dev.edit.apis.dialog.title' | 'dev.edit.apis.dialog.apiKey' | 'dev.edit.apis.dialog.save' | 'dev.edit.apis.dialog.cancel' | 'dev.select.placeholder' | 'dev.app.overview.status.pending' | 'dev.app.overview.status.approved' | 'dev.app.overview.status.revoked' | 'dev.app.overview.status' | 'dev.app.overview.non-production' | 'dev.app.overview.production' | 'dev.app.overview.clientId' | 'dev.app.overview.apiKey' | 'dev.app.key.revoke' | 'dev.revoke.key.dialog.title' | 'dev.revoke.key.dialog.apiKey' | 'dev.revoke.key.dialog.expires' | 'dev.revoke.key.dialog.confirmation' | 'dev.revoke.key.dialog.revoke' | 'dev.revoke.key.dialog.cancel' | 'dev.app.overview.expires' | 'dev.app.overview.created' | 'dev.app.overview.visibilityToggle.hide' | 'dev.app.overview.visibilityToggle.show' | 'search.loading' | 'search.noResults.title' | 'search.keys.navigate' | 'search.keys.select' | 'search.keys.exit' | 'search.label' | 'search.cancel' | 'search.recent' | 'search.navbar.label' | 'search.suggested' | 'search.showMore' | 'search.error.title' | 'search.error.button' | 'search.filter.title' | 'search.filter.reset' | 'search.filter.field.reset' | 'search.ai.welcomeText' | 'search.ai.newConversation' | 'search.ai.backToSearch' | 'search.ai.back' | 'search.ai.assistant' | 'search.ai.placeholder' | 'search.ai.generatingResponse' | 'search.ai.followUpQuestion' | 'search.ai.suggestionsTitle' | 'search.ai.thinkingText' | 'search.ai.resourcesFound' | 'search.ai.resourcesFound.basedOn' | 'search.ai.resourcesFound.resources' | 'search.ai.feedback.title' | 'search.ai.feedback.detailsPlaceholder' | 'search.ai.feedback.thanks' | 'search.ai.toolCall.executed' | 'search.ai.toolCall.executing' | 'search.ai.toolCall.withArgs' | 'search.ai.button' | 'search.ai.label' | 'search.ai.disclaimer' | 'search.ai.error.description' | 'search.ai.error.description.forbidden' | 'search.ai.error.description.unauthorized' | 'search.ai.error.header' | 'search.ai.error.header.forbidden' | 'search.ai.error.header.unauthorized' | 'search.ai.feedback.more' | 'search.searchItem.deprecated' | 'search.groups.all' | 'search.filter.field.footer' | 'aiAssistant.trigger' | 'toc.header' | 'footer.copyrightText' | 'page.homeButton' | 'page.forbidden.title' | 'page.forbidden.description' | 'page.notFound.title' | 'page.notFound.description' | 'page.mcpNotAllowed.title' | 'page.mcpNotAllowed.description' | 'page.lastUpdated.timeago' | 'page.lastUpdated.on' | 'catalog.filters.placeholder' | 'catalog.filters.title' | 'catalog.filters.add' | 'catalog.filters.clearAll' | 'catalog.filters.select.addFilter' | 'catalog.filters.select.all' | 'catalog.filters.done' | 'catalog.catalogs.all.title' | 'catalog.catalogs.all.description' | 'catalog.catalogs.all.switcherLabel' | 'catalog.catalogs.service.title' | 'catalog.catalogs.service.description' | 'catalog.catalogs.service.switcherLabel' | 'catalog.catalogs.user.title' | 'catalog.catalogs.user.description' | 'catalog.catalogs.user.switcherLabel' | 'catalog.catalogs.team.title' | 'catalog.catalogs.team.description' | 'catalog.catalogs.team.switcherLabel' | 'catalog.catalogs.domain.title' | 'catalog.catalogs.domain.description' | 'catalog.catalogs.domain.switcherLabel' | 'catalog.catalogs.apiDescription.title' | 'catalog.catalogs.apiDescription.description' | 'catalog.catalogs.apiDescription.switcherLabel' | 'catalog.catalogs.dataSchema.title' | 'catalog.catalogs.dataSchema.description' | 'catalog.catalogs.dataSchema.switcherLabel' | 'catalog.catalogs.apiOperation.title' | 'catalog.catalogs.apiOperation.description' | 'catalog.catalogs.apiOperation.switcherLabel' | 'catalog.entity.metadata.title' | 'catalog.entity.schema.title' | 'catalog.entity.properties.apiDescription.title' | 'catalog.backToAllLabel' | 'catalog.notConnected' | 'catalog.tags.label' | 'catalog.sort' | 'catalog.catalogs.label' | 'catalog.owners.label' | 'catalog.repositories.label' | 'catalog.email.label' | 'catalog.format.label' | 'catalog.entityType.label' | 'catalog.domains.label' | 'catalog.contact.label' | 'catalog.methodAndPath.label' | 'catalog.links.label' | 'catalog.metadata.domains' | 'catalog.metadata.owners' | 'catalog.history.button.label' | 'catalog.history.sidebar.title' | 'catalog.history.sidebar.close' | 'catalog.history.version.label' | 'catalog.filters.close' | 'catalog.history.version.notSpecified' | 'catalog.history.version.default' | 'catalog.history.revisions.limitMessage' | 'catalog.history.revision.current' | 'catalog.history.revisions.showLess' | 'catalog.history.revisions.showMore' | 'sidebar.menu.backLabel' | 'sidebar.menu.backToLabel' | 'sidebar.actions.show' | 'sidebar.actions.hide' | 'sidebar.actions.changeToSingleColumn' | 'sidebar.actions.changeToTwoColumns' | 'sidebar.actions.singleColumn' | 'sidebar.actions.twoColumns' | 'versionPicker.label' | 'versionPicker.unversioned' | 'codeSnippet.copy.buttonText' | 'codeSnippet.copy.tooltipText' | 'codeSnippet.copy.toasterText' | 'markdown.editPage.text' | 'feedback.settings.comment.submitText' | 'feedback.settings.comment.label' | 'feedback.settings.comment.send' | 'feedback.settings.comment.cancel' | 'feedback.settings.comment.maxLength' | 'feedback.settings.comment.satisfiedLabel' | 'feedback.settings.comment.neutralLabel' | 'feedback.settings.comment.dissatisfiedLabel' | 'feedback.settings.submitText' | 'feedback.settings.label' | 'feedback.settings.reasons.label' | 'feedback.submit' | 'feedback.cancel' | 'feedback.settings.comment.likeLabel' | 'feedback.settings.comment.dislikeLabel' | 'feedback.sentiment.thumbUp' | 'feedback.sentiment.thumbDown' | 'feedback.settings.leftScaleLabel' | 'feedback.settings.rightScaleLabel' | 'feedback.settings.optionalEmail.placeholder' | 'feedback.settings.optionalEmail.label' | 'codeSnippet.report.buttonText' | 'codeSnippet.report.tooltipText' | 'codeSnippet.report.label' | 'codeSnippet.expand.tooltipText' | 'codeSnippet.collapse.tooltipText' | 'jsonViewer.showMore' | 'jsonViewer.showLess' | 'userMenu.login' | 'userMenu.logout' | 'userMenu.devOnboardingLabel' | 'mobileMenu.mainMenu' | 'mobileMenu.previous' | 'mobileMenu.products' | 'mobileMenu.version' | 'navbar.products' | 'page.nextButton' | 'page.previousButton' | 'page.actions.copyButtonText' | 'page.actions.copyTitle' | 'page.actions.copyDescription' | 'page.actions.viewAsMdTitle' | 'page.actions.viewAsMdButtonText' | 'page.actions.viewAsMdDescription' | 'page.actions.chatGptTitle' | 'page.actions.chatGptButtonText' | 'page.actions.chatGptDescription' | 'page.actions.claudeTitle' | 'page.actions.claudeButtonText' | 'page.actions.claudeDescription' | 'page.actions.cursorMcpButtonText' | 'page.actions.cursorMcpTitle' | 'page.actions.cursorMcpDescription' | 'page.actions.connectMcp' | 'page.actions.connectMcp.cursor' | 'page.actions.connectMcp.cursorDescription' | 'page.actions.connectMcp.vscode' | 'page.actions.connectMcp.vscodeDescription' | 'page.actions.connectMcp.copyConfig' | 'page.actions.connectMcp.copyConfigDescription' | 'openapi.download.description.title' | 'openapi.info.title' | 'openapi.info.contact.url' | 'openapi.info.contact.name' | 'openapi.info.license' | 'openapi.info.termsOfService' | 'openapi.info.metadata.title' | 'openapi.key' | 'openapi.value' | 'openapi.enum' | 'openapi.items' | 'openapi.default' | 'openapi.variable' | 'openapi.variables' | 'openapi.actions.show' | 'openapi.actions.hide' | 'openapi.actions.more' | 'openapi.languages.title' | 'openapi.languages.moreButton.tooltipText' | 'openapi.servers.title' | 'openapi.operations' | 'openapi.schemas' | 'openapi.webhooks' | 'openapi.description' | 'openapi.badges.deprecated' | 'openapi.badges.required' | 'openapi.badges.webhook' | 'openapi.request' | 'openapi.path' | 'openapi.query' | 'openapi.querystring' | 'openapi.cookie' | 'openapi.header' | 'openapi.body' | 'openapi.responses' | 'openapi.response' | 'openapi.callbacks' | 'openapi.callbackRequest' | 'openapi.callbackResponse' | 'openapi.payload' | 'openapi.discriminator' | 'openapi.contentType' | 'openapi.tryIt' | 'openapi.loading' | 'openapi.example' | 'openapi.examples' | 'openapi.additionalProperties' | 'openapi.patternProperties' | 'openapi.required' | 'openapi.recursive' | 'openapi.complex' | 'openapi.property' | 'openapi.properties' | 'openapi.details' | 'openapi.hideExample' | 'openapi.showExample' | 'openapi.expandAll' | 'openapi.collapseAll' | 'openapi.viewSecurityDetails' | 'openapi.noResponseExample' | 'openapi.discriminator.searchPlaceholder' | 'openapi.discriminator.searchNoResults' | 'openapi.discriminator.defaultMapping' | 'openapi.discriminator.defaultMappingTooltip' | 'openapi.noResponseContent' | 'openapi.noRequestPayload' | 'openapi.noRequestData' | 'openapi.hidePattern' | 'openapi.showPattern' | 'openapi.authorizationUrl' | 'openapi.tokenUrl' | 'openapi.refreshUrl' | 'openapi.showOptionalScopes' | 'openapi.hideOptionalScopes' | 'openapi.security' | 'openapi.httpAuthorizationScheme' | 'openapi.bearerFormat' | 'openapi.parameterName' | 'openapi.flowType' | 'openapi.connectUrl' | 'openapi.requiredScopes' | 'openapi.unsupportedLanguage' | 'openapi.failedToGenerateCodeSample' | 'openapi.schemaCatalogLink.title' | 'openapi.schemaCatalogLink.copyButtonTooltip' | 'openapi.schemaCatalogLink.copiedTooltip' | 'openapi.mcp.title' | 'openapi.mcp.endpoint' | 'openapi.mcp.tools' | 'openapi.mcp.protocolVersion' | 'openapi.mcp.capabilities' | 'openapi.mcp.experimentalCapabilities' | 'openapi.mcp.inputSchema' | 'openapi.mcp.inputExample' | 'openapi.mcp.outputSchema' | 'openapi.mcp.outputExample' | 'asyncapi.download.description.title' | 'asyncapi.info.title' | 'asyncapi.info.contact.url' | 'asyncapi.info.contact.name' | 'asyncapi.info.license' | 'asyncapi.info.termsOfService' | 'asyncapi.key' | 'asyncapi.value' | 'asyncapi.variables' | 'asyncapi.required' | 'asyncapi.requiredScopes' | 'asyncapi.viewSecurityDetails' | 'graphql.download.description.title' | 'graphql.info.title' | 'graphql.info.contact.url' | 'graphql.info.contact.name' | 'graphql.info.license' | 'graphql.info.termsOfService' | 'graphql.overview' | 'graphql.metadata' | 'graphql.key' | 'graphql.value' | 'graphql.queries' | 'graphql.mutations' | 'graphql.subscriptions' | 'graphql.directives' | 'graphql.objects' | 'graphql.interfaces' | 'graphql.unions' | 'graphql.enums' | 'graphql.inputs' | 'graphql.scalars' | 'graphql.actions.show' | 'graphql.actions.hide' | 'graphql.actions.more' | 'graphql.fields' | 'graphql.inputFields' | 'graphql.values' | 'graphql.arguments.label' | 'graphql.arguments.show' | 'graphql.arguments.hide' | 'graphql.arguments.here' | 'graphql.returnTypes.label' | 'graphql.returnTypes.show' | 'graphql.returnTypes.hide' | 'graphql.possibleTypes' | 'graphql.defaultValue' | 'graphql.deprecationReason' | 'graphql.requiredScopes' | 'graphql.viewSecurityDetails' | 'graphql.objectScopes' | 'graphql.fieldScopes' | 'graphql.implementedInterfaces' | 'graphql.implementedBy' | 'graphql.nonNull' | 'graphql.required' | 'asyncapi.badges.deprecated' | 'graphql.badges.deprecated' | 'asyncapi.actions.show' | 'asyncapi.actions.hide' | 'asyncapi.actions.more' | 'asyncapi.payload' | 'asyncapi.parameters' | 'asyncapi.messages' | 'asyncapi.contentType' | 'asyncapi.moreDetails' | 'asyncapi.property' | 'asyncapi.properties' | 'asyncapi.details' | 'asyncapi.reply' | 'asyncapi.servers.title' | 'graphql.variables' | 'graphql.querySample' | 'graphql.mutationSample' | 'graphql.subscriptionSample' | 'graphql.responseSample' | 'graphql.locations' | 'graphql.sample' | 'graphql.referenced' | 'graphql.content.fragment' | 'button.copy.tooltipText' | 'button.download.tooltipText' | 'button.externalLink.tooltipText' | 'button.email.tooltipText' | 'codeWalkthrough.download' | 'codeWalkthrough.preview' | 'time.justNow' | 'time.past.second' | 'time.past.seconds' | 'time.past.minute' | 'time.past.minutes' | 'time.past.hour' | 'time.past.hours' | 'time.past.day' | 'time.past.days' | 'time.past.week' | 'time.past.weeks' | 'time.past.month' | 'time.past.months' | 'time.past.year' | 'time.past.years' | 'page.internalServerError.title' | 'page.internalServerError.description' | 'page.skipToContent.label' | 'select.noResults' | 'loaders.loading' | 'filter.dateRange.from' | 'filter.dateRange.to' | 'diagram.openFullscreen' | 'diagram.zoomIn' | 'diagram.zoomOut' | 'diagram.reset' | 'diagram.close' | 'diagram.viewer';
2
+ export type TranslationKey = 'dev.newApp' | 'dev.newApp.text' | 'dev.sidebar.header' | 'dev.sidebar.footer.text' | 'dev.create.app.dialog.appName.placeholder' | 'dev.create.app.dialog.appName.error' | 'dev.create.app.dialog.selectAPIs' | 'dev.create.app.dialog.description' | 'dev.create.app.dialog.description.placeholder' | 'dev.create.app.dialog.create' | 'dev.create.app.dialog.cancel' | 'dev.main.tab.appKeys' | 'dev.main.tab.logs' | 'dev.app.description.title' | 'dev.edit.description.dialog.title' | 'dev.edit.description.dialog.save' | 'dev.edit.description.dialog.cancel' | 'dev.create.app.dialog.callbackUrls' | 'dev.create.app.dialog.callbackUrls.placeholder' | 'dev.create.app.dialog.callbackUrls.hint' | 'dev.app.callbackUrls.title' | 'dev.edit.callbackUrls.dialog.title' | 'dev.edit.callbackUrls.dialog.placeholder' | 'dev.edit.callbackUrls.dialog.hint' | 'dev.edit.callbackUrls.dialog.save' | 'dev.edit.callbackUrls.dialog.cancel' | 'dev.edit.apis.dialog.selectedAPIs' | 'dev.app.key.create' | 'dev.create.key.dialog.title' | 'dev.create.key.dialog.create' | 'dev.create.key.dialog.cancel' | 'dev.app.edit' | 'dev.app.delete' | 'dev.edit.app.dialog.title' | 'dev.edit.app.dialog.save' | 'dev.edit.app.dialog.cancel' | 'dev.delete.app.dialog.title' | 'dev.delete.app.dialog.confirmation' | 'dev.delete.app.dialog.delete' | 'dev.delete.app.dialog.cancel' | 'dev.app.key.roll' | 'dev.roll.key.dialog.title' | 'dev.roll.key.dialog.apiKey' | 'dev.roll.key.dialog.expires' | 'dev.roll.key.dialog.confirmation' | 'dev.roll.key.dialog.cancel' | 'dev.roll.key.dialog.roll' | 'dev.update.key.dialog.title' | 'dev.update.key.dialog.update' | 'dev.update.key.dialog.cancel' | 'dev.app.key.api.name' | 'dev.app.key.api.status' | 'dev.app.key.api.edit' | 'dev.edit.apis.dialog.title' | 'dev.edit.apis.dialog.apiKey' | 'dev.edit.apis.dialog.save' | 'dev.edit.apis.dialog.cancel' | 'dev.select.placeholder' | 'dev.app.overview.status.pending' | 'dev.app.overview.status.approved' | 'dev.app.overview.status.revoked' | 'dev.app.overview.status' | 'dev.app.overview.non-production' | 'dev.app.overview.production' | 'dev.app.overview.clientId' | 'dev.app.overview.apiKey' | 'dev.app.key.revoke' | 'dev.revoke.key.dialog.title' | 'dev.revoke.key.dialog.apiKey' | 'dev.revoke.key.dialog.expires' | 'dev.revoke.key.dialog.confirmation' | 'dev.revoke.key.dialog.revoke' | 'dev.revoke.key.dialog.cancel' | 'dev.app.overview.expires' | 'dev.app.overview.created' | 'dev.app.overview.visibilityToggle.hide' | 'dev.app.overview.visibilityToggle.show' | 'search.loading' | 'search.noResults.title' | 'search.keys.navigate' | 'search.keys.select' | 'search.keys.exit' | 'search.label' | 'search.cancel' | 'search.recent' | 'search.navbar.label' | 'search.suggested' | 'search.showMore' | 'search.error.title' | 'search.error.button' | 'search.filter.title' | 'search.filter.reset' | 'search.filter.field.reset' | 'search.ai.welcomeText' | 'search.ai.newConversation' | 'search.ai.backToSearch' | 'search.ai.back' | 'search.ai.assistant' | 'search.ai.placeholder' | 'search.ai.generatingResponse' | 'search.ai.followUpQuestion' | 'search.ai.suggestionsTitle' | 'search.ai.thinkingText' | 'search.ai.resourcesFound' | 'search.ai.resourcesFound.basedOn' | 'search.ai.resourcesFound.resources' | 'search.ai.feedback.title' | 'search.ai.feedback.detailsPlaceholder' | 'search.ai.feedback.thanks' | 'search.ai.toolCall.executed' | 'search.ai.toolCall.executing' | 'search.ai.toolCall.withArgs' | 'search.ai.button' | 'search.ai.label' | 'search.ai.disclaimer' | 'search.ai.error.description' | 'search.ai.error.description.forbidden' | 'search.ai.error.description.unauthorized' | 'search.ai.error.header' | 'search.ai.error.header.forbidden' | 'search.ai.error.header.unauthorized' | 'search.ai.feedback.more' | 'search.searchItem.deprecated' | 'search.groups.all' | 'search.filter.field.footer' | 'aiAssistant.trigger' | 'toc.header' | 'footer.copyrightText' | 'page.homeButton' | 'page.forbidden.title' | 'page.forbidden.description' | 'page.notFound.title' | 'page.notFound.description' | 'page.mcpNotAllowed.title' | 'page.mcpNotAllowed.description' | 'page.mcpNotAllowed.snippets.terminal.hint' | 'page.mcpNotAllowed.snippets.claudeCode.headline' | 'page.mcpNotAllowed.snippets.claudeDesktop.headline' | 'page.mcpNotAllowed.snippets.claudeDesktop.instruction' | 'page.mcpNotAllowed.snippets.chatgptApp.headline' | 'page.mcpNotAllowed.snippets.chatgptApp.instruction' | 'page.mcpNotAllowed.snippets.codexCli.headline' | 'page.mcpNotAllowed.snippets.prompt.headline' | 'page.mcpNotAllowed.snippets.prompt.hint' | 'page.mcpNotAllowed.snippets.json.hint' | 'page.mcpNotAllowed.tabs.claude' | 'page.mcpNotAllowed.tabs.chatgpt' | 'page.mcpNotAllowed.tabs.json' | 'page.lastUpdated.timeago' | 'page.lastUpdated.on' | 'catalog.filters.placeholder' | 'catalog.filters.title' | 'catalog.filters.add' | 'catalog.filters.clearAll' | 'catalog.filters.select.addFilter' | 'catalog.filters.select.all' | 'catalog.filters.done' | 'catalog.catalogs.all.title' | 'catalog.catalogs.all.description' | 'catalog.catalogs.all.switcherLabel' | 'catalog.catalogs.service.title' | 'catalog.catalogs.service.description' | 'catalog.catalogs.service.switcherLabel' | 'catalog.catalogs.user.title' | 'catalog.catalogs.user.description' | 'catalog.catalogs.user.switcherLabel' | 'catalog.catalogs.team.title' | 'catalog.catalogs.team.description' | 'catalog.catalogs.team.switcherLabel' | 'catalog.catalogs.domain.title' | 'catalog.catalogs.domain.description' | 'catalog.catalogs.domain.switcherLabel' | 'catalog.catalogs.apiDescription.title' | 'catalog.catalogs.apiDescription.description' | 'catalog.catalogs.apiDescription.switcherLabel' | 'catalog.catalogs.dataSchema.title' | 'catalog.catalogs.dataSchema.description' | 'catalog.catalogs.dataSchema.switcherLabel' | 'catalog.catalogs.apiOperation.title' | 'catalog.catalogs.apiOperation.description' | 'catalog.catalogs.apiOperation.switcherLabel' | 'catalog.entity.metadata.title' | 'catalog.entity.schema.title' | 'catalog.entity.properties.apiDescription.title' | 'catalog.backToAllLabel' | 'catalog.notConnected' | 'catalog.tags.label' | 'catalog.sort' | 'catalog.catalogs.label' | 'catalog.owners.label' | 'catalog.repositories.label' | 'catalog.email.label' | 'catalog.format.label' | 'catalog.entityType.label' | 'catalog.domains.label' | 'catalog.contact.label' | 'catalog.methodAndPath.label' | 'catalog.links.label' | 'catalog.metadata.domains' | 'catalog.metadata.owners' | 'catalog.history.button.label' | 'catalog.history.sidebar.title' | 'catalog.history.sidebar.close' | 'catalog.history.version.label' | 'catalog.filters.close' | 'catalog.history.version.notSpecified' | 'catalog.history.version.default' | 'catalog.history.revisions.limitMessage' | 'catalog.history.revision.current' | 'catalog.history.revisions.showLess' | 'catalog.history.revisions.showMore' | 'sidebar.menu.backLabel' | 'sidebar.menu.backToLabel' | 'sidebar.actions.show' | 'sidebar.actions.hide' | 'sidebar.actions.changeToSingleColumn' | 'sidebar.actions.changeToTwoColumns' | 'sidebar.actions.singleColumn' | 'sidebar.actions.twoColumns' | 'versionPicker.label' | 'versionPicker.unversioned' | 'codeSnippet.copy.buttonText' | 'codeSnippet.copy.tooltipText' | 'codeSnippet.copy.toasterText' | 'markdown.editPage.text' | 'feedback.settings.comment.submitText' | 'feedback.settings.comment.label' | 'feedback.settings.comment.send' | 'feedback.settings.comment.cancel' | 'feedback.settings.comment.maxLength' | 'feedback.settings.comment.satisfiedLabel' | 'feedback.settings.comment.neutralLabel' | 'feedback.settings.comment.dissatisfiedLabel' | 'feedback.settings.submitText' | 'feedback.settings.label' | 'feedback.settings.reasons.label' | 'feedback.submit' | 'feedback.cancel' | 'feedback.settings.comment.likeLabel' | 'feedback.settings.comment.dislikeLabel' | 'feedback.sentiment.thumbUp' | 'feedback.sentiment.thumbDown' | 'feedback.settings.leftScaleLabel' | 'feedback.settings.rightScaleLabel' | 'feedback.settings.optionalEmail.placeholder' | 'feedback.settings.optionalEmail.label' | 'codeSnippet.report.buttonText' | 'codeSnippet.report.tooltipText' | 'codeSnippet.report.label' | 'codeSnippet.expand.tooltipText' | 'codeSnippet.collapse.tooltipText' | 'jsonViewer.showMore' | 'jsonViewer.showLess' | 'userMenu.login' | 'userMenu.logout' | 'userMenu.devOnboardingLabel' | 'mobileMenu.mainMenu' | 'mobileMenu.previous' | 'mobileMenu.products' | 'mobileMenu.version' | 'navbar.products' | 'page.nextButton' | 'page.previousButton' | 'page.actions.copyButtonText' | 'page.actions.copyTitle' | 'page.actions.copyDescription' | 'page.actions.viewAsMdTitle' | 'page.actions.viewAsMdButtonText' | 'page.actions.viewAsMdDescription' | 'page.actions.chatGptTitle' | 'page.actions.chatGptButtonText' | 'page.actions.chatGptDescription' | 'page.actions.claudeTitle' | 'page.actions.claudeButtonText' | 'page.actions.claudeDescription' | 'page.actions.cursorMcpButtonText' | 'page.actions.cursorMcpTitle' | 'page.actions.cursorMcpDescription' | 'page.actions.connectMcp' | 'page.actions.connectMcp.cursor' | 'page.actions.connectMcp.cursorDescription' | 'page.actions.connectMcp.vscode' | 'page.actions.connectMcp.vscodeDescription' | 'page.actions.connectMcp.claudeCode' | 'page.actions.connectMcp.claudeCodeDescription' | 'page.actions.connectMcp.codex' | 'page.actions.connectMcp.codexDescription' | 'page.actions.connectMcp.copyConfig' | 'page.actions.connectMcp.copyConfigDescription' | 'openapi.download.description.title' | 'openapi.info.title' | 'openapi.info.contact.url' | 'openapi.info.contact.name' | 'openapi.info.license' | 'openapi.info.termsOfService' | 'openapi.info.metadata.title' | 'openapi.key' | 'openapi.value' | 'openapi.enum' | 'openapi.items' | 'openapi.default' | 'openapi.variable' | 'openapi.variables' | 'openapi.actions.show' | 'openapi.actions.hide' | 'openapi.actions.more' | 'openapi.languages.title' | 'openapi.languages.moreButton.tooltipText' | 'openapi.servers.title' | 'openapi.operations' | 'openapi.schemas' | 'openapi.webhooks' | 'openapi.description' | 'openapi.badges.deprecated' | 'openapi.badges.required' | 'openapi.badges.webhook' | 'openapi.request' | 'openapi.path' | 'openapi.query' | 'openapi.querystring' | 'openapi.cookie' | 'openapi.header' | 'openapi.body' | 'openapi.responses' | 'openapi.response' | 'openapi.callbacks' | 'openapi.callbackRequest' | 'openapi.callbackResponse' | 'openapi.payload' | 'openapi.discriminator' | 'openapi.contentType' | 'openapi.tryIt' | 'openapi.loading' | 'openapi.example' | 'openapi.examples' | 'openapi.additionalProperties' | 'openapi.patternProperties' | 'openapi.required' | 'openapi.recursive' | 'openapi.complex' | 'openapi.property' | 'openapi.properties' | 'openapi.details' | 'openapi.hideExample' | 'openapi.showExample' | 'openapi.expandAll' | 'openapi.collapseAll' | 'openapi.viewSecurityDetails' | 'openapi.noResponseExample' | 'openapi.discriminator.searchPlaceholder' | 'openapi.discriminator.searchNoResults' | 'openapi.discriminator.defaultMapping' | 'openapi.discriminator.defaultMappingTooltip' | 'openapi.noResponseContent' | 'openapi.noRequestPayload' | 'openapi.noRequestData' | 'openapi.hidePattern' | 'openapi.showPattern' | 'openapi.authorizationUrl' | 'openapi.tokenUrl' | 'openapi.refreshUrl' | 'openapi.showOptionalScopes' | 'openapi.hideOptionalScopes' | 'openapi.security' | 'openapi.httpAuthorizationScheme' | 'openapi.bearerFormat' | 'openapi.parameterName' | 'openapi.flowType' | 'openapi.connectUrl' | 'openapi.requiredScopes' | 'openapi.unsupportedLanguage' | 'openapi.failedToGenerateCodeSample' | 'openapi.schemaCatalogLink.title' | 'openapi.schemaCatalogLink.copyButtonTooltip' | 'openapi.schemaCatalogLink.copiedTooltip' | 'openapi.mcp.title' | 'openapi.mcp.endpoint' | 'openapi.mcp.tools' | 'openapi.mcp.protocolVersion' | 'openapi.mcp.capabilities' | 'openapi.mcp.experimentalCapabilities' | 'openapi.mcp.inputSchema' | 'openapi.mcp.inputExample' | 'openapi.mcp.outputSchema' | 'openapi.mcp.outputExample' | 'asyncapi.download.description.title' | 'asyncapi.info.title' | 'asyncapi.info.contact.url' | 'asyncapi.info.contact.name' | 'asyncapi.info.license' | 'asyncapi.info.termsOfService' | 'asyncapi.key' | 'asyncapi.value' | 'asyncapi.variables' | 'asyncapi.required' | 'asyncapi.requiredScopes' | 'asyncapi.viewSecurityDetails' | 'graphql.download.description.title' | 'graphql.info.title' | 'graphql.info.contact.url' | 'graphql.info.contact.name' | 'graphql.info.license' | 'graphql.info.termsOfService' | 'graphql.overview' | 'graphql.metadata' | 'graphql.key' | 'graphql.value' | 'graphql.queries' | 'graphql.mutations' | 'graphql.subscriptions' | 'graphql.directives' | 'graphql.objects' | 'graphql.interfaces' | 'graphql.unions' | 'graphql.enums' | 'graphql.inputs' | 'graphql.scalars' | 'graphql.actions.show' | 'graphql.actions.hide' | 'graphql.actions.more' | 'graphql.fields' | 'graphql.inputFields' | 'graphql.values' | 'graphql.arguments.label' | 'graphql.arguments.show' | 'graphql.arguments.hide' | 'graphql.arguments.here' | 'graphql.returnTypes.label' | 'graphql.returnTypes.show' | 'graphql.returnTypes.hide' | 'graphql.possibleTypes' | 'graphql.defaultValue' | 'graphql.deprecationReason' | 'graphql.requiredScopes' | 'graphql.viewSecurityDetails' | 'graphql.objectScopes' | 'graphql.fieldScopes' | 'graphql.implementedInterfaces' | 'graphql.implementedBy' | 'graphql.nonNull' | 'graphql.required' | 'asyncapi.badges.deprecated' | 'graphql.badges.deprecated' | 'asyncapi.actions.show' | 'asyncapi.actions.hide' | 'asyncapi.actions.more' | 'asyncapi.payload' | 'asyncapi.parameters' | 'asyncapi.messages' | 'asyncapi.contentType' | 'asyncapi.moreDetails' | 'asyncapi.property' | 'asyncapi.properties' | 'asyncapi.details' | 'asyncapi.reply' | 'asyncapi.servers.title' | 'graphql.variables' | 'graphql.querySample' | 'graphql.mutationSample' | 'graphql.subscriptionSample' | 'graphql.responseSample' | 'graphql.locations' | 'graphql.sample' | 'graphql.referenced' | 'graphql.content.fragment' | 'button.copy.tooltipText' | 'button.download.tooltipText' | 'button.externalLink.tooltipText' | 'button.email.tooltipText' | 'codeWalkthrough.download' | 'codeWalkthrough.preview' | 'time.justNow' | 'time.past.second' | 'time.past.seconds' | 'time.past.minute' | 'time.past.minutes' | 'time.past.hour' | 'time.past.hours' | 'time.past.day' | 'time.past.days' | 'time.past.week' | 'time.past.weeks' | 'time.past.month' | 'time.past.months' | 'time.past.year' | 'time.past.years' | 'page.internalServerError.title' | 'page.internalServerError.description' | 'page.skipToContent.label' | 'select.noResults' | 'loaders.loading' | 'filter.dateRange.from' | 'filter.dateRange.to' | 'diagram.openFullscreen' | 'diagram.zoomIn' | 'diagram.zoomOut' | 'diagram.reset' | 'diagram.close' | 'diagram.viewer';
3
3
  export type Locale = {
4
4
  code: string;
5
5
  name: string;
@@ -1,5 +1,5 @@
1
1
  export type MCPClientType = 'cursor' | 'vscode';
2
- export type MCPOption = 'cursor' | 'vscode' | 'copy';
2
+ export type MCPOption = 'cursor' | 'vscode' | 'claude-code' | 'codex' | 'copy';
3
3
  export type McpConnectionParams = {
4
4
  serverName: string;
5
5
  url: string;
@@ -1,2 +1,7 @@
1
1
  import type { MCPClientType, McpConnectionParams } from '../types';
2
2
  export declare function generateMCPDeepLink(clientType: MCPClientType, config: McpConnectionParams): string;
3
+ export declare function slugifyMcpServerName(name: string): string;
4
+ export declare function generateClaudeDesktopConfig(config: McpConnectionParams): string;
5
+ export declare function generateClaudeCodeCommand(config: McpConnectionParams): string;
6
+ export declare function generateCodexCommand(config: McpConnectionParams): string;
7
+ export declare function generateMcpInstallPrompt(config: McpConnectionParams): string;
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateMCPDeepLink = generateMCPDeepLink;
4
+ exports.slugifyMcpServerName = slugifyMcpServerName;
5
+ exports.generateClaudeDesktopConfig = generateClaudeDesktopConfig;
6
+ exports.generateClaudeCodeCommand = generateClaudeCodeCommand;
7
+ exports.generateCodexCommand = generateCodexCommand;
8
+ exports.generateMcpInstallPrompt = generateMcpInstallPrompt;
4
9
  function generateCursorMCPDeepLink(config) {
5
10
  const cursorConfig = {
6
11
  url: config.url,
@@ -28,4 +33,34 @@ function generateMCPDeepLink(clientType, config) {
28
33
  return generateCursorMCPDeepLink(config);
29
34
  }
30
35
  }
36
+ // Server names can contain spaces (e.g. "Docs MCP server") which break bare CLI
37
+ // arguments, so commands use a slugified form while JSON configs keep the raw name.
38
+ function slugifyMcpServerName(name) {
39
+ return name
40
+ .toLowerCase()
41
+ .replace(/[^a-z0-9_-]+/g, '-')
42
+ .replace(/^-+|-+$/g, '');
43
+ }
44
+ // Claude Desktop's config file only launches stdio commands, so remote servers
45
+ // connect through the mcp-remote bridge.
46
+ function generateClaudeDesktopConfig(config) {
47
+ return JSON.stringify({
48
+ mcpServers: {
49
+ [slugifyMcpServerName(config.serverName)]: {
50
+ command: 'npx',
51
+ args: ['-y', 'mcp-remote', config.url],
52
+ },
53
+ },
54
+ }, null, 2);
55
+ }
56
+ function generateClaudeCodeCommand(config) {
57
+ return `claude mcp add --transport http ${slugifyMcpServerName(config.serverName)} ${config.url}`;
58
+ }
59
+ function generateCodexCommand(config) {
60
+ return `codex mcp add ${slugifyMcpServerName(config.serverName)} --url ${config.url}`;
61
+ }
62
+ // Pasted into an AI assistant (Claude Code, Codex) so it installs the server itself.
63
+ function generateMcpInstallPrompt(config) {
64
+ return `Add the MCP server "${slugifyMcpServerName(config.serverName)}" with URL ${config.url} (streamable HTTP transport) to my MCP configuration, then verify it is connected.`;
65
+ }
31
66
  //# sourceMappingURL=mcp.js.map
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { IconProps } from '../../icons/types';
3
+ declare const Icon: (props: IconProps) => React.JSX.Element;
4
+ export declare const CodexIcon: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<{
5
+ color?: string;
6
+ size?: string;
7
+ className?: string;
8
+ 'data-component-name'?: string;
9
+ } & React.SVGProps<SVGSVGElement>, "data-component-name" | "size" | keyof React.SVGProps<SVGSVGElement>> & {
10
+ color?: string;
11
+ size?: string;
12
+ className?: string;
13
+ 'data-component-name'?: string;
14
+ } & React.SVGProps<SVGSVGElement>, "data-component-name"> & Partial<Pick<import("styled-components").FastOmit<{
15
+ color?: string;
16
+ size?: string;
17
+ className?: string;
18
+ 'data-component-name'?: string;
19
+ } & React.SVGProps<SVGSVGElement>, "data-component-name" | "size" | keyof React.SVGProps<SVGSVGElement>> & {
20
+ color?: string;
21
+ size?: string;
22
+ className?: string;
23
+ 'data-component-name'?: string;
24
+ } & React.SVGProps<SVGSVGElement>, "data-component-name">>> & string & Omit<typeof Icon, keyof React.Component<any, {}, any>>;
25
+ export {};
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CodexIcon = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const utils_1 = require("../../core/utils");
10
+ const Icon = (props) => (react_1.default.createElement("svg", Object.assign({ viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, props),
11
+ react_1.default.createElement("path", { d: "M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.073zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.8956zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997z" })));
12
+ exports.CodexIcon = (0, styled_components_1.default)(Icon).attrs({
13
+ 'data-component-name': 'icons/CodexIcon/CodexIcon',
14
+ }) `
15
+ path {
16
+ fill: ${({ color }) => (0, utils_1.getCssColorVariable)(color)};
17
+ }
18
+
19
+ height: ${({ size }) => size || '16px'};
20
+ width: ${({ size }) => size || '16px'};
21
+ `;
22
+ //# sourceMappingURL=CodexIcon.js.map
@@ -8,15 +8,17 @@ const react_1 = __importDefault(require("react"));
8
8
  const styled_components_1 = __importDefault(require("styled-components"));
9
9
  const hooks_1 = require("../core/hooks");
10
10
  const ConnectMCPButton_1 = require("../components/Buttons/ConnectMCPButton");
11
+ const McpConnectionTabs_1 = require("../components/MCP/McpConnectionTabs");
11
12
  function McpNotAllowed() {
12
13
  const { useTranslate } = (0, hooks_1.useThemeHooks)();
13
14
  const { translate } = useTranslate();
14
15
  return (react_1.default.createElement(NotAllowedWrapper, { "data-component-name": "layouts/McpNotAllowed" },
15
16
  react_1.default.createElement(StatusText, null, "405"),
16
- react_1.default.createElement(Title, { "data-translation-key": "page.mcpNotAllowed.title" }, translate('page.mcpNotAllowed.title', 'Method not allowed')),
17
- react_1.default.createElement(Description, { "data-translation-key": "page.mcpNotAllowed.description" }, translate('page.mcpNotAllowed.description', 'To use this MCP server, register it in your MCP Client (for example: VS Code, Cursor, or Claude Code).')),
17
+ react_1.default.createElement(Title, { "data-translation-key": "page.mcpNotAllowed.title" }, translate('page.mcpNotAllowed.title', 'Connect to the MCP server')),
18
+ react_1.default.createElement(Description, { "data-translation-key": "page.mcpNotAllowed.description" }, translate('page.mcpNotAllowed.description', 'To use this MCP server, register it in your MCP client (for example: VS Code, Cursor, or Claude Code).')),
18
19
  react_1.default.createElement(ButtonWrapper, null,
19
- react_1.default.createElement(ConnectMCPButton_1.ConnectMCPButton, { alignment: "start" }))));
20
+ react_1.default.createElement(ConnectMCPButton_1.ConnectMCPButton, { alignment: "start" })),
21
+ react_1.default.createElement(McpConnectionTabs_1.McpConnectionTabs, null)));
20
22
  }
21
23
  const NotAllowedWrapper = styled_components_1.default.div `
22
24
  height: 100%;
@@ -0,0 +1,9 @@
1
+ import type { JSX, PropsWithChildren } from 'react';
2
+ export type AccordionProps = {
3
+ title: string;
4
+ expanded?: boolean;
5
+ className?: string;
6
+ 'data-source'?: string;
7
+ 'data-hash'?: string;
8
+ };
9
+ export declare function Accordion({ title, expanded, className, children, 'data-source': dataSource, 'data-hash': dataHash, }: PropsWithChildren<AccordionProps>): JSX.Element;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Accordion = Accordion;
40
+ const react_1 = __importDefault(require("react"));
41
+ const styled_components_1 = __importStar(require("styled-components"));
42
+ const ChevronRightIcon_1 = require("../../../icons/ChevronRightIcon/ChevronRightIcon");
43
+ const constants_1 = require("../../../core/constants");
44
+ function Accordion({ title, expanded = false, className, children, 'data-source': dataSource, 'data-hash': dataHash, }) {
45
+ return (react_1.default.createElement(AccordionWrapper, { className: className, open: expanded, "data-component-name": constants_1.ACCORDION_COMPONENT_NAME, "data-source": dataSource, "data-hash": dataHash },
46
+ react_1.default.createElement(AccordionSummary, null,
47
+ react_1.default.createElement(ChevronRightIcon_1.ChevronRightIcon, { color: "--md-accordion-chevron-icon-color", size: "var(--md-accordion-chevron-icon-size)" }),
48
+ title),
49
+ react_1.default.createElement(AccordionBody, null, children)));
50
+ }
51
+ const AccordionWrapper = styled_components_1.default.details `
52
+ margin: var(--md-accordion-margin);
53
+ border: var(--md-accordion-border);
54
+ border-radius: var(--md-accordion-border-radius);
55
+ font-family: var(--md-accordion-font-family);
56
+ overflow: hidden;
57
+
58
+ &[open] > summary svg {
59
+ transform: rotate(90deg);
60
+ }
61
+ `;
62
+ const AccordionSummary = styled_components_1.default.summary `
63
+ display: flex;
64
+ align-items: center;
65
+ gap: var(--md-accordion-gap);
66
+ cursor: pointer;
67
+ list-style: none;
68
+
69
+ background-color: var(--md-accordion-header-bg-color);
70
+ color: var(--md-accordion-header-text-color);
71
+ font-weight: var(--md-accordion-header-font-weight);
72
+ font-size: var(--md-accordion-header-font-size);
73
+ line-height: var(--md-accordion-header-line-height);
74
+ padding: var(--md-accordion-header-padding);
75
+
76
+ &::-webkit-details-marker {
77
+ display: none;
78
+ }
79
+
80
+ &:hover {
81
+ background-color: var(--md-accordion-header-bg-color-hover);
82
+ }
83
+
84
+ &:focus-visible {
85
+ outline: none;
86
+ position: relative;
87
+
88
+ &::after {
89
+ content: '';
90
+ position: absolute;
91
+ inset: 2px;
92
+ border: 1px solid var(--button-border-color-focused);
93
+ border-radius: calc(var(--md-accordion-border-radius) - 2px);
94
+ pointer-events: none;
95
+ }
96
+ }
97
+
98
+ svg {
99
+ flex-shrink: 0;
100
+ transition: transform 0.15s ease-out;
101
+ }
102
+ `;
103
+ const showAccordionBody = (0, styled_components_1.keyframes) `
104
+ 0% {
105
+ opacity: 0;
106
+ transform: translateY(-5px);
107
+ }
108
+ 100% {
109
+ opacity: 1;
110
+ transform: translateY(0);
111
+ }
112
+ `;
113
+ const AccordionBody = styled_components_1.default.div `
114
+ padding: var(--md-accordion-body-padding);
115
+ background-color: var(--md-accordion-body-bg-color);
116
+ color: var(--md-accordion-body-text-color);
117
+ font-size: var(--md-accordion-body-font-size);
118
+ line-height: var(--md-accordion-body-line-height);
119
+
120
+ details[open] > & {
121
+ animation: ${showAccordionBody} 0.15s ease-out;
122
+ }
123
+
124
+ > :first-child {
125
+ margin-top: 0;
126
+ }
127
+
128
+ > :last-child {
129
+ margin-bottom: 0;
130
+ }
131
+ `;
132
+ //# sourceMappingURL=Accordion.js.map
@@ -0,0 +1,5 @@
1
+ import type { JSX, PropsWithChildren } from 'react';
2
+ export type AccordionGroupProps = {
3
+ className?: string;
4
+ };
5
+ export declare function AccordionGroup({ className, children, }: PropsWithChildren<AccordionGroupProps>): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AccordionGroup = AccordionGroup;
7
+ const react_1 = __importDefault(require("react"));
8
+ const styled_components_1 = __importDefault(require("styled-components"));
9
+ const constants_1 = require("../../../core/constants");
10
+ function AccordionGroup({ className, children, }) {
11
+ return (react_1.default.createElement(AccordionGroupWrapper, { className: className, "data-component-name": constants_1.ACCORDION_GROUP_COMPONENT_NAME }, children));
12
+ }
13
+ const AccordionGroupWrapper = styled_components_1.default.div `
14
+ margin: var(--md-accordion-group-margin);
15
+ border: var(--md-accordion-group-border);
16
+ border-radius: var(--md-accordion-group-border-radius);
17
+ overflow: hidden;
18
+
19
+ & > ${constants_1.ACCORDION_SELECTOR} {
20
+ margin: 0;
21
+ border: none;
22
+ border-radius: 0;
23
+ }
24
+
25
+ & > ${constants_1.ACCORDION_SELECTOR} + ${constants_1.ACCORDION_SELECTOR} {
26
+ border-top: var(--md-accordion-group-divider);
27
+ }
28
+ `;
29
+ //# sourceMappingURL=AccordionGroup.js.map
@@ -0,0 +1 @@
1
+ export declare const markdownAccordion: import("styled-components").RuleSet<object>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.markdownAccordion = void 0;
4
+ const styled_components_1 = require("styled-components");
5
+ exports.markdownAccordion = (0, styled_components_1.css) `
6
+ /**
7
+ * @tokens Markdown Accordion
8
+ */
9
+
10
+ --md-accordion-group-margin: var(--spacing-base) 0; // @presenter Spacing
11
+ --md-accordion-group-border: 1px solid var(--border-color-secondary); // @presenter Border
12
+ --md-accordion-group-border-radius: var(--border-radius-xl); // @presenter BorderRadius
13
+ --md-accordion-group-divider: 1px solid var(--border-color-secondary); // @presenter Border
14
+
15
+ --md-accordion-margin: var(--spacing-base) 0; // @presenter Spacing
16
+ --md-accordion-border: 1px solid var(--border-color-secondary); // @presenter Border
17
+ --md-accordion-border-radius: var(--border-radius-xl); // @presenter BorderRadius
18
+ --md-accordion-gap: var(--spacing-xs); // @presenter Spacing
19
+ --md-accordion-font-family: var(--font-family-base); // @presenter FontFamily
20
+
21
+ --md-accordion-chevron-icon-color: var(--text-color-primary); // @presenter Color
22
+ --md-accordion-chevron-icon-size: 16px;
23
+
24
+ --md-accordion-header-bg-color: var(--layer-color); // @presenter Color
25
+ --md-accordion-header-bg-color-hover: var(--layer-color-hover); // @presenter Color
26
+ --md-accordion-header-text-color: var(--text-color-primary); // @presenter Color
27
+ --md-accordion-header-font-weight: var(--font-weight-semibold); // @presenter FontWeight
28
+ --md-accordion-header-line-height: var(--line-height-lg); // @presenter LineHeight
29
+ --md-accordion-header-font-size: var(--font-size-lg); // @presenter FontSize
30
+ --md-accordion-header-padding: var(--spacing-sm) var(--spacing-md); // @presenter Spacing
31
+
32
+ --md-accordion-body-bg-color: var(--bg-color); // @presenter Color
33
+ --md-accordion-body-text-color: var(--text-color-primary); // @presenter Color
34
+ --md-accordion-body-font-size: var(--font-size-base); // @presenter FontSize
35
+ --md-accordion-body-line-height: var(--line-height-base); // @presenter LineHeight
36
+ --md-accordion-body-padding: var(--spacing-sm) var(--spacing-md) var(--spacing-md); // @presenter Spacing
37
+
38
+ // @tokens End
39
+ `;
40
+ //# sourceMappingURL=variables.js.map
@@ -1,3 +1,5 @@
1
+ export * from '../../markdoc/components/Accordion/Accordion';
2
+ export * from '../../markdoc/components/Accordion/AccordionGroup';
1
3
  export * from '../../markdoc/components/Admonition/Admonition';
2
4
  export * from '../../markdoc/components/InlineSvg/InlineSvg';
3
5
  export * from '../../markdoc/components/MarkdocExample/MarkdocExample';
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../../markdoc/components/Accordion/Accordion"), exports);
18
+ __exportStar(require("../../markdoc/components/Accordion/AccordionGroup"), exports);
17
19
  __exportStar(require("../../markdoc/components/Admonition/Admonition"), exports);
18
20
  __exportStar(require("../../markdoc/components/InlineSvg/InlineSvg"), exports);
19
21
  __exportStar(require("../../markdoc/components/MarkdocExample/MarkdocExample"), exports);
@@ -5,6 +5,8 @@ export * from '../markdoc/attributes/img-srcset';
5
5
  export * from '../markdoc/attributes/relative-path';
6
6
  export * from '../markdoc/attributes/svg-content';
7
7
  export * as components from '../markdoc/components/default';
8
+ import { accordion } from '../markdoc/tags/accordion';
9
+ import { accordionGroup } from '../markdoc/tags/accordion-group';
8
10
  import { admonition } from '../markdoc/tags/admonition';
9
11
  import { html } from '../markdoc/tags/html';
10
12
  import { markdocExample } from '../markdoc/tags/markdoc-example';
@@ -29,6 +31,8 @@ import { connectMcp } from '../markdoc/tags/connect-mcp';
29
31
  import { loginButton } from '../markdoc/tags/login-button';
30
32
  import { diagram } from '../markdoc/tags/diagram';
31
33
  export declare const tags: {
34
+ [accordion.tagName]: import("./tags/types").MarkdocTagSchema;
35
+ [accordionGroup.tagName]: import("./tags/types").MarkdocTagSchema;
32
36
  [admonition.tagName]: import("./tags/types").MarkdocTagSchema;
33
37
  [debug.tagName]: import("./tags/types").MarkdocTagSchema;
34
38
  [html.tagName]: import("./tags/types").MarkdocTagSchema;
@@ -47,6 +47,8 @@ __exportStar(require("../markdoc/attributes/svg-content"), exports);
47
47
  /* Components */
48
48
  exports.components = __importStar(require("../markdoc/components/default"));
49
49
  /* Tags */
50
+ const accordion_1 = require("../markdoc/tags/accordion");
51
+ const accordion_group_1 = require("../markdoc/tags/accordion-group");
50
52
  const admonition_1 = require("../markdoc/tags/admonition");
51
53
  const html_1 = require("../markdoc/tags/html");
52
54
  const markdoc_example_1 = require("../markdoc/tags/markdoc-example");
@@ -71,6 +73,8 @@ const connect_mcp_1 = require("../markdoc/tags/connect-mcp");
71
73
  const login_button_1 = require("../markdoc/tags/login-button");
72
74
  const diagram_1 = require("../markdoc/tags/diagram");
73
75
  exports.tags = {
76
+ [accordion_1.accordion.tagName]: accordion_1.accordion.schema,
77
+ [accordion_group_1.accordionGroup.tagName]: accordion_group_1.accordionGroup.schema,
74
78
  [admonition_1.admonition.tagName]: admonition_1.admonition.schema,
75
79
  [debug_1.debug.tagName]: debug_1.debug.schema,
76
80
  [html_1.html.tagName]: html_1.html.schema,
@@ -0,0 +1,2 @@
1
+ import type { MarkdocSchemaWrapper } from '../../markdoc/tags/types';
2
+ export declare const accordionGroup: MarkdocSchemaWrapper;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accordionGroup = void 0;
4
+ exports.accordionGroup = {
5
+ schema: {
6
+ render: 'AccordionGroup',
7
+ },
8
+ tagName: 'accordion-group',
9
+ };
10
+ //# sourceMappingURL=accordion-group.js.map
@@ -0,0 +1,2 @@
1
+ import type { MarkdocSchemaWrapper } from '../../markdoc/tags/types';
2
+ export declare const accordion: MarkdocSchemaWrapper;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accordion = void 0;
4
+ exports.accordion = {
5
+ schema: {
6
+ render: 'Accordion',
7
+ attributes: {
8
+ title: { type: String, required: true },
9
+ expanded: { type: Boolean, default: false },
10
+ },
11
+ },
12
+ tagName: 'accordion',
13
+ };
14
+ //# sourceMappingURL=accordion.js.map
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.connectMcp = void 0;
4
+ const constants_1 = require("../../core/constants");
4
5
  exports.connectMcp = {
5
6
  schema: {
6
7
  render: 'ConnectMCP',
@@ -17,7 +18,7 @@ exports.connectMcp = {
17
18
  },
18
19
  options: {
19
20
  type: Array,
20
- default: ['cursor', 'vscode', 'copy'],
21
+ default: constants_1.DEFAULT_MCP_OPTIONS,
21
22
  },
22
23
  },
23
24
  selfClosing: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redocly/theme",
3
- "version": "0.69.0-next.0",
3
+ "version": "0.69.0-next.2",
4
4
  "description": "Shared UI components lib",
5
5
  "keywords": [
6
6
  "theme",
@@ -68,7 +68,7 @@
68
68
  "vitest": "4.1.10",
69
69
  "vitest-when": "0.6.2",
70
70
  "webpack": "5.105.2",
71
- "@redocly/realm-asyncapi-sdk": "0.14.0"
71
+ "@redocly/realm-asyncapi-sdk": "0.15.0-next.1"
72
72
  },
73
73
  "dependencies": {
74
74
  "@tanstack/react-query": "5.62.3",