diff --git a/README.md b/README.md index 900829c..df98c4e 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,11 @@ python3 -m pip install -r requirements.txt Point the dashboard at the Gitea server root (without `/api/v1`) and provide a token that can read dashboard data, update the authenticated user's notification -threads, create issue comments, and submit pull-request reviews. Pull-request -replies use Gitea's issue-comment API; native Comment, Approve, and Request changes -reviews require repository write permission. Serve the dashboard only to trusted -users on its own origin; cross-origin API +threads, create issue comments, close assigned issues, and submit pull-request +reviews. Pull-request replies and mobile My Work issue comments use Gitea's +issue-comment API; closing an assigned issue and native Comment, Approve, and +Request changes reviews require repository write permission. Serve the dashboard +only to trusted users on its own origin; cross-origin API access is intentionally disabled. Then start the API and bundled frontend: ```bash diff --git a/frontend/index.html b/frontend/index.html index cc5a5b7..c3ab279 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -116,6 +116,19 @@ textarea { resize: vertical; min-height: 120px; } .update-sheet-actions button, .update-sheet-actions a { min-height:44px; display:flex; align-items:center; justify-content:center; } .update-sheet-actions a { border:1px solid #60a5fa; border-radius:10px; font-weight:700; } .update-retry { min-height:44px; width:100%; margin-top:10px; } +.issue-sheet { position:fixed; inset:0; z-index:56; display:none; justify-content:flex-end; background:rgba(5,12,21,.72); backdrop-filter:blur(4px); } +.issue-sheet.open { display:flex; } +.issue-sheet-panel { width:min(560px,100%); height:100%; overflow:auto; padding:18px; background:#0b1526; border-left:1px solid #2a496e; } +.issue-sheet-header { display:flex; align-items:center; justify-content:space-between; gap:10px; } +.issue-sheet-header button { min-height:44px; } +.issue-sheet-content { overflow-wrap:anywhere; white-space:pre-wrap; } +.issue-comment { padding:10px 0; border-bottom:1px solid #1b2d45; } +.issue-comment-composer { display:grid; gap:8px; margin-top:16px; } +.issue-comment-composer button { min-height:44px; width:100%; } +.issue-sheet-actions { position:sticky; bottom:0; z-index:3; display:grid; gap:8px; margin-top:14px; padding:10px 4px; padding-bottom:calc(10px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-top:1px solid #2a496e; } +.issue-sheet-actions button, .issue-sheet-actions a { min-height:44px; display:flex; align-items:center; justify-content:center; } +.issue-sheet-actions a { border:1px solid #60a5fa; border-radius:10px; font-weight:700; } +.issue-retry { min-height:44px; width:100%; margin-top:10px; } @media (max-width: 600px) { header { align-items:flex-start; } .my-work { margin:0; } @@ -124,6 +137,7 @@ textarea { resize: vertical; min-height: 120px; } .work-filter { flex:1 1 calc(50% - 8px); } .review-sheet-panel { width:100%; border-left:0; padding:14px; } .update-sheet-panel { width:100%; border-left:0; padding:14px; } + .issue-sheet-panel { width:100%; border-left:0; padding:14px; } } .obi { width:14px; height:14px; background: url('data:image/svg+xml;utf8,') center/contain no-repeat; display:inline-block; } .footer { padding: 12px; text-align: center; color:#4e6b8a; font-size:12px; } @@ -250,6 +264,34 @@ textarea { resize: vertical; min-height: 120px; } + +