dockview-solid
Version:
Zero dependency layout manager supporting tabs, grids and splitviews
60 lines (59 loc) • 2.23 kB
JSX
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>);
};