@bobfrankston/rmfmail 1.1.194 → 1.1.195

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/client/app.ts CHANGED
@@ -160,8 +160,8 @@ function updateBadge(count: number): void {
160
160
  link.href = dataUrl;
161
161
 
162
162
  // Also push to the Windows taskbar overlay via msger's IPC helper —
163
- // no-op on Linux/Mac. For count=0, render a dedicated "no-overlay"
164
- // icon that's all-transparent so the base icon shows cleanly.
163
+ // no-op on Linux/Mac. For count=0, clear the overlay so the base icon
164
+ // shows cleanly.
165
165
  try {
166
166
  // The injected host bridge is `window.mailxapi`, NOT `window.msgapi`.
167
167
  // The old `msgapi` reference was always undefined, so the taskbar
@@ -171,8 +171,27 @@ function updateBadge(count: number): void {
171
171
  const hostApi: any = (window as any).mailxapi;
172
172
  if (hostApi?.setTaskbarOverlay) {
173
173
  if (count > 0) {
174
- // strip "data:image/png;base64," prefix base64 only
175
- const b64 = dataUrl.split(",")[1] || "";
174
+ // BADGE-ONLY overlay. SetOverlayIcon composites the supplied
175
+ // icon onto the bottom-right corner of the taskbar button —
176
+ // the base envelope icon is already there. Sending the full
177
+ // envelope+badge canvas (favicon) drew a SECOND tiny envelope
178
+ // in the corner on top of the big one (Bob 2026-05-29). Render
179
+ // just the red count pill on a transparent field so only the
180
+ // number is overlaid. Filled circle spans most of the 32×32 so
181
+ // it stays legible after the corner downscale.
182
+ const bc = document.createElement("canvas");
183
+ bc.width = 32; bc.height = 32;
184
+ const bx = bc.getContext("2d")!;
185
+ bx.fillStyle = "#e33";
186
+ bx.beginPath();
187
+ bx.arc(16, 16, 15, 0, Math.PI * 2);
188
+ bx.fill();
189
+ bx.fillStyle = "#fff";
190
+ bx.font = "bold 20px sans-serif";
191
+ bx.textAlign = "center";
192
+ bx.textBaseline = "middle";
193
+ bx.fillText(count > 99 ? "99+" : String(count), 16, 17);
194
+ const b64 = bc.toDataURL("image/png").split(",")[1] || "";
176
195
  hostApi.setTaskbarOverlay(b64, `${count} unread`);
177
196
  } else {
178
197
  hostApi.setTaskbarOverlay("", "");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/rmfmail",
3
- "version": "1.1.194",
3
+ "version": "1.1.195",
4
4
  "description": "Local-first email client with IMAP sync and standalone native app",
5
5
  "type": "module",
6
6
  "main": "bin/mailx.js",
@@ -38,7 +38,7 @@
38
38
  "dependencies": {
39
39
  "@bobfrankston/iflow-direct": "^0.1.51",
40
40
  "@bobfrankston/mailx-host": "^0.1.13",
41
- "@bobfrankston/mailx-imap": "^0.1.74",
41
+ "@bobfrankston/mailx-imap": "^0.1.75",
42
42
  "@bobfrankston/mailx-store-web": "^0.1.26",
43
43
  "@bobfrankston/mailx-sync": "^0.1.19",
44
44
  "@bobfrankston/miscinfo": "^1.0.12",
@@ -118,7 +118,7 @@
118
118
  "dependencies": {
119
119
  "@bobfrankston/iflow-direct": "^0.1.51",
120
120
  "@bobfrankston/mailx-host": "^0.1.13",
121
- "@bobfrankston/mailx-imap": "^0.1.74",
121
+ "@bobfrankston/mailx-imap": "^0.1.75",
122
122
  "@bobfrankston/mailx-store-web": "^0.1.26",
123
123
  "@bobfrankston/mailx-sync": "^0.1.19",
124
124
  "@bobfrankston/miscinfo": "^1.0.12",