react-hover-fill-button
Version:
React button with a fill animation on hover
77 lines (58 loc) • 3.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _templateObject2() {
var data = _taggedTemplateLiteral(["\n\tborder: ", " solid ", ";\n\tbackground: ", ";\n\tcolor: ", "\n\tposition: relative;\n\n\t&:hover ", " {\n\t\tclip-path: polygon(0 0, 100% 0, 165% 100%, 0% 100%);\n\t}\n"]);
_templateObject2 = function _templateObject2() {
return data;
};
return data;
}
function _templateObject() {
var data = _taggedTemplateLiteral(["\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tbackground: ", ";\n\tcolor: ", ";\n\tclip-path: polygon(0 0, -65% 0, 0% 100%, 0% 100%);\n\ttransition: clip-path 0.5s;\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
var Filler = _styledComponents.default.div(_templateObject(), function (props) {
return props.fillBackground || "red";
}, function (props) {
return props.fillTextColor || "white";
});
var Button = _styledComponents.default.button(_templateObject2(), function (props) {
return props.borderWidth || "2px";
}, function (props) {
return props.fillBackground || "red";
}, function (props) {
return props.background || "white";
}, function (props) {
return props.textColor || "black";
}, Filler);
var HoverFillButton = function HoverFillButton(_ref) {
var children = _ref.children,
className = _ref.className,
style = _ref.style,
props = _objectWithoutProperties(_ref, ["children", "className", "style"]);
return _react.default.createElement(Button, props, _react.default.createElement(Filler, props, children), children);
};
HoverFillButton.propTypes = {
children: _propTypes.default.node.isRequired,
className: _propTypes.default.string,
fillBackground: _propTypes.default.string,
background: _propTypes.default.string,
textColor: _propTypes.default.string,
fillTextColor: _propTypes.default.string,
borderWidth: _propTypes.default.string
};
var _default = HoverFillButton;
exports.default = _default;