@thisispamela/react 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ function styleInject(css, ref) {
30
30
  }
31
31
  }
32
32
 
33
- var css_248z = "/**\n * Pamela Enterprise React Component Library - Default Styles\n *\n * These styles align with the Pamela app design schema.\n * If the host app already defines these CSS variables, its values will win.\n */\n\n:root {\n --accent: #F27A1A;\n --accent-2: #F06C4F;\n --accent-3: #F3A84C;\n --accent-gradient: linear-gradient(90deg, var(--accent), var(--accent-2));\n --bg-gradient: linear-gradient(135deg, #F5F0E8 0%, #F3EEE8 45%, #EFE8DF 100%);\n --bg-glow: radial-gradient(1200px circle at 10% 20%, rgba(250, 147, 28, 0.1), transparent 58%),\n radial-gradient(900px circle at 80% 10%, rgba(253, 139, 116, 0.1), transparent 62%),\n radial-gradient(800px circle at 70% 80%, rgba(251, 193, 107, 0.08), transparent 60%);\n --surface: rgba(255, 255, 255, 0.5);\n --surface-strong: rgba(255, 255, 255, 0.78);\n --surface-border: rgba(231, 171, 132, 0.24);\n --surface-border-strong: rgba(255, 255, 255, 0.75);\n --surface-highlight: rgba(255, 255, 255, 0.68);\n --surface-liquid: linear-gradient(135deg, rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0.38));\n --surface-liquid-strong: linear-gradient(140deg, rgba(255, 255, 255, 0.88), rgba(255, 255, 255, 0.5));\n --liquid-shadow: 0 18px 42px rgba(28, 25, 17, 0.14);\n --liquid-glow: 0 0 32px rgba(250, 147, 28, 0.2);\n --shadow-soft: 0 12px 26px rgba(28, 25, 17, 0.1);\n --shadow-hover: 0 24px 44px rgba(28, 25, 17, 0.18);\n --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.7);\n --cta-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.7), rgba(250, 147, 28, 0.32));\n --cta-border: 1px solid rgba(250, 147, 28, 0.4);\n --cta-glow: 0 0 18px rgba(250, 147, 28, 0.28);\n --cta-glow-hover: 0 0 22px rgba(250, 147, 28, 0.36);\n --danger-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.6), rgba(239, 68, 68, 0.3));\n --danger-border: 1px solid rgba(239, 68, 68, 0.45);\n --danger-glow: 0 0 16px rgba(239, 68, 68, 0.3);\n --danger-glow-hover: 0 0 20px rgba(239, 68, 68, 0.4);\n --radius-sm: 0.5rem;\n --radius-md: 0.75rem;\n --radius-lg: 1rem;\n --radius-xl: 1.5rem;\n --text-primary: #1C1917;\n --text-secondary: rgba(28, 25, 17, 0.78);\n --text-muted: rgba(28, 25, 17, 0.55);\n --status-success: #10b981;\n --status-warning: #eab308;\n --status-muted: #d1d5db;\n --status-error: #ef4444;\n --bubble-user: #FA931C;\n --bubble-pamela: #ffffff;\n --bubble-recipient: #4b4bea;\n --bubble-border: rgba(231, 171, 132, 0.3);\n}\n\n.dark {\n --bg-gradient: linear-gradient(135deg, #171513 0%, #14110f 45%, #0f0d0b 100%);\n --bg-glow: radial-gradient(1100px circle at 20% 10%, rgba(250, 147, 28, 0.18), transparent 60%),\n radial-gradient(900px circle at 80% 20%, rgba(253, 139, 116, 0.16), transparent 60%),\n radial-gradient(700px circle at 60% 80%, rgba(251, 193, 107, 0.12), transparent 55%);\n --surface: rgba(255, 255, 255, 0.08);\n --surface-strong: rgba(255, 255, 255, 0.16);\n --surface-border: rgba(255, 255, 255, 0.18);\n --surface-border-strong: rgba(255, 255, 255, 0.36);\n --surface-highlight: rgba(255, 255, 255, 0.2);\n --surface-liquid: linear-gradient(150deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.05));\n --surface-liquid-strong: linear-gradient(150deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.08));\n --liquid-shadow: 0 22px 48px rgba(0, 0, 0, 0.55);\n --liquid-glow: 0 0 30px rgba(250, 147, 28, 0.24);\n --shadow-soft: 0 16px 32px rgba(0, 0, 0, 0.5);\n --shadow-hover: 0 26px 44px rgba(0, 0, 0, 0.7);\n --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.12);\n --cta-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.22), rgba(250, 147, 28, 0.34));\n --cta-border: 1px solid rgba(250, 147, 28, 0.5);\n --cta-glow: 0 0 16px rgba(250, 147, 28, 0.26);\n --cta-glow-hover: 0 0 20px rgba(250, 147, 28, 0.32);\n --danger-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.18), rgba(239, 68, 68, 0.32));\n --danger-border: 1px solid rgba(248, 113, 113, 0.55);\n --danger-glow: 0 0 18px rgba(239, 68, 68, 0.32);\n --danger-glow-hover: 0 0 22px rgba(239, 68, 68, 0.4);\n --text-primary: rgba(255, 255, 255, 0.95);\n --text-secondary: rgba(255, 255, 255, 0.72);\n --text-muted: rgba(255, 255, 255, 0.5);\n --bubble-pamela: rgba(255, 255, 255, 0.12);\n --bubble-border: rgba(255, 255, 255, 0.2);\n}\n\n/* Pulse animation for status indicators */\n@keyframes pamela-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n/* Call Button - matches your gradient style */\n.pamela-call-button {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n background: var(--accent-gradient);\n color: var(--text-primary);\n border: var(--cta-border);\n border-radius: var(--radius-md);\n font-weight: 600;\n transition: opacity 0.2s;\n box-shadow: var(--shadow-soft), var(--cta-glow);\n padding: 10px 20px;\n font-size: 16px;\n cursor: pointer;\n}\n\n.pamela-call-button:hover:not(:disabled) {\n opacity: 0.9;\n}\n\n.pamela-call-button:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n background: linear-gradient(to right, #cfcfcf, #b6b6b6);\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: none;\n}\n\n/* Call Status - matches your card style */\n.pamela-call-status {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n}\n\n/* Transcript Viewer - matches your message bubble style */\n.pamela-transcript-viewer {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n}\n\n.pamela-card {\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-soft), var(--liquid-glow);\n}\n\n.pamela-panel {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-xl);\n box-shadow: var(--liquid-shadow), var(--liquid-glow);\n}\n\n.pamela-chip {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: 999px;\n padding: 0.25rem 0.6rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--text-secondary);\n box-shadow: var(--shadow-inset);\n}\n\n.pamela-transcript-container {\n background: var(--surface);\n border-radius: var(--radius-md);\n padding: 16px;\n}\n\n.pamela-transcript-bubble {\n border-radius: var(--radius-md);\n padding: 12px 16px;\n}\n\n.pamela-transcript-bubble--pamela {\n background: var(--bubble-pamela);\n border: 1px solid var(--bubble-border);\n color: var(--text-primary);\n}\n\n.pamela-transcript-bubble--user {\n background: var(--bubble-user);\n color: #ffffff;\n}\n\n.pamela-transcript-bubble--recipient {\n background: var(--bubble-recipient);\n color: #ffffff;\n}\n\n/* Dark mode support */\n@media (prefers-color-scheme: dark) {\n .pamela-call-status {\n color: #ffffff;\n }\n \n .pamela-transcript-viewer {\n color: #ffffff;\n }\n}\n\n";
33
+ var css_248z = "/**\n * Pamela Enterprise React Component Library - Default Styles\n *\n * These styles align with the Pamela app design schema.\n * If the host app already defines these CSS variables, its values will win.\n */\n\n:root {\n --accent: #F27A1A;\n --accent-2: #F06C4F;\n --accent-3: #F3A84C;\n --accent-gradient: linear-gradient(90deg, var(--accent), var(--accent-2));\n --bg-gradient: linear-gradient(135deg, #F5F0E8 0%, #F3EEE8 45%, #EFE8DF 100%);\n --bg-glow: radial-gradient(1200px circle at 10% 20%, rgba(250, 147, 28, 0.1), transparent 58%),\n radial-gradient(900px circle at 80% 10%, rgba(253, 139, 116, 0.1), transparent 62%),\n radial-gradient(800px circle at 70% 80%, rgba(251, 193, 107, 0.08), transparent 60%);\n --surface: rgba(255, 255, 255, 0.5);\n --surface-strong: rgba(255, 255, 255, 0.78);\n --surface-border: rgba(231, 171, 132, 0.24);\n --surface-border-strong: rgba(255, 255, 255, 0.75);\n --surface-highlight: rgba(255, 255, 255, 0.68);\n --surface-liquid: linear-gradient(135deg, rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0.38));\n --surface-liquid-strong: linear-gradient(140deg, rgba(255, 255, 255, 0.88), rgba(255, 255, 255, 0.5));\n --liquid-highlight: linear-gradient(120deg, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 45%);\n --liquid-shadow: 0 18px 42px rgba(28, 25, 17, 0.14);\n --liquid-glow: 0 0 32px rgba(250, 147, 28, 0.2);\n --shadow-soft: 0 12px 26px rgba(28, 25, 17, 0.1);\n --shadow-hover: 0 24px 44px rgba(28, 25, 17, 0.18);\n --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.7);\n --cta-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.7), rgba(250, 147, 28, 0.32));\n --cta-border: 1px solid rgba(250, 147, 28, 0.4);\n --cta-glow: 0 0 18px rgba(250, 147, 28, 0.28);\n --cta-glow-hover: 0 0 22px rgba(250, 147, 28, 0.36);\n --danger-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.6), rgba(239, 68, 68, 0.3));\n --danger-border: 1px solid rgba(239, 68, 68, 0.45);\n --danger-glow: 0 0 16px rgba(239, 68, 68, 0.3);\n --danger-glow-hover: 0 0 20px rgba(239, 68, 68, 0.4);\n --badge-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.7), rgba(250, 147, 28, 0.28));\n --badge-border: 1px solid rgba(250, 147, 28, 0.4);\n --badge-glow: 0 0 14px rgba(250, 147, 28, 0.24);\n --avatar-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.6), rgba(250, 147, 28, 0.38), rgba(253, 139, 116, 0.32));\n --avatar-border: 1px solid rgba(250, 147, 28, 0.35);\n --avatar-glow: 0 0 20px rgba(250, 147, 28, 0.28);\n --glass-blur: 24px;\n --glass-blur-strong: 32px;\n --noise-opacity: 0.05;\n --focus-ring: 0 0 0 3px rgba(250, 147, 28, 0.28);\n --radius-sm: 0.5rem;\n --radius-md: 0.75rem;\n --radius-lg: 1rem;\n --radius-xl: 1.5rem;\n --text-primary: #1C1917;\n --text-secondary: rgba(28, 25, 17, 0.78);\n --text-muted: rgba(28, 25, 17, 0.55);\n --status-success: #10b981;\n --status-warning: #eab308;\n --status-muted: #d1d5db;\n --status-error: #ef4444;\n --bubble-user: #FA931C;\n --bubble-pamela: #ffffff;\n --bubble-recipient: #4b4bea;\n --bubble-border: rgba(231, 171, 132, 0.3);\n}\n\n.dark {\n --bg-gradient: linear-gradient(135deg, #171513 0%, #14110f 45%, #0f0d0b 100%);\n --bg-glow: radial-gradient(1100px circle at 20% 10%, rgba(250, 147, 28, 0.18), transparent 60%),\n radial-gradient(900px circle at 80% 20%, rgba(253, 139, 116, 0.16), transparent 60%),\n radial-gradient(700px circle at 60% 80%, rgba(251, 193, 107, 0.12), transparent 55%);\n --surface: rgba(255, 255, 255, 0.08);\n --surface-strong: rgba(255, 255, 255, 0.16);\n --surface-border: rgba(255, 255, 255, 0.18);\n --surface-border-strong: rgba(255, 255, 255, 0.36);\n --surface-highlight: rgba(255, 255, 255, 0.2);\n --surface-liquid: linear-gradient(150deg, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.05));\n --surface-liquid-strong: linear-gradient(150deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.08));\n --liquid-highlight: linear-gradient(120deg, rgba(255, 255, 255, 0.24), rgba(255, 255, 255, 0) 45%);\n --liquid-shadow: 0 22px 48px rgba(0, 0, 0, 0.55);\n --liquid-glow: 0 0 30px rgba(250, 147, 28, 0.24);\n --shadow-soft: 0 16px 32px rgba(0, 0, 0, 0.5);\n --shadow-hover: 0 26px 44px rgba(0, 0, 0, 0.7);\n --shadow-inset: inset 0 1px 0 rgba(255, 255, 255, 0.12);\n --cta-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.22), rgba(250, 147, 28, 0.34));\n --cta-border: 1px solid rgba(250, 147, 28, 0.5);\n --cta-glow: 0 0 16px rgba(250, 147, 28, 0.26);\n --cta-glow-hover: 0 0 20px rgba(250, 147, 28, 0.32);\n --danger-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.18), rgba(239, 68, 68, 0.32));\n --danger-border: 1px solid rgba(248, 113, 113, 0.55);\n --danger-glow: 0 0 18px rgba(239, 68, 68, 0.32);\n --danger-glow-hover: 0 0 22px rgba(239, 68, 68, 0.4);\n --badge-bg: linear-gradient(120deg, rgba(255, 255, 255, 0.2), rgba(250, 147, 28, 0.32));\n --badge-border: 1px solid rgba(250, 147, 28, 0.5);\n --badge-glow: 0 0 14px rgba(250, 147, 28, 0.22);\n --avatar-bg: linear-gradient(135deg, rgba(255, 255, 255, 0.22), rgba(250, 147, 28, 0.26), rgba(253, 139, 116, 0.24));\n --avatar-border: 1px solid rgba(255, 255, 255, 0.18);\n --avatar-glow: 0 0 18px rgba(250, 147, 28, 0.22);\n --glass-blur: 24px;\n --glass-blur-strong: 32px;\n --noise-opacity: 0.08;\n --focus-ring: 0 0 0 3px rgba(250, 147, 28, 0.35);\n --text-primary: rgba(255, 255, 255, 0.95);\n --text-secondary: rgba(255, 255, 255, 0.72);\n --text-muted: rgba(255, 255, 255, 0.5);\n --bubble-pamela: rgba(255, 255, 255, 0.12);\n --bubble-border: rgba(255, 255, 255, 0.2);\n}\n\n/* Pulse animation for status indicators */\n@keyframes pamela-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}\n\n/* VoiceOrb animations */\n@keyframes shimmer {\n 0% {\n transform: translateX(-100%) translateY(-100%) rotate(45deg);\n }\n 100% {\n transform: translateX(100%) translateY(100%) rotate(45deg);\n }\n}\n\n@keyframes ripple {\n 0% {\n transform: scale(1);\n opacity: 0.6;\n }\n 50% {\n transform: scale(2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 0.6;\n }\n}\n\n@keyframes float {\n 0%, 100% {\n transform: translateY(0px);\n }\n 50% {\n transform: translateY(-10px);\n }\n}\n\n/* Call Button - matches your gradient style */\n.pamela-call-button {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;\n background: var(--accent-gradient);\n color: var(--text-primary);\n border: var(--cta-border);\n border-radius: var(--radius-md);\n font-weight: 600;\n transition: opacity 0.2s;\n box-shadow: var(--shadow-soft), var(--cta-glow);\n padding: 10px 20px;\n font-size: 16px;\n cursor: pointer;\n}\n\n.pamela-call-button--primary {\n background: var(--accent-gradient);\n}\n\n.pamela-call-button--secondary {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n box-shadow: var(--shadow-soft), var(--liquid-glow);\n}\n\n.pamela-call-button--danger {\n background: var(--danger-bg);\n border: var(--danger-border);\n color: #b91c1c;\n box-shadow: var(--shadow-soft), var(--danger-glow);\n}\n\n.pamela-call-button--sm {\n padding: 6px 12px;\n font-size: 14px;\n}\n\n.pamela-call-button--md {\n padding: 10px 20px;\n font-size: 16px;\n}\n\n.pamela-call-button--lg {\n padding: 12px 24px;\n font-size: 18px;\n}\n\n.pamela-call-button:hover:not(:disabled) {\n opacity: 0.9;\n}\n\n.pamela-call-button:disabled {\n opacity: 0.7;\n cursor: not-allowed;\n background: linear-gradient(to right, #cfcfcf, #b6b6b6);\n border: 1px solid rgba(0, 0, 0, 0.08);\n box-shadow: none;\n}\n\n/* Call Status - matches your card style */\n.pamela-call-status {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n}\n\n/* Transcript Viewer - matches your message bubble style */\n.pamela-transcript-viewer {\n font-family: 'Poppins', 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n}\n\n.pamela-card {\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-soft), var(--liquid-glow);\n}\n\n.pamela-panel {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-xl);\n box-shadow: var(--liquid-shadow), var(--liquid-glow);\n}\n\n.pamela-chip {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: 999px;\n padding: 0.25rem 0.6rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--text-secondary);\n box-shadow: var(--shadow-inset);\n}\n\n.pamela-transcript-container {\n background: var(--surface);\n border-radius: var(--radius-md);\n padding: 16px;\n}\n\n.pamela-transcript-bubble {\n border-radius: var(--radius-md);\n padding: 12px 16px;\n}\n\n.pamela-transcript-bubble--pamela {\n background: var(--bubble-pamela);\n border: 1px solid var(--bubble-border);\n color: var(--text-primary);\n}\n\n.pamela-transcript-bubble--user {\n background: var(--bubble-user);\n color: #ffffff;\n}\n\n.pamela-transcript-bubble--recipient {\n background: var(--bubble-recipient);\n color: #ffffff;\n}\n\n/* Utility classes aligned with Pamela app design */\n.app-gradient {\n background: var(--bg-glow), var(--bg-gradient);\n}\n\n.surface-card {\n background: var(--surface-strong);\n border: 1px solid var(--surface-border);\n box-shadow: var(--shadow-soft);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n}\n\n.surface-card-hover {\n transition: box-shadow 180ms ease, transform 180ms ease;\n}\n\n.surface-card-hover:hover {\n box-shadow: var(--shadow-hover);\n}\n\n.accent-card {\n background: linear-gradient(90deg, rgba(250, 147, 28, 0.12), rgba(253, 139, 116, 0.12));\n border: 1px solid rgba(250, 147, 28, 0.3);\n box-shadow: var(--shadow-soft);\n}\n\n.dark .accent-card {\n background: linear-gradient(90deg, rgba(250, 147, 28, 0.22), rgba(253, 139, 116, 0.22));\n border-color: rgba(250, 147, 28, 0.35);\n}\n\n.send-button-idle {\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.4));\n border: 1px solid rgba(231, 171, 132, 0.45);\n color: rgba(28, 25, 17, 0.5);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.7), 0 0 14px rgba(250, 147, 28, 0.18);\n}\n\n.dark .send-button-idle {\n background: linear-gradient(135deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.04));\n border-color: rgba(255, 255, 255, 0.22);\n color: rgba(255, 255, 255, 0.6);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 0 16px rgba(250, 147, 28, 0.22);\n}\n\n.send-button-gradient {\n background: linear-gradient(120deg, rgba(250, 147, 28, 0.9), rgba(253, 139, 116, 0.9));\n border: 1px solid rgba(255, 255, 255, 0.45);\n box-shadow: 0 0 16px rgba(250, 147, 28, 0.32);\n}\n\n.send-button-gradient:hover,\n.send-button-gradient:focus-visible {\n box-shadow: 0 0 18px rgba(250, 147, 28, 0.36);\n}\n\n.transcript-bubble {\n box-shadow: 0 6px 14px rgba(15, 23, 42, 0.12), 0 0 10px rgba(250, 147, 28, 0.14);\n transition: box-shadow 180ms ease;\n}\n\n.transcript-bubble:hover,\n.transcript-bubble:focus-visible {\n box-shadow: 0 6px 14px rgba(15, 23, 42, 0.12), 0 0 10px rgba(250, 147, 28, 0.14);\n}\n\n.btn-primary {\n background: var(--cta-bg);\n border: var(--cta-border);\n color: var(--text-primary);\n font-weight: 600;\n border-radius: var(--radius-md);\n box-shadow: var(--shadow-soft), var(--cta-glow);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n transition: transform 150ms ease, box-shadow 150ms ease, opacity 150ms ease;\n}\n\n.btn-primary:hover {\n box-shadow: var(--shadow-hover), var(--cta-glow-hover);\n opacity: 0.96;\n}\n\n.btn-primary:active {\n transform: scale(0.98);\n}\n\n.btn-danger {\n background: var(--danger-bg);\n border: var(--danger-border);\n color: #b91c1c;\n box-shadow: var(--shadow-soft), var(--danger-glow);\n backdrop-filter: blur(10px);\n -webkit-backdrop-filter: blur(10px);\n transition: box-shadow 180ms ease, transform 180ms ease, opacity 180ms ease;\n}\n\n.dark .btn-danger {\n color: #fca5a5;\n}\n\n.btn-danger:hover {\n box-shadow: var(--danger-glow-hover);\n}\n\n.badge-pill {\n background: var(--badge-bg);\n border: var(--badge-border);\n border-radius: 999px;\n padding: 0.25rem 0.6rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--text-secondary);\n box-shadow: var(--shadow-inset), var(--badge-glow);\n}\n\n.badge-accent {\n background: rgba(250, 147, 28, 0.15);\n color: rgba(250, 147, 28, 0.95);\n}\n\n.dark .badge-accent {\n background: rgba(250, 147, 28, 0.25);\n color: rgba(253, 139, 116, 0.95);\n}\n\n.h1 {\n font-size: 1.875rem;\n line-height: 2.25rem;\n font-weight: 700;\n}\n\n.h2 {\n font-size: 1.5rem;\n line-height: 2rem;\n font-weight: 600;\n}\n\n.h3 {\n font-size: 1.125rem;\n line-height: 1.75rem;\n font-weight: 600;\n}\n\n.body {\n font-size: 0.95rem;\n line-height: 1.5rem;\n}\n\n.meta {\n font-size: 0.75rem;\n line-height: 1.125rem;\n color: rgba(28, 25, 17, 0.6);\n}\n\n.dark .meta {\n color: rgba(255, 255, 255, 0.6);\n}\n\n.input-base {\n background: rgba(255, 255, 255, 0.86);\n border: 1px solid rgba(231, 171, 132, 0.28);\n border-radius: var(--radius-lg);\n padding: 0.75rem 1rem;\n color: #1C1917;\n transition: box-shadow 150ms ease, border-color 150ms ease;\n}\n\n.dark .input-base {\n background: rgba(255, 255, 255, 0.1);\n color: #ffffff;\n}\n\n.input-base:focus {\n outline: none;\n border-color: rgba(250, 147, 28, 0.6);\n box-shadow: var(--focus-ring);\n}\n\n.panel {\n position: relative;\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-xl);\n box-shadow: var(--liquid-shadow), var(--liquid-glow);\n backdrop-filter: blur(var(--glass-blur-strong));\n -webkit-backdrop-filter: blur(var(--glass-blur-strong));\n overflow: hidden;\n}\n\n.card {\n position: relative;\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-lg);\n box-shadow: var(--shadow-soft), var(--liquid-glow);\n backdrop-filter: blur(var(--glass-blur));\n -webkit-backdrop-filter: blur(var(--glass-blur));\n overflow: hidden;\n}\n\n.card-hover {\n transition: box-shadow 180ms ease, transform 180ms ease;\n}\n\n.card-hover:hover {\n box-shadow: var(--shadow-hover), var(--liquid-glow);\n transform: translateY(-2px);\n}\n\n.chip {\n background: var(--surface-liquid);\n border: 1px solid var(--surface-border-strong);\n border-radius: 999px;\n padding: 0.25rem 0.6rem;\n font-size: 0.75rem;\n font-weight: 600;\n color: var(--text-secondary);\n box-shadow: var(--shadow-inset);\n}\n\n.input-field {\n position: relative;\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n border-radius: var(--radius-lg);\n padding: 0.75rem 1rem;\n color: var(--text-primary);\n box-shadow: var(--shadow-inset), var(--liquid-glow);\n transition: box-shadow 150ms ease, border-color 150ms ease, transform 150ms ease;\n}\n\n.input-field:focus {\n outline: none;\n border-color: rgba(250, 147, 28, 0.6);\n box-shadow: var(--focus-ring), var(--liquid-glow);\n transform: translateY(-1px);\n}\n\n.btn-secondary {\n border-radius: var(--radius-md);\n border: 1px solid var(--surface-border-strong);\n background: var(--surface-liquid);\n color: var(--text-primary);\n box-shadow: var(--shadow-soft), var(--liquid-glow);\n transition: transform 150ms ease, box-shadow 150ms ease, opacity 150ms ease;\n}\n\n.btn-secondary:hover {\n box-shadow: var(--shadow-hover), var(--liquid-glow);\n}\n\n.btn-secondary:active {\n transform: scale(0.98);\n}\n\n.tooltip-panel {\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n color: var(--text-primary);\n box-shadow: var(--shadow-soft), 0 12px 24px rgba(28, 25, 17, 0.16);\n backdrop-filter: blur(calc(var(--glass-blur) * 0.9));\n -webkit-backdrop-filter: blur(calc(var(--glass-blur) * 0.9));\n}\n\n.tooltip-arrow {\n background: var(--surface-liquid-strong);\n border: 1px solid var(--surface-border-strong);\n}\n\n::where(.panel, .card) {\n isolation: isolate;\n}\n\n::where(.panel, .card) > * {\n position: relative;\n z-index: 1;\n}\n\n::where(.panel, .card)::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--liquid-highlight);\n opacity: 0.6;\n pointer-events: none;\n z-index: 0;\n}\n\n::where(.panel, .card)::after {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image: radial-gradient(rgba(255, 255, 255, 0.16) 0.5px, transparent 0.5px);\n background-size: 4px 4px;\n opacity: var(--noise-opacity);\n pointer-events: none;\n z-index: 0;\n}\n\n.avatar {\n background: var(--avatar-bg);\n border: var(--avatar-border);\n box-shadow: var(--shadow-soft), var(--avatar-glow);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n}\n\n.conversations-scroll::-webkit-scrollbar,\n.chat-scroll::-webkit-scrollbar {\n width: 6px;\n}\n\n.conversations-scroll::-webkit-scrollbar-track,\n.chat-scroll::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.conversations-scroll::-webkit-scrollbar-thumb,\n.chat-scroll::-webkit-scrollbar-thumb {\n background: rgba(230, 171, 132, 0.3);\n border-radius: 3px;\n}\n\n.conversations-scroll::-webkit-scrollbar-thumb:hover,\n.chat-scroll::-webkit-scrollbar-thumb:hover {\n background: rgba(230, 171, 132, 0.5);\n}\n\n.conversations-scroll,\n.chat-scroll {\n scrollbar-width: thin;\n scrollbar-color: rgba(230, 171, 132, 0.3) transparent;\n}\n\n.touch-manipulation {\n touch-action: manipulation;\n}\n\n/* Dark mode support */\n@media (prefers-color-scheme: dark) {\n .pamela-call-status {\n color: #ffffff;\n }\n \n .pamela-transcript-viewer {\n color: #ffffff;\n }\n}\n\n";
34
34
  styleInject(css_248z);
