@fluentui-react-native/experimental-avatar 0.14.23 → 0.14.26

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.
Files changed (40) hide show
  1. package/CHANGELOG.json +46 -1
  2. package/CHANGELOG.md +26 -2
  3. package/lib/JSAvatar.d.ts.map +1 -1
  4. package/lib/JSAvatar.js +9 -7
  5. package/lib/JSAvatar.js.map +1 -1
  6. package/lib/JSAvatar.styling.d.ts.map +1 -1
  7. package/lib/JSAvatar.styling.js +9 -12
  8. package/lib/JSAvatar.styling.js.map +1 -1
  9. package/lib/JSAvatar.types.d.ts +50 -7
  10. package/lib/JSAvatar.types.d.ts.map +1 -1
  11. package/lib/JSAvatar.types.js +2 -1
  12. package/lib/JSAvatar.types.js.map +1 -1
  13. package/lib/JSAvatarTokens.d.ts.map +1 -1
  14. package/lib/JSAvatarTokens.js +142 -56
  15. package/lib/JSAvatarTokens.js.map +1 -1
  16. package/lib/useAvatar.d.ts.map +1 -1
  17. package/lib/useAvatar.js +3 -1
  18. package/lib/useAvatar.js.map +1 -1
  19. package/lib-commonjs/JSAvatar.d.ts.map +1 -1
  20. package/lib-commonjs/JSAvatar.js +8 -6
  21. package/lib-commonjs/JSAvatar.js.map +1 -1
  22. package/lib-commonjs/JSAvatar.styling.d.ts.map +1 -1
  23. package/lib-commonjs/JSAvatar.styling.js +7 -10
  24. package/lib-commonjs/JSAvatar.styling.js.map +1 -1
  25. package/lib-commonjs/JSAvatar.types.d.ts +50 -7
  26. package/lib-commonjs/JSAvatar.types.d.ts.map +1 -1
  27. package/lib-commonjs/JSAvatar.types.js +3 -2
  28. package/lib-commonjs/JSAvatar.types.js.map +1 -1
  29. package/lib-commonjs/JSAvatarTokens.d.ts.map +1 -1
  30. package/lib-commonjs/JSAvatarTokens.js +142 -56
  31. package/lib-commonjs/JSAvatarTokens.js.map +1 -1
  32. package/lib-commonjs/useAvatar.d.ts.map +1 -1
  33. package/lib-commonjs/useAvatar.js +3 -1
  34. package/lib-commonjs/useAvatar.js.map +1 -1
  35. package/package.json +1 -1
  36. package/src/JSAvatar.styling.ts +8 -9
  37. package/src/JSAvatar.tsx +9 -7
  38. package/src/JSAvatar.types.ts +57 -7
  39. package/src/JSAvatarTokens.ts +142 -56
  40. package/src/useAvatar.ts +3 -1
@@ -1,11 +1,11 @@
1
1
  import type { IViewProps } from '@fluentui-react-native/adapters';
2
2
  import { ImageProps, ViewProps, TextProps, ColorValue } from 'react-native';
3
- import { IBackgroundColorTokens, IForegroundColorTokens, IBorderTokens } from '@fluentui-react-native/tokens';
3
+ import { IBackgroundColorTokens, IForegroundColorTokens, IBorderTokens, FontTokens } from '@fluentui-react-native/tokens';
4
4
  import { BadgeProps, PresenceBadgeProps, BadgeSize } from '@fluentui-react-native/badge';
5
5
  import { IconProps, IconSourcesType } from '@fluentui-react-native/icon';
6
6
 
7
7
  export const JSAvatarName = 'Avatar';
