fix(ui): NATIVE-CINNY LAW — replace emoji with folds icons in settings

- Notification profile presets (P5-27) used literal emoji (🎮/💼/🌙) instead of
  folds Icons → Gaming=Ball, Work=Monitor, Sleep=BellMute.
- Permissions "Powers" list used / text emoji for has/no-power → folds
  Icons.Check / Icons.Cross (colored via the row).

Reviewed the rest of the UI: seasonal-theme picker emoji kept (folds has no
holiday-icon equivalents; a distinctly-Lotus visual feature), soundboard clip
emoji kept (user-chosen clip identity), URL-preview brand glyphs + upstream
device-verification emoji + keyboard key-symbols left as-is.

(Also records the F2 URL-preview decision: keep default-on.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-02 21:21:00 -04:00
parent 668bdaad7d
commit 41149db685
3 changed files with 17 additions and 14 deletions
+1 -1
View File
@@ -82,7 +82,7 @@ Tier-2 bug-hunt (desktop/native, crypto/session/infra, messaging data) by 3 para
**⚠️ FLAGGED — product decision (not auto-changed):**
- **F2:** URL previews **default ON in encrypted rooms** (`settings.ts encUrlPreview: true`) → the homeserver fetches every link in an E2EE message (leaks E2EE link URLs to the server). This is the deliberate Lotus "URL Preview Default in Encrypted Rooms" feature — most clients default it OFF for privacy. **Your call whether to flip the default to `false`.**
- **F2 — DECIDED (keep ON, 2026-07):** URL previews stay **default ON in encrypted rooms** (`settings.ts encUrlPreview: true`) per user preference — the deliberate Lotus "URL Preview Default in Encrypted Rooms" feature. (Trade-off acknowledged: the homeserver fetches links from E2EE messages; users can turn it off per-room.)
**Won't-fix / by-design:** M7 (scheduledMessages clamps a past target to 1s — intentional + unit-tested; the modal already guards ≥60s).
@@ -5,6 +5,8 @@ import {
Button,
Chip,
Text,
Icon,
Icons,
RectCords,
PopOut,
Menu,
@@ -75,15 +77,16 @@ function PeekPermissions({ powerLevels, power, permissionGroups, children }: Pee
const hasPower = requiredPower <= power;
return (
<Text
<Box
key={itemIndex}
size="T200"
style={{
color: hasPower ? undefined : color.Critical.Main,
}}
as="span"
alignItems="Center"
gap="100"
style={{ color: hasPower ? undefined : color.Critical.Main }}
>
{hasPower ? '✅' : '❌'} {item.name}
</Text>
<Icon size="50" src={hasPower ? Icons.Check : Icons.Cross} />
<Text size="T200">{item.name}</Text>
</Box>
);
})}
</div>
@@ -1,6 +1,6 @@
import React from 'react';
import { useAtomValue, useSetAtom } from 'jotai';
import { Box, Button, Text, IconButton, Icon, Icons, Scroll, config, toRem } from 'folds';
import { Box, Button, Text, IconButton, Icon, Icons, IconSrc, Scroll, config, toRem } from 'folds';
import { Page, PageContent, PageHeader } from '../../../components/page';
import { SystemNotification } from './SystemNotification';
import { AllMessagesNotifications } from './AllMessages';
@@ -14,13 +14,13 @@ import { settingsAtom, Settings } from '../../../state/settings';
const PRESETS: Array<{
label: string;
emoji: string;
icon: IconSrc;
description: string;
patch: Partial<Settings>;
}> = [
{
label: 'Gaming',
emoji: '🎮',
icon: Icons.Ball,
description: 'Notifications on, sounds off',
patch: {
showNotifications: true,
@@ -32,7 +32,7 @@ const PRESETS: Array<{
},
{
label: 'Work',
emoji: '💼',
icon: Icons.Monitor,
description: 'All notifications and sounds on',
patch: {
showNotifications: true,
@@ -44,7 +44,7 @@ const PRESETS: Array<{
},
{
label: 'Sleep',
emoji: '🌙',
icon: Icons.BellMute,
description: 'All notifications off',
patch: {
showNotifications: false,
@@ -83,7 +83,7 @@ function NotificationPresets() {
}}
>
<Box direction="Column" alignItems="Center" gap="100">
<span style={{ fontSize: toRem(24) }}>{preset.emoji}</span>
<Icon size="400" src={preset.icon} />
<Text size="T300" style={{ fontWeight: config.fontWeight.W600 }}>
{preset.label}
</Text>