@mrshmllw/smores-react 9.9.1 → 9.10.0-crumbs-improve-BadgeList-and-Badge.1

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.
@@ -6,10 +6,10 @@ export declare enum BadgeSize {
6
6
  Lg = "40px"
7
7
  }
8
8
  export type BadgeProps = {
9
+ src: string | JSX.Element;
9
10
  borderColour?: Color;
10
11
  size?: BadgeSize;
11
- src: string;
12
12
  disabled?: boolean;
13
13
  zIndex?: number;
14
14
  };
15
- export declare function Badge({ borderColour, size, src, disabled, zIndex }: BadgeProps): React.JSX.Element;
15
+ export declare function Badge<T extends BadgeProps>({ borderColour, size, src, disabled, zIndex, }: BadgeProps): React.JSX.Element;
@@ -8,12 +8,16 @@ export var BadgeSize;
8
8
  BadgeSize["Lg"] = "40px";
9
9
  })(BadgeSize || (BadgeSize = {}));
10
10
  // TODO: add box-shadow transition
11
- export function Badge({ borderColour = "lollipop", size = BadgeSize.Lg, src, disabled, zIndex }) {
12
- return React.createElement(Container, { "$borderColour": theme.colors[borderColour], "$size": size, "$src": src, "$disabled": disabled, "$zIndex": zIndex });
11
+ // TODO: add fallback image when image doesn't load - use a marshal?
12
+ export function Badge({ borderColour = 'lollipop', size = BadgeSize.Lg, src, disabled, zIndex, }) {
13
+ if (typeof src === 'string') {
14
+ return (React.createElement(Container, { "$borderColour": theme.colors[borderColour], "$size": size, "$src": src, "$disabled": disabled, "$zIndex": zIndex }));
15
+ }
16
+ return (React.createElement(Container, { "$borderColour": theme.colors[borderColour], "$size": size, "$disabled": disabled, "$zIndex": zIndex, "$src": null }, src));
13
17
  }
14
18
  const Container = styled.div((props) => {
15
19
  return css `
16
- background-image: url(${props.$src});
20
+ background-image: ${props.$src ? `url(${props.$src})` : 'none'};
17
21
  background-position: center;
18
22
  background-size: cover;
19
23
  height: ${props.$size};
@@ -21,17 +25,17 @@ const Container = styled.div((props) => {
21
25
  border-radius: 50%;
22
26
  overflow: hidden;
23
27
  transition: box-shadow 0.2s ease-in-out;
24
- outline: 2px solid ${props.$borderColour};
25
- width: ${props.$size};
26
- filter: ${props.$disabled ? "contrast(0.5)" : "none"};
28
+ border: 2px solid ${props.$borderColour};
29
+ filter: ${props.$disabled ? 'contrast(0.5)' : 'none'};
27
30
  z-index: ${props.$zIndex || 0};
28
31
 
29
32
  ${!props.$disabled &&
30
33
  css `
31
- &:hover {
32
- cursor: pointer;
33
- box-shadow: 0 0 0px 5px #f0f0f0;
34
- }`}
35
- `;
34
+ &:hover {
35
+ cursor: pointer;
36
+ box-shadow: 0 0 0px 5px #f0f0f0;
37
+ }
38
+ `}
39
+ `;
36
40
  });
37
41
  //# sourceMappingURL=Badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAc,MAAM,UAAU,CAAC;AAE7C,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;AACf,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAUD,kCAAkC;AAClC,MAAM,UAAU,KAAK,CAAC,EAClB,YAAY,GAAG,UAAU,EACzB,IAAI,GAAG,SAAS,CAAC,EAAE,EACnB,GAAG,EACH,QAAQ,EACR,MAAM,EACG;IAET,OAAO,oBAAC,SAAS,qBACE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,WAClC,IAAI,UACL,GAAG,eACE,QAAQ,aACV,MAAM,GACjB,CAAA;AACN,CAAC;AAWD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAiB,CAAC,KAAK,EAAE,EAAE;IACnD,OAAO,GAAG,CAAA;4BACc,KAAK,CAAC,IAAI;;;cAGxB,KAAK,CAAC,KAAK;aACZ,KAAK,CAAC,KAAK;;;;yBAIC,KAAK,CAAC,aAAa;aAC/B,KAAK,CAAC,KAAK;cACV,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM;eACzC,KAAK,CAAC,OAAO,IAAI,CAAC;;MAE3B,CAAC,KAAK,CAAC,SAAS;QACd,GAAG,CAAA;;;;UAID;CACT,CAAA;AACD,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"Badge.js","sourceRoot":"","sources":["../../src/Badge/Badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAc,MAAM,UAAU,CAAA;AAE5C,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,wBAAW,CAAA;IACX,wBAAW,CAAA;AACb,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAUD,kCAAkC;AAClC,oEAAoE;AACpE,MAAM,UAAU,KAAK,CAAuB,EAC1C,YAAY,GAAG,UAAU,EACzB,IAAI,GAAG,SAAS,CAAC,EAAE,EACnB,GAAG,EACH,QAAQ,EACR,MAAM,GACK;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,CACL,oBAAC,SAAS,qBACO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,WAClC,IAAI,UACL,GAAG,eACE,QAAQ,aACV,MAAM,GACf,CACH,CAAA;IACH,CAAC;IAED,OAAO,CACL,oBAAC,SAAS,qBACO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,WAClC,IAAI,eACA,QAAQ,aACV,MAAM,UACT,IAAI,IAET,GAAG,CACM,CACb,CAAA;AACH,CAAC;AAUD,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAiB,CAAC,KAAK,EAAE,EAAE;IACrD,OAAO,GAAG,CAAA;wBACY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM;;;cAGpD,KAAK,CAAC,KAAK;aACZ,KAAK,CAAC,KAAK;;;;wBAIA,KAAK,CAAC,aAAa;cAC7B,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM;eACzC,KAAK,CAAC,OAAO,IAAI,CAAC;;MAE3B,CAAC,KAAK,CAAC,SAAS;QAClB,GAAG,CAAA;;;;;KAKF;GACF,CAAA;AACH,CAAC,CAAC,CAAA"}
@@ -8,9 +8,11 @@ export type BadgeListBadge = BadgeProps & {
8
8
  tooltip?: WithTooltip;
9
9
  };
10
10
  type Props = {
11
+ size?: BadgeProps['size'];
12
+ limit?: number;
11
13
  badges: Omit<BadgeListBadge, 'zIndex'>[];
12
14
  };
13
- export declare function BadgeList({ badges }: Props): React.JSX.Element;
15
+ export declare function BadgeList({ badges, limit, size }: Props): React.JSX.Element;
14
16
  type WithTooltipProps = {
15
17
  badge: BadgeListBadge;
16
18
  };
@@ -3,28 +3,49 @@ import { Badge } from '../Badge/Badge';
3
3
  import { Box } from '../Box';
4
4
  import styled from 'styled-components';
5
5
  import { Tooltip } from '../Tooltip';
6
- export function BadgeList({ badges }) {
6
+ import { Text } from '../Text';
7
+ import { theme } from '../theme';
8
+ export function BadgeList({ badges, limit, size }) {
7
9
  const badgeZIndexMax = badges.length * 10 + 10;
8
- return (React.createElement(Container, { flex: true }, badges.map((badge, index) => (React.createElement(WithTooltip, { key: badge.src, badge: { ...badge, zIndex: badgeZIndexMax - index * 10 } })))));
10
+ const limitExcess =
11
+ // TODO: off by one adjustments work, just hard to read, refactor for human eyes 👁️👄👁️
12
+ limit && (badges.length + 1 > limit ? badges.length - limit + 1 : 0);
13
+ return (React.createElement(Container, { flex: true },
14
+ badges.slice(0, limit ? limit - 1 : undefined).map((badge, index) => (React.createElement(WithTooltip, { key: typeof badge.src === 'string' ? badge.src : index, badge: { ...badge, zIndex: badgeZIndexMax - index * 10, size } }))),
15
+ limitExcess !== undefined && Boolean(limitExcess) && (React.createElement(Badge, { borderColour: "oatmeal", size: size, src: React.createElement(ExcessBadge, { excess: limitExcess }), zIndex: badgeZIndexMax, disabled: true }))));
9
16
  }
17
+ function ExcessBadge({ excess }) {
18
+ return (React.createElement(ExcessBadgeContainer, null,
19
+ React.createElement(Text, { typo: "caption", style: { fontWeight: 'bold' } },
20
+ "+",
21
+ excess)));
22
+ }
23
+ const ExcessBadgeContainer = styled.div `
24
+ display: flex;
25
+ align-items: center;
26
+ place-content: center;
27
+ width: 100%;
28
+ height: 100%;
29
+ background-color: ${theme.colors.oatmeal};
30
+ pointer-events: none;
31
+ `;
10
32
  const WithTooltip = ({ badge: { tooltip, ...badge } }) => {
11
33
  if (tooltip) {
12
34
  return (React.createElement("div", { style: { zIndex: badge.zIndex } },
13
35
  React.createElement(Tooltip, { position: tooltip.position ?? 'bottom', title: tooltip?.title, content: tooltip.content },
14
- React.createElement(Badge, { key: badge.src, ...badge }))));
36
+ React.createElement(Badge, { ...badge }))));
15
37
  }
