@visx/bounds
Version:
Utilities to make your life with bounding boxes better
60 lines (47 loc) • 1.43 kB
Markdown
# /bounds
<p>
<a title="@visx/bounds npm downloads" href="https://www.npmjs.com/package/@visx/bounds">
<img src="https://img.shields.io/npm/dm/@visx/bounds.svg?style=flat-square" />
</a>
</p>
```
npm install --save /bounds
```
### `withBoundingRects` HOC
It's often useful to determine whether elements (e.g., tooltips) overflow the bounds of their parent
container and adjust positioning accordingly. The `withBoundingRects` higher-order component is
meant to simplify this computation by passing in a component's bounding rect as well as its
_parent's_ bounding rect.
### Example usage
Example usage with a `<Tooltip />` component
```tsx
import React from 'react';
import { withBoundingRects, WithBoundingRectsProps } from '@visx/bounds';
type TooltipProps = Omit<WithBoundingRectsProps, 'nodeRef'> & {
left: number;
top: number;
nodeRef?: React.Ref<HTMLDivElement>;
children?: React.ReactNode;
};
function Tooltip({
left: initialLeft,
top: initialTop,
rect,
parentRect,
nodeRef,
children,
}: TooltipProps) {
let left = initialLeft;
let top = initialTop;
if (rect && parentRect) {
left = rect.right > parentRect.right ? left - rect.width : left;
top = rect.bottom > parentRect.bottom ? top - rect.height : top;
}
return (
<div ref={nodeRef} style={{ top, left, ...myTheme }}>
{children}
</div>
);
}
export default withBoundingRects(Tooltip);
```