@nuskin/foundation-ui-components 1.19.4-cx130-1001.1 → 1.20.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/foundation-ui-components",
3
- "version": "1.19.4-cx130-1001.1",
3
+ "version": "1.20.0",
4
4
  "description": "It is a foundation library written in react, that provides common components to all UI pages",
5
5
  "main": "src/common/index.ts",
6
6
  "repository": {
@@ -1,5 +1,6 @@
1
- import { NsTypography, NsIcon, NsAccordionHeaderProps, AccordionVariant, NsIconProps, AccordionVariantType } from '..';
2
1
  import { styled } from '@nuskin/foundation-theme';
2
+
3
+ import { AccordionVariant, AccordionVariantType, NsAccordionHeaderProps, NsIcon, NsIconProps, NsTypography } from '..';
3
4
  import { isValidIconName } from '../icon/NsIconVariants';
4
5
  import { getAccordionColor } from './colorMap';
5
6
 
@@ -1,101 +1,38 @@
1
- import {Themed} from '../common.types';
2
- import {AccordionVariantType} from './enums';
3
- import {ColorUtils, FoundationTheme} from '@nuskin/foundation-theme';
4
- const {isDarkMode, color} = ColorUtils;
1
+ import { Themed } from '../common.types';
2
+ import { ColorUtils } from '@nuskin/foundation-theme';
3
+ import { AllColorKeyType } from '@nuskin/foundation-theme/src/common/themes/genome-colors/AllColors';
4
+
5
+ import { AccordionVariant, AccordionVariantType } from './enums';
6
+
7
+ const { getGenomeColor } = ColorUtils;
5
8
  const compKeys = ['contentBg', 'contentText', 'headBg', 'headText'];
6
9
  type CompKeys = (typeof compKeys)[number];
7
- type VariantColors = Record<
8
- CompKeys,
9
- {
10
- light: [FoundationTheme.AppColors, string];
11
- dark: [FoundationTheme.AppColors, string];
12
- }
13
- >;
10
+ type VariantColors = Record<CompKeys, AllColorKeyType>;
14
11
 
15
- const colorObject: Record<string, [FoundationTheme.AppColors, string]> = {
16
- n10: ['primary', 'dark'], // #121212
17
- n20: ['primary', 'black'], // #252525
18
- n40: ['neutral', '80'], // #444444
19
- n45: ['neutral', '70'], // #5f5f5f
20
- n50: ['neutral', '60'], // #8c8c8c
21
- n80: ['neutral', '50'], // #b2b2b2
22
- n85: ['neutral', '40'], // #e0e0e0
23
- n90: ['neutral', '30'], // #ededed
24
- n95: ['primary', 'gray'], // #f5f5f5
25
- n100: ['primary', 'white'], // #fff
26
- };
27
12
  export const colorMap: Record<AccordionVariantType, VariantColors> = {
28
13
  basic: {
29
- contentBg: {
30
- light: colorObject.n95,
31
- dark: colorObject.n20,
32
- },
33
- contentText: {
34
- light: colorObject.n10,
35
- dark: colorObject.n95,
36
- },
37
- headBg: {
38
- light: colorObject.n100,
39
- dark: colorObject.n20,
40
- },
41
- headText: {
42
- light: colorObject.n10,
43
- dark: colorObject.n95,
44
- },
14
+ contentBg: 'N20',
15
+ contentText: 'N90',
16
+ headBg: 'N10',
17
+ headText: 'N90',
45
18
  },
46
19
  compact: {
47
- contentBg: {
48
- light: colorObject.n100,
49
- dark: colorObject.n10,
50
- },
51
- contentText: {
52
- light: colorObject.n10,
53
- dark: colorObject.n90,
54
- },
55
- headBg: {
56
- light: colorObject.n100,
57
- dark: colorObject.n10,
58
- },
59
- headText: {
60
- light: colorObject.n10,
61
- dark: colorObject.n90,
62
- },
20
+ contentBg: 'N10',
21
+ contentText: 'N90',
22
+ headBg: 'N10',
23
+ headText: 'N90',
63
24
  },
64
25
  gray: {
65
- contentBg: {
66
- light: colorObject.n85,
67
- dark: colorObject.n40,
68
- },
69
- contentText: {
70
- light: colorObject.n40,
71
- dark: colorObject.n85,
72
- },
73
- headBg: {
74
- light: colorObject.n90,
75
- dark: colorObject.n45,
76
- },
77
- headText: {
78
- light: colorObject.n45,
79
- dark: colorObject.n90,
80
- },
26
+ contentBg: 'N40',
27
+ contentText: 'N80',
28
+ headBg: 'N30',
29
+ headText: 'N70',
81
30
  },
82
31
  stripe: {
83
- contentBg: {
84
- light: colorObject.n90,
85
- dark: colorObject.n45,
86
- },
87
- contentText: {
88
- light: colorObject.n45,
89
- dark: colorObject.n90,
90
- },
91
- headBg: {
92
- light: colorObject.n100,
93
- dark: colorObject.n40,
94
- },
95
- headText: {
96
- light: colorObject.n40,
97
- dark: colorObject.n100,
98
- },
32
+ contentBg: 'N30',
33
+ contentText: 'N70',
34
+ headBg: 'N10',
35
+ headText: 'N80',
99
36
  },
100
37
  };
101
38
 
@@ -104,13 +41,14 @@ type GetAccordionColor = {
104
41
  invert: boolean;
105
42
  keys: CompKeys[];
106
43
  } & Themed;
107
- export const getAccordionColor = ({theme, variant, invert, keys}: GetAccordionColor): Record<CompKeys, string> => {
108
- const isDark = invert ? !isDarkMode({theme}) : isDarkMode({theme});
109
- const darkLabel = isDark ? 'dark' : 'light';
44
+ export const getAccordionColor = ({ theme, variant, invert, keys }: GetAccordionColor): Record<CompKeys, string> => {
110
45
  const result: Record<string, string> = {};
46
+ if (!Object.values(AccordionVariant).includes(variant)) {
47
+ throw new Error(`Invalid variant ${variant}`);
48
+ }
111
49
  for (const colorKey of keys) {
112
- const [appColorBg, appSubColorBg] = colorMap[variant][colorKey][darkLabel];
113
- const colorValue = color(appColorBg, appSubColorBg)({theme});
50
+ const appColorKey = colorMap[variant][colorKey];
51
+ const colorValue = getGenomeColor(theme, appColorKey, invert ? 'dark' : 'light');
114
52
  result[colorKey] = colorValue;
115
53
  }
116
54
  return result;
@@ -51,7 +51,6 @@ export const StyledButton = styled(MUIButton)<NsButtonProps>(
51
51
  },
52
52
  ...buttonStyles,
53
53
  ...sizeStyle,
54
- textTransform: 'none',
55
54
  };
56
55
  }
57
56
  );
