@toptal/picasso-avatar 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist-package/src/Avatar/Avatar.d.ts +2 -3
  2. package/dist-package/src/Avatar/Avatar.d.ts.map +1 -1
  3. package/dist-package/src/Avatar/Avatar.js +2 -5
  4. package/dist-package/src/Avatar/Avatar.js.map +1 -1
  5. package/dist-package/src/Avatar/AvatarWrapper/AvatarWrapper.d.ts +1 -2
  6. package/dist-package/src/Avatar/AvatarWrapper/AvatarWrapper.d.ts.map +1 -1
  7. package/dist-package/src/Avatar/AvatarWrapper/AvatarWrapper.js +19 -4
  8. package/dist-package/src/Avatar/AvatarWrapper/AvatarWrapper.js.map +1 -1
  9. package/dist-package/src/Avatar/AvatarWrapper/styles.d.ts +3 -2
  10. package/dist-package/src/Avatar/AvatarWrapper/styles.d.ts.map +1 -1
  11. package/dist-package/src/Avatar/AvatarWrapper/styles.js +22 -26
  12. package/dist-package/src/Avatar/AvatarWrapper/styles.js.map +1 -1
  13. package/dist-package/src/Avatar/ImageAvatar/ImageAvatar.d.ts.map +1 -1
  14. package/dist-package/src/Avatar/ImageAvatar/ImageAvatar.js +2 -12
  15. package/dist-package/src/Avatar/ImageAvatar/ImageAvatar.js.map +1 -1
  16. package/dist-package/src/AvatarCompound/index.d.ts +1 -2
  17. package/dist-package/src/AvatarCompound/index.d.ts.map +1 -1
  18. package/dist-package/src/AvatarGroup/AvatarGroup.d.ts +3 -1
  19. package/dist-package/src/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  20. package/dist-package/src/AvatarGroup/AvatarGroup.js +3 -3
  21. package/dist-package/src/AvatarGroup/AvatarGroup.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/Avatar/Avatar.tsx +4 -6
  24. package/src/Avatar/AvatarWrapper/AvatarWrapper.tsx +52 -14
  25. package/src/Avatar/AvatarWrapper/styles.ts +24 -27
  26. package/src/Avatar/ImageAvatar/ImageAvatar.tsx +0 -25
  27. package/src/Avatar/story/ToptalLogo.example.tsx +35 -0
  28. package/src/Avatar/story/Variants.example.tsx +1 -10
  29. package/src/Avatar/story/index.jsx +5 -0
  30. package/src/Avatar/test.tsx +7 -2
  31. package/src/AvatarGroup/AvatarGroup.tsx +5 -1
