diff --git a/frontend/dashboard.css b/frontend/dashboard.css
index cdc3616..315f17a 100644
--- a/frontend/dashboard.css
+++ b/frontend/dashboard.css
@@ -310,6 +310,12 @@ textarea { resize: vertical; min-height: 120px; }
#cmd-results { flex:1; min-height:0; overflow-y:auto; max-height:none; overscroll-behavior:contain; padding-bottom:env(safe-area-inset-bottom); }
.create-issue-panel { width:100%; border-left:0; padding:14px; }
.pull-sheet-panel { width:100%; border-left:0; padding:14px; }
+ .issue-sheet-panel.composer-keyboard-active,
+ .pull-sheet-panel.composer-keyboard-active,
+ .update-sheet-panel.composer-keyboard-active { position:fixed; top:var(--composer-viewport-top,0px); right:0; height:var(--composer-viewport-height,100dvh); overscroll-behavior:contain; padding-bottom:calc(14px + env(safe-area-inset-bottom)); }
+ .composer-keyboard-active .issue-comment-composer,
+ .composer-keyboard-active .pull-comment-composer,
+ .composer-keyboard-active .update-reply { scroll-margin-block:12px; padding-bottom:env(safe-area-inset-bottom); }
.mobile-task-dock { position:fixed; inset:auto 0 0; z-index:45; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:2px; padding:6px 8px; padding-bottom:env(safe-area-inset-bottom); border-top:1px solid #2a496e; background:rgba(11,21,38,.98); backdrop-filter:blur(12px); }
}
.obi { width:14px; height:14px; background: url('data:image/svg+xml;utf8,') center/contain no-repeat; display:inline-block; }
diff --git a/frontend/dashboard.js b/frontend/dashboard.js
index 47bb3e9..3d73f55 100644
--- a/frontend/dashboard.js
+++ b/frontend/dashboard.js
@@ -1,6 +1,16 @@
(function(){
const qs = (s, el=document) => el.querySelector(s);
const fmt = (d) => new Date(d).toLocaleString();
+ const mobileComposerViewport = createMobileComposerViewport({
+ viewport: window.visualViewport,
+ mediaQuery: window.matchMedia('(max-width: 600px)'),
+ entries: [
+ { panel:qs('#issue-sheet .issue-sheet-panel'), workspace:qs('.issue-comment-composer'), composer:qs('#issue-comment'), submit:qs('#send-issue-comment'), status:qs('#issue-comment-status') },
+ { panel:qs('#pull-sheet .pull-sheet-panel'), workspace:qs('.pull-comment-composer'), composer:qs('#pull-comment'), submit:qs('#send-pull-comment'), status:qs('#pull-comment-status') },
+ { panel:qs('#update-sheet .update-sheet-panel'), workspace:qs('.update-reply'), composer:qs('#update-reply'), submit:qs('#send-update-reply'), status:qs('#update-reply-status') },
+ ],
+ });
+ mobileComposerViewport.start();
[
[qs('.app-menu'), qs('#app-menu-toggle')],
[qs('.work-settings'), qs('#work-settings-toggle')],
@@ -515,6 +525,8 @@
qs('#retry-work-route').addEventListener('click', () => workRoute.sync());
function closeOpenWorkSheets() {
+ ['#issue-sheet .issue-sheet-panel', '#pull-sheet .pull-sheet-panel', '#update-sheet .update-sheet-panel']
+ .forEach(selector => mobileComposerViewport.close(qs(selector)));
['#issue-sheet', '#pull-sheet', '#review-sheet', '#update-sheet'].forEach(selector =>
qs(selector).classList.remove('open')
);
@@ -1206,6 +1218,7 @@
workRoute.close();
return;
}
+ mobileComposerViewport.close(qs('#issue-sheet .issue-sheet-panel'));
qs('#issue-sheet').classList.remove('open');
selectedIssue = null;
selectedIssueDetail = null;
@@ -1336,6 +1349,7 @@
workRoute.close();
return;
}
+ mobileComposerViewport.close(qs('#pull-sheet .pull-sheet-panel'));
qs('#pull-sheet').classList.remove('open');
selectedPull = null;
selectedPullDetail = null;
@@ -1749,6 +1763,7 @@
workRoute.close();
return;
}
+ mobileComposerViewport.close(qs('#update-sheet .update-sheet-panel'));
qs('#update-sheet').classList.remove('open');
selectedUpdate = null;
if (restoreTrigger && updateTrigger?.isConnected) updateTrigger.focus();
diff --git a/frontend/index.html b/frontend/index.html
index 2e6aa8f..8e02503 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -536,6 +536,7 @@
+