imnyang/cinny
Watch
1
0
Fork
You've already forked cinny
0

Fix menus congestion and improve thread reply layout (#2402)

* make menus more spacious

* improve threaded reply layout

* fix search filter button spacing
This commit is contained in:
Ajay Bura 2025-07-27 17:50:23 +05:30 • committed by GitHub
commit d8d4714370
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
37 changed files with 82 additions and 83 deletions

View file

@ -203,12 +203,8 @@ export function BackupRestoreTile({ crypto }: BackupRestoreTileProps) {
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu <Menu style={{ padding: config.space.S200 }}>
style={{ <Box direction="Column" gap="200">
padding: config.space.S100,
}}
>
<Box direction="Column" gap="100">
<Box direction="Column" gap="200"> <Box direction="Column" gap="200">
<InfoCard <InfoCard
variant="SurfaceVariant" variant="SurfaceVariant"

View file

@ -30,7 +30,7 @@ export function HexColorPickerPopOut({ picker, onRemove, children }: HexColorPic
> >
<Menu <Menu
style={{ style={{
padding: config.space.S100, padding: config.space.S200,
borderRadius: config.radii.R500, borderRadius: config.radii.R500,
overflow: 'initial', overflow: 'initial',
}} }}

View file

@ -109,7 +109,7 @@ export function JoinRulesSwitcher<T extends ExtendedJoinRules[]>({
}} }}
> >
<Menu> <Menu>
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
{rules.map((rule) => ( {rules.map((rule) => (
<MenuItem <MenuItem
key={rule} key={rule}

View file

@ -78,7 +78,7 @@ export function ManualVerificationMethodSwitcher({
}} }}
> >
<Menu> <Menu>
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
size="300" size="300"
variant="Surface" variant="Surface"

View file

@ -23,7 +23,7 @@ export function MemberSortMenu({ selected, onSelect, requestClose }: MemberSortM
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
{memberSortMenu.map((menuItem, index) => ( {memberSortMenu.map((menuItem, index) => (
<MenuItem <MenuItem
key={menuItem.name} key={menuItem.name}

View file

@ -27,7 +27,7 @@ export function MembershipFilterMenu({
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
{membershipFilterMenu.map((menuItem, index) => ( {membershipFilterMenu.map((menuItem, index) => (
<MenuItem <MenuItem
key={menuItem.name} key={menuItem.name}

View file

@ -70,7 +70,7 @@ export function RoomNotificationModeSwitcher({
return ( return (
<PopOut <PopOut
anchor={menuCords} anchor={menuCords}
offset={5} offset={8}
position="Right" position="Right"
align="Start" align="Start"
content={ content={
@ -86,7 +86,7 @@ export function RoomNotificationModeSwitcher({
}} }}
> >
<Menu> <Menu>
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
{modes.map((mode) => ( {modes.map((mode) => (
<MenuItem <MenuItem
key={mode} key={mode}

View file

@ -155,7 +155,7 @@ export function HeadingBlockButton() {
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
<Box gap="100"> <Box gap="100">
<TooltipProvider <TooltipProvider
tooltip={<BtnTooltip text="Heading 1" shortCode={`${modKey} + 1`} />} tooltip={<BtnTooltip text="Heading 1" shortCode={`${modKey} + 1`} />}

View file

@ -33,7 +33,7 @@ export function UsageSelector({ selected, onChange }: UsageSelectorProps) {
); );
return ( return (
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
{allUsages.map((usage) => ( {allUsages.map((usage) => (
<MenuItem <MenuItem
key={getUsageStr(usage)} key={getUsageStr(usage)}

View file

@ -7,7 +7,6 @@ export const ReplyBend = style({
export const ThreadIndicator = style({ export const ThreadIndicator = style({
opacity: config.opacity.P300, opacity: config.opacity.P300,
gap: toRem(2),
selectors: { selectors: {
'button&': { 'button&': {
@ -19,11 +18,6 @@ export const ThreadIndicator = style({
}, },
}); });
export const ThreadIndicatorIcon = style({
width: toRem(14),
height: toRem(14),
});
export const Reply = style({ export const Reply = style({
marginBottom: toRem(1), marginBottom: toRem(1),
minWidth: 0, minWidth: 0,

View file

@ -38,9 +38,16 @@ export const ReplyLayout = as<'div', ReplyLayoutProps>(
); );
export const ThreadIndicator = as<'div'>(({ ...props }, ref) => ( export const ThreadIndicator = as<'div'>(({ ...props }, ref) => (
<Box className={css.ThreadIndicator} alignItems="Center" {...props} ref={ref}> <Box
<Icon className={css.ThreadIndicatorIcon} src={Icons.Message} /> shrink="No"
<Text size="T200">Threaded reply</Text> className={css.ThreadIndicator}
alignItems="Center"
gap="100"
{...props}
ref={ref}
>
<Icon size="50" src={Icons.Thread} />
<Text size="L400">Thread</Text>
</Box> </Box>
)); ));
@ -97,7 +104,7 @@ export const Reply = as<'div', ReplyProps>(
const bodyJSX = body ? scaleSystemEmoji(trimReplyFromBody(body)) : fallbackBody; const bodyJSX = body ? scaleSystemEmoji(trimReplyFromBody(body)) : fallbackBody;
return ( return (
<Box direction="Column" alignItems="Start" {...props} ref={ref}> <Box direction="Row" gap="200" alignItems="Center" {...props} ref={ref}>
{threadRootId && ( {threadRootId && (
<ThreadIndicator as="button" data-event-id={threadRootId} onClick={onClick} /> <ThreadIndicator as="button" data-event-id={threadRootId} onClick={onClick} />
)} )}

View file

@ -16,13 +16,14 @@ export const PowerSelector = forwardRef<HTMLDivElement, PowerSelectorProps>(
ref={ref} ref={ref}
style={{ style={{
maxHeight: '75vh', maxHeight: '75vh',
maxWidth: toRem(300), maxWidth: toRem(200),
width: '100vw',
display: 'flex', display: 'flex',
}} }}
> >
<Box grow="Yes"> <Box grow="Yes">
<Scroll size="0" hideTrack visibility="Hover"> <Scroll size="0" hideTrack visibility="Hover">
<div style={{ padding: config.space.S100 }}> <div style={{ padding: config.space.S200 }}>
{getPowers(powerLevelTags).map((power) => { {getPowers(powerLevelTags).map((power) => {
const selected = value === power; const selected = value === power;
const tag = powerLevelTags[power]; const tag = powerLevelTags[power];

View file

@ -273,7 +273,7 @@ export const RoomCard = as<'div', RoomCardProps>(
variant="Secondary" variant="Secondary"
size="300" size="300"
disabled={joining} disabled={joining}
before={joining && <Spinner size="50" variant="Secondary" fill="Soft" />} before={joining && <Spinner size="50" variant="Secondary" fill="Solid" />}
> >
<Text size="B300" truncate> <Text size="B300" truncate>
{joining ? 'Joining' : 'Join'} {joining ? 'Joining' : 'Join'}

View file

@ -119,7 +119,7 @@ export function RoomHistoryVisibility({ powerLevels }: RoomHistoryVisibilityProp
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
{visibilityMenu.map((visibility) => ( {visibilityMenu.map((visibility) => (
<MenuItem <MenuItem
key={visibility} key={visibility}

View file

@ -63,7 +63,7 @@ function PeekPermissions({ powerLevels, power, permissionGroups, children }: Pee
> >
<Box grow="Yes" tabIndex={0}> <Box grow="Yes" tabIndex={0}>
<Scroll size="0" hideTrack visibility="Hover"> <Scroll size="0" hideTrack visibility="Hover">
<Box style={{ padding: config.space.S200 }} direction="Column" gap="400"> <Box style={{ padding: config.space.S400 }} direction="Column" gap="400">
{permissionGroups.map((group, groupIndex) => ( {permissionGroups.map((group, groupIndex) => (
<Box key={groupIndex} direction="Column" gap="100"> <Box key={groupIndex} direction="Column" gap="100">
<Text size="L400">{group.name}</Text> <Text size="L400">{group.name}</Text>

View file

@ -234,9 +234,9 @@ export function HierarchyItemMenu({
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ maxWidth: toRem(150), width: '100vw' }}> <Menu style={{ minWidth: toRem(200) }}>
{joined && ( {joined && (
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
{onTogglePin && ( {onTogglePin && (
<MenuItem <MenuItem
size="300" size="300"
@ -296,7 +296,7 @@ export function HierarchyItemMenu({
<Line size="300" variant="Surface" direction="Horizontal" /> <Line size="300" variant="Surface" direction="Horizontal" />
)} )}
{canEditChild && ( {canEditChild && (
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<SuggestMenuItem item={item} requestClose={handleRequestClose} /> <SuggestMenuItem item={item} requestClose={handleRequestClose} />
<RemoveMenuItem item={item} requestClose={handleRequestClose} /> <RemoveMenuItem item={item} requestClose={handleRequestClose} />
</Box> </Box>

View file

@ -60,8 +60,8 @@ const LobbyMenu = forwardRef<HTMLDivElement, LobbyMenuProps>(
}; };
return ( return (
<Menu ref={ref} style={{ maxWidth: toRem(160), width: '100vw' }}> <Menu ref={ref} style={{ minWidth: toRem(200) }}>
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
onClick={handleInvite} onClick={handleInvite}
variant="Primary" variant="Primary"
@ -87,7 +87,7 @@ const LobbyMenu = forwardRef<HTMLDivElement, LobbyMenuProps>(
</MenuItem> </MenuItem>
</Box> </Box>
<Line variant="Surface" size="300" /> <Line variant="Surface" size="300" />
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<UseStateProvider initial={false}> <UseStateProvider initial={false}>
{(promptLeave, setPromptLeave) => ( {(promptLeave, setPromptLeave) => (
<> <>

View file

@ -271,7 +271,7 @@ function AddRoomButton({ item }: { item: HierarchyItem }) {
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
size="300" size="300"
radii="300" radii="300"
@ -333,7 +333,7 @@ function AddSpaceButton({ item }: { item: HierarchyItem }) {
escapeDeactivates: stopPropagation, escapeDeactivates: stopPropagation,
}} }}
> >
<Menu style={{ padding: config.space.S100 }}> <Menu style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
size="300" size="300"
radii="300" radii="300"

View file

@ -74,8 +74,7 @@ function OrderButton({ order, onChange }: OrderButtonProps) {
<Header size="300" variant="Surface" style={{ padding: `0 ${config.space.S300}` }}> <Header size="300" variant="Surface" style={{ padding: `0 ${config.space.S300}` }}>
<Text size="L400">Sort by</Text> <Text size="L400">Sort by</Text>
</Header> </Header>
<Line variant="Surface" size="300" /> <div style={{ padding: config.space.S200, paddingTop: 0 }}>
<div style={{ padding: config.space.S100 }}>
<MenuItem <MenuItem
onClick={() => setOrder()} onClick={() => setOrder()}
variant="Surface" variant="Surface"
@ -291,7 +290,7 @@ function SelectRoomButton({ roomList, selectedRooms, onChange }: SelectRoomButto
</Box> </Box>
</Scroll> </Scroll>
<Line variant="Surface" size="300" /> <Line variant="Surface" size="300" />
<Box shrink="No" direction="Column" gap="100" style={{ padding: config.space.S200 }}> <Box shrink="No" direction="Column" gap="200" style={{ padding: config.space.S200 }}>
<Button size="300" variant="Secondary" radii="300" onClick={handleSave}> <Button size="300" variant="Secondary" radii="300" onClick={handleSave}>
{localSelected && localSelected.length > 0 ? ( {localSelected && localSelected.length > 0 ? (
<Text size="B300">Save ({localSelected.length})</Text> <Text size="B300">Save ({localSelected.length})</Text>

View file

@ -89,8 +89,8 @@ const RoomNavItemMenu = forwardRef<HTMLDivElement, RoomNavItemMenuProps>(
}; };
return ( return (
<Menu ref={ref} style={{ maxWidth: toRem(160), width: '100vw' }}> <Menu ref={ref} style={{ minWidth: toRem(200) }}>
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
onClick={handleMarkAsRead} onClick={handleMarkAsRead}
size="300" size="300"
@ -125,7 +125,7 @@ const RoomNavItemMenu = forwardRef<HTMLDivElement, RoomNavItemMenuProps>(
</RoomNotificationModeSwitcher> </RoomNotificationModeSwitcher>
</Box> </Box>
<Line variant="Surface" size="300" /> <Line variant="Surface" size="300" />
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<MenuItem <MenuItem
onClick={handleInvite} onClick={handleInvite}
variant="Primary" variant="Primary"
@ -161,7 +161,7 @@ const RoomNavItemMenu = forwardRef<HTMLDivElement, RoomNavItemMenuProps>(
</MenuItem> </MenuItem>
</Box> </Box>
<Line variant="Surface" size="300" /> <Line variant="Surface" size="300" />
<Box direction="Column" gap="100" style={{ padding: config.space.S100 }}> <Box direction="Column" gap="100" style={{ padding: config.space.S200 }}>
<UseStateProvider initial={false}> <UseStateProvider initial={false}>
{(promptLeave, setPromptLeave) => ( {(promptLeave, setPromptLeave) => (
<> <>

Some files were not shown because too many files have changed in this diff Show more