@transferwise/components 0.0.0-experimental-bb32303 → 0.0.0-experimental-d11e9c5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/avatar/Avatar.js +3 -0
- package/build/avatar/Avatar.js.map +1 -1
- package/build/avatar/Avatar.mjs +3 -0
- package/build/avatar/Avatar.mjs.map +1 -1
- package/build/avatarView/AvatarView.js +163 -0
- package/build/avatarView/AvatarView.js.map +1 -0
- package/build/avatarView/AvatarView.mjs +161 -0
- package/build/avatarView/AvatarView.mjs.map +1 -0
- package/build/avatarView/NotificationDot.js +59 -0
- package/build/avatarView/NotificationDot.js.map +1 -0
- package/build/avatarView/NotificationDot.mjs +57 -0
- package/build/avatarView/NotificationDot.mjs.map +1 -0
- package/build/avatarWrapper/AvatarWrapper.js +10 -4
- package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
- package/build/avatarWrapper/AvatarWrapper.mjs +10 -4
- package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
- package/build/badge/Badge.js +3 -1
- package/build/badge/Badge.js.map +1 -1
- package/build/badge/Badge.mjs +3 -1
- package/build/badge/Badge.mjs.map +1 -1
- package/build/badge/BadgeAssets.js +85 -0
- package/build/badge/BadgeAssets.js.map +1 -0
- package/build/badge/BadgeAssets.mjs +83 -0
- package/build/badge/BadgeAssets.mjs.map +1 -0
- package/build/button/Button.js.map +1 -1
- package/build/button/Button.mjs.map +1 -1
- package/build/button/legacyUtils/legacyUtils.js.map +1 -1
- package/build/button/legacyUtils/legacyUtils.mjs.map +1 -1
- package/build/common/circle/Circle.js +17 -1
- package/build/common/circle/Circle.js.map +1 -1
- package/build/common/circle/Circle.mjs +17 -1
- package/build/common/circle/Circle.mjs.map +1 -1
- package/build/i18n/th.json +5 -0
- package/build/i18n/th.json.js +5 -0
- package/build/i18n/th.json.js.map +1 -1
- package/build/i18n/th.json.mjs +5 -0
- package/build/i18n/th.json.mjs.map +1 -1
- package/build/index.js +128 -121
- package/build/index.js.map +1 -1
- package/build/index.mjs +33 -29
- package/build/index.mjs.map +1 -1
- package/build/main.css +109 -5
- package/build/styles/avatarGroup/AvatarGroup.css +29 -0
- package/build/styles/avatarView/AvatarView.css +42 -0
- package/build/styles/avatarView/NotificationDot.css +20 -0
- package/build/styles/badge/Badge.css +6 -5
- package/build/styles/common/circle/Circle.css +32 -0
- package/build/styles/main.css +109 -5
- package/build/types/avatar/Avatar.d.ts +3 -0
- package/build/types/avatar/Avatar.d.ts.map +1 -1
- package/build/types/avatarGroup/AvatarGroup.d.ts +18 -0
- package/build/types/avatarGroup/AvatarGroup.d.ts.map +1 -0
- package/build/types/avatarGroup/index.d.ts +3 -0
- package/build/types/avatarGroup/index.d.ts.map +1 -0
- package/build/types/avatarView/AvatarView.d.ts +19 -0
- package/build/types/avatarView/AvatarView.d.ts.map +1 -0
- package/build/types/avatarView/NotificationDot.d.ts +8 -0
- package/build/types/avatarView/NotificationDot.d.ts.map +1 -0
- package/build/types/avatarView/index.d.ts +3 -0
- package/build/types/avatarView/index.d.ts.map +1 -0
- package/build/types/avatarWrapper/AvatarWrapper.d.ts +3 -0
- package/build/types/avatarWrapper/AvatarWrapper.d.ts.map +1 -1
- package/build/types/badge/Badge.d.ts +5 -1
- package/build/types/badge/Badge.d.ts.map +1 -1
- package/build/types/badge/BadgeAssets.d.ts +15 -0
- package/build/types/badge/BadgeAssets.d.ts.map +1 -0
- package/build/types/badge/index.d.ts +2 -0
- package/build/types/badge/index.d.ts.map +1 -1
- package/build/types/button/Button.d.ts +1 -1
- package/build/types/button/Button.d.ts.map +1 -1
- package/build/types/button/legacyUtils/legacyUtils.d.ts +2 -2
- package/build/types/button/legacyUtils/legacyUtils.d.ts.map +1 -1
- package/build/types/common/circle/Circle.d.ts +2 -0
- package/build/types/common/circle/Circle.d.ts.map +1 -1
- package/build/types/index.d.ts +3 -1
- package/build/types/index.d.ts.map +1 -1
- package/package.json +3 -4
- package/src/avatar/Avatar.tsx +3 -0
- package/src/avatarGroup/AvatarGroup.css +29 -0
- package/src/avatarGroup/AvatarGroup.less +42 -0
- package/src/avatarGroup/AvatarGroup.story.tsx +284 -0
- package/src/avatarGroup/AvatarGroup.tsx +117 -0
- package/src/avatarGroup/index.ts +2 -0
- package/src/avatarView/AvatarView.css +42 -0
- package/src/avatarView/AvatarView.less +33 -0
- package/src/avatarView/AvatarView.story.tsx +425 -0
- package/src/avatarView/AvatarView.tsx +141 -0
- package/src/avatarView/NotificationDot.css +20 -0
- package/src/avatarView/NotificationDot.less +24 -0
- package/src/avatarView/NotificationDot.tsx +35 -0
- package/src/avatarView/index.ts +2 -0
- package/src/avatarWrapper/AvatarWrapper.tsx +3 -0
- package/src/badge/Badge.css +6 -5
- package/src/badge/Badge.less +4 -3
- package/src/badge/Badge.tsx +8 -1
- package/src/badge/BadgeAssets.tsx +65 -0
- package/src/badge/index.ts +3 -0
- package/src/button/{Button.spec.tsx → Button.spec.js} +2 -3
- package/src/button/Button.tsx +1 -1
- package/src/button/legacyUtils/{legacyUtils.spec.tsx → legacyUtils.spec.js} +1 -1
- package/src/button/legacyUtils/legacyUtils.ts +2 -2
- package/src/common/circle/Circle.css +32 -0
- package/src/common/circle/Circle.less +35 -0
- package/src/common/circle/Circle.tsx +22 -1
- package/src/decision/Decision.story.tsx +10 -46
- package/src/flowNavigation/FlowNavigation.story.tsx +10 -48
- package/src/i18n/th.json +5 -0
- package/src/index.ts +4 -0
- package/src/listItem/ListItem.story.tsx +5 -43
- package/src/main.css +109 -5
- package/src/main.less +2 -0
- package/src/modal/{Modal.rtl.spec.tsx → Modal.rtl.spec.js} +7 -8
- package/src/navigationOption/NavigationOption.story.tsx +14 -65
- package/src/overlayHeader/OverlayHeader.story.tsx +5 -10
- package/src/radio/Radio.story.tsx +5 -5
- package/src/radioGroup/RadioGroup.story.tsx +3 -3
- package/src/selectOption/SelectOption.story.tsx +31 -30
- package/src/slidingPanel/SlidingPanel.spec.js +1 -1
- package/src/ssr.spec.js +256 -0
- package/src/test-utils/{index.tsx → index.js} +6 -11
- package/src/test-utils/{jest.setup.ts → jest.setup.js} +8 -13
- package/src/tile/Tile.story.tsx +2 -6
- package/build/types/test-utils/index.d.ts +0 -158
- package/build/types/test-utils/index.d.ts.map +0 -1
- package/build/types/test-utils/jest.setup.d.ts +0 -2
- package/build/types/test-utils/jest.setup.d.ts.map +0 -1
- package/src/ssr.spec.tsx +0 -264
- /package/src/button/__snapshots__/{Button.spec.tsx.snap → Button.spec.js.snap} +0 -0
- /package/src/dimmer/{Dimmer.rtl.spec.tsx → Dimmer.rtl.spec.js} +0 -0
- /package/src/info/{Info.spec.jsx → Info.spec.js} +0 -0
package/build/avatar/Avatar.js
CHANGED
|
@@ -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 <div\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 <div\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </div>\n </div>\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","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;
|
|
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 <div\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 <div\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </div>\n </div>\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","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;AAEnD,EAAA,oBACEU,cAAA,CAAA,KAAA,EAAA;AACEZ,IAAAA,SAAS,EAAEa,SAAI,CAAC,WAAW,EAAEb,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEa,OAAO,CAACN,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;AAAAR,IAAAA,QAAA,eAEtBa,cAAA,CAAA,KAAA,EAAA;AACEZ,MAAAA,SAAS,EAAC,oBAAoB;AAC9Be,MAAAA,KAAK,EAAE;QACLlB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
|
package/build/avatar/Avatar.mjs
CHANGED
|
@@ -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 <div\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 <div\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </div>\n </div>\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","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;
|
|
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 <div\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 <div\n className=\"tw-avatar__content\"\n style={{\n backgroundColor: backgroundColor || backgroundColorFromSeed,\n }}\n >\n {children}\n </div>\n </div>\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","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;AAEnD,EAAA,oBACEU,GAAA,CAAA,KAAA,EAAA;AACEZ,IAAAA,SAAS,EAAEa,IAAI,CAAC,WAAW,EAAEb,SAAS,EAAE,CAAcL,WAAAA,EAAAA,IAAI,CAAE,CAAA,EAAE,CAAcW,WAAAA,EAAAA,IAAI,EAAE,EAAE;AAClF,MAAA,qBAAqB,EAAEL,QAAQ;AAC/B,MAAA,oBAAoB,EAAEa,OAAO,CAACN,uBAAuB,CAAC;MACtD,oBAAoB,EAAEF,IAAI,KAAK,UAAA;AAChC,KAAA,CAAE;AACH,IAAA,YAAA,EAAYC,SAAU;AAAAR,IAAAA,QAAA,eAEtBa,GAAA,CAAA,KAAA,EAAA;AACEZ,MAAAA,SAAS,EAAC,oBAAoB;AAC9Be,MAAAA,KAAK,EAAE;QACLlB,eAAe,EAAEA,eAAe,IAAIW,uBAAAA;OACpC;AAAAT,MAAAA,QAAA,EAEDA,QAAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
|
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
require('../common/theme.js');
|
|
11
|
+
require('../common/direction.js');
|
|
12
|
+
require('../common/propsValues/control.js');
|
|
13
|
+
require('../common/propsValues/breakpoint.js');
|
|
14
|
+
var size = require('../common/propsValues/size.js');
|
|
15
|
+
require('../common/propsValues/typography.js');
|
|
16
|
+
require('../common/propsValues/width.js');
|
|
17
|
+
require('../common/propsValues/type.js');
|
|
18
|
+
require('../common/propsValues/dateMode.js');
|
|
19
|
+
require('../common/propsValues/monthFormat.js');
|
|
20
|
+
require('../common/propsValues/position.js');
|
|
21
|
+
require('../common/propsValues/layouts.js');
|
|
22
|
+
require('../common/propsValues/status.js');
|
|
23
|
+
require('../common/propsValues/sentiment.js');
|
|
24
|
+
require('../common/propsValues/profileType.js');
|
|
25
|
+
require('../common/propsValues/variant.js');
|
|
26
|
+
require('../common/propsValues/scroll.js');
|
|
27
|
+
require('../common/propsValues/markdownNodeType.js');
|
|
28
|
+
require('../common/fileType.js');
|
|
29
|
+
var initials = require('../common/initials.js');
|
|
30
|
+
var icons = require('@transferwise/icons');
|
|
31
|
+
require('react-intl');
|
|
32
|
+
require('../common/closeButton/CloseButton.messages.js');
|
|
33
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
34
|
+
|
|
35
|
+
function AvatarView({
|
|
36
|
+
children = undefined,
|
|
37
|
+
size = 48,
|
|
38
|
+
selected,
|
|
39
|
+
notification,
|
|
40
|
+
badge,
|
|
41
|
+
interactive = false,
|
|
42
|
+
className,
|
|
43
|
+
style,
|
|
44
|
+
imgSrc,
|
|
45
|
+
type,
|
|
46
|
+
name,
|
|
47
|
+
...restProps
|
|
48
|
+
}) {
|
|
49
|
+
return /*#__PURE__*/jsxRuntime.jsx(Circle, {
|
|
50
|
+
size: size,
|
|
51
|
+
fixedSize: true,
|
|
52
|
+
className: clsx.clsx('np-avatar-view', interactive ? 'np-avatar-view-interactive' : 'np-avatar-view-non-interactive', {
|
|
53
|
+
'np-avatar-view-selected': selected
|
|
54
|
+
}, className),
|
|
55
|
+
...restProps,
|
|
56
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Badges, {
|
|
57
|
+
avatar: {
|
|
58
|
+
size,
|
|
59
|
+
notification,
|
|
60
|
+
selected
|
|
61
|
+
},
|
|
62
|
+
...badge,
|
|
63
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Circle, {
|
|
64
|
+
size: size,
|
|
65
|
+
fixedSize: true,
|
|
66
|
+
className: clsx.clsx('np-avatar-view-content'),
|
|
67
|
+
enableBorder: !interactive || selected,
|
|
68
|
+
style: {
|
|
69
|
+
...(selected && {
|
|
70
|
+
'--circle-border-color': 'var(--color-interactive-primary)'
|
|
71
|
+
}),
|
|
72
|
+
...style
|
|
73
|
+
},
|
|
74
|
+
children: children === undefined ? /*#__PURE__*/jsxRuntime.jsx(Profile, {
|
|
75
|
+
imgSrc,
|
|
76
|
+
type,
|
|
77
|
+
name
|
|
78
|
+
}) : children
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/** Size of badge depends on size of avatar */
|
|
84
|
+
const MAP_BADGE_ASSET_SIZE = {
|
|
85
|
+
16: 'sm',
|
|
86
|
+
24: 'sm',
|
|
87
|
+
32: 'sm',
|
|
88
|
+
40: 'sm',
|
|
89
|
+
48: 'sm',
|
|
90
|
+
56: 'lg',
|
|
91
|
+
72: 'lg'
|
|
92
|
+
};
|
|
93
|
+
/** Certain sizes of AvatarView has a custom offset of Badge */
|
|
94
|
+
const MAP_BADGE_POSITION = {
|
|
95
|
+
24: -6,
|
|
96
|
+
32: -4
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* Adds build-in badges to AvatarView
|
|
100
|
+
*/
|
|
101
|
+
function Badges({
|
|
102
|
+
children,
|
|
103
|
+
avatar,
|
|
104
|
+
...badge
|
|
105
|
+
}) {
|
|
106
|
+
const {
|
|
107
|
+
size: size$1 = 48,
|
|
108
|
+
selected,
|
|
109
|
+
notification
|
|
110
|
+
} = avatar;
|
|
111
|
+
const anyCustomBadge = Object.keys(badge).length > 0;
|
|
112
|
+
if ((anyCustomBadge || selected) && size$1 > 16) {
|
|
113
|
+
const badgeSize = MAP_BADGE_ASSET_SIZE[size$1] ?? size.Size.SMALL;
|
|
114
|
+
return /*#__PURE__*/jsxRuntime.jsx(Badge, {
|
|
115
|
+
size: badgeSize,
|
|
116
|
+
badge: /*#__PURE__*/jsxRuntime.jsx(BadgeAssets, {
|
|
117
|
+
...(selected ? {
|
|
118
|
+
status: 'positive'
|
|
119
|
+
} : badge),
|
|
120
|
+
size: badgeSize
|
|
121
|
+
}),
|
|
122
|
+
style: {
|
|
123
|
+
// @ts-expect-error CSS custom props allowed
|
|
124
|
+
'--badge-content-position': `${MAP_BADGE_POSITION[size$1] ?? 0}px`
|
|
125
|
+
},
|
|
126
|
+
children: children
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (notification) {
|
|
130
|
+
return /*#__PURE__*/jsxRuntime.jsx(NotificationDot, {
|
|
131
|
+
avatarSize: size$1,
|
|
132
|
+
children: children
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return children;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Common logic for entities (personal & business profiles or recipients)
|
|
139
|
+
*/
|
|
140
|
+
function Profile({
|
|
141
|
+
imgSrc,
|
|
142
|
+
name,
|
|
143
|
+
type
|
|
144
|
+
}) {
|
|
145
|
+
const [tryLoadImage, setTryLoadImage] = React.useState(true);
|
|
146
|
+
if (imgSrc && tryLoadImage) {
|
|
147
|
+
return /*#__PURE__*/jsxRuntime.jsx(Image.default, {
|
|
148
|
+
src: imgSrc,
|
|
149
|
+
alt: "",
|
|
150
|
+
onError: () => setTryLoadImage(false)
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
if (type) {
|
|
154
|
+
return type.toLowerCase() === 'business' ? /*#__PURE__*/jsxRuntime.jsx(icons.Briefcase, {}) : /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
|
|
155
|
+
}
|
|
156
|
+
if (name) {
|
|
157
|
+
return initials.getInitials(name);
|
|
158
|
+
}
|
|
159
|
+
return /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
module.exports = AvatarView;
|
|
163
|
+
//# 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 from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (person (profile or recipient) 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 notification?: boolean;\n badge?: BadgeAssetsProps;\n interactive?: boolean;\n selected?: boolean;\n style?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className' | 'children' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'\n>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n interactive = false,\n className,\n style,\n imgSrc,\n type,\n name,\n ...restProps\n}: Props) {\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx(\n 'np-avatar-view',\n interactive ? 'np-avatar-view-interactive' : 'np-avatar-view-non-interactive',\n { 'np-avatar-view-selected': selected },\n className,\n )}\n {...restProps}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!interactive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : children}\n </Circle>\n </Badges>\n </Circle>\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.toLowerCase() === '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","interactive","className","style","imgSrc","type","name","restProps","_jsx","Circle","fixedSize","clsx","Badges","avatar","enableBorder","Profile","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","toLowerCase","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
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 '../common/theme.mjs';
|
|
9
|
+
import '../common/direction.mjs';
|
|
10
|
+
import '../common/propsValues/control.mjs';
|
|
11
|
+
import '../common/propsValues/breakpoint.mjs';
|
|
12
|
+
import { Size } from '../common/propsValues/size.mjs';
|
|
13
|
+
import '../common/propsValues/typography.mjs';
|
|
14
|
+
import '../common/propsValues/width.mjs';
|
|
15
|
+
import '../common/propsValues/type.mjs';
|
|
16
|
+
import '../common/propsValues/dateMode.mjs';
|
|
17
|
+
import '../common/propsValues/monthFormat.mjs';
|
|
18
|
+
import '../common/propsValues/position.mjs';
|
|
19
|
+
import '../common/propsValues/layouts.mjs';
|
|
20
|
+
import '../common/propsValues/status.mjs';
|
|
21
|
+
import '../common/propsValues/sentiment.mjs';
|
|
22
|
+
import '../common/propsValues/profileType.mjs';
|
|
23
|
+
import '../common/propsValues/variant.mjs';
|
|
24
|
+
import '../common/propsValues/scroll.mjs';
|
|
25
|
+
import '../common/propsValues/markdownNodeType.mjs';
|
|
26
|
+
import '../common/fileType.mjs';
|
|
27
|
+
import { getInitials } from '../common/initials.mjs';
|
|
28
|
+
import { Briefcase, Profile as Profile$1 } from '@transferwise/icons';
|
|
29
|
+
import 'react-intl';
|
|
30
|
+
import '../common/closeButton/CloseButton.messages.mjs';
|
|
31
|
+
import { jsx } from 'react/jsx-runtime';
|
|
32
|
+
|
|
33
|
+
function AvatarView({
|
|
34
|
+
children = undefined,
|
|
35
|
+
size = 48,
|
|
36
|
+
selected,
|
|
37
|
+
notification,
|
|
38
|
+
badge,
|
|
39
|
+
interactive = false,
|
|
40
|
+
className,
|
|
41
|
+
style,
|
|
42
|
+
imgSrc,
|
|
43
|
+
type,
|
|
44
|
+
name,
|
|
45
|
+
...restProps
|
|
46
|
+
}) {
|
|
47
|
+
return /*#__PURE__*/jsx(Circle, {
|
|
48
|
+
size: size,
|
|
49
|
+
fixedSize: true,
|
|
50
|
+
className: clsx('np-avatar-view', interactive ? 'np-avatar-view-interactive' : 'np-avatar-view-non-interactive', {
|
|
51
|
+
'np-avatar-view-selected': selected
|
|
52
|
+
}, className),
|
|
53
|
+
...restProps,
|
|
54
|
+
children: /*#__PURE__*/jsx(Badges, {
|
|
55
|
+
avatar: {
|
|
56
|
+
size,
|
|
57
|
+
notification,
|
|
58
|
+
selected
|
|
59
|
+
},
|
|
60
|
+
...badge,
|
|
61
|
+
children: /*#__PURE__*/jsx(Circle, {
|
|
62
|
+
size: size,
|
|
63
|
+
fixedSize: true,
|
|
64
|
+
className: clsx('np-avatar-view-content'),
|
|
65
|
+
enableBorder: !interactive || selected,
|
|
66
|
+
style: {
|
|
67
|
+
...(selected && {
|
|
68
|
+
'--circle-border-color': 'var(--color-interactive-primary)'
|
|
69
|
+
}),
|
|
70
|
+
...style
|
|
71
|
+
},
|
|
72
|
+
children: children === undefined ? /*#__PURE__*/jsx(Profile, {
|
|
73
|
+
imgSrc,
|
|
74
|
+
type,
|
|
75
|
+
name
|
|
76
|
+
}) : children
|
|
77
|
+
})
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** Size of badge depends on size of avatar */
|
|
82
|
+
const MAP_BADGE_ASSET_SIZE = {
|
|
83
|
+
16: 'sm',
|
|
84
|
+
24: 'sm',
|
|
85
|
+
32: 'sm',
|
|
86
|
+
40: 'sm',
|
|
87
|
+
48: 'sm',
|
|
88
|
+
56: 'lg',
|
|
89
|
+
72: 'lg'
|
|
90
|
+
};
|
|
91
|
+
/** Certain sizes of AvatarView has a custom offset of Badge */
|
|
92
|
+
const MAP_BADGE_POSITION = {
|
|
93
|
+
24: -6,
|
|
94
|
+
32: -4
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Adds build-in badges to AvatarView
|
|
98
|
+
*/
|
|
99
|
+
function Badges({
|
|
100
|
+
children,
|
|
101
|
+
avatar,
|
|
102
|
+
...badge
|
|
103
|
+
}) {
|
|
104
|
+
const {
|
|
105
|
+
size = 48,
|
|
106
|
+
selected,
|
|
107
|
+
notification
|
|
108
|
+
} = avatar;
|
|
109
|
+
const anyCustomBadge = Object.keys(badge).length > 0;
|
|
110
|
+
if ((anyCustomBadge || selected) && size > 16) {
|
|
111
|
+
const badgeSize = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;
|
|
112
|
+
return /*#__PURE__*/jsx(Badge, {
|
|
113
|
+
size: badgeSize,
|
|
114
|
+
badge: /*#__PURE__*/jsx(BadgeAssets, {
|
|
115
|
+
...(selected ? {
|
|
116
|
+
status: 'positive'
|
|
117
|
+
} : badge),
|
|
118
|
+
size: badgeSize
|
|
119
|
+
}),
|
|
120
|
+
style: {
|
|
121
|
+
// @ts-expect-error CSS custom props allowed
|
|
122
|
+
'--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`
|
|
123
|
+
},
|
|
124
|
+
children: children
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
if (notification) {
|
|
128
|
+
return /*#__PURE__*/jsx(NotificationDot, {
|
|
129
|
+
avatarSize: size,
|
|
130
|
+
children: children
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return children;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Common logic for entities (personal & business profiles or recipients)
|
|
137
|
+
*/
|
|
138
|
+
function Profile({
|
|
139
|
+
imgSrc,
|
|
140
|
+
name,
|
|
141
|
+
type
|
|
142
|
+
}) {
|
|
143
|
+
const [tryLoadImage, setTryLoadImage] = useState(true);
|
|
144
|
+
if (imgSrc && tryLoadImage) {
|
|
145
|
+
return /*#__PURE__*/jsx(Image, {
|
|
146
|
+
src: imgSrc,
|
|
147
|
+
alt: "",
|
|
148
|
+
onError: () => setTryLoadImage(false)
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
if (type) {
|
|
152
|
+
return type.toLowerCase() === 'business' ? /*#__PURE__*/jsx(Briefcase, {}) : /*#__PURE__*/jsx(Profile$1, {});
|
|
153
|
+
}
|
|
154
|
+
if (name) {
|
|
155
|
+
return getInitials(name);
|
|
156
|
+
}
|
|
157
|
+
return /*#__PURE__*/jsx(Profile$1, {});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
export { AvatarView as default };
|
|
161
|
+
//# 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 from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (person (profile or recipient) 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 notification?: boolean;\n badge?: BadgeAssetsProps;\n interactive?: boolean;\n selected?: boolean;\n style?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<\n HTMLAttributes<HTMLDivElement>,\n 'className' | 'children' | 'role' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'\n>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n interactive = false,\n className,\n style,\n imgSrc,\n type,\n name,\n ...restProps\n}: Props) {\n return (\n <Circle\n size={size}\n fixedSize\n className={clsx(\n 'np-avatar-view',\n interactive ? 'np-avatar-view-interactive' : 'np-avatar-view-non-interactive',\n { 'np-avatar-view-selected': selected },\n className,\n )}\n {...restProps}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!interactive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : children}\n </Circle>\n </Badges>\n </Circle>\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.toLowerCase() === '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","interactive","className","style","imgSrc","type","name","restProps","_jsx","Circle","fixedSize","clsx","Badges","avatar","enableBorder","Profile","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","toLowerCase","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Depending on avatar size, notifcation dot size and offset are different
|
|
7
|
+
*/
|
|
8
|
+
const MAP_STYLE_CONFIG = {
|
|
9
|
+
16: {
|
|
10
|
+
size: 6,
|
|
11
|
+
offset: 1
|
|
12
|
+
},
|
|
13
|
+
24: {
|
|
14
|
+
size: 8,
|
|
15
|
+
offset: 2
|
|
16
|
+
},
|
|
17
|
+
32: {
|
|
18
|
+
size: 10,
|
|
19
|
+
offset: 2
|
|
20
|
+
},
|
|
21
|
+
40: {
|
|
22
|
+
size: 10,
|
|
23
|
+
offset: 2
|
|
24
|
+
},
|
|
25
|
+
48: {
|
|
26
|
+
size: 14,
|
|
27
|
+
offset: 2
|
|
28
|
+
},
|
|
29
|
+
56: {
|
|
30
|
+
size: 16,
|
|
31
|
+
offset: 3
|
|
32
|
+
},
|
|
33
|
+
72: {
|
|
34
|
+
size: 20,
|
|
35
|
+
offset: 3
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
function NotificationDot({
|
|
39
|
+
children,
|
|
40
|
+
avatarSize = 48
|
|
41
|
+
}) {
|
|
42
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
43
|
+
className: "np-notification-dot",
|
|
44
|
+
style: {
|
|
45
|
+
// @ts-expect-error CSS custom props allowed
|
|
46
|
+
'--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
|
|
47
|
+
'--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
|
|
48
|
+
},
|
|
49
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
50
|
+
className: "np-notification-dot-badge"
|
|
51
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
52
|
+
className: "np-notification-dot-mask",
|
|
53
|
+
children: children
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = NotificationDot;
|
|
59
|
+
//# 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\n/**\n * Depending on avatar size, notifcation dot size and offset are different\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;;AAEG;AACH,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,57 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Depending on avatar size, notifcation dot size and offset are different
|
|
5
|
+
*/
|
|
6
|
+
const MAP_STYLE_CONFIG = {
|
|
7
|
+
16: {
|
|
8
|
+
size: 6,
|
|
9
|
+
offset: 1
|
|
10
|
+
},
|
|
11
|
+
24: {
|
|
12
|
+
size: 8,
|
|
13
|
+
offset: 2
|
|
14
|
+
},
|
|
15
|
+
32: {
|
|
16
|
+
size: 10,
|
|
17
|
+
offset: 2
|
|
18
|
+
},
|
|
19
|
+
40: {
|
|
20
|
+
size: 10,
|
|
21
|
+
offset: 2
|
|
22
|
+
},
|
|
23
|
+
48: {
|
|
24
|
+
size: 14,
|
|
25
|
+
offset: 2
|
|
26
|
+
},
|
|
27
|
+
56: {
|
|
28
|
+
size: 16,
|
|
29
|
+
offset: 3
|
|
30
|
+
},
|
|
31
|
+
72: {
|
|
32
|
+
size: 20,
|
|
33
|
+
offset: 3
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
function NotificationDot({
|
|
37
|
+
children,
|
|
38
|
+
avatarSize = 48
|
|
39
|
+
}) {
|
|
40
|
+
return /*#__PURE__*/jsxs("div", {
|
|
41
|
+
className: "np-notification-dot",
|
|
42
|
+
style: {
|
|
43
|
+
// @ts-expect-error CSS custom props allowed
|
|
44
|
+
'--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
|
|
45
|
+
'--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
|
|
46
|
+
},
|
|
47
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
48
|
+
className: "np-notification-dot-badge"
|
|
49
|
+
}), /*#__PURE__*/jsx("div", {
|
|
50
|
+
className: "np-notification-dot-mask",
|
|
51
|
+
children: children
|
|
52
|
+
})]
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { NotificationDot as default };
|
|
57
|
+
//# 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\n/**\n * Depending on avatar size, notifcation dot size and offset are different\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;;AAEG;AACH,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;;;;"}
|
|
@@ -5,10 +5,16 @@ var React = require('react');
|
|
|
5
5
|
var avatarTypes = require('../avatar/avatarTypes.js');
|
|
6
6
|
var Avatar = require('../avatar/Avatar.js');
|
|
7
7
|
var Badge = require('../badge/Badge.js');
|
|
8
|
+
var StatusIcon = require('../statusIcon/StatusIcon.js');
|
|
9
|
+
require('@wise/art');
|
|
10
|
+
require('clsx');
|
|
11
|
+
require('../common/propsValues/breakpoint.js');
|
|
12
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
13
|
+
require('@transferwise/neptune-validation');
|
|
14
|
+
require('../provider/direction/DirectionProvider.js');
|
|
8
15
|
require('../common/theme.js');
|
|
9
16
|
require('../common/direction.js');
|
|
10
17
|
require('../common/propsValues/control.js');
|
|
11
|
-
require('../common/propsValues/breakpoint.js');
|
|
12
18
|
var size = require('../common/propsValues/size.js');
|
|
13
19
|
require('../common/propsValues/typography.js');
|
|
14
20
|
require('../common/propsValues/width.js');
|
|
@@ -25,11 +31,8 @@ require('../common/propsValues/scroll.js');
|
|
|
25
31
|
require('../common/propsValues/markdownNodeType.js');
|
|
26
32
|
require('../common/fileType.js');
|
|
27
33
|
var initials = require('../common/initials.js');
|
|
28
|
-
require('clsx');
|
|
29
34
|
require('react-intl');
|
|
30
35
|
require('../common/closeButton/CloseButton.messages.js');
|
|
31
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
32
|
-
var StatusIcon = require('../statusIcon/StatusIcon.js');
|
|
33
36
|
|
|
34
37
|
const OptionalBadge = ({
|
|
35
38
|
url,
|
|
@@ -65,6 +68,9 @@ const OptionalBadge = ({
|
|
|
65
68
|
children: children
|
|
66
69
|
});
|
|
67
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated Use `AvatarView` component instead
|
|
73
|
+
*/
|
|
68
74
|
const AvatarWrapper = ({
|
|
69
75
|
url,
|
|
70
76
|
'aria-label': ariaLabel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AvatarWrapper.js","sources":["../../src/avatarWrapper/AvatarWrapper.tsx"],"sourcesContent":["import { Person as ProfileIcon, Briefcase as BriefcaseIcon } from '@transferwise/icons';\nimport { useState, useEffect } from 'react';\n\nimport Avatar, { AvatarProps, AvatarType } from '../avatar';\nimport Badge, { BadgeProps } from '../badge';\nimport {\n ProfileType,\n ProfileTypePersonal,\n ProfileTypeBusiness,\n Size,\n Sentiment,\n getInitials,\n} from '../common';\nimport StatusIcon from '../statusIcon/StatusIcon';\n\ninterface OptionalBadgeProps extends Omit<BadgeProps, 'badge'> {\n url?: string;\n ariaLabel?: string;\n altText?: string;\n statusIcon?: Sentiment;\n}\n\nconst OptionalBadge = ({\n url,\n altText,\n statusIcon,\n children,\n ariaLabel,\n ...rest\n}: OptionalBadgeProps) => {\n if (url) {\n return (\n <Badge aria-label={ariaLabel} badge={<img src={url} alt={altText} />} {...rest}>\n {children}\n </Badge>\n );\n }\n if (statusIcon) {\n return (\n <Badge\n aria-label={ariaLabel}\n badge={<StatusIcon sentiment={statusIcon} size={Size.SMALL} />}\n {...rest}\n >\n {children}\n </Badge>\n );\n }\n return <>{children}</>;\n};\n\nexport type AvatarWrapperProps = {\n url?: string;\n 'aria-label'?: string;\n profileType?: ProfileTypeBusiness | ProfileTypePersonal;\n profileId?: string;\n name?: string;\n avatarProps?: AvatarProps;\n badgeProps?: BadgeProps;\n} & (\n | {\n badgeUrl: string;\n badgeAltText: string;\n badgeStatusIcon?: never;\n }\n | {\n badgeUrl?: never;\n badgeAltText?: never;\n badgeStatusIcon: Sentiment;\n }\n | {\n badgeUrl?: never;\n badgeAltText?: never;\n badgeStatusIcon?: never;\n }\n);\n\nconst AvatarWrapper = ({\n url,\n 'aria-label': ariaLabel,\n profileType,\n profileId,\n badgeUrl,\n badgeAltText,\n badgeStatusIcon,\n name,\n avatarProps,\n badgeProps,\n}: AvatarWrapperProps) => {\n const [hasImageLoadError, setImageLoadError] = useState(false);\n const isBusinessProfile = profileType === ProfileType.BUSINESS;\n\n // Reset the errored state when url changes\n useEffect(() => setImageLoadError(false), [url]);\n\n const getAvatarProps = () => {\n let updatedAvatarProps = avatarProps;\n if (!badgeUrl && !badgeStatusIcon && ariaLabel) {\n updatedAvatarProps = { ...updatedAvatarProps, 'aria-label': ariaLabel };\n }\n if (url && !hasImageLoadError) {\n return {\n type: AvatarType.THUMBNAIL,\n children: <img src={url} alt=\"\" onError={() => setImageLoadError(true)} />,\n ...updatedAvatarProps,\n };\n }\n if (profileType) {\n return {\n type: AvatarType.ICON,\n children: isBusinessProfile ? <BriefcaseIcon size=\"24\" /> : <ProfileIcon size=\"24\" />,\n ...updatedAvatarProps,\n };\n }\n if (name) {\n return {\n type: AvatarType.INITIALS,\n children: <>{getInitials(name)}</>,\n backgroundColorSeed: profileId?.toString(),\n ...updatedAvatarProps,\n };\n }\n return {\n type: AvatarType.ICON,\n children: <ProfileIcon size=\"24\" />,\n ...updatedAvatarProps,\n };\n };\n\n return (\n <OptionalBadge\n url={badgeUrl}\n ariaLabel={ariaLabel}\n altText={badgeAltText}\n statusIcon={badgeStatusIcon}\n {...badgeProps}\n >\n <Avatar size={Size.MEDIUM} {...getAvatarProps()} />\n </OptionalBadge>\n );\n};\n\nexport default AvatarWrapper;\n"],"names":["OptionalBadge","url","altText","statusIcon","children","ariaLabel","rest","_jsx","Badge","badge","src","alt","StatusIcon","sentiment","size","Size","SMALL","_Fragment","AvatarWrapper","profileType","profileId","badgeUrl","badgeAltText","badgeStatusIcon","name","avatarProps","badgeProps","hasImageLoadError","setImageLoadError","useState","isBusinessProfile","ProfileType","BUSINESS","useEffect","getAvatarProps","updatedAvatarProps","type","AvatarType","THUMBNAIL","onError","ICON","BriefcaseIcon","ProfileIcon","INITIALS","getInitials","backgroundColorSeed","toString","Avatar","MEDIUM"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AvatarWrapper.js","sources":["../../src/avatarWrapper/AvatarWrapper.tsx"],"sourcesContent":["import { Person as ProfileIcon, Briefcase as BriefcaseIcon } from '@transferwise/icons';\nimport { useState, useEffect } from 'react';\n\nimport Avatar, { AvatarProps, AvatarType } from '../avatar';\nimport Badge, { BadgeProps } from '../badge';\nimport {\n ProfileType,\n ProfileTypePersonal,\n ProfileTypeBusiness,\n Size,\n Sentiment,\n getInitials,\n} from '../common';\nimport StatusIcon from '../statusIcon/StatusIcon';\n\ninterface OptionalBadgeProps extends Omit<BadgeProps, 'badge'> {\n url?: string;\n ariaLabel?: string;\n altText?: string;\n statusIcon?: Sentiment;\n}\n\nconst OptionalBadge = ({\n url,\n altText,\n statusIcon,\n children,\n ariaLabel,\n ...rest\n}: OptionalBadgeProps) => {\n if (url) {\n return (\n <Badge aria-label={ariaLabel} badge={<img src={url} alt={altText} />} {...rest}>\n {children}\n </Badge>\n );\n }\n if (statusIcon) {\n return (\n <Badge\n aria-label={ariaLabel}\n badge={<StatusIcon sentiment={statusIcon} size={Size.SMALL} />}\n {...rest}\n >\n {children}\n </Badge>\n );\n }\n return <>{children}</>;\n};\n\nexport type AvatarWrapperProps = {\n url?: string;\n 'aria-label'?: string;\n profileType?: ProfileTypeBusiness | ProfileTypePersonal;\n profileId?: string;\n name?: string;\n avatarProps?: AvatarProps;\n badgeProps?: BadgeProps;\n} & (\n | {\n badgeUrl: string;\n badgeAltText: string;\n badgeStatusIcon?: never;\n }\n | {\n badgeUrl?: never;\n badgeAltText?: never;\n badgeStatusIcon: Sentiment;\n }\n | {\n badgeUrl?: never;\n badgeAltText?: never;\n badgeStatusIcon?: never;\n }\n);\n\n/**\n * @deprecated Use `AvatarView` component instead\n */\nconst AvatarWrapper = ({\n url,\n 'aria-label': ariaLabel,\n profileType,\n profileId,\n badgeUrl,\n badgeAltText,\n badgeStatusIcon,\n name,\n avatarProps,\n badgeProps,\n}: AvatarWrapperProps) => {\n const [hasImageLoadError, setImageLoadError] = useState(false);\n const isBusinessProfile = profileType === ProfileType.BUSINESS;\n\n // Reset the errored state when url changes\n useEffect(() => setImageLoadError(false), [url]);\n\n const getAvatarProps = () => {\n let updatedAvatarProps = avatarProps;\n if (!badgeUrl && !badgeStatusIcon && ariaLabel) {\n updatedAvatarProps = { ...updatedAvatarProps, 'aria-label': ariaLabel };\n }\n if (url && !hasImageLoadError) {\n return {\n type: AvatarType.THUMBNAIL,\n children: <img src={url} alt=\"\" onError={() => setImageLoadError(true)} />,\n ...updatedAvatarProps,\n };\n }\n if (profileType) {\n return {\n type: AvatarType.ICON,\n children: isBusinessProfile ? <BriefcaseIcon size=\"24\" /> : <ProfileIcon size=\"24\" />,\n ...updatedAvatarProps,\n };\n }\n if (name) {\n return {\n type: AvatarType.INITIALS,\n children: <>{getInitials(name)}</>,\n backgroundColorSeed: profileId?.toString(),\n ...updatedAvatarProps,\n };\n }\n return {\n type: AvatarType.ICON,\n children: <ProfileIcon size=\"24\" />,\n ...updatedAvatarProps,\n };\n };\n\n return (\n <OptionalBadge\n url={badgeUrl}\n ariaLabel={ariaLabel}\n altText={badgeAltText}\n statusIcon={badgeStatusIcon}\n {...badgeProps}\n >\n <Avatar size={Size.MEDIUM} {...getAvatarProps()} />\n </OptionalBadge>\n );\n};\n\nexport default AvatarWrapper;\n"],"names":["OptionalBadge","url","altText","statusIcon","children","ariaLabel","rest","_jsx","Badge","badge","src","alt","StatusIcon","sentiment","size","Size","SMALL","_Fragment","AvatarWrapper","profileType","profileId","badgeUrl","badgeAltText","badgeStatusIcon","name","avatarProps","badgeProps","hasImageLoadError","setImageLoadError","useState","isBusinessProfile","ProfileType","BUSINESS","useEffect","getAvatarProps","updatedAvatarProps","type","AvatarType","THUMBNAIL","onError","ICON","BriefcaseIcon","ProfileIcon","INITIALS","getInitials","backgroundColorSeed","toString","Avatar","MEDIUM"],"mappings":"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"}
|