vojo/src/app/components/message/attachment/StreamMedia.css.ts

54 lines
2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { style } from '@vanilla-extract/css';
import { color, config, toRem } from 'folds';
// Small uniform rounding on ALL four corners (R400 = 8px) — the old
// asymmetric "notch toward sender" corner is gone; previews now read as
// plain rounded thumbnails on both own and peer sides.
const StreamMediaCornerSmall = config.radii.R400;
const StreamMediaCornerRound = config.radii.R500;
export const StreamMediaBubble = style({
position: 'relative',
overflow: 'hidden',
backgroundColor: color.SurfaceVariant.Container,
maxWidth: '100%',
boxSizing: 'border-box',
flexShrink: 0,
borderRadius: StreamMediaCornerSmall,
// 1px frame drawn ABOVE the image via a pseudo-element. `inset
// box-shadow` would sit on the bg layer and get hidden by the
// `<img>` filling 100% × 100%; a real `border` would push the
// image's coordinate space and re-introduce the 1px chip-alignment
// offset we just removed. The pseudo sits at z-index 1 (above
// image's auto-stacked 0, below the username overlay at z 2),
// inherits the bubble's border-radius, and is pointer-events:none so
// clicks pass through to the image.
selectors: {
'&::after': {
content: '""',
position: 'absolute',
inset: 0,
border: `1.2px solid ${color.Surface.Container}`,
borderRadius: 'inherit',
pointerEvents: 'none',
zIndex: 1,
},
},
});
// Caption mini-bubble under the image. Keeps a slightly larger R500 radius,
// intentionally distinct from the preview bubble's uniform R400.
export const StreamMediaCaption = style({
marginTop: toRem(4),
backgroundColor: color.SurfaceVariant.Container,
color: color.SurfaceVariant.OnContainer,
border: `1px solid ${color.Surface.Container}`,
borderRadius: StreamMediaCornerRound,
paddingLeft: config.space.S300,
paddingRight: config.space.S300,
paddingTop: config.space.S200,
paddingBottom: config.space.S200,
maxWidth: '100%',
width: 'fit-content',
boxSizing: 'border-box',
});