Theme

PlaygroundBeta

npm_versionnpm Paragon package page

OverflowScroll

A set of React components that encapsulates the logic from useOverflowScroll for building carousel-like UI components:

  • OverflowScroll
  • OverflowScroll.Items

Sample Usage

The following example demonstrates how to use OverflowScroll and OverflowScroll.Items to build carousel-like UI components.

Any Paragon component or export may be added to the code example.

() => {
const ExampleItem = ({ className }) => (
<div
className={classNames('example-item border flex-shrink-0 text-center', className)}
style={{ width: 160 }}
>
Item
</div>
);
const OverflowScrollContent = () => {
const { overflowRef, setOverflowRef } = useContext(OverflowScrollContext);
return (
<div
ref={setOverflowRef}
className="d-flex"
>
<OverflowScroll.Items>{items}</OverflowScroll.Items>
</div>
);
};
const OverflowScrollControls = () => {
const {
isScrolledToStart,
isScrolledToEnd,
scrollToPrevious,
scrollToNext,
} = useContext(OverflowScrollContext);
return (
<div className="mb-3">
<Button
onClick={scrollToPrevious}
disabled={isScrolledToStart}
size="sm"
className="mr-2"
>
Previous
</Button>
<Button
onClick={scrollToNext}
disabled={isScrolledToEnd}
size="sm"
>
Next
</Button>
</div>
);
};
const itemCount = 20;
const items = useMemo(() => Array.from({ length: itemCount }).map((index) => {
if (index !== itemCount - 1) {
return <ExampleItem key={uuidv4()} className="mr-2" />;
}
// last element, no right margin
return <ExampleItem key={uuidv4()} />;
}), [itemCount]);
return (
<OverflowScroll ariaLabel="example overflow scroll usage">
<OverflowScrollControls />
<OverflowScrollContent />
</OverflowScroll>
);
};

Theme Variables (SCSS)#

$overflow-scroll-opacity-mask-transparent: var(--pgn-overflow-scroll-opacity-mask-transparent) !default;

Props API#

OverflowScroll Props API
  • ariaLabel string Required
  • children node Required
  • childQuerySelector string
  • hasInteractiveChildren bool
    Defaultfalse
  • disableScroll bool
    Defaultfalse
  • disableOpacityMasks bool
    Defaultfalse
  • onScrollPrevious func
  • onScrollNext func