@jbrowse/core
Version:
JBrowse 2 core libraries used by plugins
102 lines (101 loc) • 5.13 kB
JavaScript
;
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;