Compare commits

..

6 Commits

Author SHA1 Message Date
e8c4dde81e refactor: consistent [x] delete buttons + [rename] with inline editing
Some checks failed
check / check (push) Has been cancelled
- Replace dashed-underline wallet name with plain text + [rename] button
- [rename] button matches existing [x] button style (border border-border px-1)
- Inline rename shows input field with [save] and [cancel] buttons
- Support Enter to save, Escape to cancel
- Wallet list row: Name [rename] [x] with flex justify-between layout
- All buttons use monochrome hover style (hover:bg-fg hover:text-bg)
2026-02-27 12:53:46 -08:00
c5066f9aaf fix: use consistent [x] delete buttons, add inline rename
All checks were successful
check / check (push) Successful in 23s
- Delete buttons now use [x] with border, matching token and site
  removal patterns in settings
- Wallet names are click-to-rename (inline input), matching the
  home view rename UX
2026-02-27 12:53:05 -08:00
459ffed1bc Merge branch 'main' into feat/delete-wallet
All checks were successful
check / check (push) Successful in 22s
2026-02-27 21:51:15 +01:00
53506bad7b feat: add wallet deletion from settings (closes #13)
All checks were successful
check / check (push) Successful in 23s
- Per-wallet [delete] links in settings wallet list
- Monochrome styling throughout, no red/danger colors
- Password confirmation modal with warning text
- Cleans up site permissions for deleted addresses
- Switches to first remaining wallet or shows welcome if none left
2026-02-27 12:48:04 -08:00
d5849c831b fix: rework wallet deletion per review feedback
All checks were successful
check / check (push) Successful in 21s
- Remove all red/danger styling, use standard monochrome colors
- Add wallet picker dropdown instead of relying on selectedWallet
- Fix encryptedSecret field name (was wallet.encrypted)
- Populate dropdown when settings view opens
- Confirmation modal uses standard border styling
2026-02-27 12:44:40 -08:00
user
6e4dcb2e4f feat: add wallet deletion from settings (closes #13)
All checks were successful
check / check (push) Successful in 22s
2026-02-27 12:11:46 -08:00

View File

@@ -78,8 +78,11 @@ function renderWalletListSettings() {
state.wallets.forEach((wallet, idx) => {
const name = escapeHtml(wallet.name || "Wallet " + (idx + 1));
html += `<div class="flex justify-between items-center text-xs py-1 border-b border-border-light">`;
html += `<span class="settings-wallet-name cursor-pointer underline decoration-dashed" data-idx="${idx}">${name}</span>`;
html += `<span class="wallet-name-label">${name}</span>`;
html += `<span class="flex gap-1">`;
html += `<button class="btn-rename-wallet border border-border px-1 hover:bg-fg hover:text-bg cursor-pointer" data-idx="${idx}">[rename]</button>`;
html += `<button class="btn-delete-wallet border border-border px-1 hover:bg-fg hover:text-bg cursor-pointer" data-idx="${idx}">[x]</button>`;
html += `</span>`;
html += `</div>`;
});
container.innerHTML = html;
@@ -94,35 +97,42 @@ function renderWalletListSettings() {
$("delete-wallet-confirm").classList.remove("hidden");
});
});
// Inline rename on click
container.querySelectorAll(".settings-wallet-name").forEach((span) => {
span.addEventListener("click", () => {
const idx = parseInt(span.dataset.idx, 10);
container.querySelectorAll(".btn-rename-wallet").forEach((btn) => {
btn.addEventListener("click", () => {
const idx = parseInt(btn.dataset.idx, 10);
const wallet = state.wallets[idx];
const input = document.createElement("input");
input.type = "text";
input.className =
"border border-border p-0 text-xs bg-bg text-fg w-full";
input.value = wallet.name || "Wallet " + (idx + 1);
span.replaceWith(input);
const currentName = wallet.name || "Wallet " + (idx + 1);
const row = btn.closest(".flex.justify-between");
const nameSpan = row.querySelector(".wallet-name-label");
const buttonsSpan = row.querySelector("span.flex.gap-1");
nameSpan.innerHTML = `<input type="text" class="rename-wallet-input border border-border px-1 text-xs bg-bg text-fg" value="${escapeHtml(currentName)}" />`;
buttonsSpan.innerHTML =
`<button class="btn-rename-save border border-border px-1 hover:bg-fg hover:text-bg cursor-pointer">[save]</button>` +
`<button class="btn-rename-cancel border border-border px-1 hover:bg-fg hover:text-bg cursor-pointer">[cancel]</button>`;
const input = nameSpan.querySelector("input");
input.focus();
input.select();
const finish = async () => {
const val = input.value.trim();
if (val && val !== wallet.name) {
wallet.name = val;
const save = async () => {
const newName = input.value.trim();
if (newName) {
wallet.name = newName;
await saveState();
}
renderWalletListSettings();
};
input.addEventListener("blur", finish);
buttonsSpan
.querySelector(".btn-rename-save")
.addEventListener("click", save);
buttonsSpan
.querySelector(".btn-rename-cancel")
.addEventListener("click", () => renderWalletListSettings());
input.addEventListener("keydown", (e) => {
if (e.key === "Enter") input.blur();
if (e.key === "Escape") {
input.value = wallet.name || "Wallet " + (idx + 1);
input.blur();
}
if (e.key === "Enter") save();
if (e.key === "Escape") renderWalletListSettings();
});
});
});