@transferwise/components 0.0.0-experimental-8d0974a → 0.0.0-experimental-53b8447
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +56 -0
- package/build/avatarView/NotificationDot.js.map +1 -0
- package/build/avatarView/NotificationDot.mjs +54 -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/i18n/de.json +5 -0
- package/build/i18n/de.json.js +5 -0
- package/build/i18n/de.json.js.map +1 -1
- package/build/i18n/de.json.mjs +5 -0
- package/build/i18n/de.json.mjs.map +1 -1
- package/build/i18n/es.json +5 -0
- package/build/i18n/es.json.js +5 -0
- package/build/i18n/es.json.js.map +1 -1
- package/build/i18n/es.json.mjs +5 -0
- package/build/i18n/es.json.mjs.map +1 -1
- package/build/i18n/fr.json +5 -0
- package/build/i18n/fr.json.js +5 -0
- package/build/i18n/fr.json.js.map +1 -1
- package/build/i18n/fr.json.mjs +5 -0
- package/build/i18n/fr.json.mjs.map +1 -1
- package/build/i18n/hu.json +5 -0
- package/build/i18n/hu.json.js +5 -0
- package/build/i18n/hu.json.js.map +1 -1
- package/build/i18n/hu.json.mjs +5 -0
- package/build/i18n/hu.json.mjs.map +1 -1
- package/build/i18n/id.json +5 -0
- package/build/i18n/id.json.js +5 -0
- package/build/i18n/id.json.js.map +1 -1
- package/build/i18n/id.json.mjs +5 -0
- package/build/i18n/id.json.mjs.map +1 -1
- package/build/i18n/it.json +5 -0
- package/build/i18n/it.json.js +5 -0
- package/build/i18n/it.json.js.map +1 -1
- package/build/i18n/it.json.mjs +5 -0
- package/build/i18n/it.json.mjs.map +1 -1
- package/build/i18n/ja.json +5 -0
- package/build/i18n/ja.json.js +5 -0
- package/build/i18n/ja.json.js.map +1 -1
- package/build/i18n/ja.json.mjs +5 -0
- package/build/i18n/ja.json.mjs.map +1 -1
- package/build/i18n/pl.json +5 -0
- package/build/i18n/pl.json.js +5 -0
- package/build/i18n/pl.json.js.map +1 -1
- package/build/i18n/pl.json.mjs +5 -0
- package/build/i18n/pl.json.mjs.map +1 -1
- package/build/i18n/pt.json +5 -0
- package/build/i18n/pt.json.js +5 -0
- package/build/i18n/pt.json.js.map +1 -1
- package/build/i18n/pt.json.mjs +5 -0
- package/build/i18n/pt.json.mjs.map +1 -1
- package/build/i18n/ro.json +5 -0
- package/build/i18n/ro.json.js +5 -0
- package/build/i18n/ro.json.js.map +1 -1
- package/build/i18n/ro.json.mjs +5 -0
- package/build/i18n/ro.json.mjs.map +1 -1
- package/build/i18n/ru.json +5 -0
- package/build/i18n/ru.json.js +5 -0
- package/build/i18n/ru.json.js.map +1 -1
- package/build/i18n/ru.json.mjs +5 -0
- package/build/i18n/ru.json.mjs.map +1 -1
- package/build/i18n/tr.json +5 -0
- package/build/i18n/tr.json.js +5 -0
- package/build/i18n/tr.json.js.map +1 -1
- package/build/i18n/tr.json.mjs +5 -0
- package/build/i18n/tr.json.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 +98 -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 +28 -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 +98 -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 +3 -3
- package/src/avatar/Avatar.tsx +3 -0
- package/src/avatarGroup/AvatarGroup.css +28 -0
- package/src/avatarGroup/AvatarGroup.less +32 -0
- package/src/avatarGroup/AvatarGroup.story.tsx +195 -0
- package/src/avatarGroup/AvatarGroup.tsx +80 -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 +32 -0
- package/src/avatarView/index.ts +2 -0
- package/src/avatarWrapper/AvatarWrapper.story.tsx +6 -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 +42 -1
- 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/i18n/de.json +5 -0
- package/src/i18n/es.json +5 -0
- package/src/i18n/fr.json +5 -0
- package/src/i18n/hu.json +5 -0
- package/src/i18n/id.json +5 -0
- package/src/i18n/it.json +5 -0
- package/src/i18n/ja.json +5 -0
- package/src/i18n/pl.json +5 -0
- package/src/i18n/pt.json +5 -0
- package/src/i18n/ro.json +5 -0
- package/src/i18n/ru.json +5 -0
- package/src/i18n/tr.json +5 -0
- package/src/index.ts +4 -0
- package/src/listItem/ListItem.story.tsx +6 -43
- package/src/main.css +98 -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 === 'business' ? /*#__PURE__*/jsxRuntime.jsx(icons.Briefcase, {}) : /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
|
|
179
|
+
}
|
|
180
|
+
if (name) {
|
|
181
|
+
return initials.getInitials(name);
|
|
182
|
+
}
|
|
183
|
+
return /*#__PURE__*/jsxRuntime.jsx(icons.Profile, {});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
module.exports = AvatarView;
|
|
187
|
+
//# sourceMappingURL=AvatarView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarView.js","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge, { BadgeAssets, BadgeProps, BadgeAssetsProps } from '../badge';\nimport NotificationDot from './NotificationDot';\nimport Circle, { CircleProps } from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (personal initials or business name), it will be boilded down to 1 or 2 chars (initials)\n */\n name?: string | null;\n type?: 'personal' | 'business';\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n // badge?: React.ReactNode;\n badge?: BadgeAssetsProps;\n /** changes background color to neutral and wraps component with button */\n action?: InteractiveProps;\n /** changes background color to neutral and adds predefined Badge */\n selected?: boolean;\n /** often use case to override `background-color` or `border` */\n style?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'children'>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n action,\n className,\n style,\n imgSrc,\n type,\n name,\n}: Props) {\n const isInteractive = Boolean(action?.onClick ?? action?.href);\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!isInteractive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : children}\n </Circle>\n </Badges>\n </Interactive>\n );\n}\n\nfunction Interactive({\n children,\n onClick,\n href,\n target,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: PropsWithChildren<InteractiveProps>) {\n const elementName: React.ElementType | null = onClick ? 'button' : href ? 'a' : null;\n if (elementName === null) {\n // non interactive\n return <div className={clsx(className, 'np-avatar-view-non-interactive')}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, 'btn-unstyled')}\n onClick={onClick}\n {...a11yProps}\n >\n {children}\n </button>\n );\n }\n if (elementName === 'a') {\n return (\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noreferrer' : undefined}\n className={clsx(className, 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\n/** Size of badge depends on size of avatar */\nconst MAP_BADGE_ASSET_SIZE = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** Certain sizes of AvatarView has a custom offset of Badge */\nconst MAP_BADGE_POSITION = {\n 24: -6,\n 32: -4,\n};\n\ntype BadgesProps = BadgeAssetsProps &\n PropsWithChildren<{\n avatar: Pick<Props, 'selected' | 'size' | 'notification'>;\n }>;\n\n/**\n * Adds build-in badges to AvatarView\n */\nfunction Badges({ children, avatar, ...badge }: BadgesProps) {\n const { size = 48, selected, notification } = avatar;\n const anyCustomBadge = Object.keys(badge).length > 0;\n if ((anyCustomBadge || selected) && size > 16) {\n const badgeSize: BadgeProps['size'] = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;\n return (\n <Badge\n size={badgeSize}\n badge={<BadgeAssets {...(selected ? { status: 'positive' } : badge)} size={badgeSize} />}\n style={{\n // @ts-expect-error CSS custom props allowed\n '--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`,\n }}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return <NotificationDot avatarSize={size}>{children}</NotificationDot>;\n }\n return children;\n}\n\n/**\n * Common logic for entities (personal & business profiles or recipients)\n */\nfunction Profile({ imgSrc, name, type }: Pick<Props, 'imgSrc' | 'name' | 'type'>) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imgSrc && tryLoadImage) {\n return <Image src={imgSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (type) {\n return type === 'business' ? <BusinessProfileIcon /> : <PersonalProfileIcon />;\n }\n if (name) {\n return getInitials(name);\n }\n return <PersonalProfileIcon />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarView","children","undefined","size","selected","notification","badge","action","className","style","imgSrc","type","name","isInteractive","Boolean","onClick","href","_jsx","Interactive","clsx","Badges","avatar","Circle","fixedSize","enableBorder","backgroundColor","Profile","target","ariaLabel","ariaLabelledby","elementName","a11yProps","rel","MAP_BADGE_ASSET_SIZE","MAP_BADGE_POSITION","anyCustomBadge","Object","keys","length","badgeSize","Size","SMALL","Badge","BadgeAssets","status","NotificationDot","avatarSize","tryLoadImage","setTryLoadImage","useState","Image","src","alt","onError","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import Badge from '../badge/Badge.mjs';
|
|
2
|
+
import BadgeAssets from '../badge/BadgeAssets.mjs';
|
|
3
|
+
import NotificationDot from './NotificationDot.mjs';
|
|
4
|
+
import Circle from '../common/circle/Circle.mjs';
|
|
5
|
+
import Image from '../image/Image.mjs';
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
import { clsx } from 'clsx';
|
|
8
|
+
import { Briefcase, Profile as Profile$1 } from '@transferwise/icons';
|
|
9
|
+
import { jsx } from 'react/jsx-runtime';
|
|
10
|
+
import { getInitials } from '../common/initials.mjs';
|
|
11
|
+
import { Size } from '../common/propsValues/size.mjs';
|
|
12
|
+
|
|
13
|
+
function AvatarView({
|
|
14
|
+
children = undefined,
|
|
15
|
+
size = 48,
|
|
16
|
+
selected,
|
|
17
|
+
notification,
|
|
18
|
+
badge,
|
|
19
|
+
action,
|
|
20
|
+
className,
|
|
21
|
+
style,
|
|
22
|
+
imgSrc,
|
|
23
|
+
type,
|
|
24
|
+
name
|
|
25
|
+
}) {
|
|
26
|
+
const isInteractive = Boolean(action?.onClick ?? action?.href);
|
|
27
|
+
return /*#__PURE__*/jsx(Interactive, {
|
|
28
|
+
...action,
|
|
29
|
+
className: clsx('np-avatar-view', {
|
|
30
|
+
'np-avatar-view-selected': selected
|
|
31
|
+
}, className),
|
|
32
|
+
children: /*#__PURE__*/jsx(Badges, {
|
|
33
|
+
avatar: {
|
|
34
|
+
size,
|
|
35
|
+
notification,
|
|
36
|
+
selected
|
|
37
|
+
},
|
|
38
|
+
...badge,
|
|
39
|
+
children: /*#__PURE__*/jsx(Circle, {
|
|
40
|
+
size: size,
|
|
41
|
+
fixedSize: true,
|
|
42
|
+
className: clsx('np-avatar-view-content'),
|
|
43
|
+
enableBorder: !isInteractive || selected,
|
|
44
|
+
style: {
|
|
45
|
+
...(selected && {
|
|
46
|
+
'--circle-border-color': 'var(--color-interactive-primary)'
|
|
47
|
+
}),
|
|
48
|
+
backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',
|
|
49
|
+
...style
|
|
50
|
+
},
|
|
51
|
+
children: children === undefined ? /*#__PURE__*/jsx(Profile, {
|
|
52
|
+
imgSrc,
|
|
53
|
+
type,
|
|
54
|
+
name
|
|
55
|
+
}) : children
|
|
56
|
+
})
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function Interactive({
|
|
61
|
+
children,
|
|
62
|
+
onClick,
|
|
63
|
+
href,
|
|
64
|
+
target,
|
|
65
|
+
className,
|
|
66
|
+
'aria-label': ariaLabel,
|
|
67
|
+
'aria-labelledby': ariaLabelledby
|
|
68
|
+
}) {
|
|
69
|
+
const elementName = onClick ? 'button' : href ? 'a' : null;
|
|
70
|
+
if (elementName === null) {
|
|
71
|
+
// non interactive
|
|
72
|
+
return /*#__PURE__*/jsx("div", {
|
|
73
|
+
className: clsx(className, 'np-avatar-view-non-interactive'),
|
|
74
|
+
children: children
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const a11yProps = {
|
|
78
|
+
ariaLabel,
|
|
79
|
+
ariaLabelledby
|
|
80
|
+
};
|
|
81
|
+
if (elementName === 'button') {
|
|
82
|
+
return /*#__PURE__*/jsx("button", {
|
|
83
|
+
type: "button",
|
|
84
|
+
className: clsx(className, 'btn-unstyled'),
|
|
85
|
+
onClick: onClick,
|
|
86
|
+
...a11yProps,
|
|
87
|
+
children: children
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (elementName === 'a') {
|
|
91
|
+
return (
|
|
92
|
+
/*#__PURE__*/
|
|
93
|
+
// eslint-disable-next-line react/jsx-no-target-blank
|
|
94
|
+
jsx("a", {
|
|
95
|
+
href: href,
|
|
96
|
+
target: target,
|
|
97
|
+
rel: target === '_blank' ? 'noreferrer' : undefined,
|
|
98
|
+
className: clsx(className, 'text-no-decoration'),
|
|
99
|
+
...a11yProps,
|
|
100
|
+
children: children
|
|
101
|
+
})
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Size of badge depends on size of avatar */
|
|
106
|
+
const MAP_BADGE_ASSET_SIZE = {
|
|
107
|
+
16: 'sm',
|
|
108
|
+
24: 'sm',
|
|
109
|
+
32: 'sm',
|
|
110
|
+
40: 'sm',
|
|
111
|
+
48: 'sm',
|
|
112
|
+
56: 'lg',
|
|
113
|
+
72: 'lg'
|
|
114
|
+
};
|
|
115
|
+
/** Certain sizes of AvatarView has a custom offset of Badge */
|
|
116
|
+
const MAP_BADGE_POSITION = {
|
|
117
|
+
24: -6,
|
|
118
|
+
32: -4
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Adds build-in badges to AvatarView
|
|
122
|
+
*/
|
|
123
|
+
function Badges({
|
|
124
|
+
children,
|
|
125
|
+
avatar,
|
|
126
|
+
...badge
|
|
127
|
+
}) {
|
|
128
|
+
const {
|
|
129
|
+
size = 48,
|
|
130
|
+
selected,
|
|
131
|
+
notification
|
|
132
|
+
} = avatar;
|
|
133
|
+
const anyCustomBadge = Object.keys(badge).length > 0;
|
|
134
|
+
if ((anyCustomBadge || selected) && size > 16) {
|
|
135
|
+
const badgeSize = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;
|
|
136
|
+
return /*#__PURE__*/jsx(Badge, {
|
|
137
|
+
size: badgeSize,
|
|
138
|
+
badge: /*#__PURE__*/jsx(BadgeAssets, {
|
|
139
|
+
...(selected ? {
|
|
140
|
+
status: 'positive'
|
|
141
|
+
} : badge),
|
|
142
|
+
size: badgeSize
|
|
143
|
+
}),
|
|
144
|
+
style: {
|
|
145
|
+
// @ts-expect-error CSS custom props allowed
|
|
146
|
+
'--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`
|
|
147
|
+
},
|
|
148
|
+
children: children
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
if (notification) {
|
|
152
|
+
return /*#__PURE__*/jsx(NotificationDot, {
|
|
153
|
+
avatarSize: size,
|
|
154
|
+
children: children
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return children;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Common logic for entities (personal & business profiles or recipients)
|
|
161
|
+
*/
|
|
162
|
+
function Profile({
|
|
163
|
+
imgSrc,
|
|
164
|
+
name,
|
|
165
|
+
type
|
|
166
|
+
}) {
|
|
167
|
+
const [tryLoadImage, setTryLoadImage] = useState(true);
|
|
168
|
+
if (imgSrc && tryLoadImage) {
|
|
169
|
+
return /*#__PURE__*/jsx(Image, {
|
|
170
|
+
src: imgSrc,
|
|
171
|
+
alt: "",
|
|
172
|
+
onError: () => setTryLoadImage(false)
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (type) {
|
|
176
|
+
return type === 'business' ? /*#__PURE__*/jsx(Briefcase, {}) : /*#__PURE__*/jsx(Profile$1, {});
|
|
177
|
+
}
|
|
178
|
+
if (name) {
|
|
179
|
+
return getInitials(name);
|
|
180
|
+
}
|
|
181
|
+
return /*#__PURE__*/jsx(Profile$1, {});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export { AvatarView as default };
|
|
185
|
+
//# sourceMappingURL=AvatarView.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AvatarView.mjs","sources":["../../src/avatarView/AvatarView.tsx"],"sourcesContent":["import Badge, { BadgeAssets, BadgeProps, BadgeAssetsProps } from '../badge';\nimport NotificationDot from './NotificationDot';\nimport Circle, { CircleProps } from '../common/circle';\nimport Image from '../image';\nimport { HTMLAttributes, PropsWithChildren, useState } from 'react';\nimport { ActionOptions as ActionProps } from '../common/action/Action';\nimport { clsx } from 'clsx';\nimport { getInitials, Size } from '../common';\nimport {\n Briefcase as BusinessProfileIcon,\n Profile as PersonalProfileIcon,\n} from '@transferwise/icons';\n\ntype InteractiveProps = Omit<ActionProps, 'text'> &\n Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'aria-labelledby'>;\n\nexport type Props = {\n imgSrc?: string | null;\n /**\n * Entity name (personal initials or business name), it will be boilded down to 1 or 2 chars (initials)\n */\n name?: string | null;\n type?: 'personal' | 'business';\n size?: 16 | 24 | 32 | 40 | 48 | 56 | 72;\n /** adds prebuilt notification dot via Badge component */\n notification?: boolean;\n // badge?: React.ReactNode;\n badge?: BadgeAssetsProps;\n /** changes background color to neutral and wraps component with button */\n action?: InteractiveProps;\n /** changes background color to neutral and adds predefined Badge */\n selected?: boolean;\n /** often use case to override `background-color` or `border` */\n style?: Pick<React.CSSProperties, 'border' | 'backgroundColor' | 'color'>;\n} & Pick<HTMLAttributes<HTMLDivElement>, 'className' | 'children'>;\n\nfunction AvatarView({\n children = undefined,\n size = 48,\n selected,\n notification,\n badge,\n action,\n className,\n style,\n imgSrc,\n type,\n name,\n}: Props) {\n const isInteractive = Boolean(action?.onClick ?? action?.href);\n return (\n <Interactive\n {...action}\n className={clsx('np-avatar-view', { 'np-avatar-view-selected': selected }, className)}\n >\n <Badges avatar={{ size, notification, selected }} {...badge}>\n <Circle\n size={size}\n fixedSize\n className={clsx('np-avatar-view-content')}\n enableBorder={!isInteractive || selected}\n style={{\n ...(selected && { '--circle-border-color': 'var(--color-interactive-primary)' }),\n backgroundColor: isInteractive ? 'var(--color-background-neutral)' : 'transparent',\n ...style,\n }}\n >\n {children === undefined ? <Profile {...{ imgSrc, type, name }} /> : children}\n </Circle>\n </Badges>\n </Interactive>\n );\n}\n\nfunction Interactive({\n children,\n onClick,\n href,\n target,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n}: PropsWithChildren<InteractiveProps>) {\n const elementName: React.ElementType | null = onClick ? 'button' : href ? 'a' : null;\n if (elementName === null) {\n // non interactive\n return <div className={clsx(className, 'np-avatar-view-non-interactive')}>{children}</div>;\n }\n const a11yProps = { ariaLabel, ariaLabelledby };\n if (elementName === 'button') {\n return (\n <button\n type=\"button\"\n className={clsx(className, 'btn-unstyled')}\n onClick={onClick}\n {...a11yProps}\n >\n {children}\n </button>\n );\n }\n if (elementName === 'a') {\n return (\n // eslint-disable-next-line react/jsx-no-target-blank\n <a\n href={href}\n target={target}\n rel={target === '_blank' ? 'noreferrer' : undefined}\n className={clsx(className, 'text-no-decoration')}\n {...a11yProps}\n >\n {children}\n </a>\n );\n }\n}\n\n/** Size of badge depends on size of avatar */\nconst MAP_BADGE_ASSET_SIZE = {\n 16: 'sm',\n 24: 'sm',\n 32: 'sm',\n 40: 'sm',\n 48: 'sm',\n 56: 'lg',\n 72: 'lg',\n};\n\n/** Certain sizes of AvatarView has a custom offset of Badge */\nconst MAP_BADGE_POSITION = {\n 24: -6,\n 32: -4,\n};\n\ntype BadgesProps = BadgeAssetsProps &\n PropsWithChildren<{\n avatar: Pick<Props, 'selected' | 'size' | 'notification'>;\n }>;\n\n/**\n * Adds build-in badges to AvatarView\n */\nfunction Badges({ children, avatar, ...badge }: BadgesProps) {\n const { size = 48, selected, notification } = avatar;\n const anyCustomBadge = Object.keys(badge).length > 0;\n if ((anyCustomBadge || selected) && size > 16) {\n const badgeSize: BadgeProps['size'] = MAP_BADGE_ASSET_SIZE[size] ?? Size.SMALL;\n return (\n <Badge\n size={badgeSize}\n badge={<BadgeAssets {...(selected ? { status: 'positive' } : badge)} size={badgeSize} />}\n style={{\n // @ts-expect-error CSS custom props allowed\n '--badge-content-position': `${MAP_BADGE_POSITION[size] ?? 0}px`,\n }}\n >\n {children}\n </Badge>\n );\n }\n if (notification) {\n return <NotificationDot avatarSize={size}>{children}</NotificationDot>;\n }\n return children;\n}\n\n/**\n * Common logic for entities (personal & business profiles or recipients)\n */\nfunction Profile({ imgSrc, name, type }: Pick<Props, 'imgSrc' | 'name' | 'type'>) {\n const [tryLoadImage, setTryLoadImage] = useState(true);\n if (imgSrc && tryLoadImage) {\n return <Image src={imgSrc} alt=\"\" onError={() => setTryLoadImage(false)} />;\n }\n if (type) {\n return type === 'business' ? <BusinessProfileIcon /> : <PersonalProfileIcon />;\n }\n if (name) {\n return getInitials(name);\n }\n return <PersonalProfileIcon />;\n}\n\nexport default AvatarView;\n"],"names":["AvatarView","children","undefined","size","selected","notification","badge","action","className","style","imgSrc","type","name","isInteractive","Boolean","onClick","href","_jsx","Interactive","clsx","Badges","avatar","Circle","fixedSize","enableBorder","backgroundColor","Profile","target","ariaLabel","ariaLabelledby","elementName","a11yProps","rel","MAP_BADGE_ASSET_SIZE","MAP_BADGE_POSITION","anyCustomBadge","Object","keys","length","badgeSize","Size","SMALL","Badge","BadgeAssets","status","NotificationDot","avatarSize","tryLoadImage","setTryLoadImage","useState","Image","src","alt","onError","BusinessProfileIcon","PersonalProfileIcon","getInitials"],"mappings":";;;;;;;;;;;;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,KAAK,UAAU,gBAAGM,GAAA,CAACqC,SAAmB,EAAG,EAAA,CAAA,gBAAGrC,GAAA,CAACsC,SAAmB,KAAG,CAAA;AAChF,GAAA;AACA,EAAA,IAAI3C,IAAI,EAAE;IACR,OAAO4C,WAAW,CAAC5C,IAAI,CAAC,CAAA;AAC1B,GAAA;AACA,EAAA,oBAAOK,GAAA,CAACsC,SAAmB,EAAA,GAAG,CAAA;AAChC;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
|
|
5
|
+
const MAP_STYLE_CONFIG = {
|
|
6
|
+
16: {
|
|
7
|
+
size: 6,
|
|
8
|
+
offset: 1
|
|
9
|
+
},
|
|
10
|
+
24: {
|
|
11
|
+
size: 8,
|
|
12
|
+
offset: 2
|
|
13
|
+
},
|
|
14
|
+
32: {
|
|
15
|
+
size: 10,
|
|
16
|
+
offset: 2
|
|
17
|
+
},
|
|
18
|
+
40: {
|
|
19
|
+
size: 10,
|
|
20
|
+
offset: 2
|
|
21
|
+
},
|
|
22
|
+
48: {
|
|
23
|
+
size: 14,
|
|
24
|
+
offset: 2
|
|
25
|
+
},
|
|
26
|
+
56: {
|
|
27
|
+
size: 16,
|
|
28
|
+
offset: 3
|
|
29
|
+
},
|
|
30
|
+
72: {
|
|
31
|
+
size: 20,
|
|
32
|
+
offset: 3
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
function NotificationDot({
|
|
36
|
+
children,
|
|
37
|
+
avatarSize = 48
|
|
38
|
+
}) {
|
|
39
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
40
|
+
className: "np-notification-dot",
|
|
41
|
+
style: {
|
|
42
|
+
// @ts-expect-error CSS custom props allowed
|
|
43
|
+
'--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
|
|
44
|
+
'--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
|
|
45
|
+
},
|
|
46
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
47
|
+
className: "np-notification-dot-badge"
|
|
48
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
49
|
+
className: "np-notification-dot-mask",
|
|
50
|
+
children: children
|
|
51
|
+
})]
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
module.exports = NotificationDot;
|
|
56
|
+
//# sourceMappingURL=NotificationDot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationDot.js","sources":["../../src/avatarView/NotificationDot.tsx"],"sourcesContent":["import { HTMLAttributes } from 'react';\nimport { Props as AvatarViewProps } from './AvatarView';\n\ntype Props = Pick<HTMLAttributes<HTMLDivElement>, 'children'> & {\n avatarSize?: AvatarViewProps['size'];\n};\n\nconst MAP_STYLE_CONFIG = {\n 16: { size: 6, offset: 1 },\n 24: { size: 8, offset: 2 },\n 32: { size: 10, offset: 2 },\n 40: { size: 10, offset: 2 },\n 48: { size: 14, offset: 2 },\n 56: { size: 16, offset: 3 },\n 72: { size: 20, offset: 3 },\n};\n\nexport default function NotificationDot({ children, avatarSize = 48 }: Props) {\n return (\n <div\n className=\"np-notification-dot\"\n style={{\n // @ts-expect-error CSS custom props allowed\n '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,\n '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`,\n }}\n >\n <div className=\"np-notification-dot-badge\" />\n <div className=\"np-notification-dot-mask\">{children}</div>\n </div>\n );\n}\n"],"names":["MAP_STYLE_CONFIG","size","offset","NotificationDot","children","avatarSize","_jsxs","className","style","_jsx"],"mappings":";;;;AAOA,MAAMA,gBAAgB,GAAG;AACvB,EAAA,EAAE,EAAE;AAAEC,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;AAAG,GAAA;CAC5B,CAAA;AAEa,SAAUC,eAAeA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,UAAU,GAAG,EAAA;AAAW,CAAA,EAAA;AAC1E,EAAA,oBACEC,eAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,qBAAqB;AAC/BC,IAAAA,KAAK,EAAE;AACL;MACA,4BAA4B,EAAE,GAAGR,gBAAgB,CAACK,UAAU,CAAC,CAACJ,IAAI,CAAI,EAAA,CAAA;AACtE,MAAA,8BAA8B,EAAE,CAAGD,EAAAA,gBAAgB,CAACK,UAAU,CAAC,CAACH,MAAM,CAAA,EAAA,CAAA;KACtE;AAAAE,IAAAA,QAAA,gBAEFK,cAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,2BAAA;KACf,CAAA,eAAAE,cAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,0BAA0B;AAAAH,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAC3D,CAAA;AAAA,GAAK,CAAC,CAAA;AAEV;;;;"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
const MAP_STYLE_CONFIG = {
|
|
4
|
+
16: {
|
|
5
|
+
size: 6,
|
|
6
|
+
offset: 1
|
|
7
|
+
},
|
|
8
|
+
24: {
|
|
9
|
+
size: 8,
|
|
10
|
+
offset: 2
|
|
11
|
+
},
|
|
12
|
+
32: {
|
|
13
|
+
size: 10,
|
|
14
|
+
offset: 2
|
|
15
|
+
},
|
|
16
|
+
40: {
|
|
17
|
+
size: 10,
|
|
18
|
+
offset: 2
|
|
19
|
+
},
|
|
20
|
+
48: {
|
|
21
|
+
size: 14,
|
|
22
|
+
offset: 2
|
|
23
|
+
},
|
|
24
|
+
56: {
|
|
25
|
+
size: 16,
|
|
26
|
+
offset: 3
|
|
27
|
+
},
|
|
28
|
+
72: {
|
|
29
|
+
size: 20,
|
|
30
|
+
offset: 3
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
function NotificationDot({
|
|
34
|
+
children,
|
|
35
|
+
avatarSize = 48
|
|
36
|
+
}) {
|
|
37
|
+
return /*#__PURE__*/jsxs("div", {
|
|
38
|
+
className: "np-notification-dot",
|
|
39
|
+
style: {
|
|
40
|
+
// @ts-expect-error CSS custom props allowed
|
|
41
|
+
'--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,
|
|
42
|
+
'--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`
|
|
43
|
+
},
|
|
44
|
+
children: [/*#__PURE__*/jsx("div", {
|
|
45
|
+
className: "np-notification-dot-badge"
|
|
46
|
+
}), /*#__PURE__*/jsx("div", {
|
|
47
|
+
className: "np-notification-dot-mask",
|
|
48
|
+
children: children
|
|
49
|
+
})]
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export { NotificationDot as default };
|
|
54
|
+
//# sourceMappingURL=NotificationDot.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationDot.mjs","sources":["../../src/avatarView/NotificationDot.tsx"],"sourcesContent":["import { HTMLAttributes } from 'react';\nimport { Props as AvatarViewProps } from './AvatarView';\n\ntype Props = Pick<HTMLAttributes<HTMLDivElement>, 'children'> & {\n avatarSize?: AvatarViewProps['size'];\n};\n\nconst MAP_STYLE_CONFIG = {\n 16: { size: 6, offset: 1 },\n 24: { size: 8, offset: 2 },\n 32: { size: 10, offset: 2 },\n 40: { size: 10, offset: 2 },\n 48: { size: 14, offset: 2 },\n 56: { size: 16, offset: 3 },\n 72: { size: 20, offset: 3 },\n};\n\nexport default function NotificationDot({ children, avatarSize = 48 }: Props) {\n return (\n <div\n className=\"np-notification-dot\"\n style={{\n // @ts-expect-error CSS custom props allowed\n '--np-notification-dot-size': `${MAP_STYLE_CONFIG[avatarSize].size}px`,\n '--np-notification-dot-offset': `${MAP_STYLE_CONFIG[avatarSize].offset}px`,\n }}\n >\n <div className=\"np-notification-dot-badge\" />\n <div className=\"np-notification-dot-mask\">{children}</div>\n </div>\n );\n}\n"],"names":["MAP_STYLE_CONFIG","size","offset","NotificationDot","children","avatarSize","_jsxs","className","style","_jsx"],"mappings":";;AAOA,MAAMA,gBAAgB,GAAG;AACvB,EAAA,EAAE,EAAE;AAAEC,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,CAAC;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC1B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;GAAG;AAC3B,EAAA,EAAE,EAAE;AAAED,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,MAAM,EAAE,CAAA;AAAG,GAAA;CAC5B,CAAA;AAEa,SAAUC,eAAeA,CAAC;EAAEC,QAAQ;AAAEC,EAAAA,UAAU,GAAG,EAAA;AAAW,CAAA,EAAA;AAC1E,EAAA,oBACEC,IAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,SAAS,EAAC,qBAAqB;AAC/BC,IAAAA,KAAK,EAAE;AACL;MACA,4BAA4B,EAAE,GAAGR,gBAAgB,CAACK,UAAU,CAAC,CAACJ,IAAI,CAAI,EAAA,CAAA;AACtE,MAAA,8BAA8B,EAAE,CAAGD,EAAAA,gBAAgB,CAACK,UAAU,CAAC,CAACH,MAAM,CAAA,EAAA,CAAA;KACtE;AAAAE,IAAAA,QAAA,gBAEFK,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,2BAAA;KACf,CAAA,eAAAE,GAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,0BAA0B;AAAAH,MAAAA,QAAA,EAAEA,QAAAA;AAAQ,KAAM,CAC3D,CAAA;AAAA,GAAK,CAAC,CAAA;AAEV;;;;"}
|
|
@@ -6,10 +6,12 @@ var avatarTypes = require('../avatar/avatarTypes.js');
|
|
|
6
6
|
var Avatar = require('../avatar/Avatar.js');
|
|
7
7
|
var Badge = require('../badge/Badge.js');
|
|
8
8
|
var StatusIcon = require('../statusIcon/StatusIcon.js');
|
|
9
|
+
require('@wise/art');
|
|
10
|
+
require('clsx');
|
|
9
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
10
12
|
var profileType = require('../common/propsValues/profileType.js');
|
|
11
|
-
var initials = require('../common/initials.js');
|
|
12
13
|
var size = require('../common/propsValues/size.js');
|
|
14
|
+
var initials = require('../common/initials.js');
|
|
13
15
|
|
|
14
16
|
const OptionalBadge = ({
|
|
15
17
|
url,
|
|
@@ -45,6 +47,9 @@ const OptionalBadge = ({
|
|
|
45
47
|
children: children
|
|
46
48
|
});
|
|
47
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Use `AvatarView` component instead
|
|
52
|
+
*/
|
|
48
53
|
const AvatarWrapper = ({
|
|
49
54
|
url,
|
|
50
55
|
'aria-label': ariaLabel,
|