diff --git a/frontend/dashboard.css b/frontend/dashboard.css index e89b25b..d1948d4 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -633,8 +633,19 @@ textarea { resize: vertical; min-height: 120px; } .issue-evidence-note { display:grid; gap:6px; min-width:0; } .issue-evidence-note textarea { box-sizing:border-box; width:100%; min-height:72px; padding:10px; resize:vertical; border:1px solid #2a496e; border-radius:8px; background:#07101d; color:#e5e7eb; font:inherit; } .issue-evidence-note textarea:focus-visible { outline:2px solid #60a5fa; outline-offset:2px; } -.issue-evidence-review-actions { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; } +.issue-evidence-review-actions { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; } .issue-evidence-review-actions button { min-width:44px; min-height:44px; } +.issue-evidence-editor { position:fixed; inset:0; z-index:70; display:grid; place-items:end center; overflow-x:hidden; background:rgba(2,6,15,.92); } +.issue-evidence-editor[hidden] { display:none; } +.issue-evidence-editor-panel { box-sizing:border-box; width:min(560px,100%); max-height:100dvh; overflow:auto; overflow-x:hidden; display:grid; gap:12px; padding:16px; padding-bottom:calc(16px + env(safe-area-inset-bottom)); background:#0b1526; border:1px solid #2a496e; border-radius:14px 14px 0 0; } +.issue-evidence-editor-panel header { display:flex; align-items:start; justify-content:space-between; gap:12px; } +.issue-evidence-editor-panel h3 { margin:0 0 4px; } +.issue-evidence-editor canvas { display:block; max-width:100%; width:100%; max-height:60dvh; object-fit:contain; touch-action:none; border:1px solid #365b86; border-radius:8px; background:#020617; } +.issue-evidence-editor-tools { display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:8px; } +.issue-evidence-editor button { min-width:44px; min-height:44px; } +.issue-evidence-editor button[aria-pressed="true"] { border-color:#60a5fa; background:#173a64; color:#fff; } +.issue-evidence-editor-apply { width:100%; } +@media(max-width:320px) { .issue-evidence-editor-panel { padding:12px; } .issue-evidence-editor-tools { grid-template-columns:repeat(2,minmax(0,1fr)); } } .create-issue-repository-more { min-height:44px; width:100%; } .create-issue-repository-picker { min-width:0; display:grid; gap:8px; } .create-issue-repository-picker input { min-width:0; min-height:44px; width:100%; padding:8px; border-radius:8px; border:1px solid #1f3a5f; background:#0b1526; color:#e5e7eb; } diff --git a/frontend/dashboard.js b/frontend/dashboard.js index a5e1f39..6653518 100644 --- a/frontend/dashboard.js +++ b/frontend/dashboard.js @@ -487,6 +487,20 @@ status: qs('#create-issue-attachment-status'), readyMessage: 'Screenshot ready to file with this issue.', removedMessage: 'Screenshot removed. Your issue draft is unchanged.', + editor: { + document, + edit: qs('#edit-create-issue-attachment'), + dialog: qs('#issue-evidence-editor'), + canvas: qs('#issue-evidence-editor-canvas'), + exportCanvas: qs('#issue-evidence-editor-export'), + crop: qs('#crop-issue-evidence'), + redact: qs('#redact-issue-evidence'), + undo: qs('#undo-issue-evidence-edit'), + reset: qs('#reset-issue-evidence-edit'), + cancel: qs('#cancel-issue-evidence-edit'), + apply: qs('#apply-issue-evidence-edit'), + status: qs('#issue-evidence-editor-status'), + }, createObjectURL: file => URL.createObjectURL(file), revokeObjectURL: url => URL.revokeObjectURL(url), readDataUrl: file => new Promise((resolve, reject) => { diff --git a/frontend/index.html b/frontend/index.html index f239176..653fafd 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -769,6 +769,7 @@
+
@@ -826,6 +827,24 @@
+