1 line
8.0 KiB
Plaintext
1 line
8.0 KiB
Plaintext
{"version":3,"sources":["../src/tooltip.tsx","../../../utilities/object-utils/src/omit.ts","../../../utilities/object-utils/src/pick.ts"],"sourcesContent":["import { popperCSSVars } from \"@chakra-ui/popper\"\nimport { Portal, PortalProps } from \"@chakra-ui/portal\"\nimport {\n chakra,\n forwardRef,\n HTMLChakraProps,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n useTheme,\n getCSSVar,\n} from \"@chakra-ui/system\"\nimport { omit, pick } from \"@chakra-ui/object-utils\"\nimport { AnimatePresence, HTMLMotionProps, motion } from \"framer-motion\"\nimport { Children, cloneElement } from \"react\"\nimport { scale } from \"./tooltip.transition\"\nimport { useTooltip, UseTooltipProps } from \"./use-tooltip\"\n\nexport interface TooltipProps\n extends HTMLChakraProps<\"div\">,\n ThemingProps<\"Tooltip\">,\n UseTooltipProps {\n /**\n * The React component to use as the\n * trigger for the tooltip\n */\n children: React.ReactNode\n /**\n * The label of the tooltip\n */\n label?: React.ReactNode\n /**\n * The accessible, human friendly label to use for\n * screen readers.\n *\n * If passed, tooltip will show the content `label`\n * but expose only `aria-label` to assistive technologies\n */\n \"aria-label\"?: string\n /**\n * If `true`, the tooltip will wrap its children\n * in a `<span/>` with `tabIndex=0`\n * @default false\n */\n shouldWrapChildren?: boolean\n /**\n * If `true`, the tooltip will show an arrow tip\n * @default false\n */\n hasArrow?: boolean\n /**\n * Props to be forwarded to the portal component\n */\n portalProps?: Pick<PortalProps, \"appendToParentPortal\" | \"containerRef\">\n motionProps?: HTMLMotionProps<\"div\">\n}\n\nconst MotionDiv = chakra(motion.div)\n\n/**\n * Tooltips display informative text when users hover, focus on, or tap an element.\n *\n * @see Docs https://chakra-ui.com/docs/overlay/tooltip\n * @see WAI-ARIA https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/\n */\nexport const Tooltip = forwardRef<TooltipProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Tooltip\", props)\n const ownProps = omitThemingProps(props)\n const theme = useTheme()\n\n const {\n children,\n label,\n shouldWrapChildren,\n \"aria-label\": ariaLabel,\n hasArrow,\n bg,\n portalProps,\n background,\n backgroundColor,\n bgColor,\n motionProps,\n ...rest\n } = ownProps\n\n const userDefinedBg = background ?? backgroundColor ?? bg ?? bgColor\n\n if (userDefinedBg) {\n styles.bg = userDefinedBg\n const bgVar = getCSSVar(theme, \"colors\", userDefinedBg)\n ;(styles as any)[popperCSSVars.arrowBg.var] = bgVar\n }\n const tooltip = useTooltip({ ...rest, direction: theme.direction })\n\n const shouldWrap = typeof children === \"string\" || shouldWrapChildren\n\n let trigger: React.ReactElement\n\n if (shouldWrap) {\n trigger = (\n <chakra.span\n display=\"inline-block\"\n tabIndex={0}\n {...tooltip.getTriggerProps()}\n >\n {children}\n </chakra.span>\n )\n } else {\n /**\n * Ensure tooltip has only one child node\n */\n const child = Children.only(children) as React.ReactElement & {\n ref?: React.Ref<any>\n }\n trigger = cloneElement(\n child,\n tooltip.getTriggerProps(child.props, child.ref),\n )\n }\n\n const hasAriaLabel = !!ariaLabel\n\n const _tooltipProps = tooltip.getTooltipProps({}, ref)\n\n const tooltipProps = hasAriaLabel\n ? omit(_tooltipProps, [\"role\", \"id\"])\n : _tooltipProps\n\n const srOnlyProps = pick(_tooltipProps, [\"role\", \"id\"])\n\n /**\n * If the `label` is empty, there's no point showing the tooltip.\n * Let's simply return the children\n */\n if (!label) {\n return <>{children}</>\n }\n\n return (\n <>\n {trigger}\n <AnimatePresence>\n {tooltip.isOpen && (\n <Portal {...portalProps}>\n <chakra.div\n {...tooltip.getTooltipPositionerProps()}\n __css={{\n zIndex: styles.zIndex,\n pointerEvents: \"none\",\n }}\n >\n <MotionDiv\n variants={scale}\n initial=\"exit\"\n animate=\"enter\"\n exit=\"exit\"\n {...motionProps}\n {...(tooltipProps as any)}\n __css={styles}\n >\n {label}\n {hasAriaLabel && (\n <chakra.span srOnly {...srOnlyProps}>\n {ariaLabel}\n </chakra.span>\n )}\n {hasArrow && (\n <chakra.div\n data-popper-arrow\n className=\"chakra-tooltip__arrow-wrapper\"\n >\n <chakra.div\n data-popper-arrow-inner\n className=\"chakra-tooltip__arrow\"\n __css={{ bg: styles.bg }}\n />\n </chakra.div>\n )}\n </MotionDiv>\n </chakra.div>\n </Portal>\n )}\n </AnimatePresence>\n </>\n )\n})\n\nTooltip.displayName = \"Tooltip\"\n","export function omit<T extends Record<string, any>, K extends keyof T>(\n object: T,\n keysToOmit: K[] = [],\n) {\n const clone: Record<string, unknown> = Object.assign({}, object)\n for (const key of keysToOmit) {\n if (key in clone) {\n delete clone[key as string]\n }\n }\n return clone as Omit<T, K>\n}\n","export function pick<T extends Record<string, any>, K extends keyof T>(\n object: T,\n keysToPick: K[],\n) {\n const result = {} as {\n [P in K]: T[P]\n }\n for (const key of keysToPick) {\n if (key in object) {\n result[key] = object[key]\n }\n }\n return result\n}\n"],"mappings":"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","names":[]} |