backpack-ui
Version:
Lonely Planet's Components
241 lines (190 loc) • 4.72 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _radium = require("radium");
var _radium2 = _interopRequireDefault(_radium);
var _settings = require("../../../settings.json");
var _settings2 = _interopRequireDefault(_settings);
var _color = require("../../utils/color");
var _font = require("../../utils/font");
var _font2 = _interopRequireDefault(_font);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var styles = {
base: {
fontFamily: (0, _font2.default)("benton"),
lineHeight: 1,
marginTop: 0,
marginRight: 0,
marginBottom: 0,
marginLeft: 0
},
size: {
tiny: {
fontSize: "11px"
},
small: _defineProperty({
fontSize: "11px"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
fontSize: "13px"
}),
medium: {
fontSize: "26px",
lineHeight: 40 / 26
},
large: _defineProperty({
fontSize: "40px"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
fontSize: "45px"
}),
huge: _defineProperty({
fontSize: "30px",
letterSpacing: "-1px",
lineHeight: 36 / 30
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
fontSize: "64px",
lineHeight: 70 / 64
})
},
weight: {
thin: {
fontWeight: 300
},
normal: {
fontWeight: 400
},
thick: {
fontWeight: 600
}
},
importance: {
low: {
color: "rgba(" + (0, _color.rgb)(_settings2.default.color.text) + ", .4)"
},
normal: {
color: _settings2.default.color.titleGray
},
high: {
color: _settings2.default.color.darkGray
},
alert: {
color: _settings2.default.color.red
}
},
variant: {
caps: {
textTransform: "uppercase"
},
truncate: {
overflow: "hidden",
textOverflow: "ellipsis",
whiteSpace: "nowrap"
}
},
tracking: {
tight: {
letterSpacing: "-1px"
},
loose: {
letterSpacing: "1px"
}
}
};
/**
* Heading component
*/
function Heading(_ref) {
var children = _ref.children;
var level = _ref.level;
var size = _ref.size;
var weight = _ref.weight;
var importance = _ref.importance;
var tracking = _ref.tracking;
var truncate = _ref.truncate;
var caps = _ref.caps;
var override = _ref.override;
var Component = "h" + level;
var style = [styles.base];
if (size) {
style.push(styles.size[size]);
}
if (weight) {
style.push(styles.weight[weight]);
}
if (importance) {
style.push(styles.importance[importance]);
}
if (tracking) {
style.push(styles.tracking[tracking]);
}
if (truncate) {
style.push(styles.variant.truncate);
}
if (caps) {
style.push(styles.variant.caps);
}
if (override) {
style.push(override);
}
return _react2.default.createElement(
Component,
{
className: "Heading",
style: style
},
children
);
}
Heading.propTypes = {
/**
* Text for the heading
*/
children: _react2.default.PropTypes.node.isRequired,
/**
* Creates the heading element
*/
level: _react2.default.PropTypes.oneOf([1, 2, 3, 4, 5, 6]).isRequired,
/**
* Declares the font size of the heading
*/
size: _react2.default.PropTypes.oneOf(["huge", "large", "medium", "small", "tiny"]).isRequired,
/**
* Adjusts the font weight of the heading
*/
weight: _react2.default.PropTypes.oneOf(["thick", "normal", "thin"]),
/**
* The heading color changes based on importance
*/
importance: _react2.default.PropTypes.oneOf(["alert", "high", "normal", "low"]),
/**
* Controls the letter spacing
*/
tracking: _react2.default.PropTypes.oneOf(["", "tight", "loose"]),
/**
* Whether or not to hide the text overflow with an ellipsis
*/
truncate: _react2.default.PropTypes.bool,
/**
* Whether or not to set the heading in all caps
*/
caps: _react2.default.PropTypes.bool,
/**
* Override styles
*/
override: _react2.default.PropTypes.oneOfType([_react2.default.PropTypes.object])
};
Heading.defaultProps = {
level: 2,
size: "medium",
weight: "normal",
importance: "normal",
tracking: "",
truncate: false,
caps: false,
override: {}
};
Heading.styles = styles;
exports.default = (0, _radium2.default)(Heading);