@rqmii_immersive/agent-react-sdk 5.6.5 → 5.6.6

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 (45) hide show
  1. package/dist/Orb-B1DErA0O.cjs +4517 -0
  2. package/dist/Orb-B1DErA0O.cjs.map +1 -0
  3. package/dist/RqmiiAgentChat-C0ymqkkq.cjs +2 -0
  4. package/dist/RqmiiAgentChat-C0ymqkkq.cjs.map +1 -0
  5. package/dist/RqmiiCloudAvatarPlayer-CmovoCKk.cjs +2918 -0
  6. package/dist/RqmiiCloudAvatarPlayer-CmovoCKk.cjs.map +1 -0
  7. package/dist/RqmiiErrorBoundary-Byif85f5.cjs +2 -0
  8. package/dist/RqmiiErrorBoundary-Byif85f5.cjs.map +1 -0
  9. package/dist/embed/chunks/Orb-CBt2svdc.js +40903 -0
  10. package/dist/embed/chunks/Orb-CBt2svdc.js.map +1 -0
  11. package/dist/embed/chunks/RqmiiCloudAvatarPlayer-DpvI9bmI.js +3357 -0
  12. package/dist/embed/chunks/RqmiiCloudAvatarPlayer-DpvI9bmI.js.map +1 -0
  13. package/dist/embed/chunks/chat-box-avatar-DlUI3fDi.js +10 -0
  14. package/dist/embed/chunks/chat-box-avatar-DlUI3fDi.js.map +1 -0
  15. package/dist/embed/chunks/chat-box-text-and-voice-BgdFP0_P.js +112 -0
  16. package/dist/embed/chunks/chat-box-text-and-voice-BgdFP0_P.js.map +1 -0
  17. package/dist/embed/chunks/chat-box-voice-D0gPyOVt.js +74 -0
  18. package/dist/embed/chunks/chat-box-voice-D0gPyOVt.js.map +1 -0
  19. package/dist/embed/chunks/embed-core-B3d4u3wf.js +12623 -0
  20. package/dist/embed/chunks/embed-core-B3d4u3wf.js.map +1 -0
  21. package/dist/embed/chunks/highlighted-body-KPVGNVTW-CJl4AHHd.js +19 -0
  22. package/dist/embed/chunks/highlighted-body-KPVGNVTW-CJl4AHHd.js.map +1 -0
  23. package/dist/embed/chunks/mermaid-HWGCJPDP-DD9SRoUR.js +22773 -0
  24. package/dist/embed/chunks/mermaid-HWGCJPDP-DD9SRoUR.js.map +1 -0
  25. package/dist/embed/chunks/use-rqmii-vad-COqAsQsT.js +10225 -0
  26. package/dist/embed/chunks/use-rqmii-vad-COqAsQsT.js.map +1 -0
  27. package/dist/embed/core.js +6 -0
  28. package/dist/embed/core.js.map +1 -0
  29. package/dist/embed.js +2 -0
  30. package/dist/embed.js.map +1 -0
  31. package/dist/highlighted-body-KPVGNVTW-CSL27xRm.cjs +2 -0
  32. package/dist/highlighted-body-KPVGNVTW-CSL27xRm.cjs.map +1 -0
  33. package/dist/index.cjs +50 -0
  34. package/dist/index.cjs.map +1 -0
  35. package/dist/lazy.cjs +2 -0
  36. package/dist/lazy.cjs.map +1 -0
  37. package/dist/mermaid-HWGCJPDP-CssnmrD3.cjs +2 -0
  38. package/dist/mermaid-HWGCJPDP-CssnmrD3.cjs.map +1 -0
  39. package/dist/schedule-load-DbAlv7OH.cjs +2 -0
  40. package/dist/schedule-load-DbAlv7OH.cjs.map +1 -0
  41. package/dist/ui-1UzY5QCI.cjs +251 -0
  42. package/dist/ui-1UzY5QCI.cjs.map +1 -0
  43. package/dist/ui.cjs +2 -0
  44. package/dist/ui.cjs.map +1 -0
  45. package/package.json +1 -1
