@gympass/yoga 7.65.0 → 7.66.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 (234) hide show
  1. package/cjs/Dialog/web/Dialog.js +12 -7
  2. package/cjs/Drawer/web/Drawer.js +5 -1
  3. package/cjs/Input/index.js +1 -0
  4. package/cjs/Input/web/Input.js +8 -3
  5. package/cjs/Input/web/Phone.js +144 -0
  6. package/cjs/Input/web/Phone.style.js +41 -0
  7. package/cjs/Input/web/data-images.js +10 -0
  8. package/cjs/Input/web/index.js +4 -0
  9. package/cjs/hooks/index.js +8 -0
  10. package/cjs/hooks/useCombinedRefs.js +32 -0
  11. package/esm/Accordion/web/Accordion.test.js +19 -0
  12. package/esm/ActionRequirement/index.native.js +2 -0
  13. package/esm/ActionRequirement/native/ActionRequirement.js +48 -0
  14. package/esm/ActionRequirement/native/ActionRequirement.test.js +45 -0
  15. package/esm/ActionRequirement/native/ActionRequirementStyles.js +25 -0
  16. package/esm/ActionRequirement/native/index.js +6 -0
  17. package/esm/ActionRequirement/web/ActionRequirement.test.js +36 -0
  18. package/esm/AutoComplete/web/AutoComplete.test.js +139 -0
  19. package/esm/Avatar/index.native.js +4 -0
  20. package/esm/Avatar/native/Avatar.js +96 -0
  21. package/esm/Avatar/native/Avatar.test.js +46 -0
  22. package/esm/Avatar/native/AvatarCircle.js +24 -0
  23. package/esm/Avatar/web/Avatar.test.js +63 -0
  24. package/esm/Banner/index.native.js +2 -0
  25. package/esm/Banner/native/Banner.js +128 -0
  26. package/esm/Banner/native/Banner.test.js +103 -0
  27. package/esm/Banner/native/index.js +2 -0
  28. package/esm/Banner/web/Banner.test.js +109 -0
  29. package/esm/BottomSheet/web/BottomSheet.test.js +48 -0
  30. package/esm/Box/index.native.js +2 -0
  31. package/esm/Box/native/Box.js +4 -0
  32. package/esm/Box/native/Box.test.js +16 -0
  33. package/esm/Box/native/index.js +2 -0
  34. package/esm/Box/web/Box.test.js +16 -0
  35. package/esm/Button/index.native.js +8 -0
  36. package/esm/Button/native/Button.js +110 -0
  37. package/esm/Button/native/Button.test.js +475 -0
  38. package/esm/Button/native/Icon.js +82 -0
  39. package/esm/Button/native/Link.js +35 -0
  40. package/esm/Button/native/Text.js +74 -0
  41. package/esm/Button/native/withTouchable.js +63 -0
  42. package/esm/Button/web/Button.test.js +772 -0
  43. package/esm/Card/index.native.js +2 -0
  44. package/esm/Card/native/Card/Actions.js +12 -0
  45. package/esm/Card/native/Card/Card.js +92 -0
  46. package/esm/Card/native/Card/Card.test.js +15 -0
  47. package/esm/Card/native/Card/Content.js +8 -0
  48. package/esm/Card/native/Card/Header.js +8 -0
  49. package/esm/Card/native/Card/index.js +8 -0
  50. package/esm/Card/native/EventCard/EventCard.js +169 -0
  51. package/esm/Card/native/EventCard/EventCard.test.js +65 -0
  52. package/esm/Card/native/EventCard/index.js +2 -0
  53. package/esm/Card/native/GymCard/CheckIn/Avatar.js +17 -0
  54. package/esm/Card/native/GymCard/CheckIn/CheckIn.js +66 -0
  55. package/esm/Card/native/GymCard/CheckIn/CheckIn.test.js +39 -0
  56. package/esm/Card/native/GymCard/CheckIn/Content.js +11 -0
  57. package/esm/Card/native/GymCard/CheckIn/Header.js +11 -0
  58. package/esm/Card/native/GymCard/CheckIn/index.js +2 -0
  59. package/esm/Card/native/GymCard/index.js +5 -0
  60. package/esm/Card/native/PlanCard/Actions.js +22 -0
  61. package/esm/Card/native/PlanCard/Content.js +75 -0
  62. package/esm/Card/native/PlanCard/List.js +73 -0
  63. package/esm/Card/native/PlanCard/PlanCard.js +51 -0
  64. package/esm/Card/native/PlanCard/PlanCard.test.js +84 -0
  65. package/esm/Card/native/PlanCard/Subtitle.js +15 -0
  66. package/esm/Card/native/PlanCard/Tag.js +34 -0
  67. package/esm/Card/native/PlanCard/index.js +15 -0
  68. package/esm/Card/native/index.js +5 -0
  69. package/esm/Card/web/Card/Card.test.js +14 -0
  70. package/esm/Card/web/EventCard/EventCard.test.js +27 -0
  71. package/esm/Card/web/PlanCard/PlanCard.test.js +94 -0
  72. package/esm/Checkbox/index.native.js +3 -0
  73. package/esm/Checkbox/native/Checkbox.js +179 -0
  74. package/esm/Checkbox/native/Checkbox.test.js +115 -0
  75. package/esm/Checkbox/native/Switch.js +115 -0
  76. package/esm/Checkbox/native/Switch.test.js +54 -0
  77. package/esm/Checkbox/native/index.js +3 -0
  78. package/esm/Checkbox/web/Checkbox.test.js +153 -0
  79. package/esm/Checkbox/web/Switch.test.js +56 -0
  80. package/esm/Chips/index.native.js +2 -0
  81. package/esm/Chips/native/Chips.js +104 -0
  82. package/esm/Chips/native/Chips.test.js +143 -0
  83. package/esm/Chips/native/Counter.js +20 -0
  84. package/esm/Chips/native/index.js +2 -0
  85. package/esm/Chips/web/Chips.test.js +128 -0
  86. package/esm/Datepicker/web/Datepicker.test.js +247 -0
  87. package/esm/Dialog/web/Dialog.js +13 -8
  88. package/esm/Dialog/web/Dialog.test.js +62 -0
  89. package/esm/Divider/index.native.js +2 -0
  90. package/esm/Divider/native/Divider.js +29 -0
  91. package/esm/Divider/native/Divider.test.js +29 -0
  92. package/esm/Divider/native/index.js +2 -0
  93. package/esm/Divider/web/Divider.test.js +29 -0
  94. package/esm/Drawer/web/Drawer.js +6 -2
  95. package/esm/Drawer/web/Drawer.test.js +33 -0
  96. package/esm/Dropdown/index.native.js +2 -0
  97. package/esm/Dropdown/native/Backdrop.js +93 -0
  98. package/esm/Dropdown/native/Backdrop.test.js +26 -0
  99. package/esm/Dropdown/native/Dropdown.js +142 -0
  100. package/esm/Dropdown/native/Dropdown.test.js +78 -0
  101. package/esm/Dropdown/native/Options.android.js +66 -0
  102. package/esm/Dropdown/native/Options.ios.js +71 -0
  103. package/esm/Dropdown/native/index.js +2 -0
  104. package/esm/Dropdown/web/Dropdown.test.js +93 -0
  105. package/esm/Feedback/web/Feedback.test.js +83 -0
  106. package/esm/Grid/web/Col.test.js +48 -0
  107. package/esm/Grid/web/Container.test.js +14 -0
  108. package/esm/Grid/web/Hide.test.js +31 -0
  109. package/esm/Grid/web/Row.test.js +14 -0
  110. package/esm/Header/web/Header.test.js +38 -0
  111. package/esm/Heading/web/Heading.test.js +58 -0
  112. package/esm/Icon/index.native.js +2 -0
  113. package/esm/Icon/native/Icon.test.js +47 -0
  114. package/esm/Icon/native/index.js +2 -0
  115. package/esm/Icon/web/Icon.test.js +47 -0
  116. package/esm/Input/index.js +2 -1
  117. package/esm/Input/index.native.js +6 -0
  118. package/esm/Input/native/Email.js +15 -0
  119. package/esm/Input/native/Email.test.js +13 -0
  120. package/esm/Input/native/Helper.js +62 -0
  121. package/esm/Input/native/Input.js +234 -0
  122. package/esm/Input/native/Input.test.js +181 -0
  123. package/esm/Input/native/Number.js +12 -0
  124. package/esm/Input/native/Number.test.js +13 -0
  125. package/esm/Input/native/Password.js +112 -0
  126. package/esm/Input/native/Password.test.js +125 -0
  127. package/esm/Input/native/Tel.js +14 -0
  128. package/esm/Input/native/Tel.test.js +13 -0
  129. package/esm/Input/native/index.js +6 -0
  130. package/esm/Input/web/Email.test.js +13 -0
  131. package/esm/Input/web/Input.js +9 -4
  132. package/esm/Input/web/Input.test.js +145 -0
  133. package/esm/Input/web/Number.test.js +13 -0
  134. package/esm/Input/web/Password.test.js +90 -0
  135. package/esm/Input/web/Phone.js +124 -0
  136. package/esm/Input/web/Phone.style.js +27 -0
  137. package/esm/Input/web/Phone.test.js +95 -0
  138. package/esm/Input/web/Tel.test.js +13 -0
  139. package/esm/Input/web/data-images.js +3 -0
  140. package/esm/Input/web/index.js +2 -1
  141. package/esm/List/index.native.js +3 -0
  142. package/esm/List/native/List.js +22 -0
  143. package/esm/List/native/List.test.js +106 -0
  144. package/esm/List/native/ListItem.js +51 -0
  145. package/esm/List/native/index.js +3 -0
  146. package/esm/List/web/List.test.js +62 -0
  147. package/esm/Menu/web/Menu.test.js +115 -0
  148. package/esm/Popover/web/Popover.test.js +19 -0
  149. package/esm/Progress/index.native.js +2 -0
  150. package/esm/Progress/native/Progress.js +103 -0
  151. package/esm/Progress/native/Progress.test.js +222 -0
  152. package/esm/Progress/native/index.js +2 -0
  153. package/esm/Progress/web/Progress.test.js +222 -0
  154. package/esm/RadioGroup/index.native.js +4 -0
  155. package/esm/RadioGroup/native/Button/RadioButton.js +64 -0
  156. package/esm/RadioGroup/native/Button/RadioButton.test.js +96 -0
  157. package/esm/RadioGroup/native/Radio/Radio.js +88 -0
  158. package/esm/RadioGroup/native/Radio/Radio.test.js +112 -0
  159. package/esm/RadioGroup/native/RadioGroup.js +66 -0
  160. package/esm/RadioGroup/native/RadioGroup.test.js +50 -0
  161. package/esm/RadioGroup/native/index.js +4 -0
  162. package/esm/RadioGroup/web/Button/RadioButton.test.js +121 -0
  163. package/esm/RadioGroup/web/Radio/Radio.test.js +108 -0
  164. package/esm/RadioGroup/web/RadioGroup.test.js +83 -0
  165. package/esm/Rating/index.native.js +2 -0
  166. package/esm/Rating/native/Rating.js +186 -0
  167. package/esm/Rating/native/Rating.test.js +121 -0
  168. package/esm/Rating/native/index.js +2 -0
  169. package/esm/Rating/web/Rating.test.js +184 -0
  170. package/esm/Result/index.native.js +8 -0
  171. package/esm/Result/native/Attendances.js +55 -0
  172. package/esm/Result/native/Details.js +97 -0
  173. package/esm/Result/native/Rate.js +35 -0
  174. package/esm/Result/native/Result.js +86 -0
  175. package/esm/Result/native/Result.test.js +107 -0
  176. package/esm/Result/native/ResultButton.js +13 -0
  177. package/esm/Result/native/Tags.js +41 -0
  178. package/esm/Result/native/TinyTextIcon.js +18 -0
  179. package/esm/Result/native/index.js +2 -0
  180. package/esm/Skeleton/index.native.js +2 -0
  181. package/esm/Skeleton/native/Skeleton.js +94 -0
  182. package/esm/Skeleton/native/Skeleton.test.js +78 -0
  183. package/esm/Skeleton/native/index.js +2 -0
  184. package/esm/Skeleton/web/Skeleton.test.js +77 -0
  185. package/esm/Slider/index.native.js +2 -0
  186. package/esm/Slider/native/Label.js +19 -0
  187. package/esm/Slider/native/Marker.js +68 -0
  188. package/esm/Slider/native/Slider.js +156 -0
  189. package/esm/Slider/native/Slider.test.js +122 -0
  190. package/esm/Slider/native/Step.js +14 -0
  191. package/esm/Slider/native/Tooltip.js +90 -0
  192. package/esm/Slider/web/Slider.test.js +86 -0
  193. package/esm/Snackbar/index.native.js +2 -0
  194. package/esm/Snackbar/native/Snackbar.js +199 -0
  195. package/esm/Snackbar/native/Snackbar.test.js +100 -0
  196. package/esm/Snackbar/native/SnackbarAnimationWrapper.js +124 -0
  197. package/esm/Snackbar/native/index.js +2 -0
  198. package/esm/Snackbar/web/Snackbar.test.js +118 -0
  199. package/esm/Stepper/index.native.js +3 -0
  200. package/esm/Stepper/native/Dots.js +45 -0
  201. package/esm/Stepper/native/Line.js +35 -0
  202. package/esm/Stepper/native/Step.js +19 -0
  203. package/esm/Stepper/native/Stepper.js +52 -0
  204. package/esm/Stepper/native/Stepper.test.js +70 -0
  205. package/esm/Stepper/native/index.js +3 -0
  206. package/esm/Stepper/web/Stepper.test.js +67 -0
  207. package/esm/Tag/index.native.js +4 -0
  208. package/esm/Tag/native/Informative.js +72 -0
  209. package/esm/Tag/native/Tag.js +75 -0
  210. package/esm/Tag/native/Tag.test.js +94 -0
  211. package/esm/Tag/native/index.js +2 -0
  212. package/esm/Tag/web/Tag.test.js +79 -0
  213. package/esm/Text/index.native.js +16 -0
  214. package/esm/Text/native/Text.js +69 -0
  215. package/esm/Text/native/Text.test.js +149 -0
  216. package/esm/Text/native/index.js +2 -0
  217. package/esm/Text/web/Text.test.js +149 -0
  218. package/esm/TextArea/index.native.js +2 -0
  219. package/esm/TextArea/native/TextArea.js +59 -0
  220. package/esm/TextArea/native/TextArea.test.js +11 -0
  221. package/esm/TextArea/native/index.js +2 -0
  222. package/esm/TextArea/web/TextArea.test.js +11 -0
  223. package/esm/Theme/Provider/index.native.js +2 -0
  224. package/esm/Theme/Provider/native/index.js +2 -0
  225. package/esm/Theme/Provider/web/FontLoader.test.js +11 -0
  226. package/esm/Theme/Provider/web/GlobalStyle.test.js +17 -0
  227. package/esm/Theme/helpers/themeReader/native/native.test.js +53 -0
  228. package/esm/Theme/helpers/themeReader/web/web.test.js +41 -0
  229. package/esm/Theme/index.native.js +5 -0
  230. package/esm/hooks/index.js +2 -1
  231. package/esm/hooks/useCombinedRefs.js +25 -0
  232. package/esm/index.native.js +26 -0
  233. package/esm/shared/index.native.js +2 -0
  234. package/package.json +4 -3
