fix(notifications): reserve grid space for overlay thumbnail so it can't overlap text

The thumbnail was 100px wide but its grid column only reserved 56px, so on
macOS the image spilled ~44px into the content column and overlapped the
title/body. Reserve a minmax(0, 100px) track for the image and make the
image fluid (width: 100%; max-width: 100px; aspect-ratio) so it shrinks to
fit on narrow notifications instead of overlapping the text.
This commit is contained in:
2026-06-05 01:33:58 -07:00
parent 71efbd1bc1
commit a3b907adff
3 changed files with 76 additions and 5 deletions
@@ -154,6 +154,63 @@ test('macOS keeps visible overlay hidden while tracker is not ready and emits on
assert.ok(!calls.includes('show'));
});
test('macOS dismisses overlay loading OSD when tracker recovers', () => {
const { window, calls } = createMainWindowRecorder();
let trackerWarning = false;
const osdMessages: string[] = [];
const dismissedOsds: string[] = [];
let tracking = false;
let geometry: WindowTrackerStub['getGeometry'] extends () => infer T ? T : never = null;
const tracker: WindowTrackerStub = {
isTracking: () => tracking,
getGeometry: () => geometry,
isTargetWindowFocused: () => tracking,
};
const run = () =>
updateVisibleOverlayVisibility({
visibleOverlayVisible: true,
mainWindow: window as never,
windowTracker: tracker as never,
trackerNotReadyWarningShown: trackerWarning,
setTrackerNotReadyWarningShown: (shown: boolean) => {
trackerWarning = shown;
},
updateVisibleOverlayBounds: () => {
calls.push('update-bounds');
},
ensureOverlayWindowLevel: () => {
calls.push('ensure-level');
},
syncPrimaryOverlayWindowLayer: () => {
calls.push('sync-layer');
},
enforceOverlayLayerOrder: () => {
calls.push('enforce-order');
},
syncOverlayShortcuts: () => {
calls.push('sync-shortcuts');
},
isMacOSPlatform: true,
showOverlayLoadingOsd: (message: string) => {
osdMessages.push(message);
},
dismissOverlayLoadingOsd: () => {
dismissedOsds.push('dismiss');
},
} as never);
run();
tracking = true;
geometry = { x: 0, y: 0, width: 1280, height: 720 };
run();
assert.deepEqual(osdMessages, ['Overlay loading...']);
assert.deepEqual(dismissedOsds, ['dismiss']);
assert.equal(trackerWarning, false);
assert.ok(calls.includes('show-inactive'));
});
test('tracked non-macOS overlay stays hidden while tracker is not ready', () => {
const { window, calls } = createMainWindowRecorder();
let trackerWarning = false;