@prezly/theme-kit-ui
Version:
UI components for Prezly themes
48 lines (46 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ColorSwatch = ColorSwatch;
var _react = _interopRequireWildcard(require("react"));
var _tailwindMerge = require("tailwind-merge");
var _tinycolor = _interopRequireDefault(require("tinycolor2"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions */
var DARKNESS_THRESHOLD = 180;
var BRIGHTNESS_THRESHOLD = 220;
function ColorSwatch(_ref) {
var {
value,
hex
} = _ref;
var [notification, setNotification] = (0, _react.useState)('');
var timeoutRef = (0, _react.useRef)(null);
var color = (0, _tinycolor.default)(hex);
var isDark = color.getBrightness() < DARKNESS_THRESHOLD;
var isBright = color.getBrightness() > BRIGHTNESS_THRESHOLD;
var borderColor = isBright ? color.clone().darken(5).toHexString() : undefined;
function handleValueClick() {
if (timeoutRef.current) {
clearTimeout(timeoutRef.current);
}
navigator.clipboard.writeText(hex);
setNotification('Value copied!');
timeoutRef.current = setTimeout(() => setNotification(''), 2000);
}
return /*#__PURE__*/_react.default.createElement("div", {
className: "relative p-4 border-transparent border-[1px] rounded-lg",
style: {
backgroundColor: hex,
borderColor
}
}, /*#__PURE__*/_react.default.createElement("p", {
className: (0, _tailwindMerge.twMerge)('font-medium text-sm text-gray-800 opacity-50 uppercase m-0', isDark && 'text-white')
}, notification), /*#__PURE__*/_react.default.createElement("p", {
className: (0, _tailwindMerge.twMerge)('font-bold text-lg leading-7 text-gray-800 m-0', isDark && 'text-gray-50'),
onClick: handleValueClick
}, value));
}