UNPKG

4.58 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7exports.__esModule = true;
8exports["default"] = exports.AvatarBadge = void 0;
9
10var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _core = require("@emotion/core");
15
16var _styles = _interopRequireWildcard(require("./styles"));
17
18var _Image = require("../Image");
19
20var _ThemeProvider = require("../ThemeProvider");
21
22var _ColorModeProvider = require("../ColorModeProvider");
23
24var _Box = _interopRequireDefault(require("../Box"));
25
26/** @jsx jsx */
27var AvatarBadge = function AvatarBadge(props) {
28 var _useColorMode = (0, _ColorModeProvider.useColorMode)(),
29 colorMode = _useColorMode.colorMode;
30
31 var borderColor = {
32 light: "white",
33 dark: "gray.800"
34 };
35 return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
36 position: "absolute",
37 display: "flex",
38 alignItems: "center",
39 justifyContent: "center",
40 transform: "translate(25%, 25%)",
41 bottom: "0",
42 right: "0",
43 border: "0.2em solid",
44 borderColor: borderColor[colorMode],
45 rounded: "full"
46 }, props));
47};
48
49exports.AvatarBadge = AvatarBadge;
50
51var getInitials = function getInitials(name) {
52 var _name$split = name.split(" "),
53 firstName = _name$split[0],
54 lastName = _name$split[1];
55
56 if (firstName && lastName) {
57 return "" + firstName.charAt(0) + lastName.charAt(0);
58 } else {
59 return firstName.charAt(0);
60 }
61};
62
63var AvatarName = function AvatarName(_ref) {
64 var name = _ref.name,
65 props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["name"]);
66 return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
67 textAlign: "center",
68 textTransform: "uppercase",
69 fontWeight: "medium",
70 "aria-label": name
71 }, props), name ? getInitials(name) : null);
72};
73
74var DefaultAvatar = function DefaultAvatar(props) {
75 return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
76 size: "100%"
77 }, props), (0, _core.jsx)("svg", {
78 fill: "#fff",
79 viewBox: "0 0 128 128",
80 role: "img"
81 }, (0, _core.jsx)("g", null, (0, _core.jsx)("path", {
82 d: "M103,102.1388 C93.094,111.92 79.3504,118 64.1638,118 C48.8056,118 34.9294,111.768 25,101.7892 L25,95.2 C25,86.8096 31.981,80 40.6,80 L87.4,80 C96.019,80 103,86.8096 103,95.2 L103,102.1388 Z"
83 }), (0, _core.jsx)("path", {
84 d: "M63.9961647,24 C51.2938136,24 41,34.2938136 41,46.9961647 C41,59.7061864 51.2938136,70 63.9961647,70 C76.6985159,70 87,59.7061864 87,46.9961647 C87,34.2938136 76.6985159,24 63.9961647,24"
85 }))));
86};
87
88var Avatar = function Avatar(_ref2) {
89 var size = _ref2.size,
90 showBorder = _ref2.showBorder,
91 name = _ref2.name,
92 src = _ref2.src,
93 borderColor = _ref2.borderColor,
94 children = _ref2.children,
95 rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref2, ["size", "showBorder", "name", "src", "borderColor", "children"]);
96 var avatarStyleProps = (0, _styles["default"])({
97 name: name,
98 size: size,
99 showBorder: showBorder,
100 borderColor: borderColor
101 });
102 var hasLoaded = (0, _Image.useHasImageLoaded)({
103 src: src
104 });
105 var theme = (0, _ThemeProvider.useTheme)();
106 var sizeKey = _styles.avatarSizes[size];
107 var _size = theme.sizes[sizeKey];
108 var fontSize = "calc(" + _size + " / 2.5)";
109
110 var renderChildren = function renderChildren() {
111 if (src && hasLoaded) {
112 return (0, _core.jsx)(_Box["default"], {
113 as: "img",
114 size: "100%",
115 rounded: "full",
116 objectFit: "cover",
117 src: src,
118 alt: name
119 });
120 }
121
122 if (src && !hasLoaded) {
123 if (name) {
124 return (0, _core.jsx)(AvatarName, {
125 size: _size,
126 name: name
127 });
128 } else {
129 return (0, _core.jsx)(DefaultAvatar, {
130 "aria-label": name
131 });
132 }
133 }
134
135 if (!src && name) {
136 return (0, _core.jsx)(AvatarName, {
137 size: _size,
138 name: name
139 });
140 }
141
142 return (0, _core.jsx)(DefaultAvatar, {
143 "aria-label": name
144 });
145 };
146
147 return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({
148 fontSize: fontSize,
149 lineHeight: _size,
150 verticalAlign: "top"
151 }, avatarStyleProps, rest), renderChildren(), children);
152};
153
154Avatar.defaultProps = {
155 size: "md"
156};
157var _default = Avatar;
158exports["default"] = _default;
\No newline at end of file