diff --git a/packages/ui/css/styles.css b/packages/ui/css/styles.css index 60321be059..f7248ac521 100644 --- a/packages/ui/css/styles.css +++ b/packages/ui/css/styles.css @@ -10512,6 +10512,7 @@ font-size: var(--bui-font-size-3); font-family: var(--bui-font-regular); color: var(--bui-fg-primary); + --tooltip-offset: var(--bui-space-3); border-radius: 4px; outline: none; transition: transform .2s, opacity .2s; @@ -10522,45 +10523,59 @@ transform: var(--origin); opacity: 0; } + + &[data-placement="top"] { + margin-bottom: var(--tooltip-offset); + --origin: translateY(4px); + } + + &[data-placement="right"] { + margin-left: var(--tooltip-offset); + --origin: translateX(-4px); + } + + &[data-placement="bottom"] { + margin-top: var(--tooltip-offset); + --origin: translateY(-4px); + } + + &[data-placement="left"] { + margin-right: var(--tooltip-offset); + --origin: translateX(4px); + } } .bui-TooltipArrow { & svg { + --tooltip-arrow-overlap: -2px; display: block; - } - &[data-placement="top"] { - transform: translateY(4px); + & path:first-child { + fill: var(--bui-bg-surface-1); + } - & svg { - transform: translateY(-2px); + & path:nth-child(2) { + fill: var(--bui-gray-3); } } - &[data-placement="bottom"] { - & svg { - transform: rotate(180deg)translateY(-2px); - } + &[data-placement="top"] svg { + margin-top: var(--tooltip-arrow-overlap); } - &[data-placement="right"] { - & svg { - transform: rotate(90deg)translateY(-7px); - } + &[data-placement="bottom"] svg { + margin-bottom: var(--tooltip-arrow-overlap); + transform: rotate(180deg); } - &[data-placement="left"] { - & svg { - transform: rotate(-90deg)translateY(-7px); - } + &[data-placement="right"] svg { + margin-right: var(--tooltip-arrow-overlap); + transform: rotate(90deg); } - & svg path:first-child { - fill: canvas; - } - - & svg path:nth-child(2) { - fill: var(--bui-gray-3); + &[data-placement="left"] svg { + margin-left: var(--tooltip-arrow-overlap); + transform: rotate(-90deg); } } diff --git a/packages/ui/src/components/Tooltip/Tooltip.styles.css b/packages/ui/src/components/Tooltip/Tooltip.styles.css index f9ba32e47f..f80a12bbc1 100644 --- a/packages/ui/src/components/Tooltip/Tooltip.styles.css +++ b/packages/ui/src/components/Tooltip/Tooltip.styles.css @@ -36,52 +36,71 @@ transform: var(--origin); opacity: 0; } -} -.bui-TooltipArrow { - svg { - display: block; - /* The tooltip is rendered overlaying the main - tooltip element by 1px. This causes the borders - to overlap, which causes minor visual artifacts - with transparent border colors. To mitigate this, - we split the stroke and fill across separate - elements in order to guarantee that the stroke is - always overlaying a consistent color. */ - } + --tooltip-offset: var(--bui-space-3); &[data-placement='top'] { - transform: translateY(4px); - - & svg { - transform: translateY(-2px); - } - } - - &[data-placement='bottom'] { - & svg { - transform: rotate(180deg) translateY(-2px); - } + margin-bottom: var(--tooltip-offset); + --origin: translateY(4px); } &[data-placement='right'] { - & svg { - transform: rotate(90deg) translateY(-7px); - } + margin-left: var(--tooltip-offset); + --origin: translateX(-4px); + } + + &[data-placement='bottom'] { + margin-top: var(--tooltip-offset); + --origin: translateY(-4px); } &[data-placement='left'] { - & svg { - transform: rotate(-90deg) translateY(-7px); + margin-right: var(--tooltip-offset); + --origin: translateX(4px); + } +} + +.bui-TooltipArrow { + & svg { + display: block; + + /* The tooltip is rendered overlaying the main + tooltip element by 1px. This causes the borders + to overlap, which causes minor visual artifacts + with transparent border colors. To mitigate this, + we split the stroke and fill across separate + elements in order to guarantee that the stroke is + always overlaying a consistent color. */ + path:nth-child(1) { + fill: var(--bui-bg-surface-1); } + + path:nth-child(2) { + fill: var(--bui-gray-3); + } + + /* The arrow svg overlaps the tooltip by 2px, so we + need to adjust the margins accordingly. */ + --tooltip-arrow-overlap: -2px; } - svg path:nth-child(1) { - fill: canvas; + &[data-placement='top'] svg { + margin-top: var(--tooltip-arrow-overlap); } - svg path:nth-child(2) { - fill: var(--bui-gray-3); + &[data-placement='bottom'] svg { + margin-bottom: var(--tooltip-arrow-overlap); + transform: rotate(180deg); + } + + &[data-placement='right'] svg { + margin-right: var(--tooltip-arrow-overlap); + transform: rotate(90deg); + } + + &[data-placement='left'] svg { + margin-left: var(--tooltip-arrow-overlap); + transform: rotate(-90deg); } } diff --git a/packages/ui/src/components/Tooltip/Tooltip.tsx b/packages/ui/src/components/Tooltip/Tooltip.tsx index 906a804830..4503a1ce90 100644 --- a/packages/ui/src/components/Tooltip/Tooltip.tsx +++ b/packages/ui/src/components/Tooltip/Tooltip.tsx @@ -34,18 +34,17 @@ export const TooltipTrigger = (props: TooltipTriggerComponentProps) => { /** @public */ export const Tooltip = forwardRef( - ({ className, children, offset = 12, ...rest }, ref) => { + ({ className, children, ...rest }, ref) => { const { classNames } = useStyles('Tooltip'); return ( - +