react-box-overflow
Version:
Headless UI for automatically collapsing boxes when overflow in React.
34 lines (33 loc) • 1.12 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const boxOverflowCore = require("box-overflow-core");
const React = require("react");
const useRefFn = require("./useRefFn.cjs");
const useIsomorphicLayoutEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
function useOverflow(options) {
const [, forceRenderer] = React.useReducer(() => {
return [];
}, []);
const onDisplayChange = useRefFn.useRefFn((items) => {
var _a;
forceRenderer();
(_a = options.onDisplayChange) == null ? void 0 : _a.call(options, items);
});
const mergedOptions = {
...options,
onDisplayChange
};
const instance = React.useRef(new boxOverflowCore.BoxOverflow(mergedOptions));
React.useEffect(() => {
return instance.current.onMount();
}, []);
useIsomorphicLayoutEffect(() => {
return instance.current.onUpdate();
});
React.useLayoutEffect(() => {
instance.current.setOptions(mergedOptions);
}, [options]);
return instance.current;
}
exports.useOverflow = useOverflow;
//# sourceMappingURL=useOverflow.cjs.map