@streamoji/avatar-widget 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avatar-widget.cjs +2 -2
- package/dist/avatar-widget.cjs.map +1 -1
- package/dist/avatar-widget.css +1 -1
- package/dist/avatar-widget.js +58 -54
- package/dist/avatar-widget.js.map +1 -1
- package/dist/avatar-widget.umd.js +1 -1
- package/dist/avatar-widget.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/avatar-widget.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.avatar-bubble:after{content:"";position:absolute;bottom:0;right:18%;width:29px;height:33px;background-image:url("data:image/svg+xml,%3Csvg width='29' height='33' viewBox='0 0 29 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.5%209C3.55459%207.42985%204.13875e-07%208%204.13875e-07%208L0.517701%20-9.50694e-06L28.5%200.995422L28.2689%207.49131C28.2689%207.49131%2023.754%207.83102%2022.2194%208.77706C20.6848%209.7231%2019.1146%2011.6685%2018.5794%2012.6501C18.0442%2013.6317%206.37564%2032.2286%206.37564%2032.2286C6.37564%2032.2286%207.46192%2015.7568%207.53302%2013.7581C7.60412%2011.7594%207.44541%2010.5702%205.5%209Z' fill='white'/%3E%3C/svg%3E");background-size:100% 100%;background-repeat:no-repeat;filter:drop-shadow(0 2px 2px rgba(0,0,0,.08));transform:translateY(78%) rotate(0)}.avatar-widget-container{position:fixed;bottom:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:flex-end;gap:1rem;width:280px}.avatar-bubble{z-index:10002;background:#fff;padding:1.25rem 1.5rem 1.5rem;min-height:3em;border-radius:24px;color:#1e293b;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:1rem;font-weight:500;line-height:1.5;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000001a;border:1px solid rgba(0,0,0,.05);position:absolute;top:64px;left:50%;transform:translate(-50%,-100%);max-width:min(320px,85vw);width:100%;pointer-events:none;-webkit-user-select:text;user-select:text;overflow:visible;word-break:break-word}.avatar-bubble:after{content:"";position:absolute;bottom:0;right:18%;width:29px;height:33px;background-image:url("data:image/svg+xml,%3Csvg width='29' height='33' viewBox='0 0 29 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.5%209C3.55459%207.42985%204.13875e-07%208%204.13875e-07%208L0.517701%20-9.50694e-06L28.5%200.995422L28.2689%207.49131C28.2689%207.49131%2023.754%207.83102%2022.2194%208.77706C20.6848%209.7231%2019.1146%2011.6685%2018.5794%2012.6501C18.0442%2013.6317%206.37564%2032.2286%206.37564%2032.2286C6.37564%2032.2286%207.46192%2015.7568%207.53302%2013.7581C7.60412%2011.7594%207.44541%2010.5702%205.5%209Z' fill='white'/%3E%3C/svg%3E");background-size:100% 100%;background-repeat:no-repeat;filter:drop-shadow(0 2px 2px rgba(0,0,0,.08));transform:translateY(78%) rotate(0)}.avatar-bubble__content{max-height:63px;overflow-y:auto;word-break:break-word;scrollbar-width:none;-ms-overflow-style:none}.avatar-bubble__content::-webkit-scrollbar{display:none}.avatar-bubble__content--nudge{max-height:160px!important}.avatar-bubble--entering{animation:avatarBubbleEnter .35s ease-out forwards}.avatar-bubble--exiting{animation:avatarBubbleExit .6s ease-in 2s forwards}@keyframes avatarBubbleEnter{0%{transform:translate(120%,-100%);opacity:0}to{transform:translate(-50%,-100%);opacity:1}}@keyframes avatarBubbleExit{0%{transform:translate(-50%,-100%);opacity:1}to{transform:translate(120%,-100%);opacity:0}}.avatar-wrapper{pointer-events:none;width:300px;height:400px;cursor:pointer;transition:transform .3s ease;z-index:1000}.avatar-wrapper:hover{transform:scale(1.05)}.avatar-circle-bg{width:100%;height:100%;border-radius:50%;border:2px solid white;background:linear-gradient(135deg,#008b8b,#38bdf8);box-shadow:0 4px 20px #0000004d;position:absolute;top:0;left:0;z-index:1}.avatar-circle-bg:before{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:0 0 #ffffffb3;animation:pulse-white 2s infinite;z-index:-1}.avatar-scene-wrapper{z-index:2;pointer-events:none;overflow:visible}.avatar-scene-wrapper .avatar-canvas-layer{position:absolute;bottom:0;right:0;pointer-events:none!important;overflow:visible}.avatar-canvas-layer{width:400px;height:400px;z-index:2;pointer-events:none!important;overflow:visible}.avatar-canvas-layer canvas{pointer-events:none!important}@keyframes pulse-white{0%{transform:scale(.95);box-shadow:0 0 #ffffffb3}70%{transform:scale(1);box-shadow:0 0 0 10px #fff0}to{transform:scale(.95);box-shadow:0 0 #fff0}}@keyframes popIn{0%{opacity:0;transform:scale(.8) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.avatar-input-area{position:absolute;bottom:4px;right:4px;z-index:10001;display:flex;flex-direction:column;align-items:flex-end;gap:6px}@keyframes thinkingTabPopUp{0%{transform:translateY(28px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes thinkingTabPopDown{0%{transform:translateY(0);opacity:1}to{transform:translateY(28px);opacity:0}}.avatar-thinking-tab{background:#1e4a5e;color:#fff;font-size:.8rem;font-weight:500;padding:6px 14px;border-radius:12px 12px 0 0;font-family:Inter,system-ui,sans-serif;white-space:nowrap;box-shadow:0 2px 8px #0000001a;position:absolute;bottom:45px;left:25px}.avatar-thinking-tab--entering{animation:thinkingTabPopUp .25s ease-out forwards}.avatar-thinking-tab--exiting{animation:thinkingTabPopDown .25s ease-in forwards}.avatar-thinking-tab a{color:inherit;text-decoration:none}.avatar-thinking-tab a:hover{text-decoration:underline}.avatar-input-container{position:relative;bottom:auto;right:auto;z-index:10001;width:100%;min-width:280px;height:48px;min-height:48px;pointer-events:auto;display:flex;flex-direction:column;justify-content:center;align-items:stretch;overflow:hidden;background:#fff;border-radius:50px;padding:0 6px;box-shadow:0 2px 12px #00000014}.avatar-input-container>div:first-child{display:flex;align-items:center;width:100%;height:100%;min-height:0}.avatar-input-container .avatar-input-loader{height:30px;aspect-ratio:2.5;--_g: no-repeat radial-gradient(farthest-side, #1e4a5e 90%, #0000);background:var(--_g),var(--_g),var(--_g),var(--_g);background-size:20% 50%;animation:avatar-input-l44 1s infinite linear alternate}@keyframes avatar-input-l44{0%,5%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}12.5%{background-position:0% 0,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}25%{background-position:0% 0,calc(1*100%/3) 0,calc(2*100%/3) 50%,100% 50%}37.5%{background-position:0% 100%,calc(1*100%/3) 0,calc(2*100%/3) 0,100% 50%}50%{background-position:0% 100%,calc(1*100%/3) 100%,calc(2*100%/3) 0,100% 0}62.5%{background-position:0% 50%,calc(1*100%/3) 100%,calc(2*100%/3) 100%,100% 0}75%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 100%,100% 100%}87.5%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 100%}95%,to{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}}.avatar-input-header{background:#1e4a5e;color:#fff;padding:6px 16px;width:fit-content;min-width:35%;margin-left:8%;border-radius:12px 12px 0 0;font-family:Inter,system-ui,sans-serif;font-size:11px;font-weight:500;letter-spacing:-.01em;text-align:center;white-space:nowrap}.avatar-input-body{background:#fff;padding:6px;border-radius:50px;display:flex;flex-direction:column}.avatar-input-body form{display:flex;align-items:center;width:100%}#avatar-text-input{background:transparent;border:none;color:#334155;font-size:.95rem;line-height:1.25;outline:none;padding:0 2px 0 12px;flex:1;min-width:0;font-family:Inter,system-ui,sans-serif}#avatar-text-input::placeholder{color:#94a3b8}.avatar-input-container .mic-button{background:#1e4a5e;color:#fff;border:none;width:38px;height:38px;border-radius:50%!important;display:flex;justify-content:center;align-items:center;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);flex-shrink:0;margin-right:0;margin-left:8px}.avatar-input-container .mic-button:hover{background:#163a4a;transform:translateY(-1px)}.avatar-input-recording{flex:1;display:flex;align-items:center;width:100%;height:100%;min-height:36px;gap:8px}.avatar-input-recording .avatar-recording-cancel,.avatar-input-recording .avatar-recording-confirm{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;line-height:0;align-self:center;box-sizing:border-box}.avatar-input-recording .avatar-recording-cancel{background:#cbd5e1;color:#fff}.avatar-input-recording .avatar-recording-confirm{background:#1e4a5e;color:#fff}.avatar-input-recording .avatar-recording-cancel:hover,.avatar-input-recording .avatar-recording-confirm:hover{opacity:.9}.avatar-input-speaking{flex:1;display:flex;align-items:center;width:100%;height:100%;min-height:36px;gap:8px}.avatar-input-speaking .avatar-speaking-stop{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;border:2px solid #7dd3fc;background:#1e4a5e;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;line-height:0;align-self:center;box-sizing:border-box}.avatar-input-speaking .avatar-speaking-stop:hover{opacity:.9}.avatar-speaking-stop__icon{width:10px;height:10px;background:#cbd5e1;border-radius:2px;display:block}.avatar-status-text{font-size:.75rem;color:#64748b;text-align:center;padding-bottom:4px;font-family:Inter,sans-serif}@media(max-width:480px){.avatar-widget-container{width:100%;left:0;right:0;bottom:0;padding:0 max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));box-sizing:border-box;flex-direction:column-reverse;align-items:flex-end}.avatar-input-area{position:relative;width:100%}.avatar-input-container{width:100%;min-width:0;max-width:100%;right:auto;bottom:auto;filter:drop-shadow(0 5px 15px rgba(0,0,0,.2))}.avatar-wrapper{width:80px;height:80px;align-self:flex-end}.avatar-scene-wrapper{width:80px;height:80px}.avatar-canvas-layer{width:350px!important;height:350px!important;right:-28px!important}.avatar-bubble{left:16px;right:auto;top:40px;transform:translateY(-50%);max-width:calc(100vw - 120px);font-size:.85rem;padding:.6rem .85rem .75rem;border-radius:18px;height:90px;box-shadow:0 6px 22px -4px #00000021,0 2px 7px -2px #00000014}.avatar-bubble--entering{animation:avatarBubbleEnterMobile .35s ease-out forwards}.avatar-bubble--exiting{animation:avatarBubbleExitMobile .6s ease-in 2s forwards}@keyframes avatarBubbleEnterMobile{0%{transform:translate(-20px,-50%);opacity:0}to{transform:translateY(-50%);opacity:1}}@keyframes avatarBubbleExitMobile{0%{transform:translateY(-50%);opacity:1}to{transform:translate(-20px,-50%);opacity:0}}.avatar-bubble:after{left:auto;right:4px;bottom:50%;width:16px;height:18px;background-size:100% 100%;transform:translate(100%,50%) rotate(-90deg)}.avatar-input-header{padding:8px 12px;font-size:14px}}.speech-bubble{background:#fff;border-radius:40px 40px 0/40px 40px 0px;padding:16px 24px;color:#1e293b;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:16px;font-weight:500;line-height:1.4;max-width:320px;width:max-content;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000001a;pointer-events:none;-webkit-user-select:none;user-select:none;position:relative;text-align:center;z-index:10002;transform:translate(-50%,-100%);margin-bottom:20px}@keyframes bubbleFadeIn{0%{opacity:0;transform:translate(-50%) scale(.9)}to{opacity:1;transform:translate(-50%) scale(1)}}.thinking-dots{display:flex;justify-content:center;align-items:center;gap:4px;height:12px}.thinking-dots span{width:6px;height:6px;background-color:#94a3b8;border-radius:50%;display:inline-block;animation:thinking-dot-pulse 1.4s infinite ease-in-out both}.thinking-dots span:nth-child(1){animation-delay:-.32s}.thinking-dots span:nth-child(2){animation-delay:-.16s}@keyframes thinking-dot-pulse{0%,80%,to{transform:scale(0);opacity:.3}40%{transform:scale(1);opacity:1}}
|
|
1
|
+
.avatar-widget-container{position:fixed;bottom:0;right:0;z-index:1000;display:flex;flex-direction:column;align-items:flex-end;gap:1rem;width:280px}.avatar-bubble{z-index:10002;background:#fff;padding:1.25rem 1.5rem 1.5rem;min-height:3em;border-radius:24px;color:#1e293b;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:1rem;font-weight:500;line-height:1.5;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000001a;border:1px solid rgba(0,0,0,.05);position:absolute;top:64px;left:50%;transform:translate(-50%,-100%);max-width:min(320px,85vw);width:100%;pointer-events:none;-webkit-user-select:text;user-select:text;overflow:visible;word-break:break-word}.avatar-bubble:after{content:"";position:absolute;bottom:0;right:18%;width:29px;height:33px;background-image:url("data:image/svg+xml,%3Csvg width='29' height='33' viewBox='0 0 29 33' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.5%209C3.55459%207.42985%204.13875e-07%208%204.13875e-07%208L0.517701%20-9.50694e-06L28.5%200.995422L28.2689%207.49131C28.2689%207.49131%2023.754%207.83102%2022.2194%208.77706C20.6848%209.7231%2019.1146%2011.6685%2018.5794%2012.6501C18.0442%2013.6317%206.37564%2032.2286%206.37564%2032.2286C6.37564%2032.2286%207.46192%2015.7568%207.53302%2013.7581C7.60412%2011.7594%207.44541%2010.5702%205.5%209Z' fill='white'/%3E%3C/svg%3E");background-size:100% 100%;background-repeat:no-repeat;filter:drop-shadow(0 2px 2px rgba(0,0,0,.08));transform:translateY(78%) rotate(0)}.avatar-bubble__content{max-height:63px;overflow-y:auto;word-break:break-word;scrollbar-width:none;-ms-overflow-style:none}.avatar-bubble__content::-webkit-scrollbar{display:none}.avatar-bubble__content--nudge{max-height:160px!important}.avatar-bubble--entering{animation:avatarBubbleEnter .35s ease-out forwards}.avatar-bubble--exiting{animation:avatarBubbleExit .6s ease-in 2s forwards}@keyframes avatarBubbleEnter{0%{transform:translate(120%,-100%);opacity:0}to{transform:translate(-50%,-100%);opacity:1}}@keyframes avatarBubbleExit{0%{transform:translate(-50%,-100%);opacity:1}to{transform:translate(120%,-100%);opacity:0}}.avatar-wrapper{pointer-events:none;width:300px;height:400px;cursor:pointer;transition:transform .3s ease;z-index:1000}.avatar-wrapper:hover{transform:scale(1.05)}.avatar-circle-bg{width:100%;height:100%;border-radius:50%;border:2px solid white;background:linear-gradient(135deg,#008b8b,#38bdf8);box-shadow:0 4px 20px #0000004d;position:absolute;top:0;left:0;z-index:1}.avatar-circle-bg:before{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:0 0 #ffffffb3;animation:pulse-white 2s infinite;z-index:-1}.avatar-scene-wrapper{z-index:2;pointer-events:none;overflow:visible}.avatar-scene-wrapper .avatar-canvas-layer{position:absolute;bottom:0;right:0;pointer-events:none!important;overflow:visible}.avatar-canvas-layer{width:400px;height:400px;z-index:2;pointer-events:none!important;overflow:visible}.avatar-canvas-layer canvas{pointer-events:none!important}@keyframes pulse-white{0%{transform:scale(.95);box-shadow:0 0 #ffffffb3}70%{transform:scale(1);box-shadow:0 0 0 10px #fff0}to{transform:scale(.95);box-shadow:0 0 #fff0}}@keyframes popIn{0%{opacity:0;transform:scale(.8) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.avatar-input-area{position:absolute;bottom:4px;right:4px;z-index:10001;display:flex;flex-direction:column;align-items:flex-end;gap:6px}@keyframes thinkingTabPopUp{0%{transform:translateY(28px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes thinkingTabPopDown{0%{transform:translateY(0);opacity:1}to{transform:translateY(28px);opacity:0}}.avatar-thinking-tab{background:#1e4a5e;color:#fff;font-size:.8rem;font-weight:500;padding:6px 14px;border-radius:12px 12px 0 0;font-family:Inter,system-ui,sans-serif;white-space:nowrap;box-shadow:0 2px 8px #0000001a;position:absolute;bottom:45px;left:25px}.avatar-thinking-tab--entering{animation:thinkingTabPopUp .25s ease-out forwards}.avatar-thinking-tab--exiting{animation:thinkingTabPopDown .25s ease-in forwards}.avatar-thinking-tab a{color:inherit;text-decoration:none}.avatar-thinking-tab a:hover{text-decoration:underline}.avatar-input-container{position:relative;bottom:auto;right:auto;z-index:10001;width:100%;min-width:280px;height:48px;min-height:48px;pointer-events:auto;display:flex;flex-direction:column;justify-content:center;align-items:stretch;overflow:hidden;background:#fff;border-radius:50px;padding:0 6px;box-shadow:0 2px 12px #00000014}.avatar-input-container>div:first-child{display:flex;align-items:center;width:100%;height:100%;min-height:0}.avatar-input-container .avatar-input-loader{height:30px;aspect-ratio:2.5;--_g: no-repeat radial-gradient(farthest-side, #1e4a5e 90%, #0000);background:var(--_g),var(--_g),var(--_g),var(--_g);background-size:20% 50%;animation:avatar-input-l44 1s infinite linear alternate}@keyframes avatar-input-l44{0%,5%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}12.5%{background-position:0% 0,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}25%{background-position:0% 0,calc(1*100%/3) 0,calc(2*100%/3) 50%,100% 50%}37.5%{background-position:0% 100%,calc(1*100%/3) 0,calc(2*100%/3) 0,100% 50%}50%{background-position:0% 100%,calc(1*100%/3) 100%,calc(2*100%/3) 0,100% 0}62.5%{background-position:0% 50%,calc(1*100%/3) 100%,calc(2*100%/3) 100%,100% 0}75%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 100%,100% 100%}87.5%{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 100%}95%,to{background-position:0% 50%,calc(1*100%/3) 50%,calc(2*100%/3) 50%,100% 50%}}.avatar-input-header{background:#1e4a5e;color:#fff;padding:6px 16px;width:fit-content;min-width:35%;margin-left:8%;border-radius:12px 12px 0 0;font-family:Inter,system-ui,sans-serif;font-size:11px;font-weight:500;letter-spacing:-.01em;text-align:center;white-space:nowrap}.avatar-input-body{background:#fff;padding:6px;border-radius:50px;display:flex;flex-direction:column}.avatar-input-body form{display:flex;align-items:center;width:100%}#avatar-text-input{background:transparent;border:none;color:#334155;font-size:.95rem;line-height:1.25;outline:none;padding:0 2px 0 12px;flex:1;min-width:0;font-family:Inter,system-ui,sans-serif}#avatar-text-input::placeholder{color:#94a3b8}.avatar-input-container .mic-button{background:#1e4a5e;color:#fff;border:none;width:38px;height:38px;border-radius:50%!important;display:flex;justify-content:center;align-items:center;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);flex-shrink:0;margin-right:0;margin-left:8px}.avatar-input-container .mic-button:hover{background:#163a4a;transform:translateY(-1px)}.avatar-input-recording{flex:1;display:flex;align-items:center;width:100%;height:100%;min-height:36px;gap:8px}.avatar-input-recording .avatar-recording-cancel,.avatar-input-recording .avatar-recording-confirm{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;line-height:0;align-self:center;box-sizing:border-box}.avatar-input-recording .avatar-recording-cancel{background:#cbd5e1;color:#fff}.avatar-input-recording .avatar-recording-confirm{background:#1e4a5e;color:#fff}.avatar-input-recording .avatar-recording-cancel:hover,.avatar-input-recording .avatar-recording-confirm:hover{opacity:.9}.avatar-input-speaking{flex:1;display:flex;align-items:center;width:100%;height:100%;min-height:36px;gap:8px}.avatar-input-speaking .avatar-speaking-stop{width:32px;height:32px;min-width:32px;min-height:32px;border-radius:50%;border:2px solid #7dd3fc;background:#1e4a5e;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;line-height:0;align-self:center;box-sizing:border-box}.avatar-input-speaking .avatar-speaking-stop:hover{opacity:.9}.avatar-speaking-stop__icon{width:10px;height:10px;background:#cbd5e1;border-radius:2px;display:block}.avatar-status-text{font-size:.75rem;color:#64748b;text-align:center;padding-bottom:4px;font-family:Inter,sans-serif}@media(max-width:480px){.avatar-widget-container{width:100%;left:0;right:0;bottom:0;padding:0 max(16px,env(safe-area-inset-left));padding-right:max(16px,env(safe-area-inset-right));box-sizing:border-box;flex-direction:column-reverse;align-items:flex-end}.avatar-input-area{position:relative;width:100%}.avatar-input-container{width:100%;min-width:0;max-width:100%;right:auto;bottom:auto;filter:drop-shadow(0 5px 15px rgba(0,0,0,.2))}.avatar-wrapper{width:80px;height:80px;align-self:flex-end}.avatar-scene-wrapper{width:80px;height:80px}.avatar-canvas-layer{width:350px!important;height:350px!important;right:-28px!important}.avatar-bubble{left:16px;right:auto;top:40px;transform:translateY(-50%);max-width:calc(100vw - 120px);font-size:.85rem;padding:.6rem .85rem .75rem;border-radius:18px;height:90px;box-shadow:0 6px 22px -4px #00000021,0 2px 7px -2px #00000014}.avatar-bubble--entering{animation:avatarBubbleEnterMobile .35s ease-out forwards}.avatar-bubble--exiting{animation:avatarBubbleExitMobile .6s ease-in 2s forwards}@keyframes avatarBubbleEnterMobile{0%{transform:translate(-20px,-50%);opacity:0}to{transform:translateY(-50%);opacity:1}}@keyframes avatarBubbleExitMobile{0%{transform:translateY(-50%);opacity:1}to{transform:translate(-20px,-50%);opacity:0}}.avatar-bubble:after{left:auto;right:4px;bottom:50%;width:16px;height:18px;background-size:100% 100%;transform:translate(100%,50%) rotate(-90deg)}.avatar-input-header{padding:8px 12px;font-size:14px}}.speech-bubble{background:#fff;border-radius:40px 40px 0/40px 40px 0px;padding:16px 24px;color:#1e293b;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:16px;font-weight:500;line-height:1.4;max-width:320px;width:max-content;box-shadow:0 10px 25px -5px #0000001a,0 8px 10px -6px #0000001a;pointer-events:none;-webkit-user-select:none;user-select:none;position:relative;text-align:center;z-index:10002;transform:translate(-50%,-100%);margin-bottom:20px}@keyframes bubbleFadeIn{0%{opacity:0;transform:translate(-50%) scale(.9)}to{opacity:1;transform:translate(-50%) scale(1)}}.thinking-dots{display:flex;justify-content:center;align-items:center;gap:4px;height:12px}.thinking-dots span{width:6px;height:6px;background-color:#94a3b8;border-radius:50%;display:inline-block;animation:thinking-dot-pulse 1.4s infinite ease-in-out both}.thinking-dots span:nth-child(1){animation-delay:-.32s}.thinking-dots span:nth-child(2){animation-delay:-.16s}@keyframes thinking-dot-pulse{0%,80%,to{transform:scale(0);opacity:.3}40%{transform:scale(1);opacity:1}}
|
package/dist/avatar-widget.js
CHANGED
|
@@ -7,12 +7,12 @@ import { GLTFLoader as nn } from "three/examples/jsm/loaders/GLTFLoader.js";
|
|
|
7
7
|
const ut = "https://ai.streamoji.com", V = (...f) => {
|
|
8
8
|
}, rn = (...f) => {
|
|
9
9
|
}, Et = ({ analyser: f }) => {
|
|
10
|
-
const T = a(null),
|
|
10
|
+
const T = a(null), b = a(null);
|
|
11
11
|
return $(() => {
|
|
12
12
|
const p = T.current;
|
|
13
13
|
if (!p) return;
|
|
14
|
-
const
|
|
15
|
-
if (!
|
|
14
|
+
const _ = p.getContext("2d", { alpha: !0 });
|
|
15
|
+
if (!_) return;
|
|
16
16
|
let O, H = null;
|
|
17
17
|
f && (f.fftSize = 128, H = new Uint8Array(f.frequencyBinCount));
|
|
18
18
|
const he = () => {
|
|
@@ -20,9 +20,9 @@ const ut = "https://ai.streamoji.com", V = (...f) => {
|
|
|
20
20
|
const X = p.width, D = p.height;
|
|
21
21
|
if (X === 0 || D === 0) return;
|
|
22
22
|
const me = D / 2;
|
|
23
|
-
|
|
23
|
+
_.clearRect(0, 0, X, D), _.fillStyle = "#1e293b";
|
|
24
24
|
const I = 2, k = I + 2, E = X * 0.95, U = Math.floor(E / k);
|
|
25
|
-
(!
|
|
25
|
+
(!b.current || b.current.length !== U) && (b.current = new Float32Array(U).fill(2));
|
|
26
26
|
const be = U * k, y = (X - be) / 2;
|
|
27
27
|
f && H && f.getByteFrequencyData(H);
|
|
28
28
|
const Ie = H ? H.length : 0, G = Math.floor(Ie * 0.7) / U, ce = new Float32Array(U);
|
|
@@ -40,10 +40,10 @@ const ut = "https://ai.streamoji.com", V = (...f) => {
|
|
|
40
40
|
ce[M] = N;
|
|
41
41
|
}
|
|
42
42
|
for (let M = 0; M < U; M++) {
|
|
43
|
-
const B = U - 1 - M, j = Math.max(ce[M], ce[B]), N =
|
|
44
|
-
|
|
43
|
+
const B = U - 1 - M, j = Math.max(ce[M], ce[B]), N = b.current[M] + (j - b.current[M]) * 0.3;
|
|
44
|
+
b.current[M] = N;
|
|
45
45
|
const ne = y + M * k, P = me - N / 2;
|
|
46
|
-
|
|
46
|
+
_.beginPath(), _.roundRect ? _.roundRect(ne, P, I, N, 4) : _.fillRect(ne, P, I, N), _.fill();
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
return he(), () => {
|
|
@@ -62,23 +62,23 @@ async function on(f) {
|
|
|
62
62
|
"SHA-256",
|
|
63
63
|
new TextEncoder().encode(f)
|
|
64
64
|
);
|
|
65
|
-
return Array.from(new Uint8Array(T)).map((
|
|
65
|
+
return Array.from(new Uint8Array(T)).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
66
66
|
}
|
|
67
67
|
function an(f) {
|
|
68
|
-
const [T,
|
|
68
|
+
const [T, b] = g(null);
|
|
69
69
|
return $(() => {
|
|
70
70
|
if (!f) {
|
|
71
|
-
|
|
71
|
+
b(null);
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
74
|
let p = !1;
|
|
75
|
-
return on(f).then((
|
|
75
|
+
return on(f).then((_) => {
|
|
76
76
|
if (p) return;
|
|
77
|
-
const O = `${sn}/${
|
|
77
|
+
const O = `${sn}/${_}.glb`;
|
|
78
78
|
fetch(O, { method: "HEAD" }).then((H) => {
|
|
79
|
-
p ||
|
|
79
|
+
p || b(H.ok ? O : It);
|
|
80
80
|
}).catch(() => {
|
|
81
|
-
p ||
|
|
81
|
+
p || b(It);
|
|
82
82
|
});
|
|
83
83
|
}), () => {
|
|
84
84
|
p = !0;
|
|
@@ -488,28 +488,28 @@ function wn({ target: f }) {
|
|
|
488
488
|
T.lookAt(...f);
|
|
489
489
|
}, [T, f]), null;
|
|
490
490
|
}
|
|
491
|
-
function Q(f, T,
|
|
491
|
+
function Q(f, T, b) {
|
|
492
492
|
if (!f || !f.morphTargetDictionary)
|
|
493
493
|
return;
|
|
494
|
-
const p = f,
|
|
494
|
+
const p = f, _ = p.morphTargetDictionary, O = p.morphTargetInfluences;
|
|
495
495
|
if (O)
|
|
496
|
-
for (const H in
|
|
497
|
-
H.toLowerCase() === T.toLowerCase() && (O[
|
|
496
|
+
for (const H in _)
|
|
497
|
+
H.toLowerCase() === T.toLowerCase() && (O[_[H]] = b);
|
|
498
498
|
}
|
|
499
499
|
function Ct(f, T = 0.97) {
|
|
500
500
|
if (!f) return;
|
|
501
|
-
const
|
|
502
|
-
if (
|
|
503
|
-
for (let p = 0; p <
|
|
504
|
-
|
|
501
|
+
const b = f;
|
|
502
|
+
if (b.morphTargetInfluences)
|
|
503
|
+
for (let p = 0; p < b.morphTargetInfluences.length; p++)
|
|
504
|
+
b.morphTargetInfluences[p] *= T;
|
|
505
505
|
}
|
|
506
506
|
const vn = Zt(
|
|
507
507
|
({
|
|
508
508
|
avatarUrl: f,
|
|
509
509
|
isPlayingRef: T,
|
|
510
|
-
visemeQueueRef:
|
|
510
|
+
visemeQueueRef: b,
|
|
511
511
|
audioContextRef: p,
|
|
512
|
-
responseAudioStartTimeRef:
|
|
512
|
+
responseAudioStartTimeRef: _,
|
|
513
513
|
adjustments: O,
|
|
514
514
|
mood: H,
|
|
515
515
|
expression: he,
|
|
@@ -694,9 +694,9 @@ const vn = Zt(
|
|
|
694
694
|
), B.current.position.set(...O.position), B.current.scale.setScalar(O.scale), B.current.rotation.x = O.rotation[0], B.current.rotation.z = O.rotation[2];
|
|
695
695
|
}
|
|
696
696
|
if (T.current && p.current) {
|
|
697
|
-
const J = p.current.currentTime, He = (J -
|
|
698
|
-
for (let Le = 0; Le <
|
|
699
|
-
const Y =
|
|
697
|
+
const J = p.current.currentTime, He = (J - _.current) * 1e3 - -150;
|
|
698
|
+
for (let Le = 0; Le < b.current.length; Le++) {
|
|
699
|
+
const Y = b.current[Le];
|
|
700
700
|
He >= Y.vtime && He < Y.vtime + Y.vduration && xe(Y.viseme, Y.weight ?? 1);
|
|
701
701
|
}
|
|
702
702
|
J > me.current + 0.5 && (I(), v(!1));
|
|
@@ -710,9 +710,9 @@ function yn(f) {
|
|
|
710
710
|
const Sn = ({
|
|
711
711
|
token: f,
|
|
712
712
|
agentToken: T,
|
|
713
|
-
onNavigationRequested:
|
|
713
|
+
onNavigationRequested: b,
|
|
714
714
|
avatarGender: p,
|
|
715
|
-
presetUserDetails:
|
|
715
|
+
presetUserDetails: _
|
|
716
716
|
} = {}) => {
|
|
717
717
|
const O = f ?? T ?? "", H = an(O || void 0), [he, X] = g(""), [D, me] = g(""), [I, v] = g("Ready"), [k, E] = g(!1), [U, be] = g(!1), [y, Ie] = g([]), [Ne, G] = g(""), ce = a(null), [M, B] = g(
|
|
718
718
|
() => typeof window < "u" ? window.matchMedia("(max-width: 480px)").matches : !1
|
|
@@ -798,12 +798,12 @@ const Sn = ({
|
|
|
798
798
|
}
|
|
799
799
|
if (e.navigation != null) {
|
|
800
800
|
const n = String(e.navigation).trim();
|
|
801
|
-
n !== "" && (
|
|
801
|
+
n !== "" && (b ? b(n) : window.open(n, "_blank"));
|
|
802
802
|
}
|
|
803
803
|
const t = e.ask_for || e.lead_capture?.ask_for, i = t ? String(t).trim().toLowerCase() : "", o = i === "none" || i === "<none>";
|
|
804
804
|
if (t && !o) {
|
|
805
805
|
const n = i;
|
|
806
|
-
if (
|
|
806
|
+
if (_ && (n === "email" && _.email || n === "name" && _.name || n === "phone" && _.phone))
|
|
807
807
|
return;
|
|
808
808
|
Ae(n || null), ke(n === "email" ? "Enter your email" : n === "name" ? "Enter your name" : n === "phone" ? "Enter your phone number" : "Chat with us");
|
|
809
809
|
} else (o || e.ask_for === null || e.lead_capture && e.lead_capture.ask_for === null || e.ask_for === "none") && (Ae(null), Ze !== "Chat with us" && ke("Chat with us"));
|
|
@@ -846,7 +846,7 @@ const Sn = ({
|
|
|
846
846
|
)) {
|
|
847
847
|
const n = "secret", c = Math.floor(Date.now() / 1e3).toString();
|
|
848
848
|
try {
|
|
849
|
-
const h = new TextEncoder(),
|
|
849
|
+
const h = new TextEncoder(), w = await crypto.subtle.importKey(
|
|
850
850
|
"raw",
|
|
851
851
|
h.encode(n),
|
|
852
852
|
{ name: "HMAC", hash: "SHA-256" },
|
|
@@ -854,14 +854,14 @@ const Sn = ({
|
|
|
854
854
|
["sign"]
|
|
855
855
|
), A = await crypto.subtle.sign(
|
|
856
856
|
"HMAC",
|
|
857
|
-
|
|
857
|
+
w,
|
|
858
858
|
h.encode(c)
|
|
859
859
|
), L = Array.from(new Uint8Array(A)).map((W) => W.toString(16).padStart(2, "0")).join("");
|
|
860
860
|
sessionStorage.setItem("STREAMOJI_LEADS_SESSION_LEAD_ID", L), V("[SESSION] New HMAC UID generated and saved:", L);
|
|
861
861
|
} catch (h) {
|
|
862
862
|
console.error("[SESSION] HMAC generation failed:", h);
|
|
863
|
-
const
|
|
864
|
-
sessionStorage.setItem("STREAMOJI_LEADS_SESSION_LEAD_ID",
|
|
863
|
+
const w = Math.random().toString(36) + Date.now().toString();
|
|
864
|
+
sessionStorage.setItem("STREAMOJI_LEADS_SESSION_LEAD_ID", w);
|
|
865
865
|
}
|
|
866
866
|
}
|
|
867
867
|
const i = sessionStorage.getItem("STREAMOJI_LEADS_SESSION_MESSAGES");
|
|
@@ -872,7 +872,7 @@ const Sn = ({
|
|
|
872
872
|
} catch {
|
|
873
873
|
o = [];
|
|
874
874
|
}
|
|
875
|
-
o.length === 0 &&
|
|
875
|
+
o.length === 0 && _ && (_.name || _.email) ? (o = [{ role: "user", content: `PRESET_USER_DETAILS: Name is "${_.name || ""}" , Email is "${_.email || ""}"` }], sessionStorage.setItem(
|
|
876
876
|
"STREAMOJI_LEADS_SESSION_MESSAGES",
|
|
877
877
|
JSON.stringify(o)
|
|
878
878
|
)) : i || sessionStorage.setItem(
|
|
@@ -880,7 +880,7 @@ const Sn = ({
|
|
|
880
880
|
JSON.stringify([])
|
|
881
881
|
);
|
|
882
882
|
})();
|
|
883
|
-
}, [
|
|
883
|
+
}, [_]), $(() => {
|
|
884
884
|
const e = () => {
|
|
885
885
|
gt.current = Date.now(), Pe.current && (Pe.current = !1, We(!1), Ie([]), G(""), me(""), be(!1));
|
|
886
886
|
};
|
|
@@ -969,10 +969,10 @@ const Sn = ({
|
|
|
969
969
|
v("Recording too short. Hold or click longer."), E(!1);
|
|
970
970
|
return;
|
|
971
971
|
}
|
|
972
|
-
const
|
|
972
|
+
const w = new Blob(qe.current, {
|
|
973
973
|
type: "audio/wav"
|
|
974
974
|
});
|
|
975
|
-
await Jt(
|
|
975
|
+
await Jt(w);
|
|
976
976
|
}, xt.current = Date.now(), c.start(100), it(!0), v("Listening...");
|
|
977
977
|
} catch (e) {
|
|
978
978
|
console.error("Error accessing microphone:", e), v("Mic Access Error");
|
|
@@ -991,11 +991,11 @@ const Sn = ({
|
|
|
991
991
|
if (!i) return;
|
|
992
992
|
const n = i.currentTime - o, c = Math.min(Math.max(0, n), t), h = D.trim().length;
|
|
993
993
|
if (h <= 0) return;
|
|
994
|
-
const
|
|
994
|
+
const w = Math.min(
|
|
995
995
|
Math.round(c / t * h),
|
|
996
996
|
h
|
|
997
997
|
);
|
|
998
|
-
s(
|
|
998
|
+
s(w);
|
|
999
999
|
};
|
|
1000
1000
|
return clearInterval(r.current ?? void 0), r.current = setInterval(e, 90), () => clearInterval(r.current ?? void 0);
|
|
1001
1001
|
}, [U, D, xe.current]), $(() => {
|
|
@@ -1009,10 +1009,10 @@ const Sn = ({
|
|
|
1009
1009
|
let c = 0;
|
|
1010
1010
|
const h = (L) => {
|
|
1011
1011
|
n.setUint16(c, L, !0), c += 2;
|
|
1012
|
-
},
|
|
1012
|
+
}, w = (L) => {
|
|
1013
1013
|
n.setUint32(c, L, !0), c += 4;
|
|
1014
1014
|
};
|
|
1015
|
-
|
|
1015
|
+
w(1179011410), w(i - 8), w(1163280727), w(544501094), w(16), h(1), h(t), w(e.sampleRate), w(e.sampleRate * 2 * t), h(t * 2), h(16), w(1635017060), w(i - c - 4);
|
|
1016
1016
|
const A = [];
|
|
1017
1017
|
for (let L = 0; L < t; L++) A.push(e.getChannelData(L));
|
|
1018
1018
|
let R = 0;
|
|
@@ -1041,14 +1041,14 @@ const Sn = ({
|
|
|
1041
1041
|
const c = window.atob(e), h = new Uint8Array(c.length);
|
|
1042
1042
|
for (let F = 0; F < c.length; F++)
|
|
1043
1043
|
h[F] = c.charCodeAt(F);
|
|
1044
|
-
const
|
|
1045
|
-
xe.current +=
|
|
1044
|
+
const w = await n.decodeAudioData(h.buffer.slice(0));
|
|
1045
|
+
xe.current += w.duration;
|
|
1046
1046
|
const A = n.currentTime;
|
|
1047
1047
|
let R = Se.current;
|
|
1048
1048
|
const L = !S.current;
|
|
1049
|
-
R < A && (R = A + 0.1), Se.current = R +
|
|
1049
|
+
R < A && (R = A + 0.1), Se.current = R + w.duration;
|
|
1050
1050
|
const W = n.createBufferSource();
|
|
1051
|
-
W.buffer =
|
|
1051
|
+
W.buffer = w;
|
|
1052
1052
|
let q = kt;
|
|
1053
1053
|
if ((!q || q.context !== n) && (q = n.createAnalyser(), q.fftSize = 64, q.connect(n.destination), Pt(q)), W.connect(q), le.current.push(W), u.current) {
|
|
1054
1054
|
le.current = le.current.filter((F) => F !== W);
|
|
@@ -1105,9 +1105,9 @@ const Sn = ({
|
|
|
1105
1105
|
c.readAsDataURL(n), c.onloadend = async () => {
|
|
1106
1106
|
const h = c.result.split(",")[1];
|
|
1107
1107
|
Ge(), X(""), pe.current = "", Ce.current = !1;
|
|
1108
|
-
const
|
|
1108
|
+
const w = `${ut}/stt?token=${encodeURIComponent(
|
|
1109
1109
|
O
|
|
1110
|
-
)}`, A = await fetch(
|
|
1110
|
+
)}`, A = await fetch(w, {
|
|
1111
1111
|
method: "POST",
|
|
1112
1112
|
headers: { "Content-Type": "application/json" },
|
|
1113
1113
|
body: JSON.stringify({
|
|
@@ -1281,12 +1281,12 @@ const Sn = ({
|
|
|
1281
1281
|
v("Agent Failed"), E(!1);
|
|
1282
1282
|
return;
|
|
1283
1283
|
}
|
|
1284
|
-
const
|
|
1284
|
+
const w = h.getReader();
|
|
1285
1285
|
u.current = !1;
|
|
1286
1286
|
const A = new TextDecoder();
|
|
1287
1287
|
let R = "";
|
|
1288
1288
|
for (; ; ) {
|
|
1289
|
-
const { done: L, value: W } = await
|
|
1289
|
+
const { done: L, value: W } = await w.read();
|
|
1290
1290
|
V(
|
|
1291
1291
|
`[SSE] Chunk received. done=${L}, length=${W?.length || 0}`
|
|
1292
1292
|
), W && (R += A.decode(W, { stream: !0 }));
|
|
@@ -1656,12 +1656,16 @@ const Sn = ({
|
|
|
1656
1656
|
] });
|
|
1657
1657
|
}, Tn = ({
|
|
1658
1658
|
token: f,
|
|
1659
|
-
|
|
1659
|
+
avatarGender: T,
|
|
1660
|
+
onNavigationRequested: b,
|
|
1661
|
+
presetUserDetails: p
|
|
1660
1662
|
}) => /* @__PURE__ */ l(
|
|
1661
1663
|
Sn,
|
|
1662
1664
|
{
|
|
1663
1665
|
token: f,
|
|
1664
|
-
onNavigationRequested:
|
|
1666
|
+
onNavigationRequested: b,
|
|
1667
|
+
avatarGender: T,
|
|
1668
|
+
presetUserDetails: p
|
|
1665
1669
|
}
|
|
1666
1670
|
);
|
|
1667
1671
|
export {
|