chore: prettier format all files, brotli, Sentry release tagging, CI gates
Prettier: auto-formatted 103 files to fix baseline. Prettier check in CI is now a hard gate (removed continue-on-error). Brotli: installed libnginx-mod-http-brotli-filter/static. Enabled in nginx with brotli_static on for pre-compressed assets and comp_level 6. Sentry releases: deploy script now exports VITE_APP_VERSION=<git-short-sha> before building so each Sentry release maps to an exact commit. CI also passes github.sha as VITE_APP_VERSION. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -21,14 +21,22 @@ export function ClientLayout({ nav, children }: ClientLayoutProps) {
|
||||
borderRadius: '0 0 4px 0',
|
||||
transition: 'top 0.1s',
|
||||
}}
|
||||
onFocus={(e) => { (e.currentTarget as HTMLElement).style.top = '0'; }}
|
||||
onBlur={(e) => { (e.currentTarget as HTMLElement).style.top = '-40px'; }}
|
||||
onFocus={(e) => {
|
||||
(e.currentTarget as HTMLElement).style.top = '0';
|
||||
}}
|
||||
onBlur={(e) => {
|
||||
(e.currentTarget as HTMLElement).style.top = '-40px';
|
||||
}}
|
||||
>
|
||||
Skip to main content
|
||||
</a>
|
||||
<Box grow="Yes">
|
||||
<Box shrink="No" as="nav" aria-label="Room navigation">{nav}</Box>
|
||||
<Box grow="Yes" as="main" id="main-content">{children}</Box>
|
||||
<Box shrink="No" as="nav" aria-label="Room navigation">
|
||||
{nav}
|
||||
</Box>
|
||||
<Box grow="Yes" as="main" id="main-content">
|
||||
{children}
|
||||
</Box>
|
||||
</Box>
|
||||
</>
|
||||
);
|
||||
|
||||
@@ -22,7 +22,8 @@ export function SpecVersions({ baseUrl, children }: { baseUrl: string; children:
|
||||
<Dialog>
|
||||
<Box direction="Column" gap="400" style={{ padding: config.space.S400 }}>
|
||||
<Text>
|
||||
Unable to connect to the homeserver. The homeserver or your internet connection may be down.
|
||||
Unable to connect to the homeserver. The homeserver or your internet connection
|
||||
may be down.
|
||||
</Text>
|
||||
<Button variant="Critical" onClick={retry}>
|
||||
<Text as="span" size="B400">
|
||||
|
||||
@@ -15,7 +15,15 @@ export function WelcomePage() {
|
||||
>
|
||||
<PageHeroSection>
|
||||
<PageHero
|
||||
icon={<img width="70" height="70" src={LotusLogo} alt="Lotus Chat" style={{ objectFit: "contain" }} />}
|
||||
icon={
|
||||
<img
|
||||
width="70"
|
||||
height="70"
|
||||
src={LotusLogo}
|
||||
alt="Lotus Chat"
|
||||
style={{ objectFit: 'contain' }}
|
||||
/>
|
||||
}
|
||||
title="Welcome to Lotus Chat"
|
||||
subTitle={
|
||||
<span>
|
||||
|
||||
@@ -108,7 +108,13 @@ function DirectHeader() {
|
||||
</Text>
|
||||
</Box>
|
||||
<Box>
|
||||
<IconButton aria-expanded={!!menuAnchor} aria-haspopup="menu" variant="Background" onClick={handleOpenMenu} aria-label="Direct messages options">
|
||||
<IconButton
|
||||
aria-expanded={!!menuAnchor}
|
||||
aria-haspopup="menu"
|
||||
variant="Background"
|
||||
onClick={handleOpenMenu}
|
||||
aria-label="Direct messages options"
|
||||
>
|
||||
<Icon src={Icons.VerticalDots} size="200" />
|
||||
</IconButton>
|
||||
</Box>
|
||||
|
||||
@@ -94,9 +94,16 @@ export function AddServer() {
|
||||
size="500"
|
||||
>
|
||||
<Box grow="Yes">
|
||||
<Text as="h2" size="H4">Add Server</Text>
|
||||
<Text as="h2" size="H4">
|
||||
Add Server
|
||||
</Text>
|
||||
</Box>
|
||||
<IconButton size="300" onClick={() => setDialog(false)} radii="300" aria-label="Close">
|
||||
<IconButton
|
||||
size="300"
|
||||
onClick={() => setDialog(false)}
|
||||
radii="300"
|
||||
aria-label="Close"
|
||||
>
|
||||
<Icon src={Icons.Cross} />
|
||||
</IconButton>
|
||||
</Header>
|
||||
@@ -110,7 +117,13 @@ export function AddServer() {
|
||||
<Text priority="400">Add server name to explore public communities.</Text>
|
||||
<Box direction="Column" gap="100">
|
||||
<Text size="L400">Server Name</Text>
|
||||
<Input ref={serverInputRef} name="serverInput" aria-label="Server name" variant="Background" required />
|
||||
<Input
|
||||
ref={serverInputRef}
|
||||
name="serverInput"
|
||||
aria-label="Server name"
|
||||
variant="Background"
|
||||
required
|
||||
/>
|
||||
{exploreState.status === AsyncStatus.Error && (
|
||||
<Text style={{ color: color.Critical.Main }} size="T300">
|
||||
Failed to load public rooms. Please try again.
|
||||
|
||||
@@ -56,7 +56,9 @@ export function FeaturedRooms() {
|
||||
<Box direction="Column" gap="700">
|
||||
{spaces && spaces.length > 0 && (
|
||||
<Box direction="Column" gap="400">
|
||||
<Text as="h2" size="H4">Featured Spaces</Text>
|
||||
<Text as="h2" size="H4">
|
||||
Featured Spaces
|
||||
</Text>
|
||||
<RoomCardGrid>
|
||||
{spaces.map((roomIdOrAlias) => (
|
||||
<RoomSummaryLoader key={roomIdOrAlias} roomIdOrAlias={roomIdOrAlias}>
|
||||
@@ -85,7 +87,9 @@ export function FeaturedRooms() {
|
||||
)}
|
||||
{rooms && rooms.length > 0 && (
|
||||
<Box direction="Column" gap="400">
|
||||
<Text as="h3" size="H4">Featured Rooms</Text>
|
||||
<Text as="h3" size="H4">
|
||||
Featured Rooms
|
||||
</Text>
|
||||
<RoomCardGrid>
|
||||
{rooms.map((roomIdOrAlias) => (
|
||||
<RoomSummaryLoader key={roomIdOrAlias} roomIdOrAlias={roomIdOrAlias}>
|
||||
|
||||
@@ -537,7 +537,9 @@ export function PublicRooms() {
|
||||
{isSearch ? (
|
||||
<Text as="h3" size="H4">{`Results for "${serverSearchParams.term}"`}</Text>
|
||||
) : (
|
||||
<Text as="h3" size="H4">Popular Communities</Text>
|
||||
<Text as="h3" size="H4">
|
||||
Popular Communities
|
||||
</Text>
|
||||
)}
|
||||
<Box gap="200">
|
||||
{roomTypeFilters.map((filter) => (
|
||||
|
||||
@@ -122,7 +122,13 @@ function HomeHeader() {
|
||||
</Text>
|
||||
</Box>
|
||||
<Box>
|
||||
<IconButton aria-expanded={!!menuAnchor} aria-haspopup="menu" variant="Background" onClick={handleOpenMenu} aria-label="Home options">
|
||||
<IconButton
|
||||
aria-expanded={!!menuAnchor}
|
||||
aria-haspopup="menu"
|
||||
variant="Background"
|
||||
onClick={handleOpenMenu}
|
||||
aria-label="Home options"
|
||||
>
|
||||
<Icon src={Icons.VerticalDots} size="200" />
|
||||
</IconButton>
|
||||
</Box>
|
||||
|
||||
@@ -429,7 +429,9 @@ function KnownInvites({
|
||||
}: KnownInvitesProps) {
|
||||
return (
|
||||
<Box direction="Column" gap="200">
|
||||
<Text as="h3" size="H4">Primary</Text>
|
||||
<Text as="h3" size="H4">
|
||||
Primary
|
||||
</Text>
|
||||
{invites.length > 0 ? (
|
||||
<Box direction="Column" gap="100">
|
||||
{invites.map((invite) => (
|
||||
@@ -488,7 +490,9 @@ function UnknownInvites({
|
||||
return (
|
||||
<Box direction="Column" gap="200">
|
||||
<Box gap="200" justifyContent="SpaceBetween" alignItems="Center">
|
||||
<Text as="h3" size="H4">Public</Text>
|
||||
<Text as="h3" size="H4">
|
||||
Public
|
||||
</Text>
|
||||
<Box>
|
||||
{invites.length > 0 && (
|
||||
<Chip
|
||||
@@ -585,7 +589,9 @@ function SpamInvites({
|
||||
|
||||
return (
|
||||
<Box direction="Column" gap="200">
|
||||
<Text as="h3" size="H4">Spam</Text>
|
||||
<Text as="h3" size="H4">
|
||||
Spam
|
||||
</Text>
|
||||
{invites.length > 0 ? (
|
||||
<Box direction="Column" gap="100">
|
||||
<SequenceCard
|
||||
|
||||
@@ -522,7 +522,13 @@ function OpenedSpaceFolder({ folder, onClose, children }: OpenedSpaceFolderProps
|
||||
>
|
||||
<SidebarFolderDropTarget ref={aboveTargetRef} position="Top" />
|
||||
<SidebarAvatar size="300">
|
||||
<IconButton data-id={folder.id} size="300" variant="Background" onClick={onClose} aria-label="Close folder">
|
||||
<IconButton
|
||||
data-id={folder.id}
|
||||
size="300"
|
||||
variant="Background"
|
||||
onClick={onClose}
|
||||
aria-label="Close folder"
|
||||
>
|
||||
<Icon size="400" src={Icons.ChevronTop} filled />
|
||||
</IconButton>
|
||||
</SidebarAvatar>
|
||||
|
||||
@@ -274,7 +274,13 @@ function SpaceHeader() {
|
||||
{joinRules?.join_rule !== JoinRule.Public && <Icon src={Icons.Lock} size="50" />}
|
||||
</Box>
|
||||
<Box shrink="No">
|
||||
<IconButton aria-expanded={!!menuAnchor} aria-haspopup="menu" variant="Background" onClick={handleOpenMenu} aria-label="Space options">
|
||||
<IconButton
|
||||
aria-expanded={!!menuAnchor}
|
||||
aria-haspopup="menu"
|
||||
variant="Background"
|
||||
onClick={handleOpenMenu}
|
||||
aria-label="Space options"
|
||||
>
|
||||
<Icon src={Icons.VerticalDots} size="200" />
|
||||
</IconButton>
|
||||
</Box>
|
||||
@@ -433,7 +439,9 @@ export function Space() {
|
||||
return false;
|
||||
}
|
||||
const showRoomAnyway =
|
||||
roomsWithUnreadSet.has(roomId) || roomId === selectedRoomId || callEmbed?.roomId === roomId;
|
||||
roomsWithUnreadSet.has(roomId) ||
|
||||
roomId === selectedRoomId ||
|
||||
callEmbed?.roomId === roomId;
|
||||
return !showRoomAnyway;
|
||||
},
|
||||
[space.roomId, closedCategories, roomsWithUnreadSet, selectedRoomId, callEmbed]
|
||||
|
||||
Reference in New Issue
Block a user