16
- return React.createElement(Badge, { key: badge.src, ...badge });
38
+ return React.createElement(Badge, { ...badge });
17
39
  };
18
40
  const Container = styled(Box) `
19
41
  & > * {
20
- transition: margin-right 0.2s ease-in-out;
21
- margin-right: -10px;
42
+ transition: margin 0.2s ease-in-out;
43
+ margin-right: -15px;
22
44
  }
23
45
 
24
- &:hover {
25
- & > * {
26
- margin-right: 5px;
27
- }
46
+ & > *:hover:not(:first-child) {
47
+ margin-left: 10px;
48
+ margin-right: 0px;
28
49
  }
29
50
  `;
30
51
  //# sourceMappingURL=BadgeList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BadgeList.js","sourceRoot":"","sources":["../../src/BadgeList/BadgeList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAmB,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAapC,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAS;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAA;IAE9C,OAAO,CACL,oBAAC,SAAS,IAAC,IAAI,UACZ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,oBAAC,WAAW,IACV,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,GAAG,KAAK,GAAG,EAAE,EAAE,GACxD,CACH,CAAC,CACQ,CACb,CAAA;AACH,CAAC;AAMD,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAoB,EAAE,EAAE;IACzE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YAClC,oBAAC,OAAO,IACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,EACtC,KAAK,EAAE,OAAO,EAAE,KAAK,EACrB,OAAO,EAAE,OAAO,CAAC,OAAO;gBAExB,oBAAC,KAAK,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAM,KAAK,GAAI,CAC5B,CACN,CACP,CAAA;IACH,CAAC;IAED,OAAO,oBAAC,KAAK,IAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAM,KAAK,GAAI,CAAA;AAC7C,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;;;;;;;;;;;CAW5B,CAAA"}
