664dcd4cd8
- ScheduledMessagesTray: cancel prunes local state ONLY on confirmed server cancel; failures keep the item + show an inline error (was: a failed cancel looked cancelled but still sent at the scheduled time). - Escape semantics: the composer consumes Escape (preventDefault+stopPropagation) iff autocomplete is open or a reply draft is set; the thread panel and Room's markAsRead act only on unconsumed Escape, and markAsRead defers entirely while a thread panel is open (listener order made it fire before the panel closed). - Room: thread panel / media gallery are mutually exclusive (most-recently- opened wins); on mobile at most one right panel renders (thread > gallery > members) instead of stacked fullscreen overlays. - RemindMeDialog: busy-disabled presets (no more double-click duplicates), try/catch with inline error, close only on success. - ThreadTimeline: "Jump to Latest" floating chip when scrolled up (RoomTimeline idiom). From the 4-auditor deep-audit wave; reviewer-verified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
49 lines
1001 B
TypeScript
49 lines
1001 B
TypeScript
import { style } from '@vanilla-extract/css';
|
|
import { color, config } from 'folds';
|
|
|
|
export const ThreadTimeline = style({
|
|
height: '100%',
|
|
position: 'relative',
|
|
});
|
|
|
|
export const ThreadTimelineContent = style({
|
|
minHeight: '100%',
|
|
padding: `${config.space.S400} 0`,
|
|
});
|
|
|
|
export const ThreadTimelineFloat = style({
|
|
position: 'absolute',
|
|
bottom: config.space.S400,
|
|
left: '50%',
|
|
transform: 'translateX(-50%)',
|
|
zIndex: 1,
|
|
minWidth: 'max-content',
|
|
});
|
|
|
|
export const ThreadCentered = style({
|
|
height: '100%',
|
|
padding: config.space.S700,
|
|
});
|
|
|
|
export const RootMessage = style({
|
|
backgroundColor: color.SurfaceVariant.Container,
|
|
borderRadius: config.radii.R400,
|
|
marginBottom: config.space.S100,
|
|
});
|
|
|
|
export const RepliesDivider = style({
|
|
padding: `${config.space.S200} ${config.space.S400}`,
|
|
});
|
|
|
|
export const NoReplies = style({
|
|
padding: config.space.S400,
|
|
});
|
|
|
|
export const PendingMessage = style({
|
|
opacity: 0.6,
|
|
});
|
|
|
|
export const PendingFailed = style({
|
|
opacity: 1,
|
|
});
|