mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-03-13 06:30:01 +01:00
156 lines
3 KiB
TypeScript
156 lines
3 KiB
TypeScript
|
import { createVar, keyframes, style, styleVariants } from '@vanilla-extract/css';
|
||
|
import { recipe, RecipeVariants } from '@vanilla-extract/recipes';
|
||
|
import { DefaultReset, color, config, toRem } from 'folds';
|
||
|
|
||
|
export const StickySection = style({
|
||
|
position: 'sticky',
|
||
|
top: config.space.S100,
|
||
|
});
|
||
|
|
||
|
const SpacingVar = createVar();
|
||
|
const SpacingVariant = styleVariants({
|
||
|
'0': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S0,
|
||
|
},
|
||
|
},
|
||
|
'100': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S100,
|
||
|
},
|
||
|
},
|
||
|
'200': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S200,
|
||
|
},
|
||
|
},
|
||
|
'300': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S300,
|
||
|
},
|
||
|
},
|
||
|
'400': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S400,
|
||
|
},
|
||
|
},
|
||
|
'500': {
|
||
|
vars: {
|
||
|
[SpacingVar]: config.space.S500,
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const highlightAnime = keyframes({
|
||
|
'0%': {
|
||
|
backgroundColor: color.Primary.Container,
|
||
|
},
|
||
|
'25%': {
|
||
|
backgroundColor: color.Primary.ContainerActive,
|
||
|
},
|
||
|
'50%': {
|
||
|
backgroundColor: color.Primary.Container,
|
||
|
},
|
||
|
'75%': {
|
||
|
backgroundColor: color.Primary.ContainerActive,
|
||
|
},
|
||
|
'100%': {
|
||
|
backgroundColor: color.Primary.Container,
|
||
|
},
|
||
|
});
|
||
|
const HighlightVariant = styleVariants({
|
||
|
true: {
|
||
|
animation: `${highlightAnime} 2000ms ease-in-out`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const SelectedVariant = styleVariants({
|
||
|
true: {
|
||
|
backgroundColor: color.Surface.ContainerActive,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const AutoCollapse = style({
|
||
|
selectors: {
|
||
|
[`&+&`]: {
|
||
|
marginTop: 0,
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const MessageBase = recipe({
|
||
|
base: [
|
||
|
DefaultReset,
|
||
|
{
|
||
|
marginTop: SpacingVar,
|
||
|
padding: `${config.space.S100} ${config.space.S200} ${config.space.S100} ${config.space.S400}`,
|
||
|
borderRadius: `0 ${config.radii.R400} ${config.radii.R400} 0`,
|
||
|
},
|
||
|
],
|
||
|
variants: {
|
||
|
space: SpacingVariant,
|
||
|
collapse: {
|
||
|
true: {
|
||
|
marginTop: 0,
|
||
|
},
|
||
|
},
|
||
|
autoCollapse: {
|
||
|
true: AutoCollapse,
|
||
|
},
|
||
|
highlight: HighlightVariant,
|
||
|
selected: SelectedVariant,
|
||
|
},
|
||
|
defaultVariants: {
|
||
|
space: '400',
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export type MessageBaseVariants = RecipeVariants<typeof MessageBase>;
|
||
|
|
||
|
export const CompactHeader = style([
|
||
|
DefaultReset,
|
||
|
StickySection,
|
||
|
{
|
||
|
maxWidth: toRem(170),
|
||
|
width: '100%',
|
||
|
},
|
||
|
]);
|
||
|
|
||
|
export const AvatarBase = style({
|
||
|
paddingTop: toRem(4),
|
||
|
cursor: 'pointer',
|
||
|
transition: 'transform 200ms cubic-bezier(0, 0.8, 0.67, 0.97)',
|
||
|
|
||
|
selectors: {
|
||
|
'&:hover': {
|
||
|
transform: `translateY(${toRem(-4)})`,
|
||
|
},
|
||
|
},
|
||
|
});
|
||
|
|
||
|
export const ModernBefore = style({
|
||
|
minWidth: toRem(36),
|
||
|
});
|
||
|
|
||
|
export const BubbleBefore = style([ModernBefore]);
|
||
|
|
||
|
export const BubbleContent = style({
|
||
|
maxWidth: toRem(800),
|
||
|
padding: config.space.S200,
|
||
|
backgroundColor: color.SurfaceVariant.Container,
|
||
|
color: color.SurfaceVariant.OnContainer,
|
||
|
borderRadius: config.radii.R400,
|
||
|
});
|
||
|
|
||
|
export const Username = style({
|
||
|
cursor: 'pointer',
|
||
|
overflow: 'hidden',
|
||
|
whiteSpace: 'nowrap',
|
||
|
textOverflow: 'ellipsis',
|
||
|
selectors: {
|
||
|
'&:hover, &:focus-visible': {
|
||
|
textDecoration: 'underline',
|
||
|
},
|
||
|
},
|
||
|
});
|