@transferwise/components 0.0.0-experimental-8d0974a → 0.0.0-experimental-53b8447

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 (207) hide show
  1. package/build/avatar/Avatar.js +3 -0
  2. package/build/avatar/Avatar.js.map +1 -1
  3. package/build/avatar/Avatar.mjs +3 -0
  4. package/build/avatar/Avatar.mjs.map +1 -1
  5. package/build/avatarView/AvatarView.js +187 -0
  6. package/build/avatarView/AvatarView.js.map +1 -0
  7. package/build/avatarView/AvatarView.mjs +185 -0
  8. package/build/avatarView/AvatarView.mjs.map +1 -0
  9. package/build/avatarView/NotificationDot.js +56 -0
  10. package/build/avatarView/NotificationDot.js.map +1 -0
  11. package/build/avatarView/NotificationDot.mjs +54 -0
  12. package/build/avatarView/NotificationDot.mjs.map +1 -0
  13. package/build/avatarWrapper/AvatarWrapper.js +6 -1
  14. package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
  15. package/build/avatarWrapper/AvatarWrapper.mjs +6 -1
  16. package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
  17. package/build/badge/Badge.js +8 -1
  18. package/build/badge/Badge.js.map +1 -1
  19. package/build/badge/Badge.mjs +8 -1
  20. package/build/badge/Badge.mjs.map +1 -1
  21. package/build/badge/BadgeAssets.js +63 -0
  22. package/build/badge/BadgeAssets.js.map +1 -0
  23. package/build/badge/BadgeAssets.mjs +61 -0
  24. package/build/badge/BadgeAssets.mjs.map +1 -0
  25. package/build/common/circle/Circle.js +29 -3
  26. package/build/common/circle/Circle.js.map +1 -1
  27. package/build/common/circle/Circle.mjs +29 -3
  28. package/build/common/circle/Circle.mjs.map +1 -1
  29. package/build/dateLookup/DateLookup.js +6 -6
  30. package/build/dateLookup/DateLookup.js.map +1 -1
  31. package/build/dateLookup/DateLookup.mjs +6 -6
  32. package/build/dateLookup/DateLookup.mjs.map +1 -1
  33. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js +1 -4
  34. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js.map +1 -1
  35. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs +1 -4
  36. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs.map +1 -1
  37. package/build/i18n/de.json +5 -0
  38. package/build/i18n/de.json.js +5 -0
  39. package/build/i18n/de.json.js.map +1 -1
  40. package/build/i18n/de.json.mjs +5 -0
  41. package/build/i18n/de.json.mjs.map +1 -1
  42. package/build/i18n/es.json +5 -0
  43. package/build/i18n/es.json.js +5 -0
  44. package/build/i18n/es.json.js.map +1 -1
  45. package/build/i18n/es.json.mjs +5 -0
  46. package/build/i18n/es.json.mjs.map +1 -1
  47. package/build/i18n/fr.json +5 -0
  48. package/build/i18n/fr.json.js +5 -0
  49. package/build/i18n/fr.json.js.map +1 -1
  50. package/build/i18n/fr.json.mjs +5 -0
  51. package/build/i18n/fr.json.mjs.map +1 -1
  52. package/build/i18n/hu.json +5 -0
  53. package/build/i18n/hu.json.js +5 -0
  54. package/build/i18n/hu.json.js.map +1 -1
  55. package/build/i18n/hu.json.mjs +5 -0
  56. package/build/i18n/hu.json.mjs.map +1 -1
  57. package/build/i18n/id.json +5 -0
  58. package/build/i18n/id.json.js +5 -0
  59. package/build/i18n/id.json.js.map +1 -1
  60. package/build/i18n/id.json.mjs +5 -0
  61. package/build/i18n/id.json.mjs.map +1 -1
  62. package/build/i18n/it.json +5 -0
  63. package/build/i18n/it.json.js +5 -0
  64. package/build/i18n/it.json.js.map +1 -1
  65. package/build/i18n/it.json.mjs +5 -0
  66. package/build/i18n/it.json.mjs.map +1 -1
  67. package/build/i18n/ja.json +5 -0
  68. package/build/i18n/ja.json.js +5 -0
  69. package/build/i18n/ja.json.js.map +1 -1
  70. package/build/i18n/ja.json.mjs +5 -0
  71. package/build/i18n/ja.json.mjs.map +1 -1
  72. package/build/i18n/pl.json +5 -0
  73. package/build/i18n/pl.json.js +5 -0
  74. package/build/i18n/pl.json.js.map +1 -1
  75. package/build/i18n/pl.json.mjs +5 -0
  76. package/build/i18n/pl.json.mjs.map +1 -1
  77. package/build/i18n/pt.json +5 -0
  78. package/build/i18n/pt.json.js +5 -0
  79. package/build/i18n/pt.json.js.map +1 -1
  80. package/build/i18n/pt.json.mjs +5 -0
  81. package/build/i18n/pt.json.mjs.map +1 -1
  82. package/build/i18n/ro.json +5 -0
  83. package/build/i18n/ro.json.js +5 -0
  84. package/build/i18n/ro.json.js.map +1 -1
  85. package/build/i18n/ro.json.mjs +5 -0
  86. package/build/i18n/ro.json.mjs.map +1 -1
  87. package/build/i18n/ru.json +5 -0
  88. package/build/i18n/ru.json.js +5 -0
  89. package/build/i18n/ru.json.js.map +1 -1
  90. package/build/i18n/ru.json.mjs +5 -0
  91. package/build/i18n/ru.json.mjs.map +1 -1
  92. package/build/i18n/tr.json +5 -0
  93. package/build/i18n/tr.json.js +5 -0
  94. package/build/i18n/tr.json.js.map +1 -1
  95. package/build/i18n/tr.json.mjs +5 -0
  96. package/build/i18n/tr.json.mjs.map +1 -1
  97. package/build/index.js +15 -4
  98. package/build/index.js.map +1 -1
  99. package/build/index.mjs +10 -2
  100. package/build/index.mjs.map +1 -1
  101. package/build/main.css +98 -25
  102. package/build/statusIcon/StatusIcon.js +2 -2
  103. package/build/statusIcon/StatusIcon.js.map +1 -1
  104. package/build/statusIcon/StatusIcon.mjs +2 -2
  105. package/build/statusIcon/StatusIcon.mjs.map +1 -1
  106. package/build/styles/avatarGroup/AvatarGroup.css +28 -0
  107. package/build/styles/avatarView/AvatarView.css +28 -0
  108. package/build/styles/avatarView/NotificationDot.css +20 -0
  109. package/build/styles/badge/Badge.css +6 -5
  110. package/build/styles/common/circle/Circle.css +36 -0
  111. package/build/styles/main.css +98 -25
  112. package/build/styles/statusIcon/StatusIcon.css +0 -20
  113. package/build/types/avatar/Avatar.d.ts +3 -0
  114. package/build/types/avatar/Avatar.d.ts.map +1 -1
  115. package/build/types/avatarGroup/AvatarGroup.d.ts +18 -0
  116. package/build/types/avatarGroup/AvatarGroup.d.ts.map +1 -0
  117. package/build/types/avatarGroup/index.d.ts +3 -0
  118. package/build/types/avatarGroup/index.d.ts.map +1 -0
  119. package/build/types/avatarView/AvatarView.d.ts +25 -0
  120. package/build/types/avatarView/AvatarView.d.ts.map +1 -0
  121. package/build/types/avatarView/NotificationDot.d.ts +8 -0
  122. package/build/types/avatarView/NotificationDot.d.ts.map +1 -0
  123. package/build/types/avatarView/index.d.ts +3 -0
  124. package/build/types/avatarView/index.d.ts.map +1 -0
  125. package/build/types/avatarWrapper/AvatarWrapper.d.ts +3 -0
  126. package/build/types/avatarWrapper/AvatarWrapper.d.ts.map +1 -1
  127. package/build/types/badge/Badge.d.ts +5 -1
  128. package/build/types/badge/Badge.d.ts.map +1 -1
  129. package/build/types/badge/BadgeAssets.d.ts +15 -0
  130. package/build/types/badge/BadgeAssets.d.ts.map +1 -0
  131. package/build/types/badge/index.d.ts +2 -0
  132. package/build/types/badge/index.d.ts.map +1 -1
  133. package/build/types/common/circle/Circle.d.ts +3 -1
  134. package/build/types/common/circle/Circle.d.ts.map +1 -1
  135. package/build/types/common/dateUtils/index.d.ts +0 -1
  136. package/build/types/common/dateUtils/index.d.ts.map +1 -1
  137. package/build/types/dateLookup/DateLookup.d.ts +1 -1
  138. package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
  139. package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts +1 -1
  140. package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts.map +1 -1
  141. package/build/types/index.d.ts +3 -1
  142. package/build/types/index.d.ts.map +1 -1
  143. package/build/types/statusIcon/StatusIcon.d.ts +6 -2
  144. package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
  145. package/package.json +3 -3
  146. package/src/avatar/Avatar.tsx +3 -0
  147. package/src/avatarGroup/AvatarGroup.css +28 -0
  148. package/src/avatarGroup/AvatarGroup.less +32 -0
  149. package/src/avatarGroup/AvatarGroup.story.tsx +195 -0
  150. package/src/avatarGroup/AvatarGroup.tsx +80 -0
  151. package/src/avatarGroup/index.ts +2 -0
  152. package/src/avatarView/AvatarView.css +28 -0
  153. package/src/avatarView/AvatarView.less +16 -0
  154. package/src/avatarView/AvatarView.story.tsx +573 -0
  155. package/src/avatarView/AvatarView.tsx +184 -0
  156. package/src/avatarView/NotificationDot.css +20 -0
  157. package/src/avatarView/NotificationDot.less +24 -0
  158. package/src/avatarView/NotificationDot.tsx +32 -0
  159. package/src/avatarView/index.ts +2 -0
  160. package/src/avatarWrapper/AvatarWrapper.story.tsx +6 -0
  161. package/src/avatarWrapper/AvatarWrapper.tsx +3 -0
  162. package/src/badge/Badge.css +6 -5
  163. package/src/badge/Badge.less +4 -3
  164. package/src/badge/Badge.tsx +8 -1
  165. package/src/badge/BadgeAssets.tsx +65 -0
  166. package/src/badge/index.ts +3 -0
  167. package/src/common/circle/Circle.css +36 -0
  168. package/src/common/circle/Circle.less +42 -1
  169. package/src/common/circle/Circle.tsx +41 -3
  170. package/src/common/dateUtils/index.ts +0 -1
  171. package/src/dateLookup/DateLookup.tests.story.tsx +5 -40
  172. package/src/dateLookup/DateLookup.tsx +11 -9
  173. package/src/dateLookup/dayCalendar/table/DayCalendarTable.tsx +2 -5
  174. package/src/decision/Decision.story.tsx +10 -46
  175. package/src/flowNavigation/FlowNavigation.story.js +10 -39
  176. package/src/i18n/de.json +5 -0
  177. package/src/i18n/es.json +5 -0
  178. package/src/i18n/fr.json +5 -0
  179. package/src/i18n/hu.json +5 -0
  180. package/src/i18n/id.json +5 -0
  181. package/src/i18n/it.json +5 -0
  182. package/src/i18n/ja.json +5 -0
  183. package/src/i18n/pl.json +5 -0
  184. package/src/i18n/pt.json +5 -0
  185. package/src/i18n/ro.json +5 -0
  186. package/src/i18n/ru.json +5 -0
  187. package/src/i18n/tr.json +5 -0
  188. package/src/index.ts +4 -0
  189. package/src/listItem/ListItem.story.tsx +6 -43
  190. package/src/main.css +98 -25
  191. package/src/main.less +2 -0
  192. package/src/navigationOption/NavigationOption.story.js +14 -65
  193. package/src/overlayHeader/OverlayHeader.story.tsx +5 -10
  194. package/src/radio/Radio.story.tsx +5 -5
  195. package/src/radioGroup/RadioGroup.story.tsx +3 -3
  196. package/src/selectOption/SelectOption.story.tsx +31 -30
  197. package/src/statusIcon/StatusIcon.css +0 -20
  198. package/src/statusIcon/StatusIcon.less +0 -17
  199. package/src/statusIcon/StatusIcon.tsx +14 -4
  200. package/src/tile/Tile.story.tsx +2 -6
  201. package/build/common/dateUtils/getDateView/getDateView.js +0 -10
  202. package/build/common/dateUtils/getDateView/getDateView.js.map +0 -1
  203. package/build/common/dateUtils/getDateView/getDateView.mjs +0 -8
  204. package/build/common/dateUtils/getDateView/getDateView.mjs.map +0 -1
  205. package/build/types/common/dateUtils/getDateView/getDateView.d.ts +0 -2
  206. package/build/types/common/dateUtils/getDateView/getDateView.d.ts.map +0 -1
  207. package/src/common/dateUtils/getDateView/getDateView.ts +0 -5