@@ -0,0 +1,6 @@
1
+ (function(){"use strict";try{if(typeof document<"u"){var i=document.createElement("style");i.appendChild(document.createTextNode(':root,.rqmii-chat-surface,.rqmii-chat-surface.rqmii-theme-dark,.rqmii-chat-surface[data-theme=dark]{--rqmii-bg: #1f1f1f;--rqmii-bg-soft: #2a2a2a;--rqmii-bg-hover: #2c2c2c;--rqmii-border: #3c3c3c;--rqmii-text: #ffffff;--rqmii-muted: #b4b4b4;--rqmii-placeholder: #8f8f8f;--rqmii-primary: #0b5cff;--rqmii-action: #0b5cff;--rqmii-accent: #0b5cff;--rqmii-accent-text: #ffffff;--rqmii-danger: #ef1717;--rqmii-end-call-bg: #ef1717;--rqmii-end-call-text: #ffffff;--rqmii-success: #12c976;--rqmii-message-user: #dfdfdf;--rqmii-message-user-text: #0a0a0a;--rqmii-message-agent: #2c2c2c;--rqmii-font-family: "Cairo", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--rqmii-shadow: 0 24px 64px rgba(0, 0, 0, .32);--rqmii-ended-border: #454545;--rqmii-scrollbar: #707070}.rqmii-chat-surface.rqmii-theme-light,.rqmii-chat-surface[data-theme=light]{--rqmii-bg: #ffffff;--rqmii-bg-soft: #f4f4f5;--rqmii-bg-hover: #ececec;--rqmii-border: #e4e4e7;--rqmii-text: #181818;--rqmii-muted: #676767;--rqmii-placeholder: #8f8f8f;--rqmii-primary: #0b5cff;--rqmii-action: #0b5cff;--rqmii-accent: #0b5cff;--rqmii-accent-text: #ffffff;--rqmii-danger: #ef1717;--rqmii-end-call-bg: #ef1717;--rqmii-end-call-text: #ffffff;--rqmii-success: #12c976;--rqmii-message-user: #181818;--rqmii-message-user-text: #ffffff;--rqmii-message-agent: #ececec;--rqmii-shadow: 0 24px 64px rgba(0, 0, 0, .12);--rqmii-ended-border: #d4d4d8;--rqmii-scrollbar: #d1d5db}@keyframes rqmii-chat-spin{to{transform:rotate(360deg)}}@property --rqmii-bubble-border-angle{syntax: "<angle>"; inherits: true; initial-value: 0turn;}@keyframes rqmii-bubble-spin{to{--rqmii-bubble-border-angle: 1turn}}@keyframes rqmii-typing{0%,80%,to{transform:scale(.8);opacity:.35}40%{transform:scale(1.15);opacity:1}}.rqmii-chat-surface{box-sizing:border-box;font-family:var(--rqmii-font-family);font-size:16px;font-weight:400;font-style:normal;line-height:1.5;letter-spacing:normal;word-spacing:normal;text-transform:none;text-decoration:none;text-indent:0;text-shadow:none;text-align:left;white-space:normal;word-break:normal;overflow-wrap:normal;color:var(--rqmii-text);background:transparent;direction:ltr;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}.rqmii-chat-surface *,.rqmii-chat-surface *:before,.rqmii-chat-surface *:after{box-sizing:border-box;font-family:inherit}.rqmii-chat-surface button,.rqmii-chat-surface textarea,.rqmii-chat-surface input,.rqmii-chat-surface select{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit;box-shadow:none}@media(max-width:767px),(hover:none)and (pointer:coarse){.rqmii-chat-surface textarea,.rqmii-chat-surface input,.rqmii-chat-surface select{font-size:16px}}@supports (-webkit-touch-callout: none){.rqmii-chat-surface textarea,.rqmii-chat-surface input,.rqmii-chat-surface select{font-size:16px}}.rqmii-chat-surface p,.rqmii-chat-surface h1,.rqmii-chat-surface h2,.rqmii-chat-surface h3,.rqmii-chat-surface h4,.rqmii-chat-surface h5,.rqmii-chat-surface h6,.rqmii-chat-surface ul,.rqmii-chat-surface ol,.rqmii-chat-surface li{margin:0;padding:0}.rqmii-chat-open-button{border:0;padding:0;border-radius:999px;background:transparent;cursor:pointer;transition:opacity .16s ease,transform .16s ease}.rqmii-chat-open-button:hover{transform:translateY(-1px)}.rqmii-chat-open-button.is-fixed{position:fixed;right:32px;bottom:32px;z-index:50}.rqmii-chat-welcome-bubble{--rqmii-bubble-border-angle: 0turn;position:fixed;bottom:100px;top:auto;z-index:50;width:-moz-fit-content;width:fit-content;max-width:280px;min-width:120px;padding:12px 14px;color:var(--rqmii-text);font-size:13px;line-height:1.6;font-weight:500;text-align:start;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;word-break:break-word;box-shadow:0 10px 15px -3px #0000004d;border:solid 2px transparent;border-radius:1rem;background:linear-gradient(var(--rqmii-bg),var(--rqmii-bg)) padding-box,conic-gradient(from var(--rqmii-bubble-border-angle),rgba(11,92,255,.08) 0%,rgba(11,92,255,.08) 60%,rgba(11,92,255,.7) 80%,rgba(11,92,255,.7) 85%,rgba(11,92,255,.08) 100%) border-box;animation:rqmii-bubble-spin 3s linear infinite}.rqmii-chat-welcome-bubble.is-right{left:auto;right:100px}.rqmii-chat-welcome-bubble.is-left{right:auto;left:100px}.rqmii-chat-welcome-bubble[dir=rtl]{font-weight:400;direction:rtl;text-align:right}.rqmii-chat-welcome-bubble[dir=ltr]{direction:ltr;text-align:left}@media(max-width:767px){.rqmii-chat-welcome-bubble{bottom:80px}.rqmii-chat-welcome-bubble.is-right{right:80px}.rqmii-chat-welcome-bubble.is-left{left:80px}}.rqmii-chat-topbar-actions--ended .rqmii-chat-circle-button{width:42px;height:42px}.rqmii-chat-topbar-actions--ended .rqmii-chat-pill{font-size:13px}.rqmii-chat-header .rqmii-chat-circle-button{width:42px;height:42px}.rqmii-chat-pill,.rqmii-chat-circle-button{border:0;color:var(--rqmii-text);background:var(--rqmii-bg-hover);cursor:pointer;transition:opacity .16s ease,background-color .16s ease,box-shadow .16s ease}.rqmii-chat-pill:hover,.rqmii-chat-circle-button:hover{opacity:.88}.rqmii-chat-pill{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 16px;border-radius:999px;font-size:15px}.rqmii-chat-circle-button{width:48px;height:48px;flex:none;display:inline-flex;align-items:center;justify-content:center;border-radius:999px}.rqmii-chat-circle-button.is-active{box-shadow:0 0 0 2px var(--rqmii-primary)}.rqmii-chat-circle-button.is-danger,.rqmii-chat-topbar-actions--ended .rqmii-chat-circle-button.is-danger,.rqmii-chat-topbar-actions .rqmii-chat-circle-button.is-danger{background:var(--rqmii-end-call-bg, var(--rqmii-danger));color:var(--rqmii-end-call-text, #fff)}.rqmii-chat-circle-button.is-danger svg{color:var(--rqmii-end-call-text, #fff);stroke:currentColor}.rqmii-chat-circle-button--call-start,.rqmii-chat-circle-button.rqmii-chat-circle-button--call-start,.rqmii-chat-topbar-actions--ended .rqmii-chat-circle-button--call-start,.rqmii-chat-topbar-actions .rqmii-chat-circle-button--call-start{background:var(--rqmii-accent, var(--rqmii-primary));color:var(--rqmii-accent-text, #fff)}.rqmii-chat-circle-button--call-start svg,.rqmii-chat-circle-button.rqmii-chat-circle-button--call-start svg,.rqmii-chat-topbar-actions--ended .rqmii-chat-circle-button--call-start svg,.rqmii-chat-topbar-actions .rqmii-chat-circle-button--call-start svg{color:var(--rqmii-accent-text, #fff);stroke:currentColor}.rqmii-chat-panel--feedback .rqmii-chat-circle-button{width:42px;height:42px}.rqmii-chat-call-status .rqmii-chat-circle-button{justify-self:end;width:40px;height:40px}.rqmii-chat-voice-actions .rqmii-chat-circle-button,.rqmii-chat-minimized .rqmii-chat-circle-button{width:44px;height:44px}.rqmii-chat-surface.is-preview .rqmii-chat-open-button.is-fixed{position:absolute;right:20px;bottom:20px;left:auto}.rqmii-chat-surface.is-preview.rqmii-position-left .rqmii-chat-open-button.is-fixed{left:20px;right:auto}.rqmii-chat-surface.is-preview .rqmii-chat-welcome-bubble{position:absolute;bottom:96px}.rqmii-chat-surface.is-preview.rqmii-position-left .rqmii-chat-welcome-bubble.is-left{left:20px;right:auto}.rqmii-chat-panel{width:min(100vw - 24px,350px);min-height:566px;max-height:min(620px,calc(100vh - 32px));display:flex;flex-direction:column;border:1px solid var(--rqmii-border);border-radius:10px;background:var(--rqmii-bg);box-shadow:var(--rqmii-shadow);overflow:hidden}.rqmii-chat-panel--conversation,.rqmii-chat-panel--start,.rqmii-chat-panel--voice-start{height:min(566px,calc(100vh - 32px))}.rqmii-chat-panel--voice-call{width:min(100vw - 24px,350px);height:min(566px,calc(100vh - 32px));padding:18px;justify-content:space-between}.rqmii-chat-panel--voice-call>.rqmii-chat-topbar{margin:-18px -18px 0;padding:16px 18px}.rqmii-chat-panel--error{min-height:120px;justify-content:center;align-items:center;gap:14px;padding:20px;text-align:center;color:var(--rqmii-muted);position:relative}.rqmii-chat-topbar,.rqmii-chat-header{display:flex;align-items:center;gap:8px;padding:16px}.rqmii-chat-topbar{justify-content:space-between}.rqmii-chat-topbar-actions{display:flex;align-items:center;gap:8px}.rqmii-chat-header-spacer{flex:1 1 0;min-width:0}.rqmii-chat-header-status{flex:0 0 112px;min-width:0;max-width:112px;height:42px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;padding:0 10px;border:1px solid var(--rqmii-border);border-radius:999px;color:var(--rqmii-text);background:transparent;font-size:10px;line-height:1.2;text-align:center}.rqmii-chat-header-status.is-expanded{flex:1 1 auto;max-width:none;padding:0 14px}.rqmii-chat-header-status span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rqmii-chat-header-actions{flex:none;display:inline-flex;align-items:center;gap:5px}.rqmii-chat-panel--feedback{height:min(566px,calc(100vh - 32px))}.rqmii-chat-panel--feedback .rqmii-chat-topbar{justify-content:space-between;direction:ltr}.rqmii-chat-language{position:relative}.rqmii-chat-language-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:4;width:176px;max-height:240px;padding:6px;overflow-y:auto;font-size:14px;border:1px solid var(--rqmii-border);border-radius:10px;background:var(--rqmii-bg-soft);scrollbar-width:thin;scrollbar-color:#707070 transparent}.rqmii-chat-language-item{width:100%;min-height:30px;padding:0 10px;border:0;border-radius:7px;font-size:14px;background:transparent;color:var(--rqmii-text);text-align:left;cursor:pointer}.rqmii-chat-language-item+.rqmii-chat-language-item{margin-top:2px}.rqmii-chat-language-item:hover,.rqmii-chat-language-item.is-selected{background:var(--rqmii-bg-hover)}.rqmii-chat-spin{animation:rqmii-chat-spin .9s linear infinite}.rqmii-chat-input{position:relative;flex:none;margin:0 16px;border:1px solid var(--rqmii-border);border-radius:16px;background:transparent;transition:border-color .16s ease}.rqmii-chat-input:focus-within{border-color:var(--rqmii-action)}.rqmii-chat-input textarea{width:100%;min-height:96px;max-height:168px;resize:none;display:block;padding:16px;border:0;outline:0;color:var(--rqmii-text);background:transparent;font-size:13px;line-height:1.5;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#707070 transparent}.rqmii-chat-input textarea::-webkit-scrollbar{width:6px}.rqmii-chat-input textarea::-webkit-scrollbar-track{background:transparent}.rqmii-chat-input textarea::-webkit-scrollbar-thumb{border-radius:999px;background:#707070}.rqmii-chat-input textarea[dir=rtl]{direction:rtl;text-align:right}.rqmii-chat-input textarea::-moz-placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-input textarea::placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-input button{position:absolute;right:8px;bottom:8px;z-index:1;width:40px;height:40px;display:grid;place-items:center;border:0;border-radius:999px;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-action));cursor:pointer}.rqmii-chat-input button svg{color:var(--rqmii-accent-text, #fff);stroke:currentColor}.rqmii-chat-input button:disabled{cursor:not-allowed;opacity:.45}.rqmii-chat-footer{flex:none;padding:14px 16px 16px;color:var(--rqmii-muted);text-align:center;font-size:10px;line-height:1.35}.rqmii-chat-footer p{margin:0}.rqmii-chat-footer p+p{margin-top:2px}.rqmii-chat-session-counter{margin:8px 0 14px;color:var(--rqmii-muted);text-align:center;font-size:14px;line-height:1;font-variant-numeric:tabular-nums}.rqmii-chat-minimized{height:76px;display:inline-flex;align-items:center;gap:16px;padding:8px 16px 8px 8px;border-radius:999px;color:var(--rqmii-text);background:var(--rqmii-bg);box-shadow:var(--rqmii-shadow)}.rqmii-chat-minimized-time{color:var(--rqmii-muted);font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}.rqmii-chat-minimized-actions{display:inline-flex;align-items:center;gap:8px}.rqmii-chat-surface:not(.is-preview).rqmii-position-left .rqmii-chat-open-button.is-fixed{right:auto;left:32px}.rqmii-chat-surface.rqmii-position-left:not(.is-preview) .rqmii-chat-panel,.rqmii-chat-surface.rqmii-position-left:not(.is-preview) .rqmii-chat-minimized,.rqmii-chat-surface.rqmii-position-left:not(.is-preview) .rqmii-avatar-panel{right:auto;left:32px}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel{position:fixed;right:32px;bottom:32px;z-index:50}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-minimized{position:fixed;right:32px;bottom:32px;z-index:50}.rqmii-chat-surface:not(.is-preview) .rqmii-avatar-panel{position:fixed;right:32px;bottom:32px;z-index:50}@media(max-width:767px){.rqmii-chat-surface.rqmii-position-left .rqmii-chat-open-button.is-fixed{right:auto;left:12px}.rqmii-chat-open-button.is-fixed{right:12px;bottom:12px}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-minimized{left:50%;right:auto;bottom:24px;transform:translate(-50%)}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel:not(.rqmii-chat-panel--consent),.rqmii-chat-surface:not(.is-preview) .rqmii-avatar-panel{inset:0!important;width:100%!important;height:100%!important;min-height:0!important;max-height:none!important;border:0!important;border-radius:0!important}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--conversation,.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--start,.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--voice-start,.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--voice-call{height:100%}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--consent{inset:auto 12px 12px auto!important;width:min(calc(100vw - 24px),350px)!important;max-width:calc(100vw - 24px)!important;min-height:200px!important;max-height:min(420px,calc(100vh - 24px))!important;height:auto!important;border:1px solid var(--rqmii-border)!important;border-radius:18px!important;box-shadow:var(--rqmii-shadow)!important}.rqmii-chat-surface.rqmii-position-left:not(.is-preview) .rqmii-chat-panel--consent{right:auto!important;left:12px!important}.rqmii-avatar-panel{flex-direction:column}.rqmii-avatar-sidebar{width:100%;height:45%;border-left:0;border-top:1px solid var(--rqmii-border)}.rqmii-chat-input textarea{font-size:16px;line-height:1.35;padding:12px 14px}}@media(hover:none)and (pointer:coarse){.rqmii-chat-input textarea{font-size:16px;line-height:1.35;padding:12px 14px}}@supports (-webkit-touch-callout: none){.rqmii-chat-input textarea{font-size:16px;line-height:1.35;padding:12px 14px}}.rqmii-chat-surface.is-preview .rqmii-chat-panel{margin:0 auto;width:350px;max-width:100%}.rqmii-chat-surface.is-preview .rqmii-chat-minimized{position:absolute;bottom:20px;left:50%;right:auto;transform:translate(-50%)}.rqmii-chat-panel--consent{width:min(calc(100vw - 64px),350px)!important;max-width:100%!important;min-height:200px!important;max-height:min(420px,calc(100vh - 32px))!important;height:auto!important;padding:18px!important;display:flex!important;flex-direction:column!important;justify-content:space-between!important;box-sizing:border-box!important;border-radius:18px!important;overflow:hidden}.rqmii-chat-surface:not(.is-preview) .rqmii-chat-panel--consent{position:fixed;inset:auto 32px 32px auto}.rqmii-chat-surface.rqmii-position-left:not(.is-preview) .rqmii-chat-panel--consent{right:auto;left:32px}.rqmii-chat-panel--consent[dir=rtl]{text-align:right;direction:rtl}.rqmii-chat-panel--consent[dir=ltr]{text-align:left;direction:ltr}.rqmii-chat-consent-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding-inline-end:4px;margin-bottom:12px;color:var(--rqmii-text);font-size:13px;line-height:1.75;letter-spacing:.015em;word-spacing:.08em}.rqmii-chat-consent-actions{display:flex;justify-content:flex-end;align-items:center;gap:10px;flex-shrink:0;padding-top:2px}.rqmii-chat-consent-button{height:38px;min-width:82px;padding:0 16px;border-radius:999px;font-size:13px;font-weight:500;cursor:pointer;transition:opacity .15s ease,transform .15s ease,background-color .15s ease;display:inline-flex;align-items:center;justify-content:center}.rqmii-chat-consent-button:active{transform:scale(.97)}.rqmii-chat-surface .rqmii-chat-consent-button--decline,.rqmii-chat-consent-button--decline{background-color:transparent!important;color:var(--rqmii-text, #ffffff)!important;border:1px solid var(--rqmii-border, #3c3c3c)!important}.rqmii-chat-surface .rqmii-chat-consent-button--decline:hover,.rqmii-chat-consent-button--decline:hover{background-color:var(--rqmii-bg-hover, rgba(255, 255, 255, .08))!important}.rqmii-chat-surface .rqmii-chat-consent-button--accept,.rqmii-chat-consent-button--accept{background-color:var(--rqmii-text, #ffffff)!important;color:var(--rqmii-bg, #121212)!important;border:1px solid transparent!important;font-weight:600!important}.rqmii-chat-surface .rqmii-chat-consent-button--accept:hover,.rqmii-chat-consent-button--accept:hover{opacity:.92}.rqmii-markdown{display:flex;flex-direction:column;gap:10px;word-break:break-word}.rqmii-markdown-p{margin:0;line-height:1.75;letter-spacing:.015em;word-spacing:.08em;color:var(--rqmii-text)}.rqmii-markdown-h1{font-size:15px;font-weight:700;margin:2px 0;color:var(--rqmii-text)}.rqmii-markdown-h2{font-size:14px;font-weight:600;margin:2px 0;color:var(--rqmii-text)}.rqmii-markdown-h3{font-size:13px;font-weight:600;margin:2px 0;color:var(--rqmii-text)}.rqmii-markdown-strong{font-weight:700;color:var(--rqmii-text)}.rqmii-markdown-em{font-style:italic}.rqmii-markdown-del{text-decoration:line-through;opacity:.7}.rqmii-markdown-code{background:var(--rqmii-border);padding:2px 6px;border-radius:4px;font-family:monospace;font-size:12px}.rqmii-markdown-blockquote{border-inline-start:3px solid var(--rqmii-border);padding-inline-start:10px;margin:0;color:var(--rqmii-muted)}.rqmii-markdown-ul,.rqmii-markdown-ol{padding-inline-start:18px;margin:0;display:flex;flex-direction:column;gap:4px}.rqmii-markdown-link{color:inherit;text-decoration:underline;text-underline-offset:3px;display:inline;transition:opacity .15s ease;font-weight:inherit;cursor:pointer}.rqmii-markdown-link:hover{opacity:.8}.rqmii-chat-messages{flex:1;min-height:0;padding:0 12px 12px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#707070 transparent}.rqmii-chat-messages::-webkit-scrollbar{width:6px}.rqmii-chat-messages::-webkit-scrollbar-track{background:transparent}.rqmii-chat-messages::-webkit-scrollbar-thumb{border-radius:999px;background:#707070}.rqmii-chat-message-row{display:flex;justify-content:flex-start;margin:0 0 8px}.rqmii-chat-message-row.is-user{justify-content:flex-end}.rqmii-chat-message{max-width:80%;padding:12px;border-radius:12px;color:var(--rqmii-text);background:var(--rqmii-message-agent);font-size:13px;line-height:1.4;text-align:start}.rqmii-chat-message[dir=rtl]{direction:rtl}.rqmii-chat-message-row.is-user .rqmii-chat-message{color:var(--rqmii-message-user-text, var(--rqmii-message-agent));background:var(--rqmii-message-user)}.rqmii-chat-message-row.is-partial .rqmii-chat-message{opacity:.6;font-style:italic}.rqmii-chat-typing-indicator{display:flex;align-items:center;gap:4px;padding:12px}.rqmii-chat-typing-dot{width:7px;height:7px;border-radius:50%;background:var(--rqmii-muted);opacity:.35;animation:rqmii-typing 1.2s ease-in-out infinite;will-change:transform,opacity}.rqmii-chat-typing-dot:nth-child(1){animation-delay:0s}.rqmii-chat-typing-dot:nth-child(2){animation-delay:.18s}.rqmii-chat-typing-dot:nth-child(3){animation-delay:.36s}.rqmii-suggested-messages{position:relative;width:100%}.rqmii-suggested-messages-inner{position:relative;display:flex;flex-wrap:wrap;align-content:flex-start;gap:6px;max-height:133px}@media(max-width:767px){.rqmii-suggested-messages-inner{max-height:177px}}.rqmii-suggested-messages-inner.is-collapsed{overflow:hidden}.rqmii-suggested-messages-inner.is-expanded{overflow-y:auto;scrollbar-width:thin;scrollbar-color:#707070 transparent}.rqmii-suggested-messages-inner.is-expanded::-webkit-scrollbar{width:4px}.rqmii-suggested-messages-inner.is-expanded::-webkit-scrollbar-track{background:transparent}.rqmii-suggested-messages-inner.is-expanded::-webkit-scrollbar-thumb{border-radius:999px;background:#707070}.rqmii-suggested-message{padding:6px 12px;border:1px solid var(--rqmii-border);border-radius:10px;background:var(--rqmii-bg-hover);color:var(--rqmii-text);line-height:1.4;font-size:14px;cursor:pointer;text-align:start;transition:border-color .16s ease,background-color .16s ease;word-break:break-word}.rqmii-suggested-message:hover{border-color:var(--rqmii-primary);background:#0b5cff14}.rqmii-suggested-messages-toggle{position:absolute;right:0;bottom:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--rqmii-border);border-radius:999px;background:var(--rqmii-bg-hover);color:var(--rqmii-muted);cursor:pointer;transition:border-color .16s ease;z-index:2;flex:none}.rqmii-suggested-messages-toggle.is-start-left{right:auto;left:0}.rqmii-suggested-messages-inner.is-expanded .rqmii-suggested-messages-toggle{bottom:auto}.rqmii-suggested-messages-toggle:hover{border-color:var(--rqmii-primary)}.rqmii-chat-message-row.rqmii-chat-lead-form-row{justify-content:stretch}.rqmii-chat-lead-form{width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:10px;padding:16px;border-radius:14px;background:var(--rqmii-bg);border:1px solid var(--rqmii-border)}.rqmii-chat-lead-form-title{color:var(--rqmii-text);font-size:15px;font-weight:600;margin-bottom:2px;text-align:start}.rqmii-chat-lead-form-input{width:100%;box-sizing:border-box;padding:12px 14px;border-radius:10px;border:1px solid var(--rqmii-border);background:transparent;color:var(--rqmii-text);font-size:13px;font-family:inherit;outline:none;transition:border-color .16s ease}.rqmii-chat-lead-form-input::-moz-placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-lead-form-input::placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-lead-form-input:focus{border-color:var(--rqmii-accent, var(--rqmii-primary))}.rqmii-chat-lead-form-textarea{resize:vertical;min-height:96px;line-height:1.4}@media(max-width:767px),(hover:none)and (pointer:coarse){.rqmii-chat-lead-form-input,.rqmii-chat-lead-form-textarea{font-size:16px}}@supports (-webkit-touch-callout: none){.rqmii-chat-lead-form-input,.rqmii-chat-lead-form-textarea{font-size:16px}}.rqmii-chat-lead-form-error{color:var(--rqmii-danger);font-size:12px}.rqmii-chat-surface .rqmii-chat-lead-form-submit,.rqmii-chat-lead-form-submit{margin-top:4px;padding:12px 16px;border:none;border-radius:999px;background:var(--rqmii-accent, var(--rqmii-action));color:var(--rqmii-accent-text, #fff);font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;transition:opacity .16s ease,filter .16s ease}.rqmii-chat-surface .rqmii-chat-lead-form-submit svg,.rqmii-chat-lead-form-submit svg{color:var(--rqmii-accent-text, #fff);stroke:currentColor}.rqmii-chat-surface .rqmii-chat-lead-form-submit:hover:not(:disabled),.rqmii-chat-lead-form-submit:hover:not(:disabled){filter:brightness(1.08)}.rqmii-chat-surface .rqmii-chat-lead-form-submit:disabled,.rqmii-chat-lead-form-submit:disabled{opacity:.6;cursor:default;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-action))}.rqmii-chat-lead-form--done{width:100%;box-sizing:border-box;padding:14px 16px;border-radius:14px;background:var(--rqmii-bg);border:1px solid var(--rqmii-border)}.rqmii-chat-lead-form-success{color:var(--rqmii-success);font-size:13px;text-align:center}@keyframes sd-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sd-blurIn{0%{opacity:0;filter:blur(4px)}to{opacity:1;filter:blur(0)}}@keyframes sd-slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes sd-markerIn{0%{color:transparent}}[data-sd-animate]{animation:var(--sd-animation, sd-fadeIn) var(--sd-duration, .15s) var(--sd-easing, ease) var(--sd-delay, 0ms) both}[data-sd-animate-marker]::marker{animation:sd-markerIn var(--sd-marker-duration, .15s) var(--sd-marker-easing, ease) var(--sd-marker-delay, 0ms) both}.rqmii-message-content--flat,.rqmii-chat-message.rqmii-message-content--flat{background:transparent!important;padding-left:0;padding-right:0}.rqmii-response{width:100%;word-break:break-word;overflow-wrap:break-word;color:inherit;font-size:13px;line-height:1.55}.rqmii-response p{margin:0 0 8px}.rqmii-response p:last-child{margin-bottom:0}.rqmii-response h1,.rqmii-response h2,.rqmii-response h3,.rqmii-response h4,.rqmii-response h5,.rqmii-response h6,.rqmii-response [data-streamdown^=heading-]{color:var(--rqmii-text);font-weight:600;margin:10px 0 4px;line-height:1.35}.rqmii-response h1:first-child,.rqmii-response h2:first-child,.rqmii-response h3:first-child,.rqmii-response h4:first-child,.rqmii-response h5:first-child,.rqmii-response h6:first-child,.rqmii-response [data-streamdown^=heading-]:first-child{margin-top:0}.rqmii-response h1,.rqmii-response [data-streamdown=heading-1]{font-size:15px;font-weight:700}.rqmii-response h2,.rqmii-response [data-streamdown=heading-2]{font-size:14px;font-weight:600}.rqmii-response h3,.rqmii-response [data-streamdown=heading-3]{font-size:13.5px;font-weight:600}.rqmii-response h4,.rqmii-response [data-streamdown=heading-4],.rqmii-response h5,.rqmii-response [data-streamdown=heading-5],.rqmii-response h6,.rqmii-response [data-streamdown=heading-6]{font-size:13px;font-weight:600}.rqmii-response strong,.rqmii-response b,.rqmii-response [data-streamdown=strong]{font-weight:700;color:var(--rqmii-text)}.rqmii-response em,.rqmii-response i,.rqmii-response [data-streamdown=em]{font-style:italic}.rqmii-response del,.rqmii-response s,.rqmii-response [data-streamdown=del]{text-decoration:line-through;opacity:.75}.rqmii-response a,.rqmii-response [data-streamdown=link]{color:#fff;text-decoration:underline;text-underline-offset:3px;transition:opacity .15s ease,color .15s ease,text-decoration-color .15s ease,filter .15s ease;font-weight:500;opacity:.92}.rqmii-response a:hover,.rqmii-response [data-streamdown=link]:hover{opacity:.8;color:#fff;text-decoration-color:#fff;filter:drop-shadow(0 0 6px rgba(255,255,255,.35))}.rqmii-theme-light .rqmii-response a,.rqmii-chat-surface[data-theme=light] .rqmii-response a,.rqmii-theme-light .rqmii-response [data-streamdown=link],.rqmii-chat-surface[data-theme=light] .rqmii-response [data-streamdown=link]{color:#111827;opacity:.95}.rqmii-theme-light .rqmii-response a:hover,.rqmii-chat-surface[data-theme=light] .rqmii-response a:hover,.rqmii-theme-light .rqmii-response [data-streamdown=link]:hover,.rqmii-chat-surface[data-theme=light] .rqmii-response [data-streamdown=link]:hover{color:#000;opacity:1;filter:none}.rqmii-response blockquote,.rqmii-response [data-streamdown=blockquote]{border-inline-start:3px solid rgba(255,255,255,.3);padding-inline-start:10px;margin:8px 0;color:var(--rqmii-muted);font-style:italic}.rqmii-theme-light .rqmii-response blockquote,.rqmii-chat-surface[data-theme=light] .rqmii-response blockquote,.rqmii-theme-light .rqmii-response [data-streamdown=blockquote],.rqmii-chat-surface[data-theme=light] .rqmii-response [data-streamdown=blockquote]{border-inline-start-color:#00000040}.rqmii-response ul,.rqmii-response ol,.rqmii-response [data-streamdown=unordered-list],.rqmii-response [data-streamdown=ordered-list]{margin:6px 0;padding-inline-start:20px;display:flex;flex-direction:column;gap:3px}.rqmii-response [data-streamdown=unordered-list]{list-style-type:disc}.rqmii-response [data-streamdown=ordered-list]{list-style-type:decimal}.rqmii-response li,.rqmii-response [data-streamdown=list-item]{line-height:1.5;display:list-item}.rqmii-response code,.rqmii-response [data-streamdown=inline-code]{background:var(--rqmii-bg-soft, rgba(125, 125, 125, .15));border:1px solid var(--rqmii-border, rgba(125, 125, 125, .2));color:var(--rqmii-text);padding:1.5px 5px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:12px}.rqmii-response pre,.rqmii-response [data-streamdown=code-block],.rqmii-response [data-streamdown=pre]{margin:8px 0;background:var(--rqmii-bg, #1f1f1f);border:1px solid var(--rqmii-border, #3c3c3c);border-radius:10px;padding:10px 12px;overflow-x:auto;scrollbar-width:thin;scrollbar-color:var(--rqmii-scrollbar) transparent}.rqmii-response pre::-webkit-scrollbar,.rqmii-response [data-streamdown=code-block]::-webkit-scrollbar{height:5px}.rqmii-response pre::-webkit-scrollbar-thumb,.rqmii-response [data-streamdown=code-block]::-webkit-scrollbar-thumb{background:var(--rqmii-scrollbar);border-radius:999px}.rqmii-response pre code,.rqmii-response [data-streamdown=code-block] code{background:transparent;border:none;padding:0;color:inherit;font-size:12px;line-height:1.45;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.rqmii-response table,.rqmii-response [data-streamdown=table],.rqmii-response [data-streamdown=table-wrapper]{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;margin:8px 0;border-radius:8px;border:1px solid var(--rqmii-border);scrollbar-width:thin;scrollbar-color:var(--rqmii-scrollbar) transparent}.rqmii-response table::-webkit-scrollbar,.rqmii-response [data-streamdown=table-wrapper]::-webkit-scrollbar{height:5px}.rqmii-response table::-webkit-scrollbar-thumb,.rqmii-response [data-streamdown=table-wrapper]::-webkit-scrollbar-thumb{background:var(--rqmii-scrollbar);border-radius:999px}.rqmii-response th,.rqmii-response [data-streamdown=table-cell-header],.rqmii-response td,.rqmii-response [data-streamdown=table-cell]{padding:6px 10px;border:1px solid var(--rqmii-border);text-align:start;font-size:12px}.rqmii-response th,.rqmii-response [data-streamdown=table-cell-header]{background:var(--rqmii-bg-soft);color:var(--rqmii-text);font-weight:600}.rqmii-response td,.rqmii-response [data-streamdown=table-cell]{background:transparent;color:var(--rqmii-text)}.rqmii-response tr:nth-child(2n) td{background:#7d7d7d0a}.rqmii-chat-message-row.is-user .rqmii-chat-message a,.rqmii-message--user .rqmii-chat-message a{color:inherit;text-decoration:underline;font-weight:600}.rqmii-chat-message-row.is-user .rqmii-chat-message code,.rqmii-message--user .rqmii-chat-message code{background:#fff3;border-color:#ffffff40;color:inherit}.rqmii-theme-light .rqmii-chat-message-row.is-user .rqmii-chat-message code,.rqmii-chat-surface[data-theme=light] .rqmii-chat-message-row.is-user .rqmii-chat-message code{background:#ffffff40;border-color:#ffffff59;color:#fff}.rqmii-chat-surface [data-sd-controls],.rqmii-response [data-sd-controls]{display:flex;align-items:center;gap:4px}.rqmii-chat-surface [data-sd-controls] button,.rqmii-response [data-sd-controls] button{background:var(--rqmii-bg-soft);border:1px solid var(--rqmii-border);color:var(--rqmii-text);border-radius:6px;padding:4px 8px;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}.rqmii-chat-surface [data-sd-controls] button:hover,.rqmii-response [data-sd-controls] button:hover{background:var(--rqmii-bg-hover);border-color:var(--rqmii-primary)}.rqmii-agent-avatar{position:relative;display:grid;place-items:center;overflow:hidden;flex:none;border-radius:999px;background:var(--rqmii-message-agent);box-shadow:inset 0 0 0 1px #ffffff24}.rqmii-agent-avatar.is-orb{background:transparent;box-shadow:none;overflow:visible}.rqmii-agent-avatar.is-active{box-shadow:0 0 0 2px var(--rqmii-primary),inset 0 0 0 1px #ffffff24}.rqmii-agent-avatar img{position:absolute;inset:0;width:100%;height:100%;display:block;-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}.rqmii-agent-avatar-orb{position:absolute;inset:-10%;width:120%;height:120%;display:block}.rqmii-agent-avatar-orb-placeholder{position:absolute;inset:0;display:block;border-radius:999px;background:radial-gradient(circle at 35% 30%,#9bdfdf,#2792dc 55%,#03307a)}.rqmii-agent-avatar--button{width:68px;height:68px;box-shadow:0 0 0 3px var(--rqmii-primary)}.rqmii-agent-avatar--header{width:42px;height:42px}.rqmii-agent-avatar--minimized{width:60px;height:60px}.rqmii-agent-avatar--hero{width:170px;height:170px}.rqmii-agent-avatar--start{width:130px;height:130px}.rqmii-orb{width:100%;height:100%;display:block;border-radius:999px;overflow:hidden}.rqmii-chat-feedback-body .rqmii-agent-avatar--hero{width:110px;height:110px}.rqmii-chat-panel--start-compact .rqmii-chat-start-body{padding-top:0;gap:12px}.rqmii-chat-panel--start-compact .rqmii-chat-call-avatar-wrap,.rqmii-chat-panel--start-compact .rqmii-chat-call-avatar-wrap.is-compact{margin-bottom:0}.rqmii-chat-panel--start-compact .rqmii-chat-call-button.is-compact{width:36px;height:36px;bottom:-14px;box-shadow:0 0 0 4px var(--rqmii-bg)}@media(max-width:767px){.rqmii-chat-panel--start-compact .rqmii-agent-avatar--start{width:170px;height:170px}.rqmii-chat-panel--start-compact .rqmii-chat-call-avatar-wrap,.rqmii-chat-panel--start-compact .rqmii-chat-call-avatar-wrap.is-compact{margin-bottom:8px}.rqmii-chat-panel--start-compact .rqmii-chat-call-button,.rqmii-chat-panel--start-compact .rqmii-chat-call-button.is-compact{width:50px;height:50px;bottom:-18px;box-shadow:0 0 0 6px var(--rqmii-bg)}.rqmii-chat-panel--start-compact .rqmii-chat-call-button.is-compact svg{width:24px;height:24px}}.rqmii-error-close{position:absolute;top:12px;right:12px;background:none;border:none;color:var(--rqmii-muted);font-size:24px;cursor:pointer;padding:8px;line-height:1;z-index:1}.rqmii-error-close:hover{color:var(--rqmii-text)}.rqmii-chat-rating{flex:none;width:calc(100% - 24px);margin:0 12px;box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:8px;padding:16px 12px 12px;text-align:center;border-top:2px dotted var(--rqmii-ended-border, #454545);min-height:112px}.rqmii-chat-rating--unrated{padding-left:12px;padding-right:12px}.rqmii-chat-rating-header{font-size:14px;font-weight:600;line-height:1.3;color:var(--rqmii-text)}.rqmii-chat-rating-stars{display:inline-flex;align-items:center;gap:3px;direction:ltr}.rqmii-chat-star{border:0;padding:2px;background:transparent;color:var(--rqmii-text);cursor:pointer;display:inline-flex;line-height:0;transition:transform .12s ease,color .12s ease}.rqmii-chat-star:not(.is-filled){color:#6b6b6b}.rqmii-chat-star:not(.is-readonly):hover{transform:scale(1.1)}.rqmii-chat-star.is-readonly{cursor:default}.rqmii-chat-rating-more{height:34px;padding:0 16px;border:1px solid var(--rqmii-border);border-radius:8px;background:transparent;color:var(--rqmii-text);cursor:pointer;font-size:13px;transition:background-color .16s ease}.rqmii-chat-rating-more:hover{background:var(--rqmii-bg-hover)}.rqmii-chat-rating-meta{display:flex;flex-direction:column;gap:4px;font-size:12px;line-height:1.4;color:var(--rqmii-muted)}.rqmii-chat-rating-meta div{overflow-wrap:anywhere;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rqmii-chat-feedback-body{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;gap:12px;padding:0 20px 12px;overflow:hidden}.rqmii-chat-feedback-title{font-size:14px;font-weight:600;color:var(--rqmii-text);text-align:center}.rqmii-chat-feedback-subtitle{font-size:12px;line-height:1.5;color:var(--rqmii-muted);text-align:center}.rqmii-chat-feedback-input{width:100%;min-height:110px;max-height:140px;resize:none;padding:12px;border:1px solid var(--rqmii-border);border-radius:12px;background:var(--rqmii-bg-soft);color:var(--rqmii-text);font-size:13px;line-height:1.5;outline:0;transition:border-color .16s ease;scrollbar-width:thin;scrollbar-color:#707070 transparent}.rqmii-chat-feedback-input:focus{border-color:var(--rqmii-action)}.rqmii-chat-feedback-input::-moz-placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-feedback-input::placeholder{color:var(--rqmii-placeholder, #8f8f8f)}.rqmii-chat-feedback-input[dir=rtl]{text-align:right}@media(max-width:767px),(hover:none)and (pointer:coarse){.rqmii-chat-feedback-input{font-size:16px;line-height:1.35;padding:10px 12px}}@supports (-webkit-touch-callout: none){.rqmii-chat-feedback-input{font-size:16px;line-height:1.35;padding:10px 12px}}.rqmii-chat-feedback-actions{width:100%;display:flex;justify-content:flex-end;direction:ltr}.rqmii-chat-surface .rqmii-chat-feedback-submit,.rqmii-chat-feedback-submit{min-width:90px;height:38px;padding:0 18px;border:0;border-radius:8px;background:var(--rqmii-accent, var(--rqmii-action));color:var(--rqmii-accent-text, #fff);font-size:13px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:opacity .16s ease}.rqmii-chat-surface .rqmii-chat-feedback-submit svg,.rqmii-chat-feedback-submit svg{color:var(--rqmii-accent-text, #fff);stroke:currentColor}.rqmii-chat-surface .rqmii-chat-feedback-submit:hover:not(:disabled),.rqmii-chat-feedback-submit:hover:not(:disabled){opacity:.9}.rqmii-chat-surface .rqmii-chat-feedback-submit:disabled,.rqmii-chat-feedback-submit:disabled{opacity:.45;cursor:not-allowed;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-action))}.rqmii-chat-start-body,.rqmii-chat-call-body{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:20px;padding:44px 24px 12px}.rqmii-chat-start-body{position:relative;z-index:1}.rqmii-chat-call-body{padding-top:74px}.rqmii-chat-call-avatar-wrap{position:relative;margin-bottom:8px}.rqmii-chat-agent-name{font-size:14px;line-height:1.4;color:var(--rqmii-text);margin-top:8px}.rqmii-chat-start-suggestions{flex:none;margin:0 16px 8px;z-index:2}.rqmii-chat-error-text{font-size:12px;line-height:1.4;color:#ef4444;text-align:center;padding:8px 12px;background:#ef44441a;border-radius:8px;max-width:260px;word-break:break-word}.rqmii-chat-surface .rqmii-chat-call-button,.rqmii-chat-call-button{position:absolute;left:50%;bottom:-18px;width:50px;height:50px;display:grid;place-items:center;border:0;border-radius:999px;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-action));transform:translate(-50%);cursor:pointer;box-shadow:0 0 0 6px var(--rqmii-bg)}.rqmii-chat-surface .rqmii-chat-call-button svg,.rqmii-chat-call-button svg{color:var(--rqmii-accent-text, #fff);stroke:currentColor}.rqmii-chat-call-button:disabled{cursor:not-allowed;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-action))}.rqmii-chat-call-status{height:34px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;color:var(--rqmii-muted);font-size:12px}.rqmii-chat-call-status.rqmii-chat-call-status--ended{display:flex;justify-content:flex-end}.rqmii-chat-call-status--ended .rqmii-chat-header-actions{display:inline-flex;align-items:center;gap:8px}.rqmii-chat-voice-frame{min-height:315px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:28px 18px}.rqmii-chat-voice-actions{display:flex;align-items:center;gap:10px}.rqmii-chat-retry{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 14px;border:0;border-radius:999px;color:var(--rqmii-accent-text, #fff);background:var(--rqmii-accent, var(--rqmii-primary));cursor:pointer}.rqmii-chat-live-dot{justify-self:end;width:8px;height:8px;border-radius:999px;background:var(--rqmii-success)}.rqmii-chat-status-pill{min-width:96px;min-height:34px;display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border:1px solid var(--rqmii-border);border-radius:999px;color:var(--rqmii-muted);text-align:center;font-size:12px}.rqmii-chat-status-pill.is-empty{visibility:hidden}.rqmii-avatar-panel{width:min(100vw - 24px,760px);height:min(560px,calc(100vh - 32px));display:flex;overflow:hidden;border:1px solid var(--rqmii-border);border-radius:16px;background:var(--rqmii-bg)}.rqmii-avatar-stream{position:relative;flex:1;min-width:0;background:#050505}.rqmii-avatar-overlay{position:absolute;inset:0;display:grid;place-items:center;background:#0000008c;color:var(--rqmii-muted)}.rqmii-avatar-controls{position:absolute;top:14px;left:14px;right:14px;display:flex;align-items:center;gap:8px}.rqmii-avatar-sidebar{width:300px;display:flex;flex-direction:column;border-left:1px solid var(--rqmii-border);padding-top:12px}.rqmii-chat-surface.is-preview{position:relative;width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:flex-start}.rqmii-chat-surface.is-preview .rqmii-chat-panel--consent{position:absolute;inset:auto 20px 20px auto}.rqmii-chat-surface.is-preview.rqmii-position-left .rqmii-chat-panel--consent{left:20px;right:auto}.pixel-streaming-container{position:relative;width:100%;height:100%;background-color:#000;overflow:hidden;margin:0;padding:0}.player-container{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:hidden}.pixel-streaming-container video,.player-container video,#videoElementParent,#videoElementParent video{width:100%!important;height:100%!important;-o-object-fit:cover;object-fit:cover}.freezeframeBackground{background-color:#00000080}.loading-overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:#000000b3;z-index:50}.loading-spinner{width:50px;height:50px;border:5px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:#fff;animation:spin 1s ease-in-out infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-text{color:#fff;margin-top:20px;font-size:18px}.connection-overlay{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:#000c;z-index:50}.error-message{color:#f55;margin-bottom:20px;font-size:16px;text-align:center;max-width:80%}.connect-button{padding:12px 24px;background-color:#2196f3;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;transition:background-color .3s}.connect-button:hover{background-color:#0b7dda}.playButton{padding:12px 24px;background-color:#2196f3;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;transition:background-color .3s}.playButton:hover{background-color:#0b7dda}.playButtonContainer{background-color:#000000b3}@media(max-width:768px){.pixel-streaming-container{position:fixed;inset:0;height:100vh;height:100dvh;width:100vw;width:100dvw}.player-container{touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pixel-streaming-container,.player-container{overscroll-behavior:none;-webkit-overflow-scrolling:touch}}')),document.head.appendChild(i)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
2
+ import { m as e } from "./chunks/embed-core-B3d4u3wf.js";
3
+ export {
4
+ e as mountEmbed
5
+ };
6
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
package/dist/embed.js ADDED
@@ -0,0 +1,2 @@
1
+ (function(){"use strict";const l=["immediate","load","idle","interaction"],c="idle",a=["pointerdown","pointermove","keydown","touchstart","scroll","wheel"];function m(e,r=c){const t=e?.trim().toLowerCase();return l.includes(t??"")?t:r}function s(e){return document.readyState==="complete"?(e(),()=>{}):(window.addEventListener("load",e,{once:!0}),()=>window.removeEventListener("load",e))}function w(e){if(typeof window.requestIdleCallback=="function"){const t=window.requestIdleCallback(e,{timeout:2e3});return()=>window.cancelIdleCallback(t)}const r=window.setTimeout(e,200);return()=>window.clearTimeout(r)}function E(e,r){let t=!1,n=()=>{};const i=()=>{t||(t=!0,n(),r())};switch(e){case"immediate":return i(),()=>{};case"load":n=s(i);break;case"interaction":{const d={passive:!0,capture:!0};a.forEach(o=>window.addEventListener(o,i,d)),n=()=>a.forEach(o=>window.removeEventListener(o,i,d));break}case"idle":default:{let d=()=>{},o=!1;const u=()=>{o||(o=!0,d=w(i))},A=s(u),T=window.setTimeout(u,8e3);n=()=>{A(),window.clearTimeout(T),d()};break}}return()=>{t=!0,n()}}const L="dist/embed/core.js";function f(e){const r=e.getAttribute("data-core-src");if(r)return new URL(r,document.baseURI).href;const t=new URL(e.src,document.baseURI);return/\.m?js$/i.test(t.pathname)?new URL("embed/core.js"+t.search,t.href).href:(t.pathname=`${t.pathname.replace(/\/+$/,"")}/${L}`,t.href)}function _(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function h(){const e=document.currentScript||document.getElementById("rqmii-agent-script");if(!e){console.error('[Rqmii] Could not find the embed script tag. Make sure it has id="rqmii-agent-script".');return}const r=m(e.getAttribute("data-load"),c);let t;try{t=f(e)}catch(n){console.error("[Rqmii] Could not resolve the widget bundle URL.",n);return}E(r,()=>{_(()=>{import(t).then(n=>n.mountEmbed(e)).catch(n=>{console.error(`[Rqmii] Failed to load the widget from ${t}.`,n)})})})}h()})();
2
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sources":["../src/core/utils/schedule-load.ts","../src/embed-loader.ts"],"sourcesContent":["/**\n * Deferred-loading helpers shared by the embed loader and the React `/lazy` entry.\n *\n * Strategies:\n * - `immediate`: run right away.\n * - `load`: run once the window `load` event has fired.\n * - `idle`: run when the browser is idle after `load` (default).\n * - `interaction`: run on the first user interaction (pointer, key, touch, scroll).\n * Crawlers never interact, so nothing is loaded for them.\n */\nexport type LoadStrategy = 'immediate' | 'load' | 'idle' | 'interaction';\n\nexport const LOAD_STRATEGIES: readonly LoadStrategy[] = ['immediate', 'load', 'idle', 'interaction'];\n\nexport const DEFAULT_LOAD_STRATEGY: LoadStrategy = 'idle';\n\n/** Upper bound for waiting on an idle period, so a busy page still gets the widget. */\nconst IDLE_TIMEOUT_MS = 2000;\n/** For `idle`: start waiting for an idle period at most this long after scheduling, even if `load` hasn't fired. */\nconst IDLE_MAX_WAIT_AFTER_START_MS = 8000;\n/** Fallback delay for browsers without requestIdleCallback (Safari). */\nconst IDLE_FALLBACK_DELAY_MS = 200;\n\nconst INTERACTION_EVENTS = ['pointerdown', 'pointermove', 'keydown', 'touchstart', 'scroll', 'wheel'] as const;\n\nexport function parseLoadStrategy(\n value: string | null | undefined,\n fallback: LoadStrategy = DEFAULT_LOAD_STRATEGY,\n): LoadStrategy {\n const normalized = value?.trim().toLowerCase();\n return (LOAD_STRATEGIES as readonly string[]).includes(normalized ?? '')\n ? (normalized as LoadStrategy)\n : fallback;\n}\n\nfunction whenWindowLoaded(callback: () => void): () => void {\n if (document.readyState === 'complete') {\n callback();\n return () => {};\n }\n window.addEventListener('load', callback, { once: true });\n return () => window.removeEventListener('load', callback);\n}\n\nfunction whenIdle(callback: () => void): () => void {\n if (typeof window.requestIdleCallback === 'function') {\n const handle = window.requestIdleCallback(callback, { timeout: IDLE_TIMEOUT_MS });\n return () => window.cancelIdleCallback(handle);\n }\n const handle = window.setTimeout(callback, IDLE_FALLBACK_DELAY_MS);\n return () => window.clearTimeout(handle);\n}\n\n/**\n * Schedules `run` according to `strategy`. `run` is called at most once.\n * Returns a function that cancels the pending run. Browser-only: call from\n * an effect or a client-side script, never during SSR.\n */\nexport function scheduleLoad(strategy: LoadStrategy, run: () => void): () => void {\n let done = false;\n let cancelPending: () => void = () => {};\n\n const runOnce = () => {\n if (done) return;\n done = true;\n cancelPending();\n run();\n };\n\n switch (strategy) {\n case 'immediate':\n runOnce();\n return () => {};\n\n case 'load':\n cancelPending = whenWindowLoaded(runOnce);\n break;\n\n case 'interaction': {\n const options: AddEventListenerOptions = { passive: true, capture: true };\n INTERACTION_EVENTS.forEach((name) => window.addEventListener(name, runOnce, options));\n cancelPending = () => INTERACTION_EVENTS.forEach((name) => window.removeEventListener(name, runOnce, options));\n break;\n }\n\n case 'idle':\n default: {\n let cancelIdle: () => void = () => {};\n let idleStarted = false;\n const startIdle = () => {\n if (idleStarted) return;\n idleStarted = true;\n cancelIdle = whenIdle(runOnce);\n };\n const cancelLoad = whenWindowLoaded(startIdle);\n // `load` can be delayed for a long time by slow third-party resources; don't let that\n // keep the widget away indefinitely.\n const maxWait = window.setTimeout(startIdle, IDLE_MAX_WAIT_AFTER_START_MS);\n cancelPending = () => {\n cancelLoad();\n window.clearTimeout(maxWait);\n cancelIdle();\n };\n break;\n }\n }\n\n return () => {\n done = true;\n cancelPending();\n };\n}\n","/**\n * Tiny embed loader (published as `dist/embed.js`).\n *\n * The widget itself (React, the chat UI, socket client, ...) lives in a separate,\n * code-split ES module (`dist/embed/core.js`). This loader only reads the script\n * tag's `data-*` attributes and fetches that module when it is actually needed, so\n * adding the snippet to a page costs ~1 KB instead of several hundred KB of\n * render-competing JavaScript. That keeps Core Web Vitals (and therefore SEO) intact.\n *\n * Attributes handled here:\n * - `data-load`: `idle` (default) | `load` | `interaction` | `immediate`\n * - `data-core-src`: override the URL of the core module (self-hosting / testing)\n */\nimport { DEFAULT_LOAD_STRATEGY, parseLoadStrategy, scheduleLoad } from './core/utils/schedule-load';\n\ntype EmbedCoreModule = { mountEmbed: (scriptTag: Element | null) => void };\n\nconst CORE_PATH_IN_PACKAGE = 'dist/embed/core.js';\n\nfunction resolveCoreUrl(script: HTMLScriptElement): string {\n const override = script.getAttribute('data-core-src');\n if (override) return new URL(override, document.baseURI).href;\n\n const url = new URL(script.src, document.baseURI);\n const isFile = /\\.m?js$/i.test(url.pathname);\n\n if (isFile) {\n // .../dist/embed.js -> .../dist/embed/core.js\n return new URL('embed/core.js' + url.search, url.href).href;\n }\n\n // Package URL as used with CDNs, e.g. https://unpkg.com/@rqmii_immersive/agent-react-sdk@5.7.0\n url.pathname = `${url.pathname.replace(/\\/+$/, '')}/${CORE_PATH_IN_PACKAGE}`;\n return url.href;\n}\n\nfunction whenBodyReady(callback: () => void): void {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback, { once: true });\n } else {\n callback();\n }\n}\n\nfunction start(): void {\n // Must be read synchronously: `document.currentScript` is null inside callbacks.\n const script = (document.currentScript || document.getElementById('rqmii-agent-script')) as HTMLScriptElement | null;\n if (!script) {\n console.error('[Rqmii] Could not find the embed script tag. Make sure it has id=\"rqmii-agent-script\".');\n return;\n }\n\n const strategy = parseLoadStrategy(script.getAttribute('data-load'), DEFAULT_LOAD_STRATEGY);\n\n let coreUrl: string;\n try {\n coreUrl = resolveCoreUrl(script);\n } catch (error) {\n console.error('[Rqmii] Could not resolve the widget bundle URL.', error);\n return;\n }\n\n scheduleLoad(strategy, () => {\n whenBodyReady(() => {\n import(/* @vite-ignore */ coreUrl)\n .then((core: EmbedCoreModule) => core.mountEmbed(script))\n .catch((error) => {\n console.error(`[Rqmii] Failed to load the widget from ${coreUrl}.`, error);\n });\n });\n });\n}\n\nstart();\n"],"names":["LOAD_STRATEGIES","DEFAULT_LOAD_STRATEGY","INTERACTION_EVENTS","parseLoadStrategy","value","fallback","normalized","whenWindowLoaded","callback","whenIdle","handle","scheduleLoad","strategy","run","done","cancelPending","runOnce","options","name","cancelIdle","idleStarted","startIdle","cancelLoad","maxWait","CORE_PATH_IN_PACKAGE","resolveCoreUrl","script","override","url","whenBodyReady","start","coreUrl","error","core"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./ui-1UzY5QCI.cjs"),s=require("react"),b=require("react/jsx-runtime");var f=({code:u,language:e,maxHeight:g,raw:t,className:o,startLine:c,lineNumbers:h,...m})=>{let{shikiTheme:l}=s.useContext(a.S),i=a.El(),[d,r]=s.useState(t);return s.useEffect(()=>{if(!i){r(t);return}let n=i.highlight({code:u,language:e,themes:l},x=>{r(x)});n&&r(n)},[u,e,l,i,t]),b.jsx(a.co,{className:o,language:e,lineNumbers:h,maxHeight:g,result:d,startLine:c,...m})};exports.HighlightedCodeBlockBody=f;
2
+ //# sourceMappingURL=highlighted-body-KPVGNVTW-CSL27xRm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlighted-body-KPVGNVTW-CSL27xRm.cjs","sources":["../node_modules/streamdown/dist/highlighted-body-KPVGNVTW.js"],"sourcesContent":["\"use client\";\nimport {A,f,c}from'./chunk-YOKDWASO.js';import {useContext,useState,useEffect}from'react';import {jsx}from'react/jsx-runtime';var x=({code:s,language:e,maxHeight:h,raw:t,className:m,startLine:d,lineNumbers:a,...c$1})=>{let{shikiTheme:l}=useContext(A),i=f(),[p,o]=useState(t);return useEffect(()=>{if(!i){o(t);return}let g=i.highlight({code:s,language:e,themes:l},H=>{o(H);});g&&o(g);},[s,e,l,i,t]),jsx(c,{className:m,language:e,lineNumbers:a,maxHeight:h,result:p,startLine:d,...c$1})};export{x as HighlightedCodeBlockBody};"],"names":["x","s","h","m","d","a","c$1","useContext","A","f","p","o","useState","useEffect","g","H","jsx","c"],"mappings":"uKACiI,IAACA,EAAE,CAAC,CAAC,KAAKC,EAAE,SAAS,EAAE,UAAUC,EAAE,IAAI,EAAE,UAAUC,EAAE,UAAUC,EAAE,YAAYC,EAAE,GAAGC,CAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAEC,EAAAA,WAAWC,EAAAA,CAAC,EAAE,EAAEC,EAAAA,GAAC,EAAG,CAACC,EAAEC,CAAC,EAAEC,EAAAA,SAAS,CAAC,EAAE,OAAOC,EAAAA,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,CAACF,EAAE,CAAC,EAAE,MAAM,CAAC,IAAIG,EAAE,EAAE,UAAU,CAAC,KAAKb,EAAE,SAAS,EAAE,OAAO,CAAC,EAAEc,GAAG,CAACJ,EAAEI,CAAC,CAAE,CAAC,EAAED,GAAGH,EAAEG,CAAC,CAAE,EAAE,CAACb,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAEe,EAAAA,IAAIC,EAAAA,GAAE,CAAC,UAAUd,EAAE,SAAS,EAAE,YAAYE,EAAE,UAAUH,EAAE,OAAOQ,EAAE,UAAUN,EAAE,GAAGE,CAAG,CAAC,CAAC","x_google_ignoreList":[0]}
package/dist/index.cjs ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./RqmiiErrorBoundary-Byif85f5.cjs"),p=require("./RqmiiCloudAvatarPlayer-CmovoCKk.cjs"),r=require("react");function M(){return n.useRqmiiAgentContext()}function O(){const t=n.useRqmiiAgentContext();return{sessionState:t.sessionState,isSessionTerminated:t.isSessionTerminated,isSessionTerminating:t.isSessionTerminating,isAgentThinking:t.isAgentThinking,isAgentSpeaking:t.isAgentSpeaking,isToolExecuting:t.isToolExecuting}}function D(t){const{attachAudioElement:s,resumeAudioPlayback:e}=n.useRqmiiAgentContext();r.useEffect(()=>{if(!t?.current)return;s(t.current);const o=()=>{e()},a=t.current;return a.addEventListener("click",o),a.addEventListener("touchstart",o),()=>{a.removeEventListener("click",o),a.removeEventListener("touchstart",o),s(null)}},[s,t,e])}class L{listeners=new Map;on(s,e){return this.listeners.has(s)||this.listeners.set(s,new Set),this.listeners.get(s).add(e),()=>this.off(s,e)}off(s,e){this.listeners.get(s)?.delete(e)}emit(s,e){const o=this.listeners.get(s);if(o)for(const a of o)try{a(e)}catch{}}removeAllListeners(){this.listeners.clear()}}const N={inputSampleRate:48e3,frameSizeMs:20},I=`
2
+ class PcmCaptureProcessor extends AudioWorkletProcessor {
3
+ constructor(options) {
4
+ super();
5
+ this._downsampleFactor = Math.round((options.processorOptions?.inputSampleRate || 48000) / 16000);
6
+ this._buffer = [];
7
+ this._frameSize = 128;
8
+ }
9
+
10
+ process(inputs) {
11
+ const input = inputs[0];
12
+ if (!input || !input[0]) return true;
13
+
14
+ const channelData = input[0];
15
+
16
+ for (let i = 0; i < channelData.length; i++) {
17
+ this._buffer.push(channelData[i]);
18
+ }
19
+
20
+ while (this._buffer.length >= this._frameSize * this._downsampleFactor) {
21
+ let outIdx = 0;
22
+ const downsampled = new Float32Array(this._frameSize);
23
+
24
+ for (let i = 0; i < this._frameSize; i++) {
25
+ const base = i * this._downsampleFactor;
26
+ let sum = 0;
27
+ for (let j = 0; j < this._downsampleFactor; j++) {
28
+ sum += this._buffer[base + j];
29
+ }
30
+ downsampled[outIdx++] = sum / this._downsampleFactor;
31
+ }
32
+
33
+ this._buffer.splice(0, this._frameSize * this._downsampleFactor);
34
+
35
+ const pcm = new Int16Array(this._frameSize);
36
+ for (let i = 0; i < this._frameSize; i++) {
37
+ const s = Math.max(-1, Math.min(1, downsampled[i]));
38
+ pcm[i] = s < 0 ? s * 0x8000 : s * 0x7fff;
39
+ }
40
+
41
+ this.port.postMessage(pcm.buffer, [pcm.buffer]);
42
+ }
43
+
44
+ return true;
45
+ }
46
+ }
47
+
48
+ registerProcessor('pcm-capture-processor', PcmCaptureProcessor);
49
+ `;class k{_state="idle";_ctx=null;_node=null;_stream=null;_events=new L;_options;supported;constructor(s){this._options={...N,...s},this.supported=typeof AudioWorkletNode<"u",this.supported||(this._state="unsupported")}get state(){return this._state}get events(){return this._events}async start(){if(!this.supported)return this._state="unsupported",!1;if(this._state==="capturing")return!0;this._state="requesting-mic";try{this._stream=await navigator.mediaDevices.getUserMedia({audio:!0})}catch(s){return this._state="error",this._events.emit("error",s),!1}try{this._ctx?.state==="suspended"&&await this._ctx.resume(),this._ctx=new AudioContext({sampleRate:this._options.inputSampleRate});const s=new Blob([I],{type:"application/javascript"}),e=URL.createObjectURL(s);await this._ctx.audioWorklet.addModule(e),URL.revokeObjectURL(e);const o=this._ctx.createMediaStreamSource(this._stream);return this._node=new AudioWorkletNode(this._ctx,"pcm-capture-processor",{processorOptions:{inputSampleRate:this._options.inputSampleRate,frameSize:this._options.inputSampleRate*this._options.frameSizeMs/1e3}}),this._node.port.onmessage=a=>{this._events.emit("audio_chunk",new Uint8Array(a.data))},o.connect(this._node),this._state="capturing",this._events.emit("state_changed",this._state),this._ctx.state==="suspended"&&await this._ctx.resume(),!0}catch(s){return this._state="error",this._events.emit("error",s),this._stream&&(this._stream.getTracks().forEach(e=>e.stop()),this._stream=null),!1}}stop(){this._node&&(this._node.disconnect(),this._node=null),this._stream&&(this._stream.getTracks().forEach(s=>s.stop()),this._stream=null),this._ctx&&this._ctx.state!=="closed"&&(this._ctx.close(),this._ctx=null),this._state="idle",this._events.emit("state_changed",this._state)}async resume(){this._ctx?.state==="suspended"&&(await this._ctx.resume(),this._state="capturing",this._events.emit("state_changed",this._state))}async pause(){this._ctx?.state==="running"&&(await this._ctx.suspend(),this._state="suspended",this._events.emit("state_changed",this._state))}destroy(){this.events.removeAllListeners(),this.stop()}}function U(t={}){const{onAudioChunk:s,onAudioEnd:e,onError:o,holdDelayMs:a=220,interruptOnHoldStart:E=!0}=t,{sendAudioChunk:R,endAudioStream:m,interrupt:T}=n.useRqmiiAgentContext(),c=r.useRef(null),u=r.useRef(null),[x,v]=r.useState(!1),[q,g]=r.useState(!1),[y,f]=r.useState(null),h=r.useCallback(async()=>{if(c.current)return!0;const i=new k;if(c.current=i,!i.supported){const l=new Error("AudioWorklet not supported in this browser");return f(l.message),o?.(l),!1}return i.events.on("audio_chunk",l=>{s?s(l):R(l)}),i.events.on("error",l=>{o?.(l)}),await i.start()?(g(!0),f(null),!0):(f("Failed to start capture"),c.current=null,!1)},[s,o,R]),_=r.useCallback(()=>{const i=c.current;return i?(c.current=null,i.stop(),i.destroy(),g(!1),!0):!1},[]),C=r.useCallback(()=>{const i=c.current;i&&(c.current=null,i.stop(),i.destroy(),g(!1))},[]),P=r.useCallback(async()=>h(),[h]),w=r.useCallback(({discard:i=!1}={})=>{const A=_();return!i&&A&&(e?e():m()),A},[m,e,_]),S=r.useCallback(()=>{u.current&&(clearTimeout(u.current),u.current=null),v(!0),u.current=setTimeout(()=>{E&&T(),h()},a)},[a,T,E,h]),d=r.useCallback(()=>{v(!1),u.current&&(clearTimeout(u.current),u.current=null),_()&&(e?e():m())},[m,e,_]);r.useEffect(()=>()=>{u.current&&(clearTimeout(u.current),u.current=null),C()},[C]);const b=r.useMemo(()=>({onPointerDown:i=>{i.preventDefault(),S()},onPointerUp:i=>{i.preventDefault(),d()},onPointerCancel:i=>{i.preventDefault(),d()},onPointerLeave:i=>{i.preventDefault(),d()}}),[S,d]);return{isPressing:x,isRecording:q,micError:y,startRecording:P,stopRecording:w,startPress:S,stopPress:d,eventHandlers:b}}function z(){const t=n.useRqmiiAgentContext(),s=t.events;return{state:{messages:t.messages,connectionState:t.connectionState,isConnected:t.isConnected,isSessionReady:t.isSessionReady,isAudioPlaying:t.isAudioPlaying,isAgentThinking:t.isAgentThinking,isAgentSpeaking:t.isAgentSpeaking,isToolExecuting:t.isToolExecuting,isSessionTerminated:t.isSessionTerminated,isSessionTerminating:t.isSessionTerminating,creditExhausted:t.creditExhausted,creditError:t.creditError,error:t.error,transcript:t.transcript,partialTranscript:t.partialTranscript,session:t.session,sessionState:t.sessionState},actions:{sendTextMessage:t.sendTextMessage,sendAudioChunk:t.sendAudioChunk,endAudioStream:t.endAudioStream,interrupt:t.interrupt,clearSessionHistory:t.clearSessionHistory,clearMessages:t.clearMessages,changeSessionLanguage:t.changeSessionLanguage,signalClientReady:t.signalClientReady,initializeSession:t.initializeSession,joinDesktopSession:t.joinDesktopSession,disconnect:t.disconnect,terminateSession:t.terminateSession,resumeAudioPlayback:t.resumeAudioPlayback,pauseAudioPlayback:t.pauseAudioPlayback,attachAudioElement:t.attachAudioElement},events:{onSessionReady:e=>s.on("session:ready",e),onSessionJoined:e=>s.on("session:joined",e),onSessionTerminated:e=>s.on("session:terminated",e),onSessionExpired:e=>s.on("session:expired",e),onMessageReceived:e=>s.on("message:received",e),onMessageSent:e=>s.on("message:sent",e),onAudioPlaying:e=>s.on("audio:playing",e),onAudioStopped:e=>s.on("audio:stopped",e),onAvatarSpeaking:e=>s.on("avatar:speaking",e),onAvatarSpeakingDone:e=>s.on("avatar:speaking_done",e),onStateChanged:e=>s.on("state:changed",e),onConnected:e=>s.on("connection:connected",e),onDisconnected:e=>s.on("connection:disconnected",e),onConnectionFailed:e=>s.on("connection:failed",e),onError:e=>s.on("error",e),onCreditsExhausted:e=>s.on("credits:exhausted",e),onTranscript:e=>s.on("transcript",e),onPartialTranscript:e=>s.on("partial_transcript",e),onInterrupted:e=>s.on("interrupted",e)},raw:{socket:t.socket,audioElement:t.audioElement}}}n.suppressNoisyLogs();exports.AGENT_TYPES=n.AGENT_TYPES;exports.CLOUD_STREAM_STATE=n.CLOUD_STREAM_STATE;exports.CONNECTION_STATE=n.CONNECTION_STATE;exports.DEFAULT_PCM_OPTIONS=n.DEFAULT_PCM_OPTIONS;exports.EventEmitter=n.EventEmitter;exports.RqmiiAgentProvider=n.RqmiiAgentProvider;exports.RqmiiAgentRoom=n.RqmiiAgentRoom;exports.RqmiiErrorBoundary=n.RqmiiErrorBoundary;exports.SESSION_STATE=n.SESSION_STATE;exports.SOCKET_EVENTS=n.SOCKET_EVENTS;exports.useRqmiiAgentContext=n.useRqmiiAgentContext;exports.useRqmiiConnection=n.useRqmiiConnection;exports.useRqmiiMessages=n.useRqmiiMessages;exports.RqmiiCloudAvatarPlayer=p.RqmiiCloudAvatarPlayer;exports.useRqmiiAvatar=p.useRqmiiAvatar;exports.useRqmiiEvents=p.useRqmiiEvents;exports.useRqmiiVAD=p.useRqmiiVAD;exports.useRqmiiVoice=p.useRqmiiVoice;exports.AudioCapture=k;exports.useRqmiiAgent=M;exports.useRqmiiAudioElement=D;exports.useRqmiiPressToTalk=U;exports.useRqmiiSDK=z;exports.useRqmiiSession=O;
50
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/hooks/use-rqmii-agent.ts","../src/hooks/use-rqmii-session.ts","../src/hooks/use-rqmii-audio-element.ts","../src/capture/capture.ts","../src/hooks/use-rqmii-press-to-talk.ts","../src/hooks/use-rqmii-sdk.ts","../src/index.ts"],"sourcesContent":["import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAgent() {\n return useRqmiiAgentContext();\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiSession() {\n const ctx = useRqmiiAgentContext();\n return {\n sessionState: ctx.sessionState,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n };\n}\n","import { useEffect } from 'react';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAudioElement(audioRef: React.RefObject<HTMLAudioElement | null>) {\n const { attachAudioElement, resumeAudioPlayback } = useRqmiiAgentContext();\n\n useEffect(() => {\n if (!audioRef?.current) return undefined;\n\n attachAudioElement(audioRef.current);\n const unlock = () => {\n void resumeAudioPlayback();\n };\n\n const node = audioRef.current;\n node.addEventListener('click', unlock);\n node.addEventListener('touchstart', unlock);\n\n return () => {\n node.removeEventListener('click', unlock);\n node.removeEventListener('touchstart', unlock);\n attachAudioElement(null);\n };\n }, [attachAudioElement, audioRef, resumeAudioPlayback]);\n}\n","export type AudioCaptureState = 'idle' | 'requesting-mic' | 'capturing' | 'unsupported' | 'suspended' | 'error';\n\nexport interface CaptureOptions {\n inputSampleRate?: number;\n frameSizeMs?: number;\n}\n\ntype CaptureHandler = (...args: unknown[]) => void;\n\nclass CaptureEventEmitter {\n private listeners = new Map<string, Set<CaptureHandler>>();\n\n on(event: string, handler: CaptureHandler): () => void {\n if (!this.listeners.has(event)) {\n this.listeners.set(event, new Set());\n }\n this.listeners.get(event)!.add(handler);\n return () => this.off(event, handler);\n }\n\n off(event: string, handler: CaptureHandler): void {\n this.listeners.get(event)?.delete(handler);\n }\n\n emit(event: string, payload?: unknown): void {\n const handlers = this.listeners.get(event);\n if (!handlers) return;\n for (const handler of handlers) {\n try { handler(payload); } catch { /* silence */ }\n }\n }\n\n removeAllListeners(): void {\n this.listeners.clear();\n }\n}\n\nconst DEFAULT_OPTIONS: Required<CaptureOptions> = {\n inputSampleRate: 48000,\n frameSizeMs: 20,\n};\n\nconst PCM_PROCESSOR_CODE = `\nclass PcmCaptureProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super();\n this._downsampleFactor = Math.round((options.processorOptions?.inputSampleRate || 48000) / 16000);\n this._buffer = [];\n this._frameSize = 128;\n }\n\n process(inputs) {\n const input = inputs[0];\n if (!input || !input[0]) return true;\n\n const channelData = input[0];\n\n for (let i = 0; i < channelData.length; i++) {\n this._buffer.push(channelData[i]);\n }\n\n while (this._buffer.length >= this._frameSize * this._downsampleFactor) {\n let outIdx = 0;\n const downsampled = new Float32Array(this._frameSize);\n\n for (let i = 0; i < this._frameSize; i++) {\n const base = i * this._downsampleFactor;\n let sum = 0;\n for (let j = 0; j < this._downsampleFactor; j++) {\n sum += this._buffer[base + j];\n }\n downsampled[outIdx++] = sum / this._downsampleFactor;\n }\n\n this._buffer.splice(0, this._frameSize * this._downsampleFactor);\n\n const pcm = new Int16Array(this._frameSize);\n for (let i = 0; i < this._frameSize; i++) {\n const s = Math.max(-1, Math.min(1, downsampled[i]));\n pcm[i] = s < 0 ? s * 0x8000 : s * 0x7fff;\n }\n\n this.port.postMessage(pcm.buffer, [pcm.buffer]);\n }\n\n return true;\n }\n}\n\nregisterProcessor('pcm-capture-processor', PcmCaptureProcessor);\n`;\n\nexport class AudioCapture {\n private _state: AudioCaptureState = 'idle';\n private _ctx: AudioContext | null = null;\n private _node: AudioWorkletNode | null = null;\n private _stream: MediaStream | null = null;\n private _events = new CaptureEventEmitter();\n private _options: Required<CaptureOptions>;\n\n readonly supported: boolean;\n\n constructor(options?: CaptureOptions) {\n this._options = { ...DEFAULT_OPTIONS, ...options };\n this.supported = typeof AudioWorkletNode !== 'undefined';\n if (!this.supported) {\n this._state = 'unsupported';\n }\n }\n\n get state(): AudioCaptureState {\n return this._state;\n }\n\n get events(): CaptureEventEmitter {\n return this._events;\n }\n\n async start(): Promise<boolean> {\n if (!this.supported) {\n this._state = 'unsupported';\n return false;\n }\n\n if (this._state === 'capturing') return true;\n\n this._state = 'requesting-mic';\n\n try {\n this._stream = await navigator.mediaDevices.getUserMedia({ audio: true });\n } catch (err) {\n this._state = 'error';\n this._events.emit('error', err);\n return false;\n }\n\n try {\n if (this._ctx?.state === 'suspended') {\n await this._ctx.resume();\n }\n\n this._ctx = new AudioContext({ sampleRate: this._options.inputSampleRate });\n\n const blob = new Blob([PCM_PROCESSOR_CODE], { type: 'application/javascript' });\n const processorUrl = URL.createObjectURL(blob);\n await this._ctx.audioWorklet.addModule(processorUrl);\n URL.revokeObjectURL(processorUrl);\n\n const source = this._ctx.createMediaStreamSource(this._stream);\n\n this._node = new AudioWorkletNode(this._ctx, 'pcm-capture-processor', {\n processorOptions: {\n inputSampleRate: this._options.inputSampleRate,\n frameSize: (this._options.inputSampleRate * this._options.frameSizeMs) / 1000,\n },\n });\n\n this._node.port.onmessage = (ev: MessageEvent<ArrayBuffer>) => {\n this._events.emit('audio_chunk', new Uint8Array(ev.data));\n };\n\n source.connect(this._node);\n\n this._state = 'capturing';\n this._events.emit('state_changed', this._state);\n\n if (this._ctx.state === 'suspended') {\n await this._ctx.resume();\n }\n\n return true;\n } catch (err) {\n this._state = 'error';\n this._events.emit('error', err);\n\n if (this._stream) {\n this._stream.getTracks().forEach((t) => t.stop());\n this._stream = null;\n }\n\n return false;\n }\n }\n\n stop(): void {\n if (this._node) {\n this._node.disconnect();\n this._node = null;\n }\n\n if (this._stream) {\n this._stream.getTracks().forEach((t) => t.stop());\n this._stream = null;\n }\n\n if (this._ctx && this._ctx.state !== 'closed') {\n this._ctx.close();\n this._ctx = null;\n }\n\n this._state = 'idle';\n this._events.emit('state_changed', this._state);\n }\n\n async resume(): Promise<void> {\n if (this._ctx?.state === 'suspended') {\n await this._ctx.resume();\n this._state = 'capturing';\n this._events.emit('state_changed', this._state);\n }\n }\n\n async pause(): Promise<void> {\n if (this._ctx?.state === 'running') {\n await this._ctx.suspend();\n this._state = 'suspended';\n this._events.emit('state_changed', this._state);\n }\n }\n\n destroy(): void {\n this.events.removeAllListeners();\n this.stop();\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { AudioCapture } from '../capture/capture';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { UseRqmiiPressToTalkOptions, UseRqmiiPressToTalkReturn } from '../types';\n\nconst DEFAULT_AUDIO_CONSTRAINTS: MediaTrackConstraints = {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 16000,\n};\n\nexport function useRqmiiPressToTalk(options: UseRqmiiPressToTalkOptions = {}): UseRqmiiPressToTalkReturn {\n const {\n onAudioChunk,\n onAudioEnd,\n onError,\n holdDelayMs = 220,\n interruptOnHoldStart = true,\n } = options;\n\n const { sendAudioChunk, endAudioStream, interrupt } = useRqmiiAgentContext();\n\n const captureRef = useRef<AudioCapture | null>(null);\n const holdTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const [isPressing, setIsPressing] = useState(false);\n const [isRecording, setIsRecording] = useState(false);\n const [micError, setMicError] = useState<string | null>(null);\n\n const startPcmCapture = useCallback(async (): Promise<boolean> => {\n if (captureRef.current) return true;\n\n const capture = new AudioCapture();\n captureRef.current = capture;\n\n if (!capture.supported) {\n const err = new Error('AudioWorklet not supported in this browser');\n setMicError(err.message);\n onError?.(err);\n return false;\n }\n\n capture.events.on('audio_chunk', (chunk: unknown) => {\n if (onAudioChunk) onAudioChunk(chunk as Uint8Array);\n else sendAudioChunk(chunk);\n });\n\n capture.events.on('error', (err: unknown) => {\n onError?.(err);\n });\n\n const ok = await capture.start();\n if (!ok) {\n setMicError('Failed to start capture');\n captureRef.current = null;\n return false;\n }\n\n setIsRecording(true);\n setMicError(null);\n return true;\n }, [onAudioChunk, onError, sendAudioChunk]);\n\n const stopPcmCapture = useCallback((): boolean => {\n const capture = captureRef.current;\n if (!capture) return false;\n\n captureRef.current = null;\n capture.stop();\n capture.destroy();\n setIsRecording(false);\n return true;\n }, []);\n\n const cleanup = useCallback(() => {\n const capture = captureRef.current;\n if (!capture) return;\n captureRef.current = null;\n capture.stop();\n capture.destroy();\n setIsRecording(false);\n }, []);\n\n const startRecording = useCallback(async (): Promise<boolean> => {\n return startPcmCapture();\n }, [startPcmCapture]);\n\n const stopRecording = useCallback(\n ({ discard = false }: { discard?: boolean } = {}): boolean => {\n const ok = stopPcmCapture();\n if (!discard && ok) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n return ok;\n },\n [endAudioStream, onAudioEnd, stopPcmCapture],\n );\n\n const startPress = useCallback(() => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n\n setIsPressing(true);\n\n holdTimerRef.current = setTimeout(() => {\n if (interruptOnHoldStart) {\n interrupt();\n }\n void startPcmCapture();\n }, holdDelayMs);\n }, [holdDelayMs, interrupt, interruptOnHoldStart, startPcmCapture]);\n\n const stopPress = useCallback(() => {\n setIsPressing(false);\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n\n const ok = stopPcmCapture();\n if (ok) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n }, [endAudioStream, onAudioEnd, stopPcmCapture]);\n\n useEffect(() => {\n return () => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n cleanup();\n };\n }, [cleanup]);\n\n const eventHandlers = useMemo(\n () => ({\n onPointerDown: (e: React.PointerEvent) => {\n e.preventDefault();\n startPress();\n },\n onPointerUp: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerCancel: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n }),\n [startPress, stopPress],\n );\n\n return {\n isPressing,\n isRecording,\n micError,\n startRecording,\n stopRecording,\n startPress,\n stopPress,\n eventHandlers,\n };\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { EventHandlerMap, RqmiiMessage, RqmiiState, TranscriptPayload, PartialTranscriptPayload, SessionData } from '../types';\n\ntype Listener<T> = (handler: T) => () => void;\n\nexport interface RqmiiEventListeners {\n onSessionReady: Listener<EventHandlerMap['session:ready']>;\n onSessionJoined: Listener<EventHandlerMap['session:joined']>;\n onSessionTerminated: Listener<EventHandlerMap['session:terminated']>;\n onSessionExpired: Listener<EventHandlerMap['session:expired']>;\n onMessageReceived: Listener<EventHandlerMap['message:received']>;\n onMessageSent: Listener<EventHandlerMap['message:sent']>;\n onAudioPlaying: Listener<EventHandlerMap['audio:playing']>;\n onAudioStopped: Listener<EventHandlerMap['audio:stopped']>;\n onAvatarSpeaking: Listener<EventHandlerMap['avatar:speaking']>;\n onAvatarSpeakingDone: Listener<EventHandlerMap['avatar:speaking_done']>;\n onStateChanged: Listener<EventHandlerMap['state:changed']>;\n onConnected: Listener<EventHandlerMap['connection:connected']>;\n onDisconnected: Listener<EventHandlerMap['connection:disconnected']>;\n onConnectionFailed: Listener<EventHandlerMap['connection:failed']>;\n onError: Listener<EventHandlerMap['error']>;\n onCreditsExhausted: Listener<EventHandlerMap['credits:exhausted']>;\n onTranscript: Listener<EventHandlerMap['transcript']>;\n onPartialTranscript: Listener<EventHandlerMap['partial_transcript']>;\n onInterrupted: Listener<EventHandlerMap['interrupted']>;\n}\n\nexport interface RqmiiSDKHandle {\n state: {\n messages: RqmiiMessage[];\n connectionState: RqmiiState['connectionState'];\n isConnected: boolean;\n isSessionReady: boolean;\n isAudioPlaying: boolean;\n isAgentThinking: boolean;\n isAgentSpeaking: boolean;\n isToolExecuting: boolean;\n isSessionTerminated: boolean;\n isSessionTerminating: boolean;\n creditExhausted: boolean;\n creditError: string | null;\n error: string | null;\n transcript: TranscriptPayload | null;\n partialTranscript: PartialTranscriptPayload | null;\n session: RqmiiState['session'];\n sessionState: RqmiiState['sessionState'];\n };\n actions: {\n sendTextMessage: (text: string) => boolean;\n sendAudioChunk: (audio: unknown) => boolean;\n endAudioStream: () => boolean;\n interrupt: () => boolean;\n clearSessionHistory: () => boolean;\n clearMessages: () => void;\n changeSessionLanguage: (language: string) => boolean;\n signalClientReady: (payload?: Record<string, unknown>) => boolean;\n initializeSession: (opts?: { apiKey?: string; agentId?: string; language?: string }) => Promise<SessionData>;\n joinDesktopSession: (opts: { uniqueId: string; language?: string }) => Promise<SessionData>;\n disconnect: () => void;\n terminateSession: () => Promise<{ success: boolean }>;\n resumeAudioPlayback: () => void;\n pauseAudioPlayback: () => void;\n attachAudioElement: (el: HTMLAudioElement | null) => void;\n };\n events: RqmiiEventListeners;\n raw: {\n socket: ReturnType<typeof import('socket.io-client').io> | null;\n audioElement: HTMLAudioElement | null;\n };\n}\n\nexport function useRqmiiSDK(): RqmiiSDKHandle {\n const ctx = useRqmiiAgentContext();\n const ev = ctx.events;\n\n return {\n state: {\n messages: ctx.messages,\n connectionState: ctx.connectionState,\n isConnected: ctx.isConnected,\n isSessionReady: ctx.isSessionReady,\n isAudioPlaying: ctx.isAudioPlaying,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n creditExhausted: ctx.creditExhausted,\n creditError: ctx.creditError,\n error: ctx.error,\n transcript: ctx.transcript,\n partialTranscript: ctx.partialTranscript,\n session: ctx.session,\n sessionState: ctx.sessionState,\n },\n actions: {\n sendTextMessage: ctx.sendTextMessage,\n sendAudioChunk: ctx.sendAudioChunk,\n endAudioStream: ctx.endAudioStream,\n interrupt: ctx.interrupt,\n clearSessionHistory: ctx.clearSessionHistory,\n clearMessages: ctx.clearMessages,\n changeSessionLanguage: ctx.changeSessionLanguage,\n signalClientReady: ctx.signalClientReady,\n initializeSession: ctx.initializeSession,\n joinDesktopSession: ctx.joinDesktopSession,\n disconnect: ctx.disconnect,\n terminateSession: ctx.terminateSession,\n resumeAudioPlayback: ctx.resumeAudioPlayback,\n pauseAudioPlayback: ctx.pauseAudioPlayback,\n attachAudioElement: ctx.attachAudioElement,\n },\n events: {\n onSessionReady: (h) => ev.on('session:ready', h),\n onSessionJoined: (h) => ev.on('session:joined', h),\n onSessionTerminated: (h) => ev.on('session:terminated', h),\n onSessionExpired: (h) => ev.on('session:expired', h),\n onMessageReceived: (h) => ev.on('message:received', h),\n onMessageSent: (h) => ev.on('message:sent', h),\n onAudioPlaying: (h) => ev.on('audio:playing', h),\n onAudioStopped: (h) => ev.on('audio:stopped', h),\n onAvatarSpeaking: (h) => ev.on('avatar:speaking', h),\n onAvatarSpeakingDone: (h) => ev.on('avatar:speaking_done', h),\n onStateChanged: (h) => ev.on('state:changed', h),\n onConnected: (h) => ev.on('connection:connected', h),\n onDisconnected: (h) => ev.on('connection:disconnected', h),\n onConnectionFailed: (h) => ev.on('connection:failed', h),\n onError: (h) => ev.on('error', h),\n onCreditsExhausted: (h) => ev.on('credits:exhausted', h),\n onTranscript: (h) => ev.on('transcript', h),\n onPartialTranscript: (h) => ev.on('partial_transcript', h),\n onInterrupted: (h) => ev.on('interrupted', h),\n },\n raw: {\n socket: ctx.socket,\n audioElement: ctx.audioElement,\n },\n };\n}\n","import { suppressNoisyLogs } from './core/utils/suppress-logs';\nsuppressNoisyLogs();\nexport { RqmiiAgentProvider, useRqmiiAgentContext } from './provider/RqmiiAgentProvider';\n\nexport {\n useRqmiiAgent,\n useRqmiiConnection,\n useRqmiiSession,\n useRqmiiMessages,\n useRqmiiVoice,\n useRqmiiAvatar,\n useRqmiiAudioElement,\n useRqmiiPressToTalk,\n useRqmiiVAD,\n useRqmiiEvents,\n useRqmiiSDK,\n} from './hooks';\n\nexport type { RqmiiSDKHandle, RqmiiEventListeners } from './hooks';\n\nexport { RqmiiAgentRoom } from './components/RqmiiAgentRoom';\nexport { RqmiiCloudAvatarPlayer } from './components/RqmiiCloudAvatarPlayer';\nexport { RqmiiErrorBoundary } from './components/RqmiiErrorBoundary';\n\nexport { AGENT_TYPES, SOCKET_EVENTS, CONNECTION_STATE, CLOUD_STREAM_STATE, SESSION_STATE, DEFAULT_PCM_OPTIONS } from './core/constants';\n\nexport type {\n AgentType,\n ConnectionState,\n SessionState,\n CloudStreamState,\n RqmiiSessionInfo,\n RqmiiMessage,\n PublicAgent,\n RqmiiPCMOptions,\n InitializeSessionArgs,\n JoinDesktopSessionArgs,\n RqmiiAgentProviderProps,\n RqmiiAgentContextValue,\n RqmiiState,\n EventType,\n EventHandlerMap,\n SessionData,\n TranscriptPayload,\n PartialTranscriptPayload,\n RqmiiAgentChatProps,\n RqmiiAgentChatPreviewProps,\n RqmiiAgentRoomProps,\n RqmiiCloudAvatarPlayerProps,\n UseRqmiiConnectionReturn,\n UseRqmiiMessagesReturn,\n UseRqmiiVoiceReturn,\n UseRqmiiAvatarReturn,\n UseRqmiiPressToTalkReturn,\n UseRqmiiVADReturn,\n UseRqmiiSessionStateReturn,\n AudioCaptureState,\n ClientToolHandler,\n RqmiiPromptOverrides,\n RqmiiPromptOverrideGuardrail,\n RqmiiPromptOverrideSection,\n} from './types';\n\nexport { AudioCapture } from './capture/capture';\n\nexport { EventEmitter } from './core/events/emitter';\n"],"names":["useRqmiiAgent","useRqmiiAgentContext","useRqmiiSession","ctx","useRqmiiAudioElement","audioRef","attachAudioElement","resumeAudioPlayback","useEffect","unlock","node","CaptureEventEmitter","event","handler","payload","handlers","DEFAULT_OPTIONS","PCM_PROCESSOR_CODE","AudioCapture","options","err","blob","processorUrl","source","ev","t","useRqmiiPressToTalk","onAudioChunk","onAudioEnd","onError","holdDelayMs","interruptOnHoldStart","sendAudioChunk","endAudioStream","interrupt","captureRef","useRef","holdTimerRef","isPressing","setIsPressing","useState","isRecording","setIsRecording","micError","setMicError","startPcmCapture","useCallback","capture","chunk","stopPcmCapture","cleanup","startRecording","stopRecording","discard","ok","startPress","stopPress","eventHandlers","useMemo","e","useRqmiiSDK","h","suppressNoisyLogs"],"mappings":"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"}
package/dist/lazy.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),t=require("react"),i=require("./schedule-load-DbAlv7OH.cjs"),a=t.lazy(()=>Promise.resolve().then(()=>require("./RqmiiAgentChat-C0ymqkkq.cjs")).then(e=>e.RqmiiAgentChat$1).then(e=>({default:e.RqmiiAgentChat})));function l({loadOn:e=i.DEFAULT_LOAD_STRATEGY,...u}){const[n,s]=t.useState(!1);return t.useEffect(()=>{if(!n)return i.scheduleLoad(e,()=>s(!0))},[e,n]),n?r.jsx(t.Suspense,{fallback:null,children:r.jsx(a,{...u})}):null}exports.RqmiiAgentChatLazy=l;
2
+ //# sourceMappingURL=lazy.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy.cjs","sources":["../src/lazy.tsx"],"sourcesContent":["/**\n * `@rqmii_immersive/agent-react-sdk/lazy`\n *\n * SEO / Core-Web-Vitals friendly way to put the widget on a page. This entry point only\n * contains a few hundred bytes of code; the widget itself is fetched with a dynamic\n * `import()` once the chosen trigger fires, so it never blocks the initial render and\n * is split out of the host app's main bundle.\n *\n * - Server render and first client render output nothing (no hydration mismatch, no\n * widget markup in crawled HTML).\n * - Remember to import the stylesheet once: `import '@rqmii_immersive/agent-react-sdk/style.css'`.\n */\nimport React, { Suspense, useEffect, useState } from 'react';\nimport { DEFAULT_LOAD_STRATEGY, scheduleLoad, type LoadStrategy } from './core/utils/schedule-load';\nimport type { RqmiiAgentChatProps } from './types';\n\nexport type { LoadStrategy } from './core/utils/schedule-load';\n\nconst RqmiiAgentChatImpl = React.lazy(() =>\n import('./ui/RqmiiAgentChat').then((m) => ({ default: m.RqmiiAgentChat })),\n);\n\nexport interface RqmiiAgentChatLazyProps extends RqmiiAgentChatProps {\n /**\n * When to download and mount the widget.\n * - `idle` (default): when the browser is idle after the page has loaded.\n * - `load`: right after the window `load` event.\n * - `interaction`: on the first pointer, key, touch or scroll event (crawlers never trigger it).\n * - `immediate`: on mount.\n */\n loadOn?: LoadStrategy;\n}\n\nexport function RqmiiAgentChatLazy({ loadOn = DEFAULT_LOAD_STRATEGY, ...chatProps }: RqmiiAgentChatLazyProps) {\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n if (ready) return undefined;\n return scheduleLoad(loadOn, () => setReady(true));\n }, [loadOn, ready]);\n\n if (!ready) return null;\n\n return (\n <Suspense fallback={null}>\n <RqmiiAgentChatImpl {...chatProps} />\n </Suspense>\n );\n}\n"],"names":["RqmiiAgentChatImpl","React","n","m","RqmiiAgentChatLazy","loadOn","DEFAULT_LOAD_STRATEGY","chatProps","ready","setReady","useState","useEffect","scheduleLoad","jsx","Suspense"],"mappings":"kLAkBMA,EAAqBC,EAAM,KAAK,IACpC,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,+BAAqB,CAAA,EAAA,KAAAC,GAAAA,EAAA,gBAAA,EAAE,KAAMC,IAAO,CAAE,QAASA,EAAE,gBAAiB,CAC3E,EAaO,SAASC,EAAmB,CAAE,OAAAC,EAASC,wBAAuB,GAAGC,GAAsC,CAC5G,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAK,EAOxC,OALAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAAH,EACJ,OAAOI,EAAAA,aAAaP,EAAQ,IAAMI,EAAS,EAAI,CAAC,CAClD,EAAG,CAACJ,EAAQG,CAAK,CAAC,EAEbA,EAGHK,MAACC,EAAAA,UAAS,SAAU,KAClB,eAACd,EAAA,CAAoB,GAAGO,EAAW,CAAA,CACrC,EALiB,IAOrB"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ui-1UzY5QCI.cjs");exports.Mermaid=e.Vo;
2
+ //# sourceMappingURL=mermaid-HWGCJPDP-CssnmrD3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid-HWGCJPDP-CssnmrD3.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";const w="idle";const a=["pointerdown","pointermove","keydown","touchstart","scroll","wheel"];function s(e){return document.readyState==="complete"?(e(),()=>{}):(window.addEventListener("load",e,{once:!0}),()=>window.removeEventListener("load",e))}function E(e){if(typeof window.requestIdleCallback=="function"){const n=window.requestIdleCallback(e,{timeout:2e3});return()=>window.cancelIdleCallback(n)}const i=window.setTimeout(e,200);return()=>window.clearTimeout(i)}function T(e,i){let n=!1,o=()=>{};const r=()=>{n||(n=!0,o(),i())};switch(e){case"immediate":return r(),()=>{};case"load":o=s(r);break;case"interaction":{const d={passive:!0,capture:!0};a.forEach(t=>window.addEventListener(t,r,d)),o=()=>a.forEach(t=>window.removeEventListener(t,r,d));break}case"idle":default:{let d=()=>{},t=!1;const c=()=>{t||(t=!0,d=E(r))},l=s(c),u=window.setTimeout(c,8e3);o=()=>{l(),window.clearTimeout(u),d()};break}}return()=>{n=!0,o()}}exports.DEFAULT_LOAD_STRATEGY=w;exports.scheduleLoad=T;
2
+ //# sourceMappingURL=schedule-load-DbAlv7OH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-load-DbAlv7OH.cjs","sources":["../src/core/utils/schedule-load.ts"],"sourcesContent":["/**\n * Deferred-loading helpers shared by the embed loader and the React `/lazy` entry.\n *\n * Strategies:\n * - `immediate`: run right away.\n * - `load`: run once the window `load` event has fired.\n * - `idle`: run when the browser is idle after `load` (default).\n * - `interaction`: run on the first user interaction (pointer, key, touch, scroll).\n * Crawlers never interact, so nothing is loaded for them.\n */\nexport type LoadStrategy = 'immediate' | 'load' | 'idle' | 'interaction';\n\nexport const LOAD_STRATEGIES: readonly LoadStrategy[] = ['immediate', 'load', 'idle', 'interaction'];\n\nexport const DEFAULT_LOAD_STRATEGY: LoadStrategy = 'idle';\n\n/** Upper bound for waiting on an idle period, so a busy page still gets the widget. */\nconst IDLE_TIMEOUT_MS = 2000;\n/** For `idle`: start waiting for an idle period at most this long after scheduling, even if `load` hasn't fired. */\nconst IDLE_MAX_WAIT_AFTER_START_MS = 8000;\n/** Fallback delay for browsers without requestIdleCallback (Safari). */\nconst IDLE_FALLBACK_DELAY_MS = 200;\n\nconst INTERACTION_EVENTS = ['pointerdown', 'pointermove', 'keydown', 'touchstart', 'scroll', 'wheel'] as const;\n\nexport function parseLoadStrategy(\n value: string | null | undefined,\n fallback: LoadStrategy = DEFAULT_LOAD_STRATEGY,\n): LoadStrategy {\n const normalized = value?.trim().toLowerCase();\n return (LOAD_STRATEGIES as readonly string[]).includes(normalized ?? '')\n ? (normalized as LoadStrategy)\n : fallback;\n}\n\nfunction whenWindowLoaded(callback: () => void): () => void {\n if (document.readyState === 'complete') {\n callback();\n return () => {};\n }\n window.addEventListener('load', callback, { once: true });\n return () => window.removeEventListener('load', callback);\n}\n\nfunction whenIdle(callback: () => void): () => void {\n if (typeof window.requestIdleCallback === 'function') {\n const handle = window.requestIdleCallback(callback, { timeout: IDLE_TIMEOUT_MS });\n return () => window.cancelIdleCallback(handle);\n }\n const handle = window.setTimeout(callback, IDLE_FALLBACK_DELAY_MS);\n return () => window.clearTimeout(handle);\n}\n\n/**\n * Schedules `run` according to `strategy`. `run` is called at most once.\n * Returns a function that cancels the pending run. Browser-only: call from\n * an effect or a client-side script, never during SSR.\n */\nexport function scheduleLoad(strategy: LoadStrategy, run: () => void): () => void {\n let done = false;\n let cancelPending: () => void = () => {};\n\n const runOnce = () => {\n if (done) return;\n done = true;\n cancelPending();\n run();\n };\n\n switch (strategy) {\n case 'immediate':\n runOnce();\n return () => {};\n\n case 'load':\n cancelPending = whenWindowLoaded(runOnce);\n break;\n\n case 'interaction': {\n const options: AddEventListenerOptions = { passive: true, capture: true };\n INTERACTION_EVENTS.forEach((name) => window.addEventListener(name, runOnce, options));\n cancelPending = () => INTERACTION_EVENTS.forEach((name) => window.removeEventListener(name, runOnce, options));\n break;\n }\n\n case 'idle':\n default: {\n let cancelIdle: () => void = () => {};\n let idleStarted = false;\n const startIdle = () => {\n if (idleStarted) return;\n idleStarted = true;\n cancelIdle = whenIdle(runOnce);\n };\n const cancelLoad = whenWindowLoaded(startIdle);\n // `load` can be delayed for a long time by slow third-party resources; don't let that\n // keep the widget away indefinitely.\n const maxWait = window.setTimeout(startIdle, IDLE_MAX_WAIT_AFTER_START_MS);\n cancelPending = () => {\n cancelLoad();\n window.clearTimeout(maxWait);\n cancelIdle();\n };\n break;\n }\n }\n\n return () => {\n done = true;\n cancelPending();\n };\n}\n"],"names":["DEFAULT_LOAD_STRATEGY","INTERACTION_EVENTS","whenWindowLoaded","callback","whenIdle","handle","scheduleLoad","strategy","run","done","cancelPending","runOnce","options","name","cancelIdle","idleStarted","startIdle","cancelLoad","maxWait"],"mappings":"aAcO,MAAMA,EAAsC,OASnD,MAAMC,EAAqB,CAAC,cAAe,cAAe,UAAW,aAAc,SAAU,OAAO,EAYpG,SAASC,EAAiBC,EAAkC,CAC1D,OAAI,SAAS,aAAe,YAC1BA,EAAA,EACO,IAAM,CAAC,IAEhB,OAAO,iBAAiB,OAAQA,EAAU,CAAE,KAAM,GAAM,EACjD,IAAM,OAAO,oBAAoB,OAAQA,CAAQ,EAC1D,CAEA,SAASC,EAASD,EAAkC,CAClD,GAAI,OAAO,OAAO,qBAAwB,WAAY,CACpD,MAAME,EAAS,OAAO,oBAAoBF,EAAU,CAAE,QAAS,IAAiB,EAChF,MAAO,IAAM,OAAO,mBAAmBE,CAAM,CAC/C,CACA,MAAMA,EAAS,OAAO,WAAWF,EAAU,GAAsB,EACjE,MAAO,IAAM,OAAO,aAAaE,CAAM,CACzC,CAOO,SAASC,EAAaC,EAAwBC,EAA6B,CAChF,IAAIC,EAAO,GACPC,EAA4B,IAAM,CAAC,EAEvC,MAAMC,EAAU,IAAM,CAChBF,IACJA,EAAO,GACPC,EAAA,EACAF,EAAA,EACF,EAEA,OAAQD,EAAA,CACN,IAAK,YACH,OAAAI,EAAA,EACO,IAAM,CAAC,EAEhB,IAAK,OACHD,EAAgBR,EAAiBS,CAAO,EACxC,MAEF,IAAK,cAAe,CAClB,MAAMC,EAAmC,CAAE,QAAS,GAAM,QAAS,EAAA,EACnEX,EAAmB,QAASY,GAAS,OAAO,iBAAiBA,EAAMF,EAASC,CAAO,CAAC,EACpFF,EAAgB,IAAMT,EAAmB,QAASY,GAAS,OAAO,oBAAoBA,EAAMF,EAASC,CAAO,CAAC,EAC7G,KACF,CAEA,IAAK,OACL,QAAS,CACP,IAAIE,EAAyB,IAAM,CAAC,EAChCC,EAAc,GAClB,MAAMC,EAAY,IAAM,CAClBD,IACJA,EAAc,GACdD,EAAaV,EAASO,CAAO,EAC/B,EACMM,EAAaf,EAAiBc,CAAS,EAGvCE,EAAU,OAAO,WAAWF,EAAW,GAA4B,EACzEN,EAAgB,IAAM,CACpBO,EAAA,EACA,OAAO,aAAaC,CAAO,EAC3BJ,EAAA,CACF,EACA,KACF,CAAA,CAGF,MAAO,IAAM,CACXL,EAAO,GACPC,EAAA,CACF,CACF"}