reanimated-color-picker
Version:
A Pure JavaScript Color Picker for React Native
78 lines (75 loc) • 2.74 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.default = Ring;
var _react = _interopRequireDefault(require('react'));
var _reactNativeReanimated = _interopRequireWildcard(require('react-native-reanimated'));
var _index = _interopRequireDefault(require('../../../colorKit/index'));
var _styles = require('../../../styles');
var _utils = require('../../../utils');
function _interopRequireWildcard(e, t) {
if ('function' == typeof WeakMap)
var r = new WeakMap(),
n = new WeakMap();
return (_interopRequireWildcard = function (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 (const 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);
}
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
function Ring({ width, height, borderRadius, adaptiveColor, thumbAnimatedStyle, innerStyle, solidColor, style }) {
const ringStyle = {
width,
height,
borderRadius,
borderWidth: 1,
};
const borderColor = (0, _utils.getStyle)(style, 'borderColor');
const ringBackgroundColor = (0, _utils.getStyle)(style, 'backgroundColor');
const adaptiveColorStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => {
return {
backgroundColor: ringBackgroundColor ?? _index.default.runOnUI().setAlpha(adaptiveColor.value, 0.5).hex(),
borderColor: borderColor ?? adaptiveColor.value,
};
}, [borderColor, ringBackgroundColor, adaptiveColor]);
// Make sure to match the parity (odd or even) of the parent width, to solve the centering issue
const innerWidth = 0.75 * width;
const innerSize = width % 2 === 0 ? Math.floor(innerWidth / 2) * 2 : Math.floor(innerWidth / 2) * 2 + 1;
return /*#__PURE__*/ _react.default.createElement(
_reactNativeReanimated.default.View,
{
style: [_styles.styles.handle, ringStyle, adaptiveColorStyle, style, thumbAnimatedStyle],
renderToHardwareTextureAndroid: _utils.enableAndroidHardwareTextures,
},
/*#__PURE__*/ _react.default.createElement(_reactNativeReanimated.default.View, {
style: [
_styles.styles.shadow,
{
borderRadius,
zIndex: 100,
width: innerSize,
height: innerSize,
},
solidColor,
innerStyle,
],
}),
);
}