Discord-style: an active call keeps running invisibly when you browse other
rooms (PersistedElement just hides the iframe) and reappears when you return
to its room — no floating window following you around.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The runtime updater (API latest-release resolution + tag-specific feed
override) still pointed at Codeberg; releases now live on git.utn.lol.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- ||text|| in outgoing messages/edits becomes <span data-mx-spoiler> (MSC2010),
matching what Blap Android sends; code/pre spans are left alone
- spoiler media uploads get the Discord SPOILER_ filename prefix (the only
marker the Rust SDK on Android can produce) and isSpoilerMedia honors it
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Letting the release API auto-create the tag leaves a forge-only tag the
push-mirror prunes on its next sync — and Forgejo demotes the release
to a hidden draft when its tag disappears (this made v1.0.2 vanish from
the releases page overnight). Fail with instructions instead.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Forgejo/Codeberg 404s the GitHub-style latest/download path, so the feed
baked into app-update.yml never worked (1.0.0/1.0.1 never saw updates).
Point it at a rolling release on the fixed tag "updates" instead, and
make release-codeberg.mjs sync latest.yml + the Windows installer to
that release on every ship (channel files always replaced; curl retries
added).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Thread focus mode: threads open centered in the main pane (expand
button, room-list thread rows, and any ShowThread while focus mode is
active); back bar / Escape / channel click return to the timeline.
Centering strips the sidebar's thread cards so no duplicate remains.
- Room list: active-thread rows under channels (unread threads plus the
one currently open), collapsible section headers with per-space
persistence, live space-membership DM filtering (fixes the DM section
capping at ~6 rooms after a space switch).
- CSS: Compound token overrides now also target the body theme class so
remapped tokens stop shadowing back to green; reply-quote restyle;
min-width on the room body so the message action bar can't render
off-pane with a thread panel open in narrow windows (edit "did
nothing").
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 1.0.1 loopback-audio request broke Windows screenshare entirely;
we don't need Windows audio, so go back to plain {video}.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Codeberg does not serve the `/releases/latest/download/<file>` alias (404s); only
tag-specific `/releases/download/<tag>/<file>` URLs work. The update feed baked into
the app used the alias, so update checks never resolved on any platform.
Now both the Linux notifier and the Windows electron-updater resolve the newest
release via the Codeberg API (`/releases/latest` -> tag_name) and build the working
tag-specific feed URL from it (setFeedURL for electron-updater).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Desktop: capture system audio with the shared screen via Electron "loopback"
audio, gated to Windows/macOS (Electron doesn't support loopback on Linux).
Fixes screen shares having no audio for Windows users.
- release script: make it host-agnostic (FORGE_API/OWNER/REPO/TOKEN env) so it
can publish to the git.utn.lol Gitea as well as Codeberg. Defaults unchanged.
- Bump version to 1.0.1.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Ship our own Element Call fork build instead of the stock embedded package
(webpack copy repointed to ../element-call/dist, with npm-package fallback), and
rework the in-call room layout to match the Blap design:
- Chat stays in the main pane with the call as a compact right-hand column;
when someone shares a screen the call takes prominence in the main pane and
chat moves to the side column (never hidden). Driven by a same-origin
screenshare signal from the EC fork.
- Camera-off: pass the `blapVideoMuted` flag to EC and drop the old (unreliable)
widget-action mute code.
- Room list already lists in-call members under voice channels; add an
"IN THE CALL" header to the call column.
- Hide redundant RTC call-notification ("Video call") pings from the timeline.
- Room header: remove the now-redundant chat, threads and member-facepile
buttons; keep info working over the call (call stays mounted).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Skip release assets already uploaded at the same size instead of deleting and
re-uploading everything, so a re-run picks up where it left off.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Replace the element-web README with a Blap one (downloads/updating/building).
- release-codeberg: upload assets via curl instead of Node fetch, which times
out (UND_ERR_HEADERS_TIMEOUT) on 300MB+ files.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Build Debian package / Build package (release) Has been cancelled
Build and Deploy / prepare (release) Has been cancelled
Build and Deploy / Trigger Pro pipeline (release) Has been cancelled
Build and Deploy / Windows arm64 (release) Has been cancelled
Build and Deploy / Windows x64 (release) Has been cancelled
Build and Deploy / macOS (release) Has been cancelled
Build and Deploy / Linux amd64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / Linux arm64 (sqlcipher static) (release) Has been cancelled
Build and Deploy / ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }} (release) Has been cancelled
Build and Deploy / Deploy builds to ESS (release) Has been cancelled
Deploy release / Deploy to Cloudflare Pages (release) Has been cancelled
Include deb/flatpak/pacman/tar.gz (not just the Windows exe) so the release page
has every platform's download for the Linux update-ping to link to. Filter by
version so leftover artifacts from older builds in dist/ aren't uploaded.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- electron-builder: linux targets = deb, flatpak, tar.gz, pacman; win = nsis.
- updater.ts: Linux is notify-only (deb/pacman are package-manager owned,
flatpak is sandboxed) — reads the same Codeberg feed as Windows and shows a
"Blap X is available" desktop notification linking to HOW-TO-UPDATE.md.
Windows/macOS keep electron-updater in-place install.
- HOW-TO-UPDATE.md: per-format update instructions.
Version stays 1.0.0.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* Add user status on user profile icon
Currently unstyled & no tests
* Style the user status icon
* Update snapshot
for avatar wrapper
* More snapshot updates
* add if braces
* Split out user status functions
to avoid circular dep which has the weird effect of just breaking
jest's mocking.
* type imports
* Update imports
* Update snapshot
* Tests
* baseline image
* Just snapshot the component itself
* User status in user menu
first pass, unstyled
* fix export
* superstylin'
* snapshots
* Add story & test
* Snapshots
and re-use the repeated rules
* Tests
* Fix jest lcov projectRoot config
* Change tooltip text to just 'clear'
* Add comment & fix console warn
* Remove all options screenshot
as it's not really particularly useful as a preset story
* remove stale screenshot
* fix imports
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
* Consolidate modules vitest coverage
* Use vite-common as base for modules vitest config
* Make knip happier
* Fix coverage paths
* Place modules unit tests alongside src
* Switch to defineProject for better type safety
* Consolidate vitest CI & coverage
Kills off vite-common
* Update comment
* Update lockfile
* Fix shared-components vitest config
* Soften eslint config for tests in modules
* Run eslint on modules/playwright dir too
* Make tsc happy
* Tweak modules to be disabled if config is missing
* Restore blank line
* Improve coverage
* Potential fix for pull request finding 'Unused variable, import, function or class'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
---------
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
* Use vitest for some EW unit tests
* Ensure library builds are done before unit tests
* Stabilise jest tests
* Move more tests over
* Make sonar happier
* Update types/node for happy-dom compat again
* Decrease max-workers to stabilise jest tests
* Split jest over 3 runners to alleviate memory woes
* Switch jest to runInBand
* Attempt to deflake jest tests
* tweak coverage
* tweak coverage
* fix: don't display the empty/collapse icon when the room list is empty
* Fix jest lcov projectRoot config
---------
Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>