@@ -0,0 +1,139 @@
1
+ import React from 'react';
2
+ import { render, fireEvent } from '@testing-library/react';
3
+ import { ThemeProvider, AutoComplete } from '../..';
4
+ describe('<AutoComplete />', function () {
5
+ describe('Snapshots', function () {
6
+ it('should match with default component', function () {
7
+ var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, null))),
8
+ container = _render.container;
9
+
10
+ expect(container).toMatchSnapshot();
11
+ });
12
+ it('should match with a full width component', function () {
13
+ var _render2 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
14
+ full: true
15
+ }))),
16
+ container = _render2.container;
17
+
18
+ expect(container).toMatchSnapshot();
19
+ });
20
+ it('should match with options list', function () {
21
+ var _render3 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
22
+ value: "s",
23
+ options: ['first', 'second']
24
+ }))),
25
+ getByDisplayValue = _render3.getByDisplayValue,
26
+ container = _render3.container;
27
+
28
+ fireEvent.focus(getByDisplayValue('s'));
29
+ expect(container).toMatchSnapshot();
30
+ });
31
+ it('should match with full width options list', function () {
32
+ var _render4 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
33
+ value: "s",
34
+ full: true,
35
+ options: ['first', 'second']
36
+ }))),
37
+ getByDisplayValue = _render4.getByDisplayValue,
38
+ container = _render4.container;
39
+
40
+ fireEvent.focus(getByDisplayValue('s'));
41
+ expect(container).toMatchSnapshot();
42
+ });
43
+ });
44
+ describe('Options list', function () {
45
+ it('should filter the options', function () {
46
+ var _render5 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
47
+ value: "secon",
48
+ options: ['first', 'second', 'third']
49
+ }))),
50
+ container = _render5.container,
51
+ getByDisplayValue = _render5.getByDisplayValue;
52
+
53
+ fireEvent.focus(getByDisplayValue('secon'));
54
+ expect(container.querySelector('ul').firstChild.textContent).toBe('second');
55
+ });
56
+ it('should close options list when clean button is clicked', function () {
57
+ var _render6 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
58
+ value: "secon",
59
+ options: ['first', 'second', 'third']
60
+ }))),
61
+ container = _render6.container,
62
+ getByDisplayValue = _render6.getByDisplayValue,
63
+ getByRole = _render6.getByRole;
64
+
65
+ fireEvent.focus(getByDisplayValue('secon'));
66
+ fireEvent.click(getByRole('button', {
67
+ name: /clear/i
68
+ }));
69
+ expect(container.querySelector('ul')).toBe(null);
70
+ });
71
+ });
72
+ describe('Event listeners', function () {
73
+ it('should call onChangeMock', function () {
74
+ var onChangeMock = jest.fn();
75
+ var onCleanMock = jest.fn();
76
+ var onSelectMock = jest.fn();
77
+
78
+ var _render7 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
79
+ value: "New",
80
+ options: ['New York'],
81
+ onChange: onChangeMock
82
+ }))),
83
+ getByDisplayValue = _render7.getByDisplayValue;
84
+
85
+ fireEvent.change(getByDisplayValue('New'), {
86
+ target: {
87
+ value: 'a'
88
+ }
89
+ });
90
+ expect(onChangeMock).toHaveBeenCalledWith('a');
91
+ expect(onSelectMock).not.toHaveBeenCalled();
92
+ expect(onCleanMock).not.toHaveBeenCalled();
93
+ });
94
+ it('should call onCleanMock', function () {
95
+ var onCleanMock = jest.fn();
96
+ var onSelectMock = jest.fn();
97
+ var onChangeMock = jest.fn();
98
+
99
+ var _render8 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
100
+ value: "New",
101
+ options: ['New York'],
102
+ onClean: onCleanMock,
103
+ onSelect: onSelectMock,
104
+ onChange: onChangeMock
105
+ }))),
106
+ getByDisplayValue = _render8.getByDisplayValue,
107
+ getByRole = _render8.getByRole;
108
+
109
+ fireEvent.focus(getByDisplayValue('New'));
110
+ fireEvent.click(getByRole('button', {
111
+ name: /clear/i
112
+ }));
113
+ expect(onCleanMock).toHaveBeenCalledWith('');
114
+ expect(onSelectMock).not.toHaveBeenCalled();
115
+ expect(onChangeMock).toHaveBeenCalledWith('');
116
+ });
117
+ it('should call onSelectMock', function () {
118
+ var onSelectMock = jest.fn();
119
+ var onCleanMock = jest.fn();
120
+ var onChangeMock = jest.fn();
121
+
122
+ var _render9 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
123
+ value: "New",
124
+ options: ['New York'],
125
+ onSelect: onSelectMock,
126
+ onClean: onCleanMock,
127
+ onChange: onChangeMock
128
+ }))),
129
+ getByDisplayValue = _render9.getByDisplayValue,
130
+ getByRole = _render9.getByRole;
131
+
132
+ fireEvent.focus(getByDisplayValue('New'));
133
+ fireEvent.click(getByRole('option'));
134
+ expect(onSelectMock).toHaveBeenCalledWith('New York');
135
+ expect(onChangeMock).toHaveBeenCalledWith('New York');
136
+ expect(onCleanMock).not.toHaveBeenCalled();
137
+ });
138
+ });
139
+ });
@@ -0,0 +1,4 @@
1
+ import Avatar from './native/Avatar';
2
+ import AvatarCircle from './native/AvatarCircle';
3
+ Avatar.Circle = AvatarCircle;
4
+ export default Avatar;
@@ -0,0 +1,96 @@
1
+ var _excluded = ["icon", "src", "children", "fill", "stroke"];
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
6
+
7
+ import React, { forwardRef } from 'react';
8
+ import { BuildingFilled } from '@gympass/yoga-icons';
9
+ import { string, func } from 'prop-types';
10
+ import { Image } from 'react-native';
11
+ import Box from '../../Box';
12
+ import Icon from '../../Icon';
13
+
14
+ var Content = function Content(_ref) {
15
+ var icon = _ref.icon,
16
+ src = _ref.src,
17
+ fill = _ref.fill,
18
+ content = _ref.content,
19
+ stroke = _ref.stroke;
20
+
21
+ if (src) {
22
+ return /*#__PURE__*/React.createElement(Box, {
23
+ as: Image,
24
+ width: "100%",
25
+ height: "100%",
26
+ source: src
27
+ });
28
+ }
29
+
30
+ if (content) {
31
+ return content;
32
+ }
33
+
34
+ return /*#__PURE__*/React.createElement(Icon, {
35
+ as: icon,
36
+ width: "50%",
37
+ height: "50%",
38
+ fill: fill,
39
+ stroke: stroke
40
+ });
41
+ };
42
+ /**
43
+ * The Avatar component is used to display the image.
44
+ * It has two shapes: default and circle
45
+ */
46
+
47
+
48
+ var Avatar = /*#__PURE__*/forwardRef(function (_ref2, ref) {
49
+ var _ref2$icon = _ref2.icon,
50
+ icon = _ref2$icon === void 0 ? BuildingFilled : _ref2$icon,
51
+ src = _ref2.src,
52
+ children = _ref2.children,
53
+ fill = _ref2.fill,
54
+ stroke = _ref2.stroke,
55
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded);
56
+
57
+ return /*#__PURE__*/React.createElement(Box, _extends({
58
+ ref: ref,
59
+ bgColor: "elements.selectionAndIcons",
60
+ display: "flex",
61
+ alignItems: "center",
62
+ justifyContent: "center",
63
+ width: 48,
64
+ height: 48,
65
+ borderRadius: "small",
66
+ elevation: "small",
67
+ overflow: "hidden"
68
+ }, props), /*#__PURE__*/React.createElement(Content, {
69
+ icon: icon,
70
+ src: src,
71
+ fill: fill,
72
+ stroke: stroke,
73
+ content: children
74
+ }));
75
+ });
76
+ Content.propTypes = _extends({
77
+ src: Image.propTypes.source,
78
+ icon: func,
79
+ fill: string
80
+ }, Box.propTypes);
81
+ Content.defaultProps = {
82
+ src: undefined,
83
+ fill: 'white',
84
+ icon: BuildingFilled
85
+ };
86
+ Avatar.propTypes = _extends({
87
+ src: Image.propTypes.source,
88
+ icon: func,
89
+ fill: string
90
+ }, Box.propTypes);
91
+ Avatar.defaultProps = _extends({
92
+ src: undefined,
93
+ fill: 'white'
94
+ }, Box.defaultProps);
95
+ Avatar.displayName = 'Avatar';
96
+ export default Avatar;
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react-native';
3
+ import { UserFilled } from '@gympass/yoga-icons';
4
+ import { ThemeProvider } from '../..';
5
+ import Avatar from './Avatar';
6
+ import Text from '../../Text';
7
+ describe('<Avatar />', function () {
8
+ it('should match snapshot in default avatar', function () {
9
+ var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, {
10
+ width: 78,
11
+ height: 78,
12
+ fill: "black"
13
+ }))),
14
+ toJSON = _render.toJSON;
15
+
16
+ expect(toJSON()).toMatchSnapshot();
17
+ });
18
+ it('should match snapshot in default avatar with placeholder prop', function () {
19
+ var _render2 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, {
20
+ placeholder: UserFilled
21
+ }))),
22
+ toJSON = _render2.toJSON;
23
+
24
+ expect(toJSON()).toMatchSnapshot();
25
+ });
26
+ it('should match snapshot in circle avatar', function () {
27
+ var _render3 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar.Circle, null))),
28
+ toJSON = _render3.toJSON;
29
+
30
+ expect(toJSON()).toMatchSnapshot();
31
+ });
32
+ it('should match snapshot in circle avatar with placeholder prop', function () {
33
+ var _render4 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar.Circle, {
34
+ placeholder: UserFilled
35
+ }))),
36
+ toJSON = _render4.toJSON;
37
+
38
+ expect(toJSON()).toMatchSnapshot();
39
+ });
40
+ it('should match snapshot in avatar with children prop', function () {
41
+ var _render5 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, null, /*#__PURE__*/React.createElement(Text, null, "AL")))),
42
+ toJSON = _render5.toJSON;
43
+
44
+ expect(toJSON()).toMatchSnapshot();
45
+ });
46
+ });
@@ -0,0 +1,24 @@
1
+ var _excluded = ["src"];
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
4
+
5
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
6
+
7
+ import React, { forwardRef } from 'react';
8
+ import { UserFilled } from '@gympass/yoga-icons';
9
+ import Avatar from './Avatar';
10
+ var AvatarCircle = /*#__PURE__*/forwardRef(function (_ref, ref) {
11
+ var src = _ref.src,
12
+ props = _objectWithoutPropertiesLoose(_ref, _excluded);
13
+
14
+ return /*#__PURE__*/React.createElement(Avatar, _extends({}, props, {
15
+ src: src,
16
+ borderRadius: "circle",
17
+ icon: !src ? UserFilled : undefined,
18
+ ref: ref
19
+ }));
20
+ });
21
+ AvatarCircle.propTypes = Avatar.propTypes;
22
+ AvatarCircle.defaultProps = Avatar.defaultProps;
23
+ AvatarCircle.displayName = 'Avatar.Circle';
24
+ export default AvatarCircle;
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { UserFilled } from '@gympass/yoga-icons';
4
+ import { ThemeProvider } from '../..';
5
+ import Avatar from './Avatar';
6
+ describe('<Avatar />', function () {
7
+ it('should match snapshot in default avatar', function () {
8
+ var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, {
9
+ width: 78,
10
+ height: 78,
11
+ fill: "black"
12
+ }))),
13
+ container = _render.container;
14
+
15
+ expect(container).toMatchSnapshot();
16
+ });
17
+ it('should match snapshot in default avatar with src and alt prop', function () {
18
+ var _render2 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, {
19
+ src: "https://github.com/Gympass.png",
20
+ alt: "Gympass brand logo"
21
+ }))),
22
+ container = _render2.container;
23
+
24
+ expect(container).toMatchSnapshot();
25
+ });
26
+ it('should match snapshot in default avatar with placeholder prop', function () {
27
+ var _render3 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, {
28
+ icon: UserFilled
29
+ }))),
30
+ container = _render3.container;
31
+
32
+ expect(container).toMatchSnapshot();
33
+ });
34
+ it('should match snapshot in circle avatar', function () {
35
+ var _render4 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar.Circle, null))),
36
+ container = _render4.container;
37
+
38
+ expect(container).toMatchSnapshot();
39
+ });
40
+ it('should match snapshot in circle avatar with placeholder prop', function () {
41
+ var _render5 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar.Circle, {
42
+ icon: UserFilled
43
+ }))),
44
+ container = _render5.container;
45
+
46
+ expect(container).toMatchSnapshot();
47
+ });
48
+ it('should match snapshot in circle avatar with src and alt prop', function () {
49
+ var _render6 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar.Circle, {
50
+ src: "https://github.com/Gympass.png",
51
+ alt: "Gympass brand logo"
52
+ }))),
53
+ container = _render6.container;
54
+
55
+ expect(container).toMatchSnapshot();
56
+ });
57
+ it('should match snapshot in avatar with children prop', function () {
58
+ var _render7 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Avatar, null, /*#__PURE__*/React.createElement("p", null, "LC")))),
59
+ container = _render7.container;
60
+
61
+ expect(container).toMatchSnapshot();
62
+ });
63
+ });
@@ -0,0 +1,2 @@
1
+ import Banner from './native';
2
+ export default Banner;
@@ -0,0 +1,128 @@
1
+ var _excluded = ["button"],
2
+ _excluded2 = ["icon", "variant", "message", "primaryButton", "secondaryButton"];
3
+
4
+ var _templateObject;
5
+
6
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
7
+
8
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
9
+
10
+ function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
11
+
12
+ import React, { forwardRef } from 'react';
13
+ import styled from 'styled-components';
14
+ import { borders, margins } from '@gympass/yoga-system';
15
+ import { func, oneOf, string, checkPropTypes, elementType, shape } from 'prop-types';
16
+ import Box from '../../Box';
17
+ import Button from '../../Button';
18
+ import Icon from '../../Icon';
19
+ import Text from '../../Text';
20
+ var StyledBanner = styled.View(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n display: flex;\n flex: 1;\n align-items: center;\n ", "\n\n ", "\n \n ", "\n"])), function (_ref) {
21
+ var variant = _ref.variant,
22
+ _ref$theme$yoga = _ref.theme.yoga,
23
+ banner = _ref$theme$yoga.components.banner,
24
+ spacing = _ref$theme$yoga.spacing,
25
+ _ref$theme$yoga$color = _ref$theme$yoga.colors.feedback[variant],
26
+ backgroundColor = _ref$theme$yoga$color === void 0 ? {
27
+ light: banner.defaultBackgroundColor
28
+ } : _ref$theme$yoga$color;
29
+ return "\n background-color: " + backgroundColor.light + ";\n padding: " + spacing.xxsmall + "px\n " + spacing.small + "px;\n border-radius: " + banner.border.radius + "px;\n ";
30
+ }, margins, borders);
31
+ var BannerActionButton = /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
32
+ var _ref2$button = _ref2.button,
33
+ label = _ref2$button.label,
34
+ action = _ref2$button.action,
35
+ props = _objectWithoutPropertiesLoose(_ref2, _excluded);
36
+
37
+ return /*#__PURE__*/React.createElement(Box, _extends({
38
+ as: Button.Text,
39
+ small: true,
40
+ secondary: true,
41
+ onPress: action,
42
+ ref: ref
43
+ }, props), label);
44
+ });
45
+ BannerActionButton.propTypes = {
46
+ button: shape({
47
+ label: string.isRequired,
48
+ action: func.isRequired
49
+ }).isRequired
50
+ };
51
+ /** A banner is a component that displays a prominent message. It can have related action buttons on it or not. */
52
+
53
+ var Banner = /*#__PURE__*/forwardRef(function (props, ref) {
54
+ var icon = props.icon,
55
+ variant = props.variant,
56
+ message = props.message,
57
+ primaryButton = props.primaryButton,
58
+ secondaryButton = props.secondaryButton,
59
+ rest = _objectWithoutPropertiesLoose(props, _excluded2);
60
+
61
+ return /*#__PURE__*/React.createElement(StyledBanner, _extends({
62
+ ref: ref,
63
+ variant: variant
64
+ }, rest), /*#__PURE__*/React.createElement(Box, {
65
+ flexDirection: "row",
66
+ flex: 1,
67
+ alignItems: "center"
68
+ }, icon && /*#__PURE__*/React.createElement(Icon, {
69
+ as: icon,
70
+ size: "medium",
71
+ fill: "secondary",
72
+ marginRight: "xxsmall"
73
+ }), /*#__PURE__*/React.createElement(Text.Small, {
74
+ flex: 1,
75
+ marginVertical: "xxsmall"
76
+ }, message), primaryButton && !secondaryButton && /*#__PURE__*/React.createElement(BannerActionButton, {
77
+ button: primaryButton,
78
+ marginLeft: "xxsmall"
79
+ })), primaryButton && secondaryButton && /*#__PURE__*/React.createElement(Box, {
80
+ display: "flex",
81
+ flex: 1,
82
+ justifyContent: "flex-end",
83
+ flexDirection: "row",
84
+ marginBottom: "xxsmall"
85
+ }, /*#__PURE__*/React.createElement(BannerActionButton, {
86
+ button: primaryButton,
87
+ marginRight: "xxxsmall"
88
+ }), /*#__PURE__*/React.createElement(BannerActionButton, {
89
+ button: secondaryButton
90
+ })));
91
+ });
92
+ var BannerActionButtonType = shape({
93
+ label: string.isRequired,
94
+ action: func.isRequired
95
+ });
96
+ Banner.propTypes = {
97
+ /** SVG to be rendered. */
98
+ icon: elementType,
99
+
100
+ /** style the banner following the theme (success, informative, attention) */
101
+ variant: oneOf(['success', 'informative', 'attention']),
102
+
103
+ /** the message to be displayed */
104
+ message: string.isRequired,
105
+
106
+ /** the label and action fuction are required for banner action buttons */
107
+ primaryButton: BannerActionButtonType,
108
+
109
+ /** the secondary button should only be used assemble the primary button (the label and action fuction are required for banner action buttons). */
110
+ secondaryButton: function secondaryButton(props, propName, componentName) {
111
+ var _checkPropTypes;
112
+
113
+ var primaryButton = props.primaryButton;
114
+
115
+ if (!primaryButton && !!props[propName]) {
116
+ return new Error("The " + propName + " must only be used ensemble with the primaryButton.");
117
+ }
118
+
119
+ return checkPropTypes((_checkPropTypes = {}, _checkPropTypes[propName] = BannerActionButtonType, _checkPropTypes), props, 'prop', componentName);
120
+ }
121
+ };
122
+ Banner.defaultProps = {
123
+ icon: undefined,
124
+ variant: 'informative',
125
+ primaryButton: undefined,
126
+ secondaryButton: undefined
127
+ };
128
+ export default Banner;
@@ -0,0 +1,103 @@
1
+ import React from 'react';
2
+ import { render, fireEvent } from '@testing-library/react-native';
3
+ import { CheckedFull } from '@gympass/yoga-icons';
4
+ import { ThemeProvider, Banner } from '../..';
5
+ describe('<Banner />', function () {
6
+ it('should match snapshot', function () {
7
+ var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
8
+ message: "Feedback message."
9
+ }))),
10
+ toJSON = _render.toJSON;
11
+
12
+ expect(toJSON()).toMatchSnapshot();
13
+ });
14
+ it('should match snapshot with custom variant', function () {
15
+ var _render2 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
16
+ variant: "success",
17
+ message: "Success banner without button"
18
+ }), /*#__PURE__*/React.createElement(Banner, {
19
+ variant: "informative",
20
+ message: "Informative banner without button"
21
+ }), /*#__PURE__*/React.createElement(Banner, {
22
+ variant: "attention",
23
+ message: "Attention banner without button"
24
+ }))),
25
+ toJSON = _render2.toJSON;
26
+
27
+ expect(toJSON()).toMatchSnapshot();
28
+ });
29
+ it('should match snapshot with icon', function () {
30
+ var _render3 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
31
+ icon: CheckedFull,
32
+ message: "Banner with icon"
33
+ }))),
34
+ toJSON = _render3.toJSON;
35
+
36
+ expect(toJSON()).toMatchSnapshot();
37
+ });
38
+ it('should match snapshot with button', function () {
39
+ var _render4 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
40
+ message: "Banner with button",
41
+ primaryButton: {
42
+ label: 'Action',
43
+ action: function action() {}
44
+ }
45
+ }))),
46
+ toJSON = _render4.toJSON;
47
+
48
+ expect(toJSON()).toMatchSnapshot();
49
+ });
50
+ it('should call button action function when the banner button is pressed', function () {
51
+ var onButtonPressMock = jest.fn();
52
+
53
+ var _render5 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
54
+ message: "Banner with button",
55
+ primaryButton: {
56
+ label: 'Action',
57
+ action: onButtonPressMock
58
+ }
59
+ }))),
60
+ getByText = _render5.getByText;
61
+
62
+ fireEvent.press(getByText('Action'));
63
+ expect(onButtonPressMock).toHaveBeenCalled();
64
+ });
65
+ it('should match snapshot with two action buttons', function () {
66
+ var _render6 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
67
+ message: "Banner with two action buttons",
68
+ primaryButton: {
69
+ label: 'Primary Action',
70
+ action: function action() {}
71
+ },
72
+ secondaryButton: {
73
+ label: 'Secondary Action',
74
+ action: function action() {}
75
+ }
76
+ }))),
77
+ toJSON = _render6.toJSON;
78
+
79
+ expect(toJSON()).toMatchSnapshot();
80
+ });
81
+ it('should call both buttons action function when each banner action button are pressed', function () {
82
+ var onPrimaryButtonPressMock = jest.fn();
83
+ var onSecondaryButtonPressMock = jest.fn();
84
+
85
+ var _render7 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
86
+ message: "Banner with button",
87
+ primaryButton: {
88
+ label: 'Primary Action',
89
+ action: onPrimaryButtonPressMock
90
+ },
91
+ secondaryButton: {
92
+ label: 'Secondary Action',
93
+ action: onSecondaryButtonPressMock
94
+ }
95
+ }))),
96
+ getByText = _render7.getByText;
97
+
98
+ fireEvent.press(getByText('Primary Action'));
99
+ expect(onPrimaryButtonPressMock).toHaveBeenCalled();
100
+ fireEvent.press(getByText('Secondary Action'));
101
+ expect(onSecondaryButtonPressMock).toHaveBeenCalled();
102
+ });
103
+ });
@@ -0,0 +1,2 @@
1
+ import Banner from './Banner';
2
+ export default Banner;