diff --git a/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-basic-linux.png b/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-basic-linux.png index c05898990b..22c43ee301 100644 Binary files a/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-basic-linux.png and b/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-basic-linux.png differ diff --git a/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-with-thumb-linux.png b/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-with-thumb-linux.png index adaf610f7c..7a78ee086f 100644 Binary files a/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-with-thumb-linux.png and b/apps/web/playwright/snapshots/messages/messages.spec.ts/preview-with-thumb-linux.png differ diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/default-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/default-auto.png index 330bb29923..cf84c7e35d 100644 Binary files a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/default-auto.png and b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/default-auto.png differ diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-hidden-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-hidden-auto.png index 2da4b2f8d9..4a4dec3cc1 100644 Binary files a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-hidden-auto.png and b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-hidden-auto.png differ diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-visible-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-visible-auto.png index 3ae0e6f5d4..aaded5547c 100644 Binary files a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-visible-auto.png and b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/multiple-previews-visible-auto.png differ diff --git a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/with-compact-view-auto.png b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/with-compact-view-auto.png index 5460876ee0..7ddf2e2e72 100644 Binary files a/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/with-compact-view-auto.png and b/packages/shared-components/__vis__/linux/__baselines__/room/timeline/event-tile/UrlPreviewGroupView/UrlPreviewGroupView.stories.tsx/with-compact-view-auto.png differ diff --git a/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/LinkPreview/LinkPreview.tsx b/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/LinkPreview/LinkPreview.tsx index 3f74dc314d..4d537011f2 100644 --- a/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/LinkPreview/LinkPreview.tsx +++ b/packages/shared-components/src/room/timeline/event-tile/UrlPreviewGroupView/LinkPreview/LinkPreview.tsx @@ -14,6 +14,7 @@ import { useI18n } from "../../../../../core/i18n/i18nContext"; import type { UrlPreview } from "../types"; import { LinkedText } from "../../../../../core/utils/LinkedText"; import styles from "./LinkPreview.module.css"; +import { isPropValid } from "storybook/theming"; export interface LinkPreviewActions { onImageClick: () => void; @@ -21,6 +22,63 @@ export interface LinkPreviewActions { export type LinkPreviewProps = UrlPreview & LinkPreviewActions; +function LinkTitle({ + title, + showTooltipOnLink, + link, +}: Pick): JSX.Element { + const caption = new URL(link).toString(); + const anchor = ( + + {title} + + ); + return showTooltipOnLink ? {anchor} : anchor; +} + +function LinkSiteName({ siteIcon, siteName }: { siteIcon?: string; siteName: string }): JSX.Element { + return ( +
+ + + {siteName} + +
+ ); +} + +/** + * A condensed link preview that only contains the site icon, the title of the link and the site name. + */ +function LinkPreviewInline({ + title, + showTooltipOnLink, + siteIcon, + siteName, + link, +}: Omit): JSX.Element { + return ( +
+
+ +
+
+ + {siteName && } +
+
+ ); +} + /** * LinkPreview renders a single preview component for a single link on an event. It is usually rendered as part of * a `UrlPreviewGroupView`. @@ -28,13 +86,6 @@ export type LinkPreviewProps = UrlPreview & LinkPreviewActions; export function LinkPreview({ onImageClick, ...preview }: LinkPreviewProps): JSX.Element { const { translate: _t } = useI18n(); - const tooltipCaption = useMemo(() => { - if (preview.showTooltipOnLink) { - return new URL(preview.link, window.location.href).toString(); - } - return null; - }, [preview.link, preview.showTooltipOnLink]); - const onImageClickHandler = useCallback( (ev) => { if (ev.button != 0 || ev.metaKey) return; @@ -48,10 +99,17 @@ export function LinkPreview({ onImageClick, ...preview }: LinkPreviewProps): JSX [preview.image?.imageFull, onImageClick], ); + if (!preview.image && !preview.author && !preview.description) { + return ; + } + let img: JSX.Element | undefined; - // Don't render a button to show the image, just hide it outright + if (preview.image) { if (preview.image.playable) { + // Playable media do not have clickable images so we don't + // overlay buttons atop buttons, instead we render a + // button for them to open the media. img = (
); } else { + // Otherwise, the preview can be clicked on. img = (