bloby-bot 0.51.2 → 0.51.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{c as e,r as t,t as n}from"./jsx-runtime-C0W9Wf2W.js";import{n as r,r as i,t as a}from"./bloby-DX6-xoTY.js";var o=e(t(),1),s=n(),c=({code:e,language:t,raw:n,className:c,startLine:l,lineNumbers:u,...d})=>{let{shikiTheme:f}=(0,o.useContext)(i),p=r(),[m,h]=(0,o.useState)(n);return(0,o.useEffect)(()=>{if(!p){h(n);return}let r=p.highlight({code:e,language:t,themes:f},e=>{h(e)});r&&h(r)},[e,t,f,p,n]),(0,s.jsx)(a,{className:c,language:t,lineNumbers:u,result:m,startLine:l,...d})};export{c as HighlightedCodeBlockBody};
1
+ import{c as e,r as t,t as n}from"./jsx-runtime-C0W9Wf2W.js";import{n as r,r as i,t as a}from"./bloby-vi0Xitb-.js";var o=e(t(),1),s=n(),c=({code:e,language:t,raw:n,className:c,startLine:l,lineNumbers:u,...d})=>{let{shikiTheme:f}=(0,o.useContext)(i),p=r(),[m,h]=(0,o.useState)(n);return(0,o.useEffect)(()=>{if(!p){h(n);return}let r=p.highlight({code:e,language:t,themes:f},e=>{h(e)});r&&h(r)},[e,t,f,p,n]),(0,s.jsx)(a,{className:c,language:t,lineNumbers:u,result:m,startLine:l,...d})};export{c as HighlightedCodeBlockBody};
@@ -0,0 +1 @@
1
+ import{i as e}from"./bloby-vi0Xitb-.js";export{e as Mermaid};
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content" />
6
6
  <title>Bloby Chat</title>
7
- <script type="module" crossorigin src="/bloby/assets/bloby-DX6-xoTY.js"></script>
7
+ <script type="module" crossorigin src="/bloby/assets/bloby-vi0Xitb-.js"></script>
8
8
  <link rel="modulepreload" crossorigin href="/bloby/assets/jsx-runtime-C0W9Wf2W.js">
9
9
  <link rel="modulepreload" crossorigin href="/bloby/assets/globals-DNO3ilRx.js">
10
10
  <link rel="stylesheet" crossorigin href="/bloby/assets/globals-D60b-8LY.css">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bloby-bot",
3
- "version": "0.51.2",
3
+ "version": "0.51.3",
4
4
  "releaseNotes": [
5
5
  "1. New Morphy animation system: config-driven sprites loaded from /morphy/*.json",
6
6
  "2. Swapped teleporting (splash) and headphones (bubble + chat) to the new format",
@@ -32,7 +32,6 @@ function BlobyApp() {
32
32
 
33
33
  // Recording state (for header animation)
34
34
  const [chatRecording, setChatRecording] = useState(false);
35
- const [showHpAnim, setShowHpAnim] = useState(false);
36
35
 
37
36
  // Push notifications
38
37
  const [pushState, setPushState] = useState<'loading' | 'unsupported' | 'denied' | 'subscribed' | 'unsubscribed'>('loading');
@@ -361,15 +360,7 @@ function BlobyApp() {
361
360
 
362
361
  {/* Mascot / headphones animation */}
363
362
  <div className="relative ml-1.5 shrink-0">
364
- {showHpAnim ? (
365
- <HeadphonesAnimation
366
- recording={chatRecording}
367
- height={36}
368
- onDone={() => setShowHpAnim(false)}
369
- />
370
- ) : (
371
- <img src="/bloby.png" alt={botName} className="h-9 w-auto" />
372
- )}
363
+ <HeadphonesAnimation recording={chatRecording} height={36} />
373
364
  </div>
374
365
 
375
366
  {/* Name + status line */}
@@ -529,10 +520,7 @@ function BlobyApp() {
529
520
  });
530
521
  }}
531
522
  onAudioReady={addPendingAudio}
532
- onRecordingChange={(r) => {
533
- setChatRecording(r);
534
- if (r) setShowHpAnim(true);
535
- }}
523
+ onRecordingChange={setChatRecording}
536
524
  />
537
525
  </div>
538
526
 
@@ -102,12 +102,28 @@ export default function HeadphonesAnimation({ recording, height = 36, onDone }:
102
102
  const ctx = canvas.getContext('2d')!;
103
103
  const state = stateRef.current;
104
104
 
105
- if (state === 'idle' || !sprite || !cfg) {
105
+ if (!sprite || !cfg) {
106
106
  ctx.clearRect(0, 0, displayW, displayH);
107
107
  rafRef.current = requestAnimationFrame(tick);
108
108
  return;
109
109
  }
110
110
 
111
+ if (state === 'idle') {
112
+ // Hold the configured idle frame so the chat header shows a real visual at rest.
113
+ const cols = cfg.grid.cols;
114
+ const fw = cfg.frame.w;
115
+ const fh = cfg.frame.h;
116
+ const idleFrame = cfg.clips.idle.from;
117
+ const col = idleFrame % cols;
118
+ const row = Math.floor(idleFrame / cols);
119
+ ctx.clearRect(0, 0, displayW, displayH);
120
+ ctx.imageSmoothingEnabled = true;
121
+ ctx.imageSmoothingQuality = 'high';
122
+ ctx.drawImage(sprite, col * fw, row * fh, fw, fh, 0, 0, displayW, displayH);
123
+ rafRef.current = requestAnimationFrame(tick);
124
+ return;
125
+ }
126
+
111
127
  const baseFps = cfg.fps;
112
128
  const fps =
113
129
  state === 'activating' || state === 'activating_then_deactivate'
@@ -1 +0,0 @@
1
- import{i as e}from"./bloby-DX6-xoTY.js";export{e as Mermaid};