@transferwise/components 0.0.0-experimental-f7495f3 → 0.0.0-experimental-37d8e2c

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 (122) hide show
  1. package/build/avatar/Avatar.js +4 -1
  2. package/build/avatar/Avatar.js.map +1 -1
  3. package/build/avatar/Avatar.mjs +4 -1
  4. package/build/avatar/Avatar.mjs.map +1 -1
  5. package/build/avatar/colors/colors.js +1 -1
  6. package/build/avatar/colors/colors.js.map +1 -1
  7. package/build/avatar/colors/colors.mjs +1 -1
  8. package/build/avatar/colors/colors.mjs.map +1 -1
  9. package/build/avatarView/AvatarView.js +207 -0
  10. package/build/avatarView/AvatarView.js.map +1 -0
  11. package/build/avatarView/AvatarView.mjs +205 -0
  12. package/build/avatarView/AvatarView.mjs.map +1 -0
  13. package/build/avatarWrapper/AvatarWrapper.js +6 -9
  14. package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
  15. package/build/avatarWrapper/AvatarWrapper.mjs +5 -8
  16. package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
  17. package/build/badge/Badge.js +6 -1
  18. package/build/badge/Badge.js.map +1 -1
  19. package/build/badge/Badge.mjs +6 -1
  20. package/build/badge/Badge.mjs.map +1 -1
  21. package/build/circularButton/CircularButton.js +4 -7
  22. package/build/circularButton/CircularButton.js.map +1 -1
  23. package/build/circularButton/CircularButton.mjs +4 -7
  24. package/build/circularButton/CircularButton.mjs.map +1 -1
  25. package/build/common/circle/Circle.js +24 -1
  26. package/build/common/circle/Circle.js.map +1 -1
  27. package/build/common/circle/Circle.mjs +24 -1
  28. package/build/common/circle/Circle.mjs.map +1 -1
  29. package/build/common/initials.js +12 -0
  30. package/build/common/initials.js.map +1 -0
  31. package/build/common/initials.mjs +10 -0
  32. package/build/common/initials.mjs.map +1 -0
  33. package/build/common/notificationDot/NotificationDot.js +16 -0
  34. package/build/common/notificationDot/NotificationDot.js.map +1 -0
  35. package/build/common/notificationDot/NotificationDot.mjs +14 -0
  36. package/build/common/notificationDot/NotificationDot.mjs.map +1 -0
  37. package/build/display/Display.js +1 -1
  38. package/build/display/Display.js.map +1 -1
  39. package/build/display/Display.mjs +1 -1
  40. package/build/display/Display.mjs.map +1 -1
  41. package/build/index.js +6 -0
  42. package/build/index.js.map +1 -1
  43. package/build/index.mjs +3 -0
  44. package/build/index.mjs.map +1 -1
  45. package/build/main.css +82 -41
  46. package/build/statusIcon/StatusIcon.js +4 -2
  47. package/build/statusIcon/StatusIcon.js.map +1 -1
  48. package/build/statusIcon/StatusIcon.mjs +4 -2
  49. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  50. package/build/styles/avatarGroup/AvatarGroup.css +28 -0
  51. package/build/styles/avatarView/AvatarView.css +22 -0
  52. package/build/styles/badge/Badge.css +5 -5
  53. package/build/styles/circularButton/CircularButton.css +0 -24
  54. package/build/styles/common/circle/Circle.css +17 -0
  55. package/build/styles/common/notificationDot/NotificationDot.css +10 -0
  56. package/build/styles/main.css +82 -41
  57. package/build/styles/statusIcon/StatusIcon.css +0 -12
  58. package/build/types/avatar/Avatar.d.ts +3 -0
  59. package/build/types/avatar/Avatar.d.ts.map +1 -1
  60. package/build/types/avatar/colors/colors.d.ts +1 -1
  61. package/build/types/avatar/colors/colors.d.ts.map +1 -1
  62. package/build/types/avatarGroup/AvatarGroup.d.ts +19 -0
  63. package/build/types/avatarGroup/AvatarGroup.d.ts.map +1 -0
  64. package/build/types/avatarGroup/index.d.ts +3 -0
  65. package/build/types/avatarGroup/index.d.ts.map +1 -0
  66. package/build/types/avatarView/AvatarView.d.ts +25 -0
  67. package/build/types/avatarView/AvatarView.d.ts.map +1 -0
  68. package/build/types/avatarView/index.d.ts +3 -0
  69. package/build/types/avatarView/index.d.ts.map +1 -0
  70. package/build/types/avatarWrapper/AvatarWrapper.d.ts +3 -0
  71. package/build/types/avatarWrapper/AvatarWrapper.d.ts.map +1 -1
  72. package/build/types/badge/Badge.d.ts +2 -1
  73. package/build/types/badge/Badge.d.ts.map +1 -1
  74. package/build/types/circularButton/CircularButton.d.ts.map +1 -1
  75. package/build/types/common/circle/Circle.d.ts +1 -1
  76. package/build/types/common/circle/Circle.d.ts.map +1 -1
  77. package/build/types/common/index.d.ts +1 -0
  78. package/build/types/common/initials.d.ts +2 -0
  79. package/build/types/common/initials.d.ts.map +1 -0
  80. package/build/types/common/notificationDot/NotificationDot.d.ts +8 -0
  81. package/build/types/common/notificationDot/NotificationDot.d.ts.map +1 -0
  82. package/build/types/index.d.ts +4 -1
  83. package/build/types/index.d.ts.map +1 -1
  84. package/build/types/statusIcon/StatusIcon.d.ts +6 -2
  85. package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
  86. package/package.json +3 -3
  87. package/src/avatar/Avatar.tsx +4 -1
  88. package/src/avatar/colors/colors.ts +4 -4
  89. package/src/avatarGroup/AvatarGroup.css +28 -0
  90. package/src/avatarGroup/AvatarGroup.less +32 -0
  91. package/src/avatarGroup/AvatarGroup.story.tsx +249 -0
  92. package/src/avatarGroup/AvatarGroup.tsx +78 -0
  93. package/src/avatarGroup/index.ts +2 -0
  94. package/src/avatarView/AvatarView.css +22 -0
  95. package/src/avatarView/AvatarView.less +24 -0
  96. package/src/avatarView/AvatarView.story.tsx +425 -0
  97. package/src/avatarView/AvatarView.tsx +217 -0
  98. package/src/avatarView/index.ts +2 -0
  99. package/src/avatarWrapper/AvatarWrapper.tsx +12 -16
  100. package/src/badge/Badge.css +5 -5
  101. package/src/badge/Badge.less +3 -3
  102. package/src/badge/Badge.tsx +10 -1
  103. package/src/circularButton/CircularButton.css +0 -24
  104. package/src/circularButton/CircularButton.less +15 -15
  105. package/src/circularButton/CircularButton.tsx +4 -5
  106. package/src/common/circle/Circle.css +17 -0
  107. package/src/common/circle/Circle.less +22 -0
  108. package/src/common/circle/Circle.tsx +33 -2
  109. package/src/common/index.js +1 -0
  110. package/src/common/initials.ts +13 -0
  111. package/src/common/notificationDot/NotificationDot.css +10 -0
  112. package/src/common/notificationDot/NotificationDot.less +7 -0
  113. package/src/common/notificationDot/NotificationDot.tsx +10 -0
  114. package/src/display/Display.tsx +1 -1
  115. package/src/index.ts +4 -0
  116. package/src/main.css +82 -41
  117. package/src/main.less +3 -0
  118. package/src/statusIcon/StatusIcon.css +0 -12
  119. package/src/statusIcon/StatusIcon.less +6 -6
  120. package/src/statusIcon/StatusIcon.story.tsx +32 -28
  121. package/src/statusIcon/StatusIcon.tsx +18 -4
  122. package/src/test-utils/avatar-img.webp +0 -0
@@ -19,6 +19,9 @@ const backwardsCompatibleSize = size => {
19
19
  return size;
20
20
  }
21
21
  };