@@ -10,8 +10,8 @@ export interface Props extends StandardProps, HTMLAttributes<HTMLDivElement> {
10
10
  size?: SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>;
11
11
  /** Photo url */
12
12
  src?: string;
13
- /** Variant of the avatar shape */
14
- variant?: 'square' | 'portrait' | 'landscape';
13
+ /** Displays Toptal logo */
14
+ showEmblem?: boolean;
15
15
  /** Callback to show edit-on-click and receive event */
16
16
  onEdit?: (event: React.MouseEvent) => void;
17
17
  testIds?: {
@@ -26,7 +26,6 @@ export declare const Avatar: {
26
26
  (props: Props): JSX.Element;
27
27
  defaultProps: {
28
28
  size: string;
29
- variant: string;
30
29
  };
31
30
  displayName: string;
32
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAsB,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AASrE,MAAM,WAAW,KAAM,SAAQ,aAAa,EAAE,cAAc,CAAC,cAAc,CAAC;IAC1E,eAAe;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW;IACX,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;IACpE,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;IAC7C,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,eAAO,MAAM,MAAM;YAAW,KAAK;;;;;;CAsGlC,CAAA;AASD,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAsB,MAAM,OAAO,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AASrE,MAAM,WAAW,KAAM,SAAQ,aAAa,EAAE,cAAc,CAAC,cAAc,CAAC;IAC1E,eAAe;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW;IACX,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;IACpE,gBAAgB;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uDAAuD;IACvD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAA;IAC1C,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAED,eAAO,MAAM,MAAM;YAAW,KAAK;;;;;CAqGlC,CAAA;AAQD,eAAe,MAAM,CAAA"}
@@ -17,7 +17,7 @@ import IconAvatar from './IconAvatar/IconAvatar';
17
17
  import AvatarWrapper from './AvatarWrapper/AvatarWrapper';
18
18
  import AvatarEditContainer from './AvatarEditContainer/AvatarEditContainer';
19
19
  export const Avatar = (props) => {
20
- const { alt, src, className, name, size, style, variant, testIds, onEdit, 'data-private': dataPrivate } = props, rest = __rest(props, ["alt", "src", "className", "name", "size", "style", "variant", "testIds", "onEdit", 'data-private']);
20
+ const { alt, src, className, name, size, style, showEmblem, testIds, onEdit, 'data-private': dataPrivate } = props, rest = __rest(props, ["alt", "src", "className", "name", "size", "style", "showEmblem", "testIds", "onEdit", 'data-private']);
21
21
  const renderAvatar = useCallback(() => {
22
22
  if (src) {
23
23
  return (React.createElement(ImageAvatar, { alt: alt, className: className, name: name,
@@ -51,9 +51,7 @@ export const Avatar = (props) => {
51
51
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
52
52
  , Object.assign({
53
53
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
54
- variant: variant,
55
- /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
56
- size: size, "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.wrapper }, rest), renderAvatar()));
54
+ size: size, showEmblem: showEmblem, "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.wrapper }, rest), renderAvatar()));
57
55
  if (isEditable) {
58
56
  return (React.createElement("div", { className: 'relative' },
59
57
  avatar,
@@ -63,7 +61,6 @@ export const Avatar = (props) => {
63
61
  };
64
62
  Avatar.defaultProps = {
65
63
  size: 'xsmall',
66
- variant: 'square',
67
64
  };
68
65
  Avatar.displayName = 'Avatar';
69
66
  export default Avatar;
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Avatar.js","sourceRoot":"","sources":["../../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { BaseProps, SizeType } from '@toptal/picasso-shared';
3
3
  export declare type Size = SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>;
4
- export declare type Variant = 'square' | 'portrait' | 'landscape';
5
4
  export interface Props extends BaseProps {
6
5
  children: ReactNode;
7
6
  size: Size;
8
- variant: Variant;
7
+ showEmblem?: boolean;
9
8
  }
10
9
  declare const AvatarWrapper: (props: Props) => JSX.Element;
11
10
  export default AvatarWrapper;
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarWrapper.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/AvatarWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKjE,oBAAY,IAAI,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhF,oBAAY,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAA;AAEzD,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,QAAA,MAAM,aAAa,UAAW,KAAK,gBAwBlC,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"AvatarWrapper.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/AvatarWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAMjE,oBAAY,IAAI,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhF,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,QAAQ,EAAE,SAAS,CAAA;IACnB,IAAI,EAAE,IAAI,CAAA;IACV,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAgCD,QAAA,MAAM,aAAa,UAAW,KAAK,gBAiClC,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -1,9 +1,24 @@
1
1
  import React from 'react';
2
- import { twMerge } from '@toptal/picasso-tailwind-merge';
3
- import { classBySizeAndVariant, clipClassBySize } from './styles';
2
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge';
3
+ import { Logo } from '@toptal/picasso-logo';
4
+ import { avatarLogoClassesBySize, classBySize, clipClassBySize } from './styles';
5
+ const showLogo = (size, showEmblem) => {
6
+ const isTooSmall = ['xsmall', 'xxsmall'].includes(size);
7
+ if (isTooSmall || !showEmblem) {
8
+ return false;
9
+ }
10
+ return true;
11
+ };
12
+ const AvatarLogo = ({ size }) => (React.createElement("div", { className: twJoin('flex absolute bottom-0', avatarLogoClassesBySize.root[size]), role: 'img', "aria-label": 'photo placeholder' },
13
+ React.createElement(Logo, { emblem: true, variant: 'blue',
14
+ // Necessary to decrease the default minWeight and minHeight so that the new width and height could apply
15
+ // eslint-disable-next-line no-inline-styles/no-inline-styles
16
+ style: { minWidth: '1px', minHeight: '1px' }, className: avatarLogoClassesBySize.logo[size] })));
4
17
  const AvatarWrapper = (props) => {
5
- const { children, className, style, 'data-testid': dataTestId, size, variant, } = props;
6
- return (React.createElement("div", { style: style, "data-testid": dataTestId, className: twMerge('relative bg-gray-500 text-[1rem] shrink-0 grow-0', classBySizeAndVariant[size][variant], clipClassBySize[size], className) }, children));
18
+ const { children, className, style, 'data-testid': dataTestId, size, showEmblem = false, } = props;
19
+ return (React.createElement("div", { className: twJoin(`flex relative`, showLogo(size, showEmblem) && 'bg-white') },
20
+ React.createElement("div", { style: style, "data-testid": dataTestId, className: twMerge('relative bg-gray-500 text-[1rem] shrink-0 grow-0', classBySize[size], clipClassBySize[size], className) }, children),
21
+ showLogo(size, showEmblem) && React.createElement(AvatarLogo, { size: size })));
7
22
  };
8
23
  export default AvatarWrapper;
9
24
  //# sourceMappingURL=AvatarWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarWrapper.js","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/AvatarWrapper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAExD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAYjE,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE;IACrC,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,aAAa,EAAE,UAAU,EACzB,IAAI,EACJ,OAAO,GACR,GAAG,KAAK,CAAA;IAET,OAAO,CACL,6BACE,KAAK,EAAE,KAAK,iBACC,UAAU,EACvB,SAAS,EAAE,OAAO,CAChB,kDAAkD,EAClD,qBAAqB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EACpC,eAAe,CAAC,IAAI,CAAC,EACrB,SAAS,CACV,IAEA,QAAQ,CACL,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,aAAa,CAAA"}
1
+ {"version":3,"file":"AvatarWrapper.js","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/AvatarWrapper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAUhF,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,UAAoB,EAAW,EAAE;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEvD,IAAI,UAAU,IAAI,CAAC,UAAU,EAAE;QAC7B,OAAO,KAAK,CAAA;KACb;IAED,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAuB,EAAE,EAAE,CAAC,CACpD,6BACE,SAAS,EAAE,MAAM,CACf,wBAAwB,EACxB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CACnC,EACD,IAAI,EAAC,KAAK,gBACC,mBAAmB;IAE9B,oBAAC,IAAI,IACH,MAAM,QACN,OAAO,EAAC,MAAM;QACd,yGAAyG;QACzG,6DAA6D;QAC7D,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAC5C,SAAS,EAAE,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAC7C,CACE,CACP,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE;IACrC,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,aAAa,EAAE,UAAU,EACzB,IAAI,EACJ,UAAU,GAAG,KAAK,GACnB,GAAG,KAAK,CAAA;IAET,OAAO,CACL,6BACE,SAAS,EAAE,MAAM,CACf,eAAe,EACf,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,UAAU,CACzC;QAED,6BACE,KAAK,EAAE,KAAK,iBACC,UAAU,EACvB,SAAS,EAAE,OAAO,CAChB,kDAAkD,EAClD,WAAW,CAAC,IAAI,CAAC,EACjB,eAAe,CAAC,IAAI,CAAC,EACrB,SAAS,CACV,IAEA,QAAQ,CACL;QAEL,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CACrD,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,aAAa,CAAA"}
@@ -1,4 +1,5 @@
1
- import type { Size, Variant } from './AvatarWrapper';
2
- export declare const classBySizeAndVariant: Record<Size, Record<Variant, string>>;
1
+ import type { Size } from './AvatarWrapper';
2
+ export declare const classBySize: Record<Size, string>;
3
3
  export declare const clipClassBySize: Record<Size, string>;
4
+ export declare const avatarLogoClassesBySize: Record<string, Record<Size, string>>;
4
5
  //# sourceMappingURL=styles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAEpD,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CA0BvE,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAWhD,CAAA"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAM5C,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAWhD,CAAA;AAED,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAexE,CAAA"}
@@ -1,29 +1,9 @@
1
- export const classBySizeAndVariant = {
2
- xxsmall: {
3
- square: 'w-[2em] h-[2em]',
4
- portrait: 'w-[1.333333333em] h-[2em]',
5
- landscape: 'w-[2em] h-[1.333333333em]',
6
- },
7
- xsmall: {
8
- square: 'w-[2.5em] h-[2.5em]',
9
- portrait: 'w-[1.666666666em] h-[2.5em]',
10
- landscape: 'w-[2.5em] h-[1.666666666em]',
11
- },
12
- small: {
13
- square: 'w-[5em] h-[5em]',
14
- portrait: 'w-[3.333333333em] h-[5em]',
15
- landscape: 'w-[5em] h-[3.333333333em]',
16
- },
17
- medium: {
18
- square: 'w-[7.5em] h-[7.5em]',
19
- portrait: 'w-[5em] h-[7.5em]',
20
- landscape: 'w-[7.5em] h-[5em]',
21
- },
22
- large: {
23
- square: 'w-[10em] h-[10em]',
24
- portrait: 'w-[7.5em] h-[10em]',
25
- landscape: 'w-[10em] h-[7.5em]',
26
- },
1
+ export const classBySize = {
2
+ xxsmall: 'w-[2em] h-[2em]',
3
+ xsmall: 'w-[2.5em] h-[2.5em]',
4
+ small: 'w-[5em] h-[5em]',
5
+ medium: 'w-[7.5em] h-[7.5em]',
6
+ large: 'w-[10em] h-[10em]',
27
7
  };
28
8
  export const clipClassBySize = {
29
9
  xxsmall: '[clip-path:polygon(0_0,_100%_0,_100%_100%,_0.5em_100%,_0_calc(100%-0.5em))]',
@@ -32,4 +12,20 @@ export const clipClassBySize = {
32
12
  medium: '[clip-path:polygon(0_0,_100%_0,_100%_100%,_1.5em_100%,_0_calc(100%-1.5em))]',
33
13
  large: '[clip-path:polygon(0_0,_100%_0,_100%_100%,_1.5em_100%,_0_calc(100%-1.5em))]',
34
14
  };
15
+ export const avatarLogoClassesBySize = {
16
+ root: {
17
+ xxsmall: '',
18
+ xsmall: '',
19
+ small: 'pl-[1px] pb-[1px]',
20
+ medium: 'pl-[2px] pb-[2px]',
21
+ large: 'pl-[3px] pb-[3px]',
22
+ },
23
+ logo: {
24
+ xxsmall: '',
25
+ xsmall: '',
26
+ small: 'w-[5.7px] h-[8px]',
27
+ medium: 'w-[8.54px] h-[12px]',
28
+ large: 'w-[7.12px] h-[10px]',
29
+ },
30
+ };
35
31
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/styles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAA0C;IAC1E,OAAO,EAAE;QACP,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,2BAA2B;QACrC,SAAS,EAAE,2BAA2B;KACvC;IACD,MAAM,EAAE;QACN,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,6BAA6B;QACvC,SAAS,EAAE,6BAA6B;KACzC;IACD,KAAK,EAAE;QACL,MAAM,EAAE,iBAAiB;QACzB,QAAQ,EAAE,2BAA2B;QACrC,SAAS,EAAE,2BAA2B;KACvC;IACD,MAAM,EAAE;QACN,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,mBAAmB;QAC7B,SAAS,EAAE,mBAAmB;KAC/B;IACD,KAAK,EAAE;QACL,MAAM,EAAE,mBAAmB;QAC3B,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,oBAAoB;KAChC;CACF,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD,OAAO,EACL,6EAA6E;IAC/E,MAAM,EACJ,6EAA6E;IAC/E,KAAK,EACH,yEAAyE;IAC3E,MAAM,EACJ,6EAA6E;IAC/E,KAAK,EACH,6EAA6E;CAChF,CAAA"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../src/Avatar/AvatarWrapper/styles.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAyB;IAC/C,OAAO,EAAE,iBAAiB;IAC1B,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,mBAAmB;CAC3B,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD,OAAO,EACL,6EAA6E;IAC/E,MAAM,EACJ,6EAA6E;IAC/E,KAAK,EACH,yEAAyE;IAC3E,MAAM,EACJ,6EAA6E;IAC/E,KAAK,EACH,6EAA6E;CAChF,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAyC;IAC3E,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,mBAAmB;QAC3B,KAAK,EAAE,mBAAmB;KAC3B;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,qBAAqB;QAC7B,KAAK,EAAE,qBAAqB;KAC7B;CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImageAvatar.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/ImageAvatar/ImageAvatar.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKjE,oBAAY,IAAI,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhF,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAwBD,QAAA,MAAM,WAAW,UAAW,KAAK,gBA4BhC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"ImageAvatar.d.ts","sourceRoot":"","sources":["../../../../src/Avatar/ImageAvatar/ImageAvatar.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAIjE,oBAAY,IAAI,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;AAEhF,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,QAAA,MAAM,WAAW,UAAW,KAAK,gBA0BhC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -1,20 +1,10 @@
1
1
  import React from 'react';
2
- import { Logo } from '@toptal/picasso-logo';
3
2
  import { Image } from '@toptal/picasso-image';
4
3
  import { twMerge } from '@toptal/picasso-tailwind-merge';
5
- const AvatarLogo = ({ size }) => {
6
- const isTooSmall = ['small', 'xsmall', 'xxsmall'].includes(size);
7
- if (isTooSmall) {
8
- return null;
9
- }
10
- return (React.createElement("div", { className: 'flex absolute bottom-4 left-4', role: 'img', "aria-label": 'photo placeholder' },
11
- React.createElement(Logo, { emblem: true, variant: 'white', className: 'w-[1.0625rem] h-6' })));
12
- };
13
4
  const ImageAvatar = (props) => {
14
- const { alt, className, name, size, src, style, 'data-testid': dataTestId, 'data-private': dataPrivate, } = props;
5
+ const { alt, className, name, src, style, 'data-testid': dataTestId, 'data-private': dataPrivate, } = props;
15
6
  return (React.createElement(React.Fragment, null,
16
- React.createElement(Image, { alt: alt || name || '', className: twMerge('object-cover w-full h-full absolute left-0 top-0 [image-rendering:-webkit-optimize-contrast]', className), src: src, style: style, "data-testid": dataTestId, "data-private": dataPrivate }),
17
- React.createElement(AvatarLogo, { size: size })));
7
+ React.createElement(Image, { alt: alt || name || '', className: twMerge('object-cover w-full h-full absolute left-0 top-0 [image-rendering:-webkit-optimize-contrast]', className), src: src, style: style, "data-testid": dataTestId, "data-private": dataPrivate })));
18
8
  };
19
9
  export default ImageAvatar;
20
10
  //# sourceMappingURL=ImageAvatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageAvatar.js","sourceRoot":"","sources":["../../../../src/Avatar/ImageAvatar/ImageAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAexD,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAa,EAAE,EAAE;IACzC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEhE,IAAI,UAAU,EAAE;QACd,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,6BACE,SAAS,EAAC,+BAA+B,EACzC,IAAI,EAAC,KAAK,gBACC,mBAAmB;QAE9B,oBAAC,IAAI,IAAC,MAAM,QAAC,OAAO,EAAC,OAAO,EAAC,SAAS,EAAC,mBAAmB,GAAG,CACzD,CACP,CAAA;AACH,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;IACnC,MAAM,EACJ,GAAG,EACH,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,KAAK,EACL,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,WAAW,GAC5B,GAAG,KAAK,CAAA;IAET,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EACtB,SAAS,EAAE,OAAO,CAChB,8FAA8F,EAC9F,SAAS,CACV,EACD,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,iBACC,UAAU,kBACT,WAAW,GACzB;QACF,oBAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CACzB,CACJ,CAAA;AACH,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"ImageAvatar.js","sourceRoot":"","sources":["../../../../src/Avatar/ImageAvatar/ImageAvatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAWxD,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;IACnC,MAAM,EACJ,GAAG,EACH,SAAS,EACT,IAAI,EACJ,GAAG,EACH,KAAK,EACL,aAAa,EAAE,UAAU,EACzB,cAAc,EAAE,WAAW,GAC5B,GAAG,KAAK,CAAA;IAET,OAAO,CACL;QACE,oBAAC,KAAK,IACJ,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EACtB,SAAS,EAAE,OAAO,CAChB,8FAA8F,EAC9F,SAAS,CACV,EACD,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,iBACC,UAAU,kBACT,WAAW,GACzB,CACD,CACJ,CAAA;AACH,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -3,12 +3,11 @@ export declare const AvatarCompound: {
3
3
  (props: import("../Avatar/Avatar").Props): JSX.Element;
4
4
  defaultProps: {
5
5
  size: string;
6
- variant: string;
7
6
  };
8
7
  displayName: string;
9
8
  } & {
10
9
  Group: {
11
- ({ className, style, testIds, items, limit, size, }: import("../AvatarGroup/AvatarGroup").Props): JSX.Element | null;
10
+ ({ className, style, testIds, items, limit, size, showEmblem, }: import("../AvatarGroup/AvatarGroup").Props): JSX.Element | null;
12
11
  defaultProps: {
13
12
  limit: number;
14
13
  size: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/AvatarCompound/index.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;CAEzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/AvatarCompound/index.ts"],"names":[],"mappings":";AAGA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAEzB,CAAA"}
@@ -13,6 +13,8 @@ export interface Props extends Omit<BaseProps, 'data-testid'> {
13
13
  limit?: number;
14
14
  /** Size */
15
15
  size?: SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>;
16
+ /** Displays Toptal logo */
17
+ showEmblem?: boolean;
16
18
  /** data-testid to all parts of component */
17
19
  testIds?: {
18
20
  container?: string;
@@ -20,7 +22,7 @@ export interface Props extends Omit<BaseProps, 'data-testid'> {
20
22
  };
21
23
  }
22
24
  declare const AvatarGroup: {
23
- ({ className, style, testIds, items, limit, size, }: Props): JSX.Element | null;
25
+ ({ className, style, testIds, items, limit, size, showEmblem, }: Props): JSX.Element | null;
24
26
  defaultProps: {
25
27
  limit: number;
26
28
  size: string;
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AASjE,aAAK,QAAQ,GAAG;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;IAC3D,gCAAgC;IAChC,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW;IACX,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;IACpE,4CAA4C;IAC5C,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,QAAA,MAAM,WAAW;yDAOd,KAAK;;;;;CAiDP,CAAA;AAOD,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"AvatarGroup.d.ts","sourceRoot":"","sources":["../../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AASjE,aAAK,QAAQ,GAAG;IACd,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,WAAW,KAAM,SAAQ,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;IAC3D,gCAAgC;IAChC,KAAK,EAAE,QAAQ,EAAE,CAAA;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW;IACX,IAAI,CAAC,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAA;IACpE,2BAA2B;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,QAAA,MAAM,WAAW;qEAQd,KAAK;;;;;CAkDP,CAAA;AAOD,eAAe,WAAW,CAAA"}
@@ -4,7 +4,7 @@ import { twMerge } from '@toptal/picasso-tailwind-merge';
4
4
  import { Avatar } from '../Avatar';
5
5
  import AvatarWrapper from '../Avatar/AvatarWrapper/AvatarWrapper';
6
6
  import TextAvatar from '../Avatar/TextAvatar/TextAvatar';
7
- const AvatarGroup = ({ className, style, testIds, items, limit, size, }) => {
7
+ const AvatarGroup = ({ className, style, testIds, items, limit, size, showEmblem = false, }) => {
8
8
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
9
9
  const isOverLimit = items.length > limit;
10
10
  // we need to add +1 for the last item that is going to be transformed to numbered Avatar
@@ -19,10 +19,10 @@ const AvatarGroup = ({ className, style, testIds, items, limit, size, }) => {
19
19
  return (React.createElement(Container, { className: twMerge('max-w-full overflow-x-auto', className), "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.container, flex: true, gap: 'xsmall', style: style },
20
20
  avatarsToRender.map(({ alt, name, src, 'data-testid': avatarTestId }, index) => (React.createElement(Avatar, { alt: alt, key: `${name}-${alt}-${String(index)}`, name: name,
21
21
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
22
- size: size, src: src, "data-testid": avatarTestId }))),
22
+ size: size, showEmblem: showEmblem, src: src, "data-testid": avatarTestId }))),
23
23
  isOverLimit ? (
24
24
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
25
- React.createElement(AvatarWrapper, { size: size, variant: 'square' },
25
+ React.createElement(AvatarWrapper, { size: size },
26
26
  React.createElement(TextAvatar, { "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.overLimit, size: size },
27
27
  "+",
28
28
  itemsOverLimit))) : null));
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarGroup.js","sourceRoot":"","sources":["../../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,aAAa,MAAM,uCAAuC,CAAA;AACjE,OAAO,UAAU,MAAM,iCAAiC,CAAA;AAuBxD,MAAM,WAAW,GAAG,CAAC,EACnB,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,IAAI,GACE,EAAE,EAAE;IACV,uEAAuE;IACvE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,KAAM,CAAA;IACzC,yFAAyF;IACzF,uEAAuE;IACvE,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,KAAM,GAAG,CAAC,CAAA;IAChD,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE;IACH,uEAAuE;IACvE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAClD,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAC5B,CAAA;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,oBAAC,SAAS,IACR,SAAS,EAAE,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC,iBAC9C,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAC/B,IAAI,QACJ,GAAG,EAAC,QAAQ,EACZ,KAAK,EAAE,KAAK;QAEX,eAAe,CAAC,GAAG,CAClB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1D,oBAAC,MAAM,IACL,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EACtC,IAAI,EAAE,IAAI;YACV,uEAAuE;YACvE,IAAI,EAAE,IAAK,EACX,GAAG,EAAE,GAAG,iBACK,YAAY,GACzB,CACH,CACF;QACA,WAAW,CAAC,CAAC,CAAC;QACb,uEAAuE;QACvE,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAK,EAAE,OAAO,EAAC,QAAQ;YAE1C,oBAAC,UAAU,mBAAc,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE,IAAI,EAAE,IAAK;;gBACpD,cAAc,CACL,CACC,CACjB,CAAC,CAAC,CAAC,IAAI,CACE,CACb,CAAA;AACH,CAAC,CAAA;AAED,WAAW,CAAC,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,QAAQ;CACf,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"AvatarGroup.js","sourceRoot":"","sources":["../../../src/AvatarGroup/AvatarGroup.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAClC,OAAO,aAAa,MAAM,uCAAuC,CAAA;AACjE,OAAO,UAAU,MAAM,iCAAiC,CAAA;AAyBxD,MAAM,WAAW,GAAG,CAAC,EACnB,SAAS,EACT,KAAK,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,GAAG,KAAK,GACZ,EAAE,EAAE;IACV,uEAAuE;IACvE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,KAAM,CAAA;IACzC,yFAAyF;IACzF,uEAAuE;IACvE,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,KAAM,GAAG,CAAC,CAAA;IAChD,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE;IACH,uEAAuE;IACvE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAClD,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,CAC5B,CAAA;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,CACL,oBAAC,SAAS,IACR,SAAS,EAAE,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC,iBAC9C,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAC/B,IAAI,QACJ,GAAG,EAAC,QAAQ,EACZ,KAAK,EAAE,KAAK;QAEX,eAAe,CAAC,GAAG,CAClB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1D,oBAAC,MAAM,IACL,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,EACtC,IAAI,EAAE,IAAI;YACV,uEAAuE;YACvE,IAAI,EAAE,IAAK,EACX,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,GAAG,iBACK,YAAY,GACzB,CACH,CACF;QACA,WAAW,CAAC,CAAC,CAAC;QACb,uEAAuE;QACvE,oBAAC,aAAa,IAAC,IAAI,EAAE,IAAK;YAExB,oBAAC,UAAU,mBAAc,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAAE,IAAI,EAAE,IAAK;;gBACpD,cAAc,CACL,CACC,CACjB,CAAC,CAAC,CAAC,IAAI,CACE,CACb,CAAA;AACH,CAAC,CAAA;AAED,WAAW,CAAC,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,QAAQ;CACf,CAAA;AAED,eAAe,WAAW,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-avatar",
3
- "version": "3.0.0",
3
+ "version": "4.0.0",
4
4
  "description": "Toptal UI components library - Avatar",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -23,9 +23,9 @@
23
23
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
24
24
  "dependencies": {
25
25
  "@toptal/picasso-container": "1.0.3",
26
- "@toptal/picasso-icons": "1.4.0",
26
+ "@toptal/picasso-icons": "1.5.0",
27
27
  "@toptal/picasso-image": "1.0.3",
28
- "@toptal/picasso-logo": "1.0.7",
28
+ "@toptal/picasso-logo": "1.0.8",
29
29
  "@toptal/picasso-shared": "15.0.0",
30
30
  "@toptal/picasso-typography": "2.0.2",
31
31
  "@toptal/picasso-utils": "1.0.3"
@@ -18,8 +18,8 @@ export interface Props extends StandardProps, HTMLAttributes<HTMLDivElement> {
18
18
  size?: SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>
19
19
  /** Photo url */
20
20
  src?: string
21
- /** Variant of the avatar shape */
22
- variant?: 'square' | 'portrait' | 'landscape'
21
+ /** Displays Toptal logo */
22
+ showEmblem?: boolean
23
23
  /** Callback to show edit-on-click and receive event */
24
24
  onEdit?: (event: React.MouseEvent) => void
25
25
  testIds?: {
@@ -39,7 +39,7 @@ export const Avatar = (props: Props) => {
39
39
  name,
40
40
  size,
41
41
  style,
42
- variant,
42
+ showEmblem,
43
43
  testIds,
44
44
  onEdit,
45
45
  'data-private': dataPrivate,
@@ -106,10 +106,9 @@ export const Avatar = (props: Props) => {
106
106
 
107
107
  const avatar = (
108
108
  <AvatarWrapper
109
- /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
110
- variant={variant!}
111
109
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
112
110
  size={size!}
111
+ showEmblem={showEmblem}
113
112
  data-testid={testIds?.wrapper}
114
113
  {...rest}
115
114
  >
@@ -137,7 +136,6 @@ export const Avatar = (props: Props) => {
137
136
 
138
137
  Avatar.defaultProps = {
139
138
  size: 'xsmall',
140
- variant: 'square',
141
139
  }
142
140
 
143
141
  Avatar.displayName = 'Avatar'
@@ -1,20 +1,49 @@
1
1
  import type { ReactNode } from 'react'
2
2
  import React from 'react'
3
3
  import type { BaseProps, SizeType } from '@toptal/picasso-shared'
4
- import { twMerge } from '@toptal/picasso-tailwind-merge'
4
+ import { twJoin, twMerge } from '@toptal/picasso-tailwind-merge'
5
+ import { Logo } from '@toptal/picasso-logo'
5
6
 
6
- import { classBySizeAndVariant, clipClassBySize } from './styles'
7
+ import { avatarLogoClassesBySize, classBySize, clipClassBySize } from './styles'
7
8
 
8
9
  export type Size = SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>
9
10
 
10
- export type Variant = 'square' | 'portrait' | 'landscape'
11
-
12
11
  export interface Props extends BaseProps {
13
12
  children: ReactNode
14
13
  size: Size
15
- variant: Variant
14
+ showEmblem?: boolean
16
15
  }
17
16
 
17
+ const showLogo = (size: Size, showEmblem?: boolean): boolean => {
18
+ const isTooSmall = ['xsmall', 'xxsmall'].includes(size)
19
+
20
+ if (isTooSmall || !showEmblem) {
21
+ return false
22
+ }
23
+
24
+ return true
25
+ }
26
+
27
+ const AvatarLogo = ({ size }: Pick<Props, 'size'>) => (
28
+ <div
29
+ className={twJoin(
30
+ 'flex absolute bottom-0',
31
+ avatarLogoClassesBySize.root[size]
32
+ )}
33
+ role='img'
34
+ aria-label='photo placeholder'
35
+ >
36
+ <Logo
37
+ emblem
38
+ variant='blue'
39
+ // Necessary to decrease the default minWeight and minHeight so that the new width and height could apply
40
+ // eslint-disable-next-line no-inline-styles/no-inline-styles
41
+ style={{ minWidth: '1px', minHeight: '1px' }}
42
+ className={avatarLogoClassesBySize.logo[size]}
43
+ />
44
+ </div>
45
+ )
46
+
18
47
  const AvatarWrapper = (props: Props) => {
19
48
  const {
20
49
  children,
@@ -22,21 +51,30 @@ const AvatarWrapper = (props: Props) => {
22
51
  style,
23
52
  'data-testid': dataTestId,
24
53
  size,
25
- variant,
54
+ showEmblem = false,
26
55
  } = props
27
56
 
28
57
  return (
29
58
  <div
30
- style={style}
31
- data-testid={dataTestId}
32
- className={twMerge(
33
- 'relative bg-gray-500 text-[1rem] shrink-0 grow-0',
34
- classBySizeAndVariant[size][variant],
35
- clipClassBySize[size],
36
- className
59
+ className={twJoin(
60
+ `flex relative`,
61
+ showLogo(size, showEmblem) && 'bg-white'
37
62
  )}
38
63
  >
39
- {children}
64
+ <div
65
+ style={style}
66
+ data-testid={dataTestId}
67
+ className={twMerge(
68
+ 'relative bg-gray-500 text-[1rem] shrink-0 grow-0',
69
+ classBySize[size],
70
+ clipClassBySize[size],
71
+ className
72
+ )}
73
+ >
74
+ {children}
75
+ </div>
76
+
77
+ {showLogo(size, showEmblem) && <AvatarLogo size={size} />}
40
78
  </div>
41
79
  )
42
80
  }
@@ -1,31 +1,11 @@
1
- import type { Size, Variant } from './AvatarWrapper'
1
+ import type { Size } from './AvatarWrapper'
2
2
 
3
- export const classBySizeAndVariant: Record<Size, Record<Variant, string>> = {
4
- xxsmall: {
5
- square: 'w-[2em] h-[2em]',
6
- portrait: 'w-[1.333333333em] h-[2em]',
7
- landscape: 'w-[2em] h-[1.333333333em]',
8
- },
9
- xsmall: {
10
- square: 'w-[2.5em] h-[2.5em]',
11
- portrait: 'w-[1.666666666em] h-[2.5em]',
12
- landscape: 'w-[2.5em] h-[1.666666666em]',
13
- },
14
- small: {
15
- square: 'w-[5em] h-[5em]',
16
- portrait: 'w-[3.333333333em] h-[5em]',
17
- landscape: 'w-[5em] h-[3.333333333em]',
18
- },
19
- medium: {
20
- square: 'w-[7.5em] h-[7.5em]',
21
- portrait: 'w-[5em] h-[7.5em]',
22
- landscape: 'w-[7.5em] h-[5em]',
23
- },
24
- large: {
25
- square: 'w-[10em] h-[10em]',
26
- portrait: 'w-[7.5em] h-[10em]',
27
- landscape: 'w-[10em] h-[7.5em]',
28
- },
3
+ export const classBySize: Record<Size, string> = {
4
+ xxsmall: 'w-[2em] h-[2em]',
5
+ xsmall: 'w-[2.5em] h-[2.5em]',
6
+ small: 'w-[5em] h-[5em]',
7
+ medium: 'w-[7.5em] h-[7.5em]',
8
+ large: 'w-[10em] h-[10em]',
29
9
  }
30
10
 
31
11
  export const clipClassBySize: Record<Size, string> = {
@@ -40,3 +20,20 @@ export const clipClassBySize: Record<Size, string> = {
40
20
  large:
41
21
  '[clip-path:polygon(0_0,_100%_0,_100%_100%,_1.5em_100%,_0_calc(100%-1.5em))]',
42
22
  }
23
+
24
+ export const avatarLogoClassesBySize: Record<string, Record<Size, string>> = {
25
+ root: {
26
+ xxsmall: '',
27
+ xsmall: '',
28
+ small: 'pl-[1px] pb-[1px]',
29
+ medium: 'pl-[2px] pb-[2px]',
30
+ large: 'pl-[3px] pb-[3px]',
31
+ },
32
+ logo: {
33
+ xxsmall: '',
34
+ xsmall: '',
35
+ small: 'w-[5.7px] h-[8px]',
36
+ medium: 'w-[8.54px] h-[12px]',
37
+ large: 'w-[7.12px] h-[10px]',
38
+ },
39
+ }
@@ -1,6 +1,5 @@
1
1
  import React from 'react'
2
2
  import type { BaseProps, SizeType } from '@toptal/picasso-shared'
3
- import { Logo } from '@toptal/picasso-logo'
4
3
  import { Image } from '@toptal/picasso-image'
5
4
  import { twMerge } from '@toptal/picasso-tailwind-merge'
6
5
 
@@ -13,34 +12,11 @@ export interface Props extends BaseProps {
13
12
  name?: string
14
13
  }
15
14
 
16
- type LogoProps = {
17
- size: Size
18
- }
19
-
20
- const AvatarLogo = ({ size }: LogoProps) => {
21
- const isTooSmall = ['small', 'xsmall', 'xxsmall'].includes(size)
22
-
23
- if (isTooSmall) {
24
- return null
25
- }
26
-
27
- return (
28
- <div
29
- className='flex absolute bottom-4 left-4'
30
- role='img'
31
- aria-label='photo placeholder'
32
- >
33
- <Logo emblem variant='white' className='w-[1.0625rem] h-6' />
34
- </div>
35
- )
36
- }
37
-
38
15
  const ImageAvatar = (props: Props) => {
39
16
  const {
40
17
  alt,
41
18
  className,
42
19
  name,
43
- size,
44
20
  src,
45
21
  style,
46
22
  'data-testid': dataTestId,
@@ -60,7 +36,6 @@ const ImageAvatar = (props: Props) => {
60
36
  data-testid={dataTestId}
61
37
  data-private={dataPrivate}
62
38
  />
63
- <AvatarLogo size={size} />
64
39
  </>
65
40
  )
66
41
  }
@@ -0,0 +1,35 @@
1
+ import React from 'react'
2
+ import { Avatar, Container } from '@toptal/picasso'
3
+ import { SPACING_4 } from '@toptal/picasso-utils'
4
+
5
+ const Example = () => (
6
+ <div>
7
+ <Container inline>
8
+ <Avatar size='xxsmall' showEmblem />
9
+ </Container>
10
+
11
+ <Container inline left={SPACING_4}>
12
+ <Avatar size='xsmall' showEmblem />
13
+ </Container>
14
+
15
+ <Container inline left={SPACING_4}>
16
+ <Avatar size='small' showEmblem />
17
+ </Container>
18
+
19
+ <Container inline left={SPACING_4}>
20
+ <Avatar size='medium' name='Jacqueline Roque' showEmblem />
21
+ </Container>
22
+
23
+ <Container inline left={SPACING_4}>
24
+ <Avatar
25
+ size='large'
26
+ alt='Jacqueline Roque. Pablo Picasso, 1954'
27
+ name='Jacqueline Roque'
28
+ src='./jacqueline-with-flowers-1954-square.jpg'
29
+ showEmblem
30
+ />
31
+ </Container>
32
+ </div>
33
+ )
34
+
35
+ export default Example
@@ -20,20 +20,11 @@ const Example = () => (
20
20
  </Container>
21
21
  <Container inline left={SPACING_4}>
22
22
  <Avatar
23
- variant='portrait'
24
- size='medium'
25
- alt='Jacqueline Roque. Pablo Picasso, 1954'
26
- name='Jacqueline Roque'
27
- src='./jacqueline-with-flowers-1954-square.jpg'
28
- />
29
- </Container>
30
- <Container inline left={SPACING_4}>
31
- <Avatar
32
- variant='landscape'
33
23
  size='medium'
34
24
  alt='Jacqueline Roque. Pablo Picasso, 1954'
35
25
  name='Jacqueline Roque'
36
26
  src='./jacqueline-with-flowers-1954-square.jpg'
27
+ showEmblem
37
28
  />
38
29
  </Container>
39
30
  </div>
@@ -34,5 +34,10 @@ page
34
34
  'Editable state',
35
35
  'base/Avatar'
36
36
  )
37
+ .addExample(
38
+ 'Avatar/story/ToptalLogo.example.tsx',
39
+ 'Variant with Toptal logo',
40
+ 'base/Avatar'
41
+ )
37
42
 
38
43
  page.connect(AvatarGroupStory.chapter)
@@ -6,7 +6,7 @@ import type { Props } from './Avatar'
6
6
  import { Avatar } from './Avatar'
7
7
 
8
8
  const renderAvatar = (props: OmitInternalProps<Props>) => {
9
- const { alt, name, src, size, onEdit, testIds } = props
9
+ const { alt, name, src, size, showEmblem = false, onEdit, testIds } = props
10
10
 
11
11
  return render(
12
12
  <Avatar
@@ -14,6 +14,7 @@ const renderAvatar = (props: OmitInternalProps<Props>) => {
14
14
  name={name}
15
15
  src={src}
16
16
  size={size}
17
+ showEmblem={showEmblem}
17
18
  testIds={testIds}
18
19
  onEdit={onEdit}
19
20
  />
@@ -50,7 +51,11 @@ describe('Avatar', () => {
50
51
  })
51
52
 
52
53
  it('renders with logo', () => {
53
- const { getAllByRole } = renderAvatar({ src: 'foobar', size: 'medium' })
54
+ const { getAllByRole } = renderAvatar({
55
+ src: 'foobar',
56
+ size: 'medium',
57
+ showEmblem: true,
58
+ })
54
59
 
55
60
  expect(getAllByRole('img')).toHaveLength(2)
56
61
  })
@@ -21,6 +21,8 @@ export interface Props extends Omit<BaseProps, 'data-testid'> {
21
21
  limit?: number
22
22
  /** Size */
23
23
  size?: SizeType<'xxsmall' | 'xsmall' | 'small' | 'medium' | 'large'>
24
+ /** Displays Toptal logo */
25
+ showEmblem?: boolean
24
26
  /** data-testid to all parts of component */
25
27
  testIds?: {
26
28
  container?: string
@@ -35,6 +37,7 @@ const AvatarGroup = ({
35
37
  items,
36
38
  limit,
37
39
  size,
40
+ showEmblem = false,
38
41
  }: Props) => {
39
42
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
40
43
  const isOverLimit = items.length > limit!
@@ -68,6 +71,7 @@ const AvatarGroup = ({
68
71
  name={name}
69
72
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
70
73
  size={size!}
74
+ showEmblem={showEmblem}
71
75
  src={src}
72
76
  data-testid={avatarTestId}
73
77
  />
@@ -75,7 +79,7 @@ const AvatarGroup = ({
75
79
  )}
76
80
  {isOverLimit ? (
77
81
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */
78
- <AvatarWrapper size={size!} variant='square'>
82
+ <AvatarWrapper size={size!}>
79
83
  {/* eslint-disable-next-line @typescript-eslint/no-non-null-assertion */}
80
84
  <TextAvatar data-testid={testIds?.overLimit} size={size!}>
81
85
  +{itemsOverLimit}