@hero-design/rn 7.0.5 → 7.1.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.
Files changed (62) hide show
  1. package/babel.config.js +1 -1
  2. package/es/index.js +150 -41
  3. package/lib/index.js +149 -38
  4. package/package.json +3 -3
  5. package/playground/components/Card.tsx +74 -91
  6. package/playground/components/FAB.tsx +49 -0
  7. package/playground/index.tsx +3 -1
  8. package/src/components/Card/StyledCard.tsx +1 -0
  9. package/src/components/Card/__tests__/__snapshots__/Card.spec.tsx.snap +5 -4
  10. package/src/components/Card/__tests__/__snapshots__/StyledCard.spec.tsx.snap +5 -4
  11. package/src/components/FAB/AnimatedFABIcon.tsx +47 -0
  12. package/src/components/FAB/StyledFABContainer.tsx +14 -0
  13. package/src/components/FAB/StyledFABIcon.tsx +9 -0
  14. package/src/components/FAB/__tests__/AnimatedFABIcon.spec.tsx +20 -0
  15. package/src/components/FAB/__tests__/StyledFABContainer.spec.tsx +18 -0
  16. package/src/components/FAB/__tests__/StyledFABIcon.spec.tsx +16 -0
  17. package/src/components/FAB/__tests__/__snapshots__/AnimatedFABIcon.spec.tsx.snap +71 -0
  18. package/src/components/FAB/__tests__/__snapshots__/StyledFABContainer.spec.tsx.snap +46 -0
  19. package/src/components/FAB/__tests__/__snapshots__/StyledFABIcon.spec.tsx.snap +21 -0
  20. package/src/components/FAB/__tests__/__snapshots__/index.spec.tsx.snap +120 -0
  21. package/src/components/FAB/__tests__/index.spec.tsx +58 -0
  22. package/src/components/FAB/index.tsx +56 -0
  23. package/src/components/Icon/index.tsx +1 -1
  24. package/src/index.ts +4 -0
  25. package/src/theme/__tests__/__snapshots__/index.spec.ts.snap +14 -1
  26. package/src/theme/components/card.ts +1 -1
  27. package/src/theme/components/fab.ts +21 -0
  28. package/src/theme/global/space.ts +11 -9
  29. package/src/theme/global/typography.ts +11 -9
  30. package/src/theme/index.ts +3 -0
  31. package/src/utils/__tests__/scale.spec.ts +26 -0
  32. package/src/utils/scale.ts +10 -0
  33. package/testUtils/setup.ts +4 -0
  34. package/types/playground/components/FAB.d.ts +2 -0
  35. package/types/src/components/FAB/AnimatedFABIcon.d.ts +6 -0
  36. package/types/src/components/FAB/StyledFABContainer.d.ts +3 -0
  37. package/types/src/components/FAB/StyledFABIcon.d.ts +3 -0
  38. package/types/{components/ExampleComponent/__tests__/StyledView.spec.d.ts → src/components/FAB/__tests__/AnimatedFABIcon.spec.d.ts} +0 -0
  39. package/types/src/components/{Typography/Text/__test__/StyledText.spec.d.ts → FAB/__tests__/StyledFABContainer.spec.d.ts} +0 -0
  40. package/types/src/components/{Typography/Text/__test__/index.spec.d.ts → FAB/__tests__/StyledFABIcon.spec.d.ts} +0 -0
  41. package/types/src/components/FAB/__tests__/index.spec.d.ts +1 -0
  42. package/types/src/components/FAB/index.d.ts +30 -0
  43. package/types/src/components/Icon/index.d.ts +1 -1
  44. package/types/src/index.d.ts +3 -1
  45. package/types/src/theme/components/fab.d.ts +15 -0
  46. package/types/src/theme/index.d.ts +2 -0
  47. package/types/src/utils/__tests__/scale.spec.d.ts +1 -0
  48. package/types/src/utils/scale.d.ts +2 -0
  49. package/types/components/ExampleComponent/StyledView.d.ts +0 -7
  50. package/types/components/ExampleComponent/index.d.ts +0 -16
  51. package/types/index.d.ts +0 -4
  52. package/types/styled-components.d.ts +0 -6
  53. package/types/theme/colors.d.ts +0 -24
  54. package/types/theme/components/demoStyle.d.ts +0 -11
  55. package/types/theme/components/exampleComponent.d.ts +0 -14
  56. package/types/theme/global/colors.d.ts +0 -24
  57. package/types/theme/global/index.d.ts +0 -58
  58. package/types/theme/global/space.d.ts +0 -12
  59. package/types/theme/global/typography.d.ts +0 -21
  60. package/types/theme/index.d.ts +0 -11
  61. package/types/theme/space.d.ts +0 -12
  62. package/types/theme/typography.d.ts +0 -21
