feat(entries): multiline Notes field for any entry, masked by default

The note body of a note entry is the encrypted_password column, so logins had no way to carry notes. Rather than a dedicated encrypted column and the seven call sites that come with it, this rides on custom_fields, which rotation, duplicate, export/import and sync already carry.

Both the open-time normalisation and the save-time rebuild drop any key they do not name, so multiline is carried explicitly in each - otherwise the field silently reopens single-line.
This commit is contained in:
r-zakarya
2026-07-28 23:06:39 +01:00
parent 415dc6c8ba
commit d8643b96d1
2 changed files with 65 additions and 10 deletions
+11 -1
View File
@@ -1601,6 +1601,15 @@ input[type="range"]::-webkit-slider-thumb {
padding: 4px 8px;
font-size: 12px;
}
/* Multiline custom field (Notes). The row stays a grid, so the textarea just
grows in its own column and the buttons keep their places. */
.so-custom-multiline {
min-height: 72px;
resize: vertical;
align-self: stretch;
font-family: inherit;
line-height: 1.5;
}
/* Editable combobox for option-backed custom fields (card brand, expiry
year…). Input fills the cell; the arrow drops a menu of ALL options. */
.so-combo { position: relative; display: flex; align-items: center; }
@@ -1875,7 +1884,8 @@ input[type="range"]::-webkit-slider-thumb {
}
/* A textarea has no type="password"; -webkit-text-security is the Chromium
equivalent (WebView2 is Chromium, so it's always available here). */
.so-note-body.is-masked { -webkit-text-security: disc; }
.so-note-body.is-masked,
.so-custom-multiline.is-masked { -webkit-text-security: disc; }
.so-note-label { display: flex; align-items: center; justify-content: space-between; }
/* ---- + New dropdown ---------------------------------- */