@fluentui/react-avatar 9.5.5 → 9.5.6

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.json CHANGED
@@ -2,7 +2,88 @@
2
2
  "name": "@fluentui/react-avatar",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 31 May 2023 06:42:52 GMT",
5
+ "date": "Tue, 20 Jun 2023 12:34:38 GMT",
6
+ "tag": "@fluentui/react-avatar_v9.5.6",
7
+ "version": "9.5.6",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "ololubek@microsoft.com",
12
+ "package": "@fluentui/react-avatar",
13
+ "commit": "8a5ae3aa00faa327c58887a99a5698b18f2930ee",
14
+ "comment": "chore: update @fluentui/react-icons to 2.0.203"
15
+ },
16
+ {
17
+ "author": "esteban.230@hotmail.com",
18
+ "package": "@fluentui/react-avatar",
19
+ "commit": "7eca299aed541ae297ab5bc7d511e64f56570932",
20
+ "comment": "fix: Do not render the image when src prop is undefined."
21
+ },
22
+ {
23
+ "author": "beachball",
24
+ "package": "@fluentui/react-avatar",
25
+ "comment": "Bump @fluentui/react-badge to v9.1.16",
26
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
27
+ },
28
+ {
29
+ "author": "beachball",
30
+ "package": "@fluentui/react-avatar",
31
+ "comment": "Bump @fluentui/react-context-selector to v9.1.23",
32
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
33
+ },
34
+ {
35
+ "author": "beachball",
36
+ "package": "@fluentui/react-avatar",
37
+ "comment": "Bump @fluentui/react-popover to v9.7.0",
38
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
39
+ },
40
+ {
41
+ "author": "beachball",
42
+ "package": "@fluentui/react-avatar",
43
+ "comment": "Bump @fluentui/react-shared-contexts to v9.5.1",
44
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
45
+ },
46
+ {
47
+ "author": "beachball",
48
+ "package": "@fluentui/react-avatar",
49
+ "comment": "Bump @fluentui/react-tabster to v9.8.0",
50
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
51
+ },
52
+ {
53
+ "author": "beachball",
54
+ "package": "@fluentui/react-avatar",
55
+ "comment": "Bump @fluentui/react-theme to v9.1.9",
56
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
57
+ },
58
+ {
59
+ "author": "beachball",
60
+ "package": "@fluentui/react-avatar",
61
+ "comment": "Bump @fluentui/react-tooltip to v9.2.17",
62
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
63
+ },
64
+ {
65
+ "author": "beachball",
66
+ "package": "@fluentui/react-avatar",
67
+ "comment": "Bump @fluentui/react-utilities to v9.9.3",
68
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
69
+ },
70
+ {
71
+ "author": "beachball",
72
+ "package": "@fluentui/react-avatar",
73
+ "comment": "Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.7",
74
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
75
+ },
76
+ {
77
+ "author": "beachball",
78
+ "package": "@fluentui/react-avatar",
79
+ "comment": "Bump @fluentui/react-conformance-griffel to v9.0.0-beta.23",
80
+ "commit": "81c9b35e0830297b2aca2cece2ae67b3899c4647"
81
+ }
82
+ ]
83
+ }
84
+ },
85
+ {
86
+ "date": "Wed, 31 May 2023 06:46:09 GMT",
6
87
  "tag": "@fluentui/react-avatar_v9.5.5",
7
88
  "version": "9.5.5",
8
89
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,32 @@
1
1
  # Change Log - @fluentui/react-avatar
2
2
 
3
- This log was last generated on Wed, 31 May 2023 06:42:52 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 20 Jun 2023 12:34:38 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.5.6](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.5.6)
8
+
9
+ Tue, 20 Jun 2023 12:34:38 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.5.5..@fluentui/react-avatar_v9.5.6)
11
+
12
+ ### Patches
13
+
14
+ - chore: update @fluentui/react-icons to 2.0.203 ([PR #28203](https://github.com/microsoft/fluentui/pull/28203) by ololubek@microsoft.com)
15
+ - fix: Do not render the image when src prop is undefined. ([PR #28146](https://github.com/microsoft/fluentui/pull/28146) by esteban.230@hotmail.com)
16
+ - Bump @fluentui/react-badge to v9.1.16 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
17
+ - Bump @fluentui/react-context-selector to v9.1.23 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
18
+ - Bump @fluentui/react-popover to v9.7.0 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
19
+ - Bump @fluentui/react-shared-contexts to v9.5.1 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
20
+ - Bump @fluentui/react-tabster to v9.8.0 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
21
+ - Bump @fluentui/react-theme to v9.1.9 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
22
+ - Bump @fluentui/react-tooltip to v9.2.17 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
23
+ - Bump @fluentui/react-utilities to v9.9.3 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
24
+ - Bump @fluentui/react-jsx-runtime to v9.0.0-alpha.7 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
25
+ - Bump @fluentui/react-conformance-griffel to v9.0.0-beta.23 ([PR #28229](https://github.com/microsoft/fluentui/pull/28229) by beachball)
26
+
7
27
  ## [9.5.5](https://github.com/microsoft/fluentui/tree/@fluentui/react-avatar_v9.5.5)
8
28
 
9
- Wed, 31 May 2023 06:42:52 GMT
29
+ Wed, 31 May 2023 06:46:09 GMT
10
30
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-avatar_v9.5.4..@fluentui/react-avatar_v9.5.5)
11
31
 
12
32
  ### Patches
@@ -30,7 +30,7 @@ export const useAvatar_unstable = (props, ref)=>{
30
30
  'name'
31
31
  ]);
32
32
  const [imageHidden, setImageHidden] = React.useState(undefined);
33
- const image = resolveShorthand(props.image, {
33
+ let image = resolveShorthand(props.image, {
34
34
  defaultProps: {
35
35
  alt: '',
36
36
  role: 'presentation',
@@ -38,6 +38,10 @@ export const useAvatar_unstable = (props, ref)=>{
38
38
  hidden: imageHidden
39
39
  }
40
40
  });
41
+ // Image shouldn't be rendered if its src is not set
42
+ if (!(image === null || image === void 0 ? void 0 : image.src)) {
43
+ image = undefined;
44
+ }
41
45
  // Hide the image if it fails to load and restore it on a successful load
42
46
  if (image) {
43
47
  image.onError = mergeCallbacks(image.onError, ()=>setImageHidden(true));
@@ -1 +1 @@
1
- {"version":3,"sources":["useAvatar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, mergeCallbacks, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { getInitials } from '../../utils/index';\nimport type { AvatarNamedColor, AvatarProps, AvatarState } from './Avatar.types';\nimport { PersonRegular } from '@fluentui/react-icons';\nimport { PresenceBadge } from '@fluentui/react-badge';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useAvatarContext } from '../../contexts/AvatarContext';\n\nexport const DEFAULT_STRINGS = {\n active: 'active',\n inactive: 'inactive',\n};\n\nexport const useAvatar_unstable = (props: AvatarProps, ref: React.Ref<HTMLElement>): AvatarState => {\n const { dir } = useFluent();\n const { shape: contextShape, size: contextSize } = useAvatarContext();\n const {\n name,\n size = contextSize ?? (32 as const),\n shape = contextShape ?? 'circular',\n active = 'unset',\n activeAppearance = 'ring',\n idForColor,\n } = props;\n let { color = 'neutral' } = props;\n\n // Resolve 'colorful' to a specific color name\n if (color === 'colorful') {\n color = avatarColors[getHashCode(idForColor ?? name ?? '') % avatarColors.length];\n }\n\n const baseId = useId('avatar-');\n\n const root: AvatarState['root'] = getNativeElementProps(\n 'span',\n {\n role: 'img',\n id: baseId,\n // aria-label and/or aria-labelledby are resolved below\n ...props,\n ref,\n },\n /* excludedPropNames: */ ['name'],\n );\n\n const [imageHidden, setImageHidden] = React.useState<true | undefined>(undefined);\n const image: AvatarState['image'] = resolveShorthand(props.image, {\n defaultProps: {\n alt: '',\n role: 'presentation',\n 'aria-hidden': true,\n hidden: imageHidden,\n },\n });\n\n // Hide the image if it fails to load and restore it on a successful load\n if (image) {\n image.onError = mergeCallbacks(image.onError, () => setImageHidden(true));\n image.onLoad = mergeCallbacks(image.onLoad, () => setImageHidden(undefined));\n }\n\n // Resolve the initials slot, defaulted to getInitials.\n let initials: AvatarState['initials'] = resolveShorthand(props.initials, {\n required: true,\n defaultProps: {\n children: getInitials(name, dir === 'rtl', { firstInitialOnly: size <= 16 }),\n id: baseId + '__initials',\n },\n });\n\n // Don't render the initials slot if it's empty\n if (!initials?.children) {\n initials = undefined;\n }\n\n // Render the icon slot *only if* there aren't any initials or image to display\n let icon: AvatarState['icon'] = undefined;\n if (!initials && (!image || imageHidden)) {\n icon = resolveShorthand(props.icon, {\n required: true,\n defaultProps: {\n children: <PersonRegular />,\n 'aria-hidden': true,\n },\n });\n }\n\n const badge: AvatarState['badge'] = resolveShorthand(props.badge, {\n defaultProps: {\n size: getBadgeSize(size),\n id: baseId + '__badge',\n },\n });\n\n let activeAriaLabelElement: AvatarState['activeAriaLabelElement'];\n\n // Resolve aria-label and/or aria-labelledby if not provided by the user\n if (!root['aria-label'] && !root['aria-labelledby']) {\n if (name) {\n root['aria-label'] = name;\n\n // Include the badge in labelledby if it exists\n if (badge) {\n root['aria-labelledby'] = root.id + ' ' + badge.id;\n }\n } else if (initials) {\n // root's aria-label should be the name, but fall back to being labelledby the initials if name is missing\n root['aria-labelledby'] = initials.id + (badge ? ' ' + badge.id : '');\n }\n\n // Add the active state to the aria label\n if (active === 'active' || active === 'inactive') {\n const activeText = DEFAULT_STRINGS[active];\n if (root['aria-labelledby']) {\n // If using aria-labelledby, render a hidden span and append it to the labelledby\n const activeId = baseId + '__active';\n root['aria-labelledby'] += ' ' + activeId;\n activeAriaLabelElement = (\n <span hidden id={activeId}>\n {activeText}\n </span>\n );\n } else if (root['aria-label']) {\n // Otherwise, just append it to the aria-label\n root['aria-label'] += ' ' + activeText;\n }\n }\n }\n\n return {\n size,\n shape,\n active,\n activeAppearance,\n activeAriaLabelElement,\n color,\n\n components: {\n root: 'span',\n initials: 'span',\n icon: 'span',\n image: 'img',\n badge: PresenceBadge,\n },\n\n root,\n initials,\n icon,\n image,\n badge,\n };\n};\n\nconst getBadgeSize = (size: AvatarState['size']) => {\n if (size >= 96) {\n return 'extra-large';\n } else if (size >= 64) {\n return 'large';\n } else if (size >= 56) {\n return 'medium';\n } else if (size >= 40) {\n return 'small';\n } else if (size >= 28) {\n return 'extra-small';\n } else {\n return 'tiny';\n }\n};\n\nconst avatarColors: AvatarNamedColor[] = [\n 'dark-red',\n 'cranberry',\n 'red',\n 'pumpkin',\n 'peach',\n 'marigold',\n 'gold',\n 'brass',\n 'brown',\n 'forest',\n 'seafoam',\n 'dark-green',\n 'light-teal',\n 'teal',\n 'steel',\n 'blue',\n 'royal-blue',\n 'cornflower',\n 'navy',\n 'lavender',\n 'purple',\n 'grape',\n 'lilac',\n 'pink',\n 'magenta',\n 'plum',\n 'beige',\n 'mink',\n 'platinum',\n 'anchor',\n];\n\nconst getHashCode = (str: string): number => {\n let hashCode = 0;\n for (let len: number = str.length - 1; len >= 0; len--) {\n const ch = str.charCodeAt(len);\n const shift = len % 8;\n hashCode ^= (ch << shift) + (ch >> (8 - shift)); // eslint-disable-line no-bitwise\n }\n\n return hashCode;\n};\n"],"names":["React","getNativeElementProps","mergeCallbacks","resolveShorthand","useId","getInitials","PersonRegular","PresenceBadge","useFluent_unstable","useFluent","useAvatarContext","DEFAULT_STRINGS","active","inactive","useAvatar_unstable","props","ref","dir","shape","contextShape","size","contextSize","name","activeAppearance","idForColor","color","avatarColors","getHashCode","length","baseId","root","role","id","imageHidden","setImageHidden","useState","undefined","image","defaultProps","alt","hidden","onError","onLoad","initials","required","children","firstInitialOnly","icon","badge","getBadgeSize","activeAriaLabelElement","activeText","activeId","span","components","str","hashCode","len","ch","charCodeAt","shift"],"mappings":"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"}
1
+ {"version":3,"sources":["useAvatar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, mergeCallbacks, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { getInitials } from '../../utils/index';\nimport type { AvatarNamedColor, AvatarProps, AvatarState } from './Avatar.types';\nimport { PersonRegular } from '@fluentui/react-icons';\nimport { PresenceBadge } from '@fluentui/react-badge';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useAvatarContext } from '../../contexts/AvatarContext';\n\nexport const DEFAULT_STRINGS = {\n active: 'active',\n inactive: 'inactive',\n};\n\nexport const useAvatar_unstable = (props: AvatarProps, ref: React.Ref<HTMLElement>): AvatarState => {\n const { dir } = useFluent();\n const { shape: contextShape, size: contextSize } = useAvatarContext();\n const {\n name,\n size = contextSize ?? (32 as const),\n shape = contextShape ?? 'circular',\n active = 'unset',\n activeAppearance = 'ring',\n idForColor,\n } = props;\n let { color = 'neutral' } = props;\n\n // Resolve 'colorful' to a specific color name\n if (color === 'colorful') {\n color = avatarColors[getHashCode(idForColor ?? name ?? '') % avatarColors.length];\n }\n\n const baseId = useId('avatar-');\n\n const root: AvatarState['root'] = getNativeElementProps(\n 'span',\n {\n role: 'img',\n id: baseId,\n // aria-label and/or aria-labelledby are resolved below\n ...props,\n ref,\n },\n /* excludedPropNames: */ ['name'],\n );\n\n const [imageHidden, setImageHidden] = React.useState<true | undefined>(undefined);\n let image: AvatarState['image'] = resolveShorthand(props.image, {\n defaultProps: {\n alt: '',\n role: 'presentation',\n 'aria-hidden': true,\n hidden: imageHidden,\n },\n });\n\n // Image shouldn't be rendered if its src is not set\n if (!image?.src) {\n image = undefined;\n }\n\n // Hide the image if it fails to load and restore it on a successful load\n if (image) {\n image.onError = mergeCallbacks(image.onError, () => setImageHidden(true));\n image.onLoad = mergeCallbacks(image.onLoad, () => setImageHidden(undefined));\n }\n\n // Resolve the initials slot, defaulted to getInitials.\n let initials: AvatarState['initials'] = resolveShorthand(props.initials, {\n required: true,\n defaultProps: {\n children: getInitials(name, dir === 'rtl', { firstInitialOnly: size <= 16 }),\n id: baseId + '__initials',\n },\n });\n\n // Don't render the initials slot if it's empty\n if (!initials?.children) {\n initials = undefined;\n }\n\n // Render the icon slot *only if* there aren't any initials or image to display\n let icon: AvatarState['icon'] = undefined;\n if (!initials && (!image || imageHidden)) {\n icon = resolveShorthand(props.icon, {\n required: true,\n defaultProps: {\n children: <PersonRegular />,\n 'aria-hidden': true,\n },\n });\n }\n\n const badge: AvatarState['badge'] = resolveShorthand(props.badge, {\n defaultProps: {\n size: getBadgeSize(size),\n id: baseId + '__badge',\n },\n });\n\n let activeAriaLabelElement: AvatarState['activeAriaLabelElement'];\n\n // Resolve aria-label and/or aria-labelledby if not provided by the user\n if (!root['aria-label'] && !root['aria-labelledby']) {\n if (name) {\n root['aria-label'] = name;\n\n // Include the badge in labelledby if it exists\n if (badge) {\n root['aria-labelledby'] = root.id + ' ' + badge.id;\n }\n } else if (initials) {\n // root's aria-label should be the name, but fall back to being labelledby the initials if name is missing\n root['aria-labelledby'] = initials.id + (badge ? ' ' + badge.id : '');\n }\n\n // Add the active state to the aria label\n if (active === 'active' || active === 'inactive') {\n const activeText = DEFAULT_STRINGS[active];\n if (root['aria-labelledby']) {\n // If using aria-labelledby, render a hidden span and append it to the labelledby\n const activeId = baseId + '__active';\n root['aria-labelledby'] += ' ' + activeId;\n activeAriaLabelElement = (\n <span hidden id={activeId}>\n {activeText}\n </span>\n );\n } else if (root['aria-label']) {\n // Otherwise, just append it to the aria-label\n root['aria-label'] += ' ' + activeText;\n }\n }\n }\n\n return {\n size,\n shape,\n active,\n activeAppearance,\n activeAriaLabelElement,\n color,\n\n components: {\n root: 'span',\n initials: 'span',\n icon: 'span',\n image: 'img',\n badge: PresenceBadge,\n },\n\n root,\n initials,\n icon,\n image,\n badge,\n };\n};\n\nconst getBadgeSize = (size: AvatarState['size']) => {\n if (size >= 96) {\n return 'extra-large';\n } else if (size >= 64) {\n return 'large';\n } else if (size >= 56) {\n return 'medium';\n } else if (size >= 40) {\n return 'small';\n } else if (size >= 28) {\n return 'extra-small';\n } else {\n return 'tiny';\n }\n};\n\nconst avatarColors: AvatarNamedColor[] = [\n 'dark-red',\n 'cranberry',\n 'red',\n 'pumpkin',\n 'peach',\n 'marigold',\n 'gold',\n 'brass',\n 'brown',\n 'forest',\n 'seafoam',\n 'dark-green',\n 'light-teal',\n 'teal',\n 'steel',\n 'blue',\n 'royal-blue',\n 'cornflower',\n 'navy',\n 'lavender',\n 'purple',\n 'grape',\n 'lilac',\n 'pink',\n 'magenta',\n 'plum',\n 'beige',\n 'mink',\n 'platinum',\n 'anchor',\n];\n\nconst getHashCode = (str: string): number => {\n let hashCode = 0;\n for (let len: number = str.length - 1; len >= 0; len--) {\n const ch = str.charCodeAt(len);\n const shift = len % 8;\n hashCode ^= (ch << shift) + (ch >> (8 - shift)); // eslint-disable-line no-bitwise\n }\n\n return hashCode;\n};\n"],"names":["React","getNativeElementProps","mergeCallbacks","resolveShorthand","useId","getInitials","PersonRegular","PresenceBadge","useFluent_unstable","useFluent","useAvatarContext","DEFAULT_STRINGS","active","inactive","useAvatar_unstable","props","ref","dir","shape","contextShape","size","contextSize","name","activeAppearance","idForColor","color","avatarColors","getHashCode","length","baseId","root","role","id","imageHidden","setImageHidden","useState","undefined","image","defaultProps","alt","hidden","src","onError","onLoad","initials","required","children","firstInitialOnly","icon","badge","getBadgeSize","activeAriaLabelElement","activeText","activeId","span","components","str","hashCode","len","ch","charCodeAt","shift"],"mappings":"AAAA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,qBAAqB,EAAEC,cAAc,EAAEC,gBAAgB,EAAEC,KAAK,QAAQ,4BAA4B;AAC3G,SAASC,WAAW,QAAQ,oBAAoB;AAEhD,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,aAAa,QAAQ,wBAAwB;AACtD,SAASC,sBAAsBC,SAAS,QAAQ,kCAAkC;AAClF,SAASC,gBAAgB,QAAQ,+BAA+B;AAEhE,OAAO,MAAMC,kBAAkB;IAC7BC,QAAQ;IACRC,UAAU;AACZ,EAAE;AAEF,OAAO,MAAMC,qBAAqB,CAACC,OAAoBC,MAA6C;IAClG,MAAM,EAAEC,IAAG,EAAE,GAAGR;IAChB,MAAM,EAAES,OAAOC,aAAY,EAAEC,MAAMC,YAAW,EAAE,GAAGX;IACnD,MAAM,EACJY,KAAI,EACJF,MAAOC,wBAAAA,yBAAAA,cAAgB,EAAY,CAAA,EACnCH,OAAQC,yBAAAA,0BAAAA,eAAgB,UAAU,CAAA,EAClCP,QAAS,QAAO,EAChBW,kBAAmB,OAAM,EACzBC,WAAU,EACX,GAAGT;IACJ,IAAI,EAAEU,OAAQ,UAAS,EAAE,GAAGV;IAE5B,8CAA8C;IAC9C,IAAIU,UAAU,YAAY;YACSD;QAAjCC,QAAQC,YAAY,CAACC,YAAYH,CAAAA,OAAAA,uBAAAA,wBAAAA,aAAcF,IAAI,cAAlBE,kBAAAA,OAAsB,EAAE,IAAIE,aAAaE,MAAM,CAAC;IACnF,CAAC;IAED,MAAMC,SAASzB,MAAM;IAErB,MAAM0B,OAA4B7B,sBAChC,QACA;QACE8B,MAAM;QACNC,IAAIH;QACJ,uDAAuD;QACvD,GAAGd,KAAK;QACRC;IACF,GACA,sBAAsB,GAAG;QAAC;KAAO;IAGnC,MAAM,CAACiB,aAAaC,eAAe,GAAGlC,MAAMmC,QAAQ,CAAmBC;IACvE,IAAIC,QAA8BlC,iBAAiBY,MAAMsB,KAAK,EAAE;QAC9DC,cAAc;YACZC,KAAK;YACLR,MAAM;YACN,eAAe,IAAI;YACnBS,QAAQP;QACV;IACF;IAEA,oDAAoD;IACpD,IAAI,CAACI,CAAAA,kBAAAA,mBAAAA,KAAAA,IAAAA,MAAOI,GAAG,AAAD,GAAG;QACfJ,QAAQD;IACV,CAAC;IAED,yEAAyE;IACzE,IAAIC,OAAO;QACTA,MAAMK,OAAO,GAAGxC,eAAemC,MAAMK,OAAO,EAAE,IAAMR,eAAe,IAAI;QACvEG,MAAMM,MAAM,GAAGzC,eAAemC,MAAMM,MAAM,EAAE,IAAMT,eAAeE;IACnE,CAAC;IAED,uDAAuD;IACvD,IAAIQ,WAAoCzC,iBAAiBY,MAAM6B,QAAQ,EAAE;QACvEC,UAAU,IAAI;QACdP,cAAc;YACZQ,UAAUzC,YAAYiB,MAAML,QAAQ,OAAO;gBAAE8B,kBAAkB3B,QAAQ;YAAG;YAC1EY,IAAIH,SAAS;QACf;IACF;IAEA,+CAA+C;IAC/C,IAAI,CAACe,CAAAA,qBAAAA,sBAAAA,KAAAA,IAAAA,SAAUE,QAAQ,AAAD,GAAG;QACvBF,WAAWR;IACb,CAAC;IAED,+EAA+E;IAC/E,IAAIY,OAA4BZ;IAChC,IAAI,CAACQ,YAAa,CAAA,CAACP,SAASJ,WAAU,GAAI;QACxCe,OAAO7C,iBAAiBY,MAAMiC,IAAI,EAAE;YAClCH,UAAU,IAAI;YACdP,cAAc;gBACZQ,wBAAU,oBAACxC;gBACX,eAAe,IAAI;YACrB;QACF;IACF,CAAC;IAED,MAAM2C,QAA8B9C,iBAAiBY,MAAMkC,KAAK,EAAE;QAChEX,cAAc;YACZlB,MAAM8B,aAAa9B;YACnBY,IAAIH,SAAS;QACf;IACF;IAEA,IAAIsB;IAEJ,wEAAwE;IACxE,IAAI,CAACrB,IAAI,CAAC,aAAa,IAAI,CAACA,IAAI,CAAC,kBAAkB,EAAE;QACnD,IAAIR,MAAM;YACRQ,IAAI,CAAC,aAAa,GAAGR;YAErB,+CAA+C;YAC/C,IAAI2B,OAAO;gBACTnB,IAAI,CAAC,kBAAkB,GAAGA,KAAKE,EAAE,GAAG,MAAMiB,MAAMjB,EAAE;YACpD,CAAC;QACH,OAAO,IAAIY,UAAU;YACnB,0GAA0G;YAC1Gd,IAAI,CAAC,kBAAkB,GAAGc,SAASZ,EAAE,GAAIiB,CAAAA,QAAQ,MAAMA,MAAMjB,EAAE,GAAG,EAAE,AAAD;QACrE,CAAC;QAED,yCAAyC;QACzC,IAAIpB,WAAW,YAAYA,WAAW,YAAY;YAChD,MAAMwC,aAAazC,eAAe,CAACC,OAAO;YAC1C,IAAIkB,IAAI,CAAC,kBAAkB,EAAE;gBAC3B,iFAAiF;gBACjF,MAAMuB,WAAWxB,SAAS;gBAC1BC,IAAI,CAAC,kBAAkB,IAAI,MAAMuB;gBACjCF,uCACE,oBAACG;oBAAKd,QAAAA,IAAM;oBAACR,IAAIqB;mBACdD;YAGP,OAAO,IAAItB,IAAI,CAAC,aAAa,EAAE;gBAC7B,8CAA8C;gBAC9CA,IAAI,CAAC,aAAa,IAAI,MAAMsB;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACLhC;QACAF;QACAN;QACAW;QACA4B;QACA1B;QAEA8B,YAAY;YACVzB,MAAM;YACNc,UAAU;YACVI,MAAM;YACNX,OAAO;YACPY,OAAO1C;QACT;QAEAuB;QACAc;QACAI;QACAX;QACAY;IACF;AACF,EAAE;AAEF,MAAMC,eAAe,CAAC9B,OAA8B;IAClD,IAAIA,QAAQ,IAAI;QACd,OAAO;IACT,OAAO,IAAIA,QAAQ,IAAI;QACrB,OAAO;IACT,OAAO,IAAIA,QAAQ,IAAI;QACrB,OAAO;IACT,OAAO,IAAIA,QAAQ,IAAI;QACrB,OAAO;IACT,OAAO,IAAIA,QAAQ,IAAI;QACrB,OAAO;IACT,OAAO;QACL,OAAO;IACT,CAAC;AACH;AAEA,MAAMM,eAAmC;IACvC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAED,MAAMC,cAAc,CAAC6B,MAAwB;IAC3C,IAAIC,WAAW;IACf,IAAK,IAAIC,MAAcF,IAAI5B,MAAM,GAAG,GAAG8B,OAAO,GAAGA,MAAO;QACtD,MAAMC,KAAKH,IAAII,UAAU,CAACF;QAC1B,MAAMG,QAAQH,MAAM;QACpBD,YAAY,AAACE,CAAAA,MAAME,KAAI,IAAMF,CAAAA,MAAO,IAAIE,KAAK,GAAI,iCAAiC;IACpF;IAEA,OAAOJ;AACT"}
@@ -45,7 +45,7 @@ const useAvatar_unstable = (props, ref)=>{
45
45
  'name'
46
46
  ]);
47
47
  const [imageHidden, setImageHidden] = _react.useState(undefined);
48
- const image = (0, _reactUtilities.resolveShorthand)(props.image, {
48
+ let image = (0, _reactUtilities.resolveShorthand)(props.image, {
49
49
  defaultProps: {
50
50
  alt: '',
51
51
  role: 'presentation',
@@ -53,6 +53,10 @@ const useAvatar_unstable = (props, ref)=>{
53
53
  hidden: imageHidden
54
54
  }
55
55
  });
56
+ // Image shouldn't be rendered if its src is not set
57
+ if (!(image === null || image === void 0 ? void 0 : image.src)) {
58
+ image = undefined;
59
+ }
56
60
  // Hide the image if it fails to load and restore it on a successful load
57
61
  if (image) {
58
62
  image.onError = (0, _reactUtilities.mergeCallbacks)(image.onError, ()=>setImageHidden(true));
@@ -1 +1 @@
1
- {"version":3,"sources":["useAvatar.js"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, mergeCallbacks, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { getInitials } from '../../utils/index';\nimport { PersonRegular } from '@fluentui/react-icons';\nimport { PresenceBadge } from '@fluentui/react-badge';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useAvatarContext } from '../../contexts/AvatarContext';\nexport const DEFAULT_STRINGS = {\n active: 'active',\n inactive: 'inactive'\n};\nexport const useAvatar_unstable = (props, ref)=>{\n const { dir } = useFluent();\n const { shape: contextShape , size: contextSize } = useAvatarContext();\n const { name , size =contextSize !== null && contextSize !== void 0 ? contextSize : 32 , shape =contextShape !== null && contextShape !== void 0 ? contextShape : 'circular' , active ='unset' , activeAppearance ='ring' , idForColor } = props;\n let { color ='neutral' } = props;\n // Resolve 'colorful' to a specific color name\n if (color === 'colorful') {\n var _ref;\n color = avatarColors[getHashCode((_ref = idForColor !== null && idForColor !== void 0 ? idForColor : name) !== null && _ref !== void 0 ? _ref : '') % avatarColors.length];\n }\n const baseId = useId('avatar-');\n const root = getNativeElementProps('span', {\n role: 'img',\n id: baseId,\n // aria-label and/or aria-labelledby are resolved below\n ...props,\n ref\n }, /* excludedPropNames: */ [\n 'name'\n ]);\n const [imageHidden, setImageHidden] = React.useState(undefined);\n const image = resolveShorthand(props.image, {\n defaultProps: {\n alt: '',\n role: 'presentation',\n 'aria-hidden': true,\n hidden: imageHidden\n }\n });\n // Hide the image if it fails to load and restore it on a successful load\n if (image) {\n image.onError = mergeCallbacks(image.onError, ()=>setImageHidden(true));\n image.onLoad = mergeCallbacks(image.onLoad, ()=>setImageHidden(undefined));\n }\n // Resolve the initials slot, defaulted to getInitials.\n let initials = resolveShorthand(props.initials, {\n required: true,\n defaultProps: {\n children: getInitials(name, dir === 'rtl', {\n firstInitialOnly: size <= 16\n }),\n id: baseId + '__initials'\n }\n });\n // Don't render the initials slot if it's empty\n if (!(initials === null || initials === void 0 ? void 0 : initials.children)) {\n initials = undefined;\n }\n // Render the icon slot *only if* there aren't any initials or image to display\n let icon = undefined;\n if (!initials && (!image || imageHidden)) {\n icon = resolveShorthand(props.icon, {\n required: true,\n defaultProps: {\n children: /*#__PURE__*/ React.createElement(PersonRegular, null),\n 'aria-hidden': true\n }\n });\n }\n const badge = resolveShorthand(props.badge, {\n defaultProps: {\n size: getBadgeSize(size),\n id: baseId + '__badge'\n }\n });\n let activeAriaLabelElement;\n // Resolve aria-label and/or aria-labelledby if not provided by the user\n if (!root['aria-label'] && !root['aria-labelledby']) {\n if (name) {\n root['aria-label'] = name;\n // Include the badge in labelledby if it exists\n if (badge) {\n root['aria-labelledby'] = root.id + ' ' + badge.id;\n }\n } else if (initials) {\n // root's aria-label should be the name, but fall back to being labelledby the initials if name is missing\n root['aria-labelledby'] = initials.id + (badge ? ' ' + badge.id : '');\n }\n // Add the active state to the aria label\n if (active === 'active' || active === 'inactive') {\n const activeText = DEFAULT_STRINGS[active];\n if (root['aria-labelledby']) {\n // If using aria-labelledby, render a hidden span and append it to the labelledby\n const activeId = baseId + '__active';\n root['aria-labelledby'] += ' ' + activeId;\n activeAriaLabelElement = /*#__PURE__*/ React.createElement(\"span\", {\n hidden: true,\n id: activeId\n }, activeText);\n } else if (root['aria-label']) {\n // Otherwise, just append it to the aria-label\n root['aria-label'] += ' ' + activeText;\n }\n }\n }\n return {\n size,\n shape,\n active,\n activeAppearance,\n activeAriaLabelElement,\n color,\n components: {\n root: 'span',\n initials: 'span',\n icon: 'span',\n image: 'img',\n badge: PresenceBadge\n },\n root,\n initials,\n icon,\n image,\n badge\n };\n};\nconst getBadgeSize = (size)=>{\n if (size >= 96) {\n return 'extra-large';\n } else if (size >= 64) {\n return 'large';\n } else if (size >= 56) {\n return 'medium';\n } else if (size >= 40) {\n return 'small';\n } else if (size >= 28) {\n return 'extra-small';\n } else {\n return 'tiny';\n }\n};\nconst avatarColors = [\n 'dark-red',\n 'cranberry',\n 'red',\n 'pumpkin',\n 'peach',\n 'marigold',\n 'gold',\n 'brass',\n 'brown',\n 'forest',\n 'seafoam',\n 'dark-green',\n 'light-teal',\n 'teal',\n 'steel',\n 'blue',\n 'royal-blue',\n 'cornflower',\n 'navy',\n 'lavender',\n 'purple',\n 'grape',\n 'lilac',\n 'pink',\n 'magenta',\n 'plum',\n 'beige',\n 'mink',\n 'platinum',\n 'anchor'\n];\nconst getHashCode = (str)=>{\n let hashCode = 0;\n for(let len = str.length - 1; len >= 0; len--){\n const ch = str.charCodeAt(len);\n const shift = len % 8;\n hashCode ^= (ch << shift) + (ch >> 8 - shift); // eslint-disable-line no-bitwise\n }\n return hashCode;\n};\n"],"names":["DEFAULT_STRINGS","useAvatar_unstable","active","inactive","props","ref","dir","useFluent","shape","contextShape","size","contextSize","useAvatarContext","name","activeAppearance","idForColor","color","_ref","avatarColors","getHashCode","length","baseId","useId","root","getNativeElementProps","role","id","imageHidden","setImageHidden","React","useState","undefined","image","resolveShorthand","defaultProps","alt","hidden","onError","mergeCallbacks","onLoad","initials","required","children","getInitials","firstInitialOnly","icon","createElement","PersonRegular","badge","getBadgeSize","activeAriaLabelElement","activeText","activeId","components","PresenceBadge","str","hashCode","len","ch","charCodeAt","shift"],"mappings":"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"}
1
+ {"version":3,"sources":["useAvatar.js"],"sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, mergeCallbacks, resolveShorthand, useId } from '@fluentui/react-utilities';\nimport { getInitials } from '../../utils/index';\nimport { PersonRegular } from '@fluentui/react-icons';\nimport { PresenceBadge } from '@fluentui/react-badge';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { useAvatarContext } from '../../contexts/AvatarContext';\nexport const DEFAULT_STRINGS = {\n active: 'active',\n inactive: 'inactive'\n};\nexport const useAvatar_unstable = (props, ref)=>{\n const { dir } = useFluent();\n const { shape: contextShape , size: contextSize } = useAvatarContext();\n const { name , size =contextSize !== null && contextSize !== void 0 ? contextSize : 32 , shape =contextShape !== null && contextShape !== void 0 ? contextShape : 'circular' , active ='unset' , activeAppearance ='ring' , idForColor } = props;\n let { color ='neutral' } = props;\n // Resolve 'colorful' to a specific color name\n if (color === 'colorful') {\n var _ref;\n color = avatarColors[getHashCode((_ref = idForColor !== null && idForColor !== void 0 ? idForColor : name) !== null && _ref !== void 0 ? _ref : '') % avatarColors.length];\n }\n const baseId = useId('avatar-');\n const root = getNativeElementProps('span', {\n role: 'img',\n id: baseId,\n // aria-label and/or aria-labelledby are resolved below\n ...props,\n ref\n }, /* excludedPropNames: */ [\n 'name'\n ]);\n const [imageHidden, setImageHidden] = React.useState(undefined);\n let image = resolveShorthand(props.image, {\n defaultProps: {\n alt: '',\n role: 'presentation',\n 'aria-hidden': true,\n hidden: imageHidden\n }\n });\n // Image shouldn't be rendered if its src is not set\n if (!(image === null || image === void 0 ? void 0 : image.src)) {\n image = undefined;\n }\n // Hide the image if it fails to load and restore it on a successful load\n if (image) {\n image.onError = mergeCallbacks(image.onError, ()=>setImageHidden(true));\n image.onLoad = mergeCallbacks(image.onLoad, ()=>setImageHidden(undefined));\n }\n // Resolve the initials slot, defaulted to getInitials.\n let initials = resolveShorthand(props.initials, {\n required: true,\n defaultProps: {\n children: getInitials(name, dir === 'rtl', {\n firstInitialOnly: size <= 16\n }),\n id: baseId + '__initials'\n }\n });\n // Don't render the initials slot if it's empty\n if (!(initials === null || initials === void 0 ? void 0 : initials.children)) {\n initials = undefined;\n }\n // Render the icon slot *only if* there aren't any initials or image to display\n let icon = undefined;\n if (!initials && (!image || imageHidden)) {\n icon = resolveShorthand(props.icon, {\n required: true,\n defaultProps: {\n children: /*#__PURE__*/ React.createElement(PersonRegular, null),\n 'aria-hidden': true\n }\n });\n }\n const badge = resolveShorthand(props.badge, {\n defaultProps: {\n size: getBadgeSize(size),\n id: baseId + '__badge'\n }\n });\n let activeAriaLabelElement;\n // Resolve aria-label and/or aria-labelledby if not provided by the user\n if (!root['aria-label'] && !root['aria-labelledby']) {\n if (name) {\n root['aria-label'] = name;\n // Include the badge in labelledby if it exists\n if (badge) {\n root['aria-labelledby'] = root.id + ' ' + badge.id;\n }\n } else if (initials) {\n // root's aria-label should be the name, but fall back to being labelledby the initials if name is missing\n root['aria-labelledby'] = initials.id + (badge ? ' ' + badge.id : '');\n }\n // Add the active state to the aria label\n if (active === 'active' || active === 'inactive') {\n const activeText = DEFAULT_STRINGS[active];\n if (root['aria-labelledby']) {\n // If using aria-labelledby, render a hidden span and append it to the labelledby\n const activeId = baseId + '__active';\n root['aria-labelledby'] += ' ' + activeId;\n activeAriaLabelElement = /*#__PURE__*/ React.createElement(\"span\", {\n hidden: true,\n id: activeId\n }, activeText);\n } else if (root['aria-label']) {\n // Otherwise, just append it to the aria-label\n root['aria-label'] += ' ' + activeText;\n }\n }\n }\n return {\n size,\n shape,\n active,\n activeAppearance,\n activeAriaLabelElement,\n color,\n components: {\n root: 'span',\n initials: 'span',\n icon: 'span',\n image: 'img',\n badge: PresenceBadge\n },\n root,\n initials,\n icon,\n image,\n badge\n };\n};\nconst getBadgeSize = (size)=>{\n if (size >= 96) {\n return 'extra-large';\n } else if (size >= 64) {\n return 'large';\n } else if (size >= 56) {\n return 'medium';\n } else if (size >= 40) {\n return 'small';\n } else if (size >= 28) {\n return 'extra-small';\n } else {\n return 'tiny';\n }\n};\nconst avatarColors = [\n 'dark-red',\n 'cranberry',\n 'red',\n 'pumpkin',\n 'peach',\n 'marigold',\n 'gold',\n 'brass',\n 'brown',\n 'forest',\n 'seafoam',\n 'dark-green',\n 'light-teal',\n 'teal',\n 'steel',\n 'blue',\n 'royal-blue',\n 'cornflower',\n 'navy',\n 'lavender',\n 'purple',\n 'grape',\n 'lilac',\n 'pink',\n 'magenta',\n 'plum',\n 'beige',\n 'mink',\n 'platinum',\n 'anchor'\n];\nconst getHashCode = (str)=>{\n let hashCode = 0;\n for(let len = str.length - 1; len >= 0; len--){\n const ch = str.charCodeAt(len);\n const shift = len % 8;\n hashCode ^= (ch << shift) + (ch >> 8 - shift); // eslint-disable-line no-bitwise\n }\n return hashCode;\n};\n"],"names":["DEFAULT_STRINGS","useAvatar_unstable","active","inactive","props","ref","dir","useFluent","shape","contextShape","size","contextSize","useAvatarContext","name","activeAppearance","idForColor","color","_ref","avatarColors","getHashCode","length","baseId","useId","root","getNativeElementProps","role","id","imageHidden","setImageHidden","React","useState","undefined","image","resolveShorthand","defaultProps","alt","hidden","src","onError","mergeCallbacks","onLoad","initials","required","children","getInitials","firstInitialOnly","icon","createElement","PersonRegular","badge","getBadgeSize","activeAriaLabelElement","activeText","activeId","components","PresenceBadge","str","hashCode","len","ch","charCodeAt","shift"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-avatar",
3
- "version": "9.5.5",
3
+ "version": "9.5.6",
4
4
  "description": "React components for building Microsoft web experiences.",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -30,23 +30,23 @@
30
30
  "devDependencies": {
31
31
  "@fluentui/eslint-plugin": "*",
32
32
  "@fluentui/react-conformance": "*",
33
- "@fluentui/react-conformance-griffel": "9.0.0-beta.22",
33
+ "@fluentui/react-conformance-griffel": "9.0.0-beta.23",
34
34
  "es6-weak-map": "^2.0.2",
35
35
  "@fluentui/scripts-api-extractor": "*",
36
36
  "@fluentui/scripts-cypress": "*",
37
37
  "@fluentui/scripts-tasks": "*"
38
38
  },
39
39
  "dependencies": {
40
- "@fluentui/react-badge": "^9.1.15",
41
- "@fluentui/react-context-selector": "^9.1.22",
42
- "@fluentui/react-icons": "^2.0.196",
43
- "@fluentui/react-popover": "^9.6.0",
44
- "@fluentui/react-shared-contexts": "^9.5.0",
45
- "@fluentui/react-tabster": "^9.7.5",
46
- "@fluentui/react-theme": "^9.1.8",
47
- "@fluentui/react-tooltip": "^9.2.16",
48
- "@fluentui/react-utilities": "^9.9.2",
49
- "@fluentui/react-jsx-runtime": "9.0.0-alpha.6",
40
+ "@fluentui/react-badge": "^9.1.16",
41
+ "@fluentui/react-context-selector": "^9.1.23",
42
+ "@fluentui/react-icons": "^2.0.203",
43
+ "@fluentui/react-popover": "^9.7.0",
44
+ "@fluentui/react-shared-contexts": "^9.5.1",
45
+ "@fluentui/react-tabster": "^9.8.0",
46
+ "@fluentui/react-theme": "^9.1.9",
47
+ "@fluentui/react-tooltip": "^9.2.17",
48
+ "@fluentui/react-utilities": "^9.9.3",
49
+ "@fluentui/react-jsx-runtime": "9.0.0-alpha.7",
50
50
  "@griffel/react": "^1.5.7",
51
51
  "@swc/helpers": "^0.4.14"
52
52
  },