diff --git a/.changeset/khaki-carpets-tease.md b/.changeset/khaki-carpets-tease.md
new file mode 100644
index 000000000..ed2162b4a
--- /dev/null
+++ b/.changeset/khaki-carpets-tease.md
@@ -0,0 +1,5 @@
+---
+"@cube-dev/ui-kit": patch
+---
+
+Add light version for Tooltip component. Use `isLight` prop to activate it.
diff --git a/src/components/overlays/Tooltip/Tooltip.stories.tsx b/src/components/overlays/Tooltip/Tooltip.stories.tsx
index 5e1f8d541..bc099e6c7 100644
--- a/src/components/overlays/Tooltip/Tooltip.stories.tsx
+++ b/src/components/overlays/Tooltip/Tooltip.stories.tsx
@@ -69,7 +69,7 @@ ViaProvider.play = async ({ canvasElement }) => {
await timeout(1000);
const button = await canvas.findByRole('button');
- // this is a weird hack that makes tooltip working properly on page load
+ // this is hack that makes tooltip working properly on page load
await userEvent.unhover(button);
await userEvent.hover(button);
@@ -91,3 +91,7 @@ ViaProviderWithActiveWrap.play = async ({ canvasElement }) => {
await waitFor(() => expect(canvas.getByRole('tooltip')).toBeVisible());
};
+
+export const Light: typeof Template = Template.bind({});
+Light.args = { isLight: true };
+Light.play = Default.play;
diff --git a/src/components/overlays/Tooltip/Tooltip.tsx b/src/components/overlays/Tooltip/Tooltip.tsx
index 89ecd9b60..c3075616c 100644
--- a/src/components/overlays/Tooltip/Tooltip.tsx
+++ b/src/components/overlays/Tooltip/Tooltip.tsx
@@ -5,6 +5,7 @@ import {
forwardRef,
useContext,
useImperativeHandle,
+ useMemo,
useRef,
} from 'react';
import { AriaTooltipProps, useTooltip } from 'react-aria';
@@ -29,8 +30,14 @@ export type { AriaTooltipProps };
const TooltipElement = tasty({
styles: {
display: 'block',
- fill: '#dark.85',
- color: '#white',
+ fill: {
+ '': '#dark.85',
+ light: '#white',
+ },
+ color: {
+ '': '#white',
+ light: '#dark-02',
+ },
width: 'initial 36x max-content',
radius: true,
padding: '.75x 1x',
@@ -41,6 +48,10 @@ const TooltipElement = tasty({
'': 'none',
material: 'auto',
},
+ filter: {
+ '': false,
+ light: 'drop-shadow(0 0 1px rgb(var(--dark-color-rgb) / 20%)',
+ },
},
});
@@ -50,7 +61,10 @@ const TooltipTipElement = tasty({
width: '1px',
height: '1px',
border: '.5x #clear',
- borderTop: '.5x solid #dark.85',
+ borderTop: {
+ '': '.5x solid #dark.85',
+ light: '.5x solid #white',
+ },
borderBottom: '0',
top: {
'': 'initial',
@@ -100,6 +114,7 @@ export interface CubeTooltipProps
placement?: PlacementAxis;
isMaterial?: boolean;
isOpen?: boolean;
+ isLight?: boolean;
onOpenChange?: (isOpen: boolean) => void;
defaultOpen?: boolean;
shouldFlip?: boolean;
@@ -116,6 +131,8 @@ function Tooltip(
overlayProps,
minOffset,
minScale,
+ isMaterial: isMaterialContext,
+ isLight: isLightContext,
...tooltipProviderProps
} = useContext(TooltipContext);
@@ -130,7 +147,8 @@ function Tooltip(
isOpen,
tipStyles,
showIcon,
- isMaterial,
+ isMaterial = isMaterialContext,
+ isLight = isLightContext,
...otherProps
} = props;
@@ -149,16 +167,21 @@ function Tooltip(
minScale = String(minScale);
}
+ const mods = useMemo(() => {
+ return {
+ material: isMaterial,
+ light: isLight,
+ open: isOpen,
+ };
+ }, [isMaterial, isOpen, isLight]);
+
return (
diff --git a/src/components/overlays/Tooltip/TooltipTrigger.tsx b/src/components/overlays/Tooltip/TooltipTrigger.tsx
index beccee5ea..80b7bea34 100644
--- a/src/components/overlays/Tooltip/TooltipTrigger.tsx
+++ b/src/components/overlays/Tooltip/TooltipTrigger.tsx
@@ -23,6 +23,7 @@ export interface CubeTooltipTriggerProps extends TooltipTriggerProps {
offset?: number;
placement?: Placement;
isMaterial?: boolean;
+ isLight?: boolean;
/** Whether the trigger should have an ActiveZone wrap to make sure it's focusable and hoverable.
* Otherwise, tooltip won't work. */
activeWrap?: boolean;
@@ -61,6 +62,7 @@ export function TooltipTrigger(props: CubeTooltipTriggerProps) {
crossOffset = DEFAULT_CROSS_OFFSET,
isDisabled,
isMaterial,
+ isLight,
offset = DEFAULT_OFFSET,
trigger: triggerAction,
delay = 250,
@@ -127,6 +129,7 @@ export function TooltipTrigger(props: CubeTooltipTriggerProps) {
minOffset: 'var(--gap)',
minScale: '1',
isMaterial,
+ isLight,
...tooltipProps,
}}
>
diff --git a/src/components/overlays/Tooltip/context.ts b/src/components/overlays/Tooltip/context.ts
index e6086d048..612bc8b44 100644
--- a/src/components/overlays/Tooltip/context.ts
+++ b/src/components/overlays/Tooltip/context.ts
@@ -13,6 +13,7 @@ interface TooltipContextProps {
minScale?: string | number;
minOffset?: string | number;
isMaterial?: boolean;
+ isLight?: boolean;
}
export const TooltipContext = React.createContext({});