* fix: prevent chat container from overflowing viewport in embedded view
Add max-height: 100vh to .chatContainer to prevent the chat from getting
cut off vertically when used in the /embed/chat/readwrite view.
Fixes#4492
* fix: use flexbox layout for readwrite embed to prevent overflow in short viewports
Changes the readwrite embed to use a flexbox container with height: 100dvh
instead of a fixed 92vh height on the chat. This ensures the header takes
its natural height and the chat fills the remaining space without overflow.
- Add .embed-container with flex column layout and 100dvh height
- Set #chat-container to flex: 1 with min-height: 0 to fill remaining space
- Change ChatContainer height prop from "92vh" to "100%"
This addresses maintainer feedback that the chat was still getting cut off
in shorter viewports.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: remove max-height from global ChatContainer styles
Address Copilot review feedback: the max-height: 100vh on the global
.chatContainer class is no longer needed since the embed-container
flexbox layout properly constrains the height for the embedded chat.
Removing this avoids potential unintended side effects on other
ChatContainer instances (desktop sidebar, chat modal).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix(s3): scope segment cleanup to path prefix, fix slice panic, batch deletes
When a path prefix is configured for S3 storage, uploads correctly
write to <prefix>/hls/... but cleanup lists objects from the bucket
root without the prefix. This causes a panic when the resulting
segment list is empty, due to unsafe slicing with a negative index.
- Centralize prefix construction in remoteHLSPrefix() so Save(),
retrieveAllVideoSegments(), and rewritePlaylistLocations() all
share the same logic. remoteHLSListingPrefix() adds a trailing
slash for directory-scoped S3 listing.
- Use strings.Trim to normalize both leading and trailing slashes
from the configured path prefix.
- Replace ListObjects with ListObjectsPages to handle buckets with
more than 1000 segments.
- Batch DeleteObjects calls in chunks of 1000 to respect the S3
API limit, and log per-object errors from the response.
- Guard getDeletableVideoSegmentsWithOffset against empty result
sets to prevent the slice bounds panic.
Fixes#4784
* fix(s3): handle empty hlsPrefix in rewritePlaylistLocations
LocalStorage calls rewritePlaylistLocations with an empty prefix.
The previous refactor removed the fallback to "/hls", causing
double slashes and missing path segments in playlist URLs.
Default hlsPrefix to "hls" when empty to preserve existing behavior
for local storage setups with a custom video serving endpoint.