backpack-ui
Version:
Lonely Planet's Components
130 lines (99 loc) • 3.66 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _radium = require("radium");
var _radium2 = _interopRequireDefault(_radium);
var _classnames = require("classnames");
var _classnames2 = _interopRequireDefault(_classnames);
var _colors = require("../../styles/colors");
var _colors2 = _interopRequireDefault(_colors);
var _timing = require("../../styles/timing");
var _timing2 = _interopRequireDefault(_timing);
var _typography = require("../../styles/typography");
var _color = require("../../utils/color");
var _icon = require("../../utils/icon");
var _icon2 = _interopRequireDefault(_icon);
var _mixins = require("../../utils/mixins");
var _propTypes3 = require("../../utils/propTypes");
var _propTypes4 = _interopRequireDefault(_propTypes3);
var _createQAHook = require("../../utils/createQAHook");
var _createQAHook2 = _interopRequireDefault(_createQAHook);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var styles = {
alignItems: "center",
backgroundColor: _colors2.default.bgPrimary,
border: 0,
borderRadius: "50%",
boxShadow: (0, _color.rgba)(_colors2.default.bgOverlay, 0.2) + " 0 " + 4 / _typography.fontSizeHeading5 + "em " + 16 / _typography.fontSizeHeading5 + "em",
color: _colors2.default.textPrimary,
cursor: "pointer",
display: "inline-flex",
fontSize: _typography.fontSizeHeading5 + "px",
height: 54 / _typography.fontSizeHeading5 + "em",
justifyContent: "center",
lineHeight: 1,
padding: 0,
transition: "box-shadow " + _timing2.default.fast + " ease-in-out,\n transform " + _timing2.default.fast + " ease-in-out",
width: 54 / _typography.fontSizeHeading5 + "em",
WebkitTapHighlightColor: (0, _color.rgba)(_colors2.default.bgOverlay, 0.04),
":active": {
boxShadow: (0, _color.rgba)(_colors2.default.bgOverlay, 0.2) + " 0 " + 4 / _typography.fontSizeHeading5 / 3 + "em " + 16 / _typography.fontSizeHeading5 / 2 + "em",
transform: "translateY(1px)"
},
":focus": (0, _mixins.outline)(4)
};
var iconProps = {
style: {
display: "block",
marginLeft: "auto",
marginRight: "auto"
}
};
var ListButton = function ListButton(_ref) {
var onClick = _ref.onClick,
icon = _ref.icon,
label = _ref.label,
owns = _ref.owns,
id = _ref.id,
className = _ref.className,
style = _ref.style,
qaHook = _ref.qaHook;
return _react2.default.createElement(
"button",
{
id: id,
className: (0, _classnames2.default)("ListButton", className),
style: [styles, style],
onClick: onClick,
title: label,
"aria-label": label,
"aria-owns": owns,
"data-testid": qaHook ? (0, _createQAHook2.default)(label, (0, _classnames2.default)("ListButton", className), "btn") : null
},
(0, _icon2.default)(icon, iconProps)
);
};
ListButton.propTypes = {
onClick: _propTypes2.default.func.isRequired,
icon: _propTypes2.default.oneOf(["Bookmark", "BookmarkActive", "BookmarkAlt", "BookmarkAltActive", "Ellipsis", "Map"]).isRequired,
label: _propTypes2.default.string,
owns: _propTypes2.default.string,
id: _propTypes2.default.string,
className: _propTypes2.default.string,
style: _propTypes4.default.style,
qaHook: _propTypes2.default.bool
};
ListButton.defaultProps = {
label: null,
owns: null,
id: null,
className: null,
style: null,
qaHook: false
};
exports.default = (0, _radium2.default)(ListButton);