@prezly/theme-kit-ui
Version:
UI components for Prezly themes
45 lines (44 loc) • 2.38 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 _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
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));
}