UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

174 lines (171 loc) 5.38 kB
'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