UNPKG

@tanstack/table-devtools

Version:

Devtools for TanStack Table.

71 lines (69 loc) 2.82 kB
import { useStyles } from "../styles/use-styles.js"; import { createSignal, onCleanup } from "solid-js"; import { className, delegateEvents, effect, insert, setAttribute, setStyleProperty, template } from "solid-js/web"; //#region src/components/ResizableSplit.tsx var _tmpl$ = /*#__PURE__*/ template(`<div><div></div><div role=separator aria-orientation=vertical aria-valuemin=15 aria-valuemax=85></div><div style="flex:1 1 0">`); const DEFAULT_LEFT_PERCENT = 50; const MIN_PANEL_PERCENT = 15; const MAX_PANEL_PERCENT = 85; function ResizableSplit(props) { const styles = useStyles(); const [leftPercent, setLeftPercent] = createSignal(DEFAULT_LEFT_PERCENT); let cleanupDrag; onCleanup(() => { cleanupDrag?.(); }); const handleMouseDown = (e) => { e.preventDefault(); cleanupDrag?.(); const container = e.currentTarget.parentElement; if (!container) return; const previousCursor = document.body.style.cursor; const previousUserSelect = document.body.style.userSelect; const onMouseMove = (moveEvent) => { const rect = container.getBoundingClientRect(); const x = moveEvent.clientX - rect.left; const percent = Math.max(MIN_PANEL_PERCENT, Math.min(MAX_PANEL_PERCENT, x / rect.width * 100)); setLeftPercent(percent); }; cleanupDrag = () => { document.removeEventListener("mousemove", onMouseMove); document.removeEventListener("mouseup", onMouseUp); document.body.style.cursor = previousCursor; document.body.style.userSelect = previousUserSelect; cleanupDrag = void 0; }; const onMouseUp = () => cleanupDrag?.(); document.addEventListener("mousemove", onMouseMove); document.addEventListener("mouseup", onMouseUp); document.body.style.cursor = "col-resize"; document.body.style.userSelect = "none"; }; return (() => { var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling, _el$4 = _el$3.nextSibling; insert(_el$2, () => props.left); _el$3.$$mousedown = handleMouseDown; insert(_el$4, () => props.right); effect((_p$) => { var _v$ = styles().resizableSplitContainer, _v$2 = `${styles().section} ${styles().featuresSection}`, _v$3 = `0 0 ${leftPercent()}%`, _v$4 = styles().resizeHandle, _v$5 = leftPercent(), _v$6 = `${styles().section} ${styles().featuresSection}`; _v$ !== _p$.e && className(_el$, _p$.e = _v$); _v$2 !== _p$.t && className(_el$2, _p$.t = _v$2); _v$3 !== _p$.a && setStyleProperty(_el$2, "flex", _p$.a = _v$3); _v$4 !== _p$.o && className(_el$3, _p$.o = _v$4); _v$5 !== _p$.i && setAttribute(_el$3, "aria-valuenow", _p$.i = _v$5); _v$6 !== _p$.n && className(_el$4, _p$.n = _v$6); return _p$; }, { e: void 0, t: void 0, a: void 0, o: void 0, i: void 0, n: void 0 }); return _el$; })(); } delegateEvents(["mousedown"]); //#endregion export { ResizableSplit };