@mantine/core
Version:
React components library focused on usability, accessibility and developer experience
174 lines (171 loc) • 5.38 kB
JavaScript
'use client';
import React, { useState } from 'react';
import { rem } from '../../core/utils/units-converters/rem.mjs';
import { createVarsResolver } from '../../core/styles-api/create-vars-resolver/create-vars-resolver.mjs';
import 'clsx';
import '@mantine/hooks';
import '../../core/MantineProvider/Mantine.context.mjs';
import '../../core/MantineProvider/default-theme.mjs';
import '../../core/MantineProvider/MantineProvider.mjs';
import '../../core/MantineProvider/MantineThemeProvider/MantineThemeProvider.mjs';
import { useProps } from '../../core/MantineProvider/use-props/use-props.mjs';
import { useStyles } from '../../core/styles-api/use-styles/use-styles.mjs';
import { Box } from '../../core/Box/Box.mjs';
import { factory } from '../../core/factory/factory.mjs';
import '../../core/DirectionProvider/DirectionProvider.mjs';
import { ScrollAreaCorner } from './ScrollAreaCorner/ScrollAreaCorner.mjs';
import { ScrollAreaRoot } from './ScrollAreaRoot/ScrollAreaRoot.mjs';
import { ScrollAreaScrollbar } from './ScrollAreaScrollbar/ScrollAreaScrollbar.mjs';
import { ScrollAreaThumb } from './ScrollAreaThumb/ScrollAreaThumb.mjs';
import { ScrollAreaViewport } from './ScrollAreaViewport/ScrollAreaViewport.mjs';
import classes from './ScrollArea.module.css.mjs';
const defaultProps = {
scrollHideDelay: 1e3,
type: "hover",
scrollbars: "xy"
};
const varsResolver = createVarsResolver((_, { scrollbarSize }) => ({
root: {
"--scrollarea-scrollbar-size": rem(scrollbarSize)
}
}));
const ScrollArea = factory((_props, ref) => {
const props = useProps("ScrollArea", defaultProps, _props);
const {
classNames,
className,
style,
styles,
unstyled,
scrollbarSize,
vars,
type,
scrollHideDelay,
viewportProps,
viewportRef,
onScrollPositionChange,
children,
offsetScrollbars,
scrollbars,
...others
} = props;
const [scrollbarHovered, setScrollbarHovered] = useState(false);
const getStyles = useStyles({
name: "ScrollArea",
props,
classes,
className,
style,
classNames,
styles,
unstyled,
vars,
varsResolver
});
return /* @__PURE__ */ React.createElement(
ScrollAreaRoot,
{
type: type === "never" ? "always" : type,
scrollHideDelay,
ref,
scrollbars,
...getStyles("root"),
...others
},
/* @__PURE__ */ React.createElement(
ScrollAreaViewport,
{
...viewportProps,
...getStyles("viewport"),
ref: viewportRef,
"data-offset-scrollbars": offsetScrollbars === true ? "xy" : offsetScrollbars || void 0,
"data-scrollbars": scrollbars || void 0,
onScroll: typeof onScrollPositionChange === "function" ? ({ currentTarget }) => onScrollPositionChange({
x: currentTarget.scrollLeft,
y: currentTarget.scrollTop
}) : void 0
},
children
),
(scrollbars === "xy" || scrollbars === "x") && /* @__PURE__ */ React.createElement(
ScrollAreaScrollbar,
{
...getStyles("scrollbar"),
orientation: "horizontal",
"data-hidden": type === "never" || void 0,
forceMount: true,
onMouseEnter: () => setScrollbarHovered(true),
onMouseLeave: () => setScrollbarHovered(false)
},
/* @__PURE__ */ React.createElement(ScrollAreaThumb, { ...getStyles("thumb") })
),
(scrollbars === "xy" || scrollbars === "y") && /* @__PURE__ */ React.createElement(
ScrollAreaScrollbar,
{
...getStyles("scrollbar"),
orientation: "vertical",
"data-hidden": type === "never" || void 0,
forceMount: true,
onMouseEnter: () => setScrollbarHovered(true),
onMouseLeave: () => setScrollbarHovered(false)
},
/* @__PURE__ */ React.createElement(ScrollAreaThumb, { ...getStyles("thumb") })
),
/* @__PURE__ */ React.createElement(
ScrollAreaCorner,
{
...getStyles("corner"),
"data-hovered": scrollbarHovered || void 0,
"data-hidden": type === "never" || void 0
}
)
);
});
ScrollArea.displayName = "@mantine/core/ScrollArea";
const ScrollAreaAutosize = factory((props, ref) => {
const {
children,
classNames,
styles,
scrollbarSize,
scrollHideDelay,
type,
dir,
offsetScrollbars,
viewportRef,
onScrollPositionChange,
unstyled,
variant,
viewportProps,
scrollbars,
style,
vars,
...others
} = useProps("ScrollAreaAutosize", defaultProps, props);
return /* @__PURE__ */ React.createElement(Box, { ...others, ref, style: [{ display: "flex", overflow: "auto" }, style] }, /* @__PURE__ */ React.createElement(Box, { style: { display: "flex", flexDirection: "column", flex: 1 } }, /* @__PURE__ */ React.createElement(
ScrollArea,
{
classNames,
styles,
scrollHideDelay,
scrollbarSize,
type,
dir,
offsetScrollbars,
viewportRef,
onScrollPositionChange,
unstyled,
variant,
viewportProps,
vars,
scrollbars
},
children
)));
});
ScrollArea.classes = classes;
ScrollAreaAutosize.displayName = "@mantine/core/ScrollAreaAutosize";
ScrollAreaAutosize.classes = classes;
ScrollArea.Autosize = ScrollAreaAutosize;
export { ScrollArea, ScrollAreaAutosize };
//# sourceMappingURL=ScrollArea.mjs.map