22
+ /**
23
+ * @deprecated Use `AvatarView` component instead
24
+ */
22
25
  const Avatar = ({
23
26
  backgroundColor = null,
24
27
  backgroundColorSeed = null,
@@ -30,7 +33,7 @@ const Avatar = ({
30
33
  type = 'thumbnail',
31
34
  'aria-label': ariaLabel
32
35
  }) => {
33
- const backgroundColorFromSeed = React.useMemo(() => !backgroundColor && backgroundColorSeed ? `var(${colors.getAvatarColorFromSeed(backgroundColorSeed)})` : undefined, [backgroundColor, backgroundColorSeed]);
36
+ const backgroundColorFromSeed = React.useMemo(() => !backgroundColor && backgroundColorSeed ? colors.getAvatarColorFromSeed(backgroundColorSeed) : undefined, [backgroundColor, backgroundColorSeed]);
34
37
  const size = backwardsCompatibleSize(sizeFromProps);
35
38
  return /*#__PURE__*/jsxRuntime.jsx(Circle, {
36
39
  size: size,
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { Theme } from '../common';\n\nimport { getAvatarColorFromSeed } from './colors';\nimport Circle from '../common/circle';\n\ntype NumericAvatarSize = 24 | 40 | 48 | 56 | 72;\n\ntype LegacyAvatarSize = 'sm' | 'md' | 'lg';\n\nexport type AvatarSize = NumericAvatarSize | LegacyAvatarSize;\n\nexport type AvatarTheme = 'light' | 'dark';\n\nexport type AvatarType = 'thumbnail' | 'icon' | 'emoji' | 'initials';\n\nexport interface AvatarProps {\n backgroundColor?: string;\n backgroundColorSeed?: string;\n children?: React.ReactNode;\n className?: string;\n outlined?: boolean;\n size?: AvatarSize;\n theme?: AvatarTheme;\n type?: AvatarType;\n 'aria-label'?: string;\n}\n\nconst backwardsCompatibleSize = (size: AvatarSize): NumericAvatarSize => {\n switch (size) {\n case 'sm':\n return 24;\n\n case 'md':\n return 48;\n\n case 'lg':\n return 72;\n\n default:\n return size;\n }\n};\n\nconst Avatar: React.FC<AvatarProps> = ({\n backgroundColor = null,\n backgroundColorSeed = null,\n children = null,\n className,\n outlined = false,\n size: sizeFromProps = 48,\n theme = Theme.LIGHT,\n type = 'thumbnail',\n 'aria-label': ariaLabel,\n}) => {\n const backgroundColorFromSeed = useMemo<string | undefined>(\n () =>\n !backgroundColor && backgroundColorSeed\n ? `var(${getAvatarColorFromSeed(backgroundColorSeed)})`\n : undefined,\n [backgroundColor, backgroundColorSeed],\n );\n\n const size = backwardsCompatibleSize(sizeFromProps);\n\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx('tw-avatar', className, `tw-avatar--${size}`, `tw-avatar--${type}`, {\n 'tw-avatar--outlined': outlined,\n 'tw-avatar--branded': Boolean(backgroundColorFromSeed),\n 'np-text-title-body': type === 'initials',\n })}\n aria-label={ariaLabel}\n >\n <Circle\n size={size}\n fixedSize\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </Circle>\n </Circle>\n );\n};\n\nexport default Avatar;\n"],"names":["backwardsCompatibleSize","size","Avatar","backgroundColor","backgroundColorSeed","children","className","outlined","sizeFromProps","theme","Theme","LIGHT","type","ariaLabel","backgroundColorFromSeed","useMemo","getAvatarColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;;;AA8BA,MAAMA,uBAAuB,GAAIC,IAAgB,IAAuB;AACtE,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA;AACE,MAAA,OAAOA,IAAI,CAAA;AACf,GAAA;AACF,CAAC,CAAA;AAEKC,MAAAA,MAAM,GAA0BA,CAAC;AACrCC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,mBAAmB,GAAG,IAAI;AAC1BC,EAAAA,QAAQ,GAAG,IAAI;EACfC,SAAS;AACTC,EAAAA,QAAQ,GAAG,KAAK;EAChBN,IAAI,EAAEO,aAAa,GAAG,EAAE;SACxBC,OAAK,GAAGC,WAAK,CAACC,KAAK;AACnBC,EAAAA,IAAI,GAAG,WAAW;AAClB,EAAA,YAAY,EAAEC,SAAAA;AAAS,CACxB,KAAI;EACH,MAAMC,uBAAuB,GAAGC,aAAO,CACrC,MACE,CAACZ,eAAe,IAAIC,mBAAmB,GACnC,CAAOY,IAAAA,EAAAA,6BAAsB,CAACZ,mBAAmB,CAAC,CAAG,CAAA,CAAA,GACrDa,SAAS,EACf,CAACd,eAAe,EAAEC,mBAAmB,CAAC,CACvC,CAAA;AAED,EAAA,MAAMH,IAAI,GAAGD,uBAAuB,CAACQ,aAAa,CAAC,CAAA;EAEnD,oBACEU,cAAA,CAACC,MAAM,EAAA;AACLlB,IAAAA,IAAI,EAAEA,IAAK;IACXmB,SAAS,EAAA,IAAA;AACTd,IAAAA,SAAS,EAAEe,SAAI,CAAC,WAAW,EAAEf,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEe,OAAO,CAACR,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;IAAAR,QAAA,eAEtBa,cAAA,CAACC,MAAM,EAAA;AACLlB,MAAAA,IAAI,EAAEA,IAAK;MACXmB,SAAS,EAAA,IAAA;AACTd,MAAAA,SAAS,EAAC,oBAAoB;AAC9BiB,MAAAA,KAAK,EAAE;QACLpB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACK,CAAA;AACV,GAAQ,CAAC,CAAA;AAEb;;;;"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { Theme } from '../common';\n\nimport { getAvatarColorFromSeed } from './colors';\nimport Circle from '../common/circle';\n\ntype NumericAvatarSize = 24 | 40 | 48 | 56 | 72;\n\ntype LegacyAvatarSize = 'sm' | 'md' | 'lg';\n\nexport type AvatarSize = NumericAvatarSize | LegacyAvatarSize;\n\nexport type AvatarTheme = 'light' | 'dark';\n\nexport type AvatarType = 'thumbnail' | 'icon' | 'emoji' | 'initials';\n\nexport interface AvatarProps {\n backgroundColor?: string;\n backgroundColorSeed?: string;\n children?: React.ReactNode;\n className?: string;\n outlined?: boolean;\n size?: AvatarSize;\n theme?: AvatarTheme;\n type?: AvatarType;\n 'aria-label'?: string;\n}\n\nconst backwardsCompatibleSize = (size: AvatarSize): NumericAvatarSize => {\n switch (size) {\n case 'sm':\n return 24;\n\n case 'md':\n return 48;\n\n case 'lg':\n return 72;\n\n default:\n return size;\n }\n};\n\n/**\n * @deprecated Use `AvatarView` component instead\n */\nconst Avatar: React.FC<AvatarProps> = ({\n backgroundColor = null,\n backgroundColorSeed = null,\n children = null,\n className,\n outlined = false,\n size: sizeFromProps = 48,\n theme = Theme.LIGHT,\n type = 'thumbnail',\n 'aria-label': ariaLabel,\n}) => {\n const backgroundColorFromSeed = useMemo<string | undefined>(\n () =>\n !backgroundColor && backgroundColorSeed\n ? getAvatarColorFromSeed(backgroundColorSeed)\n : undefined,\n [backgroundColor, backgroundColorSeed],\n );\n\n const size = backwardsCompatibleSize(sizeFromProps);\n\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx('tw-avatar', className, `tw-avatar--${size}`, `tw-avatar--${type}`, {\n 'tw-avatar--outlined': outlined,\n 'tw-avatar--branded': Boolean(backgroundColorFromSeed),\n 'np-text-title-body': type === 'initials',\n })}\n aria-label={ariaLabel}\n >\n <Circle\n size={size}\n fixedSize\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </Circle>\n </Circle>\n );\n};\n\nexport default Avatar;\n"],"names":["backwardsCompatibleSize","size","Avatar","backgroundColor","backgroundColorSeed","children","className","outlined","sizeFromProps","theme","Theme","LIGHT","type","ariaLabel","backgroundColorFromSeed","useMemo","getAvatarColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;;;AA8BA,MAAMA,uBAAuB,GAAIC,IAAgB,IAAuB;AACtE,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA;AACE,MAAA,OAAOA,IAAI,CAAA;AACf,GAAA;AACF,CAAC,CAAA;AAED;;AAEG;AACGC,MAAAA,MAAM,GAA0BA,CAAC;AACrCC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,mBAAmB,GAAG,IAAI;AAC1BC,EAAAA,QAAQ,GAAG,IAAI;EACfC,SAAS;AACTC,EAAAA,QAAQ,GAAG,KAAK;EAChBN,IAAI,EAAEO,aAAa,GAAG,EAAE;SACxBC,OAAK,GAAGC,WAAK,CAACC,KAAK;AACnBC,EAAAA,IAAI,GAAG,WAAW;AAClB,EAAA,YAAY,EAAEC,SAAAA;AAAS,CACxB,KAAI;EACH,MAAMC,uBAAuB,GAAGC,aAAO,CACrC,MACE,CAACZ,eAAe,IAAIC,mBAAmB,GACnCY,6BAAsB,CAACZ,mBAAmB,CAAC,GAC3Ca,SAAS,EACf,CAACd,eAAe,EAAEC,mBAAmB,CAAC,CACvC,CAAA;AAED,EAAA,MAAMH,IAAI,GAAGD,uBAAuB,CAACQ,aAAa,CAAC,CAAA;EAEnD,oBACEU,cAAA,CAACC,MAAM,EAAA;AACLlB,IAAAA,IAAI,EAAEA,IAAK;IACXmB,SAAS,EAAA,IAAA;AACTd,IAAAA,SAAS,EAAEe,SAAI,CAAC,WAAW,EAAEf,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEe,OAAO,CAACR,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;IAAAR,QAAA,eAEtBa,cAAA,CAACC,MAAM,EAAA;AACLlB,MAAAA,IAAI,EAAEA,IAAK;MACXmB,SAAS,EAAA,IAAA;AACTd,MAAAA,SAAS,EAAC,oBAAoB;AAC9BiB,MAAAA,KAAK,EAAE;QACLpB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACK,CAAA;AACV,GAAQ,CAAC,CAAA;AAEb;;;;"}
@@ -17,6 +17,9 @@ const backwardsCompatibleSize = size => {
17
17
  return size;
18
18
  }
19
19
  };
20
+ /**
21
+ * @deprecated Use `AvatarView` component instead
22
+ */
20
23
  const Avatar = ({
21
24
  backgroundColor = null,
22
25
  backgroundColorSeed = null,
@@ -28,7 +31,7 @@ const Avatar = ({
28
31
  type = 'thumbnail',
29
32
  'aria-label': ariaLabel
30
33
  }) => {
31
- const backgroundColorFromSeed = useMemo(() => !backgroundColor && backgroundColorSeed ? `var(${getAvatarColorFromSeed(backgroundColorSeed)})` : undefined, [backgroundColor, backgroundColorSeed]);
34
+ const backgroundColorFromSeed = useMemo(() => !backgroundColor && backgroundColorSeed ? getAvatarColorFromSeed(backgroundColorSeed) : undefined, [backgroundColor, backgroundColorSeed]);
32
35
  const size = backwardsCompatibleSize(sizeFromProps);
33
36
  return /*#__PURE__*/jsx(Circle, {
34
37
  size: size,
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.mjs","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { Theme } from '../common';\n\nimport { getAvatarColorFromSeed } from './colors';\nimport Circle from '../common/circle';\n\ntype NumericAvatarSize = 24 | 40 | 48 | 56 | 72;\n\ntype LegacyAvatarSize = 'sm' | 'md' | 'lg';\n\nexport type AvatarSize = NumericAvatarSize | LegacyAvatarSize;\n\nexport type AvatarTheme = 'light' | 'dark';\n\nexport type AvatarType = 'thumbnail' | 'icon' | 'emoji' | 'initials';\n\nexport interface AvatarProps {\n backgroundColor?: string;\n backgroundColorSeed?: string;\n children?: React.ReactNode;\n className?: string;\n outlined?: boolean;\n size?: AvatarSize;\n theme?: AvatarTheme;\n type?: AvatarType;\n 'aria-label'?: string;\n}\n\nconst backwardsCompatibleSize = (size: AvatarSize): NumericAvatarSize => {\n switch (size) {\n case 'sm':\n return 24;\n\n case 'md':\n return 48;\n\n case 'lg':\n return 72;\n\n default:\n return size;\n }\n};\n\nconst Avatar: React.FC<AvatarProps> = ({\n backgroundColor = null,\n backgroundColorSeed = null,\n children = null,\n className,\n outlined = false,\n size: sizeFromProps = 48,\n theme = Theme.LIGHT,\n type = 'thumbnail',\n 'aria-label': ariaLabel,\n}) => {\n const backgroundColorFromSeed = useMemo<string | undefined>(\n () =>\n !backgroundColor && backgroundColorSeed\n ? `var(${getAvatarColorFromSeed(backgroundColorSeed)})`\n : undefined,\n [backgroundColor, backgroundColorSeed],\n );\n\n const size = backwardsCompatibleSize(sizeFromProps);\n\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx('tw-avatar', className, `tw-avatar--${size}`, `tw-avatar--${type}`, {\n 'tw-avatar--outlined': outlined,\n 'tw-avatar--branded': Boolean(backgroundColorFromSeed),\n 'np-text-title-body': type === 'initials',\n })}\n aria-label={ariaLabel}\n >\n <Circle\n size={size}\n fixedSize\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </Circle>\n </Circle>\n );\n};\n\nexport default Avatar;\n"],"names":["backwardsCompatibleSize","size","Avatar","backgroundColor","backgroundColorSeed","children","className","outlined","sizeFromProps","theme","Theme","LIGHT","type","ariaLabel","backgroundColorFromSeed","useMemo","getAvatarColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;AA8BA,MAAMA,uBAAuB,GAAIC,IAAgB,IAAuB;AACtE,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA;AACE,MAAA,OAAOA,IAAI,CAAA;AACf,GAAA;AACF,CAAC,CAAA;AAEKC,MAAAA,MAAM,GAA0BA,CAAC;AACrCC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,mBAAmB,GAAG,IAAI;AAC1BC,EAAAA,QAAQ,GAAG,IAAI;EACfC,SAAS;AACTC,EAAAA,QAAQ,GAAG,KAAK;EAChBN,IAAI,EAAEO,aAAa,GAAG,EAAE;EACxBC,KAAK,GAAGC,KAAK,CAACC,KAAK;AACnBC,EAAAA,IAAI,GAAG,WAAW;AAClB,EAAA,YAAY,EAAEC,SAAAA;AAAS,CACxB,KAAI;EACH,MAAMC,uBAAuB,GAAGC,OAAO,CACrC,MACE,CAACZ,eAAe,IAAIC,mBAAmB,GACnC,CAAOY,IAAAA,EAAAA,sBAAsB,CAACZ,mBAAmB,CAAC,CAAG,CAAA,CAAA,GACrDa,SAAS,EACf,CAACd,eAAe,EAAEC,mBAAmB,CAAC,CACvC,CAAA;AAED,EAAA,MAAMH,IAAI,GAAGD,uBAAuB,CAACQ,aAAa,CAAC,CAAA;EAEnD,oBACEU,GAAA,CAACC,MAAM,EAAA;AACLlB,IAAAA,IAAI,EAAEA,IAAK;IACXmB,SAAS,EAAA,IAAA;AACTd,IAAAA,SAAS,EAAEe,IAAI,CAAC,WAAW,EAAEf,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEe,OAAO,CAACR,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;IAAAR,QAAA,eAEtBa,GAAA,CAACC,MAAM,EAAA;AACLlB,MAAAA,IAAI,EAAEA,IAAK;MACXmB,SAAS,EAAA,IAAA;AACTd,MAAAA,SAAS,EAAC,oBAAoB;AAC9BiB,MAAAA,KAAK,EAAE;QACLpB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACK,CAAA;AACV,GAAQ,CAAC,CAAA;AAEb;;;;"}
1
+ {"version":3,"file":"Avatar.mjs","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { Theme } from '../common';\n\nimport { getAvatarColorFromSeed } from './colors';\nimport Circle from '../common/circle';\n\ntype NumericAvatarSize = 24 | 40 | 48 | 56 | 72;\n\ntype LegacyAvatarSize = 'sm' | 'md' | 'lg';\n\nexport type AvatarSize = NumericAvatarSize | LegacyAvatarSize;\n\nexport type AvatarTheme = 'light' | 'dark';\n\nexport type AvatarType = 'thumbnail' | 'icon' | 'emoji' | 'initials';\n\nexport interface AvatarProps {\n backgroundColor?: string;\n backgroundColorSeed?: string;\n children?: React.ReactNode;\n className?: string;\n outlined?: boolean;\n size?: AvatarSize;\n theme?: AvatarTheme;\n type?: AvatarType;\n 'aria-label'?: string;\n}\n\nconst backwardsCompatibleSize = (size: AvatarSize): NumericAvatarSize => {\n switch (size) {\n case 'sm':\n return 24;\n\n case 'md':\n return 48;\n\n case 'lg':\n return 72;\n\n default:\n return size;\n }\n};\n\n/**\n * @deprecated Use `AvatarView` component instead\n */\nconst Avatar: React.FC<AvatarProps> = ({\n backgroundColor = null,\n backgroundColorSeed = null,\n children = null,\n className,\n outlined = false,\n size: sizeFromProps = 48,\n theme = Theme.LIGHT,\n type = 'thumbnail',\n 'aria-label': ariaLabel,\n}) => {\n const backgroundColorFromSeed = useMemo<string | undefined>(\n () =>\n !backgroundColor && backgroundColorSeed\n ? getAvatarColorFromSeed(backgroundColorSeed)\n : undefined,\n [backgroundColor, backgroundColorSeed],\n );\n\n const size = backwardsCompatibleSize(sizeFromProps);\n\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx('tw-avatar', className, `tw-avatar--${size}`, `tw-avatar--${type}`, {\n 'tw-avatar--outlined': outlined,\n 'tw-avatar--branded': Boolean(backgroundColorFromSeed),\n 'np-text-title-body': type === 'initials',\n })}\n aria-label={ariaLabel}\n >\n <Circle\n size={size}\n fixedSize\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </Circle>\n </Circle>\n );\n};\n\nexport default Avatar;\n"],"names":["backwardsCompatibleSize","size","Avatar","backgroundColor","backgroundColorSeed","children","className","outlined","sizeFromProps","theme","Theme","LIGHT","type","ariaLabel","backgroundColorFromSeed","useMemo","getAvatarColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;AA8BA,MAAMA,uBAAuB,GAAIC,IAAgB,IAAuB;AACtE,EAAA,QAAQA,IAAI;AACV,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA,KAAK,IAAI;AACP,MAAA,OAAO,EAAE,CAAA;AAEX,IAAA;AACE,MAAA,OAAOA,IAAI,CAAA;AACf,GAAA;AACF,CAAC,CAAA;AAED;;AAEG;AACGC,MAAAA,MAAM,GAA0BA,CAAC;AACrCC,EAAAA,eAAe,GAAG,IAAI;AACtBC,EAAAA,mBAAmB,GAAG,IAAI;AAC1BC,EAAAA,QAAQ,GAAG,IAAI;EACfC,SAAS;AACTC,EAAAA,QAAQ,GAAG,KAAK;EAChBN,IAAI,EAAEO,aAAa,GAAG,EAAE;EACxBC,KAAK,GAAGC,KAAK,CAACC,KAAK;AACnBC,EAAAA,IAAI,GAAG,WAAW;AAClB,EAAA,YAAY,EAAEC,SAAAA;AAAS,CACxB,KAAI;EACH,MAAMC,uBAAuB,GAAGC,OAAO,CACrC,MACE,CAACZ,eAAe,IAAIC,mBAAmB,GACnCY,sBAAsB,CAACZ,mBAAmB,CAAC,GAC3Ca,SAAS,EACf,CAACd,eAAe,EAAEC,mBAAmB,CAAC,CACvC,CAAA;AAED,EAAA,MAAMH,IAAI,GAAGD,uBAAuB,CAACQ,aAAa,CAAC,CAAA;EAEnD,oBACEU,GAAA,CAACC,MAAM,EAAA;AACLlB,IAAAA,IAAI,EAAEA,IAAK;IACXmB,SAAS,EAAA,IAAA;AACTd,IAAAA,SAAS,EAAEe,IAAI,CAAC,WAAW,EAAEf,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEe,OAAO,CAACR,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;IAAAR,QAAA,eAEtBa,GAAA,CAACC,MAAM,EAAA;AACLlB,MAAAA,IAAI,EAAEA,IAAK;MACXmB,SAAS,EAAA,IAAA;AACTd,MAAAA,SAAS,EAAC,oBAAoB;AAC9BiB,MAAAA,KAAK,EAAE;QACLpB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACK,CAAA;AACV,GAAQ,CAAC,CAAA;AAEb;;;;"}
@@ -5,7 +5,7 @@
5
5
  * Changing this array will change the assignment between seeds.
6
6
  * Do not change this array.
7
7
  */
8
- const avatarColors = ['--color-bright-blue', '--color-bright-yellow', '--color-bright-pink', '--color-bright-orange'];
8
+ const avatarColors = ['var(--color-bright-blue)', 'var(--color-bright-yellow)', 'var(--color-bright-pink)', 'var(--color-bright-orange)'];
9
9
  /*
10
10
  * Takes in a "seed" string and spits out an index for the color we should use.
11
11
  * This implementation has been synced across all three clients so that we consistently
@@ -1 +1 @@
1
- {"version":3,"file":"colors.js","sources":["../../../src/avatar/colors/colors.ts"],"sourcesContent":["/*\n * The colors we support generating an Avatar background color from a \"seed\" for.\n * Changing this array will change the assignment between seeds.\n * Do not change this array.\n */\nconst avatarColors = [\n '--color-bright-blue',\n '--color-bright-yellow',\n '--color-bright-pink',\n '--color-bright-orange',\n] as const;\n\n/*\n * Takes in a \"seed\" string and spits out an index for the color we should use.\n * This implementation has been synced across all three clients so that we consistently\n * generate branded avatar colors when rendering a list of Avatars.\n * Do not change this implementation.\n */\nconst hashSeed = (seed: string): number => {\n const base = 31;\n const modulo = avatarColors.length;\n\n let hashValue = 0;\n let basePow = 1;\n\n for (let i = 0; i < seed.length; i += 1) {\n hashValue = (hashValue + seed.charCodeAt(i) * basePow) % modulo;\n basePow = (basePow * base) % modulo;\n }\n\n return hashValue;\n};\n\nexport const getAvatarColorFromSeed = (seed: string): (typeof avatarColors)[number] => {\n return avatarColors[hashSeed(seed)];\n};\n"],"names":["avatarColors","hashSeed","seed","base","modulo","length","hashValue","basePow","i","charCodeAt","getAvatarColorFromSeed"],"mappings":";;AAAA;;;;AAIG;AACH,MAAMA,YAAY,GAAG,CACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,CACf,CAAA;AAEV;;;;;AAKG;AACH,MAAMC,QAAQ,GAAIC,IAAY,IAAY;EACxC,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,MAAMC,MAAM,GAAGJ,YAAY,CAACK,MAAM,CAAA;EAElC,IAAIC,SAAS,GAAG,CAAC,CAAA;EACjB,IAAIC,OAAO,GAAG,CAAC,CAAA;AAEf,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,IAAI,CAACG,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;AACvCF,IAAAA,SAAS,GAAG,CAACA,SAAS,GAAGJ,IAAI,CAACO,UAAU,CAACD,CAAC,CAAC,GAAGD,OAAO,IAAIH,MAAM,CAAA;AAC/DG,IAAAA,OAAO,GAAIA,OAAO,GAAGJ,IAAI,GAAIC,MAAM,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOE,SAAS,CAAA;AAClB,CAAC,CAAA;AAEYI,MAAAA,sBAAsB,GAAIR,IAAY,IAAmC;AACpF,EAAA,OAAOF,YAAY,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACrC;;;;"}
1
+ {"version":3,"file":"colors.js","sources":["../../../src/avatar/colors/colors.ts"],"sourcesContent":["/*\n * The colors we support generating an Avatar background color from a \"seed\" for.\n * Changing this array will change the assignment between seeds.\n * Do not change this array.\n */\nconst avatarColors = [\n 'var(--color-bright-blue)',\n 'var(--color-bright-yellow)',\n 'var(--color-bright-pink)',\n 'var(--color-bright-orange)',\n] as const;\n\n/*\n * Takes in a \"seed\" string and spits out an index for the color we should use.\n * This implementation has been synced across all three clients so that we consistently\n * generate branded avatar colors when rendering a list of Avatars.\n * Do not change this implementation.\n */\nconst hashSeed = (seed: string): number => {\n const base = 31;\n const modulo = avatarColors.length;\n\n let hashValue = 0;\n let basePow = 1;\n\n for (let i = 0; i < seed.length; i += 1) {\n hashValue = (hashValue + seed.charCodeAt(i) * basePow) % modulo;\n basePow = (basePow * base) % modulo;\n }\n\n return hashValue;\n};\n\nexport const getAvatarColorFromSeed = (seed: string): (typeof avatarColors)[number] => {\n return avatarColors[hashSeed(seed)];\n};\n"],"names":["avatarColors","hashSeed","seed","base","modulo","length","hashValue","basePow","i","charCodeAt","getAvatarColorFromSeed"],"mappings":";;AAAA;;;;AAIG;AACH,MAAMA,YAAY,GAAG,CACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,CACpB,CAAA;AAEV;;;;;AAKG;AACH,MAAMC,QAAQ,GAAIC,IAAY,IAAY;EACxC,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,MAAMC,MAAM,GAAGJ,YAAY,CAACK,MAAM,CAAA;EAElC,IAAIC,SAAS,GAAG,CAAC,CAAA;EACjB,IAAIC,OAAO,GAAG,CAAC,CAAA;AAEf,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,IAAI,CAACG,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;AACvCF,IAAAA,SAAS,GAAG,CAACA,SAAS,GAAGJ,IAAI,CAACO,UAAU,CAACD,CAAC,CAAC,GAAGD,OAAO,IAAIH,MAAM,CAAA;AAC/DG,IAAAA,OAAO,GAAIA,OAAO,GAAGJ,IAAI,GAAIC,MAAM,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOE,SAAS,CAAA;AAClB,CAAC,CAAA;AAEYI,MAAAA,sBAAsB,GAAIR,IAAY,IAAmC;AACpF,EAAA,OAAOF,YAAY,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACrC;;;;"}
@@ -3,7 +3,7 @@
3
3
  * Changing this array will change the assignment between seeds.
4
4
  * Do not change this array.
5
5
  */
6
- const avatarColors = ['--color-bright-blue', '--color-bright-yellow', '--color-bright-pink', '--color-bright-orange'];
6
+ const avatarColors = ['var(--color-bright-blue)', 'var(--color-bright-yellow)', 'var(--color-bright-pink)', 'var(--color-bright-orange)'];
7
7
  /*
8
8
  * Takes in a "seed" string and spits out an index for the color we should use.
9
9
  * This implementation has been synced across all three clients so that we consistently
@@ -1 +1 @@
1
- {"version":3,"file":"colors.mjs","sources":["../../../src/avatar/colors/colors.ts"],"sourcesContent":["/*\n * The colors we support generating an Avatar background color from a \"seed\" for.\n * Changing this array will change the assignment between seeds.\n * Do not change this array.\n */\nconst avatarColors = [\n '--color-bright-blue',\n '--color-bright-yellow',\n '--color-bright-pink',\n '--color-bright-orange',\n] as const;\n\n/*\n * Takes in a \"seed\" string and spits out an index for the color we should use.\n * This implementation has been synced across all three clients so that we consistently\n * generate branded avatar colors when rendering a list of Avatars.\n * Do not change this implementation.\n */\nconst hashSeed = (seed: string): number => {\n const base = 31;\n const modulo = avatarColors.length;\n\n let hashValue = 0;\n let basePow = 1;\n\n for (let i = 0; i < seed.length; i += 1) {\n hashValue = (hashValue + seed.charCodeAt(i) * basePow) % modulo;\n basePow = (basePow * base) % modulo;\n }\n\n return hashValue;\n};\n\nexport const getAvatarColorFromSeed = (seed: string): (typeof avatarColors)[number] => {\n return avatarColors[hashSeed(seed)];\n};\n"],"names":["avatarColors","hashSeed","seed","base","modulo","length","hashValue","basePow","i","charCodeAt","getAvatarColorFromSeed"],"mappings":"AAAA;;;;AAIG;AACH,MAAMA,YAAY,GAAG,CACnB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,CACf,CAAA;AAEV;;;;;AAKG;AACH,MAAMC,QAAQ,GAAIC,IAAY,IAAY;EACxC,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,MAAMC,MAAM,GAAGJ,YAAY,CAACK,MAAM,CAAA;EAElC,IAAIC,SAAS,GAAG,CAAC,CAAA;EACjB,IAAIC,OAAO,GAAG,CAAC,CAAA;AAEf,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,IAAI,CAACG,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;AACvCF,IAAAA,SAAS,GAAG,CAACA,SAAS,GAAGJ,IAAI,CAACO,UAAU,CAACD,CAAC,CAAC,GAAGD,OAAO,IAAIH,MAAM,CAAA;AAC/DG,IAAAA,OAAO,GAAIA,OAAO,GAAGJ,IAAI,GAAIC,MAAM,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOE,SAAS,CAAA;AAClB,CAAC,CAAA;AAEYI,MAAAA,sBAAsB,GAAIR,IAAY,IAAmC;AACpF,EAAA,OAAOF,YAAY,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACrC;;;;"}
1
+ {"version":3,"file":"colors.mjs","sources":["../../../src/avatar/colors/colors.ts"],"sourcesContent":["/*\n * The colors we support generating an Avatar background color from a \"seed\" for.\n * Changing this array will change the assignment between seeds.\n * Do not change this array.\n */\nconst avatarColors = [\n 'var(--color-bright-blue)',\n 'var(--color-bright-yellow)',\n 'var(--color-bright-pink)',\n 'var(--color-bright-orange)',\n] as const;\n\n/*\n * Takes in a \"seed\" string and spits out an index for the color we should use.\n * This implementation has been synced across all three clients so that we consistently\n * generate branded avatar colors when rendering a list of Avatars.\n * Do not change this implementation.\n */\nconst hashSeed = (seed: string): number => {\n const base = 31;\n const modulo = avatarColors.length;\n\n let hashValue = 0;\n let basePow = 1;\n\n for (let i = 0; i < seed.length; i += 1) {\n hashValue = (hashValue + seed.charCodeAt(i) * basePow) % modulo;\n basePow = (basePow * base) % modulo;\n }\n\n return hashValue;\n};\n\nexport const getAvatarColorFromSeed = (seed: string): (typeof avatarColors)[number] => {\n return avatarColors[hashSeed(seed)];\n};\n"],"names":["avatarColors","hashSeed","seed","base","modulo","length","hashValue","basePow","i","charCodeAt","getAvatarColorFromSeed"],"mappings":"AAAA;;;;AAIG;AACH,MAAMA,YAAY,GAAG,CACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,CACpB,CAAA;AAEV;;;;;AAKG;AACH,MAAMC,QAAQ,GAAIC,IAAY,IAAY;EACxC,MAAMC,IAAI,GAAG,EAAE,CAAA;AACf,EAAA,MAAMC,MAAM,GAAGJ,YAAY,CAACK,MAAM,CAAA;EAElC,IAAIC,SAAS,GAAG,CAAC,CAAA;EACjB,IAAIC,OAAO,GAAG,CAAC,CAAA;AAEf,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGN,IAAI,CAACG,MAAM,EAAEG,CAAC,IAAI,CAAC,EAAE;AACvCF,IAAAA,SAAS,GAAG,CAACA,SAAS,GAAGJ,IAAI,CAACO,UAAU,CAACD,CAAC,CAAC,GAAGD,OAAO,IAAIH,MAAM,CAAA;AAC/DG,IAAAA,OAAO,GAAIA,OAAO,GAAGJ,IAAI,GAAIC,MAAM,CAAA;AACrC,GAAA;AAEA,EAAA,OAAOE,SAAS,CAAA;AAClB,CAAC,CAAA;AAEYI,MAAAA,sBAAsB,GAAIR,IAAY,IAAmC;AACpF,EAAA,OAAOF,YAAY,CAACC,QAAQ,CAACC,IAAI,CAAC,CAAC,CAAA;AACrC;;;;"}
@@ -0,0 +1,207 @@
1
+ 'use strict';
2
+
3
+ var Badge = require('../badge/Badge.js');
4
+ var NotificationDot = require('../common/notificationDot/NotificationDot.js');
5
+ var StatusIcon = require('../statusIcon/StatusIcon.js');
6
+ var Circle = require('../common/circle/Circle.js');
7
+ var React = require('react');
8
+ var clsx = require('clsx');
9
+ var icons = require('@transferwise/icons');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+ var initials = require('../common/initials.js');
12
+
13
+ const AvatarViewDefaultSize = 48;
14
+ /** Non interactive avatar view has custom border width */
15
+ const mapNonInteractiveBorderWidth = {
16
+ 16: 0.667,
17
+ 24: 1,
18
+ 32: 1,
19
+ 40: 1.25,
20
+ 48: 1.5,
21
+ 56: 1.75,
22
+ 72: 2.25
23
+ };
24
+ /** Selected state has custom border width */
25
+ const mapSelectedBorderWidth = {
26
+ 16: 1,
27
+ 24: 1,
28
+ 32: 1,
29
+ 40: 2,
30
+ 48: 2,
31
+ 56: 2,
32
+ 72: 2
33
+ };
34
+ function AvatarView({
35
+ children = undefined,
36
+ size = AvatarViewDefaultSize,
37
+ selected,
38
+ notification,
39
+ badge,
40
+ entity,
41
+ action,
42
+ className,
43
+ style
44
+ }) {
45
+ return /*#__PURE__*/jsxRuntime.jsx(Interactive, {
46
+ ...action,
47
+ className: clsx.clsx('np-avatar-view', {
48
+ 'np-avatar-view-selected': selected
49
+ }, className),
50
+ children: /*#__PURE__*/jsxRuntime.jsx(Badges, {
51
+ asset: badge,
52
+ avatarProps: {
53
+ size,
54
+ notification,
55
+ selected
56
+ },
57
+ children: /*#__PURE__*/jsxRuntime.jsx(Circle, {
58
+ size: size,
59
+ fixedSize: true,
60
+ style: {
61
+ // @ts-expect-error CSS custom props allowed
62
+ '--avatar-view-selected-border-width': `${mapSelectedBorderWidth[size]}px`,
63
+ '--avatar-view-non-interactive-border-width': `${mapNonInteractiveBorderWidth[size]}px`,
64
+ ...style
65
+ },
66
+ children: children === undefined ? /*#__PURE__*/jsxRuntime.jsx(Entity, {
67
+ ...entity
68
+ }) : children
69
+ })
70
+ })
71
+ });
72
+ }
73
+ function Interactive({
74
+ children,
75
+ onClick,
76
+ href,
77
+ target,
78
+ className,
79
+ 'aria-label': ariaLabel,
80
+ 'aria-labelledby': ariaLabelledby
81
+ }) {
82
+ const elementName = onClick ? 'button' : href ? 'a' : null;
83
+ if (elementName === null) {
84
+ // non interactive
85
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
86
+ className: className,
87
+ children: children
88
+ });
89
+ }
90
+ const a11yProps = {
91
+ ariaLabel,
92
+ ariaLabelledby
93
+ };
94
+ if (elementName === 'button') {
95
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
96
+ type: "button",
97
+ className: clsx.clsx(className, 'np-avatar-view-interactive', 'btn-unstyled'),
98
+ onClick: onClick,
99
+ ...a11yProps,
100
+ children: children
101
+ });
102
+ }
103
+ if (elementName === 'a') {
104
+ return (
105
+ /*#__PURE__*/
106
+ // eslint-disable-next-line react/jsx-no-target-blank
107
+ jsxRuntime.jsx("a", {
108
+ href: href,
109
+ target: target,
110
+ rel: target === '_blank' ? 'noreferrer' : undefined,
111
+ className: clsx.clsx(className, 'np-avatar-view-interactive', 'text-no-decoration'),
112
+ ...a11yProps,
113
+ children: children
114
+ })
115
+ );
116
+ }
117
+ }
118
+ const mapBadgeSize = {
119
+ 16: 'sm',
120
+ 24: 'sm',
121
+ 32: 'sm',
122
+ 40: 'sm',
123
+ 48: 'sm',
124
+ 56: 'lg',
125
+ 72: 'lg'
126
+ };
127
+ /** AvatarView has a custom sizes for badge */
128
+ const mapNotificationSize = {
129
+ 16: 6,
130
+ 24: 8,
131
+ 32: 10,
132
+ 40: 10,
133
+ 48: 14,
134
+ 56: 16,
135
+ 72: 20
136
+ };
137
+ function Badges({
138
+ children,
139
+ asset,
140
+ avatarProps
141
+ }) {
142
+ const {
143
+ size = AvatarViewDefaultSize,
144
+ selected,
145
+ notification
146
+ } = avatarProps;
147
+ if (asset || selected || notification) {
148
+ if (asset && size > 16) {
149
+ return /*#__PURE__*/jsxRuntime.jsx(Badge, {
150
+ badge: asset,
151
+ size: mapBadgeSize[size],
152
+ children: children
153
+ });
154
+ }
155
+ if (selected && size > 16) {
156
+ return /*#__PURE__*/jsxRuntime.jsx(Badge, {
157
+ badge: /*#__PURE__*/jsxRuntime.jsx(StatusIcon, {
158
+ sentiment: "positive",
159
+ size: mapBadgeSize[size]
160
+ }),
161
+ size: mapBadgeSize[size],
162
+ children: children
163
+ });
164
+ }
165
+ if (notification) {
166
+ return /*#__PURE__*/jsxRuntime.jsx(Badge, {
167
+ badge: /*#__PURE__*/jsxRuntime.jsx(NotificationDot
168
+ // @ts-expect-error CSS custom props allowed
169
+ , {
170
+ style: {
171
+ '--badge-notification-dot-size': `${mapNotificationSize[size]}px`
172
+ }
173
+ }),
174
+ position: "top-right",
175
+ size: mapBadgeSize[size],
176
+ children: children
177
+ });
178
+ }
179
+ }
180
+ return children;
181
+ }
182
+ function Entity({
183
+ imageSrc = null,
184
+ name = null,
185
+ profileType = null
186
+ }) {
187
+ const [tryLoadImage, setTryLoadImage] = React.useState(true);
188
+ if (imageSrc && tryLoadImage) {
189
+ return /*#__PURE__*/jsxRuntime.jsx("img", {
190
+ src: imageSrc,
191
+ alt: "",
192
+ onError: () => setTryLoadImage(false)
193
+ });
194
+ }
195
+ if (profileType) {
196
+ return profileType === 'business' ? /*#__PURE__*/jsxRuntime.jsx(icons.Briefcase, {}) : /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
197
+ }
198
+ if (name) {
199
+ return /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
200
+ children: initials.getInitials(name)
201
+ });
202
+ }
203
+ return /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
204
+ }
205
+
206
+ module.exports = AvatarView;
207
+ //# sourceMappingURL=AvatarView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarView.js","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge from '../badge';\nimport { getInitials } from '../common';\nimport NotificationDot from '../common/notificationDot/NotificationDot';\nimport StatusIcon from '../statusIcon';\nimport Circle from '../common/circle';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { Briefcase, Profile } from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nconst AvatarViewDefaultSize = 48;\n\nexport type Props = PropsWithChildren<{\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n /** adds custom badge to avatar */\n badge?: React.ReactNode;\n entity?: EntityProps;\n /** changes background color to neutral and wraps component with button */\n action?: InteractiveProps;\n /** changes background color to neutral and adds predefined Badge */\n selected?: boolean;\n /** often use case to override `background-color` or `border` */\n style?: React.CSSProperties;\n}> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style'>;\n\n/** Non interactive avatar view has custom border width */\nconst mapNonInteractiveBorderWidth = {\n 16: 0.667,\n 24: 1,\n 32: 1,\n 40: 1.25,\n 48: 1.5,\n 56: 1.75,\n 72: 2.25,\n};\n\n/** Selected state has custom border width */\nconst mapSelectedBorderWidth = {\n 16: 1,\n 24: 1,\n 32: 1,\n 40: 2,\n 48: 2,\n 56: 2,\n 72: 2,\n};\n\nfunction AvatarView({\n children = undefined,\n size = AvatarViewDefaultSize,\n selected,\n notification,\n badge,\n entity,\n action,\n className,\n style,\n}: Props) {\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges asset={badge} avatarProps={{ size, notification, selected }}>\n <Circle\n size={size}\n fixedSize\n style={{\n // @ts-expect-error CSS custom props allowed\n '--avatar-view-selected-border-width': `${mapSelectedBorderWidth[size]}px`,\n '--avatar-view-non-interactive-border-width': `${mapNonInteractiveBorderWidth[size]}px`,\n ...style,\n }}\n >\n {children === undefined ? <Entity {...entity} /> : children}\n </Circle>\n </Badges>\n </Interactive>\n );\n}\n\nfunction Interactive({\n children,\n onClick,\n href,\n target,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: PropsWithChildren<InteractiveProps>) {\n const elementName: React.ElementType | null = onClick ? 'button' : href ? 'a' : null;\n if (elementName === null) {\n // non interactive\n return <div className={className}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, 'np-avatar-view-interactive', 'btn-unstyled')}\n onClick={onClick}\n {...a11yProps}\n >\n {children}\n </button>\n );\n }\n if (elementName === 'a') {\n return (\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noreferrer' : undefined}\n className={clsx(className, 'np-avatar-view-interactive', 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\nconst mapBadgeSize = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** AvatarView has a custom sizes for badge */\nconst mapNotificationSize = {\n 16: 6,\n 24: 8,\n 32: 10,\n 40: 10,\n 48: 14,\n 56: 16,\n 72: 20,\n};\n\ntype BadgesProps = PropsWithChildren<{\n asset: React.ReactNode;\n avatarProps: Pick<Props, 'selected' | 'size' | 'notification'>;\n}>;\n\nfunction Badges({ children, asset, avatarProps }: BadgesProps) {\n const { size = AvatarViewDefaultSize, selected, notification } = avatarProps;\n if (asset || selected || notification) {\n if (asset && size > 16) {\n return (\n <Badge badge={asset} size={mapBadgeSize[size]}>\n {children}\n </Badge>\n );\n }\n if (selected && size > 16) {\n return (\n <Badge\n badge={<StatusIcon sentiment=\"positive\" size={mapBadgeSize[size]} />}\n size={mapBadgeSize[size]}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return (\n <Badge\n badge={\n <NotificationDot\n // @ts-expect-error CSS custom props allowed\n style={{ '--badge-notification-dot-size': `${mapNotificationSize[size]}px` }}\n />\n }\n position=\"top-right\"\n size={mapBadgeSize[size]}\n >\n {children}\n </Badge>\n );\n }\n }\n return children;\n}\n\nexport type EntityProps = {\n imageSrc?: string | null;\n name?: string | null;\n profileType?: 'personal' | 'business' | null;\n};\n\nfunction Entity({ imageSrc = null, name = null, profileType = null }: EntityProps) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imageSrc && tryLoadImage) {\n return <img src={imageSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (profileType) {\n return profileType === 'business' ? <Briefcase /> : <Profile />;\n }\n if (name) {\n return <>{getInitials(name)}</>;\n }\n return <Profile />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarViewDefaultSize","mapNonInteractiveBorderWidth","mapSelectedBorderWidth","AvatarView","children","undefined","size","selected","notification","badge","entity","action","className","style","_jsx","Interactive","clsx","Badges","asset","avatarProps","Circle","fixedSize","Entity","onClick","href","target","ariaLabel","ariaLabelledby","elementName","a11yProps","type","rel","mapBadgeSize","mapNotificationSize","Badge","StatusIcon","sentiment","NotificationDot","position","imageSrc","name","profileType","tryLoadImage","setTryLoadImage","useState","src","alt","onError","Briefcase","Profile","_Fragment","getInitials"],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ import Badge from '../badge/Badge.mjs';
2
+ import NotificationDot from '../common/notificationDot/NotificationDot.mjs';
3
+ import StatusIcon from '../statusIcon/StatusIcon.mjs';
4
+ import Circle from '../common/circle/Circle.mjs';
5
+ import { useState } from 'react';
6
+ import { clsx } from 'clsx';
7
+ import { Briefcase, Profile } from '@transferwise/icons';
8
+ import { jsx, Fragment } from 'react/jsx-runtime';
9
+ import { getInitials } from '../common/initials.mjs';
10
+
11
+ const AvatarViewDefaultSize = 48;
12
+ /** Non interactive avatar view has custom border width */
13
+ const mapNonInteractiveBorderWidth = {
14
+ 16: 0.667,
15
+ 24: 1,
16
+ 32: 1,
17
+ 40: 1.25,
18
+ 48: 1.5,
19
+ 56: 1.75,
20
+ 72: 2.25
21
+ };
22
+ /** Selected state has custom border width */
23
+ const mapSelectedBorderWidth = {
24
+ 16: 1,
25
+ 24: 1,
26
+ 32: 1,
27
+ 40: 2,
28
+ 48: 2,
29
+ 56: 2,
30
+ 72: 2
31
+ };
32
+ function AvatarView({
33
+ children = undefined,
34
+ size = AvatarViewDefaultSize,
35
+ selected,
36
+ notification,
37
+ badge,
38
+ entity,
39
+ action,
40
+ className,
41
+ style
42
+ }) {
43
+ return /*#__PURE__*/jsx(Interactive, {
44
+ ...action,
45
+ className: clsx('np-avatar-view', {
46
+ 'np-avatar-view-selected': selected
47
+ }, className),
48
+ children: /*#__PURE__*/jsx(Badges, {
49
+ asset: badge,
50
+ avatarProps: {
51
+ size,
52
+ notification,
53
+ selected
54
+ },
55
+ children: /*#__PURE__*/jsx(Circle, {
56
+ size: size,
57
+ fixedSize: true,
58
+ style: {
59
+ // @ts-expect-error CSS custom props allowed
60
+ '--avatar-view-selected-border-width': `${mapSelectedBorderWidth[size]}px`,
61
+ '--avatar-view-non-interactive-border-width': `${mapNonInteractiveBorderWidth[size]}px`,
62
+ ...style
63
+ },
64
+ children: children === undefined ? /*#__PURE__*/jsx(Entity, {
65
+ ...entity
66
+ }) : children
67
+ })
68
+ })
69
+ });
70
+ }
71
+ function Interactive({
72
+ children,
73
+ onClick,
74
+ href,
75
+ target,
76
+ className,
77
+ 'aria-label': ariaLabel,
78
+ 'aria-labelledby': ariaLabelledby
79
+ }) {
80
+ const elementName = onClick ? 'button' : href ? 'a' : null;
81
+ if (elementName === null) {
82
+ // non interactive
83
+ return /*#__PURE__*/jsx("div", {
84
+ className: className,
85
+ children: children
86
+ });
87
+ }
88
+ const a11yProps = {
89
+ ariaLabel,
90
+ ariaLabelledby
91
+ };
92
+ if (elementName === 'button') {
93
+ return /*#__PURE__*/jsx("button", {
94
+ type: "button",
95
+ className: clsx(className, 'np-avatar-view-interactive', 'btn-unstyled'),
96
+ onClick: onClick,
97
+ ...a11yProps,
98
+ children: children
99
+ });
100
+ }
101
+ if (elementName === 'a') {
102
+ return (
103
+ /*#__PURE__*/
104
+ // eslint-disable-next-line react/jsx-no-target-blank
105
+ jsx("a", {
106
+ href: href,
107
+ target: target,
108
+ rel: target === '_blank' ? 'noreferrer' : undefined,
109
+ className: clsx(className, 'np-avatar-view-interactive', 'text-no-decoration'),
110
+ ...a11yProps,
111
+ children: children
112
+ })
113
+ );
114
+ }
115
+ }
116
+ const mapBadgeSize = {
117
+ 16: 'sm',
118
+ 24: 'sm',
119
+ 32: 'sm',
120
+ 40: 'sm',
121
+ 48: 'sm',
122
+ 56: 'lg',
123
+ 72: 'lg'
124
+ };
125
+ /** AvatarView has a custom sizes for badge */
126
+ const mapNotificationSize = {
127
+ 16: 6,
128
+ 24: 8,
129
+ 32: 10,
130
+ 40: 10,
131
+ 48: 14,
132
+ 56: 16,
133
+ 72: 20
134
+ };
135
+ function Badges({
136
+ children,
137
+ asset,
138
+ avatarProps
139
+ }) {
140
+ const {
141
+ size = AvatarViewDefaultSize,
142
+ selected,
143
+ notification
144
+ } = avatarProps;
145
+ if (asset || selected || notification) {
146
+ if (asset && size > 16) {
147
+ return /*#__PURE__*/jsx(Badge, {
148
+ badge: asset,
149
+ size: mapBadgeSize[size],
150
+ children: children
151
+ });
152
+ }
153
+ if (selected && size > 16) {
154
+ return /*#__PURE__*/jsx(Badge, {
155
+ badge: /*#__PURE__*/jsx(StatusIcon, {
156
+ sentiment: "positive",
157
+ size: mapBadgeSize[size]
158
+ }),
159
+ size: mapBadgeSize[size],
160
+ children: children
161
+ });
162
+ }
163
+ if (notification) {
164
+ return /*#__PURE__*/jsx(Badge, {
165
+ badge: /*#__PURE__*/jsx(NotificationDot
166
+ // @ts-expect-error CSS custom props allowed
167
+ , {
168
+ style: {
169
+ '--badge-notification-dot-size': `${mapNotificationSize[size]}px`
170
+ }
171
+ }),
172
+ position: "top-right",
173
+ size: mapBadgeSize[size],
174
+ children: children
175
+ });
176
+ }
177
+ }
178
+ return children;
179
+ }
180
+ function Entity({
181
+ imageSrc = null,
182
+ name = null,
183
+ profileType = null
184
+ }) {
185
+ const [tryLoadImage, setTryLoadImage] = useState(true);
186
+ if (imageSrc && tryLoadImage) {
187
+ return /*#__PURE__*/jsx("img", {
188
+ src: imageSrc,
189
+ alt: "",
190
+ onError: () => setTryLoadImage(false)
191
+ });
192
+ }
193
+ if (profileType) {
194
+ return profileType === 'business' ? /*#__PURE__*/jsx(Briefcase, {}) : /*#__PURE__*/jsx(Profile, {});
195
+ }
196
+ if (name) {
197
+ return /*#__PURE__*/jsx(Fragment, {
198
+ children: getInitials(name)
199
+ });
200
+ }
201
+ return /*#__PURE__*/jsx(Profile, {});
202
+ }
203
+
204
+ export { AvatarView as default };
205
+ //# sourceMappingURL=AvatarView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarView.mjs","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge from '../badge';\nimport { getInitials } from '../common';\nimport NotificationDot from '../common/notificationDot/NotificationDot';\nimport StatusIcon from '../statusIcon';\nimport Circle from '../common/circle';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { Briefcase, Profile } from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nconst AvatarViewDefaultSize = 48;\n\nexport type Props = PropsWithChildren<{\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n /** adds custom badge to avatar */\n badge?: React.ReactNode;\n entity?: EntityProps;\n /** changes background color to neutral and wraps component with button */\n action?: InteractiveProps;\n /** changes background color to neutral and adds predefined Badge */\n selected?: boolean;\n /** often use case to override `background-color` or `border` */\n style?: React.CSSProperties;\n}> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'style'>;\n\n/** Non interactive avatar view has custom border width */\nconst mapNonInteractiveBorderWidth = {\n 16: 0.667,\n 24: 1,\n 32: 1,\n 40: 1.25,\n 48: 1.5,\n 56: 1.75,\n 72: 2.25,\n};\n\n/** Selected state has custom border width */\nconst mapSelectedBorderWidth = {\n 16: 1,\n 24: 1,\n 32: 1,\n 40: 2,\n 48: 2,\n 56: 2,\n 72: 2,\n};\n\nfunction AvatarView({\n children = undefined,\n size = AvatarViewDefaultSize,\n selected,\n notification,\n badge,\n entity,\n action,\n className,\n style,\n}: Props) {\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges asset={badge} avatarProps={{ size, notification, selected }}>\n <Circle\n size={size}\n fixedSize\n style={{\n // @ts-expect-error CSS custom props allowed\n '--avatar-view-selected-border-width': `${mapSelectedBorderWidth[size]}px`,\n '--avatar-view-non-interactive-border-width': `${mapNonInteractiveBorderWidth[size]}px`,\n ...style,\n }}\n >\n {children === undefined ? <Entity {...entity} /> : children}\n </Circle>\n </Badges>\n </Interactive>\n );\n}\n\nfunction Interactive({\n children,\n onClick,\n href,\n target,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: PropsWithChildren<InteractiveProps>) {\n const elementName: React.ElementType | null = onClick ? 'button' : href ? 'a' : null;\n if (elementName === null) {\n // non interactive\n return <div className={className}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, 'np-avatar-view-interactive', 'btn-unstyled')}\n onClick={onClick}\n {...a11yProps}\n >\n {children}\n </button>\n );\n }\n if (elementName === 'a') {\n return (\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noreferrer' : undefined}\n className={clsx(className, 'np-avatar-view-interactive', 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\nconst mapBadgeSize = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** AvatarView has a custom sizes for badge */\nconst mapNotificationSize = {\n 16: 6,\n 24: 8,\n 32: 10,\n 40: 10,\n 48: 14,\n 56: 16,\n 72: 20,\n};\n\ntype BadgesProps = PropsWithChildren<{\n asset: React.ReactNode;\n avatarProps: Pick<Props, 'selected' | 'size' | 'notification'>;\n}>;\n\nfunction Badges({ children, asset, avatarProps }: BadgesProps) {\n const { size = AvatarViewDefaultSize, selected, notification } = avatarProps;\n if (asset || selected || notification) {\n if (asset && size > 16) {\n return (\n <Badge badge={asset} size={mapBadgeSize[size]}>\n {children}\n </Badge>\n );\n }\n if (selected && size > 16) {\n return (\n <Badge\n badge={<StatusIcon sentiment=\"positive\" size={mapBadgeSize[size]} />}\n size={mapBadgeSize[size]}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return (\n <Badge\n badge={\n <NotificationDot\n // @ts-expect-error CSS custom props allowed\n style={{ '--badge-notification-dot-size': `${mapNotificationSize[size]}px` }}\n />\n }\n position=\"top-right\"\n size={mapBadgeSize[size]}\n >\n {children}\n </Badge>\n );\n }\n }\n return children;\n}\n\nexport type EntityProps = {\n imageSrc?: string | null;\n name?: string | null;\n profileType?: 'personal' | 'business' | null;\n};\n\nfunction Entity({ imageSrc = null, name = null, profileType = null }: EntityProps) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imageSrc && tryLoadImage) {\n return <img src={imageSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (profileType) {\n return profileType === 'business' ? <Briefcase /> : <Profile />;\n }\n if (name) {\n return <>{getInitials(name)}</>;\n }\n return <Profile />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarViewDefaultSize","mapNonInteractiveBorderWidth","mapSelectedBorderWidth","AvatarView","children","undefined","size","selected","notification","badge","entity","action","className","style","_jsx","Interactive","clsx","Badges","asset","avatarProps","Circle","fixedSize","Entity","onClick","href","target","ariaLabel","ariaLabelledby","elementName","a11yProps","type","rel","mapBadgeSize","mapNotificationSize","Badge","StatusIcon","sentiment","NotificationDot","position","imageSrc","name","profileType","tryLoadImage","setTryLoadImage","useState","src","alt","onError","Briefcase","Profile","_Fragment","getInitials"],"mappings":"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"}
@@ -9,6 +9,7 @@ var StatusIcon = require('../statusIcon/StatusIcon.js');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
10
  var profileType = require('../common/propsValues/profileType.js');
