@gympass/yoga 7.66.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.
- package/cjs/Dialog/web/Dialog.js +12 -7
- package/cjs/Drawer/web/Drawer.js +5 -1
- package/esm/Accordion/web/Accordion.test.js +19 -0
- package/esm/ActionRequirement/index.native.js +2 -0
- package/esm/ActionRequirement/native/ActionRequirement.js +48 -0
- package/esm/ActionRequirement/native/ActionRequirement.test.js +45 -0
- package/esm/ActionRequirement/native/ActionRequirementStyles.js +25 -0
- package/esm/ActionRequirement/native/index.js +6 -0
- package/esm/ActionRequirement/web/ActionRequirement.test.js +36 -0
- package/esm/AutoComplete/web/AutoComplete.test.js +139 -0
- package/esm/Avatar/index.native.js +4 -0
- package/esm/Avatar/native/Avatar.js +96 -0
- package/esm/Avatar/native/Avatar.test.js +46 -0
- package/esm/Avatar/native/AvatarCircle.js +24 -0
- package/esm/Avatar/web/Avatar.test.js +63 -0
- package/esm/Banner/index.native.js +2 -0
- package/esm/Banner/native/Banner.js +128 -0
- package/esm/Banner/native/Banner.test.js +103 -0
- package/esm/Banner/native/index.js +2 -0
- package/esm/Banner/web/Banner.test.js +109 -0
- package/esm/BottomSheet/web/BottomSheet.test.js +48 -0
- package/esm/Box/index.native.js +2 -0
- package/esm/Box/native/Box.js +4 -0
- package/esm/Box/native/Box.test.js +16 -0
- package/esm/Box/native/index.js +2 -0
- package/esm/Box/web/Box.test.js +16 -0
- package/esm/Button/index.native.js +8 -0
- package/esm/Button/native/Button.js +110 -0
- package/esm/Button/native/Button.test.js +475 -0
- package/esm/Button/native/Icon.js +82 -0
- package/esm/Button/native/Link.js +35 -0
- package/esm/Button/native/Text.js +74 -0
- package/esm/Button/native/withTouchable.js +63 -0
- package/esm/Button/web/Button.test.js +772 -0
- package/esm/Card/index.native.js +2 -0
- package/esm/Card/native/Card/Actions.js +12 -0
- package/esm/Card/native/Card/Card.js +92 -0
- package/esm/Card/native/Card/Card.test.js +15 -0
- package/esm/Card/native/Card/Content.js +8 -0
- package/esm/Card/native/Card/Header.js +8 -0
- package/esm/Card/native/Card/index.js +8 -0
- package/esm/Card/native/EventCard/EventCard.js +169 -0
- package/esm/Card/native/EventCard/EventCard.test.js +65 -0
- package/esm/Card/native/EventCard/index.js +2 -0
- package/esm/Card/native/GymCard/CheckIn/Avatar.js +17 -0
- package/esm/Card/native/GymCard/CheckIn/CheckIn.js +66 -0
- package/esm/Card/native/GymCard/CheckIn/CheckIn.test.js +39 -0
- package/esm/Card/native/GymCard/CheckIn/Content.js +11 -0
- package/esm/Card/native/GymCard/CheckIn/Header.js +11 -0
- package/esm/Card/native/GymCard/CheckIn/index.js +2 -0
- package/esm/Card/native/GymCard/index.js +5 -0
- package/esm/Card/native/PlanCard/Actions.js +22 -0
- package/esm/Card/native/PlanCard/Content.js +75 -0
- package/esm/Card/native/PlanCard/List.js +73 -0
- package/esm/Card/native/PlanCard/PlanCard.js +51 -0
- package/esm/Card/native/PlanCard/PlanCard.test.js +84 -0
- package/esm/Card/native/PlanCard/Subtitle.js +15 -0
- package/esm/Card/native/PlanCard/Tag.js +34 -0
- package/esm/Card/native/PlanCard/index.js +15 -0
- package/esm/Card/native/index.js +5 -0
- package/esm/Card/web/Card/Card.test.js +14 -0
- package/esm/Card/web/EventCard/EventCard.test.js +27 -0
- package/esm/Card/web/PlanCard/PlanCard.test.js +94 -0
- package/esm/Checkbox/index.native.js +3 -0
- package/esm/Checkbox/native/Checkbox.js +179 -0
- package/esm/Checkbox/native/Checkbox.test.js +115 -0
- package/esm/Checkbox/native/Switch.js +115 -0
- package/esm/Checkbox/native/Switch.test.js +54 -0
- package/esm/Checkbox/native/index.js +3 -0
- package/esm/Checkbox/web/Checkbox.test.js +153 -0
- package/esm/Checkbox/web/Switch.test.js +56 -0
- package/esm/Chips/index.native.js +2 -0
- package/esm/Chips/native/Chips.js +104 -0
- package/esm/Chips/native/Chips.test.js +143 -0
- package/esm/Chips/native/Counter.js +20 -0
- package/esm/Chips/native/index.js +2 -0
- package/esm/Chips/web/Chips.test.js +128 -0
- package/esm/Datepicker/web/Datepicker.test.js +247 -0
- package/esm/Dialog/web/Dialog.js +13 -8
- package/esm/Dialog/web/Dialog.test.js +62 -0
- package/esm/Divider/index.native.js +2 -0
- package/esm/Divider/native/Divider.js +29 -0
- package/esm/Divider/native/Divider.test.js +29 -0
- package/esm/Divider/native/index.js +2 -0
- package/esm/Divider/web/Divider.test.js +29 -0
- package/esm/Drawer/web/Drawer.js +6 -2
- package/esm/Drawer/web/Drawer.test.js +33 -0
- package/esm/Dropdown/index.native.js +2 -0
- package/esm/Dropdown/native/Backdrop.js +93 -0
- package/esm/Dropdown/native/Backdrop.test.js +26 -0
- package/esm/Dropdown/native/Dropdown.js +142 -0
- package/esm/Dropdown/native/Dropdown.test.js +78 -0
- package/esm/Dropdown/native/Options.android.js +66 -0
- package/esm/Dropdown/native/Options.ios.js +71 -0
- package/esm/Dropdown/native/index.js +2 -0
- package/esm/Dropdown/web/Dropdown.test.js +93 -0
- package/esm/Feedback/web/Feedback.test.js +83 -0
- package/esm/Grid/web/Col.test.js +48 -0
- package/esm/Grid/web/Container.test.js +14 -0
- package/esm/Grid/web/Hide.test.js +31 -0
- package/esm/Grid/web/Row.test.js +14 -0
- package/esm/Header/web/Header.test.js +38 -0
- package/esm/Heading/web/Heading.test.js +58 -0
- package/esm/Icon/index.native.js +2 -0
- package/esm/Icon/native/Icon.test.js +47 -0
- package/esm/Icon/native/index.js +2 -0
- package/esm/Icon/web/Icon.test.js +47 -0
- package/esm/Input/index.native.js +6 -0
- package/esm/Input/native/Email.js +15 -0
- package/esm/Input/native/Email.test.js +13 -0
- package/esm/Input/native/Helper.js +62 -0
- package/esm/Input/native/Input.js +234 -0
- package/esm/Input/native/Input.test.js +181 -0
- package/esm/Input/native/Number.js +12 -0
- package/esm/Input/native/Number.test.js +13 -0
- package/esm/Input/native/Password.js +112 -0
- package/esm/Input/native/Password.test.js +125 -0
- package/esm/Input/native/Tel.js +14 -0
- package/esm/Input/native/Tel.test.js +13 -0
- package/esm/Input/native/index.js +6 -0
- package/esm/Input/web/Email.test.js +13 -0
- package/esm/Input/web/Input.test.js +145 -0
- package/esm/Input/web/Number.test.js +13 -0
- package/esm/Input/web/Password.test.js +90 -0
- package/esm/Input/web/Phone.test.js +95 -0
- package/esm/Input/web/Tel.test.js +13 -0
- package/esm/List/index.native.js +3 -0
- package/esm/List/native/List.js +22 -0
- package/esm/List/native/List.test.js +106 -0
- package/esm/List/native/ListItem.js +51 -0
- package/esm/List/native/index.js +3 -0
- package/esm/List/web/List.test.js +62 -0
- package/esm/Menu/web/Menu.test.js +115 -0
- package/esm/Popover/web/Popover.test.js +19 -0
- package/esm/Progress/index.native.js +2 -0
- package/esm/Progress/native/Progress.js +103 -0
- package/esm/Progress/native/Progress.test.js +222 -0
- package/esm/Progress/native/index.js +2 -0
- package/esm/Progress/web/Progress.test.js +222 -0
- package/esm/RadioGroup/index.native.js +4 -0
- package/esm/RadioGroup/native/Button/RadioButton.js +64 -0
- package/esm/RadioGroup/native/Button/RadioButton.test.js +96 -0
- package/esm/RadioGroup/native/Radio/Radio.js +88 -0
- package/esm/RadioGroup/native/Radio/Radio.test.js +112 -0
- package/esm/RadioGroup/native/RadioGroup.js +66 -0
- package/esm/RadioGroup/native/RadioGroup.test.js +50 -0
- package/esm/RadioGroup/native/index.js +4 -0
- package/esm/RadioGroup/web/Button/RadioButton.test.js +121 -0
- package/esm/RadioGroup/web/Radio/Radio.test.js +108 -0
- package/esm/RadioGroup/web/RadioGroup.test.js +83 -0
- package/esm/Rating/index.native.js +2 -0
- package/esm/Rating/native/Rating.js +186 -0
- package/esm/Rating/native/Rating.test.js +121 -0
- package/esm/Rating/native/index.js +2 -0
- package/esm/Rating/web/Rating.test.js +184 -0
- package/esm/Result/index.native.js +8 -0
- package/esm/Result/native/Attendances.js +55 -0
- package/esm/Result/native/Details.js +97 -0
- package/esm/Result/native/Rate.js +35 -0
- package/esm/Result/native/Result.js +86 -0
- package/esm/Result/native/Result.test.js +107 -0
- package/esm/Result/native/ResultButton.js +13 -0
- package/esm/Result/native/Tags.js +41 -0
- package/esm/Result/native/TinyTextIcon.js +18 -0
- package/esm/Result/native/index.js +2 -0
- package/esm/Skeleton/index.native.js +2 -0
- package/esm/Skeleton/native/Skeleton.js +94 -0
- package/esm/Skeleton/native/Skeleton.test.js +78 -0
- package/esm/Skeleton/native/index.js +2 -0
- package/esm/Skeleton/web/Skeleton.test.js +77 -0
- package/esm/Slider/index.native.js +2 -0
- package/esm/Slider/native/Label.js +19 -0
- package/esm/Slider/native/Marker.js +68 -0
- package/esm/Slider/native/Slider.js +156 -0
- package/esm/Slider/native/Slider.test.js +122 -0
- package/esm/Slider/native/Step.js +14 -0
- package/esm/Slider/native/Tooltip.js +90 -0
- package/esm/Slider/web/Slider.test.js +86 -0
- package/esm/Snackbar/index.native.js +2 -0
- package/esm/Snackbar/native/Snackbar.js +199 -0
- package/esm/Snackbar/native/Snackbar.test.js +100 -0
- package/esm/Snackbar/native/SnackbarAnimationWrapper.js +124 -0
- package/esm/Snackbar/native/index.js +2 -0
- package/esm/Snackbar/web/Snackbar.test.js +118 -0
- package/esm/Stepper/index.native.js +3 -0
- package/esm/Stepper/native/Dots.js +45 -0
- package/esm/Stepper/native/Line.js +35 -0
- package/esm/Stepper/native/Step.js +19 -0
- package/esm/Stepper/native/Stepper.js +52 -0
- package/esm/Stepper/native/Stepper.test.js +70 -0
- package/esm/Stepper/native/index.js +3 -0
- package/esm/Stepper/web/Stepper.test.js +67 -0
- package/esm/Tag/index.native.js +4 -0
- package/esm/Tag/native/Informative.js +72 -0
- package/esm/Tag/native/Tag.js +75 -0
- package/esm/Tag/native/Tag.test.js +94 -0
- package/esm/Tag/native/index.js +2 -0
- package/esm/Tag/web/Tag.test.js +79 -0
- package/esm/Text/index.native.js +16 -0
- package/esm/Text/native/Text.js +69 -0
- package/esm/Text/native/Text.test.js +149 -0
- package/esm/Text/native/index.js +2 -0
- package/esm/Text/web/Text.test.js +149 -0
- package/esm/TextArea/index.native.js +2 -0
- package/esm/TextArea/native/TextArea.js +59 -0
- package/esm/TextArea/native/TextArea.test.js +11 -0
- package/esm/TextArea/native/index.js +2 -0
- package/esm/TextArea/web/TextArea.test.js +11 -0
- package/esm/Theme/Provider/index.native.js +2 -0
- package/esm/Theme/Provider/native/index.js +2 -0
- package/esm/Theme/Provider/web/FontLoader.test.js +11 -0
- package/esm/Theme/Provider/web/GlobalStyle.test.js +17 -0
- package/esm/Theme/helpers/themeReader/native/native.test.js +53 -0
- package/esm/Theme/helpers/themeReader/web/web.test.js +41 -0
- package/esm/Theme/index.native.js +5 -0
- package/esm/index.native.js +26 -0
- package/esm/shared/index.native.js +2 -0
- package/package.json +2 -2
|
@@ -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,109 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/react';
|
|
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
|
+
container = _render.container;
|
|
11
|
+
|
|
12
|
+
expect(container).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
|
+
container = _render2.container;
|
|
26
|
+
|
|
27
|
+
expect(container).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
|
+
container = _render3.container;
|
|
35
|
+
|
|
36
|
+
expect(container).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
|
+
container = _render4.container;
|
|
47
|
+
|
|
48
|
+
expect(container).toMatchSnapshot();
|
|
49
|
+
});
|
|
50
|
+
it('should call button action function when the banner button is clicked', function () {
|
|
51
|
+
var onButtonClickMock = 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: onButtonClickMock
|
|
58
|
+
}
|
|
59
|
+
}))),
|
|
60
|
+
getByRole = _render5.getByRole;
|
|
61
|
+
|
|
62
|
+
fireEvent.click(getByRole('button', {
|
|
63
|
+
name: 'Action'
|
|
64
|
+
}));
|
|
65
|
+
expect(onButtonClickMock).toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
it('should match snapshot with two action buttons', function () {
|
|
68
|
+
var _render6 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
|
|
69
|
+
message: "Banner with two action buttons",
|
|
70
|
+
primaryButton: {
|
|
71
|
+
label: 'Primary Action',
|
|
72
|
+
action: function action() {}
|
|
73
|
+
},
|
|
74
|
+
secondaryButton: {
|
|
75
|
+
label: 'Secondary Action',
|
|
76
|
+
action: function action() {}
|
|
77
|
+
}
|
|
78
|
+
}))),
|
|
79
|
+
container = _render6.container;
|
|
80
|
+
|
|
81
|
+
expect(container).toMatchSnapshot();
|
|
82
|
+
});
|
|
83
|
+
it('should call both buttons action function when each banner action button are clicked', function () {
|
|
84
|
+
var onPrimaryButtonClickMock = jest.fn();
|
|
85
|
+
var onSecondaryButtonClickMock = jest.fn();
|
|
86
|
+
|
|
87
|
+
var _render7 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Banner, {
|
|
88
|
+
message: "Banner with button",
|
|
89
|
+
primaryButton: {
|
|
90
|
+
label: 'Primary Action',
|
|
91
|
+
action: onPrimaryButtonClickMock
|
|
92
|
+
},
|
|
93
|
+
secondaryButton: {
|
|
94
|
+
label: 'Secondary Action',
|
|
95
|
+
action: onSecondaryButtonClickMock
|
|
96
|
+
}
|
|
97
|
+
}))),
|
|
98
|
+
getByRole = _render7.getByRole;
|
|
99
|
+
|
|
100
|
+
fireEvent.click(getByRole('button', {
|
|
101
|
+
name: 'Primary Action'
|
|
102
|
+
}));
|
|
103
|
+
expect(onPrimaryButtonClickMock).toHaveBeenCalled();
|
|
104
|
+
fireEvent.click(getByRole('button', {
|
|
105
|
+
name: 'Secondary Action'
|
|
106
|
+
}));
|
|
107
|
+
expect(onSecondaryButtonClickMock).toHaveBeenCalled();
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { screen, render, fireEvent, cleanup } from '@testing-library/react';
|
|
3
|
+
import { ThemeProvider, Button } from '../..';
|
|
4
|
+
import BottomSheet from '.';
|
|
5
|
+
describe('<BottomSheet />', function () {
|
|
6
|
+
afterEach(cleanup);
|
|
7
|
+
it('should match snapshot', function () {
|
|
8
|
+
var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BottomSheet, {
|
|
9
|
+
isOpen: true
|
|
10
|
+
}, /*#__PURE__*/React.createElement(BottomSheet.Header, null, "Title"), /*#__PURE__*/React.createElement(BottomSheet.Content, null, "Subtitle"), /*#__PURE__*/React.createElement(BottomSheet.Footer, null, /*#__PURE__*/React.createElement(Button, {
|
|
11
|
+
secondary: true
|
|
12
|
+
}, "Ok, got it"))))),
|
|
13
|
+
baseElement = _render.baseElement;
|
|
14
|
+
|
|
15
|
+
expect(baseElement).toMatchSnapshot();
|
|
16
|
+
});
|
|
17
|
+
it('should render a minimal bottom sheet', function () {
|
|
18
|
+
var onActionMock = jest.fn();
|
|
19
|
+
render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BottomSheet, {
|
|
20
|
+
isOpen: true
|
|
21
|
+
}, /*#__PURE__*/React.createElement(BottomSheet.Header, null, "Title"), /*#__PURE__*/React.createElement(BottomSheet.Content, null, "Subtitle"), /*#__PURE__*/React.createElement(BottomSheet.Footer, null, /*#__PURE__*/React.createElement(Button, {
|
|
22
|
+
onClick: onActionMock,
|
|
23
|
+
secondary: true
|
|
24
|
+
}, "Ok, got it")))));
|
|
25
|
+
screen.getByText('Title');
|
|
26
|
+
screen.getByText('Subtitle');
|
|
27
|
+
var button = screen.getByRole('button', {
|
|
28
|
+
name: /Ok, got it/i
|
|
29
|
+
});
|
|
30
|
+
fireEvent.click(button);
|
|
31
|
+
expect(onActionMock).toHaveBeenCalledTimes(1);
|
|
32
|
+
});
|
|
33
|
+
it('should hide the close button', function () {
|
|
34
|
+
render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BottomSheet, {
|
|
35
|
+
isOpen: true,
|
|
36
|
+
onClose: function onClose() {}
|
|
37
|
+
}, /*#__PURE__*/React.createElement(BottomSheet.Header, null, "Title"))));
|
|
38
|
+
expect(screen.queryByRole('button')).toBeNull();
|
|
39
|
+
});
|
|
40
|
+
it('should show the close button', function () {
|
|
41
|
+
render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(BottomSheet, {
|
|
42
|
+
isOpen: true,
|
|
43
|
+
hideCloseButton: false,
|
|
44
|
+
onClose: function onClose() {}
|
|
45
|
+
}, /*#__PURE__*/React.createElement(BottomSheet.Header, null, "Title"))));
|
|
46
|
+
expect(screen.getByRole('button')).not.toBeNull();
|
|
47
|
+
});
|
|
48
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render } from '@testing-library/react-native';
|
|
3
|
+
import { ThemeProvider, Box, Text } from '../..';
|
|
4
|
+
describe('<Box />', function () {
|
|
5
|
+
it('should match snapshot', function () {
|
|
6
|
+
var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Box, {
|
|
7
|
+
b: "small",
|
|
8
|
+
p: "small",
|
|
9
|
+
borderRadius: "small",
|
|
10
|
+
color: "feedback.success.dark"
|
|
11
|
+
}, /*#__PURE__*/React.createElement(Text, null, "Making wellbeing universal")))),
|
|
12
|
+
toJSON = _render.toJSON;
|
|
13
|
+
|
|
14
|
+
expect(toJSON()).toMatchSnapshot();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render } from '@testing-library/react';
|
|
3
|
+
import { ThemeProvider, Box } from '../..';
|
|
4
|
+
describe('<Box />', function () {
|
|
5
|
+
it('should match snapshot', function () {
|
|
6
|
+
var _render = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Box, {
|
|
7
|
+
b: "small",
|
|
8
|
+
p: "small",
|
|
9
|
+
borderRadius: "small",
|
|
10
|
+
color: "feedback.success.dark"
|
|
11
|
+
}, "Making wellbeing universal"))),
|
|
12
|
+
container = _render.container;
|
|
13
|
+
|
|
14
|
+
expect(container).toMatchSnapshot();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import Button from './native/Button';
|
|
2
|
+
import ButtonText from './native/Text';
|
|
3
|
+
import ButtonLink from './native/Link';
|
|
4
|
+
import ButtonIcon from './native/Icon';
|
|
5
|
+
Button.Text = ButtonText;
|
|
6
|
+
Button.Link = ButtonLink;
|
|
7
|
+
Button.Icon = ButtonIcon;
|
|
8
|
+
export default Button;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
var _excluded = ["children", "full", "disabled", "small", "pressed", "inverted", "secondary", "icon", "theme"];
|
|
2
|
+
|
|
3
|
+
var _templateObject, _templateObject2;
|
|
4
|
+
|
|
5
|
+
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); }
|
|
6
|
+
|
|
7
|
+
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; }
|
|
8
|
+
|
|
9
|
+
function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
|
|
10
|
+
|
|
11
|
+
import React, { forwardRef } from 'react';
|
|
12
|
+
import styled, { withTheme } from 'styled-components';
|
|
13
|
+
import { node, oneOfType, func, bool } from 'prop-types';
|
|
14
|
+
import withTouchable from './withTouchable';
|
|
15
|
+
import Text from '../../Text';
|
|
16
|
+
var Label = styled(Text.Medium)(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n text-align: center;\n ", "\n"])), function (_ref) {
|
|
17
|
+
var small = _ref.small,
|
|
18
|
+
color = _ref.color,
|
|
19
|
+
button = _ref.theme.yoga.components.button;
|
|
20
|
+
return "\n font-size: " + (small ? button.font.size.small : button.font.size["default"]) + "px;\n color: " + color + ";\n ";
|
|
21
|
+
});
|
|
22
|
+
var ButtonContainer = styled.View(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref2) {
|
|
23
|
+
var pressed = _ref2.pressed,
|
|
24
|
+
disabled = _ref2.disabled,
|
|
25
|
+
full = _ref2.full,
|
|
26
|
+
small = _ref2.small,
|
|
27
|
+
inverted = _ref2.inverted,
|
|
28
|
+
secondary = _ref2.secondary,
|
|
29
|
+
button = _ref2.theme.yoga.components.button;
|
|
30
|
+
var state = secondary ? 'secondary' : 'primary';
|
|
31
|
+
return "\n flex-direction: row;\n align-items: center;\n justify-content: center;\n\n background-color: " + button.types.contained.backgroundColor[state]["default"] + ";\n border-radius: " + button.border.radius + "px;\n height: " + (small ? button.height.small : button.height["default"]) + ";\n justify-content: center;\n padding-left: " + (small ? button.padding.small.left : button.padding["default"].left) + "px;\n padding-right: " + (small ? button.padding.small.right : button.padding["default"].right) + "px;\n " + (full ? 'width: 100%;' : '') + "\n\n " + (!disabled && pressed ? "\n background-color: " + button.types.contained.backgroundColor[state].pressed + ";\n " : '') + "\n\n " + (disabled ? "\n background-color: " + button.types.contained.backgroundColor.disabled + ";\n " : '') + "\n\n " + (inverted && !disabled ? "\n background-color: " + button.types.contained.font["default"].color + ";\n " : '') + "\n ";
|
|
32
|
+
});
|
|
33
|
+
/** Buttons make common actions more obvious and help users more easily perform
|
|
34
|
+
them. Buttons use labels and sometimes icons to communicate the action that will
|
|
35
|
+
occur when the user touches them. */
|
|
36
|
+
|
|
37
|
+
var Button = /*#__PURE__*/forwardRef(function (_ref3, ref) {
|
|
38
|
+
var children = _ref3.children,
|
|
39
|
+
full = _ref3.full,
|
|
40
|
+
disabled = _ref3.disabled,
|
|
41
|
+
small = _ref3.small,
|
|
42
|
+
pressed = _ref3.pressed,
|
|
43
|
+
inverted = _ref3.inverted,
|
|
44
|
+
secondary = _ref3.secondary,
|
|
45
|
+
Icon = _ref3.icon,
|
|
46
|
+
button = _ref3.theme.yoga.components.button,
|
|
47
|
+
rest = _objectWithoutPropertiesLoose(_ref3, _excluded);
|
|
48
|
+
|
|
49
|
+
var state = secondary ? 'secondary' : 'primary';
|
|
50
|
+
var textColor = button.types.contained.font["default"].color;
|
|
51
|
+
|
|
52
|
+
if (disabled) {
|
|
53
|
+
textColor = button.types.contained.font.disabled.color;
|
|
54
|
+
} else if (inverted) {
|
|
55
|
+
textColor = button.types.contained.backgroundColor[state]["default"];
|
|
56
|
+
|
|
57
|
+
if (pressed) {
|
|
58
|
+
textColor = button.types.contained.backgroundColor[state].pressed;
|
|
59
|
+
}
|
|
60
|
+
} else if (pressed) {
|
|
61
|
+
textColor = button.types.contained.font.pressed.color;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return /*#__PURE__*/React.createElement(ButtonContainer, _extends({}, rest, {
|
|
65
|
+
full: full,
|
|
66
|
+
pressed: pressed,
|
|
67
|
+
disabled: disabled,
|
|
68
|
+
small: small,
|
|
69
|
+
inverted: inverted,
|
|
70
|
+
secondary: secondary,
|
|
71
|
+
ref: ref
|
|
72
|
+
}), Icon && /*#__PURE__*/React.createElement(Icon, {
|
|
73
|
+
width: small ? button.icon.size.small : button.icon.size["default"],
|
|
74
|
+
height: small ? button.icon.size.small : button.icon.size["default"],
|
|
75
|
+
fill: textColor,
|
|
76
|
+
style: {
|
|
77
|
+
marginRight: button.icon.margin.right
|
|
78
|
+
}
|
|
79
|
+
}), /*#__PURE__*/React.createElement(Label, {
|
|
80
|
+
disabled: disabled,
|
|
81
|
+
pressed: pressed,
|
|
82
|
+
inverted: inverted,
|
|
83
|
+
small: small,
|
|
84
|
+
color: textColor
|
|
85
|
+
}, children));
|
|
86
|
+
});
|
|
87
|
+
Button.propTypes = {
|
|
88
|
+
children: node,
|
|
89
|
+
full: bool,
|
|
90
|
+
disabled: bool,
|
|
91
|
+
small: bool,
|
|
92
|
+
pressed: bool,
|
|
93
|
+
inverted: bool,
|
|
94
|
+
secondary: bool,
|
|
95
|
+
|
|
96
|
+
/** an Icon from yoga-icons package */
|
|
97
|
+
icon: oneOfType([bool, func])
|
|
98
|
+
};
|
|
99
|
+
Button.defaultProps = {
|
|
100
|
+
children: 'Button',
|
|
101
|
+
full: false,
|
|
102
|
+
disabled: false,
|
|
103
|
+
small: false,
|
|
104
|
+
pressed: false,
|
|
105
|
+
inverted: false,
|
|
106
|
+
secondary: false,
|
|
107
|
+
icon: undefined
|
|
108
|
+
};
|
|
109
|
+
var ButtonWithTouchable = withTouchable(withTheme(Button));
|
|
110
|
+
export { Label, ButtonContainer, ButtonWithTouchable as default };
|