diff --git a/src/components/messageStream/AttachmentDownloadPill.tsx b/src/components/messageStream/AttachmentDownloadPill.tsx index 9822131..f484304 100644 --- a/src/components/messageStream/AttachmentDownloadPill.tsx +++ b/src/components/messageStream/AttachmentDownloadPill.tsx @@ -12,6 +12,14 @@ type AttachmentDownloadPillProps = { attachment: Attachment; leadingLabel?: string; className?: string; + /** + * When true, the pill scales with its container's width via container-query + * units (clamped to a min/max). The host element must establish a query + * container (e.g. `style={{ containerType: "inline-size" }}`). Use this on + * album tiles so the pill shrinks on small thumbnails. Defaults to a fixed + * size for standalone images/videos. + */ + adaptive?: boolean; }; export function AttachmentDownloadPill({ @@ -19,6 +27,7 @@ export function AttachmentDownloadPill({ attachment, leadingLabel, className = "absolute left-2 top-2", + adaptive = false, }: AttachmentDownloadPillProps) { const { t } = useI18n(); const { showToast } = useToast(); @@ -38,28 +47,42 @@ export function AttachmentDownloadPill({ } }; + // Fixed default vs. container-query-driven adaptive sizing (clamped). + const fontCls = adaptive ? "text-[clamp(10px,5cqw,12px)]" : "text-[12px]"; + const squareCls = adaptive + ? "h-[clamp(22px,11cqw,30px)] w-[clamp(22px,11cqw,30px)]" + : "h-[30px] w-[30px]"; + const iconCls = adaptive + ? "h-[clamp(13px,6.5cqw,18px)] w-[clamp(13px,6.5cqw,18px)]" + : "h-[18px] w-[18px]"; + const textBoxCls = adaptive + ? "h-[clamp(22px,11cqw,30px)] px-[clamp(6px,3cqw,10px)]" + : "h-[30px] px-2.5"; + return (