Channels, Close and Create now use Haven's existing translations through
window.t (English when a key is missing). The two empty catch blocks log
a warning instead of swallowing the error.
The layout hid Haven's Create Temp Channel row and listened for a button
that does not exist, so people allowed only temporary channels lost the
way to make one. The row stays and opens the Join or create window with
Temporary ticked. The DMs tab now shows its pane even before the first
DM (Haven hides it then), and guests, who have no DMs, get no DMs tab.
The dots now refresh from _updateTabTitle, which every unread change goes
through (including reading a DM in PiP and coming back to the window),
skip muted channels like the tab title does, and retry until the app is
ready. Turning the layout off removes the wrappers from the app instead
of leaving copies of Haven's methods on it.
The tab was saved under a bare 'activeChannelTab' localStorage key that
looked like one of Haven's own. It now lives with the layout's other
setting in HavenApi.Data, and an existing value is moved over once.
Turning the layout off used to restore the class and style the Join and
Create sections had when it was turned on. Haven shows or hides Create as
permissions arrive, so an admin could lose Create (or a member gain it)
until a reload. Only the position is restored now, the panes lose the
pane-hidden class, and the sections go home before the modal is removed.