From 4c7d8e3f5668d4b43b4c826016dd4a9d097433d0 Mon Sep 17 00:00:00 2001 From: Local Dev Date: Thu, 24 Sep 2026 22:30:10 +0200 Subject: [PATCH] =?UTF-8?q?fix(aegis):=200.9.8=20=E2=80=94=20address=20row?= =?UTF-8?q?=20columns,=20resizable=20QR,=20inline=20copy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The row's grid template still described the pre-0.9.2 layout — six columns including an address cell that no longer exists — while the row renders five. Every cell therefore sat one column left of where it belonged: copy landed in the label's space, the amount in the old label column, and the ⋯ in the amount column instead of the edge. That is the whole cause of "the copy button collides with the amount" and "the last edit button is not on the edge". Now five columns for five cells: icon · label · copy · amount · menu, 8px gaps. The label is the flexible one, left-aligned, so it takes the slack and truncates rather than squeezing the number. Verified at 520, 400 and 300px: no cell overlap at any width, no row overflow, and the amount never clips — only long labels give way. The copy glyph was the 📋 emoji, which has no glyph in this platform's font stack and rendered as a tofu box that read like a stray character stuck to the balance. Replaced with an inline SVG in both the row and the address card. Both confirmation flashes now swap innerHTML rather than textContent, which would have deleted the SVG and left a blank square. Address card: the address and its copy button share one row, so the button sits at the end of the value it copies. The address clamps to two lines and truncates beyond that instead of growing the card in a narrow sidebar. The QR is always visible and the panel is drag-resizable from a grip under it (pointer events, arrow keys as a non-mouse path, clamped 90–420px, capped against the panel's own width so a size set on a wide sidebar cannot overflow a narrow one, persisted). That replaces the 0.9.2 show/hide toggle — a size set once beats a binary, and it frees the row Copy was sharing with a QR button. drawQr was setting cv.style.width/height, which would have reset the panel to its intrinsic size on every redraw — i.e. every time the address changed. It now sets only the backing store and re-asserts the user's size after drawing. "Next unused address" is correct at the adapter level on both mainnet and chipnet (tested: the index advances and the address changes), so the reported failure is elsewhere. The handler was discarding the error and flashing a bare "Failed", which is why there was nothing to diagnose; it now surfaces the real message. --- bundled-addons/aegis/addon.json | 2 +- bundled-addons/aegis/panel.html | 89 ++++++++++++++++++------ bundled-addons/aegis/panel.js | 119 +++++++++++++++++++++++++------- 3 files changed, 164 insertions(+), 46 deletions(-) diff --git a/bundled-addons/aegis/addon.json b/bundled-addons/aegis/addon.json index edd46f96..b96c7eb5 100644 --- a/bundled-addons/aegis/addon.json +++ b/bundled-addons/aegis/addon.json @@ -1,7 +1,7 @@ { "id": "aegis", "name": "Aegis Wallet", - "version": "0.9.7", + "version": "0.9.8", "category": "plugin", "description": "Multi-chain wallet (BCH, BTC, TRX, ETH, SOL, SC, DGB) derived from your Theseus vault. Dapps get window.bitcoincash on .x sites; window.tronWeb / window.tronLink / window.ethereum / window.solana on any https page.", "author": "Silent Mode", diff --git a/bundled-addons/aegis/panel.html b/bundled-addons/aegis/panel.html index f4be4724..a0e7f1e5 100644 --- a/bundled-addons/aegis/panel.html +++ b/bundled-addons/aegis/panel.html @@ -220,6 +220,33 @@ .actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 10px; } .qrwrap { display: grid; place-items: center; padding: 12px; background: #fff; border-radius: 10px; margin-top: 12px; } .qrwrap[hidden] { display: none; } + /* The canvas scales to whatever height the user dragged the panel to, + and never wider than the sidebar. aspect-ratio keeps it square. */ + .qrwrap canvas { width: auto; height: auto; max-width: 100%; + aspect-ratio: 1 / 1; image-rendering: pixelated; } + /* Drag handle under the QR. A thin strip rather than a corner grip, so + it stays reachable at any sidebar width. */ + .qrgrip { height: 14px; margin: 2px 0 -4px; display: grid; place-items: center; + cursor: ns-resize; touch-action: none; } + .qrgrip span { display: block; width: 34px; height: 3px; border-radius: 999px; + background: var(--line); transition: background .12s; } + .qrgrip:hover span, .qrgrip.dragging span { background: var(--acid, #d6ff3d); } + /* Address + inline copy. The value clamps to two lines; anything longer + is cut rather than growing the card. */ + .addrrow { display: grid; grid-template-columns: minmax(0,1fr) 30px; gap: 6px; + align-items: start; } + .addrval { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; + overflow: hidden; word-break: break-all; line-height: 1.35; } + .addrcopy { background: transparent; border: 1px solid var(--line); color: var(--dim); + cursor: pointer; width: 30px; height: 30px; border-radius: 7px; + display: inline-flex; align-items: center; justify-content: center; + line-height: 0; transition: color .12s, border-color .12s, background .12s; } + .addrcopy:hover { color: var(--acid, #d6ff3d); border-color: rgb(from var(--acid, #d6ff3d) r g b / .5); } + .addrcopy.copied { color: var(--acid, #d6ff3d); border-color: rgb(from var(--acid, #d6ff3d) r g b / .6); } + .addrcopy svg { width: 15px; height: 15px; display: block; } + /* Hide the action row entirely when its only child is hidden, so it + doesn't leave a gap under the address. */ + #addrActions:not(:has(> :not([hidden]))) { display: none; } canvas { image-rendering: pixelated; } input[type=text], input[type=number], input[type=password], textarea { width: 100%; padding: 7px 9px; border-radius: 7px; background: var(--panel); border: 1px solid var(--line); color: var(--ink); font: inherit; font-size: 13px; outline: none; } @@ -415,31 +442,44 @@ "a" and "anthem…" occupy the same slot, amount is fixed to 90px so "0" and "0.000123" right-align identically, actions are fixed to 46px. Net result: columns look like a table, not a flex mess. */ + /* 0.9.8: five columns for the five cells the row actually renders — + icon · label · copy · amount · menu. The template still described the + pre-0.9.2 layout (six columns, including an address cell that no + longer exists), so every cell sat one column left of where it + belonged: copy landed in the label's space, the amount in the old + label column, and the ⋯ in the amount column instead of the edge. + That is what made copy and amount collide. + The label is the flexible column so it takes the slack and truncates + rather than squeezing the number, and the menu is pinned right. */ .wstrip .warow { display: grid; - grid-template-columns: 16px minmax(0,1fr) 22px 68px 90px 46px; - gap: 6px; align-items: center; padding: 4px 4px; - border-radius: 6px; border: 1px solid transparent; cursor: pointer; min-height: 28px; } + grid-template-columns: 16px minmax(0,1fr) 24px auto 26px; + gap: 8px; align-items: center; padding: 5px 6px; + border-radius: 6px; border: 1px solid transparent; cursor: pointer; min-height: 30px; } .wstrip .warow:hover { background: rgba(255,255,255,.04); } .wstrip .warow.on { background: rgb(from var(--acid, #d6ff3d) r g b / .10); border-color: rgb(from var(--acid, #d6ff3d) r g b / .35); } .wstrip .warow .waaddr { font: 12px/1.15 ui-monospace, Consolas, monospace; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; } - /* Copy chip anchored right after the address. Fixed 22px column so the - copy button sits at the same x on every row. */ + /* Copy chip: its own 24px column between label and amount, so it can + never crowd the number. SVG rather than the 📋 emoji, which rendered + as a tofu box here and read as a glyph stuck to the balance. */ .wstrip .warow .wacopy { background: transparent; border: 0; color: var(--dim); cursor: pointer; - padding: 2px 4px; border-radius: 4px; font-size: 11px; line-height: 1; - transition: color .12s; justify-self: start; } + padding: 0; border-radius: 5px; line-height: 0; + width: 24px; height: 22px; display: inline-flex; + align-items: center; justify-content: center; + transition: color .12s, background .12s; justify-self: center; } + .wstrip .warow .wacopy svg { width: 13px; height: 13px; display: block; } .wstrip .warow .wacopy:hover { color: var(--acid, #d6ff3d); background: rgba(255,255,255,.06); } .wstrip .warow .wacopy.copied { color: var(--acid, #d6ff3d); } - /* Label pill: fixed 68px column. Even an empty label renders an - invisible placeholder so the amount column stays put. Long labels - truncate with ellipsis inside the pill (max-width: 100% of column). */ - .wstrip .warow .walabel { font-size: 11px; color: var(--mut); - padding: 1px 6px; border-radius: 999px; - background: rgba(255,255,255,.06); + /* Label pill, left-aligned in the flexible column so a name reads as + the row's identity rather than floating mid-row. Truncates with an + ellipsis instead of pushing the number around. */ + .wstrip .warow .walabel { font-size: 11.5px; color: var(--ink); + padding: 2px 8px; border-radius: 999px; + background: rgba(255,255,255,.07); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; box-sizing: border-box; - justify-self: center; } + justify-self: start; } .wstrip .warow .walabel:empty { visibility: hidden; } /* Balance shares a single line with everything else — no vertical amount/fiat stack. Ticker follows the number in a dim tone so the @@ -451,7 +491,8 @@ justify-self: end; overflow: hidden; } .wstrip .warow .waamt .watkr { color: var(--dim); font-size: 11px; font-weight: 500; } .wstrip .warow .wact { background: transparent; border: 0; color: var(--dim); cursor: pointer; - padding: 2px 5px; border-radius: 4px; font-size: 12.5px; line-height: 1; } + padding: 2px 4px; border-radius: 4px; font-size: 13px; line-height: 1; + justify-self: end; } .wstrip .warow .wact:hover { color: var(--acid, #d6ff3d); background: rgba(255,255,255,.06); } /* Per-address asset list (0.8.8). The count chip expands the row into a nested list of what that ONE address holds beyond the native coin. */ @@ -627,13 +668,21 @@ the fold. Explorer / Faucet moved to the header. -->
Receiving address
-
—
-
- - + +
+
—
+ +
+
- + +
+