chore: upgrade i18next 26, prettier 3, fontsource-variable, domhandler 6, lint-staged 17
- i18next 23->26 + react-i18next 15->17 - prettier 2->3, reformat all files - replace @fontsource/inter with @fontsource-variable/inter 5, update import path - domhandler 5->6 (aligns with transitive deps) - lint-staged 16->17
This commit is contained in:
@@ -36,7 +36,7 @@ export function FileDownloadButton({ filename, url, mimeType, encInfo }: FileDow
|
||||
const fileURL = URL.createObjectURL(fileContent);
|
||||
FileSaver.saveAs(fileURL, filename);
|
||||
return fileURL;
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo, filename])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo, filename]),
|
||||
);
|
||||
|
||||
const downloading = downloadState.status === AsyncStatus.Loading;
|
||||
@@ -52,8 +52,8 @@ export function FileDownloadButton({ filename, url, mimeType, encInfo }: FileDow
|
||||
downloading
|
||||
? 'Downloading...'
|
||||
: hasError
|
||||
? 'Download failed, click to retry'
|
||||
: 'Download file'
|
||||
? 'Download failed, click to retry'
|
||||
: 'Download file'
|
||||
}
|
||||
>
|
||||
{downloading ? (
|
||||
|
||||
@@ -60,7 +60,7 @@ export function ReactionTooltipMsg({ room, reaction, events }: ReactionTooltipMs
|
||||
(ev: MatrixEvent) =>
|
||||
getMemberDisplayName(room, ev.getSender() ?? 'Unknown') ??
|
||||
getMxIdLocalPart(ev.getSender() ?? 'Unknown') ??
|
||||
'Unknown'
|
||||
'Unknown',
|
||||
);
|
||||
|
||||
return (
|
||||
|
||||
@@ -34,7 +34,7 @@ export const ReplyLayout = as<'div', ReplyLayoutProps>(
|
||||
{children}
|
||||
</Box>
|
||||
</Box>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
export const ThreadIndicator = as<'div'>(({ ...props }, ref) => (
|
||||
@@ -75,12 +75,12 @@ export const Reply = as<'div', ReplyProps>(
|
||||
legacyUsernameColor,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
ref,
|
||||
) => {
|
||||
const placeholderWidth = useMemo(() => randomNumberBetween(40, 400), []);
|
||||
const getFromLocalTimeline = useCallback(
|
||||
() => timelineSet?.findEventById(replyEventId),
|
||||
[timelineSet, replyEventId]
|
||||
[timelineSet, replyEventId],
|
||||
);
|
||||
const replyEvent = useRoomEvent(room, replyEventId, getFromLocalTimeline);
|
||||
|
||||
@@ -134,5 +134,5 @@ export const Reply = as<'div', ReplyProps>(
|
||||
</ReplyLayout>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -41,5 +41,5 @@ export const Time = as<'span', TimeProps & ComponentProps<typeof Text>>(
|
||||
{time}
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -12,7 +12,7 @@ export const Attachment = as<'div', css.AttachmentVariants>(
|
||||
{...props}
|
||||
ref={ref}
|
||||
/>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
export const AttachmentHeader = as<'div'>(({ className, ...props }, ref) => (
|
||||
|
||||
@@ -60,7 +60,7 @@ export function AudioContent({
|
||||
? await downloadEncryptedMedia(mediaUrl, (encBuf) => decryptFile(encBuf, mimeType, encInfo))
|
||||
: await downloadMedia(mediaUrl);
|
||||
return URL.createObjectURL(fileContent);
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo]),
|
||||
);
|
||||
|
||||
const audioRef = useRef<HTMLAudioElement | null>(null);
|
||||
@@ -75,7 +75,7 @@ export function AudioContent({
|
||||
URL.revokeObjectURL(srcState.data);
|
||||
}
|
||||
},
|
||||
[srcState]
|
||||
[srcState],
|
||||
);
|
||||
|
||||
const [currentTime, setCurrentTime] = useState(0);
|
||||
@@ -94,7 +94,7 @@ export function AudioContent({
|
||||
}, []);
|
||||
useMediaPlayTimeCallback(
|
||||
getAudioRef,
|
||||
useThrottle(handlePlayTimeCallback, PLAY_TIME_THROTTLE_OPS)
|
||||
useThrottle(handlePlayTimeCallback, PLAY_TIME_THROTTLE_OPS),
|
||||
);
|
||||
|
||||
const handlePlay = () => {
|
||||
@@ -162,7 +162,7 @@ export function AudioContent({
|
||||
</Chip>
|
||||
|
||||
<Text size="T200">{`${secondsToMinutesAndSeconds(
|
||||
currentTime
|
||||
currentTime,
|
||||
)} / ${secondsToMinutesAndSeconds(duration)}`}</Text>
|
||||
</>
|
||||
),
|
||||
|
||||
@@ -12,7 +12,7 @@ export const MessageDeletedContent = as<'div', { children?: never; reason?: stri
|
||||
{reason ? `This message has been deleted — ${reason}` : 'This message has been deleted'}
|
||||
</i>
|
||||
</Box>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
export const MessageUnsupportedContent = as<'div', { children?: never }>(({ ...props }, ref) => (
|
||||
|
||||
@@ -95,7 +95,7 @@ export function ReadTextFile({ body, mimeType, url, encInfo, renderViewer }: Rea
|
||||
const text = fileContent.text();
|
||||
setTextViewer(true);
|
||||
return text;
|
||||
}, [mx, useAuthentication, mimeType, encInfo, url])
|
||||
}, [mx, useAuthentication, mimeType, encInfo, url]),
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -184,7 +184,7 @@ export function ReadPdfFile({ body, mimeType, url, encInfo, renderViewer }: Read
|
||||
: await downloadMedia(mediaUrl);
|
||||
setPdfViewer(true);
|
||||
return URL.createObjectURL(fileContent);
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo]),
|
||||
);
|
||||
|
||||
return (
|
||||
@@ -264,7 +264,7 @@ export function DownloadFile({ body, mimeType, url, info, encInfo }: DownloadFil
|
||||
const fileURL = URL.createObjectURL(fileContent);
|
||||
FileSaver.saveAs(fileURL, body);
|
||||
return fileURL;
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo, body])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo, body]),
|
||||
);
|
||||
|
||||
return downloadState.status === AsyncStatus.Error ? (
|
||||
@@ -309,5 +309,5 @@ export const FileContent = as<'div', FileContentProps>(
|
||||
{mimeType === 'application/pdf' && renderAsPdfFile()}
|
||||
{children}
|
||||
</Box>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
@@ -74,7 +74,7 @@ export const ImageContent = as<'div', ImageContentProps>(
|
||||
renderImage,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
ref,
|
||||
) => {
|
||||
const mx = useMatrixClient();
|
||||
const useAuthentication = useMediaAuthentication();
|
||||
@@ -91,12 +91,12 @@ export const ImageContent = as<'div', ImageContentProps>(
|
||||
if (!mediaUrl) throw new Error('Invalid media URL');
|
||||
if (encInfo) {
|
||||
const fileContent = await downloadEncryptedMedia(mediaUrl, (encBuf) =>
|
||||
decryptFile(encBuf, mimeType ?? FALLBACK_MIMETYPE, encInfo)
|
||||
decryptFile(encBuf, mimeType ?? FALLBACK_MIMETYPE, encInfo),
|
||||
);
|
||||
return URL.createObjectURL(fileContent);
|
||||
}
|
||||
return mediaUrl;
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo]),
|
||||
);
|
||||
|
||||
const handleLoad = () => {
|
||||
@@ -257,5 +257,5 @@ export const ImageContent = as<'div', ImageContentProps>(
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -34,7 +34,7 @@ function computeVotes(
|
||||
mx: ReturnType<typeof useMatrixClient>,
|
||||
roomId: string,
|
||||
eventId: string,
|
||||
isStable: boolean
|
||||
isStable: boolean,
|
||||
): VoteState {
|
||||
const empty: VoteState = { counts: new Map(), myVote: null, total: 0 };
|
||||
const room = mx.getRoom(roomId);
|
||||
@@ -44,12 +44,12 @@ function computeVotes(
|
||||
const stableRels = timelineSet.relations.getChildEventsForEvent(
|
||||
eventId,
|
||||
'm.reference',
|
||||
'm.poll.response'
|
||||
'm.poll.response',
|
||||
);
|
||||
const unstableRels = timelineSet.relations.getChildEventsForEvent(
|
||||
eventId,
|
||||
'org.matrix.msc3381.poll.response' as any,
|
||||
'org.matrix.msc3381.poll.response'
|
||||
'org.matrix.msc3381.poll.response',
|
||||
);
|
||||
|
||||
// Collect all response events; per-sender keep only latest
|
||||
@@ -129,12 +129,12 @@ export function PollContent({
|
||||
const stableRels = timelineSet.relations.getChildEventsForEvent(
|
||||
eventId,
|
||||
'm.reference',
|
||||
'm.poll.response'
|
||||
'm.poll.response',
|
||||
);
|
||||
const unstableRels = timelineSet.relations.getChildEventsForEvent(
|
||||
eventId,
|
||||
'org.matrix.msc3381.poll.response' as any,
|
||||
'org.matrix.msc3381.poll.response'
|
||||
'org.matrix.msc3381.poll.response',
|
||||
);
|
||||
|
||||
stableRels?.on(RelationsEvent.Add, refresh);
|
||||
|
||||
@@ -27,13 +27,13 @@ export function ThumbnailContent({ info, renderImage }: ThumbnailContentProps) {
|
||||
if (!mediaUrl) throw new Error('Invalid media URL');
|
||||
if (encInfo) {
|
||||
const fileContent = await downloadEncryptedMedia(mediaUrl, (encBuf) =>
|
||||
decryptFile(encBuf, thumbInfo.mimetype ?? FALLBACK_MIMETYPE, encInfo)
|
||||
decryptFile(encBuf, thumbInfo.mimetype ?? FALLBACK_MIMETYPE, encInfo),
|
||||
);
|
||||
return URL.createObjectURL(fileContent);
|
||||
}
|
||||
|
||||
return mediaUrl;
|
||||
}, [mx, info, useAuthentication])
|
||||
}, [mx, info, useAuthentication]),
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
|
||||
@@ -69,7 +69,7 @@ export const VideoContent = as<'div', VideoContentProps>(
|
||||
renderVideo,
|
||||
...props
|
||||
},
|
||||
ref
|
||||
ref,
|
||||
) => {
|
||||
const mx = useMatrixClient();
|
||||
const useAuthentication = useMediaAuthentication();
|
||||
@@ -85,11 +85,11 @@ export const VideoContent = as<'div', VideoContentProps>(
|
||||
if (!mediaUrl) throw new Error('Invalid media URL');
|
||||
const fileContent = encInfo
|
||||
? await downloadEncryptedMedia(mediaUrl, (encBuf) =>
|
||||
decryptFile(encBuf, mimeType, encInfo)
|
||||
decryptFile(encBuf, mimeType, encInfo),
|
||||
)
|
||||
: await downloadMedia(mediaUrl);
|
||||
return URL.createObjectURL(fileContent);
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo])
|
||||
}, [mx, url, useAuthentication, mimeType, encInfo]),
|
||||
);
|
||||
|
||||
const handleLoad = () => {
|
||||
@@ -237,5 +237,5 @@ export const VideoContent = as<'div', VideoContentProps>(
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -8,12 +8,12 @@ export const MessageBase = as<'div', css.MessageBaseVariants>(
|
||||
<div
|
||||
className={classNames(
|
||||
css.MessageBase({ highlight, selected, collapse, autoCollapse, space }),
|
||||
className
|
||||
className,
|
||||
)}
|
||||
{...props}
|
||||
ref={ref}
|
||||
/>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
export const AvatarBase = as<'span'>(({ className, ...props }, ref) => (
|
||||
@@ -38,5 +38,5 @@ export const MessageTextBody = as<'div', css.MessageTextBodyVariants & { notice?
|
||||
{...props}
|
||||
ref={ref}
|
||||
/>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
@@ -59,5 +59,5 @@ export const BubbleLayout = as<'div', BubbleLayoutProps>(
|
||||
)}
|
||||
</Box>
|
||||
</Box>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
@@ -14,5 +14,5 @@ export const CompactLayout = as<'div', CompactLayoutProps>(
|
||||
</Box>
|
||||
{children}
|
||||
</Box>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
@@ -23,5 +23,5 @@ export const CompactPlaceholder = as<'div', { variant?: ContainerColor }>(
|
||||
<LinePlaceholder variant={variant} style={{ maxWidth: toRem(msgSize) }} />
|
||||
</CompactLayout>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -35,5 +35,5 @@ export const DefaultPlaceholder = as<'div', { variant?: ContainerColor }>(
|
||||
</Box>
|
||||
</ModernLayout>
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
@@ -11,5 +11,5 @@ export const LinePlaceholder = as<'div', css.LinePlaceholderVariants>(
|
||||
{...props}
|
||||
ref={ref}
|
||||
/>
|
||||
)
|
||||
),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user