8
- export const AvatarSizes = [
8
+ export const AvatarSizesForTokens = [
9
9
  'size20',
10
10
  'size24',
11
11
  'size28',
@@ -20,6 +20,8 @@ export const AvatarSizes = [
20
20
  'size120',
21
21
  ] as const;
22
22
 
23
+ export const AvatarSizes = [20, 24, 28, 32, 36, 40, 48, 56, 64, 72, 96, 120] as const;
24
+
23
25
  /**
24
26
  * Sets color of the avatar when there is no picture. Uses fluent color names
25
27
  */
@@ -67,7 +69,6 @@ export type IconAlignment = 'start' | 'center' | 'end';
67
69
  export interface RingConfig {
68
70
  accent?: boolean;
69
71
  transparent?: boolean;
70
- ringColor?: ColorValue; // glow
71
72
  ringBackgroundColor?: ColorValue; // inner/outer rings
72
73
  ringThickness?: number;
73
74
  innerGap?: number;
@@ -84,14 +85,33 @@ export interface AvatarConfigurableProps {
84
85
  * @defaultvalue neutral
85
86
  */
86
87
  avatarColor?: AvatarColor;
87
- size?: AvatarSize;
88
88
  ring?: RingConfig;
89
89
  }
90
90
 
91
91
  export interface JSAvatarProps extends IViewProps, AvatarConfigurableProps {
92
+ /**
93
+ * Optional activity indicator
94
+ * * active: the avatar will be decorated according to activeAppearance
95
+ * * inactive: the avatar will be reduced in size and partially transparent
96
+ * * unset: normal display
97
+ *
98
+ * @defaultvalue unset
99
+ */
92
100
  active?: AvatarActive;
101
+
102
+ /**
103
+ * The appearance when `active="active"`
104
+ *
105
+ * @defaultvalue ring
106
+ */
93
107
  activeAppearance?: AvatarActiveAppearance;
94
108
  badge?: PresenceBadgeProps;
109
+
110
+ /**
111
+ * Icon to be displayed when the avatar doesn't have an image or initials.
112
+ *
113
+ * @defaultvalue `PersonRegular` (the default icon's size depends on the Avatar's size)
114
+ */
95
115
  icon?: IconSourcesType;
96
116
 
97
117
  /**
@@ -101,15 +121,45 @@ export interface JSAvatarProps extends IViewProps, AvatarConfigurableProps {
101
121
  idForColor?: string | undefined;
102
122
 
103
123
  image?: ImageProps;
124
+
125
+ /**
126
+ * (optional) Custom initials.
127
+ *
128
+ * It is usually not necessary to specify custom initials; by default they will be derived from the `name` prop,
129
+ * using the `getInitials` function.
130
+ *
131
+ * The initials are displayed when there is no image (including while the image is loading).
132
+ */
104
133
  initials?: string;
134
+
135
+ /**
136
+ * The name of the person or entity represented by this Avatar. This should always be provided if it is available.
137
+ *
138
+ * The name will be used to determine the initials displayed when there is no icon, as well as provided to
139
+ * accessibility tools.
140
+ */
105
141
  name?: string;
142
+
143
+ /**
144
+ * Size of the avatar in pixels.
145
+ *
146
+ * Size is restricted to a limited set of supported values recommended for most uses (see `AvatarSizeValue`) and
147
+ * based on design guidelines for the Avatar control.
148
+ *
149
+ * @defaultvalue 24
150
+ */
151
+ size?: AvatarSize;
152
+
153
+ /**
154
+ * The avatar can have a circular or square shape.
155
+ * @defaultvalue circular
156
+ */
106
157
  shape?: AvatarShape;
107
158
  src?: string;
108
159
  }
109
160
 
110
- export interface JSAvatarTokens extends IBackgroundColorTokens, IForegroundColorTokens, AvatarConfigurableProps, IBorderTokens {
161
+ export interface JSAvatarTokens extends IBackgroundColorTokens, IForegroundColorTokens, AvatarConfigurableProps, IBorderTokens, FontTokens {
111
162
  iconSize?: number;
112
- initialsSize?: number;
113
163
  height?: number;
114
164
  horizontalIconAlignment?: IconAlignment;
115
165
  verticalIconAlignment?: IconAlignment;
@@ -117,7 +167,6 @@ export interface JSAvatarTokens extends IBackgroundColorTokens, IForegroundColor
117
167
  square?: JSAvatarTokens;
118
168
  inactive?: JSAvatarTokens;
119
169
  avatarOpacity?: number;
120
- ringColor?: ColorValue;
121
170
  size20?: JSAvatarTokens;
122
171
  size24?: JSAvatarTokens;
123
172
  size28?: JSAvatarTokens;
@@ -179,6 +228,7 @@ export interface AvatarSlotProps {
179
228
  export interface JSAvatarState {
180
229
  showRing: boolean;
181
230
  transparentRing: boolean;
231
+ showBadge: boolean;
182
232
  }
183
233
 
184
234
  export interface AvatarInfo {
@@ -10,6 +10,11 @@ export const defaultJSAvatarTokens: TokenSettings<JSAvatarTokens, Theme> = (t: T
10
10
  color: globalTokens.color.white,
11
11
  backgroundColor: globalTokens.color.cornflower.primary,
12
12
  avatarOpacity: 1,
13
+ fontFamily: t.typography.families.primary,
14
+ fontWeight: globalTokens.font.weight.semibold,
15
+ fontSize: globalTokens.font.size[200],
16
+ width: 24,
17
+ height: 24,
13
18
  circular: {
14
19
  borderRadius: globalTokens.corner.radius.circle,
15
20
  },
@@ -23,184 +28,265 @@ export const defaultJSAvatarTokens: TokenSettings<JSAvatarTokens, Theme> = (t: T
23
28
  width: 20,
24
29
  height: 20,
25
30
  badgeSize: 'smallest',
26
- iconSize: 10,
27
- initialsSize: 16,
31
+ iconSize: 16,
32
+ fontSize: globalTokens.font.size[100],
33
+ square: {
34
+ borderRadius: globalTokens.corner.radius.small,
35
+ },
28
36
  },
29
37
  size24: {
30
38
  width: 24,
31
39
  height: 24,
32
40
  badgeSize: 'smallest',
33
- iconSize: 10,
34
- initialsSize: 16,
41
+ iconSize: 16,
42
+ fontSize: globalTokens.font.size[100],
43
+ square: {
44
+ borderRadius: globalTokens.corner.radius.small,
45
+ },
35
46
  },
36
47
  size28: {
37
48
  width: 28,
38
49
  height: 28,
39
50
  badgeSize: 'smaller',
40
- iconSize: 16,
41
- initialsSize: 20,
51
+ iconSize: 20,
52
+ fontWeight: globalTokens.font.weight.semibold,
53
+ fontSize: globalTokens.font.size[100],
42
54
  },
43
55
  size32: {
44
56
  width: 32,
45
57
  height: 32,
46
58
  badgeSize: 'smaller',
47
- iconSize: 16,
48
- initialsSize: 20,
59
+ iconSize: 20,
60
+ fontSize: globalTokens.font.size[100],
49
61
  },
50
62
  size36: {
51
63
  width: 36,
52
64
  height: 36,
53
65
  badgeSize: 'smaller',
54
- iconSize: 16,
55
- initialsSize: 20,
66
+ iconSize: 20,
56
67
  },
57
68
  size40: {
58
69
  width: 40,
59
70
  height: 40,
60
71
  badgeSize: 'small',
61
- iconSize: 16,
62
- initialsSize: 20,
72
+ iconSize: 20,
63
73
  },
64
74
  size48: {
65
75
  width: 48,
66
76
  height: 48,
67
77
  badgeSize: 'small',
68
- iconSize: 20,
69
- initialsSize: 24,
78
+ iconSize: 24,
70
79
  },
71
80
  size56: {
72
81
  width: 56,
73
82
  height: 56,
74
83
  badgeSize: 'medium',
75
- iconSize: 24,
76
- initialsSize: 28,
84
+ iconSize: 28,
85
+ fontSize: globalTokens.font.size[400],
86
+ square: {
87
+ borderRadius: globalTokens.corner.radius.large,
88
+ },
77
89
  },
78
90
  size64: {
79
91
  width: 64,
80
92
  height: 64,
81
93
  badgeSize: 'large',
82
- iconSize: 28,
83
- initialsSize: 32,
94
+ iconSize: 32,
95
+ fontSize: globalTokens.font.size[500],
96
+ square: {
97
+ borderRadius: globalTokens.corner.radius.large,
98
+ },
84
99
  },
85
100
  size72: {
86
101
  width: 72,
87
102
  height: 72,
88
103
  badgeSize: 'large',
89
- iconSize: 28,
90
- initialsSize: 32,
104
+ iconSize: 32,
105
+ fontSize: globalTokens.font.size[500],
106
+ square: {
107
+ borderRadius: globalTokens.corner.radius.large,
108
+ },
91
109
  },
92
110
  size96: {
93
111
  width: 96,
94
112
  height: 96,
95
113
  badgeSize: 'largest',
96
- iconSize: 40,
97
- initialsSize: 48,
114
+ iconSize: 48,
115
+ fontWeight: globalTokens.font.weight.regular,
116
+ fontSize: globalTokens.font.size[700],
117
+ square: {
118
+ borderRadius: globalTokens.corner.radius.extraLarge,
119
+ },
98
120
  },
99
121
  size120: {
100
122
  width: 120,
101
123
  height: 120,
102
124
  badgeSize: 'largest',
103
- iconSize: 40,
104
- initialsSize: 48,
125
+ iconSize: 48,
126
+ fontWeight: globalTokens.font.weight.regular,
127
+ fontSize: globalTokens.font.size[900],
128
+ square: {
129
+ borderRadius: globalTokens.corner.radius.extraLarge,
130
+ },
105
131
  },
106
132
  neutral: {
107
133
  backgroundColor: t.colors.neutralBackground6,
108
134
  color: t.colors.neutralForeground3,
109
- ringColor: t.colors.defaultBorder,
135
+ borderColor: t.colors.defaultBorder,
110
136
  },
111
137
  brand: {
112
138
  backgroundColor: t.colors.brandBackgroundStatic,
113
139
  color: t.colors.neutralForegroundOnBrand,
114
- ringColor: t.colors.brandedBorder,
140
+ borderColor: t.colors.brandedBorder,
115
141
  },
116
142
  darkRed: {
117
- backgroundColor: globalTokens.color.darkRed.primary,
143
+ backgroundColor: globalTokens.color.darkRed.tint40,
144
+ color: globalTokens.color.darkRed.shade30,
145
+ borderColor: globalTokens.color.darkRed.primary,
118
146
  },
119
147
  cranberry: {
120
- backgroundColor: globalTokens.color.cranberry.primary,
148
+ backgroundColor: globalTokens.color.cranberry.tint40,
149
+ color: globalTokens.color.cranberry.shade30,
150
+ borderColor: globalTokens.color.cranberry.primary,
121
151
  },
122
152
  red: {
123
- backgroundColor: globalTokens.color.red.primary,
153
+ backgroundColor: globalTokens.color.red.tint40,
154
+ color: globalTokens.color.red.shade30,
155
+ borderColor: globalTokens.color.red.primary,
124
156
  },
125
157
  pumpkin: {
126
- backgroundColor: globalTokens.color.pumpkin.primary,
158
+ backgroundColor: globalTokens.color.pumpkin.tint40,
159
+ color: globalTokens.color.pumpkin.shade30,
160
+ borderColor: globalTokens.color.pumpkin.primary,
127
161
  },
128
162
  peach: {
129
- backgroundColor: globalTokens.color.peach.primary,
163
+ backgroundColor: globalTokens.color.peach.tint40,
164
+ color: globalTokens.color.peach.shade30,
165
+ borderColor: globalTokens.color.peach.primary,
130
166
  },
131
167
  marigold: {
132
- backgroundColor: globalTokens.color.marigold.primary,
168
+ backgroundColor: globalTokens.color.marigold.tint40,
169
+ color: globalTokens.color.marigold.shade30,
170
+ borderColor: globalTokens.color.marigold.primary,
133
171
  },
134
172
  gold: {
135
- backgroundColor: globalTokens.color.gold.primary,
173
+ backgroundColor: globalTokens.color.gold.tint40,
174
+ color: globalTokens.color.gold.shade30,
175
+ borderColor: globalTokens.color.gold.primary,
136
176
  },
137
177
  brass: {
138
- backgroundColor: globalTokens.color.brass.primary,
178
+ backgroundColor: globalTokens.color.brass.tint40,
179
+ color: globalTokens.color.brass.shade30,
180
+ borderColor: globalTokens.color.brass.primary,
139
181
  },
140
182
  brown: {
141
- backgroundColor: globalTokens.color.brown.primary,
183
+ backgroundColor: globalTokens.color.brown.tint40,
184
+ color: globalTokens.color.brown.shade30,
185
+ borderColor: globalTokens.color.brown.primary,
142
186
  },
143
187
  forest: {
144
- backgroundColor: globalTokens.color.forest.primary,
188
+ backgroundColor: globalTokens.color.forest.tint40,
189
+ color: globalTokens.color.forest.shade30,
190
+ borderColor: globalTokens.color.forest.primary,
145
191
  },
146
192
  seafoam: {
147
- backgroundColor: globalTokens.color.seafoam.primary,
193
+ backgroundColor: globalTokens.color.seafoam.tint40,
194
+ color: globalTokens.color.seafoam.shade30,
195
+ borderColor: globalTokens.color.seafoam.primary,
148
196
  },
149
197
  darkGreen: {
150
- backgroundColor: globalTokens.color.darkGreen.primary,
198
+ backgroundColor: globalTokens.color.darkGreen.tint40,
199
+ color: globalTokens.color.darkGreen.shade30,
200
+ borderColor: globalTokens.color.darkGreen.primary,
151
201
  },
152
202
  lightTeal: {
153
- backgroundColor: globalTokens.color.lightTeal.primary,
203
+ backgroundColor: globalTokens.color.lightTeal.tint40,
204
+ color: globalTokens.color.lightTeal.shade30,
205
+ borderColor: globalTokens.color.lightTeal.primary,
154
206
  },
155
207
  teal: {
156
- backgroundColor: globalTokens.color.teal.primary,
208
+ backgroundColor: globalTokens.color.teal.tint40,
209
+ color: globalTokens.color.teal.shade30,
210
+ borderColor: globalTokens.color.teal.primary,
157
211
  },
158
212
  steel: {
159
- backgroundColor: globalTokens.color.steel.primary,
213
+ backgroundColor: globalTokens.color.steel.tint40,
214
+ color: globalTokens.color.steel.shade30,
215
+ borderColor: globalTokens.color.steel.primary,
160
216
  },
161
217
  blue: {
162
- backgroundColor: globalTokens.color.blue.primary,
218
+ backgroundColor: globalTokens.color.blue.tint40,
219
+ color: globalTokens.color.blue.shade30,
220
+ borderColor: globalTokens.color.blue.primary,
163
221
  },
164
222
  royalBlue: {
165
- backgroundColor: globalTokens.color.royalBlue.primary,
223
+ backgroundColor: globalTokens.color.royalBlue.tint40,
224
+ color: globalTokens.color.royalBlue.shade30,
225
+ borderColor: globalTokens.color.royalBlue.primary,
166
226
  },
167
227
  cornflower: {
168
- backgroundColor: globalTokens.color.cornflower.primary,
228
+ backgroundColor: globalTokens.color.cornflower.tint40,
229
+ color: globalTokens.color.cornflower.shade30,
230
+ borderColor: globalTokens.color.cornflower.primary,
169
231
  },
170
232
  navy: {
171
- backgroundColor: globalTokens.color.navy.primary,
233
+ backgroundColor: globalTokens.color.navy.tint40,
234
+ color: globalTokens.color.navy.shade30,
235
+ borderColor: globalTokens.color.navy.primary,
172
236
  },
173
237
  lavender: {
174
- backgroundColor: globalTokens.color.lavender.primary,
238
+ backgroundColor: globalTokens.color.lavender.tint40,
239
+ color: globalTokens.color.lavender.shade30,
240
+ borderColor: globalTokens.color.lavender.primary,
175
241
  },
176
242
  purple: {
177
- backgroundColor: globalTokens.color.purple.primary,
243
+ backgroundColor: globalTokens.color.purple.tint40,
244
+ color: globalTokens.color.purple.shade30,
245
+ borderColor: globalTokens.color.purple.primary,
178
246
  },
179
247
  grape: {
180
- backgroundColor: globalTokens.color.grape.primary,
248
+ backgroundColor: globalTokens.color.grape.tint40,
249
+ color: globalTokens.color.grape.shade30,
250
+ borderColor: globalTokens.color.grape.primary,
181
251
  },
182
252
  lilac: {
183
- backgroundColor: globalTokens.color.lilac.primary,
253
+ backgroundColor: globalTokens.color.lilac.tint40,
254
+ color: globalTokens.color.lilac.shade30,
255
+ borderColor: globalTokens.color.lilac.primary,
184
256
  },
185
257
  pink: {
186
- backgroundColor: globalTokens.color.pink.primary,
258
+ backgroundColor: globalTokens.color.pink.tint40,
259
+ color: globalTokens.color.pink.shade30,
260
+ borderColor: globalTokens.color.pink.primary,
187
261
  },
188
262
  magenta: {
189
- backgroundColor: globalTokens.color.magenta.primary,
263
+ backgroundColor: globalTokens.color.magenta.tint40,
264
+ color: globalTokens.color.magenta.shade30,
265
+ borderColor: globalTokens.color.magenta.primary,
190
266
  },
191
267
  plum: {
192
- backgroundColor: globalTokens.color.plum.primary,
268
+ backgroundColor: globalTokens.color.plum.tint40,
269
+ color: globalTokens.color.plum.shade30,
270
+ borderColor: globalTokens.color.plum.primary,
193
271
  },
194
272
  beige: {
195
- backgroundColor: globalTokens.color.beige.primary,
273
+ backgroundColor: globalTokens.color.beige.tint40,
274
+ color: globalTokens.color.beige.shade30,
275
+ borderColor: globalTokens.color.beige.primary,
196
276
  },
197
277
  mink: {
198
- backgroundColor: globalTokens.color.mink.primary,
278
+ backgroundColor: globalTokens.color.mink.tint40,
279
+ color: globalTokens.color.mink.shade30,
280
+ borderColor: globalTokens.color.mink.primary,
199
281
  },
200
282
  platinum: {
201
- backgroundColor: globalTokens.color.platinum.primary,
283
+ backgroundColor: globalTokens.color.platinum.tint40,
284
+ color: globalTokens.color.platinum.shade30,
285
+ borderColor: globalTokens.color.platinum.primary,
202
286
  },
203
287
  anchor: {
204
- backgroundColor: globalTokens.color.anchor.primary,
288
+ backgroundColor: globalTokens.color.anchor.tint40,
289
+ color: globalTokens.color.anchor.shade30,
290
+ borderColor: globalTokens.color.anchor.primary,
205
291
  },
206
292
  } as JSAvatarTokens);
package/src/useAvatar.ts CHANGED
@@ -9,10 +9,11 @@ import { PresenceBadgeProps } from '@fluentui-react-native/badge';
9
9
  * @returns configured props and state for FURN Avatar
10
10
  */
11
11
  export const useAvatar = (props: JSAvatarProps): AvatarInfo => {
12
- const { active, accessibilityLabel, activeAppearance, badge, src, ring, shape, ...rest } = props;
12
+ const { active, accessibilityLabel, activeAppearance, badge, ring, src, shape, ...rest } = props;
13
13
 
14
14
  const showRing = active === 'active' && activeAppearance === 'ring';
15
15
  const transparentRing = !!ring?.transparent;
16
+ const showBadge = (!active || active === 'unset') && !!badge && !!badge.status;
16
17
 
17
18
  const imageProps: ImageProps = {
18
19
  accessibilityLabel,
@@ -27,6 +28,7 @@ export const useAvatar = (props: JSAvatarProps): AvatarInfo => {
27
28
  const state: JSAvatarState = {
28
29
  showRing,
29
30
  transparentRing,
31
+ showBadge,
30
32
  };
31
33
 
32
34
  return {