@bobfrankston/rmfmail 1.1.186 → 1.1.187

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
@@ -3425,15 +3425,40 @@ document.addEventListener("pointerdown", (e) => {
3425
3425
  // its own handler will run after this and toggle, otherwise we'd
3426
3426
  // close-then-reopen-then-close.
3427
3427
  if (target.closest("#btn-view, #btn-settings, #rail-view, #rail-settings, #rail-menu-backdrop")) return;
3428
- if (viewDropdown && !viewDropdown.hidden && !target.closest("#view-menu") && !target.closest("#view-dropdown")) {
3429
- viewDropdown.hidden = true;
3428
+ // Re-query the dropdown elements FRESH on every pointerdown rather than
3429
+ // using the module-load-time references. If anything re-rendered the
3430
+ // toolbar (theme change, update banner, settings-applied repaint) the
3431
+ // cached node is detached and `.hidden = true` on it does nothing while
3432
+ // the live element stays visible — the "menu won't close until I restart
3433
+ // the app" bug (Bob 2026-05-28). Querying live makes it robust against
3434
+ // element replacement.
3435
+ const viewDd = document.getElementById("view-dropdown");
3436
+ const settingsDd2 = document.getElementById("settings-dropdown");
3437
+ if (viewDd && !viewDd.hidden && !target.closest("#view-menu") && !target.closest("#view-dropdown")) {
3438
+ hideDropdownHard(viewDd);
3430
3439
  }
3431
- if (settingsDropdown && !settingsDropdown.hidden && !target.closest("#settings-menu") && !target.closest("#settings-dropdown")) {
3432
- settingsDropdown.hidden = true;
3440
+ if (settingsDd2 && !settingsDd2.hidden && !target.closest("#settings-menu") && !target.closest("#settings-dropdown")) {
3441
+ hideDropdownHard(settingsDd2);
3433
3442
  }
3443
+ document.getElementById("rail-menu-backdrop")?.remove();
3434
3444
  refreshToolbarOverlayShield();
3435
3445
  }, true);
3436
3446
 
3447
+ /** Hide a toolbar/rail dropdown so it STAYS hidden regardless of how it was
3448
+ * opened. `.hidden = true` alone isn't enough when the rail path left inline
3449
+ * `position:fixed; display/visibility` styles on the element — an inline
3450
+ * `display` would override the `[hidden]` UA rule and the menu would stay
3451
+ * visible until an app restart cleared the element (Bob 2026-05-28 "click
3452
+ * outside the settings menu but it does not go away"). Clear the inline
3453
+ * style block too so nothing can keep it on screen. */
3454
+ function hideDropdownHard(dd: HTMLElement): void {
3455
+ dd.hidden = true;
3456
+ // Wipe rail-modal inline styles (position/top/left/transform/zIndex/…).
3457
+ // Safe for the toolbar path too — its position comes from CSS classes,
3458
+ // not inline styles, so clearing inline leaves it correct.
3459
+ dd.style.cssText = "";
3460
+ }
3461
+
3437
3462
  // Click-to-dismiss for the toolbar dropdowns relies on `pointerdown` firing
3438
3463
  // on the parent document. Clicks inside the compose iframe stay in the
3439
3464
  // iframe's document and never bubble out, so a Settings/View menu opened
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/rmfmail",
3
- "version": "1.1.186",
3
+ "version": "1.1.187",
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.69",
41
+ "@bobfrankston/mailx-imap": "^0.1.70",
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.69",
121
+ "@bobfrankston/mailx-imap": "^0.1.70",
122
122
  "@bobfrankston/mailx-store-web": "^0.1.26",
123
123
  "@bobfrankston/mailx-sync": "^0.1.19",
124
124
  "@bobfrankston/miscinfo": "^1.0.12",