UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

66 lines 5.18 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContentScroller = void 0; const model_react_1 = require("model-react"); const react_1 = __importStar(require("react")); const react_resize_detector_1 = require("react-resize-detector"); const useForceUpdate_1 = require("../../utils/hooks/useForceUpdate"); const useSmoothScroll_1 = require("../../utils/hooks/useSmoothScroll"); const useVerticalScroll_1 = require("../../utils/hooks/useVerticalScroll"); const FillBox_1 = require("../FillBox"); /** * An element that takes care of scrolling the content properly */ const ContentScroller = ({ content, children, ...rest }) => { // Define some functionality to update the size const scrollHeightRef = react_1.useRef(0); const forceUpdate = useForceUpdate_1.useForceUpdate(); const updateSize = () => { const ref = resizeRef.current; if (!ref) return; const scrollHeight = Math.max(0, ref.scrollHeight - ref.clientHeight); content.setScrollHeight(scrollHeight); const changed = scrollHeightRef.current != scrollHeight; scrollHeightRef.current = scrollHeight; if (changed) forceUpdate(); }; // Update the size on initial mount react_1.useEffect(updateSize, []); // Listen for reasizes const { ref: resizeRef } = react_resize_detector_1.useResizeDetector({ onResize: updateSize }); // Listen to any offset changes, and auto scroll to show them const [h] = model_react_1.useDataHook(); // console.log(scrollHeightRef.current); const offset = content.getScrollOffset(scrollHeightRef.current, h); const [scrollRef, setScroll] = useSmoothScroll_1.useSmoothScroll(); react_1.useEffect(() => { setScroll({ top: offset }); }, [offset]); // Enable smooth scrolling const smoothScrollRef = useVerticalScroll_1.useVerticalScroll(); // Render a simple box element return (react_1.default.createElement(FillBox_1.FillBox, Object.assign({ elRef: [scrollRef, smoothScrollRef, resizeRef], overflow: "auto" }, rest), children)); }; exports.ContentScroller = ContentScroller; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGVudFNjcm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY29udGVudC9Db250ZW50U2Nyb2xsZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBd0M7QUFDeEMsK0NBQTZEO0FBQzdELGlFQUF3RDtBQUd4RCxxRUFBZ0U7QUFDaEUsdUVBQWtFO0FBQ2xFLDJFQUFzRTtBQUN0RSx3Q0FBbUM7QUFFbkM7O0dBRUc7QUFDSSxNQUFNLGVBQWUsR0FBd0MsQ0FBQyxFQUNqRSxPQUFPLEVBQ1AsUUFBUSxFQUNSLEdBQUcsSUFBSSxFQUNWLEVBQUUsRUFBRTtJQUNELCtDQUErQztJQUMvQyxNQUFNLGVBQWUsR0FBRyxjQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsK0JBQWMsRUFBRSxDQUFDO0lBQ3JDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtRQUNwQixNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDO1FBQ3hELGVBQWUsQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQ3ZDLElBQUksT0FBTztZQUFFLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUVGLG1DQUFtQztJQUNuQyxpQkFBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUUxQixzQkFBc0I7SUFDdEIsTUFBTSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyx5Q0FBaUIsQ0FBQyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBRW5FLDZEQUE2RDtJQUM3RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcseUJBQVcsRUFBRSxDQUFDO0lBQzFCLHdDQUF3QztJQUN4QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsTUFBTSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxpQ0FBZSxFQUFFLENBQUM7SUFDakQsaUJBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDWCxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWIsMEJBQTBCO0lBQzFCLE1BQU0sZUFBZSxHQUFHLHFDQUFpQixFQUFFLENBQUM7SUFFNUMsOEJBQThCO0lBQzlCLE9BQU8sQ0FDSCw4QkFBQyxpQkFBTyxrQkFDSixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUM5QyxRQUFRLEVBQUMsTUFBTSxJQUNYLElBQUksR0FDUCxRQUFRLENBQ0gsQ0FDYixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBN0NXLFFBQUEsZUFBZSxtQkE2QzFCIn0=