From d803cd1cf4bcc534194a7f01d285120d1bfbe58b Mon Sep 17 00:00:00 2001 From: Void Date: Wed, 11 Nov 2026 16:50:32 +0000 Subject: [PATCH] Navigator: quieter room icons, Join as a text action, calmer unread badge Co-Authored-By: Claude Sonnet 5.5 --- src/app/components/nav/styles.css.ts | 30 +++++++++---------- .../components/unread-badge/UnreadBadge.tsx | 3 +- src/app/features/desk/DeskEntry.tsx | 8 +++-- src/app/features/estate/EstateNavigator.tsx | 14 +++++---- src/app/features/room-nav/RoomNavItem.tsx | 4 +-- 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/app/components/nav/styles.css.ts b/src/app/components/nav/styles.css.ts index 34dc81c0..d66097af 100644 --- a/src/app/components/nav/styles.css.ts +++ b/src/app/components/nav/styles.css.ts @@ -32,8 +32,10 @@ export const NavLevel = style({ paddingLeft: LEVEL_STEP, }); -// Chevrons and room icons share one resting weight, so a foldout is not outweighed by its rooms. +// Chevrons and room icons are matched in weight, so a foldout is not outweighed by its rooms. export const NAV_ICON_REST_OPACITY = 0.6; +// A room's glyph is bigger and denser than the chevron, so it rests lighter to read as the same weight. +export const NAV_ROOM_ICON_REST_OPACITY = 0.42; export const NAV_ICON_UNREAD_OPACITY = 0.9; export const NavCategory = style([ @@ -264,22 +266,18 @@ globalStyle(`:root[data-scene] ${NavItemBase} svg, :root[data-scene] ${NavItemBa }, }); -// The Join action on a phone is a plain underlined word, not a pill. +// The Join action is a plain underlined word on every screen, not a pill. export const NavAction = style({ - '@media': { - [PHONE]: { - selectors: { - '&&': { - backgroundColor: 'transparent', - boxShadow: 'none', - border: 'none', - borderRadius: 0, - minWidth: 0, - textDecoration: 'underline', - textUnderlineOffset: toRem(4), - flexShrink: 0, - }, - }, + selectors: { + '&&': { + backgroundColor: 'transparent', + boxShadow: 'none', + border: 'none', + borderRadius: 0, + minWidth: 0, + textDecoration: 'underline', + textUnderlineOffset: toRem(4), + flexShrink: 0, }, }, }); diff --git a/src/app/components/unread-badge/UnreadBadge.tsx b/src/app/components/unread-badge/UnreadBadge.tsx index f8bfefa3..84eb5ae4 100644 --- a/src/app/components/unread-badge/UnreadBadge.tsx +++ b/src/app/components/unread-badge/UnreadBadge.tsx @@ -22,7 +22,8 @@ export function UnreadBadge({ highlight, count }: UnreadBadgeProps) { 0 ? '400' : '200'} - fill="Solid" + // A mention is the one solid pill; plain unread is a soft tint, so a row's count is never its loudest part. + fill={highlight ? 'Solid' : 'Soft'} radii="Pill" outlined={false} > diff --git a/src/app/features/desk/DeskEntry.tsx b/src/app/features/desk/DeskEntry.tsx index 8eab087f..a0c3244c 100644 --- a/src/app/features/desk/DeskEntry.tsx +++ b/src/app/features/desk/DeskEntry.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Box, Icon, Icons, Text } from 'folds'; import { NavGutter, NavItem, NavItemContent, NavLink } from '../../components/nav'; -import { NAV_ICON_REST_OPACITY, NavLabel } from '../../components/nav/styles.css'; +import { NAV_ROOM_ICON_REST_OPACITY, NavLabel } from '../../components/nav/styles.css'; import { getDeskPath } from '../../pages/pathUtils'; import { deskFor } from './source'; @@ -14,7 +14,11 @@ export function DeskEntry({ mind }: { mind: string }) { - + {open > 0 ? `Desk ยท ${open} open` : 'Desk'} diff --git a/src/app/features/estate/EstateNavigator.tsx b/src/app/features/estate/EstateNavigator.tsx index c6285bc8..cc98c337 100644 --- a/src/app/features/estate/EstateNavigator.tsx +++ b/src/app/features/estate/EstateNavigator.tsx @@ -12,7 +12,7 @@ import { NavItemContent, NavLevel, } from '../../components/nav'; -import { NAV_ICON_REST_OPACITY, NavAction, NavLabel } from '../../components/nav/styles.css'; +import { NAV_ROOM_ICON_REST_OPACITY, NavAction, NavLabel } from '../../components/nav/styles.css'; import { UseStateProvider } from '../../components/UseStateProvider'; import { JoinAddressPrompt } from '../../components/join-address-prompt'; import { RoomNavCategoryButton, RoomNavItem } from '../room-nav'; @@ -86,7 +86,7 @@ function JoinRow({ room }: { room: EstateRoom }) { - + @@ -108,7 +108,7 @@ function JoinRow({ room }: { room: EstateRoom }) { variant={room.state === 'invited' ? 'Primary' : 'Secondary'} fill="Soft" radii="Pill" - before={busy ? : } + before={busy ? : undefined} onClick={join} disabled={busy} aria-label={`Join ${room.name}`} @@ -269,7 +269,11 @@ function EntryPoints() { - + @@ -291,7 +295,7 @@ function EntryPoints() { diff --git a/src/app/features/room-nav/RoomNavItem.tsx b/src/app/features/room-nav/RoomNavItem.tsx index 48531a19..e8a349f0 100644 --- a/src/app/features/room-nav/RoomNavItem.tsx +++ b/src/app/features/room-nav/RoomNavItem.tsx @@ -22,7 +22,7 @@ import FocusTrap from 'focus-trap-react'; import { useAtom, useAtomValue } from 'jotai'; import { NavGutter, NavItem, NavItemContent, NavItemOptions, NavLink } from '../../components/nav'; import { - NAV_ICON_REST_OPACITY, + NAV_ROOM_ICON_REST_OPACITY, NAV_ICON_UNREAD_OPACITY, NavLabel, } from '../../components/nav/styles.css'; @@ -354,7 +354,7 @@ export function RoomNavItem({ ) : (