@@ -1,18 +1,5 @@
1
- import { Button } from '@mui/material';
2
1
  import { NsButton, NsIcon } from '../';
3
2
  import { NsCardButton } from './types';
4
- import { styled } from '@nuskin/foundation-theme';
5
-
6
- const ButtonTextVariant = styled(Button)(() => {
7
- return {
8
- padding: 0,
9
- borderBottom: '1px solid black',
10
- borderRadius: 0,
11
- textTransform: 'none',
12
- fontSize: '14px',
13
- fontWeight: 600,
14
- };
15
- });
16
3
 
17
4
  const CardButton = ({
18
5
  url,
@@ -27,27 +14,21 @@ const CardButton = ({
27
14
  if (showButton && url) {
28
15
  return (
29
16
  <div className="cta">
30
- {buttonVariant === 'text' ? (
31
- <ButtonTextVariant href={url}>
32
- {buttonText}
33
- {showArrowWithText ? (
17
+ <NsButton
18
+ href={url}
19
+ color={buttonColor}
20
+ variant={buttonVariant}
21
+ fullWidth={fullWidth}
22
+ endIcon={
23
+ showArrowWithText && buttonVariant === 'text' ? (
34
24
  <NsIcon name="arrowRight" size="small" color="primary" />
35
25
  ) : endIcon ? (
36
- <NsIcon name={endIcon} size="small" color="primary" />
37
- ) : null}
38
- </ButtonTextVariant>
39
- ) : (
40
- <NsButton
41
- href={url}
42
- color={buttonColor}
43
- variant={buttonVariant}
44
- fullWidth={fullWidth}
45
- endIcon={endIcon ? <NsIcon name={endIcon} color={buttonColor} /> : null}
46
- className="cta-text"
47
- >
48
- {buttonText}
49
- </NsButton>
50
- )}
26
+ <NsIcon name={endIcon} color={buttonColor} />
27
+ ) : null
28
+ }
29
+ >
30
+ {buttonText}
31
+ </NsButton>
51
32
  </div>
52
33
  );
53
34
  }
@@ -19,18 +19,18 @@ type NsBrandCardProps = {
19
19
 
20
20
  const CardContainer = styled((props: any) => <Box {...props} />)(({ size }) => {
21
21
  const { small, large } = cardSizes;
22
- let maxWidth, maxHeight;
22
+ let width, height;
23
23
 
24
24
  if (size === 'small') {
25
- maxWidth = small.maxWidth;
26
- maxHeight = small.maxHeight;
25
+ width = small.width;
26
+ height = small.height;
27
27
  } else {
28
- maxWidth = large.maxWidth;
29
- maxHeight = large.maxHeight;
28
+ width = large.width;
29
+ height = large.height;
30
30
  }
31
31
 
32
32
  return {
33
- maxWidth,
33
+ width,
34
34
  display: 'flex',
35
35
  alignItems: 'start',
36
36
  justifyContent: 'center',
@@ -38,9 +38,6 @@ const CardContainer = styled((props: any) => <Box {...props} />)(({ size }) => {
38
38
  flexDirection: 'column',
39
39
  '.brand-title': {
40
40
  marginTop: '15px',
41
- fontSize: '18px',
42
- fontWeight: 600,
43
- lineHeight: '26px',
44
41
  display: 'inline-block',
45
42
  wordBreak: 'break-word',
46
43
  },
@@ -49,9 +46,13 @@ const CardContainer = styled((props: any) => <Box {...props} />)(({ size }) => {
49
46
  opacity: '0.7',
50
47
  },
51
48
  },
49
+ '.cta': {
50
+ marginTop: '15px',
51
+ width: '100%',
52
+ },
52
53
  '.image': {
53
- maxWidth,
54
- maxHeight,
54
+ width,
55
+ height,
55
56
  backgroundSize: 'cover',
56
57
  backgroundPosition: 'center',
57
58
  },
@@ -73,7 +74,7 @@ export default function NsBrandCard({
73
74
  </NsBrandWrapper>
74
75
  </NsBgCard>
75
76
  {title ? (
76
- <NsTypography variant="h3" className="brand-title">
77
+ <NsTypography weight='normal' variant="h5" className="brand-title">
77
78
  {title}
78
79
  </NsTypography>
79
80
  ) : null}
@@ -15,7 +15,7 @@ const CardContainer = styled(Box)(() => {
15
15
  return {
16
16
  backgroundColor: '#fff',
17
17
  display: 'flex',
18
- width: '345px',
18
+ maxWidth: '345px',
19
19
  height: 'auto',
20
20
  border: '2px solid #B2B2B2',
21
21
  borderRadius: '2px',
@@ -23,8 +23,8 @@ const CardContainer = styled((props: any) => <Box {...props} />)(({ imagePositio
23
23
  wordWrap: 'break-word' as 'break-word',
24
24
  position: 'relative',
25
25
  overflow: 'hidden',
26
- width: '100%',
27
- height: '500px',
26
+ maxWidth: '820px',
27
+ height: '532px',
28
28
  flexDirection: 'row',
29
29
  '.content': {
30
30
  width: '50%',
@@ -22,8 +22,8 @@ const CardContainer = styled(Box)(() => {
22
22
  wordWrap: 'break-word' as 'break-word',
23
23
  position: 'relative',
24
24
  overflow: 'hidden',
25
- height: '250px',
26
- width: '100%',
25
+ height: '236px',
26
+ maxWidth: '536px',
27
27
  '.content': {
28
28
  height: '100%',
29
29
  padding: '50px',
@@ -16,7 +16,7 @@ const CardContainer = styled(Box)(() => {
16
16
  position: 'relative',
17
17
  overflow: 'hidden',
18
18
  height: 'auto',
19
- width: '222px',
19
+ maxWidth: '222px',
20
20
  backgroundColor: '#F5F5F5',
21
21
  padding: '20px',
22
22
  justifyContent: 'center',
@@ -1,5 +1,5 @@
1
1
  import Box from '@mui/material/Box';
2
- import { NsImage } from '../';
2
+ import { NsImage, NsTypography } from '../';
3
3
  import { styled } from '@nuskin/foundation-theme';
4
4
 
5
5
  type NsPostProps = {
@@ -18,40 +18,36 @@ const CardContainer = styled(Box)(() => {
18
18
  wordWrap: 'break-word' as 'break-word',
19
19
  position: 'relative',
20
20
  overflow: 'hidden',
21
+ height: 'auto',
21
22
  maxWidth: '165px',
22
- height: '272px',
23
23
  backgroundColor: '#fff',
24
- '.image': {
25
- height: '180px',
26
- overflow: 'hidden',
27
- objectFit: 'contain',
28
- },
29
24
  '.content': {
30
- padding: '20px',
25
+ paddingTop: '10px',
31
26
  display: 'flex',
32
27
  flexDirection: 'column',
33
- minHeight: '92px',
34
- maxHeight: '92px',
35
- justifyContent: 'space-around',
28
+ minHeight: '80px',
29
+ justifyContent: 'space-between',
30
+ padding: '20px',
36
31
  },
37
32
  '.body-title': {
38
- fontSize: '18px',
39
- fontWeight: 600,
33
+ marginBottom: '5px',
40
34
  display: '-webkit-box',
41
35
  '-webkit-box-orient': 'vertical',
42
- '-webkit-line-clamp': '1',
36
+ '-webkit-line-clamp': '3',
43
37
  overflow: 'hidden',
44
38
  textOverflow: 'ellipsis',
39
+ fontSize: '18px',
40
+ fontWeight: 600,
41
+ lineHeight: '22px',
42
+ fontFamily: 'Inter',
45
43
  },
46
44
  '.body-text': {
47
- fontSize: '12px',
48
- fontWeight: 700,
49
- display: '-webkit-box',
50
- '-webkit-box-orient': 'vertical',
51
- '-webkit-line-clamp': '1',
52
- overflow: 'hidden',
53
- textOverflow: 'ellipsis',
54
45
  color: '#8C8C8C',
46
+ margin: '0px',
47
+ fontSize: '16px',
48
+ fontWeight: 600,
49
+ lineHeight: '16px',
50
+ fontFamily: 'Inter',
55
51
  },
56
52
  };
57
53
  });
@@ -60,11 +56,15 @@ const NsPost = ({ text, body, backgroundImageUrl, backgroundImageAlt, className
60
56
  return (
61
57
  <CardContainer className={className} data-testid="post-card">
62
58
  <div className="image">
63
- <NsImage height={'100%'} width={'auto'} alt={backgroundImageAlt} src={backgroundImageUrl} />
59
+ <NsImage height="auto" width="100%" alt={backgroundImageAlt} src={backgroundImageUrl} />
64
60
  </div>
65
61
  <div className="content">
66
- <article className="body-title">{text}</article>
67
- <article className="body-text">{body}</article>
62
+ <NsTypography weight="normal" className="body-title" variant="h5">
63
+ {text}
64
+ </NsTypography>
65
+ <NsTypography className="body-text" variant="body-l">
66
+ {body}
67
+ </NsTypography>
68
68
  </div>
69
69
  </CardContainer>
70
70
  );
@@ -17,9 +17,8 @@ const CardContainer = styled(Box)(() => {
17
17
  return {
18
18
  backgroundColor: '#fff',
19
19
  display: 'flex',
20
- maxHeight: '320px',
21
- maxWidth: '375px',
22
- overflow: 'hidden',
20
+ height: '275px',
21
+ width: '250px',
23
22
  position: 'relative',
24
23
  '.image': {
25
24
  width: '100%',
@@ -50,15 +49,12 @@ const CardContainer = styled(Box)(() => {
50
49
  },
51
50
  '.title': {
52
51
  color: '#fff',
53
- fontSize: '26px',
52
+ fontSize: '22px',
54
53
  fontWeight: '400',
55
54
  marginTop: '20px',
56
55
  },
57
56
  '.cta': {
58
57
  marginTop: '20px',
59
- maxWidth: '208px',
60
- borderRadius: '4px',
61
- overflow: 'hidden',
62
58
  },
63
59
  };
64
60
  });
@@ -1,11 +1,11 @@
1
1
  const cardSizes = {
2
2
  small: {
3
- maxWidth: '160px',
4
- maxHeight: '179px',
3
+ width: '180px',
4
+ height: '200px',
5
5
  },
6
6
  large: {
7
- maxWidth: '190px',
8
- maxHeight: '211px',
7
+ width: '220px',
8
+ height: '250px',
9
9
  },
10
10
  };
11
11
 
@@ -58,11 +58,11 @@ describe('NsBrandCard component', () => {
58
58
  const cardContainer = container.firstChild;
59
59
  const nsBgCardElement = cardContainer?.firstChild;
60
60
  expect(cardContainer).toHaveStyle(`
61
- maxWidth: 160px;
61
+ width: 180px;
62
62
  `);
63
63
  expect(nsBgCardElement).toHaveStyle(`
64
- maxWidth: 160px;
65
- maxHeight: 179px;
64
+ width: 180px;
65
+ height: 200px;
66
66
  `);
67
67
  });
68
68
 
@@ -71,7 +71,7 @@ describe('NsBrandCard component', () => {
71
71
  const cardContainer = screen.getByTestId('brand-card') as HTMLElement;
72
72
  const computedStyles = window.getComputedStyle(cardContainer);
73
73
 
74
- expect(computedStyles.maxWidth).toBe('190px');
74
+ expect(computedStyles.width).toBe('220px');
75
75
  });
76
76
 
77
77
  it('7. renders with default styles when size is not provided', () => {
@@ -79,6 +79,6 @@ describe('NsBrandCard component', () => {
79
79
  const cardContainer = screen.getByTestId('brand-card') as HTMLElement;
80
80
  const computedStyles = window.getComputedStyle(cardContainer);
81
81
 
82
- expect(computedStyles.maxWidth).toBe('190px');
82
+ expect(computedStyles.width).toBe('220px');
83
83
  });
84
84
  });
@@ -27,7 +27,6 @@ export const Default: Story = {
27
27
  buttonVariant: 'contained',
28
28
  buttonColor: 'primary',
29
29
  url: '#',
30
- fullWidth: true,
31
30
  },
32
31
  },
33
32
  };
@@ -1,7 +1,8 @@
1
+ import { styled } from '@nuskin/foundation-theme';
1
2
  import React, { useMemo } from 'react';
2
3
  import Slider from 'react-slick';
4
+
3
5
  import { NsScrollingCarousalProps } from '../';
4
- import { styled } from '@nuskin/foundation-theme';
5
6
 
6
7
  type StyledType = {
7
8
  dotsBottomPixel?: number;
@@ -35,7 +36,7 @@ const NsScrollingCarousal = ({
35
36
  adaptiveHeight: true,
36
37
  arrows: true,
37
38
  draggable: true,
38
- dots: true,
39
+ dots: false,
39
40
  infinite: true,
40
41
  speed: scrollSeconds * 1000 || 500, // speed = animation speed in milliseconds
41
42
  slidesToShow: 1,