Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
4 changes: 2 additions & 2 deletions src/design-system/text/body.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ export const Small = createText<Exclude<FontWeights, '$regular'>>({
export const Normal = createText<FontWeights>({
type: 'body',
as: 'span',
weight: '$regular',
weight: '$medium',
});

export const Large = createText<FontWeights>({
type: 'bodyLarge',
as: 'span',
weight: '$regular',
weight: '$medium',
});
10 changes: 9 additions & 1 deletion src/design-system/tooltip/tooltip-content.component.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,27 @@
import React from 'react';
import type { ReactNode } from 'react';

import cn from 'classnames';

import { Text } from '../text';

import * as cx from './tooltip-content.css';

export interface TooltipContentProps {
label: ReactNode | string;
preventTextWrap?: boolean;
}

export const TooltipContent = ({
label,
preventTextWrap = false,
}: Readonly<TooltipContentProps>): JSX.Element => {
return (
<div className={cx.tooltipContent}>
<div
className={cn(cx.tooltipContent, {
[cx.preventTextWrap]: preventTextWrap,
})}
>
<Text.Body.Small color="secondary" weight="$medium">
{label}
</Text.Body.Small>
Expand Down
5 changes: 5 additions & 0 deletions src/design-system/tooltip/tooltip-content.css.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,8 @@ export const tooltipContent = style([
wordBreak: 'break-word',
},
]);

export const preventTextWrap = style({
whiteSpace: 'nowrap',
maxWidth: 'none',
});
12 changes: 6 additions & 6 deletions src/design-system/tooltip/tooltip-root.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import type { ReactNode } from 'react';
import * as Tooltip from '@radix-ui/react-tooltip';

import { TooltipContent } from './tooltip-content.component';
import * as cx from './tooltip-root.css';

export type Props = typeof Tooltip.Root & {
align?: Tooltip.PopperContentProps['align'];
children?: Tooltip.PopperContentProps['children'];
side?: Tooltip.PopperContentProps['side'];
align?: Tooltip.TooltipContentProps['align'];
children?: Tooltip.TooltipContentProps['children'];
side?: Tooltip.TooltipContentProps['side'];
label: ReactNode | string;
zIndex?: number;
preventTextWrap?: boolean;
};

export const Root = ({
Expand All @@ -20,6 +20,7 @@ export const Root = ({
align = 'center',
zIndex,
children,
preventTextWrap = false,
}: Readonly<Props>): JSX.Element => {
return (
<Tooltip.Root>
Expand All @@ -29,10 +30,9 @@ export const Root = ({
style={{ zIndex }}
side={side}
align={align}
className={cx.root}
data-testid={'tooltip-content'}
>
<TooltipContent label={label} />
<TooltipContent label={label} preventTextWrap={preventTextWrap} />
</Tooltip.Content>
</Tooltip.Portal>
</Tooltip.Root>
Expand Down
9 changes: 8 additions & 1 deletion src/design-system/tooltip/tooltip.component.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export type Props = PropsWithChildren<
delayDuration?: number;
skipDelayDuration?: number;
children: ReactNode;
preventTextWrap?: boolean;
}
>;

Expand All @@ -22,14 +23,20 @@ export const Tooltip = ({
label,
children,
side,
preventTextWrap = false,
...props
}: Readonly<Props>): JSX.Element => {
return (
<Provider
skipDelayDuration={skipDelayDuration}
delayDuration={delayDuration}
>
<Root side={side} label={label} {...props}>
<Root
side={side}
label={label}
preventTextWrap={preventTextWrap}
{...props}
>
<Trigger asChild>
<div>{children}</div>
</Trigger>
Expand Down
28 changes: 27 additions & 1 deletion src/design-system/tooltip/tooltip.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,10 @@ export default {

const SampleTooltip = ({
label,
preventTextWrap,
}: Readonly<TooltipContentProps>): JSX.Element => (
<StorybookContentRenderer>
<TooltipContent label={label} />
<TooltipContent label={label} preventTextWrap={preventTextWrap} />
</StorybookContentRenderer>
);

Expand Down Expand Up @@ -111,6 +112,22 @@ const VariantsTable = (): JSX.Element => (
</Section>
);

const LongTextComponents = (): JSX.Element => (
<Variants.Table headers={['Long text default', 'Long text on single line']}>
<Variants.Row>
<Variants.Cell>
<SampleTooltip label="This is a very long tooltip text that will not wrap and will display on a single line no matter how long it gets" />
</Variants.Cell>
<Variants.Cell>
<SampleTooltip
label="This is a very long tooltip text that will not wrap and will display on a single line no matter how long it gets"
preventTextWrap
/>
</Variants.Cell>
</Variants.Row>
</Variants.Table>
);

export const Overview = (): JSX.Element => (
<Grid columns="$1">
<Cell>
Expand Down Expand Up @@ -163,6 +180,15 @@ export const Overview = (): JSX.Element => (
</Variants.Table>
</LocalThemeProvider>
</Section>

<Divider my="$64" />

<Section title="Long Text Wrapping">
<LongTextComponents />
<LocalThemeProvider colorScheme={ThemeColorScheme.Dark}>
<LongTextComponents />
</LocalThemeProvider>
</Section>
</Cell>
</Grid>
);