Reorderable columns, a loaded first file, and a spectrogram worth keeping

Drag a heading and the column moves, with a copy of it following the pointer
and the column it came from stepping back. One array of keys — every column,
shown or hidden — backs the table, the Settings list and what is saved, so a
hidden column keeps its neighbour and returns where it was rather than at the
end. A drag ends in a click, and the click is what sorting listens for, so
that click is swallowed.

Opening a folder loads its first file: the read, the peaks, the channel chips
and the waveform, then paused at the start rather than playing. playRow gained
a paused mode instead of a second loader that could drift from it. It cannot
stop a folder opening, and a file that will not decode no longer writes a
playback error over the line saying the folder opened — nobody asked it to
play. The badge follows the transport now, so a paused file stops claiming to
be playing.

A bulk run re-reads every file it touches, but nothing told the transport to
look again: rename the boom across a card and the mixer went on showing the
old name for the very file it had just rewritten.

Settings loses its Done button and the mixer its Close — both apply as you
touch them, and the window's own close is enough. Save Image moves onto the
file name's line; the rule meant to do that had been dead for some time,
overwritten by the shared modal header. The exported spectrogram carries the
folder, the file and the frequency axis, drawn in, because a PNG read
somewhere else has none of that. The viewer is unchanged.

Mixer track names wear the player's pill, the waveform thumbnails give their
grey panel back to the row, and every button is the transport's size.

Build output that had been committed by accident is untracked, and .gitignore
grows the entries for it.

459 checks.
This commit is contained in:
2026-09-04 00:28:31 +02:00
parent 16c3e6e103
commit 6b7c09bacd
8 changed files with 1163 additions and 34 deletions
+10 -9
View File
@@ -78,10 +78,9 @@ body {
background: var(--color-info-bg);
}
.bwfa-scope .bwfa-edit-entry .btn {
font-size: 15px;
padding: 9px 20px;
}
/* Open Folder used to be sized up here, and the one on the launch screen
sized up again. Both are gone: a button is a button, and the transport's
size is the size. */
.bwfa-scope .bwfa-edit-entry .bwfa-dropzone-subnote {
max-width: 62ch;
@@ -253,10 +252,6 @@ body {
display: none;
}
.bwfa-scope .bwfa-edit-entry.is-folder-open .btn {
font-size: var(--fs-sm);
padding: 6px 14px;
}
.bwfa-scope .bwfa-current-folder {
font-size: 15px;
@@ -576,10 +571,16 @@ body {
text-overflow: ellipsis;
}
/* The one button in the app that isn't the standard height, because it is
not standing among buttons: it is paired with the path field beside it and
takes that field's 38px, so the two read as one control. The row stretches
its items, so this height only spells out what the field would impose
anyway. Side padding matches every other button; the vertical padding has
to be 0 for a fixed height to mean anything. */
.bwfa-scope .bwfa-export-dest-row > .btn {
flex: none;
height: 38px;
padding: 0 14px;
padding: 0 0.75rem;
white-space: nowrap;
}