UNPKG

2.09 kBJavaScriptView Raw
1"use strict";
2'use client';
3
4var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
6Object.defineProperty(exports, "__esModule", {
7 value: true
8});
9exports.default = ScrollbarSize;
10var React = _interopRequireWildcard(require("react"));
11var _propTypes = _interopRequireDefault(require("prop-types"));
12var _debounce = _interopRequireDefault(require("../utils/debounce"));
13var _utils = require("../utils");
14var _jsxRuntime = require("react/jsx-runtime");
15const styles = {
16 width: 99,
17 height: 99,
18 position: 'absolute',
19 top: -9999,
20 overflow: 'scroll'
21};
22
23/**
24 * @ignore - internal component.
25 * The component originates from https://github.com/STORIS/react-scrollbar-size.
26 * It has been moved into the core in order to minimize the bundle size.
27 */
28function ScrollbarSize(props) {
29 const {
30 onChange,
31 ...other
32 } = props;
33 const scrollbarHeight = React.useRef();
34 const nodeRef = React.useRef(null);
35 const setMeasurements = () => {
36 scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;
37 };
38 (0, _utils.unstable_useEnhancedEffect)(() => {
39 const handleResize = (0, _debounce.default)(() => {
40 const prevHeight = scrollbarHeight.current;
41 setMeasurements();
42 if (prevHeight !== scrollbarHeight.current) {
43 onChange(scrollbarHeight.current);
44 }
45 });
46 const containerWindow = (0, _utils.ownerWindow)(nodeRef.current);
47 containerWindow.addEventListener('resize', handleResize);
48 return () => {
49 handleResize.clear();
50 containerWindow.removeEventListener('resize', handleResize);
51 };
52 }, [onChange]);
53 React.useEffect(() => {
54 setMeasurements();
55 onChange(scrollbarHeight.current);
56 }, [onChange]);
57 return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
58 style: styles,
59 ref: nodeRef,
60 ...other
61 });
62}
63process.env.NODE_ENV !== "production" ? ScrollbarSize.propTypes = {
64 onChange: _propTypes.default.func.isRequired
65} : void 0;
\No newline at end of file