1
+ {"version":3,"file":"BadgeList.js","sourceRoot":"","sources":["../../src/BadgeList/BadgeList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,KAAK,EAAmB,MAAM,gBAAgB,CAAA;AACvD,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAC5B,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAchC,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAS;IACtD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAA;IAC9C,MAAM,WAAW;IACf,yFAAyF;IACzF,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEtE,OAAO,CACL,oBAAC,SAAS,IAAC,IAAI;QAEZ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACpE,oBAAC,WAAW,IACV,GAAG,EAAE,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EACtD,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,cAAc,GAAG,KAAK,GAAG,EAAE,EAAE,IAAI,EAAE,GAC9D,CACH,CAAC;QAED,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CACpD,oBAAC,KAAK,IACJ,YAAY,EAAC,SAAS,EACtB,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,oBAAC,WAAW,IAAC,MAAM,EAAE,WAAW,GAAI,EACzC,MAAM,EAAE,cAAc,EACtB,QAAQ,SACR,CACH,CACS,CACb,CAAA;AACH,CAAC;AAMD,SAAS,WAAW,CAAC,EAAE,MAAM,EAAoB;IAC/C,OAAO,CACL,oBAAC,oBAAoB;QACnB,oBAAC,IAAI,IAAC,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;;YAC9C,MAAM,CACH,CACc,CACxB,CAAA;AACH,CAAC;AAED,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;sBAMjB,KAAK,CAAC,MAAM,CAAC,OAAO;;CAEzC,CAAA;AAMD,MAAM,WAAW,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAoB,EAAE,EAAE;IACzE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YAClC,oBAAC,OAAO,IACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,QAAQ,EACtC,KAAK,EAAE,OAAO,EAAE,KAAK,EACrB,OAAO,EAAE,OAAO,CAAC,OAAO;gBAExB,oBAAC,KAAK,OAAK,KAAK,GAAI,CACZ,CACN,CACP,CAAA;IACH,CAAC;IAED,OAAO,oBAAC,KAAK,OAAK,KAAK,GAAI,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;;;;;;;;;;CAU5B,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrshmllw/smores-react",
3
- "version": "9.9.1",
3
+ "version": "9.10.0-crumbs-improve-BadgeList-and-Badge.1",
4
4
  "main": "./dist/index.js",
5
5
  "description": "Collection of React components used by Marshmallow Technology",
6
6
  "keywords": [