UNPKG

@redocly/theme

Version:

Shared UI components lib

145 lines 7.47 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectMCPButton = ConnectMCPButton; const react_1 = __importStar(require("react")); const styled_components_1 = __importDefault(require("styled-components")); const Dropdown_1 = require("../../components/Dropdown/Dropdown"); const DropdownMenu_1 = require("../../components/Dropdown/DropdownMenu"); const DropdownMenuItem_1 = require("../../components/Dropdown/DropdownMenuItem"); const Button_1 = require("../../components/Button/Button"); const CursorIcon_1 = require("../../icons/CursorIcon/CursorIcon"); const VSCodeIcon_1 = require("../../icons/VSCodeIcon/VSCodeIcon"); const CopyIcon_1 = require("../../icons/CopyIcon/CopyIcon"); const CheckmarkFilledIcon_1 = require("../../icons/CheckmarkFilledIcon/CheckmarkFilledIcon"); const ConnectIcon_1 = require("../../icons/ConnectIcon/ConnectIcon"); const hooks_1 = require("../../core/hooks"); const hooks_2 = require("../../core/hooks"); const TriggerButton = react_1.default.memo(({ text }) => { return (react_1.default.createElement(StyledButton, { variant: "secondary", icon: react_1.default.createElement(ConnectIcon_1.ConnectIcon, null) }, text)); }); const MENU_OPTIONS = [ { key: 'cursor', icon: CursorIcon_1.CursorIcon, titleTranslationKey: 'page.actions.connectMcp.cursor', titleDefault: 'Connect to Cursor', descriptionTranslationKey: 'page.actions.connectMcp.cursorDescription', descriptionDefault: 'Install MCP server on Cursor', }, { key: 'vscode', icon: VSCodeIcon_1.VSCodeIcon, titleTranslationKey: 'page.actions.connectMcp.vscode', titleDefault: 'Connect to VS Code', descriptionTranslationKey: 'page.actions.connectMcp.vscodeDescription', descriptionDefault: 'Install MCP server on VS Code', }, { key: 'copy', icon: CopyIcon_1.CopyIcon, titleTranslationKey: 'page.actions.connectMcp.copyConfig', titleDefault: 'Copy MCP Configuration', descriptionTranslationKey: 'page.actions.connectMcp.copyConfigDescription', descriptionDefault: 'Copy MCP JSON Configuration', }, ]; function ConnectMCPButton({ placement = 'bottom', alignment = 'end', options = ['cursor', 'vscode', 'copy'], }) { const { useTranslate } = (0, hooks_2.useThemeHooks)(); const { translate } = useTranslate(); const { isCopied, triggerButtonText, visibleOptions, handleAction } = (0, hooks_1.useConnectMCPButton)({ options, }); const menuOptions = (0, react_1.useMemo)(() => MENU_OPTIONS.filter((option) => visibleOptions.includes(option.key)), [visibleOptions]); return (react_1.default.createElement(ConnectMCPButtonWrapper, { "data-component-name": "Buttons/ConnectMCPButton" }, react_1.default.createElement(Dropdown_1.Dropdown, { trigger: react_1.default.createElement(TriggerButton, { text: triggerButtonText }), triggerEvent: "hover", placement: placement, alignment: alignment, closeOnClick: false }, react_1.default.createElement(DropdownMenu_1.DropdownMenu, null, menuOptions.map((option) => { const Icon = option.icon; const showCheckmark = option.key === 'copy' && isCopied; return (react_1.default.createElement(DropdownMenuItem_1.DropdownMenuItem, { key: option.key, onAction: () => handleAction(option.key) }, react_1.default.createElement(MenuItemContent, null, react_1.default.createElement(MenuItemIcon, null, showCheckmark ? (react_1.default.createElement(CheckmarkFilledIcon_1.CheckmarkFilledIcon, { color: "var(--color-success-base)" })) : (react_1.default.createElement(Icon, null))), react_1.default.createElement(MenuItemText, null, react_1.default.createElement(MenuItemTitle, null, translate(option.titleTranslationKey, option.titleDefault)), react_1.default.createElement(MenuItemDescription, null, translate(option.descriptionTranslationKey, option.descriptionDefault)))))); }))))); } const ConnectMCPButtonWrapper = styled_components_1.default.div ` display: inline-block; position: relative; `; const StyledButton = (0, styled_components_1.default)(Button_1.Button) ` --button-gap: var(--connect-mcp-button-gap); `; const MenuItemContent = styled_components_1.default.div ` display: flex; align-items: center; gap: var(--connect-mcp-button-menu-item-gap); padding: var(--connect-mcp-button-menu-item-padding-block) var(--connect-mcp-button-menu-item-padding-inline); `; const MenuItemIcon = styled_components_1.default.div ` display: flex; align-items: center; justify-content: center; width: var(--connect-mcp-button-menu-item-icon-size); height: var(--connect-mcp-button-menu-item-icon-size); flex-shrink: 0; border: var(--connect-mcp-button-menu-item-icon-border); border-radius: var(--connect-mcp-button-menu-item-icon-border-radius); color: var(--connect-mcp-button-menu-item-icon-color); `; const MenuItemText = styled_components_1.default.div ` display: flex; flex-direction: column; gap: var(--connect-mcp-button-menu-item-text-gap); flex: 1; `; const MenuItemTitle = styled_components_1.default.div ` font-size: var(--connect-mcp-button-menu-item-title-font-size); font-weight: var(--connect-mcp-button-menu-item-title-font-weight); line-height: var(--connect-mcp-button-menu-item-title-line-height); color: var(--connect-mcp-button-menu-item-title-color); `; const MenuItemDescription = styled_components_1.default.div ` font-size: var(--connect-mcp-button-menu-item-description-font-size); font-weight: var(--connect-mcp-button-menu-item-description-font-weight); line-height: var(--connect-mcp-button-menu-item-description-line-height); color: var(--connect-mcp-button-menu-item-description-color); `; //# sourceMappingURL=ConnectMCPButton.js.map