@@ -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,
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { getBrandColorFromSeed, Theme } from '../common';\n\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 ? getBrandColorFromSeed(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","getBrandColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;;;AA6BA,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,GACnCY,4BAAqB,CAACZ,mBAAmB,CAAC,GAC1Ca,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 { getBrandColorFromSeed, Theme } from '../common';\n\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 ? getBrandColorFromSeed(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","getBrandColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;;;AA6BA,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,4BAAqB,CAACZ,mBAAmB,CAAC,GAC1Ca,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,
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.mjs","sources":["../../src/avatar/Avatar.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useMemo } from 'react';\n\nimport { getBrandColorFromSeed, Theme } from '../common';\n\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 ? getBrandColorFromSeed(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","getBrandColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;AA6BA,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,GACnCY,qBAAqB,CAACZ,mBAAmB,CAAC,GAC1Ca,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 { getBrandColorFromSeed, Theme } from '../common';\n\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 ? getBrandColorFromSeed(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","getBrandColorFromSeed","undefined","_jsx","Circle","fixedSize","clsx","Boolean","style"],"mappings":";;;;;;;AA6BA,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,qBAAqB,CAACZ,mBAAmB,CAAC,GAC1Ca,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;;;;"}
@@ -0,0 +1,187 @@
1
+ 'use strict';
2
+
3
+ var Badge = require('../badge/Badge.js');
4
+ var BadgeAssets = require('../badge/BadgeAssets.js');
5
+ var NotificationDot = require('./NotificationDot.js');
6
+ var Circle = require('../common/circle/Circle.js');
7
+ var Image = require('../image/Image.js');
8
+ var React = require('react');
9
+ var clsx = require('clsx');
10
+ var icons = require('@transferwise/icons');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+ var initials = require('../common/initials.js');
13
+ var size = require('../common/propsValues/size.js');
14
+
15
+ function AvatarView({
16
+ children = undefined,
17
+ size = 48,
18
+ selected,
19
+ notification,
20
+ badge,
21
+ action,
22
+ className,
23
+ style,
24
+ imgSrc,
25
+ type,
26
+ name
27
+ }) {
28
+ const isInteractive = Boolean(action?.onClick ?? action?.href);
29
+ return /*#__PURE__*/jsxRuntime.jsx(Interactive, {
30
+ ...action,
31
+ className: clsx.clsx('np-avatar-view', {
32
+ 'np-avatar-view-selected': selected
33
+ }, className),
34
+ children: /*#__PURE__*/jsxRuntime.jsx(Badges, {
35
+ avatar: {
36
+ size,
37
+ notification,
38
+ selected
39
+ },
40
+ ...badge,
41
+ children: /*#__PURE__*/jsxRuntime.jsx(Circle, {
42
+ size: size,
43
+ fixedSize: true,
44
+ className: clsx.clsx('np-avatar-view-content'),
45
+ enableBorder: !isInteractive || selected,
46
+ style: {
47
+ ...(selected && {
48
+ '--circle-border-color': 'var(--color-interactive-primary)'
49
+ }),
50
+ backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',
51
+ ...style
52
+ },
53
+ children: children === undefined ? /*#__PURE__*/jsxRuntime.jsx(Profile, {
54
+ imgSrc,
55
+ type,
56
+ name
57
+ }) : children
58
+ })
59
+ })
60
+ });
61
+ }
62
+ function Interactive({
63
+ children,
64
+ onClick,
65
+ href,
66
+ target,
67
+ className,
68
+ 'aria-label': ariaLabel,
69
+ 'aria-labelledby': ariaLabelledby
70
+ }) {
71
+ const elementName = onClick ? 'button' : href ? 'a' : null;
72
+ if (elementName === null) {
73
+ // non interactive
74
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
75
+ className: clsx.clsx(className, 'np-avatar-view-non-interactive'),
76
+ children: children
77
+ });
78
+ }
79
+ const a11yProps = {
80
+ ariaLabel,
81
+ ariaLabelledby
82
+ };
83
+ if (elementName === 'button') {
84
+ return /*#__PURE__*/jsxRuntime.jsx("button", {
85
+ type: "button",
86
+ className: clsx.clsx(className, 'btn-unstyled'),
87
+ onClick: onClick,
88
+ ...a11yProps,
89
+ children: children
90
+ });
91
+ }
92
+ if (elementName === 'a') {
93
+ return (
94
+ /*#__PURE__*/
95
+ // eslint-disable-next-line react/jsx-no-target-blank
96
+ jsxRuntime.jsx("a", {
97
+ href: href,
98
+ target: target,
99
+ rel: target === '_blank' ? 'noreferrer' : undefined,
100
+ className: clsx.clsx(className, 'text-no-decoration'),
101
+ ...a11yProps,
102
+ children: children
103
+ })
104
+ );
105
+ }
106
+ }
107
+ /** Size of badge depends on size of avatar */
108
+ const MAP_BADGE_ASSET_SIZE = {
109
+ 16: 'sm',
110
+ 24: 'sm',
111
+ 32: 'sm',
112
+ 40: 'sm',
113
+ 48: 'sm',
114
+ 56: 'lg',
115
+ 72: 'lg'
116
+ };
117
+ /** Certain sizes of AvatarView has a custom offset of Badge */
118
+ const MAP_BADGE_POSITION = {
119
+ 24: -6,
120
+ 32: -4
121
+ };
122
+ /**
123
+ * Adds build-in badges to AvatarView
124
+ */
125
+ function Badges({
126
+ children,
127
+ avatar,
128
+ ...badge
129
+ }) {
130
+ const {
131
+ size: size$1 = 48,
132
+ selected,
133
+ notification
134
+ } = avatar;
135
+ const anyCustomBadge = Object.keys(badge).length > 0;
136
+ if ((anyCustomBadge || selected) && size$1 > 16) {
137
+ const badgeSize = MAP_BADGE_ASSET_SIZE[size$1] ?? size.Size.SMALL;
138
+ return /*#__PURE__*/jsxRuntime.jsx(Badge, {
139
+ size: badgeSize,
140
+ badge: /*#__PURE__*/jsxRuntime.jsx(BadgeAssets, {
141
+ ...(selected ? {
142
+ status: 'positive'
143
+ } : badge),
144
+ size: badgeSize
145
+ }),
146
+ style: {
147
+ // @ts-expect-error CSS custom props allowed
148
+ '--badge-content-position': `${MAP_BADGE_POSITION[size$1] ?? 0}px`
149
+ },
150
+ children: children
151
+ });
152
+ }
153
+ if (notification) {
154
+ return /*#__PURE__*/jsxRuntime.jsx(NotificationDot, {
155
+ avatarSize: size$1,
156
+ children: children
157
+ });
158
+ }
159
+ return children;
160
+ }
161
+ /**
162
+ * Common logic for entities (personal & business profiles or recipients)
163
+ */
164
+ function Profile({
165
+ imgSrc,
166
+ name,
167
+ type
168
+ }) {
169
+ const [tryLoadImage, setTryLoadImage] = React.useState(true);
170
+ if (imgSrc && tryLoadImage) {
171
+ return /*#__PURE__*/jsxRuntime.jsx(Image.default, {
172
+ src: imgSrc,
173
+ alt: "",
174
+ onError: () => setTryLoadImage(false)
175
+ });
176
+ }
177
+ if (type) {
178
+ return type === 'business' ? /*#__PURE__*/jsxRuntime.jsx(icons.Briefcase, {}) : /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
179
+ }
180
+ if (name) {
181
+ return initials.getInitials(name);
182
+ }
183
+ return /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
184
+ }
185
+
186
+ module.exports = AvatarView;
187
+ //# sourceMappingURL=AvatarView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarView.js","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge, { BadgeAssets, BadgeProps, BadgeAssetsProps } from '../badge';\nimport NotificationDot from './NotificationDot';\nimport Circle, { CircleProps } from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (personal initials or business name), it will be boilded down to 1 or 2 chars (initials)\n */\n name?: string | null;\n type?: 'personal' | 'business';\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n // badge?: React.ReactNode;\n badge?: BadgeAssetsProps;\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?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'children'>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n action,\n className,\n style,\n imgSrc,\n type,\n name,\n}: Props) {\n const isInteractive = Boolean(action?.onClick ?? action?.href);\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!isInteractive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : 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={clsx(className, 'np-avatar-view-non-interactive')}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, '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, 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\n/** Size of badge depends on size of avatar */\nconst MAP_BADGE_ASSET_SIZE = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** Certain sizes of AvatarView has a custom offset of Badge */\nconst MAP_BADGE_POSITION = {\n 24: -6,\n 32: -4,\n};\n\ntype BadgesProps = BadgeAssetsProps &\n PropsWithChildren<{\n avatar: Pick<Props, 'selected' | 'size' | 'notification'>;\n }>;\n\n/**\n * Adds build-in badges to AvatarView\n */\nfunction Badges({ children, avatar, ...badge }: BadgesProps) {\n const { size = 48, selected, notification } = avatar;\n const anyCustomBadge = Object.keys(badge).length > 0;\n if ((anyCustomBadge || selected) && size > 16) {\n const badgeSize: BadgeProps['size'] = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;\n return (\n <Badge\n size={badgeSize}\n badge={<BadgeAssets {...(selected ? { status: 'positive' } : badge)} size={badgeSize} />}\n style={{\n // @ts-expect-error CSS custom props allowed\n '--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`,\n }}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return <NotificationDot avatarSize={size}>{children}</NotificationDot>;\n }\n return children;\n}\n\n/**\n * Common logic for entities (personal & business profiles or recipients)\n */\nfunction Profile({ imgSrc, name, type }: Pick<Props, 'imgSrc' | 'name' | 'type'>) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imgSrc && tryLoadImage) {\n return <Image src={imgSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (type) {\n return type === 'business' ? <BusinessProfileIcon /> : <PersonalProfileIcon />;\n }\n if (name) {\n return getInitials(name);\n }\n return <PersonalProfileIcon />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarView","children","undefined","size","selected","notification","badge","action","className","style","imgSrc","type","name","isInteractive","Boolean","onClick","href","_jsx","Interactive","clsx","Badges","avatar","Circle","fixedSize","enableBorder","backgroundColor","Profile","target","ariaLabel","ariaLabelledby","elementName","a11yProps","rel","MAP_BADGE_ASSET_SIZE","MAP_BADGE_POSITION","anyCustomBadge","Object","keys","length","badgeSize","Size","SMALL","Badge","BadgeAssets","status","NotificationDot","avatarSize","tryLoadImage","setTryLoadImage","useState","Image","src","alt","onError","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":";;;;;;;;;;;;;;AAoCA,SAASA,UAAUA,CAAC;AAClBC,EAAAA,QAAQ,GAAGC,SAAS;AACpBC,EAAAA,IAAI,GAAG,EAAE;EACTC,QAAQ;EACRC,YAAY;EACZC,KAAK;EACLC,MAAM;EACNC,SAAS;EACTC,KAAK;EACLC,MAAM;EACNC,IAAI;AACJC,EAAAA,IAAAA;AACM,CAAA,EAAA;EACN,MAAMC,aAAa,GAAGC,OAAO,CAACP,MAAM,EAAEQ,OAAO,IAAIR,MAAM,EAAES,IAAI,CAAC,CAAA;EAC9D,oBACEC,cAAA,CAACC,WAAW,EAAA;AAAA,IAAA,GACNX,MAAM;AACVC,IAAAA,SAAS,EAAEW,SAAI,CAAC,gBAAgB,EAAE;AAAE,MAAA,yBAAyB,EAAEf,QAAAA;KAAU,EAAEI,SAAS,CAAE;IAAAP,QAAA,eAEtFgB,cAAA,CAACG,MAAM,EAAA;AAACC,MAAAA,MAAM,EAAE;QAAElB,IAAI;QAAEE,YAAY;AAAED,QAAAA,QAAAA;OAAW;AAAA,MAAA,GAAKE,KAAK;MAAAL,QAAA,eACzDgB,cAAA,CAACK,MAAM,EAAA;AACLnB,QAAAA,IAAI,EAAEA,IAAK;QACXoB,SAAS,EAAA,IAAA;AACTf,QAAAA,SAAS,EAAEW,SAAI,CAAC,wBAAwB,CAAE;AAC1CK,QAAAA,YAAY,EAAE,CAACX,aAAa,IAAIT,QAAS;AACzCK,QAAAA,KAAK,EAAE;AACL,UAAA,IAAIL,QAAQ,IAAI;AAAE,YAAA,uBAAuB,EAAE,kCAAA;WAAoC,CAAC;AAChFqB,UAAAA,eAAe,EAAEZ,aAAa,GAAG,iCAAiC,GAAG,aAAa;UAClF,GAAGJ,KAAAA;SACH;AAAAR,QAAAA,QAAA,EAEDA,QAAQ,KAAKC,SAAS,gBAAGe,cAAA,CAACS,OAAO,EAAA;UAAOhB,MAAM;UAAEC,IAAI;AAAEC,UAAAA,IAAAA;AAAI,UAAM,GAAGX,QAAAA;OAC9D,CAAA;KACF,CAAA;AACV,GAAa,CAAC,CAAA;AAElB,CAAA;AAEA,SAASiB,WAAWA,CAAC;EACnBjB,QAAQ;EACRc,OAAO;EACPC,IAAI;EACJW,MAAM;EACNnB,SAAS;AACT,EAAA,YAAY,EAAEoB,SAAS;AACvB,EAAA,iBAAiB,EAAEC,cAAAA;AACiB,CAAA,EAAA;EACpC,MAAMC,WAAW,GAA6Bf,OAAO,GAAG,QAAQ,GAAGC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;EACpF,IAAIc,WAAW,KAAK,IAAI,EAAE;AACxB;AACA,IAAA,oBAAOb,cAAA,CAAA,KAAA,EAAA;AAAKT,MAAAA,SAAS,EAAEW,SAAI,CAACX,SAAS,EAAE,gCAAgC,CAAE;AAAAP,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAAC,CAAA;AAC5F,GAAA;AACA,EAAA,MAAM8B,SAAS,GAAG;IAAEH,SAAS;AAAEC,IAAAA,cAAAA;GAAgB,CAAA;EAC/C,IAAIC,WAAW,KAAK,QAAQ,EAAE;AAC5B,IAAA,oBACEb,cAAA,CAAA,QAAA,EAAA;AACEN,MAAAA,IAAI,EAAC,QAAQ;AACbH,MAAAA,SAAS,EAAEW,SAAI,CAACX,SAAS,EAAE,cAAc,CAAE;AAC3CO,MAAAA,OAAO,EAAEA,OAAQ;AAAA,MAAA,GACbgB,SAAS;AAAA9B,MAAAA,QAAA,EAEZA,QAAAA;AAAQ,KACH,CAAC,CAAA;AAEb,GAAA;EACA,IAAI6B,WAAW,KAAK,GAAG,EAAE;AACvB,IAAA;AAAA;AACE;MACAb,cAAA,CAAA,GAAA,EAAA;AACED,QAAAA,IAAI,EAAEA,IAAK;AACXW,QAAAA,MAAM,EAAEA,MAAO;AACfK,QAAAA,GAAG,EAAEL,MAAM,KAAK,QAAQ,GAAG,YAAY,GAAGzB,SAAU;AACpDM,QAAAA,SAAS,EAAEW,SAAI,CAACX,SAAS,EAAE,oBAAoB,CAAE;AAAA,QAAA,GAC7CuB,SAAS;AAAA9B,QAAAA,QAAA,EAEZA,QAAAA;OACA,CAAA;AAAC,MAAA;AAER,GAAA;AACF,CAAA;AAEA;AACA,MAAMgC,oBAAoB,GAAG;AAC3B,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAI;AACR,EAAA,EAAE,EAAE,IAAA;CACL,CAAA;AAED;AACA,MAAMC,kBAAkB,GAAG;EACzB,EAAE,EAAE,CAAC,CAAC;AACN,EAAA,EAAE,EAAE,CAAC,CAAA;CACN,CAAA;AAOD;;AAEG;AACH,SAASd,MAAMA,CAAC;EAAEnB,QAAQ;EAAEoB,MAAM;EAAE,GAAGf,KAAAA;AAAoB,CAAA,EAAA;EACzD,MAAM;AAAEH,UAAAA,MAAI,GAAG,EAAE;IAAEC,QAAQ;AAAEC,IAAAA,YAAAA;AAAY,GAAE,GAAGgB,MAAM,CAAA;EACpD,MAAMc,cAAc,GAAGC,MAAM,CAACC,IAAI,CAAC/B,KAAK,CAAC,CAACgC,MAAM,GAAG,CAAC,CAAA;EACpD,IAAI,CAACH,cAAc,IAAI/B,QAAQ,KAAKD,MAAI,GAAG,EAAE,EAAE;IAC7C,MAAMoC,SAAS,GAAuBN,oBAAoB,CAAC9B,MAAI,CAAC,IAAIqC,SAAI,CAACC,KAAK,CAAA;IAC9E,oBACExB,cAAA,CAACyB,KAAK,EAAA;AACJvC,MAAAA,IAAI,EAAEoC,SAAU;MAChBjC,KAAK,eAAEW,cAAA,CAAC0B,WAAW,EAAA;AAAA,QAAA,IAAMvC,QAAQ,GAAG;AAAEwC,UAAAA,MAAM,EAAE,UAAA;AAAY,SAAA,GAAGtC,KAAK,CAAA;AAAGH,QAAAA,IAAI,EAAEoC,SAAAA;AAAU,OAAA,CAAI;AACzF9B,MAAAA,KAAK,EAAE;AACL;AACA,QAAA,0BAA0B,EAAE,CAAGyB,EAAAA,kBAAkB,CAAC/B,MAAI,CAAC,IAAI,CAAC,CAAA,EAAA,CAAA;OAC5D;AAAAF,MAAAA,QAAA,EAEDA,QAAAA;AAAQ,KACJ,CAAC,CAAA;AAEZ,GAAA;AACA,EAAA,IAAII,YAAY,EAAE;IAChB,oBAAOY,cAAA,CAAC4B,eAAe,EAAA;AAACC,MAAAA,UAAU,EAAE3C,MAAK;AAAAF,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAkB,CAAC,CAAA;AACxE,GAAA;AACA,EAAA,OAAOA,QAAQ,CAAA;AACjB,CAAA;AAEA;;AAEG;AACH,SAASyB,OAAOA,CAAC;EAAEhB,MAAM;EAAEE,IAAI;AAAED,EAAAA,IAAAA;AAA+C,CAAA,EAAA;EAC9E,MAAM,CAACoC,YAAY,EAAEC,eAAe,CAAC,GAAGC,cAAQ,CAAC,IAAI,CAAC,CAAA;EACtD,IAAIvC,MAAM,IAAIqC,YAAY,EAAE;IAC1B,oBAAO9B,cAAA,CAACiC,aAAK,EAAA;AAACC,MAAAA,GAAG,EAAEzC,MAAO;AAAC0C,MAAAA,GAAG,EAAC,EAAE;AAACC,MAAAA,OAAO,EAAEA,MAAML,eAAe,CAAC,KAAK,CAAA;AAAE,KAAA,CAAG,CAAA;AAC7E,GAAA;AACA,EAAA,IAAIrC,IAAI,EAAE;AACR,IAAA,OAAOA,IAAI,KAAK,UAAU,gBAAGM,cAAA,CAACqC,eAAmB,EAAG,EAAA,CAAA,gBAAGrC,cAAA,CAACsC,aAAmB,KAAG,CAAA;AAChF,GAAA;AACA,EAAA,IAAI3C,IAAI,EAAE;IACR,OAAO4C,oBAAW,CAAC5C,IAAI,CAAC,CAAA;AAC1B,GAAA;AACA,EAAA,oBAAOK,cAAA,CAACsC,aAAmB,EAAA,GAAG,CAAA;AAChC;;;;"}
@@ -0,0 +1,185 @@
1
+ import Badge from '../badge/Badge.mjs';
2
+ import BadgeAssets from '../badge/BadgeAssets.mjs';
3
+ import NotificationDot from './NotificationDot.mjs';
4
+ import Circle from '../common/circle/Circle.mjs';
5
+ import Image from '../image/Image.mjs';
6
+ import { useState } from 'react';
7
+ import { clsx } from 'clsx';
8
+ import { Briefcase, Profile as Profile$1 } from '@transferwise/icons';
9
+ import { jsx } from 'react/jsx-runtime';
10
+ import { getInitials } from '../common/initials.mjs';
11
+ import { Size } from '../common/propsValues/size.mjs';
12
+
13
+ function AvatarView({
14
+ children = undefined,
15
+ size = 48,
16
+ selected,
17
+ notification,
18
+ badge,
19
+ action,
20
+ className,
21
+ style,
22
+ imgSrc,
23
+ type,
24
+ name
25
+ }) {
26
+ const isInteractive = Boolean(action?.onClick ?? action?.href);
27
+ return /*#__PURE__*/jsx(Interactive, {
28
+ ...action,
29
+ className: clsx('np-avatar-view', {
30
+ 'np-avatar-view-selected': selected
31
+ }, className),
32
+ children: /*#__PURE__*/jsx(Badges, {
33
+ avatar: {
34
+ size,
35
+ notification,
36
+ selected
37
+ },
38
+ ...badge,
39
+ children: /*#__PURE__*/jsx(Circle, {
40
+ size: size,
41
+ fixedSize: true,
42
+ className: clsx('np-avatar-view-content'),
43
+ enableBorder: !isInteractive || selected,
44
+ style: {
45
+ ...(selected && {
46
+ '--circle-border-color': 'var(--color-interactive-primary)'
47
+ }),
48
+ backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',
49
+ ...style
50
+ },
51
+ children: children === undefined ? /*#__PURE__*/jsx(Profile, {
52
+ imgSrc,
53
+ type,
54
+ name
55
+ }) : children
56
+ })
57
+ })
58
+ });
59
+ }
60
+ function Interactive({
61
+ children,
62
+ onClick,
63
+ href,
64
+ target,
65
+ className,
66
+ 'aria-label': ariaLabel,
67
+ 'aria-labelledby': ariaLabelledby
68
+ }) {
69
+ const elementName = onClick ? 'button' : href ? 'a' : null;
70
+ if (elementName === null) {
71
+ // non interactive
72
+ return /*#__PURE__*/jsx("div", {
73
+ className: clsx(className, 'np-avatar-view-non-interactive'),
74
+ children: children
75
+ });
76
+ }
77
+ const a11yProps = {
78
+ ariaLabel,
79
+ ariaLabelledby
80
+ };
81
+ if (elementName === 'button') {
82
+ return /*#__PURE__*/jsx("button", {
83
+ type: "button",
84
+ className: clsx(className, 'btn-unstyled'),
85
+ onClick: onClick,
86
+ ...a11yProps,
87
+ children: children
88
+ });
89
+ }
90
+ if (elementName === 'a') {
91
+ return (
92
+ /*#__PURE__*/
93
+ // eslint-disable-next-line react/jsx-no-target-blank
94
+ jsx("a", {
95
+ href: href,
96
+ target: target,
97
+ rel: target === '_blank' ? 'noreferrer' : undefined,
98
+ className: clsx(className, 'text-no-decoration'),
99
+ ...a11yProps,
100
+ children: children
101
+ })
102
+ );
103
+ }
104
+ }
105
+ /** Size of badge depends on size of avatar */
106
+ const MAP_BADGE_ASSET_SIZE = {
107
+ 16: 'sm',
108
+ 24: 'sm',
109
+ 32: 'sm',
110
+ 40: 'sm',
111
+ 48: 'sm',
112
+ 56: 'lg',
113
+ 72: 'lg'
114
+ };
115
+ /** Certain sizes of AvatarView has a custom offset of Badge */
116
+ const MAP_BADGE_POSITION = {
117
+ 24: -6,
118
+ 32: -4
119
+ };
120
+ /**
121
+ * Adds build-in badges to AvatarView
122
+ */
123
+ function Badges({
124
+ children,
125
+ avatar,
126
+ ...badge
127
+ }) {
128
+ const {
129
+ size = 48,
130
+ selected,
131
+ notification
132
+ } = avatar;
133
+ const anyCustomBadge = Object.keys(badge).length > 0;
134
+ if ((anyCustomBadge || selected) && size > 16) {
135
+ const badgeSize = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;
136
+ return /*#__PURE__*/jsx(Badge, {
137
+ size: badgeSize,
138
+ badge: /*#__PURE__*/jsx(BadgeAssets, {
139
+ ...(selected ? {
140
+ status: 'positive'
141
+ } : badge),
142
+ size: badgeSize
143
+ }),
144
+ style: {
145
+ // @ts-expect-error CSS custom props allowed
146
+ '--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`
147
+ },
148
+ children: children
149
+ });
150
+ }
151
+ if (notification) {
152
+ return /*#__PURE__*/jsx(NotificationDot, {
153
+ avatarSize: size,
154
+ children: children
155
+ });
156
+ }
157
+ return children;
158
+ }
159
+ /**
160
+ * Common logic for entities (personal & business profiles or recipients)
161
+ */
162
+ function Profile({
163
+ imgSrc,
164
+ name,
165
+ type
166
+ }) {
167
+ const [tryLoadImage, setTryLoadImage] = useState(true);
168
+ if (imgSrc && tryLoadImage) {
169
+ return /*#__PURE__*/jsx(Image, {
170
+ src: imgSrc,
171
+ alt: "",
172
+ onError: () => setTryLoadImage(false)
173
+ });
174
+ }
175
+ if (type) {
176
+ return type === 'business' ? /*#__PURE__*/jsx(Briefcase, {}) : /*#__PURE__*/jsx(Profile$1, {});
177
+ }
178
+ if (name) {
179
+ return getInitials(name);
180
+ }
181
+ return /*#__PURE__*/jsx(Profile$1, {});
182
+ }
183
+
184
+ export { AvatarView as default };
185
+ //# sourceMappingURL=AvatarView.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarView.mjs","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge, { BadgeAssets, BadgeProps, BadgeAssetsProps } from '../badge';\nimport NotificationDot from './NotificationDot';\nimport Circle, { CircleProps } from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (personal initials or business name), it will be boilded down to 1 or 2 chars (initials)\n */\n name?: string | null;\n type?: 'personal' | 'business';\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n // badge?: React.ReactNode;\n badge?: BadgeAssetsProps;\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?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'children'>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n action,\n className,\n style,\n imgSrc,\n type,\n name,\n}: Props) {\n const isInteractive = Boolean(action?.onClick ?? action?.href);\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!isInteractive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : 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={clsx(className, 'np-avatar-view-non-interactive')}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, '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, 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\n/** Size of badge depends on size of avatar */\nconst MAP_BADGE_ASSET_SIZE = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** Certain sizes of AvatarView has a custom offset of Badge */\nconst MAP_BADGE_POSITION = {\n 24: -6,\n 32: -4,\n};\n\ntype BadgesProps = BadgeAssetsProps &\n PropsWithChildren<{\n avatar: Pick<Props, 'selected' | 'size' | 'notification'>;\n }>;\n\n/**\n * Adds build-in badges to AvatarView\n */\nfunction Badges({ children, avatar, ...badge }: BadgesProps) {\n const { size = 48, selected, notification } = avatar;\n const anyCustomBadge = Object.keys(badge).length > 0;\n if ((anyCustomBadge || selected) && size > 16) {\n const badgeSize: BadgeProps['size'] = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;\n return (\n <Badge\n size={badgeSize}\n badge={<BadgeAssets {...(selected ? { status: 'positive' } : badge)} size={badgeSize} />}\n style={{\n // @ts-expect-error CSS custom props allowed\n '--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`,\n }}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return <NotificationDot avatarSize={size}>{children}</NotificationDot>;\n }\n return children;\n}\n\n/**\n * Common logic for entities (personal & business profiles or recipients)\n */\nfunction Profile({ imgSrc, name, type }: Pick<Props, 'imgSrc' | 'name' | 'type'>) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imgSrc && tryLoadImage) {\n return <Image src={imgSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (type) {\n return type === 'business' ? <BusinessProfileIcon /> : <PersonalProfileIcon />;\n }\n if (name) {\n return getInitials(name);\n }\n return <PersonalProfileIcon />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarView","children","undefined","size","selected","notification","badge","action","className","style","imgSrc","type","name","isInteractive","Boolean","onClick","href","_jsx","Interactive","clsx","Badges","avatar","Circle","fixedSize","enableBorder","backgroundColor","Profile","target","ariaLabel","ariaLabelledby","elementName","a11yProps","rel","MAP_BADGE_ASSET_SIZE","MAP_BADGE_POSITION","anyCustomBadge","Object","keys","length","badgeSize","Size","SMALL","Badge","BadgeAssets","status","NotificationDot","avatarSize","tryLoadImage","setTryLoadImage","useState","Image","src","alt","onError","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+
5
+ const MAP_STYLE_CONFIG = {
6
+ 16: {
7
+ size: 6,
8
+ offset: 1
9
+ },
10
+ 24: {
11
+ size: 8,
12
+ offset: 2
13
+ },
14
+ 32: {
15
+ size: 10,
16
+ offset: 2
17
+ },
18
+ 40: {
19
+ size: 10,
20
+ offset: 2
21
+ },
22
+ 48: {
23
+ size: 14,
24
+ offset: 2
25
+ },
26
+ 56: {
27
+ size: 16,
28
+ offset: 3
29
+ },
30
+ 72: {
31
+ size: 20,
32
+ offset: 3
33
+ }
34
+ };
35
+ function NotificationDot({
36
+ children,
37
+ avatarSize = 48
38
+ }) {
39
+ return /*#__PURE__*/jsxRuntime.jsxs("div", {
40
+ className: "np-notification-dot",
41
+ style: {
42
+ // @ts-expect-error CSS custom props allowed
43
+ '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
44
+ '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
45
+ },
46
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
47
+ className: "np-notification-dot-badge"
48
+ }), /*#__PURE__*/jsxRuntime.jsx("div", {
49
+ className: "np-notification-dot-mask",
50
+ children: children
51
+ })]
52
+ });
53
+ }
54
+
55
+ module.exports = NotificationDot;
56
+ //# sourceMappingURL=NotificationDot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationDot.js","sources":["../../src/avatarView/NotificationDot.tsx"],"sourcesContent":["import { HTMLAttributes } from 'react';\nimport { Props as AvatarViewProps } from './AvatarView';\n\ntype Props = Pick<HTMLAttributes<HTMLDivElement>, 'children'> & {\n avatarSize?: AvatarViewProps['size'];\n};\n\nconst MAP_STYLE_CONFIG = {\n 16: { size: 6, offset: 1 },\n 24: { size: 8, offset: 2 },\n 32: { size: 10, offset: 2 },\n 40: { size: 10, offset: 2 },\n 48: { size: 14, offset: 2 },\n 56: { size: 16, offset: 3 },\n 72: { size: 20, offset: 3 },\n};\n\nexport default function NotificationDot({ children, avatarSize = 48 }: Props) {\n return (\n <div\n className=\"np-notification-dot\"\n style={{\n // @ts-expect-error CSS custom props allowed\n '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,\n '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`,\n }}\n >\n <div className=\"np-notification-dot-badge\" />\n <div className=\"np-notification-dot-mask\">{children}</div>\n </div>\n );\n}\n"],"names":["MAP_STYLE_CONFIG","size","offset","NotificationDot","children","avatarSize","_jsxs","className","style","_jsx"],"mappings":";;;;AAOA,MAAMA,gBAAgB,GAAG;AACvB,EAAA,EAAE,EAAE;AAAEC,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;AAAG,GAAA;CAC5B,CAAA;AAEa,SAAUC,eAAeA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,UAAU,GAAG,EAAA;AAAW,CAAA,EAAA;AAC1E,EAAA,oBACEC,eAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,qBAAqB;AAC/BC,IAAAA,KAAK,EAAE;AACL;MACA,4BAA4B,EAAE,GAAGR,gBAAgB,CAACK,UAAU,CAAC,CAACJ,IAAI,CAAI,EAAA,CAAA;AACtE,MAAA,8BAA8B,EAAE,CAAGD,EAAAA,gBAAgB,CAACK,UAAU,CAAC,CAACH,MAAM,CAAA,EAAA,CAAA;KACtE;AAAAE,IAAAA,QAAA,gBAEFK,cAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,2BAAA;KACf,CAAA,eAAAE,cAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,0BAA0B;AAAAH,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAC3D,CAAA;AAAA,GAAK,CAAC,CAAA;AAEV;;;;"}
@@ -0,0 +1,54 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+
3
+ const MAP_STYLE_CONFIG = {
4
+ 16: {
5
+ size: 6,
6
+ offset: 1
7
+ },
8
+ 24: {
9
+ size: 8,
10
+ offset: 2
11
+ },
12
+ 32: {
13
+ size: 10,
14
+ offset: 2
15
+ },
16
+ 40: {
17
+ size: 10,
18
+ offset: 2
19
+ },
20
+ 48: {
21
+ size: 14,
22
+ offset: 2
23
+ },
24
+ 56: {
25
+ size: 16,
26
+ offset: 3
27
+ },
28
+ 72: {
29
+ size: 20,
30
+ offset: 3
31
+ }
32
+ };
33
+ function NotificationDot({
34
+ children,
35
+ avatarSize = 48
36
+ }) {
37
+ return /*#__PURE__*/jsxs("div", {
38
+ className: "np-notification-dot",
39
+ style: {
40
+ // @ts-expect-error CSS custom props allowed
41
+ '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
42
+ '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
43
+ },
44
+ children: [/*#__PURE__*/jsx("div", {
45
+ className: "np-notification-dot-badge"
46
+ }), /*#__PURE__*/jsx("div", {
47
+ className: "np-notification-dot-mask",
48
+ children: children
49
+ })]
50
+ });
51
+ }
52
+
53
+ export { NotificationDot as default };
54
+ //# sourceMappingURL=NotificationDot.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NotificationDot.mjs","sources":["../../src/avatarView/NotificationDot.tsx"],"sourcesContent":["import { HTMLAttributes } from 'react';\nimport { Props as AvatarViewProps } from './AvatarView';\n\ntype Props = Pick<HTMLAttributes<HTMLDivElement>, 'children'> & {\n avatarSize?: AvatarViewProps['size'];\n};\n\nconst MAP_STYLE_CONFIG = {\n 16: { size: 6, offset: 1 },\n 24: { size: 8, offset: 2 },\n 32: { size: 10, offset: 2 },\n 40: { size: 10, offset: 2 },\n 48: { size: 14, offset: 2 },\n 56: { size: 16, offset: 3 },\n 72: { size: 20, offset: 3 },\n};\n\nexport default function NotificationDot({ children, avatarSize = 48 }: Props) {\n return (\n <div\n className=\"np-notification-dot\"\n style={{\n // @ts-expect-error CSS custom props allowed\n '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,\n '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`,\n }}\n >\n <div className=\"np-notification-dot-badge\" />\n <div className=\"np-notification-dot-mask\">{children}</div>\n </div>\n );\n}\n"],"names":["MAP_STYLE_CONFIG","size","offset","NotificationDot","children","avatarSize","_jsxs","className","style","_jsx"],"mappings":";;AAOA,MAAMA,gBAAgB,GAAG;AACvB,EAAA,EAAE,EAAE;AAAEC,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;AAAG,GAAA;CAC5B,CAAA;AAEa,SAAUC,eAAeA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,UAAU,GAAG,EAAA;AAAW,CAAA,EAAA;AAC1E,EAAA,oBACEC,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,qBAAqB;AAC/BC,IAAAA,KAAK,EAAE;AACL;MACA,4BAA4B,EAAE,GAAGR,gBAAgB,CAACK,UAAU,CAAC,CAACJ,IAAI,CAAI,EAAA,CAAA;AACtE,MAAA,8BAA8B,EAAE,CAAGD,EAAAA,gBAAgB,CAACK,UAAU,CAAC,CAACH,MAAM,CAAA,EAAA,CAAA;KACtE;AAAAE,IAAAA,QAAA,gBAEFK,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,2BAAA;KACf,CAAA,eAAAE,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,0BAA0B;AAAAH,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAC3D,CAAA;AAAA,GAAK,CAAC,CAAA;AAEV;;;;"}
@@ -6,10 +6,12 @@ var avatarTypes = require('../avatar/avatarTypes.js');
6
6
  var Avatar = require('../avatar/Avatar.js');
7
7
  var Badge = require('../badge/Badge.js');
8
8
  var StatusIcon = require('../statusIcon/StatusIcon.js');
9
+ require('@wise/art');
10
+ require('clsx');
9
11
  var jsxRuntime = require('react/jsx-runtime');
10
12
  var profileType = require('../common/propsValues/profileType.js');
11
- var initials = require('../common/initials.js');
12
13
  var size = require('../common/propsValues/size.js');
14
+ var initials = require('../common/initials.js');
13
15
 
14
16
  const OptionalBadge = ({
15
17
  url,
@@ -45,6 +47,9 @@ const OptionalBadge = ({
45
47
  children: children
46
48
  });
47
49
  };
50
+ /**
51
+ * @deprecated Use `AvatarView` component instead
52
+ */
48
53
  const AvatarWrapper = ({
49
54
  url,
50
55
  'aria-label': ariaLabel,