UNPKG

@prezly/theme-kit-ui

Version:
45 lines (44 loc) 2.38 kB
"use strict"; 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)); }