UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

186 lines (185 loc) 6.16 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.usePopupState = usePopupState; exports.bindTrigger = bindTrigger; exports.bindToggle = bindToggle; exports.bindHover = bindHover; exports.bindFocus = bindFocus; exports.bindPopover = bindPopover; exports.bindMenu = bindMenu; exports.bindPopper = bindPopper; const react_1 = require("react"); const React = __importStar(require("react")); function usePopupState(arg) { const { parentPopupState } = arg || {}; const popupId = React.useId(); const [isOpen, setIsOpen] = (0, react_1.useState)(false); const [setAnchorElUsed, setSetAnchorElUsed] = (0, react_1.useState)(false); const [anchorEl, _setAnchorEl] = (0, react_1.useState)(); const [hovered, setHovered] = (0, react_1.useState)(false); const [focused, setFocused] = (0, react_1.useState)(false); const [openEventType, setOpenEventType] = (0, react_1.useState)(); const [childHandle, setChildHandle] = (0, react_1.useState)(); const setAnchorEl = (0, react_1.useCallback)((el) => { setSetAnchorElUsed(true); _setAnchorEl(el); }, []); const toggle = (eventOrAnchorEl) => { if (isOpen) { close(eventOrAnchorEl); } else { open(eventOrAnchorEl); } }; const open = (eventOrAnchorEl) => { const event = eventOrAnchorEl instanceof Element ? undefined : eventOrAnchorEl; const element = eventOrAnchorEl instanceof Element ? eventOrAnchorEl : (eventOrAnchorEl === null || eventOrAnchorEl === void 0 ? void 0 : eventOrAnchorEl.currentTarget) instanceof Element ? eventOrAnchorEl.currentTarget : undefined; if ((event === null || event === void 0 ? void 0 : event.type) === 'touchstart') { return; } if (parentPopupState) { if (!parentPopupState.isOpen) { return; } if (parentPopupState.childHandle) { parentPopupState.childHandle.close(); } parentPopupState.setChildHandle({ popupId, close, }); } setIsOpen(true); setHovered(prev => (event === null || event === void 0 ? void 0 : event.type) === 'mouseover' || prev); setFocused(prev => (event === null || event === void 0 ? void 0 : event.type) === 'focus' || prev); setOpenEventType(event === null || event === void 0 ? void 0 : event.type); if (!setAnchorElUsed) { if (event === null || event === void 0 ? void 0 : event.currentTarget) { _setAnchorEl(event.currentTarget); } else if (element) { _setAnchorEl(element); } } }; const close = (eventOrAnchorEl) => { const event = eventOrAnchorEl instanceof Element ? undefined : eventOrAnchorEl; if ((event === null || event === void 0 ? void 0 : event.type) === 'touchstart') { return; } childHandle === null || childHandle === void 0 ? void 0 : childHandle.close(); parentPopupState === null || parentPopupState === void 0 ? void 0 : parentPopupState.setChildHandle(undefined); setIsOpen(false); setHovered(false); setFocused(false); }; const setOpen = (nextOpen, eventOrAnchorEl) => { if (nextOpen) { open(eventOrAnchorEl); } else { close(eventOrAnchorEl); } }; return { isOpen, anchorEl, setAnchorElUsed, setAnchorEl, popupId, open, close, toggle, setOpen, hovered, focused, _openEventType: openEventType, childHandle, setChildHandle, }; } function bindTrigger(popupState) { return { onClick: popupState.open, }; } function bindToggle(popupState) { return { onClick: popupState.toggle, }; } function bindHover(popupState) { const { open } = popupState; return { onMouseOver: open, }; } function bindFocus(popupState) { const { open } = popupState; return { onFocus: open, }; } function bindPopover({ isOpen, anchorEl, close, popupId }) { return { id: popupId, anchorEl, anchorReference: 'anchorEl', open: isOpen, onClose: close, }; } function bindMenu({ isOpen, anchorEl, close, popupId }) { return { id: popupId, anchorEl, anchorReference: 'anchorEl', open: isOpen, onClose: close, }; } function bindPopper({ isOpen, anchorEl, popupId }) { return { id: popupId, anchorEl, open: isOpen, }; }