UNPKG

dockview-solid

Version:

Zero dependency layout manager supporting tabs, grids and splitviews

60 lines (59 loc) 2.23 kB
import { createSignal, onCleanup } from 'solid-js'; import { CloseButton } from '../svg'; function useTitle(api) { const [title, setTitle] = createSignal(api.title); const disp = api.onDidTitleChange((event) => setTitle(event.title)); onCleanup(() => disp.dispose()); return title; } export const DockviewDefaultTab = (props) => { const title = useTitle(props.api); let isMiddleMouse = false; const onClose = (e) => { e.preventDefault(); if (props.closeActionOverride) { props.closeActionOverride(); } else { props.api.close(); } }; const onBtnPointerDown = (e) => e.preventDefault(); const onPointerDown = (e) => { var _a; isMiddleMouse = e.button === 1; if (typeof props.onPointerDown === 'function') { props.onPointerDown(e); } if (isMiddleMouse && e.button === 1 && !props.hideClose) { isMiddleMouse = false; onClose(e); } if (typeof props.onPointerUp === 'function') { (_a = props.onPointerUp) === null || _a === void 0 ? void 0 : _a.call(props, e); } }; const onPointerLeave = (e) => { var _a; isMiddleMouse = false; if (typeof props.onPointerLeave === 'function') { (_a = props.onPointerLeave) === null || _a === void 0 ? void 0 : _a.call(props, e); } }; const onPointerUp = (e) => { var _a; if (isMiddleMouse) { isMiddleMouse = false; onClose(e); } if (typeof props.onPointerUp === 'function') { (_a = props.onPointerUp) === null || _a === void 0 ? void 0 : _a.call(props, e); } }; return (<div data-testid="dockview-dv-default-tab" class="dv-default-tab" onPointerDown={onPointerDown} onPointerUp={onPointerUp} onPointerLeave={onPointerLeave}> <span class="dv-default-tab-content">{title()}</span> {!props.hideClose && props.tabLocation !== 'headerOverflow' && (<div class="dv-default-tab-action" onPointerDown={onBtnPointerDown} onClick={onClose}> <CloseButton /> </div>)} </div>); };