backpack-ui
Version:
Lonely Planet's Components
192 lines (152 loc) • 5.27 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require("babel-runtime/helpers/defineProperty");
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
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 _reactStickynode = require("react-stickynode");
var _reactStickynode2 = _interopRequireDefault(_reactStickynode);
var _colors = require("../../styles/colors");
var _colors2 = _interopRequireDefault(_colors);
var _mq = require("../../styles/mq");
var _mq2 = _interopRequireDefault(_mq);
var _spacing = require("../../styles/spacing");
var _spacing2 = _interopRequireDefault(_spacing);
var _timing = require("../../styles/timing");
var _timing2 = _interopRequireDefault(_timing);
var _zIndex = require("../../styles/zIndex");
var _zIndex2 = _interopRequireDefault(_zIndex);
var _color = require("../../utils/color");
var _font = require("../../utils/font");
var _font2 = _interopRequireDefault(_font);
var _createQAHook = require("../../utils/createQAHook");
var _createQAHook2 = _interopRequireDefault(_createQAHook);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var navigationSubHeight = "80px";
var styles = {
container: {
backgroundColor: _colors2.default.bgPrimary,
borderTop: "1px solid rgba(" + (0, _color.rgb)(_colors2.default.accentGray) + ", 0.45)",
fontFamily: (0, _font2.default)("benton"),
fontSize: 0,
height: navigationSubHeight,
lineHeight: 1,
margin: 0,
padding: 0,
position: "relative",
transform: "translateZ(0)", // force hardware acceleration for iOS
transition: "opacity " + _timing2.default.default + ", visibility " + _timing2.default.default,
zIndex: _zIndex2.default.globalHeader
},
innerContainer: {
height: navigationSubHeight,
overflow: "hidden",
backgroundColor: "" + _colors2.default.bgPrimary
},
list: (0, _defineProperty3.default)({
animation: "fly-in " + _timing2.default.default,
height: navigationSubHeight, // to push horizontal scrollbar out of view
margin: 0,
WebkitOverflowScrolling: "touch",
overflowX: "auto",
overflowY: "hidden",
padding: 0,
textAlign: "center",
transition: "opacity " + _timing2.default.default,
whiteSpace: "nowrap",
width: "100%",
borderBottom: "1px solid " + _colors2.default.accentGray
}, "@media (min-width: " + _mq2.default.min[480] + ")", {
animation: "none"
}),
listItem: {
display: "inline-block",
lineHeight: navigationSubHeight,
margin: 0,
padding: 0,
height: "calc(100% - 2px)",
active: {
borderBottom: "5px solid " + _colors2.default.accentRed
}
},
// to be used as rules for style component
scoped: {
".sticky-inner-wrapper": {
left: 0,
right: 0,
width: "100% !important"
},
".active nav ul": {
borderBottom: "1px solid rgba(" + (0, _color.rgb)(_colors2.default.accentGray) + ", 0.45)"
},
button: {
backgroundColor: "transparent",
border: 0,
color: _colors2.default.textPrimary,
display: "block",
fontSize: "16px",
fontWeight: 500,
padding: "2px calc(" + _spacing2.default.gutter + "px / 2) 0",
transition: "300ms color ease-in",
cursor: "pointer",
height: "100%"
}
}
};
function TabbedNav(_ref) {
var items = _ref.items,
onClick = _ref.onClick,
active = _ref.active,
qaHook = _ref.qaHook;
return _react2.default.createElement(
"nav",
{ className: "TabbedNav", "data-testid": qaHook ? "tabbed-nav" : null, style: styles.container },
_react2.default.createElement(_radium.Style, {
scopeSelector: ".TabbedNav",
rules: styles.scoped
}),
_react2.default.createElement(
_reactStickynode2.default,
{ innerZ: _zIndex2.default.globalHeader, enabled: true },
_react2.default.createElement(
"div",
{ style: styles.innerContainer },
_react2.default.createElement(
"ul",
{ style: styles.list, "data-testid": qaHook ? "tabbed-nav-ul" : null },
items && items.map(function (item, index) {
return _react2.default.createElement(
"li",
{
style: [styles.listItem, item === active ? styles.listItem.active : null],
key: index,
"data-testid": qaHook ? (0, _createQAHook2.default)("" + item, "tabbed-nav-li-" + index, "li") : null
},
_react2.default.createElement(
"button",
{ onClick: onClick },
item
)
);
})
)
)
)
);
}
TabbedNav.propTypes = {
items: _propTypes2.default.arrayOf(_propTypes2.default.string).isRequired,
onClick: _propTypes2.default.func,
active: _propTypes2.default.string,
qaHook: _propTypes2.default.bool
};
TabbedNav.defaultProps = {
qaHook: false
};
exports.default = (0, _radium2.default)(TabbedNav);