diff --git a/site/src/components/ActiveUserChart/ActiveUserChart.tsx b/site/src/components/ActiveUserChart/ActiveUserChart.tsx index 8541297819b99..3a4ca5d163c9c 100644 --- a/site/src/components/ActiveUserChart/ActiveUserChart.tsx +++ b/site/src/components/ActiveUserChart/ActiveUserChart.tsx @@ -17,6 +17,8 @@ import { HelpTooltip, HelpTooltipTitle, HelpTooltipText, + HelpTooltipContent, + HelpTooltipTrigger, } from "components/HelpTooltip/HelpTooltip"; import dayjs from "dayjs"; import { useTheme } from "@emotion/react"; @@ -139,12 +141,15 @@ export const ActiveUsersTitle: FC = () => { return (
Active Users - - How do we calculate active users? - - When a connection is initiated to a user's workspace they are - considered an active user. e.g. apps, web terminal, SSH - + + + + How do we calculate active users? + + When a connection is initiated to a user's workspace they are + considered an active user. e.g. apps, web terminal, SSH + +
); diff --git a/site/src/components/HelpTooltip/HelpTooltip.tsx b/site/src/components/HelpTooltip/HelpTooltip.tsx index e5d06d67b6490..76144ca608ab5 100644 --- a/site/src/components/HelpTooltip/HelpTooltip.tsx +++ b/site/src/components/HelpTooltip/HelpTooltip.tsx @@ -1,170 +1,107 @@ import Link from "@mui/material/Link"; -// This is used as base for the main HelpTooltip component -// eslint-disable-next-line no-restricted-imports -- Read above -import Popover, { type PopoverProps } from "@mui/material/Popover"; import HelpIcon from "@mui/icons-material/HelpOutline"; import OpenInNewIcon from "@mui/icons-material/OpenInNew"; import { - createContext, - useContext, - useRef, - useState, type FC, type PropsWithChildren, type HTMLAttributes, type ReactNode, + forwardRef, + ComponentProps, } from "react"; import { Stack } from "components/Stack/Stack"; -import type { CSSObject } from "@emotion/css"; +import { type CSSObject } from "@emotion/css"; import { css, type Interpolation, type Theme, useTheme } from "@emotion/react"; -import { type ClassName, useClassName } from "hooks/useClassName"; +import { + Popover, + PopoverContent, + PopoverTrigger, + usePopover, +} from "components/Popover/Popover"; type Icon = typeof HelpIcon; type Size = "small" | "medium"; -export const HelpTooltipContext = createContext< - { open: boolean; onClose: () => void } | undefined ->(undefined); - -const useHelpTooltip = () => { - const helpTooltipContext = useContext(HelpTooltipContext); +export const HelpTooltipIcon = HelpIcon; - if (!helpTooltipContext) { - throw new Error( - "This hook should be used in side of the HelpTooltipContext.", - ); - } - - return helpTooltipContext; +export const HelpTooltip: FC> = (props) => { + return ; }; -interface HelpPopoverProps extends PopoverProps { - onOpen: () => void; - onClose: () => void; -} - -export const HelpPopover: FC = ({ - onOpen, - onClose, - children, - ...props -}) => { - const popover = useClassName(classNames.popover, []); - const paper = useClassName(classNames.paper, []); +export const HelpTooltipContent = ( + props: ComponentProps, +) => { + const theme = useTheme(); return ( - - {children} - + css={{ + "& .MuiPaper-root": { + fontSize: 14, + width: 304, + padding: 20, + color: theme.palette.text.secondary, + }, + }} + /> ); }; -export interface HelpTooltipProps { - // Useful to test on storybook - open?: boolean; +type HelpTooltipTriggerProps = HTMLAttributes & { size?: Size; - icon?: Icon; - buttonStyles?: Interpolation; - iconStyles?: Interpolation; - children?: ReactNode; -} - -export const HelpTooltip: FC = ({ - children, - open = false, - size = "medium", - icon: Icon = HelpIcon, - buttonStyles, - iconStyles, -}) => { - const theme = useTheme(); - const anchorRef = useRef(null); - const [isOpen, setIsOpen] = useState(open); - const id = isOpen ? "help-popover" : undefined; + hoverEffect?: boolean; +}; - const onClose = () => { - setIsOpen(false); - }; +export const HelpTooltipTrigger = forwardRef< + HTMLButtonElement, + HelpTooltipTriggerProps +>((props, ref) => { + const { + size = "medium", + children = , + hoverEffect = true, + ...buttonProps + } = props; + + const hoverEffectStyles = css({ + opacity: 0.5, + "&:hover": { + opacity: 0.75, + }, + }); return ( - <> + - setIsOpen(true)} - onClose={() => setIsOpen(false)} - > - - {children} - - - + ); -}; +}); export const HelpTooltipTitle: FC> = ({ children, @@ -213,7 +150,7 @@ export const HelpTooltipAction: FC = ({ onClick, ariaLabel, }) => { - const tooltip = useHelpTooltip(); + const popover = usePopover(); return (