@transferwise/components 0.0.0-experimental-426355d → 0.0.0-experimental-91e01ed
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 +187 -0
- package/build/avatarView/AvatarView.js.map +1 -0
- package/build/avatarView/AvatarView.mjs +185 -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 +6 -1
- package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
- package/build/avatarWrapper/AvatarWrapper.mjs +6 -1
- package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
- package/build/badge/Badge.js +8 -1
- package/build/badge/Badge.js.map +1 -1
- package/build/badge/Badge.mjs +8 -1
- package/build/badge/Badge.mjs.map +1 -1
- package/build/badge/BadgeAssets.js +63 -0
- package/build/badge/BadgeAssets.js.map +1 -0
- package/build/badge/BadgeAssets.mjs +61 -0
- package/build/badge/BadgeAssets.mjs.map +1 -0
- package/build/common/circle/Circle.js +29 -3
- package/build/common/circle/Circle.js.map +1 -1
- package/build/common/circle/Circle.mjs +29 -3
- package/build/common/circle/Circle.mjs.map +1 -1
- package/build/dateLookup/DateLookup.js +6 -6
- package/build/dateLookup/DateLookup.js.map +1 -1
- package/build/dateLookup/DateLookup.mjs +6 -6
- package/build/dateLookup/DateLookup.mjs.map +1 -1
- package/build/dateLookup/dayCalendar/table/DayCalendarTable.js +1 -4
- package/build/dateLookup/dayCalendar/table/DayCalendarTable.js.map +1 -1
- package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs +1 -4
- package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs.map +1 -1
- package/build/index.js +15 -4
- package/build/index.js.map +1 -1
- package/build/index.mjs +10 -2
- package/build/index.mjs.map +1 -1
- package/build/main.css +99 -25
- package/build/statusIcon/StatusIcon.js +2 -2
- package/build/statusIcon/StatusIcon.js.map +1 -1
- package/build/statusIcon/StatusIcon.mjs +2 -2
- package/build/statusIcon/StatusIcon.mjs.map +1 -1
- package/build/styles/avatarGroup/AvatarGroup.css +29 -0
- package/build/styles/avatarView/AvatarView.css +28 -0
- package/build/styles/avatarView/NotificationDot.css +20 -0
- package/build/styles/badge/Badge.css +6 -5
- package/build/styles/common/circle/Circle.css +36 -0
- package/build/styles/main.css +99 -25
- package/build/styles/statusIcon/StatusIcon.css +0 -20
- 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 +25 -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/common/circle/Circle.d.ts +3 -1
- package/build/types/common/circle/Circle.d.ts.map +1 -1
- package/build/types/common/dateUtils/index.d.ts +0 -1
- package/build/types/common/dateUtils/index.d.ts.map +1 -1
- package/build/types/dateLookup/DateLookup.d.ts +1 -1
- package/build/types/dateLookup/DateLookup.d.ts.map +1 -1
- package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts +1 -1
- package/build/types/dateLookup/dayCalendar/table/DayCalendarTable.d.ts.map +1 -1
- package/build/types/index.d.ts +3 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/statusIcon/StatusIcon.d.ts +6 -2
- package/build/types/statusIcon/StatusIcon.d.ts.map +1 -1
- package/package.json +1 -1
- 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 +292 -0
- package/src/avatarGroup/AvatarGroup.tsx +114 -0
- package/src/avatarGroup/index.ts +2 -0
- package/src/avatarView/AvatarView.css +28 -0
- package/src/avatarView/AvatarView.less +16 -0
- package/src/avatarView/AvatarView.story.tsx +573 -0
- package/src/avatarView/AvatarView.tsx +184 -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/common/circle/Circle.css +36 -0
- package/src/common/circle/Circle.less +41 -0
- package/src/common/circle/Circle.tsx +41 -3
- package/src/common/dateUtils/index.ts +0 -1
- package/src/dateLookup/DateLookup.tests.story.tsx +5 -40
- package/src/dateLookup/DateLookup.tsx +11 -9
- package/src/dateLookup/dayCalendar/table/DayCalendarTable.tsx +2 -5
- package/src/decision/Decision.story.tsx +10 -46
- package/src/flowNavigation/FlowNavigation.story.js +10 -39
- package/src/index.ts +4 -0
- package/src/listItem/ListItem.story.tsx +6 -43
- package/src/main.css +99 -25
- package/src/main.less +2 -0
- package/src/navigationOption/NavigationOption.story.js +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/statusIcon/StatusIcon.css +0 -20
- package/src/statusIcon/StatusIcon.less +0 -17
- package/src/statusIcon/StatusIcon.tsx +14 -4
- package/src/tile/Tile.story.tsx +2 -6
- package/build/common/dateUtils/getDateView/getDateView.js +0 -10
- package/build/common/dateUtils/getDateView/getDateView.js.map +0 -1
- package/build/common/dateUtils/getDateView/getDateView.mjs +0 -8
- package/build/common/dateUtils/getDateView/getDateView.mjs.map +0 -1
- package/build/types/common/dateUtils/getDateView/getDateView.d.ts +0 -2
- package/build/types/common/dateUtils/getDateView/getDateView.d.ts.map +0 -1
- package/src/common/dateUtils/getDateView/getDateView.ts +0 -5
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 <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;
|
|
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;;;;"}
|
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 <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;
|
|
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.toLowerCase() === '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.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","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","toLowerCase","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,CAAC2C,WAAW,EAAE,KAAK,UAAU,gBAAGrC,cAAA,CAACsC,eAAmB,IAAA,CAAG,gBAAGtC,cAAA,CAACuC,aAAmB,IAAA,CAAG,CAAA;AAC9F,GAAA;AACA,EAAA,IAAI5C,IAAI,EAAE;IACR,OAAO6C,oBAAW,CAAC7C,IAAI,CAAC,CAAA;AAC1B,GAAA;AACA,EAAA,oBAAOK,cAAA,CAACuC,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.toLowerCase() === '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.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","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","toLowerCase","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,GAAA,CAACC,WAAW,EAAA;AAAA,IAAA,GACNX,MAAM;AACVC,IAAAA,SAAS,EAAEW,IAAI,CAAC,gBAAgB,EAAE;AAAE,MAAA,yBAAyB,EAAEf,QAAAA;KAAU,EAAEI,SAAS,CAAE;IAAAP,QAAA,eAEtFgB,GAAA,CAACG,MAAM,EAAA;AAACC,MAAAA,MAAM,EAAE;QAAElB,IAAI;QAAEE,YAAY;AAAED,QAAAA,QAAAA;OAAW;AAAA,MAAA,GAAKE,KAAK;MAAAL,QAAA,eACzDgB,GAAA,CAACK,MAAM,EAAA;AACLnB,QAAAA,IAAI,EAAEA,IAAK;QACXoB,SAAS,EAAA,IAAA;AACTf,QAAAA,SAAS,EAAEW,IAAI,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,GAAA,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,GAAA,CAAA,KAAA,EAAA;AAAKT,MAAAA,SAAS,EAAEW,IAAI,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,GAAA,CAAA,QAAA,EAAA;AACEN,MAAAA,IAAI,EAAC,QAAQ;AACbH,MAAAA,SAAS,EAAEW,IAAI,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,GAAA,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,IAAI,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,IAAAA,IAAI,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,IAAI,GAAG,EAAE,EAAE;IAC7C,MAAMoC,SAAS,GAAuBN,oBAAoB,CAAC9B,IAAI,CAAC,IAAIqC,IAAI,CAACC,KAAK,CAAA;IAC9E,oBACExB,GAAA,CAACyB,KAAK,EAAA;AACJvC,MAAAA,IAAI,EAAEoC,SAAU;MAChBjC,KAAK,eAAEW,GAAA,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,IAAI,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,GAAA,CAAC4B,eAAe,EAAA;AAACC,MAAAA,UAAU,EAAE3C,IAAK;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,QAAQ,CAAC,IAAI,CAAC,CAAA;EACtD,IAAIvC,MAAM,IAAIqC,YAAY,EAAE;IAC1B,oBAAO9B,GAAA,CAACiC,KAAK,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,CAAC2C,WAAW,EAAE,KAAK,UAAU,gBAAGrC,GAAA,CAACsC,SAAmB,IAAA,CAAG,gBAAGtC,GAAA,CAACuC,SAAmB,IAAA,CAAG,CAAA;AAC9F,GAAA;AACA,EAAA,IAAI5C,IAAI,EAAE;IACR,OAAO6C,WAAW,CAAC7C,IAAI,CAAC,CAAA;AAC1B,GAAA;AACA,EAAA,oBAAOK,GAAA,CAACuC,SAAmB,EAAA,GAAG,CAAA;AAChC;;;;"}
|
|
@@ -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;;;;"}
|
|
@@ -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,
|