UNPKG

@copilotkit/react-core

Version:

<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />

247 lines (232 loc) • 8.08 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/components/usage-banner.tsx var usage_banner_exports = {}; __export(usage_banner_exports, { UsageBanner: () => UsageBanner, getErrorActions: () => getErrorActions, renderCopilotKitUsage: () => renderCopilotKitUsage }); module.exports = __toCommonJS(usage_banner_exports); var import_shared = require("@copilotkit/shared"); var import_jsx_runtime = require("react/jsx-runtime"); function UsageBanner({ severity = import_shared.Severity.CRITICAL, message = "", onClose, actions }) { if (!message || !severity) { return null; } const themes = { [import_shared.Severity.INFO]: { bg: "#f8fafc", border: "#e2e8f0", text: "#475569", accent: "#3b82f6" }, [import_shared.Severity.WARNING]: { bg: "#fffbeb", border: "#fbbf24", text: "#92400e", accent: "#f59e0b" }, [import_shared.Severity.CRITICAL]: { bg: "#fef2f2", border: "#fecaca", text: "#dc2626", accent: "#ef4444" } }; const theme = themes[severity]; return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("style", { children: ` @keyframes slideUp { from { opacity: 0; transform: translateX(-50%) translateY(8px); } to { opacity: 1; transform: translateX(-50%) translateY(0); } } .usage-banner { position: fixed; bottom: 24px; left: 50%; transform: translateX(-50%); width: min(600px, calc(100vw - 32px)); z-index: 10000; animation: slideUp 0.2s cubic-bezier(0.16, 1, 0.3, 1); } .banner-content { background: linear-gradient(135deg, ${theme.bg} 0%, ${theme.bg}f5 100%); border: 1px solid ${theme.border}; border-radius: 12px; padding: 18px 20px; box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08), 0 2px 8px rgba(0, 0, 0, 0.04), inset 0 1px 0 rgba(255, 255, 255, 0.7); display: flex; align-items: center; gap: 16px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif; backdrop-filter: blur(12px); position: relative; overflow: hidden; } .banner-content::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, ${theme.accent}40, transparent); } .banner-message { color: ${theme.text}; font-size: 14px; line-height: 1.5; font-weight: 500; flex: 1; letter-spacing: -0.01em; } .close-btn { background: rgba(0, 0, 0, 0.05); border: none; color: ${theme.text}; cursor: pointer; padding: 0; border-radius: 6px; opacity: 0.6; transition: all 0.15s cubic-bezier(0.16, 1, 0.3, 1); font-size: 14px; line-height: 1; flex-shrink: 0; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; } .close-btn:hover { opacity: 1; background: rgba(0, 0, 0, 0.08); transform: scale(1.05); } .btn-primary { background: linear-gradient(135deg, ${theme.accent} 0%, ${theme.accent}e6 100%); color: white; border: none; border-radius: 8px; padding: 10px 18px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.15s cubic-bezier(0.16, 1, 0.3, 1); font-family: inherit; flex-shrink: 0; box-shadow: 0 2px 8px ${theme.accent}30, inset 0 1px 0 rgba(255, 255, 255, 0.2); letter-spacing: -0.01em; } .btn-primary:hover { transform: translateY(-1px) scale(1.02); box-shadow: 0 4px 12px ${theme.accent}40, inset 0 1px 0 rgba(255, 255, 255, 0.25); } .btn-primary:active { transform: translateY(0) scale(0.98); transition: all 0.08s cubic-bezier(0.16, 1, 0.3, 1); } @media (max-width: 640px) { .usage-banner { width: calc(100vw - 24px); } .banner-content { padding: 16px; gap: 12px; } .banner-message { font-size: 13px; line-height: 1.45; } .btn-primary { padding: 8px 14px; font-size: 12px; } .close-btn { width: 22px; height: 22px; font-size: 12px; } } ` }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "usage-banner", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "banner-content", children: [ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "banner-message", children: message }), (actions == null ? void 0 : actions.primary) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "btn-primary", onClick: actions.primary.onClick, children: actions.primary.label }), onClose && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className: "close-btn", onClick: onClose, title: "Close", children: "\xD7" }) ] }) }) ] }); } var getErrorActions = (error) => { switch (error.code) { case import_shared.CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR: return { primary: { label: "Show me how", onClick: () => window.open( "https://docs.copilotkit.ai/premium#how-do-i-get-access-to-premium-features", "_blank", "noopener,noreferrer" ) } }; case import_shared.CopilotKitErrorCode.UPGRADE_REQUIRED_ERROR: return { primary: { label: "Upgrade", onClick: () => window.open("https://cloud.copilotkit.ai", "_blank", "noopener,noreferrer") } }; default: return void 0; } }; function renderCopilotKitUsage(error, onClose) { if (error.visibility !== import_shared.ErrorVisibility.BANNER) { return null; } return /* @__PURE__ */ (0, import_jsx_runtime.jsx)( UsageBanner, { severity: error.severity || import_shared.Severity.CRITICAL, message: error.message, onClose, actions: getErrorActions(error) } ); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { UsageBanner, getErrorActions, renderCopilotKitUsage }); //# sourceMappingURL=usage-banner.js.map