Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/tooltip/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
},
"dependencies": {
"@radix-ui/react-slot": "catalog:",
"@vanilla-extract/recipes": "catalog:",
"clsx": "catalog:"
},
"devDependencies": {
Expand Down
214 changes: 109 additions & 105 deletions packages/tooltip/src/Tooltip.css.ts
Original file line number Diff line number Diff line change
@@ -1,120 +1,124 @@
import { style, styleVariants } from '@vanilla-extract/css';
import { style } from '@vanilla-extract/css';
import { recipe } from '@vanilla-extract/recipes';

export const tooltip = style({
position: 'fixed',
backgroundColor: 'var(--tooltip-bg-color, #000000)',
color: '#ffffff',
padding: '8px 12px',
borderRadius: '8px',
fontSize: '12px',
lineHeight: 1.5,
whiteSpace: 'normal',
wordWrap: 'break-word',
maxWidth: '250px',
boxShadow: '0 4px 8px rgba(0, 0, 0, 0.2)',
zIndex: 1000,
opacity: 0,
transform: 'scale(0.95)',
transition: 'opacity 0.3s ease, transform 0.3s ease',
pointerEvents: 'none',
selectors: {
'&.visible': {
opacity: 1,
transform: 'scale(1)',
pointerEvents: 'auto',
},
'&::after': {
content: '""',
position: 'absolute',
width: 0,
height: 0,
borderStyle: 'solid',
},
},
});

export const placement = styleVariants({
'top-left': {
export const tooltip = recipe({
base: {
position: 'fixed',
backgroundColor: 'var(--tooltip-bg-color, #000000)',
color: '#ffffff',
padding: '8px 12px',
borderRadius: '8px',
fontSize: '12px',
lineHeight: 1.5,
whiteSpace: 'normal',
wordWrap: 'break-word',
maxWidth: '250px',
boxShadow: '0 4px 8px rgba(0, 0, 0, 0.2)',
zIndex: 1000,
opacity: 0,
transform: 'scale(0.95)',
transition: 'opacity 0.3s ease, transform 0.3s ease',
pointerEvents: 'none',
selectors: {
'&::after': {
bottom: '-6px',
left: '8px',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
'&.visible': {
opacity: 1,
transform: 'scale(1)',
pointerEvents: 'auto',
},
},
},
'top-right': {
selectors: {
'&::after': {
bottom: '-6px',
right: '8px',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
content: '""',
position: 'absolute',
width: 0,
height: 0,
borderStyle: 'solid',
},
},
},
'bottom-left': {
selectors: {
'&::after': {
top: '-6px',
left: '8px',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
variants: {
placement: {
'top-left': {
selectors: {
'&::after': {
bottom: '-6px',
left: '8px',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
},
},
},
},
},
'bottom-right': {
selectors: {
'&::after': {
top: '-6px',
right: '8px',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
'top-right': {
selectors: {
'&::after': {
bottom: '-6px',
right: '8px',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
},
},
},
},
},
top: {
selectors: {
'&::after': {
bottom: '-6px',
left: '50%',
transform: 'translateX(-50%)',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
'bottom-left': {
selectors: {
'&::after': {
top: '-6px',
left: '8px',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
},
},
},
},
},
bottom: {
selectors: {
'&::after': {
top: '-6px',
left: '50%',
transform: 'translateX(-50%)',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
'bottom-right': {
selectors: {
'&::after': {
top: '-6px',
right: '8px',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
},
},
},
},
},
left: {
selectors: {
'&::after': {
right: '-6px',
top: '50%',
transform: 'translateY(-50%)',
borderWidth: '6px 0 6px 6px',
borderColor: 'transparent transparent transparent var(--tooltip-bg-color, #000000)',
top: {
selectors: {
'&::after': {
bottom: '-6px',
left: '50%',
transform: 'translateX(-50%)',
borderWidth: '6px 6px 0 6px',
borderColor: 'var(--tooltip-bg-color, #000000) transparent transparent transparent',
},
},
},
},
},
right: {
selectors: {
'&::after': {
left: '-6px',
top: '50%',
transform: 'translateY(-50%)',
borderWidth: '6px 6px 6px 0',
borderColor: 'transparent var(--tooltip-bg-color, #000000) transparent transparent',
bottom: {
selectors: {
'&::after': {
top: '-6px',
left: '50%',
transform: 'translateX(-50%)',
borderWidth: '0 6px 6px 6px',
borderColor: 'transparent transparent var(--tooltip-bg-color, #000000) transparent',
},
},
},
left: {
selectors: {
'&::after': {
right: '-6px',
top: '50%',
transform: 'translateY(-50%)',
borderWidth: '6px 0 6px 6px',
borderColor: 'transparent transparent transparent var(--tooltip-bg-color, #000000)',
},
},
},
right: {
selectors: {
'&::after': {
left: '-6px',
top: '50%',
transform: 'translateY(-50%)',
borderWidth: '6px 6px 6px 0',
borderColor: 'transparent var(--tooltip-bg-color, #000000) transparent transparent',
},
},
},
},
},
Expand Down
Loading
Loading