Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

refactor: replace Popover with Tooltip in HelpTooltip#19635

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
aqandrew merged 36 commits intomainfromaqandrew/replace-popover-in-helptooltip
Sep 8, 2025
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
Show all changes
36 commits
Select commitHold shift + click to select a range
fba9492
refactor: replace Popover with Tooltip in AgentLatency
aqandrewAug 28, 2025
e230f38
refactor: replace PopoverTrigger with TooltipTrigger in AgentStatus
aqandrewAug 28, 2025
75c9fdf
refactor: replace PopoverTrigger with TooltipTrigger in
aqandrewAug 28, 2025
bea24d8
fix: remove HelpTooltipText from AgentLatency (div inside p)
aqandrewAug 28, 2025
9e6fa0c
fix: add TooltipProvider to AuditHelpTooltip
aqandrewAug 28, 2025
303222b
fix: add TooltipProvider to ConnectionLogHelpTooltip,
aqandrewAug 28, 2025
f835cb1
fix: add TooltipProvider to PublishTemplateVersionDialog
aqandrewAug 28, 2025
dd7e233
fix: add TooltipProvider to TemplateHelpTooltip
aqandrewAug 29, 2025
d397fff
fix: add TooltipProvider to WorkspaceHelpTooltip
aqandrewAug 29, 2025
6134bad
fix: add TooltipProvider to WorkspaceOurdatedTooltip
aqandrewAug 29, 2025
ad562be
fix: add TooltipProvider to SubAgentOutdatedTooltip
aqandrewAug 29, 2025
d30170c
fix: add TooltipProvider to EditRolesButton
aqandrewAug 29, 2025
4438af8
fix: add TooltipProvider to AutoCreateMissingGroupsHelpTooltip and
aqandrewAug 29, 2025
00b70ea
refactor: extract TooltipProvder to definition of HelpTooltip
aqandrewAug 29, 2025
c59daf3
refactor: remove extract TooltipProvider from DevContainerStartError
aqandrewAug 29, 2025
3aeaa49
test: add PublishDTemplateVersionDialog story
aqandrewAug 29, 2025
eaf3baf
chore: remove unused import
aqandrewAug 29, 2025
c93e092
refactor: rename Tooltip to MUITooltip
aqandrewAug 29, 2025
ef6cceb
refactor: replace Popover in OwnerBreadcrumb, WorkspaceBreadcrumb,
aqandrewAug 29, 2025
c142b5a
chore: check:fix
aqandrewAug 29, 2025
143e33e
Merge branch 'main' into aqandrew/replace-popover-in-helptooltip
aqandrewAug 29, 2025
d22a040
chore: lint:fix
aqandrewAug 29, 2025
2ff9e66
test: expect elements + text content rendered by HelpTooltip
aqandrewAug 29, 2025
ed5bf98
Revert "refactor: rename Tooltip to MUITooltip"
aqandrewAug 29, 2025
8f939f9
chore: remove TODO
aqandrewSep 3, 2025
5050a92
docs: add date to disablePortal comment
aqandrewSep 3, 2025
ded8411
chore: remove 1rem comment
aqandrewSep 3, 2025
3466e90
refactor: rename to WorkspaceOutdatedTooltipProps
aqandrewSep 3, 2025
3a8a403
refactor: export TooltipProps from Tooltip
aqandrewSep 3, 2025
5f79acc
Merge branch 'main' into aqandrew/replace-popover-in-helptooltip
aqandrewSep 3, 2025
b0696dd
refactor: rename HelpTooltipTrigger to HelpTooltipIconTrigger
aqandrewSep 4, 2025
71c1824
refactor: rename HelpTooltipTriggerProps to HelpTooltipIconTriggerProps
aqandrewSep 4, 2025
70e0dbf
refactor: use HelpTooltipTrigger inside of HelpTooltip
aqandrewSep 4, 2025
1df04ec
Merge branch 'main' into aqandrew/replace-popover-in-helptooltip
aqandrewSep 4, 2025
6733d6a
chore: rm TODO
aqandrewSep 4, 2025
bc12f84
chore: check:fix
aqandrewSep 4, 2025
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 deletionssite/src/components/ActiveUserChart/ActiveUserChart.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,9 +7,9 @@ import {
import {
HelpTooltip,
HelpTooltipContent,
HelpTooltipIconTrigger,
HelpTooltipText,
HelpTooltipTitle,
HelpTooltipTrigger,
} from "components/HelpTooltip/HelpTooltip";
import type { FC } from "react";
import { Area, AreaChart, CartesianGrid, XAxis, YAxis } from "recharts";
Expand DownExpand Up@@ -116,7 +116,7 @@ export const ActiveUsersTitle: FC<ActiveUsersTitleProps> = ({ interval }) => {
<div className="flex items-center gap-2">
{interval === "day" ? "Daily" : "Weekly"} Active Users
<HelpTooltip>
<HelpTooltipTrigger size="small" />
<HelpTooltipIconTrigger size="small" />
<HelpTooltipContent>
<HelpTooltipTitle>How do we calculate active users?</HelpTooltipTitle>
<HelpTooltipText>
Expand Down
70 changes: 35 additions & 35 deletionssite/src/components/HelpTooltip/HelpTooltip.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,18 +3,17 @@ import {
css,
type Interpolation,
type Theme,
useTheme,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

🙏

} from "@emotion/react";
import Link from "@mui/material/Link";
import {
Popover,
PopoverContent,
type PopoverContentProps,
type PopoverProps,
PopoverTrigger,
usePopover,
} from "components/deprecated/Popover/Popover";
import { Stack } from "components/Stack/Stack";
import {
Tooltip,
TooltipContent,
type TooltipContentProps,
type TooltipProps,
TooltipProvider,
TooltipTrigger,
} from "components/Tooltip/Tooltip";
import { CircleHelpIcon, ExternalLinkIcon } from "lucide-react";
import {
type FC,
Expand All@@ -23,43 +22,50 @@ import {
type PropsWithChildren,
type ReactNode,
} from "react";
import { cn } from "utils/cn";

type Icon = typeof CircleHelpIcon;

type Size = "small" | "medium";

export const HelpTooltipTrigger = TooltipTrigger;

export const HelpTooltipIcon = CircleHelpIcon;

export const HelpTooltip: FC<PopoverProps> = (props) => {
return <Popover mode="hover" {...props} />;
export const HelpTooltip: FC<TooltipProps> = (props) => {
return (
<TooltipProvider>
<Tooltip delayDuration={0} {...props} />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

I think 0 is probably too fast. what's the default here?

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

The default is 700 which feels very long.

Worth mentioning that theMUI popover, whichdeprecated/Popover uses, doesn't use any delay, and I don't think we've added any:

consthoverProps={
onPointerEnter:(event:PointerEvent<HTMLElement>)=>{
popover.setOpen(true);

so I used a delay of 0 to keep consistency with our current UX

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

could we set it to like, 200? I feel like 0 is intense

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

No, 0 is exactly as intense as prod is rn:

Screen.Recording.2025-09-04.at.4.05.34.PM.mov

I'm so used to 0 delay that 200 feels sluggish to me:

Screen.Recording.2025-09-04.at.4.03.46.PM.mov

</TooltipProvider>
);
};

export const HelpTooltipContent: FC<PopoverContentProps> = (props) => {
const theme = useTheme();

export const HelpTooltipContent: FC<TooltipContentProps> = ({
className,
...props
}) => {
return (
<PopoverContent
<TooltipContent
side="bottom"
align="start"
collisionPadding={16}
{...props}
css={{
"& .MuiPaper-root": {
fontSize: 14,
width: 304,
padding: 20,
color: theme.palette.text.secondary,
},
}}
className={cn(
"w-[320px] p-5 bg-surface-secondary border-surface-quaternary text-sm",
className,
)}
/>
);
};

typeHelpTooltipTriggerProps = HTMLAttributes<HTMLButtonElement> & {
typeHelpTooltipIconTriggerProps = HTMLAttributes<HTMLButtonElement> & {
size?: Size;
hoverEffect?: boolean;
};

export constHelpTooltipTrigger = forwardRef<
export constHelpTooltipIconTrigger = forwardRef<
HTMLButtonElement,
HelpTooltipTriggerProps
HelpTooltipIconTriggerProps
>((props, ref) => {
const {
size = "medium",
Expand All@@ -76,7 +82,7 @@ export const HelpTooltipTrigger = forwardRef<
});

return (
<PopoverTrigger>
<HelpTooltipTrigger asChild>
<button
{...buttonProps}
aria-label="More info"
Expand All@@ -102,7 +108,7 @@ export const HelpTooltipTrigger = forwardRef<
>
{children}
</button>
</PopoverTrigger>
</HelpTooltipTrigger>
);
});

Expand DownExpand Up@@ -155,18 +161,12 @@ export const HelpTooltipAction: FC<HelpTooltipActionProps> = ({
onClick,
ariaLabel,
}) => {
const popover = usePopover();

return (
<button
type="button"
aria-label={ariaLabel ?? ""}
css={styles.action}
onClick={(event) => {
event.stopPropagation();
onClick();
popover.setOpen(false);
}}
onClick={onClick}
>
<Icon css={styles.actionIcon} />
{children}
Expand Down
26 changes: 13 additions & 13 deletionssite/src/components/InfoTooltip/InfoTooltip.stories.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
import type { Meta, StoryObj } from "@storybook/react-vite";
import { expect,userEvent, waitFor, within } from "storybook/test";
import { expect,screen, userEvent, waitFor } from "storybook/test";
import { InfoTooltip } from "./InfoTooltip";

const meta = {
Expand All@@ -16,13 +16,13 @@ export default meta;
type Story = StoryObj<typeof InfoTooltip>;

export const Example: Story = {
play: async ({ canvasElement, step }) => {
const screen = within(canvasElement);

play: async ({ step }) => {
await step("activate hover trigger", async () => {
await userEvent.hover(screen.getByRole("button"));
await waitFor(() =>
expect(screen.getByText(meta.args.message)).toBeInTheDocument(),
expect(screen.getByRole("tooltip")).toHaveTextContent(
meta.args.message,
),
Comment on lines +23 to +25
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Big fan of the more accessible selectors

aqandrew reacted with laugh emoji
);
});
},
Expand All@@ -33,13 +33,13 @@ export const Notice = {
type: "notice",
message: "Unfortunately, there's a radio connected to my brain",
},
play: async ({ canvasElement, step }) => {
const screen = within(canvasElement);

play: async ({ step }) => {
await step("activate hover trigger", async () => {
await userEvent.hover(screen.getByRole("button"));
await waitFor(() =>
expect(screen.getByText(Notice.args.message)).toBeInTheDocument(),
expect(screen.getByRole("tooltip")).toHaveTextContent(
Notice.args.message,
),
);
});
},
Expand All@@ -50,13 +50,13 @@ export const Warning = {
type: "warning",
message: "Unfortunately, there's a radio connected to my brain",
},
play: async ({ canvasElement, step }) => {
const screen = within(canvasElement);

play: async ({ step }) => {
await step("activate hover trigger", async () => {
await userEvent.hover(screen.getByRole("button"));
await waitFor(() =>
expect(screen.getByText(Warning.args.message)).toBeInTheDocument(),
expect(screen.getByRole("tooltip")).toHaveTextContent(
Warning.args.message,
),
);
});
},
Expand Down
16 changes: 8 additions & 8 deletionssite/src/components/InfoTooltip/InfoTooltip.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,9 +3,9 @@ import {
HelpTooltip,
HelpTooltipContent,
HelpTooltipIcon,
HelpTooltipIconTrigger,
HelpTooltipText,
HelpTooltipTitle,
HelpTooltipTrigger,
} from "components/HelpTooltip/HelpTooltip";
import type { FC, ReactNode } from "react";
import type { ThemeRole } from "theme/roles";
Expand All@@ -26,9 +26,9 @@ export const InfoTooltip: FC<InfoTooltipProps> = ({

return (
<HelpTooltip>
<HelpTooltipTrigger size="small" css={styles.button}>
<HelpTooltipIconTrigger size="small" css={styles.button}>
<HelpTooltipIcon css={{ color: iconColor }} />
</HelpTooltipTrigger>
</HelpTooltipIconTrigger>
<HelpTooltipContent>
<HelpTooltipTitle>{title}</HelpTooltipTitle>
<HelpTooltipText>{message}</HelpTooltipText>
Expand All@@ -39,10 +39,10 @@ export const InfoTooltip: FC<InfoTooltipProps> = ({

const styles = {
button: css`
opacity: 1;
opacity: 1;

&:hover {
opacity: 1;
}
`,
&:hover {
opacity: 1;
}
`,
} satisfies Record<string, Interpolation<Theme>>;
12 changes: 9 additions & 3 deletionssite/src/components/Tooltip/Tooltip.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,15 +8,21 @@ import { cn } from "utils/cn";

export const TooltipProvider = TooltipPrimitive.Provider;

export type TooltipProps = TooltipPrimitive.TooltipProps;

export const Tooltip = TooltipPrimitive.Root;

export const TooltipTrigger = TooltipPrimitive.Trigger;

export type TooltipContentProps = React.ComponentPropsWithoutRef<
typeof TooltipPrimitive.Content
> & {
disablePortal?: boolean;
};

export const TooltipContent = React.forwardRef<
React.ElementRef<typeof TooltipPrimitive.Content>,
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {
disablePortal?: boolean;
}
TooltipContentProps
>(({ className, sideOffset = 4, disablePortal, ...props }, ref) => {
const content = (
<TooltipPrimitive.Content
Expand Down
4 changes: 2 additions & 2 deletionssite/src/components/deprecated/Popover/Popover.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -60,7 +60,7 @@ type ControlledPopoverProps = BasePopoverProps & {
onOpenChange: (open: boolean) => void;
};

exporttype PopoverProps = UncontrolledPopoverProps | ControlledPopoverProps;
type PopoverProps = UncontrolledPopoverProps | ControlledPopoverProps;

/** @deprecated prefer `components.Popover` */
export const Popover: FC<PopoverProps> = (props) => {
Expand DownExpand Up@@ -155,7 +155,7 @@ export const PopoverTrigger: FC<PopoverTriggerProps> = (props) => {

type Horizontal = "left" | "right";

exporttype PopoverContentProps = Omit<
type PopoverContentProps = Omit<
MuiPopoverProps,
"open" | "onClose" | "anchorEl"
> & {
Expand Down
46 changes: 22 additions & 24 deletionssite/src/modules/resources/AgentLatency.tsx
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
import { type Theme, useTheme } from "@emotion/react";
import type { DERPRegion, WorkspaceAgent } from "api/typesGenerated";
import { PopoverTrigger } from "components/deprecated/Popover/Popover";
import {
HelpTooltip,
HelpTooltipContent,
HelpTooltipText,
HelpTooltipTitle,
HelpTooltipTrigger,
} from "components/HelpTooltip/HelpTooltip";
import { Stack } from "components/Stack/Stack";
import type { FC } from "react";
Expand DownExpand Up@@ -44,43 +44,41 @@ export const AgentLatency: FC<AgentLatencyProps> = ({ agent }) => {

return (
<HelpTooltip>
<PopoverTrigger>
<HelpTooltipTrigger asChild>
<span
role="presentation"
aria-label="latency"
css={{ cursor: "pointer", color: latency.color }}
>
{Math.round(latency.latency_ms)}ms
</span>
</PopoverTrigger>
</HelpTooltipTrigger>
<HelpTooltipContent>
<HelpTooltipTitle>Latency</HelpTooltipTitle>
<HelpTooltipText>
This is the latency overhead on non peer to peer connections. The
first row is the preferred relay.
</HelpTooltipText>
<HelpTooltipText>
<Stack direction="column" spacing={1} css={{ marginTop: 16 }}>
{Object.entries(agent.latency)
.sort(([, a], [, b]) => a.latency_ms - b.latency_ms)
.map(([regionName, region]) => (
<Stack
direction="row"
key={regionName}
spacing={0.5}
justifyContent="space-between"
css={
region.preferred && {
color: theme.palette.text.primary,
}
<Stack direction="column" spacing={1} css={{ marginTop: 16 }}>
{Object.entries(agent.latency)
.sort(([, a], [, b]) => a.latency_ms - b.latency_ms)
.map(([regionName, region]) => (
<Stack
direction="row"
key={regionName}
spacing={0.5}
justifyContent="space-between"
css={
region.preferred && {
color: theme.palette.text.primary,
}
>
<strong>{regionName}</strong>
{Math.round(region.latency_ms)}ms
</Stack>
))}
</Stack>
</HelpTooltipText>
}
>
<strong>{regionName}</strong>
{Math.round(region.latency_ms)}ms
</Stack>
))}
</Stack>
</HelpTooltipContent>
</HelpTooltip>
);
Expand Down
Loading
Loading

[8]ページ先頭

©2009-2025 Movatter.jp