UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

102 lines (101 loc) 5.13 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.PopoverPicker = void 0; exports.ColorPopover = ColorPopover; exports.ColorPicker = ColorPicker; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const colord_1 = require("@jbrowse/core/util/colord"); const material_1 = require("@mui/material"); const mui_1 = require("tss-react/mui"); const paletteColors = __importStar(require("./colors")); const util_1 = require("../util"); const react_colorful_1 = require("./react-colorful"); const useStyles = (0, mui_1.makeStyles)()({ picker: { position: 'relative' }, swatches: { display: 'flex', padding: 12, flexWrap: 'wrap', }, swatch: { width: 24, height: 24, margin: 4, border: 'none', padding: 0, cursor: 'pointer', outline: 'none', }, }); const PopoverPicker = ({ color, onChange, }) => { const [anchorEl, setAnchorEl] = (0, react_1.useState)(null); const { classes } = useStyles(); return ((0, jsx_runtime_1.jsxs)("div", { className: classes.picker, children: [(0, jsx_runtime_1.jsx)("div", { className: classes.swatch, style: { backgroundColor: color }, onClick: event => { setAnchorEl(event.currentTarget); } }), (0, jsx_runtime_1.jsx)(ColorPopover, { anchorEl: anchorEl, onClose: () => { setAnchorEl(null); }, color: color, onChange: onChange })] })); }; exports.PopoverPicker = PopoverPicker; function ColorPopover({ anchorEl, onChange, onClose, color, }) { return ((0, jsx_runtime_1.jsx)(material_1.Popover, { open: !!anchorEl, anchorEl: anchorEl, onClose: onClose, children: (0, jsx_runtime_1.jsx)(ColorPicker, { color: color, onChange: onChange }) })); } function ColorPicker({ onChange, color, }) { const { classes } = useStyles(); const [val, setVal] = (0, util_1.useLocalStorage)('colorPickerPalette', 'set1'); const presetColors = paletteColors[val]; const palettes = Object.keys(paletteColors); const [text, setText] = (0, react_1.useState)(color); const rgb = (0, colord_1.colord)(color).toRgbString(); const rgbDebounced = (0, util_1.useDebounce)(rgb, 1000); const handleChange = (val) => { setText(val); try { onChange((0, colord_1.colord)(val).toRgbString()); } catch (e) { } }; return ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', padding: 10 }, children: [(0, jsx_runtime_1.jsx)("div", { style: { width: 200, margin: 5 }, children: (0, jsx_runtime_1.jsx)(react_colorful_1.RgbaStringColorPicker, { color: rgbDebounced, onChange: handleChange }) }), (0, jsx_runtime_1.jsxs)("div", { style: { width: 200, margin: 5 }, children: [(0, jsx_runtime_1.jsx)(material_1.Select, { value: val, onChange: event => { const pal = event.target.value; setVal(pal); }, children: palettes.map(p => ((0, jsx_runtime_1.jsx)(material_1.MenuItem, { value: p, children: p }, p))) }), (0, jsx_runtime_1.jsx)("div", { className: classes.swatches, children: presetColors.map((presetColor, idx) => ((0, jsx_runtime_1.jsx)("button", { type: "button", className: classes.swatch, style: { background: presetColor }, onClick: () => { handleChange(presetColor); } }, `${presetColor}-${idx}`))) }), (0, jsx_runtime_1.jsx)(material_1.TextField, { helperText: 'Manually set color (hex, rgb, or css color name)', value: text, onChange: event => { handleChange(event.target.value); } })] })] })); } exports.default = exports.PopoverPicker;