@instructure/ui-avatar 8.49.1-snapshot-7 → 8.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -2
- package/es/Avatar/__examples__/Avatar.examples.js +3 -0
- package/es/Avatar/index.js +1 -0
- package/es/Avatar/props.js +2 -1
- package/es/Avatar/styles.js +10 -4
- package/lib/Avatar/__examples__/Avatar.examples.js +3 -0
- package/lib/Avatar/index.js +1 -0
- package/lib/Avatar/props.js +2 -1
- package/lib/Avatar/styles.js +10 -4
- package/package.json +14 -14
- package/src/Avatar/README.md +14 -0
- package/src/Avatar/__examples__/Avatar.examples.tsx +7 -0
- package/src/Avatar/index.tsx +1 -0
- package/src/Avatar/props.ts +7 -1
- package/src/Avatar/styles.ts +10 -5
- package/tsconfig.build.tsbuildinfo +1 -1
- package/types/Avatar/__examples__/Avatar.examples.d.ts.map +1 -1
- package/types/Avatar/index.d.ts +3 -0
- package/types/Avatar/index.d.ts.map +1 -1
- package/types/Avatar/props.d.ts +4 -0
- package/types/Avatar/props.d.ts.map +1 -1
- package/types/Avatar/styles.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,9 +3,12 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# [8.50.0](https://github.com/instructure/instructure-ui/compare/v8.49.0...v8.50.0) (2023-12-05)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **ui-avatar:** add showBorder prop to Avatar ([693ea76](https://github.com/instructure/instructure-ui/commit/693ea767282824272360fbdbcea57ad5152fbd0a))
|
|
9
12
|
|
|
10
13
|
|
|
11
14
|
|
|
@@ -36,6 +36,9 @@ export default {
|
|
|
36
36
|
if (props.color !== 'default' && props.size !== 'medium') {
|
|
37
37
|
return true;
|
|
38
38
|
}
|
|
39
|
+
if (props.src && props.showBorder === 'never' || !props.src && props.showBorder === 'always') {
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
39
42
|
if (props.renderIcon && props.src) {
|
|
40
43
|
return true;
|
|
41
44
|
}
|
package/es/Avatar/index.js
CHANGED
|
@@ -136,6 +136,7 @@ let Avatar = (_dec = withStyle(generateStyle, generateComponentTheme), _dec2 = t
|
|
|
136
136
|
size: 'medium',
|
|
137
137
|
color: 'default',
|
|
138
138
|
hasInverseColor: false,
|
|
139
|
+
showBorder: 'auto',
|
|
139
140
|
shape: 'circle',
|
|
140
141
|
display: 'inline-block',
|
|
141
142
|
onImageLoaded: _event => {}
|
package/es/Avatar/props.js
CHANGED
|
@@ -31,6 +31,7 @@ const propTypes = {
|
|
|
31
31
|
size: PropTypes.oneOf(['auto', 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']),
|
|
32
32
|
color: PropTypes.oneOf(['default', 'shamrock', 'barney', 'crimson', 'fire', 'licorice', 'ash']),
|
|
33
33
|
hasInverseColor: PropTypes.bool,
|
|
34
|
+
showBorder: PropTypes.oneOf(['auto', 'always', 'never']),
|
|
34
35
|
shape: PropTypes.oneOf(['circle', 'rectangle']),
|
|
35
36
|
margin: ThemeablePropTypes.spacing,
|
|
36
37
|
display: PropTypes.oneOf(['inline-block', 'block']),
|
|
@@ -39,5 +40,5 @@ const propTypes = {
|
|
|
39
40
|
elementRef: PropTypes.func,
|
|
40
41
|
renderIcon: PropTypes.oneOfType([PropTypes.node, PropTypes.func])
|
|
41
42
|
};
|
|
42
|
-
const allowedProps = ['name', 'src', 'alt', 'size', 'color', 'hasInverseColor', 'shape', 'margin', 'display', 'onImageLoaded', 'as', 'elementRef', 'renderIcon'];
|
|
43
|
+
const allowedProps = ['name', 'src', 'alt', 'size', 'color', 'hasInverseColor', 'shape', 'margin', 'display', 'onImageLoaded', 'as', 'elementRef', 'renderIcon', 'showBorder'];
|
|
43
44
|
export { propTypes, allowedProps };
|
package/es/Avatar/styles.js
CHANGED
|
@@ -37,7 +37,8 @@ const generateStyle = (componentTheme, props, state) => {
|
|
|
37
37
|
color = props.color,
|
|
38
38
|
hasInverseColor = props.hasInverseColor,
|
|
39
39
|
shape = props.shape,
|
|
40
|
-
src = props.src
|
|
40
|
+
src = props.src,
|
|
41
|
+
showBorder = props.showBorder;
|
|
41
42
|
const loaded = state.loaded;
|
|
42
43
|
const sizeStyles = {
|
|
43
44
|
auto: {
|
|
@@ -109,21 +110,26 @@ const generateStyle = (componentTheme, props, state) => {
|
|
|
109
110
|
overflow: 'hidden',
|
|
110
111
|
lineHeight: 0,
|
|
111
112
|
textAlign: 'center',
|
|
113
|
+
borderStyle: 'solid',
|
|
114
|
+
borderColor: componentTheme.borderColor,
|
|
112
115
|
...sizeStyles[size],
|
|
113
116
|
...variantStyles[shape],
|
|
114
117
|
...(loaded ? {
|
|
115
118
|
backgroundImage: `url('${src}')`,
|
|
116
|
-
|
|
119
|
+
...(showBorder !== 'always' && {
|
|
120
|
+
border: 0
|
|
121
|
+
}),
|
|
117
122
|
boxShadow: `inset 0 0 ${componentTheme.boxShadowBlur} 0 ${componentTheme.boxShadowColor}`
|
|
118
123
|
} : {
|
|
119
124
|
backgroundImage: void 0,
|
|
120
|
-
borderStyle: 'solid',
|
|
121
|
-
borderColor: componentTheme.borderColor,
|
|
122
125
|
...(hasInverseColor && {
|
|
123
126
|
border: 0,
|
|
124
127
|
padding: sizeStyles[size].borderWidth,
|
|
125
128
|
backgroundClip: 'border-box'
|
|
126
129
|
})
|
|
130
|
+
}),
|
|
131
|
+
...(showBorder === 'never' && {
|
|
132
|
+
border: 0
|
|
127
133
|
})
|
|
128
134
|
},
|
|
129
135
|
initials: {
|
|
@@ -42,6 +42,9 @@ var _default = exports.default = {
|
|
|
42
42
|
if (props.color !== 'default' && props.size !== 'medium') {
|
|
43
43
|
return true;
|
|
44
44
|
}
|
|
45
|
+
if (props.src && props.showBorder === 'never' || !props.src && props.showBorder === 'always') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
45
48
|
if (props.renderIcon && props.src) {
|
|
46
49
|
return true;
|
|
47
50
|
}
|
package/lib/Avatar/index.js
CHANGED
|
@@ -143,6 +143,7 @@ let Avatar = exports.Avatar = (_dec = (0, _emotion.withStyle)(_styles.default, _
|
|
|
143
143
|
size: 'medium',
|
|
144
144
|
color: 'default',
|
|
145
145
|
hasInverseColor: false,
|
|
146
|
+
showBorder: 'auto',
|
|
146
147
|
shape: 'circle',
|
|
147
148
|
display: 'inline-block',
|
|
148
149
|
onImageLoaded: _event => {}
|
package/lib/Avatar/props.js
CHANGED
|
@@ -38,6 +38,7 @@ const propTypes = exports.propTypes = {
|
|
|
38
38
|
size: _propTypes.default.oneOf(['auto', 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']),
|
|
39
39
|
color: _propTypes.default.oneOf(['default', 'shamrock', 'barney', 'crimson', 'fire', 'licorice', 'ash']),
|
|
40
40
|
hasInverseColor: _propTypes.default.bool,
|
|
41
|
+
showBorder: _propTypes.default.oneOf(['auto', 'always', 'never']),
|
|
41
42
|
shape: _propTypes.default.oneOf(['circle', 'rectangle']),
|
|
42
43
|
margin: _emotion.ThemeablePropTypes.spacing,
|
|
43
44
|
display: _propTypes.default.oneOf(['inline-block', 'block']),
|
|
@@ -46,4 +47,4 @@ const propTypes = exports.propTypes = {
|
|
|
46
47
|
elementRef: _propTypes.default.func,
|
|
47
48
|
renderIcon: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.func])
|
|
48
49
|
};
|
|
49
|
-
const allowedProps = exports.allowedProps = ['name', 'src', 'alt', 'size', 'color', 'hasInverseColor', 'shape', 'margin', 'display', 'onImageLoaded', 'as', 'elementRef', 'renderIcon'];
|
|
50
|
+
const allowedProps = exports.allowedProps = ['name', 'src', 'alt', 'size', 'color', 'hasInverseColor', 'shape', 'margin', 'display', 'onImageLoaded', 'as', 'elementRef', 'renderIcon', 'showBorder'];
|
package/lib/Avatar/styles.js
CHANGED
|
@@ -43,7 +43,8 @@ const generateStyle = (componentTheme, props, state) => {
|
|
|
43
43
|
color = props.color,
|
|
44
44
|
hasInverseColor = props.hasInverseColor,
|
|
45
45
|
shape = props.shape,
|
|
46
|
-
src = props.src
|
|
46
|
+
src = props.src,
|
|
47
|
+
showBorder = props.showBorder;
|
|
47
48
|
const loaded = state.loaded;
|
|
48
49
|
const sizeStyles = {
|
|
49
50
|
auto: {
|
|
@@ -115,21 +116,26 @@ const generateStyle = (componentTheme, props, state) => {
|
|
|
115
116
|
overflow: 'hidden',
|
|
116
117
|
lineHeight: 0,
|
|
117
118
|
textAlign: 'center',
|
|
119
|
+
borderStyle: 'solid',
|
|
120
|
+
borderColor: componentTheme.borderColor,
|
|
118
121
|
...sizeStyles[size],
|
|
119
122
|
...variantStyles[shape],
|
|
120
123
|
...(loaded ? {
|
|
121
124
|
backgroundImage: `url('${src}')`,
|
|
122
|
-
|
|
125
|
+
...(showBorder !== 'always' && {
|
|
126
|
+
border: 0
|
|
127
|
+
}),
|
|
123
128
|
boxShadow: `inset 0 0 ${componentTheme.boxShadowBlur} 0 ${componentTheme.boxShadowColor}`
|
|
124
129
|
} : {
|
|
125
130
|
backgroundImage: void 0,
|
|
126
|
-
borderStyle: 'solid',
|
|
127
|
-
borderColor: componentTheme.borderColor,
|
|
128
131
|
...(hasInverseColor && {
|
|
129
132
|
border: 0,
|
|
130
133
|
padding: sizeStyles[size].borderWidth,
|
|
131
134
|
backgroundClip: 'border-box'
|
|
132
135
|
})
|
|
136
|
+
}),
|
|
137
|
+
...(showBorder === 'never' && {
|
|
138
|
+
border: 0
|
|
133
139
|
})
|
|
134
140
|
},
|
|
135
141
|
initials: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/ui-avatar",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.50.0",
|
|
4
4
|
"description": "An image or letters that represents a user.",
|
|
5
5
|
"author": "Instructure, Inc. Engineering and Product Design",
|
|
6
6
|
"module": "./es/index.js",
|
|
@@ -24,22 +24,22 @@
|
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@babel/runtime": "^7.23.2",
|
|
27
|
-
"@instructure/console": "8.
|
|
28
|
-
"@instructure/emotion": "8.
|
|
29
|
-
"@instructure/shared-types": "8.
|
|
30
|
-
"@instructure/ui-icons": "8.
|
|
31
|
-
"@instructure/ui-react-utils": "8.
|
|
32
|
-
"@instructure/ui-testable": "8.
|
|
33
|
-
"@instructure/ui-view": "8.
|
|
27
|
+
"@instructure/console": "8.50.0",
|
|
28
|
+
"@instructure/emotion": "8.50.0",
|
|
29
|
+
"@instructure/shared-types": "8.50.0",
|
|
30
|
+
"@instructure/ui-icons": "8.50.0",
|
|
31
|
+
"@instructure/ui-react-utils": "8.50.0",
|
|
32
|
+
"@instructure/ui-testable": "8.50.0",
|
|
33
|
+
"@instructure/ui-view": "8.50.0",
|
|
34
34
|
"prop-types": "^15.8.1"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@instructure/ui-axe-check": "8.
|
|
38
|
-
"@instructure/ui-babel-preset": "8.
|
|
39
|
-
"@instructure/ui-color-utils": "8.
|
|
40
|
-
"@instructure/ui-test-locator": "8.
|
|
41
|
-
"@instructure/ui-test-utils": "8.
|
|
42
|
-
"@instructure/ui-themes": "8.
|
|
37
|
+
"@instructure/ui-axe-check": "8.50.0",
|
|
38
|
+
"@instructure/ui-babel-preset": "8.50.0",
|
|
39
|
+
"@instructure/ui-color-utils": "8.50.0",
|
|
40
|
+
"@instructure/ui-test-locator": "8.50.0",
|
|
41
|
+
"@instructure/ui-test-utils": "8.50.0",
|
|
42
|
+
"@instructure/ui-themes": "8.50.0",
|
|
43
43
|
"@testing-library/jest-dom": "^6.1.4",
|
|
44
44
|
"@testing-library/react": "^14.0.0"
|
|
45
45
|
},
|
package/src/Avatar/README.md
CHANGED
|
@@ -136,6 +136,20 @@ example: true
|
|
|
136
136
|
</div>
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
+
### Border
|
|
140
|
+
|
|
141
|
+
By default only avatars without an image have borders but you can force it to `always` or `never` show with the `showBorder` prop however you should only use it rarely in very specific occasions (e.g. displaying an avatar in the [SideNavBar](/#SideNavBar))
|
|
142
|
+
|
|
143
|
+
```js
|
|
144
|
+
---
|
|
145
|
+
example: true
|
|
146
|
+
---
|
|
147
|
+
<div>
|
|
148
|
+
<Avatar name="Sarah Robinson" src={avatarSquare} margin="0 small 0 0" showBorder="always"/>
|
|
149
|
+
<Avatar name="Sarah Robinson" renderIcon={<IconGroupLine />} margin="0 small 0 0" showBorder="never"/>
|
|
150
|
+
</div>
|
|
151
|
+
```
|
|
152
|
+
|
|
139
153
|
### Guidelines
|
|
140
154
|
|
|
141
155
|
```js
|
package/src/Avatar/index.tsx
CHANGED
package/src/Avatar/props.ts
CHANGED
|
@@ -74,6 +74,10 @@ type AvatarOwnProps = {
|
|
|
74
74
|
* In inverse color mode the background and text/icon colors are inverted
|
|
75
75
|
*/
|
|
76
76
|
hasInverseColor?: boolean
|
|
77
|
+
/**
|
|
78
|
+
* `auto` only shows a border when there is no source image. This prop can force to always or never show that border.
|
|
79
|
+
*/
|
|
80
|
+
showBorder?: 'auto' | 'always' | 'never'
|
|
77
81
|
shape: 'circle' | 'rectangle'
|
|
78
82
|
display: 'inline-block' | 'block'
|
|
79
83
|
/**
|
|
@@ -140,6 +144,7 @@ const propTypes: PropValidators<PropKeys> = {
|
|
|
140
144
|
'ash'
|
|
141
145
|
]),
|
|
142
146
|
hasInverseColor: PropTypes.bool,
|
|
147
|
+
showBorder: PropTypes.oneOf(['auto', 'always', 'never']),
|
|
143
148
|
shape: PropTypes.oneOf(['circle', 'rectangle']),
|
|
144
149
|
margin: ThemeablePropTypes.spacing,
|
|
145
150
|
display: PropTypes.oneOf(['inline-block', 'block']),
|
|
@@ -162,7 +167,8 @@ const allowedProps: AllowedPropKeys = [
|
|
|
162
167
|
'onImageLoaded',
|
|
163
168
|
'as',
|
|
164
169
|
'elementRef',
|
|
165
|
-
'renderIcon'
|
|
170
|
+
'renderIcon',
|
|
171
|
+
'showBorder'
|
|
166
172
|
]
|
|
167
173
|
|
|
168
174
|
export type { AvatarProps, AvatarStyle }
|
package/src/Avatar/styles.ts
CHANGED
|
@@ -40,7 +40,7 @@ const generateStyle = (
|
|
|
40
40
|
props: AvatarProps,
|
|
41
41
|
state: AvatarState
|
|
42
42
|
): AvatarStyle => {
|
|
43
|
-
const { size, color, hasInverseColor, shape, src } = props
|
|
43
|
+
const { size, color, hasInverseColor, shape, src, showBorder } = props
|
|
44
44
|
const { loaded } = state
|
|
45
45
|
|
|
46
46
|
const sizeStyles = {
|
|
@@ -121,24 +121,29 @@ const generateStyle = (
|
|
|
121
121
|
overflow: 'hidden',
|
|
122
122
|
lineHeight: 0,
|
|
123
123
|
textAlign: 'center',
|
|
124
|
+
borderStyle: 'solid',
|
|
125
|
+
borderColor: componentTheme.borderColor,
|
|
124
126
|
...sizeStyles[size],
|
|
125
127
|
...variantStyles[shape],
|
|
126
128
|
...(loaded
|
|
127
129
|
? {
|
|
128
130
|
backgroundImage: `url('${src}')`,
|
|
129
|
-
|
|
131
|
+
...(showBorder !== 'always' && {
|
|
132
|
+
border: 0
|
|
133
|
+
}),
|
|
130
134
|
boxShadow: `inset 0 0 ${componentTheme.boxShadowBlur} 0 ${componentTheme.boxShadowColor}`
|
|
131
135
|
}
|
|
132
136
|
: {
|
|
133
137
|
backgroundImage: undefined,
|
|
134
|
-
borderStyle: 'solid',
|
|
135
|
-
borderColor: componentTheme.borderColor,
|
|
136
138
|
...(hasInverseColor && {
|
|
137
139
|
border: 0,
|
|
138
140
|
padding: sizeStyles[size].borderWidth,
|
|
139
141
|
backgroundClip: 'border-box'
|
|
140
142
|
})
|
|
141
|
-
})
|
|
143
|
+
}),
|
|
144
|
+
...(showBorder === 'never' && {
|
|
145
|
+
border: 0
|
|
146
|
+
})
|
|
142
147
|
},
|
|
143
148
|
initials: {
|
|
144
149
|
label: 'avatar__initials',
|