wix-style-react
Version:
wix-style-react
140 lines (139 loc) • 4.64 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _color = _interopRequireDefault(require("color"));
var _clamp = _interopRequireDefault(require("lodash/clamp"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _ColorPickerHsbSt = require("./ColorPickerHsb.st.css");
var _jsxFileName = "/home/builduser/work/a9c1ac8876d5057c/packages/wix-style-react/dist/cjs/ColorPicker/ColorPickerHsb.js";
class ColorPickerHsb extends _react.default.PureComponent {
constructor() {
super(...arguments);
this.onMarkerDragStart = e => {
e.preventDefault();
window.addEventListener('mousemove', this.setNewColorByMouseEvent);
window.addEventListener('touchmove', this.setNewColorByMouseEvent);
window.addEventListener('mouseup', this.onMarkerDragEnd);
window.addEventListener('touchend', this.onMarkerDragEnd);
window.addEventListener('touchcancel', this.onMarkerDragEnd);
this.gradientRect = this.gradient.getBoundingClientRect();
this.setNewColorByMouseEvent(e);
};
this.onMarkerDragEnd = () => {
window.removeEventListener('touchmove', this.setNewColorByMouseEvent);
window.removeEventListener('mousemove', this.setNewColorByMouseEvent);
window.removeEventListener('touchcancel', this.onMarkerDragEnd);
window.removeEventListener('touchend', this.onMarkerDragEnd);
window.removeEventListener('mouseup', this.onMarkerDragEnd);
};
this.getSVByMouseEvent = e => {
var eventX = 0;
var eventY = 0;
if (e.clientX) {
eventX = e.clientX;
eventY = e.clientY;
} else {
eventX = e.touches[0].clientX;
eventY = e.touches[0].clientY;
}
var x = eventX - this.gradientRect.left;
var y = eventY - this.gradientRect.top;
var s = (0, _clamp.default)(100 * x / this.gradientRect.width, 0, 100);
var v = (0, _clamp.default)(100 - 100 * y / this.gradientRect.height, 0, 100);
return {
s,
v
};
};
this.setNewColorByMouseEvent = e => {
var {
onChange,
current
} = this.props;
var {
s,
v
} = this.getSVByMouseEvent(e);
onChange((0, _color.default)({
h: current.hue(),
s,
v
}));
};
}
componentWillUnmount() {
this.onMarkerDragEnd();
}
render() {
var {
dataHook,
current
} = this.props;
var hue = current.saturationv(100).lightness(50);
var style = {
left: "".concat(current.saturationv(), "%"),
top: "".concat(100 - current.value(), "%")
};
return /*#__PURE__*/_react.default.createElement("div", {
className: _ColorPickerHsbSt.classes.root,
"data-hook": dataHook,
ref: e => this.gradient = e,
onMouseDown: this.onMarkerDragStart,
onTouchStart: this.onMarkerDragStart,
__self: this,
__source: {
fileName: _jsxFileName,
lineNumber: 78,
columnNumber: 7
}
}, /*#__PURE__*/_react.default.createElement("div", {
className: _ColorPickerHsbSt.classes.hue,
style: {
background: hue.hex()
},
__self: this,
__source: {
fileName: _jsxFileName,
lineNumber: 85,
columnNumber: 9
}
}), /*#__PURE__*/_react.default.createElement("div", {
className: _ColorPickerHsbSt.classes.saturation,
__self: this,
__source: {
fileName: _jsxFileName,
lineNumber: 86,
columnNumber: 9
}
}), /*#__PURE__*/_react.default.createElement("div", {
className: _ColorPickerHsbSt.classes.brightness,
__self: this,
__source: {
fileName: _jsxFileName,
lineNumber: 87,
columnNumber: 9
}
}), /*#__PURE__*/_react.default.createElement("div", {
className: _ColorPickerHsbSt.classes.handle,
style: style,
__self: this,
__source: {
fileName: _jsxFileName,
lineNumber: 88,
columnNumber: 9
}
}));
}
}
ColorPickerHsb.propTypes = {
/** Applied as data-hook HTML attribute that can be used to create driver in testing */
dataHook: _propTypes.default.string,
/** The current Hsb value */
current: _propTypes.default.object.isRequired,
/** A callback function that will be triggered when the value is changed */
onChange: _propTypes.default.func.isRequired
};
var _default = exports.default = ColorPickerHsb;
//# sourceMappingURL=ColorPickerHsb.js.map