@fluentui/react-avatar 9.0.0-nightly.f81b28ceb3.1 → 9.0.0-rc.11

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 (101) hide show
  1. package/CHANGELOG.json +891 -19
  2. package/CHANGELOG.md +336 -131
  3. package/MIGRATION.md +71 -66
  4. package/SPEC-AvatarGroup.md +185 -0
  5. package/SPEC.md +160 -135
  6. package/dist/index.d.ts +242 -0
  7. package/{lib → dist}/tsdoc-metadata.json +0 -0
  8. package/lib/Avatar.js.map +1 -1
  9. package/lib/AvatarGroup.js +2 -0
  10. package/lib/AvatarGroup.js.map +1 -0
  11. package/lib/components/Avatar/Avatar.js +7 -7
  12. package/lib/components/Avatar/Avatar.js.map +1 -1
  13. package/lib/components/Avatar/Avatar.types.js.map +1 -1
  14. package/lib/components/Avatar/index.js.map +1 -1
  15. package/lib/components/Avatar/renderAvatar.js +11 -7
  16. package/lib/components/Avatar/renderAvatar.js.map +1 -1
  17. package/lib/components/Avatar/useAvatar.js +115 -87
  18. package/lib/components/Avatar/useAvatar.js.map +1 -1
  19. package/lib/components/Avatar/useAvatarStyles.js +185 -112
  20. package/lib/components/Avatar/useAvatarStyles.js.map +1 -1
  21. package/lib/components/AvatarGroup/AvatarGroup.js +15 -0
  22. package/lib/components/AvatarGroup/AvatarGroup.js.map +1 -0
  23. package/lib/components/AvatarGroup/AvatarGroup.strings.js +4 -0
  24. package/lib/components/AvatarGroup/AvatarGroup.strings.js.map +1 -0
  25. package/lib/components/AvatarGroup/AvatarGroup.types.js +2 -0
  26. package/lib/components/AvatarGroup/AvatarGroup.types.js.map +1 -0
  27. package/lib/components/AvatarGroup/index.js +6 -0
  28. package/lib/components/AvatarGroup/index.js.map +1 -0
  29. package/lib/components/AvatarGroup/renderAvatarGroup.js +16 -0
  30. package/lib/components/AvatarGroup/renderAvatarGroup.js.map +1 -0
  31. package/lib/components/AvatarGroup/useAvatarGroup.js +51 -0
  32. package/lib/components/AvatarGroup/useAvatarGroup.js.map +1 -0
  33. package/lib/components/AvatarGroup/useAvatarGroupStyles.js +37 -0
  34. package/lib/components/AvatarGroup/useAvatarGroupStyles.js.map +1 -0
  35. package/lib/index.js +3 -1
  36. package/lib/index.js.map +1 -1
  37. package/lib/utils/getInitials.js +26 -19
  38. package/lib/utils/getInitials.js.map +1 -1
  39. package/lib/utils/index.js.map +1 -1
  40. package/lib-commonjs/Avatar.js +1 -1
  41. package/lib-commonjs/Avatar.js.map +1 -1
  42. package/lib-commonjs/AvatarGroup.js +10 -0
  43. package/lib-commonjs/AvatarGroup.js.map +1 -0
  44. package/lib-commonjs/components/Avatar/Avatar.js +8 -8
  45. package/lib-commonjs/components/Avatar/Avatar.js.map +1 -1
  46. package/lib-commonjs/components/Avatar/Avatar.types.js.map +1 -1
  47. package/lib-commonjs/components/Avatar/index.js +1 -1
  48. package/lib-commonjs/components/Avatar/index.js.map +1 -1
  49. package/lib-commonjs/components/Avatar/renderAvatar.js +15 -12
  50. package/lib-commonjs/components/Avatar/renderAvatar.js.map +1 -1
  51. package/lib-commonjs/components/Avatar/useAvatar.js +120 -92
  52. package/lib-commonjs/components/Avatar/useAvatar.js.map +1 -1
  53. package/lib-commonjs/components/Avatar/useAvatarStyles.js +188 -115
  54. package/lib-commonjs/components/Avatar/useAvatarStyles.js.map +1 -1
  55. package/lib-commonjs/components/AvatarGroup/AvatarGroup.js +26 -0
  56. package/lib-commonjs/components/AvatarGroup/AvatarGroup.js.map +1 -0
  57. package/lib-commonjs/components/AvatarGroup/AvatarGroup.strings.js +10 -0
  58. package/lib-commonjs/components/AvatarGroup/AvatarGroup.strings.js.map +1 -0
  59. package/lib-commonjs/components/AvatarGroup/AvatarGroup.types.js +6 -0
  60. package/lib-commonjs/components/AvatarGroup/AvatarGroup.types.js.map +1 -0
  61. package/lib-commonjs/components/AvatarGroup/index.js +18 -0
  62. package/lib-commonjs/components/AvatarGroup/index.js.map +1 -0
  63. package/lib-commonjs/components/AvatarGroup/renderAvatarGroup.js +27 -0
  64. package/lib-commonjs/components/AvatarGroup/renderAvatarGroup.js.map +1 -0
  65. package/lib-commonjs/components/AvatarGroup/useAvatarGroup.js +64 -0
  66. package/lib-commonjs/components/AvatarGroup/useAvatarGroup.js.map +1 -0
  67. package/lib-commonjs/components/AvatarGroup/useAvatarGroupStyles.js +47 -0
  68. package/lib-commonjs/components/AvatarGroup/useAvatarGroupStyles.js.map +1 -0
  69. package/lib-commonjs/index.js +74 -2
  70. package/lib-commonjs/index.js.map +1 -1
  71. package/lib-commonjs/utils/getInitials.js +26 -19
  72. package/lib-commonjs/utils/getInitials.js.map +1 -1
  73. package/lib-commonjs/utils/index.js.map +1 -1
  74. package/package.json +24 -25
  75. package/dist/react-avatar.d.ts +0 -132
  76. package/lib/Avatar.d.ts +0 -1
  77. package/lib/common/isConformant.d.ts +0 -4
  78. package/lib/common/isConformant.js +0 -12
  79. package/lib/common/isConformant.js.map +0 -1
  80. package/lib/components/Avatar/Avatar.d.ts +0 -3
  81. package/lib/components/Avatar/Avatar.types.d.ts +0 -112
  82. package/lib/components/Avatar/index.d.ts +0 -5
  83. package/lib/components/Avatar/renderAvatar.d.ts +0 -2
  84. package/lib/components/Avatar/useAvatar.d.ts +0 -3
  85. package/lib/components/Avatar/useAvatarStyles.d.ts +0 -2
  86. package/lib/index.d.ts +0 -1
  87. package/lib/utils/getInitials.d.ts +0 -9
  88. package/lib/utils/index.d.ts +0 -1
  89. package/lib-commonjs/Avatar.d.ts +0 -1
  90. package/lib-commonjs/common/isConformant.d.ts +0 -4
  91. package/lib-commonjs/common/isConformant.js +0 -23
  92. package/lib-commonjs/common/isConformant.js.map +0 -1
  93. package/lib-commonjs/components/Avatar/Avatar.d.ts +0 -3
  94. package/lib-commonjs/components/Avatar/Avatar.types.d.ts +0 -112
  95. package/lib-commonjs/components/Avatar/index.d.ts +0 -5
  96. package/lib-commonjs/components/Avatar/renderAvatar.d.ts +0 -2
  97. package/lib-commonjs/components/Avatar/useAvatar.d.ts +0 -3
  98. package/lib-commonjs/components/Avatar/useAvatarStyles.d.ts +0 -2
  99. package/lib-commonjs/index.d.ts +0 -1
  100. package/lib-commonjs/utils/getInitials.d.ts +0 -9
  101. package/lib-commonjs/utils/index.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.types.js","sourceRoot":"","sources":["../../../src/components/Avatar/Avatar.types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"Avatar.types.js","sourceRoot":"../src/","sources":["components/Avatar/Avatar.types.ts"],"names":[],"mappings":"","sourcesContent":["import { PresenceBadge } from '@fluentui/react-badge';\nimport type { ComponentProps, ComponentState, Slot } from '@fluentui/react-utilities';\n\nexport type AvatarSlots = {\n root: Slot<'span'>;\n\n /**\n * The Avatar's image.\n *\n * Usage e.g.: `image={{ src: '...' }}`\n */\n image?: Slot<'img'>;\n\n /**\n * (optional) Custom initials.\n *\n * It is usually not necessary to specify custom initials; by default they will be derived from the `name` prop,\n * using the `getInitials` function.\n *\n * The initials are displayed when there is no image (including while the image is loading).\n */\n initials?: Slot<'span'>;\n\n /**\n * Icon to be displayed when the avatar doesn't have an image or initials.\n *\n * @default `PersonRegular` (the default icon's size depends on the Avatar's size)\n */\n icon?: Slot<'span'>;\n\n /**\n * Badge to show the avatar's presence status.\n */\n badge?: Slot<typeof PresenceBadge>;\n};\n\n/**\n * A specific named color for the Avatar\n */\nexport type 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/**\n * Sizes that can be used for the Avatar\n */\nexport type AvatarSizes = 16 | 20 | 24 | 28 | 32 | 36 | 40 | 48 | 56 | 64 | 72 | 96 | 120 | 128;\n\n/**\n * Properties for Avatar\n */\nexport type AvatarProps = Omit<ComponentProps<AvatarSlots>, 'color'> & {\n /**\n * Optional activity indicator\n * * active: the avatar will be decorated according to activeAppearance\n * * inactive: the avatar will be reduced in size and partially transparent\n * * unset: normal display\n *\n * @default unset\n */\n active?: 'active' | 'inactive' | 'unset';\n\n /**\n * The appearance when `active=\"active\"`\n *\n * @default ring\n */\n activeAppearance?: 'ring' | 'shadow' | 'ring-shadow';\n\n /**\n * The color when displaying either an icon or initials.\n * * neutral (default): gray\n * * brand: color from the brand palette\n * * colorful: picks a color from a set of pre-defined colors, based on a hash of the name (or idForColor if provided)\n * * [AvatarNamedColor]: a specific color from the theme\n *\n * @default neutral\n */\n color?: 'neutral' | 'brand' | 'colorful' | AvatarNamedColor;\n\n /**\n * Specify a string to be used instead of the name, to determine which color to use when color=\"colorful\".\n * Use this when a name is not available, but there is another unique identifier that can be used instead.\n */\n idForColor?: string | undefined;\n\n /**\n * The name of the person or entity represented by this Avatar. This should always be provided if it is available.\n *\n * The name will be used to determine the initials displayed when there is no icon, as well as provided to\n * accessibility tools.\n */\n name?: string;\n\n /**\n * The avatar can have a circular or square shape.\n * @default circular\n */\n shape?: 'circular' | 'square';\n\n /**\n * Size of the avatar in pixels.\n *\n * Size is restricted to a limited set of supported values recommended for most uses (see `AvatarSizeValue`) and\n * based on design guidelines for the Avatar control.\n *\n * Note: At size 16, if initials are displayed, only the first initial will be rendered.\n *\n * If a non-supported size is neeeded, set `size` to the next-smaller supported size, and set `width` and `height`\n * to override the rendered size.\n *\n * For example, to set the avatar to 45px in size:\n * `<Avatar size={40} style={{ width: '45px', height: '45px' }} />`\n *\n * @default 32\n */\n size?: AvatarSizes;\n};\n\n/**\n * State used in rendering Avatar\n */\nexport type AvatarState = ComponentState<AvatarSlots> &\n Required<Pick<AvatarProps, 'active' | 'activeAppearance' | 'shape' | 'size'>> & {\n /**\n * The Avatar's color, it matches props.color but with `'colorful'` resolved to a named color\n */\n color: NonNullable<Exclude<AvatarProps['color'], 'colorful'>>;\n };\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"../src/","sources":["components/Avatar/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC","sourcesContent":["export * from './Avatar.types';\nexport * from './Avatar';\nexport * from './renderAvatar';\nexport * from './useAvatar';\nexport * from './useAvatarStyles';\n"]}
@@ -1,11 +1,15 @@
1
- import { __assign } from "tslib";
2
1
  import * as React from 'react';
3
2
  import { getSlots } from '@fluentui/react-utilities';
4
- export var renderAvatar = function (state) {
5
- var _a = getSlots(state, ['root', 'label', 'image', 'badge', 'icon']),
6
- slots = _a.slots,
7
- slotProps = _a.slotProps;
8
-
9
- return /*#__PURE__*/React.createElement(slots.root, __assign({}, slotProps.root), /*#__PURE__*/React.createElement(slots.label, __assign({}, slotProps.label)), /*#__PURE__*/React.createElement(slots.icon, __assign({}, slotProps.icon)), /*#__PURE__*/React.createElement(slots.image, __assign({}, slotProps.image)), /*#__PURE__*/React.createElement(slots.badge, __assign({}, slotProps.badge)));
3
+ export const renderAvatar_unstable = state => {
4
+ const {
5
+ slots,
6
+ slotProps
7
+ } = getSlots(state);
8
+ return /*#__PURE__*/React.createElement(slots.root, { ...slotProps.root
9
+ }, slots.initials && /*#__PURE__*/React.createElement(slots.initials, { ...slotProps.initials
10
+ }), slots.icon && /*#__PURE__*/React.createElement(slots.icon, { ...slotProps.icon
11
+ }), slots.image && /*#__PURE__*/React.createElement(slots.image, { ...slotProps.image
12
+ }), slots.badge && /*#__PURE__*/React.createElement(slots.badge, { ...slotProps.badge
13
+ }));
10
14
  };
11
15
  //# sourceMappingURL=renderAvatar.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Avatar/renderAvatar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,QAAT,QAAyB,2BAAzB;AAGA,OAAO,IAAM,YAAY,GAAG,UAAC,KAAD,EAAmB;AACvC,MAAA,EAAA,GAAuB,QAAQ,CAAc,KAAd,EAAqB,CAAC,MAAD,EAAS,OAAT,EAAkB,OAAlB,EAA2B,OAA3B,EAAoC,MAApC,CAArB,CAA/B;AAAA,MAAE,KAAK,GAAA,EAAA,CAAA,KAAP;AAAA,MAAS,SAAS,GAAA,EAAA,CAAA,SAAlB;;AAEN,sBACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,QAAA,CAAA,EAAA,EAAK,SAAS,CAAC,IAAf,CAAX,eACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,KAAP,EAAY,QAAA,CAAA,EAAA,EAAK,SAAS,CAAC,KAAf,CAAZ,CADF,eAEE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,QAAA,CAAA,EAAA,EAAK,SAAS,CAAC,IAAf,CAAX,CAFF,eAGE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,KAAP,EAAY,QAAA,CAAA,EAAA,EAAK,SAAS,CAAC,KAAf,CAAZ,CAHF,eAIE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,KAAP,EAAY,QAAA,CAAA,EAAA,EAAK,SAAS,CAAC,KAAf,CAAZ,CAJF,CADF;AAQD,CAXM","sourceRoot":""}
1
+ {"version":3,"sources":["components/Avatar/renderAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,QAAT,QAAyB,2BAAzB;AAGA,OAAO,MAAM,qBAAqB,GAAI,KAAD,IAAuB;AAC1D,QAAM;AAAE,IAAA,KAAF;AAAS,IAAA;AAAT,MAAuB,QAAQ,CAAc,KAAd,CAArC;AAEA,sBACE,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,EAAA,GAAK,SAAS,CAAC;AAAf,GAAX,EACG,KAAK,CAAC,QAAN,iBAAkB,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,QAAP,EAAe,EAAA,GAAK,SAAS,CAAC;AAAf,GAAf,CADrB,EAEG,KAAK,CAAC,IAAN,iBAAc,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,IAAP,EAAW,EAAA,GAAK,SAAS,CAAC;AAAf,GAAX,CAFjB,EAGG,KAAK,CAAC,KAAN,iBAAe,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,KAAP,EAAY,EAAA,GAAK,SAAS,CAAC;AAAf,GAAZ,CAHlB,EAIG,KAAK,CAAC,KAAN,iBAAe,KAAA,CAAA,aAAA,CAAC,KAAK,CAAC,KAAP,EAAY,EAAA,GAAK,SAAS,CAAC;AAAf,GAAZ,CAJlB,CADF;AAQD,CAXM","sourcesContent":["import * as React from 'react';\nimport { getSlots } from '@fluentui/react-utilities';\nimport type { AvatarSlots, AvatarState } from './Avatar.types';\n\nexport const renderAvatar_unstable = (state: AvatarState) => {\n const { slots, slotProps } = getSlots<AvatarSlots>(state);\n\n return (\n <slots.root {...slotProps.root}>\n {slots.initials && <slots.initials {...slotProps.initials} />}\n {slots.icon && <slots.icon {...slotProps.icon} />}\n {slots.image && <slots.image {...slotProps.image} />}\n {slots.badge && <slots.badge {...slotProps.badge} />}\n </slots.root>\n );\n};\n"],"sourceRoot":"../src/"}
@@ -1,100 +1,128 @@
1
- import { __assign } from "tslib";
2
1
  import * as React from 'react';
3
- import { getNativeElementProps, resolveShorthand } from '@fluentui/react-utilities';
4
- import { getInitials as getInitialsDefault } from '../../utils/index';
5
- import { Person16Regular, Person20Regular, Person24Regular, Person28Regular, Person32Regular, Person48Regular } from '@fluentui/react-icons';
2
+ import { getNativeElementProps, resolveShorthand, useId } from '@fluentui/react-utilities';
3
+ import { getInitials } from '../../utils/index';
4
+ import { PersonRegular } from '@fluentui/react-icons';
6
5
  import { PresenceBadge } from '@fluentui/react-badge';
7
6
  import { useFluent } from '@fluentui/react-shared-contexts';
8
- export var useAvatar = function (props, ref) {
9
- var _a, _b, _c;
10
-
11
- var dir = useFluent().dir;
12
- var _d = props.name,
13
- name = _d === void 0 ? '' : _d,
14
- _e = props.size,
15
- size = _e === void 0 ? 32 : _e,
16
- _f = props.shape,
17
- shape = _f === void 0 ? 'circular' : _f,
18
- _g = props.active,
19
- active = _g === void 0 ? 'unset' : _g,
20
- _h = props.activeAppearance,
21
- activeAppearance = _h === void 0 ? 'ring' : _h,
22
- idForColor = props.idForColor,
23
- _j = props.getInitials,
24
- getInitials = _j === void 0 ? getInitialsDefault : _j;
25
- var _k = props.color,
26
- color = _k === void 0 ? 'neutral' : _k; // Resolve 'colorful' to a specific color name
7
+ import { useMergedEventCallbacks } from '@fluentui/react-utilities';
8
+ export const useAvatar_unstable = (props, ref) => {
9
+ var _a;
10
+
11
+ const {
12
+ dir
13
+ } = useFluent();
14
+ const {
15
+ name,
16
+ size = 32,
17
+ shape = 'circular',
18
+ active = 'unset',
19
+ activeAppearance = 'ring',
20
+ idForColor
21
+ } = props;
22
+ let {
23
+ color = 'neutral'
24
+ } = props; // Resolve 'colorful' to a specific color name
27
25
 
28
26
  if (color === 'colorful') {
29
- color = avatarColors[getHashCode((_b = (_a = props.idForColor) !== null && _a !== void 0 ? _a : props.name) !== null && _b !== void 0 ? _b : '') % avatarColors.length];
27
+ color = avatarColors[getHashCode((_a = idForColor !== null && idForColor !== void 0 ? idForColor : name) !== null && _a !== void 0 ? _a : '') % avatarColors.length];
30
28
  }
31
29
 
32
- var state = {
33
- size: size,
34
- name: name,
35
- shape: shape,
36
- active: active,
37
- activeAppearance: activeAppearance,
38
- color: color,
39
- idForColor: idForColor,
40
- getInitials: getInitials,
41
- components: {
42
- root: 'span',
43
- label: 'span',
44
- icon: 'span',
45
- image: 'img',
46
- badge: PresenceBadge
47
- },
48
- root: getNativeElementProps('span', __assign(__assign({}, props), {
49
- ref: ref
50
- })),
51
- label: resolveShorthand(props.label),
52
- icon: undefined,
53
- image: resolveShorthand(props.image),
54
- badge: resolveShorthand(props.badge, {
30
+ const baseId = useId('avatar-');
31
+ const root = getNativeElementProps('span', {
32
+ role: 'img',
33
+ id: baseId,
34
+ // aria-label and/or aria-labelledby are resolved below
35
+ ...props,
36
+ ref
37
+ },
38
+ /* excludedPropNames: */
39
+ ['name']); // Resolve the initials slot, defaulted to getInitials.
40
+
41
+ let initials = resolveShorthand(props.initials, {
42
+ required: true,
43
+ defaultProps: {
44
+ children: getInitials(name, dir === 'rtl', {
45
+ firstInitialOnly: size <= 16
46
+ }),
47
+ id: baseId + '__initials'
48
+ }
49
+ }); // Render the icon slot *only if* there aren't any initials to display.
50
+
51
+ let icon = undefined;
52
+
53
+ if (!(initials === null || initials === void 0 ? void 0 : initials.children)) {
54
+ initials = undefined;
55
+ icon = resolveShorthand(props.icon, {
56
+ required: true,
55
57
  defaultProps: {
56
- size: getBadgeSize(size)
58
+ children: /*#__PURE__*/React.createElement(PersonRegular, null),
59
+ 'aria-hidden': true
57
60
  }
58
- })
59
- }; // If a label was not provided, use the initials and fall back to the icon if initials aren't available
60
-
61
- if (!((_c = state.label) === null || _c === void 0 ? void 0 : _c.children)) {
62
- var initials = state.getInitials(state.name, dir === 'rtl');
63
-
64
- if (initials) {
65
- state.label = __assign(__assign({}, state.label), {
66
- children: initials
67
- });
68
- } else {
69
- state.icon = resolveShorthand(props.icon, {
70
- required: true,
71
- defaultProps: {
72
- children: getDefaultIcon(state.size)
73
- }
74
- });
61
+ });
62
+ }
63
+
64
+ const [imageHidden, setImageHidden] = React.useState(undefined);
65
+ const image = resolveShorthand(props.image, {
66
+ defaultProps: {
67
+ alt: '',
68
+ role: 'presentation',
69
+ 'aria-hidden': true,
70
+ hidden: imageHidden
75
71
  }
72
+ }); // Hide the image if it fails to load and restore it on a successful load
73
+
74
+ const imageOnError = useMergedEventCallbacks(image === null || image === void 0 ? void 0 : image.onError, () => setImageHidden(true));
75
+ const imageOnLoad = useMergedEventCallbacks(image === null || image === void 0 ? void 0 : image.onLoad, () => setImageHidden(undefined));
76
+
77
+ if (image) {
78
+ image.onError = imageOnError;
79
+ image.onLoad = imageOnLoad;
76
80
  }
77
81
 
78
- return state;
79
- };
82
+ const badge = resolveShorthand(props.badge, {
83
+ defaultProps: {
84
+ size: getBadgeSize(size),
85
+ role: 'presentation',
86
+ 'aria-hidden': true,
87
+ id: baseId + '__badge'
88
+ }
89
+ }); // Resolve aria-label and/or aria-labelledby if not provided by the user
80
90
 
81
- var getDefaultIcon = function (size) {
82
- if (size <= 24) {
83
- return /*#__PURE__*/React.createElement(Person16Regular, null);
84
- } else if (size <= 40) {
85
- return /*#__PURE__*/React.createElement(Person20Regular, null);
86
- } else if (size <= 48) {
87
- return /*#__PURE__*/React.createElement(Person24Regular, null);
88
- } else if (size <= 56) {
89
- return /*#__PURE__*/React.createElement(Person28Regular, null);
90
- } else if (size <= 72) {
91
- return /*#__PURE__*/React.createElement(Person32Regular, null);
92
- } else {
93
- return /*#__PURE__*/React.createElement(Person48Regular, null);
91
+ if (!root['aria-label'] && !root['aria-labelledby']) {
92
+ if (name) {
93
+ root['aria-label'] = name; // Include the badge in labelledby if it exists
94
+
95
+ if (badge) {
96
+ root['aria-labelledby'] = root.id + ' ' + badge.id;
97
+ }
98
+ } else if (initials) {
99
+ // root's aria-label should be the name, but fall back to being labelledby the initials if name is missing
100
+ root['aria-labelledby'] = initials.id + (badge ? ' ' + badge.id : '');
101
+ }
94
102
  }
103
+
104
+ return {
105
+ size,
106
+ shape,
107
+ active,
108
+ activeAppearance,
109
+ color,
110
+ components: {
111
+ root: 'span',
112
+ initials: 'span',
113
+ icon: 'span',
114
+ image: 'img',
115
+ badge: PresenceBadge
116
+ },
117
+ root,
118
+ initials,
119
+ icon,
120
+ image,
121
+ badge
122
+ };
95
123
  };
96
124
 
97
- var getBadgeSize = function (size) {
125
+ const getBadgeSize = size => {
98
126
  if (size >= 96) {
99
127
  return 'extra-large';
100
128
  } else if (size >= 64) {
@@ -110,14 +138,14 @@ var getBadgeSize = function (size) {
110
138
  }
111
139
  };
112
140
 
113
- var avatarColors = ['darkRed', 'cranberry', 'red', 'pumpkin', 'peach', 'marigold', 'gold', 'brass', 'brown', 'forest', 'seafoam', 'darkGreen', 'lightTeal', 'teal', 'steel', 'blue', 'royalBlue', 'cornflower', 'navy', 'lavender', 'purple', 'grape', 'lilac', 'pink', 'magenta', 'plum', 'beige', 'mink', 'platinum', 'anchor'];
141
+ const avatarColors = ['dark-red', 'cranberry', 'red', 'pumpkin', 'peach', 'marigold', 'gold', 'brass', 'brown', 'forest', 'seafoam', 'dark-green', 'light-teal', 'teal', 'steel', 'blue', 'royal-blue', 'cornflower', 'navy', 'lavender', 'purple', 'grape', 'lilac', 'pink', 'magenta', 'plum', 'beige', 'mink', 'platinum', 'anchor'];
114
142
 
115
- var getHashCode = function (str) {
116
- var hashCode = 0;
143
+ const getHashCode = str => {
144
+ let hashCode = 0;
117
145
 
118
- for (var len = str.length - 1; len >= 0; len--) {
119
- var ch = str.charCodeAt(len);
120
- var shift = len % 8;
146
+ for (let len = str.length - 1; len >= 0; len--) {
147
+ const ch = str.charCodeAt(len);
148
+ const shift = len % 8;
121
149
  hashCode ^= (ch << shift) + (ch >> 8 - shift); // eslint-disable-line no-bitwise
122
150
  }
123
151
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Avatar/useAvatar.tsx"],"names":[],"mappings":"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","sourceRoot":""}
1
+ {"version":3,"sources":["components/Avatar/useAvatar.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { getNativeElementProps, 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 } from '@fluentui/react-shared-contexts';\nimport { useMergedEventCallbacks } from '@fluentui/react-utilities';\n\nexport const useAvatar_unstable = (props: AvatarProps, ref: React.Ref<HTMLElement>): AvatarState => {\n const { dir } = useFluent();\n const { name, size = 32, shape = 'circular', active = 'unset', activeAppearance = 'ring', idForColor } = 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 // 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 // Render the icon slot *only if* there aren't any initials to display.\n let icon: AvatarState['icon'] = undefined;\n if (!initials?.children) {\n initials = undefined;\n icon = resolveShorthand(props.icon, {\n required: true,\n defaultProps: {\n children: <PersonRegular />,\n 'aria-hidden': true,\n },\n });\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 const imageOnError = useMergedEventCallbacks(image?.onError, () => setImageHidden(true));\n const imageOnLoad = useMergedEventCallbacks(image?.onLoad, () => setImageHidden(undefined));\n if (image) {\n image.onError = imageOnError;\n image.onLoad = imageOnLoad;\n }\n\n const badge: AvatarState['badge'] = resolveShorthand(props.badge, {\n defaultProps: {\n size: getBadgeSize(size),\n role: 'presentation',\n 'aria-hidden': true,\n id: baseId + '__badge',\n },\n });\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\n return {\n size,\n shape,\n active,\n activeAppearance,\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"],"sourceRoot":"../src/"}