@bobfrankston/rmfmail 1.2.70 → 1.2.72

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.
@@ -173,7 +173,12 @@ async function buildAll() {
173
173
  }
174
174
  const failed = results.filter(r => !r.ok).length;
175
175
  if (failed) process.exit(1);
176
- stampAll();
176
+ // NOTE: do NOT stamp `?v=` cache-bust query strings onto the bundle URLs.
177
+ // msger's custom protocol can't resolve `app.bundle.js?v=<hash>` — the
178
+ // dynamic import() hangs forever (never resolves OR rejects), so the whole
179
+ // app dies: no version, no interactivity, only the boot-snapshot paint
180
+ // (Bob 2026-06-26 "very broken, no version"). Cache-busting must use a real
181
+ // filename change (hashed filename) if revisited, never a query string.
177
182
  console.log(`build-bundles: done in ${Date.now() - t0} ms`);
178
183
  }
179
184
 
@@ -2749,6 +2749,7 @@ var init_folder_picker = __esm({
2749
2749
  var message_list_exports = {};
2750
2750
  __export(message_list_exports, {
2751
2751
  clearSearchMode: () => clearSearchMode,
2752
+ exitMultiSelect: () => exitMultiSelect,
2752
2753
  getCurrentFocused: () => getCurrentFocused,
2753
2754
  getSelectedMessages: () => getSelectedMessages,
2754
2755
  initMessageList: () => initMessageList,
@@ -3891,7 +3892,7 @@ function escapeHtml2(s) {
3891
3892
  div.textContent = s;
3892
3893
  return div.innerHTML;
3893
3894
  }
3894
- var onMessageSelect, currentAccountId2, currentFolderId, currentSpecialUse, lastClickedRow, currentPage, totalMessages, loading, unifiedMode, searchMode, liveFilterText, currentSearchQuery, wasUnifiedBeforeSearch, showToInsteadOfFrom, touchWasScroll, currentSort, currentSortDir, loadGen, listCache, CACHE_KEY_UNIFIED, positionMemory, POSITION_STORAGE_KEY, focusedRow, rowByKey, prioritySenders, priorityDomains, timeFmt, dateFmt, dateFmtSameYear, MessageRow;
3895
+ var onMessageSelect, currentAccountId2, currentFolderId, currentSpecialUse, lastClickedRow, currentPage, totalMessages, loading, unifiedMode, searchMode, liveFilterText, currentSearchQuery, wasUnifiedBeforeSearch, showToInsteadOfFrom, touchWasScroll, lastPointerWasTouch, currentSort, currentSortDir, loadGen, listCache, CACHE_KEY_UNIFIED, positionMemory, POSITION_STORAGE_KEY, focusedRow, rowByKey, prioritySenders, priorityDomains, timeFmt, dateFmt, dateFmtSameYear, MessageRow;
3895
3896
  var init_message_list = __esm({
3896
3897
  "client/components/message-list.js"() {
3897
3898
  "use strict";
@@ -3911,6 +3912,12 @@ var init_message_list = __esm({
3911
3912
  wasUnifiedBeforeSearch = false;
3912
3913
  showToInsteadOfFrom = false;
3913
3914
  touchWasScroll = false;
3915
+ lastPointerWasTouch = false;
3916
+ if (typeof document !== "undefined") {
3917
+ document.addEventListener("pointerdown", (e) => {
3918
+ lastPointerWasTouch = e.pointerType === "touch";
3919
+ }, true);
3920
+ }
3914
3921
  currentSort = "date";
3915
3922
  currentSortDir = "desc";
3916
3923
  loadGen = 0;
@@ -4239,8 +4246,7 @@ var init_message_list = __esm({
4239
4246
  return;
4240
4247
  }
4241
4248
  if (body?.classList.contains("multi-select-on")) {
4242
- const isTouch = !!window.matchMedia?.("(pointer: coarse)")?.matches;
4243
- if (!isTouch && !e.ctrlKey && !e.metaKey) {
4249
+ if (!lastPointerWasTouch && !e.ctrlKey && !e.metaKey) {
4244
4250
  exitMultiSelect();
4245
4251
  focusRow(this);
4246
4252
  lastClickedRow = this.el;
@@ -8798,11 +8804,6 @@ document.getElementById("btn-spam-report")?.addEventListener("click", async () =
8798
8804
  }
8799
8805
  });
8800
8806
  document.getElementById("btn-compose")?.addEventListener("click", () => openCompose("new"));
8801
- document.getElementById("btn-selection")?.addEventListener("click", (e) => {
8802
- e.stopPropagation();
8803
- const r = e.currentTarget.getBoundingClientRect();
8804
- void showSelectionMenu(r.left, r.bottom + 2);
8805
- });
8806
8807
  document.getElementById("btn-mark-unread")?.addEventListener("click", () => {
8807
8808
  const sel = getCurrentFocused();
8808
8809
  if (!sel) return;
@@ -9930,6 +9931,15 @@ document.addEventListener("keydown", (e) => {
9930
9931
  e.preventDefault();
9931
9932
  applyFontSize(next);
9932
9933
  }
9934
+ if (e.key === "Escape" && document.getElementById("ml-body")?.classList.contains("multi-select-on")) {
9935
+ const t = e.target;
9936
+ const tag = t?.tagName;
9937
+ if (tag !== "INPUT" && tag !== "TEXTAREA" && tag !== "SELECT" && !t?.isContentEditable) {
9938
+ e.preventDefault();
9939
+ exitMultiSelect();
9940
+ return;
9941
+ }
9942
+ }
9933
9943
  if (e.ctrlKey && e.key === "a") {
9934
9944
  const t = e.target;
9935
9945
  const tag = t?.tagName;