mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-12 07:36:42 +08:00
3d855647c7
## Button
- Remove props withoutHoverStyle
refactor hover impl with independent layer, so that hover-color won't affect the background even if is overridden outside
- Update `type` (renamed to `variant`):
- remove `processing` and `warning`
- rename `default` with `secondary`
- Remove `shape` props
- Remove `icon` and `iconPosition`, replaced with `prefix: ReactNode` and `suffix: ReactNode`
- Integrate tooltip for more convenient usage
- New Storybook document
- Focus style
## IconButton
- A Wrapper base on `<Button />`
- Override Button size and variant
- size: `'12' | '14' | '16' | '20' | '24' | number`
These presets size are referenced from the design system.
- variant: `'plain' | 'solid' | 'danger' | 'custom'`
- Inset icon via Button 's prefix
## Fix
- fix some button related issues
- close AF-1159, AF-1160, AF-1161, AF-1162, AF-1163, AF-1158, AF-1157
## Storybook

197 lines
4.5 KiB
TypeScript
197 lines
4.5 KiB
TypeScript
import { cssVar } from '@toeverything/theme';
|
|
import { createVar, keyframes, style } from '@vanilla-extract/css';
|
|
export const sizeVar = createVar('sizeVar');
|
|
export const blurVar = createVar('blurVar');
|
|
const bottomAnimation = keyframes({
|
|
'0%': {
|
|
top: '-44%',
|
|
left: '-11%',
|
|
transform: 'matrix(-0.29, -0.96, 0.94, -0.35, 0, 0)',
|
|
},
|
|
'16%': {
|
|
left: '-18%',
|
|
top: '-51%',
|
|
transform: 'matrix(-0.73, -0.69, 0.64, -0.77, 0, 0)',
|
|
},
|
|
'32%': {
|
|
left: '-7%',
|
|
top: '-40%',
|
|
transform: 'matrix(-0.97, -0.23, 0.16, -0.99, 0, 0)',
|
|
},
|
|
'48%': {
|
|
left: '-15%',
|
|
top: '-39%',
|
|
transform: 'matrix(-0.88, 0.48, -0.6, -0.8, 0, 0)',
|
|
},
|
|
'64%': {
|
|
left: '-7%',
|
|
top: '-40%',
|
|
transform: 'matrix(-0.97, -0.23, 0.16, -0.99, 0, 0)',
|
|
},
|
|
'80%': {
|
|
left: '-18%',
|
|
top: '-51%',
|
|
transform: 'matrix(-0.73, -0.69, 0.64, -0.77, 0, 0)',
|
|
},
|
|
'100%': {
|
|
top: '-44%',
|
|
left: '-11%',
|
|
transform: 'matrix(-0.29, -0.96, 0.94, -0.35, 0, 0)',
|
|
},
|
|
});
|
|
const middleAnimation = keyframes({
|
|
'0%': {
|
|
left: '-30px',
|
|
top: '-30px',
|
|
transform: 'matrix(-0.48, -0.88, 0.8, -0.6, 0, 0)',
|
|
},
|
|
'16%': {
|
|
left: '-37px',
|
|
top: '-37px',
|
|
transform: 'matrix(-0.86, -0.52, 0.39, -0.92, 0, 0)',
|
|
},
|
|
'32%': {
|
|
left: '-20px',
|
|
top: '-10px',
|
|
transform: 'matrix(-1, -0.02, -0.12, -0.99, 0, 0)',
|
|
},
|
|
'48%': {
|
|
left: '-27px',
|
|
top: '-2px',
|
|
transform: 'matrix(-0.88, 0.48, -0.6, -0.8, 0, 0)',
|
|
},
|
|
'64%': {
|
|
left: '-20px',
|
|
top: '-10px',
|
|
transform: 'matrix(-1, -0.02, -0.12, -0.99, 0, 0)',
|
|
},
|
|
'80%': {
|
|
left: '-37px',
|
|
top: '-37px',
|
|
transform: 'matrix(-0.86, -0.52, 0.39, -0.92, 0, 0)',
|
|
},
|
|
'100%': {
|
|
left: '-30px',
|
|
top: '-30px',
|
|
transform: 'matrix(-0.48, -0.88, 0.8, -0.6, 0, 0)',
|
|
},
|
|
});
|
|
export const DefaultAvatarContainerStyle = style({
|
|
width: '100%',
|
|
height: '100%',
|
|
position: 'relative',
|
|
overflow: 'hidden',
|
|
});
|
|
export const DefaultAvatarMiddleItemStyle = style({
|
|
width: '83%',
|
|
height: '81%',
|
|
position: 'absolute',
|
|
left: '-30%',
|
|
top: '-30%',
|
|
transform: 'matrix(-0.48, -0.88, 0.8, -0.6, 0, 0)',
|
|
opacity: '0.8',
|
|
filter: `blur(${blurVar})`,
|
|
transformOrigin: 'center center',
|
|
animation: `${middleAnimation} 3s ease-in-out forwards infinite`,
|
|
animationPlayState: 'paused',
|
|
});
|
|
export const DefaultAvatarMiddleItemWithAnimationStyle = style({
|
|
animationPlayState: 'running',
|
|
});
|
|
export const DefaultAvatarBottomItemStyle = style({
|
|
width: '98%',
|
|
height: '97%',
|
|
position: 'absolute',
|
|
top: '-44%',
|
|
left: '-11%',
|
|
transform: 'matrix(-0.29, -0.96, 0.94, -0.35, 0, 0)',
|
|
opacity: '0.8',
|
|
filter: `blur(${blurVar})`,
|
|
transformOrigin: 'center center',
|
|
willChange: 'left, top, transform',
|
|
animation: `${bottomAnimation} 3s ease-in-out forwards infinite`,
|
|
animationPlayState: 'paused',
|
|
});
|
|
export const DefaultAvatarBottomItemWithAnimationStyle = style({
|
|
animationPlayState: 'running',
|
|
});
|
|
export const DefaultAvatarTopItemStyle = style({
|
|
width: '104%',
|
|
height: '94%',
|
|
position: 'absolute',
|
|
right: '-30%',
|
|
top: '-30%',
|
|
opacity: '0.8',
|
|
filter: `blur(${blurVar})`,
|
|
transform: 'matrix(-0.28, -0.96, 0.93, -0.37, 0, 0)',
|
|
transformOrigin: 'center center',
|
|
});
|
|
export const avatarRoot = style({
|
|
position: 'relative',
|
|
display: 'inline-flex',
|
|
flexShrink: 0,
|
|
});
|
|
export const avatarWrapper = style({
|
|
vars: {
|
|
[sizeVar]: 'unset',
|
|
},
|
|
width: sizeVar,
|
|
height: sizeVar,
|
|
fontSize: `calc(${sizeVar} / 2)`,
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
verticalAlign: 'middle',
|
|
userSelect: 'none',
|
|
position: 'relative',
|
|
overflow: 'hidden',
|
|
});
|
|
export const avatarImage = style({
|
|
width: '100%',
|
|
height: '100%',
|
|
objectFit: 'cover',
|
|
});
|
|
export const avatarFallback = style({
|
|
width: '100%',
|
|
height: '100%',
|
|
overflow: 'hidden',
|
|
display: 'flex',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
backgroundColor: cssVar('primaryColor'),
|
|
color: cssVar('white'),
|
|
lineHeight: '1',
|
|
fontWeight: '500',
|
|
});
|
|
export const hoverWrapper = style({
|
|
width: '100%',
|
|
height: '100%',
|
|
position: 'absolute',
|
|
display: 'flex',
|
|
justifyContent: 'center',
|
|
alignItems: 'center',
|
|
backgroundColor: 'rgba(60, 61, 63, 0.5)',
|
|
zIndex: '1',
|
|
color: cssVar('pureWhite'),
|
|
opacity: 0,
|
|
transition: 'opacity .15s',
|
|
cursor: 'pointer',
|
|
selectors: {
|
|
'&:hover': {
|
|
opacity: 1,
|
|
},
|
|
},
|
|
});
|
|
export const removeButton = style({
|
|
position: 'absolute',
|
|
right: '-8px',
|
|
top: '-2px',
|
|
visibility: 'hidden',
|
|
zIndex: '1',
|
|
selectors: {
|
|
[`${avatarRoot}:hover &`]: {
|
|
visibility: 'visible',
|
|
},
|
|
},
|
|
});
|