Jannis Braun
f94958354a
feat: integrate section sub-links into UserSettings sidebar
2026-03-22 03:18:28 +01:00
Jannis Braun
537f489432
feat: apply delayed loading to member sidebar skeleton
2026-03-22 03:17:01 +01:00
Jannis Braun
44e8b32c2f
feat: apply delayed loading to app boot skeleton
2026-03-22 03:17:00 +01:00
Jannis Braun
b6f4659849
feat: apply delayed loading to channel sidebar skeleton
2026-03-22 03:16:47 +01:00
Jannis Braun
fce2d7c3f0
feat: apply delayed loading to message list skeletons
2026-03-22 03:16:40 +01:00
Jannis Braun
a152ee9a4c
feat: add useSettingsSections hook with scroll-spy and smooth scrolling
2026-03-22 03:16:17 +01:00
Jannis Braun
2924c83717
feat: add useDelayedLoading hook to prevent skeleton flicker
2026-03-22 03:16:02 +01:00
Jannis Braun
346fceeb74
feat: add SettingsSectionsContext for sidebar section communication
2026-03-22 03:14:59 +01:00
Jannis Braun
fcbdac7a2f
fix: improve skeleton loading accessibility and consistency
...
- Add role="status" and aria-label to all skeleton containers
- Refactor ChannelSidebar from conditional siblings to ternary
for consistent mutual exclusivity with MemberSidebar pattern
2026-03-22 02:51:02 +01:00
Jannis Braun
7d21f25f39
feat: replace app boot spinner with layout shell skeleton
2026-03-22 02:47:09 +01:00
Jannis Braun
9044fe5539
feat: add skeleton loading state to channel sidebar
2026-03-22 02:45:11 +01:00
Jannis Braun
a2ff5cb75d
feat: add skeleton loading state to member sidebar
2026-03-22 02:44:46 +01:00
Jannis Braun
02dcd2f903
feat: replace pagination spinner with skeleton rows in message list
2026-03-22 02:43:32 +01:00
Jannis Braun
d93b710dbd
feat: replace message list loading spinner with skeleton rows
2026-03-22 02:42:44 +01:00
Jannis Braun
ddaf6fee68
feat: add loadingSpaceId flag to spaceStore for skeleton loading guards
2026-03-22 02:41:32 +01:00
Jannis Braun
4222537831
feat: add skeleton shimmer CSS primitives for loading states
2026-03-22 02:41:07 +01:00
Jannis Braun
9812e13a0e
fix: center settings content within content area
...
Content was left-aligned in the content pane, making it appear
off-center relative to the full modal. Add mx-auto to center
the max-w-[640px] wrapper within the content area, matching
Discord's centering behavior.
2026-03-22 02:33:05 +01:00
Jannis Braun
1f3d10842d
fix: correct mobileView initial state and add SpaceSettings tab reset
...
- UserSettings: change mobileView default from 'content' to 'tabs'
- SpaceSettings: add useEffect to reset tab and mobileView on modal open
2026-03-22 02:26:15 +01:00
Jannis Braun
e87cab58bf
feat: add panel title headings to all SpaceSettings panels
2026-03-22 02:20:51 +01:00
Jannis Braun
b3cb84c6a2
feat: rebuild SpaceSettings with expanded layout and grouped sidebar
2026-03-22 02:19:15 +01:00
Jannis Braun
d54de16ec8
feat: add panel title headings to all UserSettings panels
2026-03-22 02:17:38 +01:00
Jannis Braun
3b06818614
feat: rebuild UserSettings with expanded layout and grouped sidebar
2026-03-22 02:15:27 +01:00
Jannis Braun
9bacc8fb3d
feat: add size='settings' variant to Modal component
2026-03-22 02:13:49 +01:00
Jannis Braun
4c4bd8dec6
fix: add editable input alongside slider step presets for custom values
2026-03-22 01:44:24 +01:00
Jannis Braun
46f17cf172
fix: replace slider step number input with pill presets
2026-03-22 01:29:40 +01:00
Jannis Braun
eff3210f29
fix: make slider step a compact inline row instead of prominent section
2026-03-22 01:25:03 +01:00
Jannis Braun
30cbf58770
fix: stack bitrate slider and input vertically for responsive layout
2026-03-22 01:19:28 +01:00
Jannis Braun
7e7e77b298
fix: prevent ghost voice users after server restart
...
Replace the stale-flag-based voice re-registration in the WS ready
handler with a server-authoritative check. If the server's voiceStates
doesn't include us (server restarted, lost in-memory voiceRooms),
cleanly tear down the LiveKit session via leaveVoice() + disconnect().
If the server still knows about us (WS blip), do nothing.
2026-03-22 01:05:30 +01:00
Jannis Braun
f3ff07aa6d
feat: add bitrate matrix editor with scale macro and uncapped max inputs
2026-03-22 00:52:40 +01:00
Jannis Braun
c0618a0b75
refactor: convert screenShare.ts to kbps with override-first lookup
2026-03-22 00:47:08 +01:00
Jannis Braun
267dc8d992
feat: add bitrateMatrixOverrides to types, schema, and migration
2026-03-22 00:42:23 +01:00
Jannis Braun
6122c7829f
fix: replace regex-based isNewlyCreated with explicit isNew prop
...
Pass isNew from parent state instead of guessing from the role name
pattern. Set true on create/copy, cleared on back/click-to-edit.
2026-03-22 00:17:14 +01:00
Jannis Braun
b8c8e39dfd
fix: use existing success banner style for role created indicator
...
Match the status-online pattern already used for "Role saved" in the
same file, instead of introducing a one-off accent-primary variant.
2026-03-22 00:12:33 +01:00
Jannis Braun
0bd87c4ebf
fix: auto-focus name input and show creation indicator in role editor
...
After creating or copying a role, the name input is now auto-focused
with text selected so the user immediately starts typing. A subtle
"Role created" banner appears until the user makes any change.
2026-03-22 00:05:17 +01:00
Jannis Braun
da82ba6d94
fix: add key prop to RoleEditView to reset state when switching roles
...
RoleEditView used useState(role.name) for draft state, but React
reuses the component instance when editingRoleId changes, ignoring
the new initial value. Adding key={editingRoleId} forces a remount,
re-initializing all draft state (name, color, permissions) correctly.
2026-03-21 23:43:00 +01:00
Jannis Braun
09bfd1ccab
fix: use grid layout for stream settings pills to prevent uneven wrapping
2026-03-21 23:41:01 +01:00
Jannis Braun
f9f7dd158f
feat: guard applyConstraints for native mode in useLiveKit
2026-03-21 23:33:30 +01:00
Jannis Braun
b4b22faf55
feat: auto-increment role names to avoid uniqueness conflicts on create and copy
2026-03-21 23:31:35 +01:00
Jannis Braun
a9a676bc70
feat: expand admin streaming pills, add high-end resource warning
...
Replaces hardcoded 3-resolution/3-framerate arrays with ALL_RESOLUTIONS
and STANDARD_FRAMERATES from shared constants (540p–Native, 30–120 fps).
Adds amber warning banner when high-end options (≥1440p or ≥75 fps) are
enabled, and fixes toggleResolution to handle 'native' with correct sort.
2026-03-21 23:30:46 +01:00
Jannis Braun
5ac0917d81
feat: dynamic resolution/framerate pills from instance limits
2026-03-21 23:30:14 +01:00
Jannis Braun
57b192533d
feat: add Copy Role button to duplicate roles with permissions
2026-03-21 23:30:12 +01:00
Jannis Braun
cb34bfc8ea
feat: expand bitrate matrix, add native mode with pixel-proportional fallback
2026-03-21 23:26:54 +01:00
Jannis Braun
3fe9f774a1
feat: add client-side role name uniqueness validation with 409 handling
2026-03-21 23:26:06 +01:00
Jannis Braun
a02b098fa7
feat: widen ScreenShareConfig types, bump persist to v12
2026-03-21 23:22:49 +01:00
Jannis Braun
f7657e3adb
fix: prevent duplicate messages when sending image without text
...
Optimistic message used content: '' while the server normalized it to
null, causing the content-based dedup to fail and leaving both the
empty temp message and the real attachment message in the list.
2026-03-21 22:46:01 +01:00
Jannis Braun
0d8913f589
feat: register CategorySettingsModal in AppLayout
2026-03-21 22:18:01 +01:00
Jannis Braun
cc7d1c191c
feat: add CategorySettingsModal with overview and permissions tabs
2026-03-21 22:08:47 +01:00
Jannis Braun
edb050fd39
feat: add category settings context menu, lock icon, empty category hiding
2026-03-21 18:38:47 +01:00
Jannis Braun
892164f3a5
refactor: use extracted PermissionsEditor in ChannelSettingsModal
2026-03-21 18:35:38 +01:00
Jannis Braun
c43afc23a8
feat: extract TriStateToggle, OverrideEntry, PermissionsEditor shared components
2026-03-21 18:35:35 +01:00