11
11
  var size = require('../common/propsValues/size.js');
12
+ var initials = require('../common/initials.js');
12
13
 
13
14
  const OptionalBadge = ({
14
15
  url,
@@ -44,6 +45,9 @@ const OptionalBadge = ({
44
45
  children: children
45
46
  });
46
47
  };
48
+ /**
49
+ * @deprecated Use `AvatarView` component instead
50
+ */
47
51
  const AvatarWrapper = ({
48
52
  url,
49
53
  'aria-label': ariaLabel,
@@ -94,9 +98,9 @@ const AvatarWrapper = ({
94
98
  return {
95
99
  type: avatarTypes.AvatarType.INITIALS,
96
100
  children: /*#__PURE__*/jsxRuntime.jsx(jsxRuntime.Fragment, {
97
- children: getInitials(name)
101
+ children: initials.getInitials(name)
98
102
  }),
99
- backgroundColorSeed: profileId?.toString(),
103
+ backgroundColorSeed: name?.toString(),
100
104
  ...updatedAvatarProps
101
105
  };
102
106
  }
@@ -120,13 +124,6 @@ const AvatarWrapper = ({
120
124
  })
121
125
  });
122
126
  };
123
- function getInitials(name) {
124
- const allInitials = name.split(' ').map(part => part[0]).join('').toUpperCase();
125
- if (allInitials.length === 1) {
126
- return allInitials[0];
127
- }
128
- return allInitials[0] + allInitials.slice(-1);
129
- }
130
127
 
131
128
  module.exports = AvatarWrapper;
132
129
  //# sourceMappingURL=AvatarWrapper.js.map