backpack-ui
Version:
Lonely Planet's Components
328 lines (280 loc) • 7.82 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 _grid = require("../../utils/grid");
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: {
fontSize: "1.4rem",
letterSpacing: ".01rem"
},
size: {},
orientation: {
vertical: {
textAlign: "center"
},
horizontal: _defineProperty({
display: "inline-block",
marginTop: "2.4rem",
overflow: "hidden"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
marginTop: (0, _grid.gutter)("static")
})
},
type: {
article: _defineProperty({}, "@media (max-width: " + _settings2.default.media.max["600"] + ")", {
marginTop: ".6rem"
}),
narrative: {
marginTop: "1.5rem"
}
},
element: {
anchor: {
base: {
display: "inline-block"
}
},
avatar: {
base: {
backgroundColor: _settings2.default.color.white,
borderRadius: "100%",
display: "inline-block",
height: "4rem",
maxWidth: "4rem",
position: "relative",
verticalAlign: "middle",
width: "4rem"
},
size: {
large: _defineProperty({}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
height: "auto",
maxWidth: "none",
width: "8rem"
})
},
orientation: {
horizontal: {
float: "left",
marginRight: "1.4rem"
}
},
type: {
author: {
height: "auto",
maxWidth: "4rem",
width: "12vw"
},
navigation: {
position: "relative",
top: "-.4rem"
},
article: _defineProperty({}, "@media (max-width: " + _settings2.default.media.max["600"] + ")", {
display: "none"
})
}
},
details: {
base: {},
size: {},
orientation: {
horizontal: {
float: "left",
marginTop: ".6rem"
},
vertical: _defineProperty({
marginTop: "1.3rem"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
marginTop: "1.8rem"
})
},
type: {}
},
name: {
base: _defineProperty({
color: _settings2.default.color.titleGray,
fontSize: "1.2rem",
fontWeight: 600,
lineHeight: 1,
// not inline
marginBottom: ".8rem",
textTransform: "uppercase"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
fontSize: "1.4rem"
}),
size: {
small: _defineProperty({
letterSpacing: ".06rem",
// not inline
marginBottom: ".5rem"
}, "@media (min-width: " + _settings2.default.media.min["600"] + ")", {
fontSize: "1.2rem"
})
},
orientation: {},
type: {
article: _defineProperty({}, "@media (max-width: " + _settings2.default.media.max["600"] + ")", {
display: "inline",
fontSize: "1.1rem"
})
}
},
title: {
base: {
color: _settings2.default.color.lightText,
fontSize: "1.4rem",
lineHeight: 1,
// not inline
fontFamily: (0, _font2.default)("miller"),
fontStyle: "italic",
letterSpacing: 0
},
size: {},
orientation: {},
type: {
article: _defineProperty({}, "@media (max-width: " + _settings2.default.media.max["600"] + ")", {
display: "inline",
fontSize: "1.1rem",
marginLeft: "1.2rem"
})
}
},
bio: {
base: {
marginTop: ".4rem",
maxWidth: "40rem"
}
}
}
};
/**
* Intro narrative for POI
*/
function Profile(_ref) {
var name = _ref.name;
var title = _ref.title;
var avatar = _ref.avatar;
var profileUrl = _ref.profileUrl;
var size = _ref.size;
var orientation = _ref.orientation;
var type = _ref.type;
var style = {
base: [styles.base],
anchor: [styles.element.anchor.base],
avatar: [styles.element.avatar.base],
details: [styles.element.details.base],
name: [styles.element.name.base],
title: [styles.element.title.base],
bio: [styles.element.bio.base]
};
if (size) {
style.base.push(styles.size[size]);
style.avatar.push(styles.element.avatar.size[size]);
style.details.push(styles.element.details.size[size]);
style.name.push(styles.element.name.size[size]);
style.title.push(styles.element.title.size[size]);
}
if (orientation) {
style.base.push(styles.orientation[orientation]);
style.avatar.push(styles.element.avatar.orientation[orientation]);
style.details.push(styles.element.details.orientation[orientation]);
style.name.push(styles.element.name.orientation[orientation]);
style.title.push(styles.element.title.orientation[orientation]);
}
if (type) {
style.base.push(styles.type[type]);
style.avatar.push(styles.element.avatar.type[type]);
style.details.push(styles.element.details.type[type]);
style.name.push(styles.element.name.type[type]);
style.title.push(styles.element.title.type[type]);
}
var ProfileAvatar = _react2.default.createElement("img", {
className: "Profile-avatar",
style: style.avatar,
src: avatar,
alt: "Avatar"
});
var AuthorDetails = _react2.default.createElement(
"div",
{ className: "Profile-details", style: style.details },
_react2.default.createElement(
"div",
{ className: "Profile-name", style: style.name },
name
),
_react2.default.createElement(
"div",
{ className: "Profile-title", style: style.title },
title
)
);
if (profileUrl) {
return _react2.default.createElement(
"div",
{ className: "Profile", style: style.base },
_react2.default.createElement(
"a",
{ style: style.anchor, href: profileUrl },
ProfileAvatar,
AuthorDetails
)
);
}
return _react2.default.createElement(
"div",
{ className: "Profile", style: style.base },
ProfileAvatar,
AuthorDetails
);
}
Profile.propTypes = {
/**
* Profile name
*/
name: _react2.default.PropTypes.string.isRequired,
/**
* Profile title
*/
title: _react2.default.PropTypes.string,
/**
* Profile avatar URL
*/
avatar: _react2.default.PropTypes.string,
/**
* Profile profile URL
*/
profileUrl: _react2.default.PropTypes.string,
/**
* Size of profile
*/
size: _react2.default.PropTypes.oneOf(["", "small", "large"]),
/**
* Orientation of profile; how is it presented
*/
orientation: _react2.default.PropTypes.oneOf(["", "horizontal", "vertical"]),
/**
* A specific type of profile
*/
type: _react2.default.PropTypes.oneOf(["", "article", "narrative", "navigation"])
};
Profile.defaultProps = {
name: "",
title: "",
avatar: "//assets.staticlp.com/profiles/users/placeholders/large.png",
profileUrl: "",
size: "small",
orientation: "horizontal",
type: ""
};
Profile.styles = styles;
exports.default = (0, _radium2.default)(Profile);