35
35
 
36
36
  const PamelaContext = React.createContext(null);
@@ -49,13 +49,37 @@ function usePamela() {
49
49
  return context;
50
50
  }
51
51
 
52
- function CallButton({ to, task, country, locale, instructions, end_user_id, metadata, tools, webhooks, onCallStart, onCallComplete, onError, disabled = false, className = '', children, }) {
52
+ function CallButton({ to, task, country, locale, instructions, voice, agent_name, caller_name, end_user_id, metadata, tools, webhooks, onCallStart, onCallComplete, onError, variant = 'primary', size = 'md', pollInterval = 2000, pollTimeout = 5 * 60 * 1000, disabled = false, className = '', children, }) {
53
53
  const { client } = usePamela();
54
54
  const [loading, setLoading] = React.useState(false);
55
55
  const [callId, setCallId] = React.useState(null);
56
+ const pollIntervalRef = React.useRef(null);
57
+ const timeoutRef = React.useRef(null);
58
+ // Cleanup on unmount
59
+ React.useEffect(() => {
60
+ return () => {
61
+ if (pollIntervalRef.current) {
62
+ clearInterval(pollIntervalRef.current);
63
+ pollIntervalRef.current = null;
64
+ }
65
+ if (timeoutRef.current) {
66
+ clearTimeout(timeoutRef.current);
67
+ timeoutRef.current = null;
68
+ }
69
+ };
70
+ }, []);
56
71
  const handleClick = async () => {
57
72
  if (loading || disabled)
58
73
  return;
74
+ // Clear any existing intervals/timeouts
75
+ if (pollIntervalRef.current) {
76
+ clearInterval(pollIntervalRef.current);
77
+ pollIntervalRef.current = null;
78
+ }
79
+ if (timeoutRef.current) {
80
+ clearTimeout(timeoutRef.current);
81
+ timeoutRef.current = null;
82
+ }
59
83
  setLoading(true);
60
84
  try {
61
85
  const call = await client.createCall({
@@ -64,6 +88,9 @@ function CallButton({ to, task, country, locale, instructions, end_user_id, meta
64
88
  country,
65
89
  locale,
66
90
  instructions,
91
+ voice,
92
+ agent_name,
93
+ caller_name,
67
94
  end_user_id,
68
95
  metadata,
69
96
  tools,
@@ -72,36 +99,69 @@ function CallButton({ to, task, country, locale, instructions, end_user_id, meta
72
99
  setCallId(call.id);
73
100
  onCallStart?.(call.id);
74
101
  // Poll for call completion
75
- const pollInterval = setInterval(async () => {
102
+ pollIntervalRef.current = setInterval(async () => {
76
103
  try {
77
104
  const status = await client.getCall(call.id);
78
105
  if (status.status === 'completed' || status.status === 'failed' || status.status === 'cancelled') {
79
- clearInterval(pollInterval);
106
+ if (pollIntervalRef.current) {
107
+ clearInterval(pollIntervalRef.current);
108
+ pollIntervalRef.current = null;
109
+ }
110
+ if (timeoutRef.current) {
111
+ clearTimeout(timeoutRef.current);
112
+ timeoutRef.current = null;
113
+ }
80
114
  setLoading(false);
81
115
  onCallComplete?.(status);
82
116
  }
83
117
  }
84
118
  catch (error) {
85
- clearInterval(pollInterval);
119
+ if (pollIntervalRef.current) {
120
+ clearInterval(pollIntervalRef.current);
121
+ pollIntervalRef.current = null;
122
+ }
123
+ if (timeoutRef.current) {
124
+ clearTimeout(timeoutRef.current);
125
+ timeoutRef.current = null;
126
+ }
86
127
  setLoading(false);
87
128
  onError?.(error);
88
129
  }
89
- }, 2000);
130
+ }, pollInterval);
90
131
  // Timeout after 5 minutes
91
- setTimeout(() => {
92
- clearInterval(pollInterval);
132
+ timeoutRef.current = setTimeout(() => {
133
+ if (pollIntervalRef.current) {
134
+ clearInterval(pollIntervalRef.current);
135
+ pollIntervalRef.current = null;
136
+ }
93
137
  setLoading(false);
94
- }, 5 * 60 * 1000);
138
+ }, pollTimeout);
95
139
  }
96
140
  catch (error) {
97
141
  setLoading(false);
98
142
  onError?.(error);
99
143
  }
100
144
  };
101
- return (React.createElement("button", { onClick: handleClick, disabled: loading || disabled, className: `pamela-call-button ${className}` }, loading ? 'Calling...' : children || 'Call Now'));
145
+ const variantClass = variant === 'secondary'
146
+ ? 'pamela-call-button--secondary'
147
+ : variant === 'danger'
148
+ ? 'pamela-call-button--danger'
149
+ : 'pamela-call-button--primary';
150
+ const sizeClass = size === 'sm'
151
+ ? 'pamela-call-button--sm'
152
+ : size === 'lg'
153
+ ? 'pamela-call-button--lg'
154
+ : 'pamela-call-button--md';
155
+ return (React.createElement("button", { onClick: handleClick, disabled: loading || disabled, className: `pamela-call-button ${variantClass} ${sizeClass} ${className}` }, loading ? 'Calling...' : children || 'Call Now'));
102
156
  }
103
157
 
104
- function TranscriptViewer({ transcript, className = '' }) {
158
+ function TranscriptViewer({ transcript, maxHeight = 400, autoScroll = true, className = '', }) {
159
+ const containerRef = React.useRef(null);
160
+ React.useEffect(() => {
161
+ if (!autoScroll || !containerRef.current)
162
+ return;
163
+ containerRef.current.scrollTop = containerRef.current.scrollHeight;
164
+ }, [autoScroll, transcript]);
105
165
  const getMessageStyle = (speaker) => {
106
166
  if (speaker === 'pamela' || speaker === 'agent') {
107
167
  // Pamela messages: white background with beige border
@@ -141,12 +201,12 @@ function TranscriptViewer({ transcript, className = '' }) {
141
201
  color: 'var(--text-primary, #1f2937)',
142
202
  } }, "Transcript"),
143
203
  React.createElement("div", { className: "pamela-transcript-container", style: {
144
- maxHeight: '400px',
204
+ maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight,
145
205
  overflowY: 'auto',
146
206
  borderRadius: 'var(--radius-sm, 0.5rem)',
147
207
  padding: '16px',
148
208
  background: 'var(--surface, #F7F4ED)',
149
- } }, transcript.map((entry, index) => {
209
+ }, ref: containerRef }, transcript.map((entry, index) => {
150
210
  const style = getMessageStyle(entry.speaker);
151
211
  const { className: bubbleClassName, ...bubbleStyle } = style;
152
212
  return (React.createElement("div", { key: index, className: bubbleClassName, style: {
@@ -267,10 +327,11 @@ function StatusIndicator({ status }) {
267
327
  fontSize: '12px',
268
328
  fontWeight: '500',
269
329
  color: config.textColor,
330
+ fontStyle: 'italic',
270
331
  fontFamily: 'Poppins, Inter, sans-serif',
271
332
  } }, config.text)));
272
333
  }
273
- function CallStatus({ callId, pollInterval = 5000, onStatusChange, showTranscript = true, className = '', }) {
334
+ function CallStatus({ callId, pollInterval = 5000, onStatusChange, showTranscript = true, showSummary = true, compact = false, className = '', }) {
274
335
  const { client } = usePamela();
275
336
  const [status, setStatus] = React.useState(null);
276
337
  const [loading, setLoading] = React.useState(true);
@@ -312,8 +373,8 @@ function CallStatus({ callId, pollInterval = 5000, onStatusChange, showTranscrip
312
373
  fontFamily: 'Poppins, Inter, -apple-system, BlinkMacSystemFont, sans-serif',
313
374
  } },
314
375
  React.createElement("div", { style: {
315
- marginBottom: '16px',
316
- padding: '16px',
376
+ marginBottom: compact ? '8px' : '16px',
377
+ padding: compact ? '12px' : '16px',
317
378
  background: 'var(--surface-liquid-strong, #ffffff)',
318
379
  borderRadius: 'var(--radius-md, 0.75rem)',
319
380
  border: '1px solid var(--surface-border-strong, rgba(231, 171, 132, 0.3))',
@@ -321,24 +382,24 @@ function CallStatus({ callId, pollInterval = 5000, onStatusChange, showTranscrip
321
382
  } },
322
383
  React.createElement("div", { style: { marginBottom: '12px' } },
323
384
  React.createElement(StatusIndicator, { status: status.status })),
324
- React.createElement("div", { style: { fontSize: '14px', color: 'var(--text-primary, #1f2937)', lineHeight: '1.6' } },
325
- React.createElement("div", { style: { marginBottom: '8px' } },
385
+ React.createElement("div", { style: { fontSize: compact ? '12px' : '14px', color: 'var(--text-primary, #1f2937)', lineHeight: '1.6' } },
386
+ React.createElement("div", { style: { marginBottom: compact ? '6px' : '8px' } },
326
387
  React.createElement("span", { style: { fontWeight: '600', color: 'var(--text-secondary, #6b7280)' } }, "To:"),
327
388
  ' ',
328
389
  React.createElement("span", { style: { color: 'var(--text-primary, #1f2937)' } }, status.to)),
329
- React.createElement("div", { style: { marginBottom: '8px' } },
390
+ React.createElement("div", { style: { marginBottom: compact ? '6px' : '8px' } },
330
391
  React.createElement("span", { style: { fontWeight: '600', color: 'var(--text-secondary, #6b7280)' } }, "From:"),
331
392
  ' ',
332
393
  React.createElement("span", { style: { color: 'var(--text-primary, #1f2937)' } }, status.from_)),
333
- status.duration_seconds && (React.createElement("div", { style: { marginBottom: '8px' } },
394
+ status.duration_seconds && !compact && (React.createElement("div", { style: { marginBottom: '8px' } },
334
395
  React.createElement("span", { style: { fontWeight: '600', color: 'var(--text-secondary, #6b7280)' } }, "Duration:"),
335
396
  ' ',
336
397
  React.createElement("span", { style: { color: 'var(--text-primary, #1f2937)' } },
337
398
  status.duration_seconds,
338
399
  "s")))),
339
- status.summary && (React.createElement("div", { style: {
340
- marginTop: '16px',
341
- padding: '16px',
400
+ showSummary && status.summary && (React.createElement("div", { style: {
401
+ marginTop: compact ? '12px' : '16px',
402
+ padding: compact ? '12px' : '16px',
342
403
  background: 'var(--cta-bg, linear-gradient(to right, rgba(250, 147, 28, 0.1), rgba(253, 139, 116, 0.1)))',
343
404
  border: 'var(--cta-border, 1px solid rgba(250, 147, 28, 0.3))',
344
405
  borderRadius: 'var(--radius-md, 0.75rem)',
@@ -347,12 +408,12 @@ function CallStatus({ callId, pollInterval = 5000, onStatusChange, showTranscrip
347
408
  display: 'flex',
348
409
  alignItems: 'center',
349
410
  gap: '8px',
350
- marginBottom: '8px',
411
+ marginBottom: compact ? '6px' : '8px',
351
412
  } },
352
413
  React.createElement("svg", { style: { width: '20px', height: '20px', color: 'var(--accent, #FA931C)' }, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" },
353
414
  React.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" })),
354
- React.createElement("h4", { style: { fontWeight: '600', color: 'var(--text-primary, #1f2937)', fontSize: '14px' } }, "Call Summary")),
355
- React.createElement("p", { style: { fontSize: '14px', color: 'var(--text-primary, #1f2937)', lineHeight: '1.6' } }, status.summary)))),
415
+ React.createElement("h4", { style: { fontWeight: '600', color: 'var(--text-primary, #1f2937)', fontSize: compact ? '12px' : '14px' } }, "Call Summary")),
416
+ React.createElement("p", { style: { fontSize: compact ? '12px' : '14px', color: 'var(--text-primary, #1f2937)', lineHeight: '1.6' } }, status.summary)))),
356
417
  showTranscript && status.transcript && status.transcript.length > 0 && (React.createElement(TranscriptViewer, { transcript: status.transcript }))));
357
418
  }
358
419
 
@@ -431,10 +492,215 @@ function CallHistory({ limit = 10, onCallSelect, className = '', }) {
431
492
  new Date(call.created_at).toLocaleString()))))))));
432
493
  }
433
494
 
495
+ const sizeMap = {
496
+ small: 'var(--pamela-orb-size-small, 96px)',
497
+ medium: 'var(--pamela-orb-size-medium, 128px)',
498
+ large: 'var(--pamela-orb-size-large, 192px)',
499
+ };
500
+ function VoiceOrb({ isActive = false, size = 'large', className = '' }) {
501
+ const [pulsePhase, setPulsePhase] = React.useState(0);
502
+ const [idlePhase, setIdlePhase] = React.useState(Math.floor(Math.random() * 720)); // Random initial phase to avoid sync
503
+ // Continuous animation for idle mode - runs once on mount
504
+ // Remove modulo to allow continuous rotation (can go beyond 360 degrees for seamless loop)
505
+ React.useEffect(() => {
506
+ const interval = setInterval(() => {
507
+ setIdlePhase(prev => prev + 1); // Continuous growth - no reset for fluid animation
508
+ }, 16); // ~60fps
509
+ return () => clearInterval(interval);
510
+ }, []); // Empty deps - only run once
511
+ // Fast animation for active mode
512
+ React.useEffect(() => {
513
+ if (!isActive)
514
+ return;
515
+ const interval = setInterval(() => {
516
+ setPulsePhase(prev => (prev + 1) % 360);
517
+ }, 16); // ~60fps
518
+ return () => clearInterval(interval);
519
+ }, [isActive]);
520
+ const orbSize = sizeMap[size];
521
+ // Multiple breathing layers for idle mode (more organic) - reduced by 10%
522
+ const baseTime = idlePhase * 0.05;
523
+ const idleBreath1 = Math.sin(baseTime) * 0.072; // 7.2% primary breath (was 8%)
524
+ const idleBreath2 = Math.sin(baseTime * 1.3) * 0.045; // 4.5% secondary breath (was 5%)
525
+ const idleBreath3 = Math.sin(baseTime * 0.7) * 0.027; // 2.7% tertiary breath (was 3%)
526
+ // Calculate pulse scale - multi-layer breathing when idle, faster pulse when active - reduced by 10%
527
+ const pulseScale = isActive
528
+ ? 1 + Math.sin((pulsePhase * Math.PI) / 180) * 0.135 // 13.5% pulse variation (was 15%)
529
+ : 1 + idleBreath1 + idleBreath2 + idleBreath3; // Layered breathing when idle
530
+ // Floating/levitation effect (idle only) - reduced by 10%
531
+ const floatY = isActive ? 0 : Math.sin(baseTime * 0.4) * 7.2; // 7.2px float movement (was 8px)
532
+ // Continuous gradient rotation - slower when idle, faster when active
533
+ const gradientRotation = isActive
534
+ ? pulsePhase * 0.5
535
+ : idlePhase * 0.15; // Slow, continuous rotation when idle
536
+ // Subtle color shift for idle mode - reduced by 10%
537
+ const colorShift = isActive ? 0 : Math.sin(baseTime * 0.3) * 9; // 9deg color shift (was 10deg)
538
+ const orbSizeStyle = {
539
+ width: orbSize,
540
+ height: orbSize,
541
+ };
542
+ return (React.createElement("div", { className: className, style: {
543
+ position: 'relative',
544
+ display: 'flex',
545
+ alignItems: 'center',
546
+ justifyContent: 'center',
547
+ transform: `translateY(${floatY}px)`,
548
+ transition: isActive ? 'transform 0.3s ease-out' : 'none',
549
+ } },
550
+ React.createElement("div", { style: {
551
+ ...orbSizeStyle,
552
+ position: 'absolute',
553
+ borderRadius: '50%',
554
+ filter: 'blur(24px)', // blur-xl
555
+ background: `radial-gradient(circle,
556
+ hsla(${25 + colorShift}, 75%, 55%, 0.54),
557
+ hsla(${11 + colorShift}, 97%, 72%, 0.54))`,
558
+ transform: `scale(${pulseScale * 1.125})`,
559
+ opacity: isActive ? 0.315 : 0.225,
560
+ transition: 'opacity 0.3s ease-out',
561
+ } }),
562
+ React.createElement("div", { style: {
563
+ ...orbSizeStyle,
564
+ position: 'absolute',
565
+ borderRadius: '50%',
566
+ filter: 'blur(16px)', // blur-lg
567
+ background: `radial-gradient(circle,
568
+ hsla(${25 + colorShift * 0.7}, 75%, 55%, 0.45),
569
+ hsla(${11 + colorShift * 0.7}, 97%, 72%, 0.45))`,
570
+ transform: `scale(${pulseScale * 1.035}) rotate(${gradientRotation * 0.3}deg)`,
571
+ opacity: isActive ? 0.405 : 0.315,
572
+ transition: 'opacity 0.3s ease-out',
573
+ } }),
574
+ !isActive && (React.createElement("div", { style: {
575
+ ...orbSizeStyle,
576
+ position: 'absolute',
577
+ borderRadius: '50%',
578
+ filter: 'blur(40px)', // blur-2xl
579
+ background: `radial-gradient(circle,
580
+ hsla(${25 + colorShift * 0.5}, 70%, 50%, 0.27),
581
+ hsla(${11 + colorShift * 0.5}, 97%, 72%, 0.27))`,
582
+ transform: `scale(${(1 + idleBreath1) * 1.26})`,
583
+ opacity: 0.18,
584
+ } })),
585
+ React.createElement("div", { style: {
586
+ ...orbSizeStyle,
587
+ position: 'relative',
588
+ borderRadius: '50%',
589
+ background: `linear-gradient(${gradientRotation + colorShift}deg,
590
+ hsl(${25 + colorShift}, 75%, 55%),
591
+ hsl(${11 + colorShift}, 97%, 72%),
592
+ hsl(${25 + colorShift}, 75%, 55%))`,
593
+ backgroundSize: '200% 200%',
594
+ transform: `scale(${pulseScale}) rotate(${gradientRotation * 0.1}deg)`,
595
+ boxShadow: isActive
596
+ ? '0 0 54px rgba(250,147,28,0.45), 0 0 90px rgba(253,139,116,0.27), inset 0 0 36px rgba(255,255,255,0.09)'
597
+ : `0 0 72px hsla(${25 + colorShift}, 60%, 50%, 0.36),
598
+ 0 0 108px hsla(${11 + colorShift}, 97%, 72%, 0.225),
599
+ inset 0 0 45px rgba(255,255,255,0.135)`,
600
+ transition: 'box-shadow 0.3s ease-out',
601
+ } },
602
+ React.createElement("div", { style: {
603
+ position: 'absolute',
604
+ inset: 0,
605
+ borderRadius: '50%',
606
+ background: `radial-gradient(circle at ${30 + Math.sin(baseTime * 0.2) * 5}% ${30 + Math.cos(baseTime * 0.2) * 5}%,
607
+ rgba(255,255,255,${isActive ? 0.36 : 0.315}), transparent 60%)`,
608
+ opacity: isActive ? 0.54 : 0.63,
609
+ transition: 'opacity 0.3s ease-out',
610
+ } }),
611
+ React.createElement("div", { style: {
612
+ position: 'absolute',
613
+ inset: 0,
614
+ borderRadius: '50%',
615
+ background: `linear-gradient(${45 + gradientRotation * 0.2}deg,
616
+ transparent 30%,
617
+ rgba(255,255,255,${isActive ? 0.45 : 0.225}) 50%,
618
+ transparent 70%)`,
619
+ animation: isActive ? 'shimmer 3s infinite' : 'shimmer 6s infinite',
620
+ opacity: isActive ? 0.27 : 0.18,
621
+ transition: 'opacity 0.3s ease-out',
622
+ } }),
623
+ !isActive && (React.createElement(React.Fragment, null,
624
+ React.createElement("div", { style: {
625
+ position: 'absolute',
626
+ borderRadius: '50%',
627
+ backgroundColor: 'white',
628
+ width: '8px',
629
+ height: '8px',
630
+ top: `${25 + Math.sin(baseTime * 0.5) * 15}%`,
631
+ left: `${35 + Math.cos(baseTime * 0.5) * 15}%`,
632
+ opacity: 0.36 + Math.sin(baseTime * 0.8) * 0.18,
633
+ filter: 'blur(2px)',
634
+ transform: `scale(${0.8 + Math.sin(baseTime * 1.2) * 0.36})`,
635
+ } }),
636
+ React.createElement("div", { style: {
637
+ position: 'absolute',
638
+ borderRadius: '50%',
639
+ backgroundColor: 'white',
640
+ width: '6px',
641
+ height: '6px',
642
+ top: `${60 + Math.sin(baseTime * 0.7 + 2) * 12}%`,
643
+ left: `${65 + Math.cos(baseTime * 0.7 + 2) * 12}%`,
644
+ opacity: 0.27 + Math.sin(baseTime * 0.9) * 0.135,
645
+ filter: 'blur(1.5px)',
646
+ transform: `scale(${0.7 + Math.sin(baseTime * 1.4) * 0.27})`,
647
+ } })))),
648
+ isActive && (React.createElement(React.Fragment, null,
649
+ React.createElement("div", { style: {
650
+ ...orbSizeStyle,
651
+ position: 'absolute',
652
+ borderRadius: '50%',
653
+ border: '2px solid #FA931C',
654
+ opacity: 0,
655
+ animation: 'ripple 2s infinite ease-in-out',
656
+ animationDelay: '0s',
657
+ } }),
658
+ React.createElement("div", { style: {
659
+ ...orbSizeStyle,
660
+ position: 'absolute',
661
+ borderRadius: '50%',
662
+ border: '2px solid #fd8b74',
663
+ opacity: 0,
664
+ animation: 'ripple 2s infinite ease-in-out',
665
+ animationDelay: '0.7s',
666
+ } }),
667
+ React.createElement("div", { style: {
668
+ ...orbSizeStyle,
669
+ position: 'absolute',
670
+ borderRadius: '50%',
671
+ border: '2px solid #FA931C',
672
+ opacity: 0,
673
+ animation: 'ripple 2s infinite ease-in-out',
674
+ animationDelay: '1.4s',
675
+ } }))),
676
+ !isActive && (React.createElement(React.Fragment, null,
677
+ React.createElement("div", { style: {
678
+ ...orbSizeStyle,
679
+ position: 'absolute',
680
+ borderRadius: '50%',
681
+ border: '1px solid #FA931C',
682
+ opacity: 0.135 + Math.sin(baseTime * 0.25) * 0.045,
683
+ transform: `scale(${1 + Math.sin(baseTime * 0.25) * 0.27})`,
684
+ animation: 'ripple 8s infinite ease-in-out',
685
+ animationDelay: '0s',
686
+ } }),
687
+ React.createElement("div", { style: {
688
+ ...orbSizeStyle,
689
+ position: 'absolute',
690
+ borderRadius: '50%',
691
+ border: '1px solid #fd8b74',
692
+ opacity: 0.09 + Math.sin(baseTime * 0.25 + 3) * 0.027,
693
+ transform: `scale(${1 + Math.sin(baseTime * 0.25 + 3) * 0.225})`,
694
+ animation: 'ripple 8s infinite ease-in-out',
695
+ animationDelay: '2.5s',
696
+ } })))));
697
+ }
698
+
434
699
  exports.CallButton = CallButton;
435
700
  exports.CallHistory = CallHistory;
436
701
  exports.CallStatus = CallStatus;
437
702
  exports.PamelaProvider = PamelaProvider;
438
703
  exports.TranscriptViewer = TranscriptViewer;
704
+ exports.VoiceOrb = VoiceOrb;
439
705
  exports.usePamela = usePamela;
440
706
  //# sourceMappingURL=index.js.map