@grafana/ui
Version:
Grafana Components Library
110 lines (105 loc) • 3.93 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var css = require('@emotion/css');
var focus = require('@react-aria/focus');
var React = require('react');
var data = require('@grafana/data');
var i18n = require('@grafana/i18n');
var ThemeContext = require('../../themes/ThemeContext.cjs');
var Tab = require('../Tabs/Tab.cjs');
var TabsBar = require('../Tabs/TabsBar.cjs');
var NamedColorsPalette = require('./NamedColorsPalette.cjs');
var SpectrumPalette = require('./SpectrumPalette.cjs');
"use strict";
const ColorPickerPopover = (props) => {
const { color, onChange, enableNamedColors, customPickers } = props;
const theme = ThemeContext.useTheme2();
const [activePicker, setActivePicker] = React.useState("palette");
const styles = getStyles(theme);
const handleChange = (color2) => {
if (enableNamedColors) {
return onChange(color2);
}
onChange(data.colorManipulator.asHexString(theme.visualization.getColorByName(color2)));
};
const onTabChange = (tab) => {
return () => setActivePicker(tab);
};
const renderCustomPicker = (tabKey) => {
if (!customPickers) {
return null;
}
return React.createElement(customPickers[tabKey].tabComponent, {
color,
onChange: handleChange
});
};
const renderPicker = () => {
switch (activePicker) {
case "spectrum":
return /* @__PURE__ */ jsxRuntime.jsx(SpectrumPalette.default, { color, onChange: handleChange });
case "palette":
return /* @__PURE__ */ jsxRuntime.jsx(NamedColorsPalette.NamedColorsPalette, { color, onChange: handleChange });
default:
return renderCustomPicker(activePicker);
}
};
const renderCustomPickerTabs = () => {
if (!customPickers) {
return null;
}
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: Object.keys(customPickers).map((key) => {
return /* @__PURE__ */ jsxRuntime.jsx(Tab.Tab, { label: customPickers[key].name, onChangeTab: onTabChange(key) }, key);
}) });
};
return /* @__PURE__ */ jsxRuntime.jsx(focus.FocusScope, { contain: true, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { tabIndex: -1, className: styles.colorPickerPopover, children: [
/* @__PURE__ */ jsxRuntime.jsxs(TabsBar.TabsBar, { children: [
/* @__PURE__ */ jsxRuntime.jsx(
Tab.Tab,
{
label: i18n.t("grafana-ui.color-picker-popover.palette-tab", "Colors"),
onChangeTab: onTabChange("palette"),
active: activePicker === "palette"
}
),
/* @__PURE__ */ jsxRuntime.jsx(
Tab.Tab,
{
label: i18n.t("grafana-ui.color-picker-popover.spectrum-tab", "Custom"),
onChangeTab: onTabChange("spectrum"),
active: activePicker === "spectrum"
}
),
renderCustomPickerTabs()
] }),
/* @__PURE__ */ jsxRuntime.jsx("div", { className: styles.colorPickerPopoverContent, children: renderPicker() })
] }) });
};
const getStyles = (theme) => {
return {
colorPickerPopover: css.css({
borderRadius: theme.shape.radius.default,
boxShadow: theme.shadows.z3,
background: theme.colors.background.elevated,
padding: theme.spacing(0.5),
border: `1px solid ${theme.colors.border.weak}`
}),
colorPickerPopoverContent: css.css({
width: "246px",
fontSize: theme.typography.bodySmall.fontSize,
minHeight: "184px",
height: "290px",
padding: theme.spacing(1),
display: "flex",
flexDirection: "column"
}),
colorPickerPopoverTabs: css.css({
display: "flex",
width: "100%",
borderRadius: `${theme.shape.radius.default} ${theme.shape.radius.default} 0 0`
})
};
};
exports.ColorPickerPopover = ColorPickerPopover;
//# sourceMappingURL=ColorPickerPopover.cjs.map