@@ -32,7 +32,7 @@ Object {
32
32
  },
33
33
  "card": Object {
34
34
  "padding": Object {
35
- "default": "16px",
35
+ "default": "8px",
36
36
  },
37
37
  "radii": Object {
38
38
  "default": "12px",
@@ -53,6 +53,19 @@ Object {
53
53
  "xsmall": "4px",
54
54
  },
55
55
  },
56
+ "fab": Object {
57
+ "colors": Object {
58
+ "buttonBackground": "#292a2b",
59
+ "icon": "#ffffff",
60
+ },
61
+ "fontSizes": Object {
62
+ "default": "28px",
63
+ },
64
+ "sizes": Object {
65
+ "height": "64px",
66
+ "width": "64px",
67
+ },
68
+ },
56
69
  "icon": Object {
57
70
  "colors": Object {
58
71
  "danger": "#de350b",
@@ -6,7 +6,7 @@ const getCardTheme = (theme: GlobalTheme) => {
6
6
  };
7
7
 
8
8
  const padding = {
9
- default: `${theme.space.medium}px`,
9
+ default: `${theme.space.small}px`,
10
10
  };
11
11
 
12
12
  return { radii, padding };
@@ -0,0 +1,21 @@
1
+ import { GlobalTheme } from '../global';
2
+
3
+ const getFABTheme = (theme: GlobalTheme) => {
4
+ const colors = {
5
+ buttonBackground: theme.colors.backgroundDark,
6
+ icon: theme.colors.invertedText,
7
+ };
8
+
9
+ const sizes = {
10
+ width: '64px',
11
+ height: '64px',
12
+ };
13
+
14
+ const fontSizes = {
15
+ default: `${theme.fontSizes.xxxxlarge}px`,
16
+ };
17
+
18
+ return { fontSizes, colors, sizes };
19
+ };
20
+
21
+ export default getFABTheme;
@@ -1,15 +1,17 @@
1
+ import { scale } from '../../utils/scale';
2
+
1
3
  const BASE = 8;
2
4
 
3
5
  const space = {
4
- xxsmall: BASE * 0.25,
5
- xsmall: BASE * 0.5,
6
- small: BASE,
7
- medium: BASE * 2,
8
- large: BASE * 3,
9
- xlarge: BASE * 4,
10
- xxlarge: BASE * 5,
11
- xxxlarge: BASE * 6,
12
- xxxxlarge: BASE * 7,
6
+ xxsmall: scale(BASE * 0.25),
7
+ xsmall: scale(BASE * 0.5),
8
+ small: scale(BASE),
9
+ medium: scale(BASE * 2),
10
+ large: scale(BASE * 3),
11
+ xlarge: scale(BASE * 4),
12
+ xxlarge: scale(BASE * 5),
13
+ xxxlarge: scale(BASE * 6),
14
+ xxxxlarge: scale(BASE * 7),
13
15
  };
14
16
 
15
17
  export { space };
@@ -1,15 +1,17 @@
1
+ import { scale } from '../../utils/scale';
2
+
1
3
  const BASE = 16;
2
4
 
3
5
  const fontSizes = {
4
- xxxxxlarge: BASE * 2, // 32
5
- xxxxlarge: BASE * 1.75, // 28
6
- xxxlarge: BASE * 1.5, // 24
7
- xxlarge: BASE * 1.25, // 20
8
- xlarge: BASE * 1.125, // 18
9
- large: BASE, // 16
10
- medium: BASE * 0.875, // 14
11
- small: BASE * 0.75, // 12
12
- xsmall: BASE * 0.625, // 10
6
+ xxxxxlarge: scale(BASE * 2), // 32
7
+ xxxxlarge: scale(BASE * 1.75), // 28
8
+ xxxlarge: scale(BASE * 1.5), // 24
9
+ xxlarge: scale(BASE * 1.25), // 20
10
+ xlarge: scale(BASE * 1.125), // 18
11
+ large: scale(BASE), // 16
12
+ medium: scale(BASE * 0.875), // 14
13
+ small: scale(BASE * 0.75), // 12
14
+ xsmall: scale(BASE * 0.625), // 10
13
15
  };
14
16
 
15
17
  const fontWeights = {
@@ -5,6 +5,7 @@ import getCardTheme from './components/card';
5
5
  import getDividerTheme from './components/divider';
6
6
  import getIconTheme from './components/icon';
7
7
  import getTypographyTheme from './components/typography';
8
+ import getFABTheme from './components/fab';
8
9
 
9
10
  type Theme = GlobalTheme & {
10
11
  __hd__: {
@@ -13,6 +14,7 @@ type Theme = GlobalTheme & {
13
14
  divider: ReturnType<typeof getDividerTheme>;
14
15
  icon: ReturnType<typeof getIconTheme>;
15
16
  typography: ReturnType<typeof getTypographyTheme>;
17
+ fab: ReturnType<typeof getFABTheme>;
16
18
  };
17
19
  };
18
20
 
@@ -24,6 +26,7 @@ const getTheme = (theme: GlobalTheme = globalTheme): Theme => ({
24
26
  divider: getDividerTheme(theme),
25
27
  icon: getIconTheme(theme),
26
28
  typography: getTypographyTheme(theme),
29
+ fab: getFABTheme(theme),
27
30
  },
28
31
  });
29
32
 
@@ -0,0 +1,26 @@
1
+ import { Dimensions } from 'react-native';
2
+ import { scale, BASE_WIDTH } from '../scale';
3
+
4
+ jest.unmock('../scale'); // Unmock global mocking of scale for other tests
5
+
6
+ describe('scale', () => {
7
+ it('returns scale based on width when width < height', () => {
8
+ jest
9
+ .spyOn(Dimensions, 'get')
10
+ .mockReturnValue({ width: 400, height: 500, scale: 1, fontScale: 1 });
11
+
12
+ const size = 10;
13
+
14
+ expect(scale(size)).toBe((400 / BASE_WIDTH) * size);
15
+ });
16
+
17
+ it('returns scale based on height when width > height', () => {
18
+ jest
19
+ .spyOn(Dimensions, 'get')
20
+ .mockReturnValue({ width: 700, height: 350, scale: 1, fontScale: 1 });
21
+
22
+ const size = 10;
23
+
24
+ expect(scale(size)).toBe((350 / BASE_WIDTH) * size);
25
+ });
26
+ });
@@ -0,0 +1,10 @@
1
+ import { Dimensions } from 'react-native';
2
+
3
+ export const BASE_WIDTH = 390; // Based on iPhone 13's viewport size
4
+
5
+ export const scale = (size: number) => {
6
+ const { width, height } = Dimensions.get('window');
7
+ const shortDimension = width < height ? width : height;
8
+
9
+ return (shortDimension / BASE_WIDTH) * size;
10
+ };
@@ -1,3 +1,7 @@
1
1
  jest.mock('react-native-vector-icons', () => ({
2
2
  createIconSetFromIcoMoon: jest.fn(() => 'HeroIcon'),
3
3
  }));
4
+
5
+ jest.mock('../src/utils/scale', () => ({
6
+ scale: jest.fn(size => size),
7
+ }));
@@ -0,0 +1,2 @@
1
+ declare const FABPlayground: () => JSX.Element;
2
+ export default FABPlayground;
@@ -0,0 +1,6 @@
1
+ import { IconProps } from '../Icon';
2
+ declare type Props = {
3
+ active?: boolean;
4
+ } & IconProps;
5
+ declare const AnimatedFABIcon: ({ active, ...iconProps }: Props) => JSX.Element;
6
+ export { AnimatedFABIcon };
@@ -0,0 +1,3 @@
1
+ import { TouchableHighlight, TouchableHighlightProps } from 'react-native';
2
+ declare const StyledFABContainer: import("styled-components").StyledComponent<typeof TouchableHighlight, import("../../theme").Theme, TouchableHighlightProps, never>;
3
+ export { StyledFABContainer };
@@ -0,0 +1,3 @@
1
+ import { IconProps } from '../Icon';
2
+ declare const StyledFABIcon: import("styled-components").StyledComponent<({ icon, style, size, intent, testID, }: IconProps) => JSX.Element, import("../../theme").Theme, IconProps, never>;
3
+ export { StyledFABIcon };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import { StyleProp, ViewStyle } from 'react-native';
2
+ import { IconProps } from '../Icon';
3
+ interface FABProps {
4
+ /**
5
+ * Name of the Icon.
6
+ */
7
+ icon: IconProps['icon'];
8
+ /**
9
+ * This function is called on pressing the button.
10
+ * */
11
+ onPress?: () => void;
12
+ /**
13
+ * Specify if the button is animated.
14
+ */
15
+ animated?: boolean;
16
+ /**
17
+ * Specify if the button is in active state. It only works if animated is true.
18
+ */
19
+ active?: boolean;
20
+ /**
21
+ * Addditional style.
22
+ */
23
+ style?: StyleProp<ViewStyle>;
24
+ /**
25
+ * Testing id of the component.
26
+ */
27
+ testID?: string;
28
+ }
29
+ declare const FAB: ({ onPress, icon, animated, testID, active, style }: FABProps) => JSX.Element;
30
+ export default FAB;
@@ -1,7 +1,7 @@
1
1
  import { StyleProp, TextStyle } from 'react-native';
2
2
  import IconList from './IconList';
3
3
  declare type IconName = typeof IconList[number];
4
- interface IconProps {
4
+ export interface IconProps {
5
5
  /**
6
6
  * Name of the Icon.
7
7
  */
@@ -1,8 +1,10 @@
1
1
  import { ThemeProvider, useTheme } from 'styled-components-native';
2
2
  import theme, { getTheme } from './theme';
3
+ import { scale } from './utils/scale';
3
4
  import Badge from './components/Badge';
4
5
  import Card from './components/Card';
5
6
  import Divider from './components/Divider';
6
7
  import Icon from './components/Icon';
7
8
  import Typography from './components/Typography';
8
- export { theme, getTheme, useTheme, ThemeProvider, Badge, Card, Divider, Icon, Typography, };
9
+ import FAB from './components/FAB';
10
+ export { theme, getTheme, useTheme, scale, ThemeProvider, Badge, Card, Divider, Icon, Typography, FAB, };
@@ -0,0 +1,15 @@
1
+ import { GlobalTheme } from '../global';
2
+ declare const getFABTheme: (theme: GlobalTheme) => {
3
+ fontSizes: {
4
+ default: string;
5
+ };
6
+ colors: {
7
+ buttonBackground: string;
8
+ icon: string;
9
+ };
10
+ sizes: {
11
+ width: string;
12
+ height: string;
13
+ };
14
+ };
15
+ export default getFABTheme;
@@ -4,6 +4,7 @@ import getCardTheme from './components/card';
4
4
  import getDividerTheme from './components/divider';
5
5
  import getIconTheme from './components/icon';
6
6
  import getTypographyTheme from './components/typography';
7
+ import getFABTheme from './components/fab';
7
8
  declare type Theme = GlobalTheme & {
8
9
  __hd__: {
9
10
  badge: ReturnType<typeof getBadgeTheme>;
@@ -11,6 +12,7 @@ declare type Theme = GlobalTheme & {
11
12
  divider: ReturnType<typeof getDividerTheme>;
12
13
  icon: ReturnType<typeof getIconTheme>;
13
14
  typography: ReturnType<typeof getTypographyTheme>;
15
+ fab: ReturnType<typeof getFABTheme>;
14
16
  };
15
17
  };
16
18
  declare const getTheme: (theme?: GlobalTheme) => Theme;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export declare const BASE_WIDTH = 390;
2
+ export declare const scale: (size: number) => number;
@@ -1,7 +0,0 @@
1
- import { View } from 'react-native';
2
- declare const Square: import("styled-components").StyledComponent<typeof View, import("../../theme").Theme, {
3
- themeSize: 'small' | 'medium' | 'large';
4
- themeMargin: 'small' | 'medium' | 'large';
5
- themeBgColor: 'primary' | 'danger' | 'warning';
6
- }, never>;
7
- export { Square };
@@ -1,16 +0,0 @@
1
- interface Props {
2
- /**
3
- * Size.
4
- */
5
- size?: 'small' | 'medium' | 'large';
6
- /**
7
- * Margin.
8
- */
9
- margin: 'small' | 'medium' | 'large';
10
- /**
11
- * Background color.
12
- */
13
- bgColor: 'primary' | 'danger' | 'warning';
14
- }
15
- declare const ExampleComponent: ({ size, margin, bgColor }: Props) => JSX.Element;
16
- export default ExampleComponent;
package/types/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { ThemeProvider, useTheme } from './styled-components';
2
- import theme, { getTheme } from './theme';
3
- import ExampleComponent from './components/ExampleComponent';
4
- export { theme, getTheme, useTheme, ThemeProvider, ExampleComponent };
@@ -1,6 +0,0 @@
1
- /// <reference types="styled-components-react-native" />
2
- import * as styledComponents from 'styled-components/native';
3
- import type { Theme } from './theme';
4
- declare const styled: styledComponents.ReactNativeStyledInterface<Theme>, useTheme: () => Theme, css: import("styled-components").ThemedCssFunction<Theme>, ThemeProvider: import("styled-components").ThemeProviderComponent<Theme, Theme>;
5
- export { useTheme, css, ThemeProvider };
6
- export default styled;
@@ -1,24 +0,0 @@
1
- import { palette } from '@hero-design/colors';
2
- declare const systemPalette: {
3
- primary: string;
4
- primaryLight: string;
5
- info: string;
6
- infoLight: string;
7
- infoBackground: string;
8
- success: string;
9
- successDark: string;
10
- successLight: string;
11
- successBackground: string;
12
- danger: string;
13
- dangerLight: string;
14
- dangerBackground: string;
15
- warning: string;
16
- warningDark: string;
17
- warningBackground: string;
18
- platformBackground: string;
19
- backgroundDark: string;
20
- text: string;
21
- disabledText: string;
22
- invertedText: string;
23
- };
24
- export { palette, systemPalette };
@@ -1,11 +0,0 @@
1
- declare const demoStyleColors: {
2
- primaryBg: string;
3
- dangerBg: string;
4
- warningBg: string;
5
- };
6
- declare const demoStyleSpace: {
7
- smallMargin: number;
8
- mediumMargin: number;
9
- largeMargin: number;
10
- };
11
- export { demoStyleColors, demoStyleSpace };
@@ -1,14 +0,0 @@
1
- import { GlobalTheme } from '../global';
2
- declare const getExampleComponentTheme: (theme: GlobalTheme) => {
3
- colors: {
4
- primaryBg: string;
5
- dangerBg: string;
6
- warningBg: string;
7
- };
8
- space: {
9
- smallMargin: number;
10
- mediumMargin: number;
11
- largeMargin: number;
12
- };
13
- };
14
- export default getExampleComponentTheme;
@@ -1,24 +0,0 @@
1
- import { palette } from '@hero-design/colors';
2
- declare const systemPalette: {
3
- primary: string;
4
- primaryLight: string;
5
- info: string;
6
- infoLight: string;
7
- infoBackground: string;
8
- success: string;
9
- successDark: string;
10
- successLight: string;
11
- successBackground: string;
12
- danger: string;
13
- dangerLight: string;
14
- dangerBackground: string;
15
- warning: string;
16
- warningDark: string;
17
- warningBackground: string;
18
- platformBackground: string;
19
- backgroundDark: string;
20
- text: string;
21
- disabledText: string;
22
- invertedText: string;
23
- };
24
- export { palette, systemPalette };
@@ -1,58 +0,0 @@
1
- declare const globalTheme: {
2
- colors: {
3
- primary: string;
4
- primaryLight: string;
5
- info: string;
6
- infoLight: string;
7
- infoBackground: string;
8
- success: string;
9
- successDark: string;
10
- successLight: string;
11
- successBackground: string;
12
- danger: string;
13
- dangerLight: string;
14
- dangerBackground: string;
15
- warning: string;
16
- warningDark: string;
17
- warningBackground: string;
18
- platformBackground: string;
19
- backgroundDark: string;
20
- text: string;
21
- disabledText: string;
22
- invertedText: string;
23
- };
24
- space: {
25
- xxsmall: number;
26
- xsmall: number;
27
- small: number;
28
- medium: number;
29
- large: number;
30
- xlarge: number;
31
- xxlarge: number;
32
- xxxlarge: number;
33
- xxxxlarge: number;
34
- };
35
- fontSizes: {
36
- xlarge: number;
37
- large: number;
38
- medium: number;
39
- small: number;
40
- xsmall: number;
41
- };
42
- fontWeights: {
43
- light: number;
44
- regular: number;
45
- semiBold: number;
46
- bold: number;
47
- };
48
- lineHeights: {
49
- xlarge: number;
50
- large: number;
51
- medium: number;
52
- small: number;
53
- xsmall: number;
54
- };
55
- };
56
- declare type GlobalTheme = typeof globalTheme;
57
- export { GlobalTheme };
58
- export default globalTheme;
@@ -1,12 +0,0 @@
1
- declare const space: {
2
- xxsmall: number;
3
- xsmall: number;
4
- small: number;
5
- medium: number;
6
- large: number;
7
- xlarge: number;
8
- xxlarge: number;
9
- xxxlarge: number;
10
- xxxxlarge: number;
11
- };
12
- export { space };
@@ -1,21 +0,0 @@
1
- declare const fontSizes: {
2
- xlarge: number;
3
- large: number;
4
- medium: number;
5
- small: number;
6
- xsmall: number;
7
- };
8
- declare const fontWeights: {
9
- light: number;
10
- regular: number;
11
- semiBold: number;
12
- bold: number;
13
- };
14
- declare const lineHeights: {
15
- xlarge: number;
16
- large: number;
17
- medium: number;
18
- small: number;
19
- xsmall: number;
20
- };
21
- export { fontSizes, fontWeights, lineHeights };
@@ -1,11 +0,0 @@
1
- import { GlobalTheme } from './global';
2
- import getExampleComponentTheme from './components/exampleComponent';
3
- declare type Theme = GlobalTheme & {
4
- __hd__: {
5
- exampleComponent: ReturnType<typeof getExampleComponentTheme>;
6
- };
7
- };
8
- declare const getTheme: (theme?: GlobalTheme) => Theme;
9
- declare const theme: Theme;
10
- export { Theme, getTheme };
11
- export default theme;
@@ -1,12 +0,0 @@
1
- declare const space: {
2
- xxsmall: number;
3
- xsmall: number;
4
- small: number;
5
- medium: number;
6
- large: number;
7
- xlarge: number;
8
- xxlarge: number;
9
- xxxlarge: number;
10
- xxxxlarge: number;
11
- };
12
- export { space };
@@ -1,21 +0,0 @@
1
- declare const fontSizes: {
2
- xlarge: number;
3
- large: number;
4
- medium: number;
5
- small: number;
6
- xsmall: number;
7
- };
8
- declare const fontWeights: {
9
- light: number;
10
- regular: number;
11
- semiBold: number;
12
- bold: number;
13
- };
14
- declare const lineHeights: {
15
- xlarge: number;
16
- large: number;
17
- medium: number;
18
- small: number;
19
- xsmall: number;
20
- };
21
- export { fontSizes, fontWeights, lineHeights };