@gympass/yoga 7.70.2 → 7.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/AutoComplete/web/AutoComplete.js +12 -6
- package/cjs/Dropdown/web/Dropdown.js +2 -1
- package/cjs/Input/web/Helper.js +14 -6
- package/cjs/Input/web/Input.js +38 -7
- package/esm/AutoComplete/web/AutoComplete.js +12 -6
- package/esm/AutoComplete/web/AutoComplete.test.js +25 -12
- package/esm/Dropdown/web/Dropdown.js +2 -1
- package/esm/Input/web/Helper.js +14 -6
- package/esm/Input/web/Input.js +38 -7
- package/esm/Input/web/Input.test.js +32 -4
- package/package.json +2 -2
|
@@ -15,7 +15,7 @@ var _yogaIcons = require("@gympass/yoga-icons");
|
|
|
15
15
|
|
|
16
16
|
var _Input = _interopRequireDefault(require("../../Input/web/Input"));
|
|
17
17
|
|
|
18
|
-
var _excluded = ["className", "style", "full", "options", "onChange", "onClean", "onSelect", "value", "error", "openSuggestionsAriaLabel", "closeSuggestionsAriaLabel"];
|
|
18
|
+
var _excluded = ["className", "style", "full", "options", "onChange", "onClean", "onSelect", "value", "error", "openSuggestionsAriaLabel", "closeSuggestionsAriaLabel", "shouldFilterOptions"];
|
|
19
19
|
|
|
20
20
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
21
21
|
|
|
@@ -78,6 +78,7 @@ var AutoComplete = /*#__PURE__*/_react["default"].forwardRef(function (_ref6, re
|
|
|
78
78
|
error = _ref6.error,
|
|
79
79
|
openSuggestionsAriaLabel = _ref6.openSuggestionsAriaLabel,
|
|
80
80
|
closeSuggestionsAriaLabel = _ref6.closeSuggestionsAriaLabel,
|
|
81
|
+
shouldFilterOptions = _ref6.shouldFilterOptions,
|
|
81
82
|
props = _objectWithoutPropertiesLoose(_ref6, _excluded);
|
|
82
83
|
|
|
83
84
|
var _useState = (0, _react.useState)(value),
|
|
@@ -136,11 +137,11 @@ var AutoComplete = /*#__PURE__*/_react["default"].forwardRef(function (_ref6, re
|
|
|
136
137
|
openMenu = _ref8.openMenu,
|
|
137
138
|
inputValue = _ref8.inputValue;
|
|
138
139
|
var reg = new RegExp("(" + escapeRegExp(inputValue || '').trim() + ")", 'gi');
|
|
139
|
-
var suggestionList = options.filter(function (option) {
|
|
140
|
+
var suggestionList = shouldFilterOptions ? options.filter(function (option) {
|
|
140
141
|
return option.match(reg);
|
|
141
142
|
}).sort(function (first, second) {
|
|
142
143
|
return first.toLowerCase().indexOf(inputValue) < second.toLowerCase().indexOf(inputValue) ? -1 : 1;
|
|
143
|
-
});
|
|
144
|
+
}) : options;
|
|
144
145
|
|
|
145
146
|
if (!!inputValue && isOpen) {
|
|
146
147
|
setIsSuggestionsOpen(true);
|
|
@@ -175,7 +176,8 @@ var AutoComplete = /*#__PURE__*/_react["default"].forwardRef(function (_ref6, re
|
|
|
175
176
|
onClick: handleOpenSuggestions,
|
|
176
177
|
"aria-label": openSuggestionsAriaLabel
|
|
177
178
|
}),
|
|
178
|
-
ref: inputRef
|
|
179
|
+
ref: inputRef,
|
|
180
|
+
includeAriaAttributes: false
|
|
179
181
|
})), isSuggestionsOpen && /*#__PURE__*/_react["default"].createElement(List, _extends({}, getMenuProps(), {
|
|
180
182
|
full: full,
|
|
181
183
|
error: !!error
|
|
@@ -217,7 +219,10 @@ AutoComplete.propTypes = {
|
|
|
217
219
|
openSuggestionsAriaLabel: _propTypes.string,
|
|
218
220
|
|
|
219
221
|
/** an aria label for the close suggestions icon */
|
|
220
|
-
closeSuggestionsAriaLabel: _propTypes.string
|
|
222
|
+
closeSuggestionsAriaLabel: _propTypes.string,
|
|
223
|
+
|
|
224
|
+
/** flag to enable options filtering */
|
|
225
|
+
shouldFilterOptions: _propTypes.bool
|
|
221
226
|
};
|
|
222
227
|
AutoComplete.defaultProps = {
|
|
223
228
|
className: undefined,
|
|
@@ -230,7 +235,8 @@ AutoComplete.defaultProps = {
|
|
|
230
235
|
value: undefined,
|
|
231
236
|
error: undefined,
|
|
232
237
|
openSuggestionsAriaLabel: 'Open suggestions',
|
|
233
|
-
closeSuggestionsAriaLabel: 'Close suggestions'
|
|
238
|
+
closeSuggestionsAriaLabel: 'Close suggestions',
|
|
239
|
+
shouldFilterOptions: true
|
|
234
240
|
};
|
|
235
241
|
var _default = AutoComplete;
|
|
236
242
|
exports["default"] = _default;
|
|
@@ -155,7 +155,8 @@ var Dropdown = /*#__PURE__*/_react["default"].forwardRef(function (_ref10, ref)
|
|
|
155
155
|
isOpen: isOpen,
|
|
156
156
|
label: label,
|
|
157
157
|
full: full,
|
|
158
|
-
ref: inputRef
|
|
158
|
+
ref: inputRef,
|
|
159
|
+
includeAriaAttributes: false
|
|
159
160
|
}, getInputProps())), /*#__PURE__*/_react["default"].createElement(Button, _extends({
|
|
160
161
|
isOpen: isOpen,
|
|
161
162
|
disabled: disabled
|
package/cjs/Input/web/Helper.js
CHANGED
|
@@ -15,6 +15,8 @@ var _templateObject, _templateObject2;
|
|
|
15
15
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
17
|
|
|
18
|
+
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); }
|
|
19
|
+
|
|
18
20
|
function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
|
|
19
21
|
|
|
20
22
|
var Wrapper = _styledComponents["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n display: flex;\n justify-content: space-between;\n ", "\n"])), function (_ref) {
|
|
@@ -39,13 +41,17 @@ var Helper = function Helper(_ref3) {
|
|
|
39
41
|
helper = _ref3.helper,
|
|
40
42
|
maxLength = _ref3.maxLength,
|
|
41
43
|
length = _ref3.length,
|
|
42
|
-
hideMaxLength = _ref3.hideMaxLength
|
|
44
|
+
hideMaxLength = _ref3.hideMaxLength,
|
|
45
|
+
a11yId = _ref3.a11yId;
|
|
43
46
|
return /*#__PURE__*/_react["default"].createElement(Wrapper, {
|
|
44
47
|
disabled: disabled,
|
|
45
48
|
error: error
|
|
46
|
-
}, (error || helper) && /*#__PURE__*/_react["default"].createElement(Info, {
|
|
47
|
-
as: "span"
|
|
48
|
-
|
|
49
|
+
}, (error || helper) && /*#__PURE__*/_react["default"].createElement(Info, _extends({
|
|
50
|
+
as: "span",
|
|
51
|
+
"aria-live": "polite"
|
|
52
|
+
}, a11yId && {
|
|
53
|
+
id: a11yId
|
|
54
|
+
}), error || helper), maxLength && !hideMaxLength && /*#__PURE__*/_react["default"].createElement(Info, {
|
|
49
55
|
as: "span"
|
|
50
56
|
}, length, "/", maxLength));
|
|
51
57
|
};
|
|
@@ -56,7 +62,8 @@ Helper.propTypes = {
|
|
|
56
62
|
helper: _propTypes.string,
|
|
57
63
|
maxLength: _propTypes.number,
|
|
58
64
|
length: _propTypes.number,
|
|
59
|
-
hideMaxLength: _propTypes.bool
|
|
65
|
+
hideMaxLength: _propTypes.bool,
|
|
66
|
+
a11yId: _propTypes.string
|
|
60
67
|
};
|
|
61
68
|
Helper.defaultProps = {
|
|
62
69
|
disabled: undefined,
|
|
@@ -64,7 +71,8 @@ Helper.defaultProps = {
|
|
|
64
71
|
helper: undefined,
|
|
65
72
|
maxLength: undefined,
|
|
66
73
|
length: undefined,
|
|
67
|
-
hideMaxLength: undefined
|
|
74
|
+
hideMaxLength: undefined,
|
|
75
|
+
a11yId: undefined
|
|
68
76
|
};
|
|
69
77
|
var _default = Helper;
|
|
70
78
|
exports["default"] = _default;
|
package/cjs/Input/web/Input.js
CHANGED
|
@@ -23,7 +23,7 @@ var _Legend = _interopRequireDefault(require("./Legend"));
|
|
|
23
23
|
|
|
24
24
|
var _Label = _interopRequireDefault(require("./Label"));
|
|
25
25
|
|
|
26
|
-
var _excluded = ["cleanable", "children", "disabled", "error", "full", "helper", "label", "maxLength", "readOnly", "style", "value", "onChange", "onClean", "hideMaxLength", "rightIcon"];
|
|
26
|
+
var _excluded = ["cleanable", "children", "disabled", "error", "full", "helper", "label", "maxLength", "readOnly", "style", "value", "onChange", "onClean", "hideMaxLength", "rightIcon", "a11yId", "includeAriaAttributes"];
|
|
27
27
|
|
|
28
28
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
29
29
|
|
|
@@ -71,6 +71,8 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function (_ref3, ref) {
|
|
|
71
71
|
onClean = _ref3.onClean,
|
|
72
72
|
hideMaxLength = _ref3.hideMaxLength,
|
|
73
73
|
rightIcon = _ref3.rightIcon,
|
|
74
|
+
a11yId = _ref3.a11yId,
|
|
75
|
+
includeAriaAttributes = _ref3.includeAriaAttributes,
|
|
74
76
|
props = _objectWithoutPropertiesLoose(_ref3, _excluded);
|
|
75
77
|
|
|
76
78
|
var inputRef = ref || (0, _react.useRef)(null);
|
|
@@ -83,6 +85,24 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function (_ref3, ref) {
|
|
|
83
85
|
}
|
|
84
86
|
};
|
|
85
87
|
|
|
88
|
+
var hasHelper = helper || maxLength || error;
|
|
89
|
+
var helperA11yId = includeAriaAttributes && a11yId && a11yId + "-helper";
|
|
90
|
+
var labelA11yId = includeAriaAttributes && a11yId && a11yId + "-label";
|
|
91
|
+
var a11yFieldProps;
|
|
92
|
+
|
|
93
|
+
if (includeAriaAttributes) {
|
|
94
|
+
a11yFieldProps = a11yId ? _extends({}, hasHelper && {
|
|
95
|
+
'aria-describedby': helperA11yId
|
|
96
|
+
}, label && {
|
|
97
|
+
'aria-labelledby': labelA11yId
|
|
98
|
+
}) : _extends({}, label && {
|
|
99
|
+
'aria-label': label
|
|
100
|
+
});
|
|
101
|
+
a11yFieldProps['aria-invalid'] = !!error;
|
|
102
|
+
} else {
|
|
103
|
+
a11yFieldProps = {};
|
|
104
|
+
}
|
|
105
|
+
|
|
86
106
|
return /*#__PURE__*/_react["default"].createElement(Control, {
|
|
87
107
|
full: full
|
|
88
108
|
}, /*#__PURE__*/_react["default"].createElement(_Fieldset["default"], {
|
|
@@ -103,10 +123,12 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function (_ref3, ref) {
|
|
|
103
123
|
ref: inputRef,
|
|
104
124
|
value: value,
|
|
105
125
|
onChange: onChange
|
|
106
|
-
})) : children, /*#__PURE__*/_react["default"].createElement(_Label["default"], {
|
|
126
|
+
}, a11yFieldProps)) : children, /*#__PURE__*/_react["default"].createElement(_Label["default"], _extends({
|
|
107
127
|
error: error,
|
|
108
128
|
disabled: disabled
|
|
109
|
-
},
|
|
129
|
+
}, labelA11yId && {
|
|
130
|
+
id: labelA11yId
|
|
131
|
+
}), label), label && /*#__PURE__*/_react["default"].createElement(_Legend["default"], null, label), cleanable && !readOnly && value && /*#__PURE__*/_react["default"].createElement(IconWrapper, {
|
|
110
132
|
tabIndex: 0,
|
|
111
133
|
disabled: disabled,
|
|
112
134
|
onClick: cleanField,
|
|
@@ -123,13 +145,14 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function (_ref3, ref) {
|
|
|
123
145
|
width: 20,
|
|
124
146
|
height: 20,
|
|
125
147
|
role: "button"
|
|
126
|
-
}, rightIcon)),
|
|
148
|
+
}, rightIcon)), hasHelper && /*#__PURE__*/_react["default"].createElement(_Helper["default"], {
|
|
127
149
|
error: error,
|
|
128
150
|
helper: helper,
|
|
129
151
|
maxLength: maxLength,
|
|
130
152
|
length: value.length,
|
|
131
153
|
disabled: disabled,
|
|
132
|
-
hideMaxLength: hideMaxLength
|
|
154
|
+
hideMaxLength: hideMaxLength,
|
|
155
|
+
a11yId: helperA11yId
|
|
133
156
|
}));
|
|
134
157
|
});
|
|
135
158
|
|
|
@@ -162,7 +185,13 @@ Input.propTypes = {
|
|
|
162
185
|
/** when max length helper is unnecessary to appear */
|
|
163
186
|
hideMaxLength: _propTypes.bool,
|
|
164
187
|
placeholder: _propTypes.string,
|
|
165
|
-
rightIcon: _propTypes.node
|
|
188
|
+
rightIcon: _propTypes.node,
|
|
189
|
+
|
|
190
|
+
/** a unique prefix to generate HTML IDs to be used for aria-labelledby and aria-describedby */
|
|
191
|
+
a11yId: _propTypes.string,
|
|
192
|
+
|
|
193
|
+
/** useful for components that extend the Input component and have their own ARIA attributes implementation (e.g. Dropdown) */
|
|
194
|
+
includeAriaAttributes: _propTypes.bool
|
|
166
195
|
};
|
|
167
196
|
Input.defaultProps = {
|
|
168
197
|
className: undefined,
|
|
@@ -181,7 +210,9 @@ Input.defaultProps = {
|
|
|
181
210
|
onClean: function onClean() {},
|
|
182
211
|
hideMaxLength: false,
|
|
183
212
|
placeholder: undefined,
|
|
184
|
-
rightIcon: undefined
|
|
213
|
+
rightIcon: undefined,
|
|
214
|
+
a11yId: undefined,
|
|
215
|
+
includeAriaAttributes: true
|
|
185
216
|
};
|
|
186
217
|
var _default = Input;
|
|
187
218
|
exports["default"] = _default;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _excluded = ["className", "style", "full", "options", "onChange", "onClean", "onSelect", "value", "error", "openSuggestionsAriaLabel", "closeSuggestionsAriaLabel"];
|
|
1
|
+
var _excluded = ["className", "style", "full", "options", "onChange", "onClean", "onSelect", "value", "error", "openSuggestionsAriaLabel", "closeSuggestionsAriaLabel", "shouldFilterOptions"];
|
|
2
2
|
|
|
3
3
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
|
|
4
4
|
|
|
@@ -59,6 +59,7 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (_ref6, ref) {
|
|
|
59
59
|
error = _ref6.error,
|
|
60
60
|
openSuggestionsAriaLabel = _ref6.openSuggestionsAriaLabel,
|
|
61
61
|
closeSuggestionsAriaLabel = _ref6.closeSuggestionsAriaLabel,
|
|
62
|
+
shouldFilterOptions = _ref6.shouldFilterOptions,
|
|
62
63
|
props = _objectWithoutPropertiesLoose(_ref6, _excluded);
|
|
63
64
|
|
|
64
65
|
var _useState = useState(value),
|
|
@@ -117,11 +118,11 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (_ref6, ref) {
|
|
|
117
118
|
openMenu = _ref8.openMenu,
|
|
118
119
|
inputValue = _ref8.inputValue;
|
|
119
120
|
var reg = new RegExp("(" + escapeRegExp(inputValue || '').trim() + ")", 'gi');
|
|
120
|
-
var suggestionList = options.filter(function (option) {
|
|
121
|
+
var suggestionList = shouldFilterOptions ? options.filter(function (option) {
|
|
121
122
|
return option.match(reg);
|
|
122
123
|
}).sort(function (first, second) {
|
|
123
124
|
return first.toLowerCase().indexOf(inputValue) < second.toLowerCase().indexOf(inputValue) ? -1 : 1;
|
|
124
|
-
});
|
|
125
|
+
}) : options;
|
|
125
126
|
|
|
126
127
|
if (!!inputValue && isOpen) {
|
|
127
128
|
setIsSuggestionsOpen(true);
|
|
@@ -156,7 +157,8 @@ var AutoComplete = /*#__PURE__*/React.forwardRef(function (_ref6, ref) {
|
|
|
156
157
|
onClick: handleOpenSuggestions,
|
|
157
158
|
"aria-label": openSuggestionsAriaLabel
|
|
158
159
|
}),
|
|
159
|
-
ref: inputRef
|
|
160
|
+
ref: inputRef,
|
|
161
|
+
includeAriaAttributes: false
|
|
160
162
|
})), isSuggestionsOpen && /*#__PURE__*/React.createElement(List, _extends({}, getMenuProps(), {
|
|
161
163
|
full: full,
|
|
162
164
|
error: !!error
|
|
@@ -197,7 +199,10 @@ AutoComplete.propTypes = {
|
|
|
197
199
|
openSuggestionsAriaLabel: string,
|
|
198
200
|
|
|
199
201
|
/** an aria label for the close suggestions icon */
|
|
200
|
-
closeSuggestionsAriaLabel: string
|
|
202
|
+
closeSuggestionsAriaLabel: string,
|
|
203
|
+
|
|
204
|
+
/** flag to enable options filtering */
|
|
205
|
+
shouldFilterOptions: bool
|
|
201
206
|
};
|
|
202
207
|
AutoComplete.defaultProps = {
|
|
203
208
|
className: undefined,
|
|
@@ -210,6 +215,7 @@ AutoComplete.defaultProps = {
|
|
|
210
215
|
value: undefined,
|
|
211
216
|
error: undefined,
|
|
212
217
|
openSuggestionsAriaLabel: 'Open suggestions',
|
|
213
|
-
closeSuggestionsAriaLabel: 'Close suggestions'
|
|
218
|
+
closeSuggestionsAriaLabel: 'Close suggestions',
|
|
219
|
+
shouldFilterOptions: true
|
|
214
220
|
};
|
|
215
221
|
export default AutoComplete;
|
|
@@ -53,14 +53,27 @@ describe('<AutoComplete />', function () {
|
|
|
53
53
|
fireEvent.focus(getByDisplayValue('secon'));
|
|
54
54
|
expect(container.querySelector('ul').firstChild.textContent).toBe('second');
|
|
55
55
|
});
|
|
56
|
-
it('should
|
|
56
|
+
it('should not filter the options', function () {
|
|
57
57
|
var _render6 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
|
|
58
58
|
value: "secon",
|
|
59
|
-
options: ['first', 'second', 'third']
|
|
59
|
+
options: ['first', 'second', 'third'],
|
|
60
|
+
shouldFilterOptions: false
|
|
60
61
|
}))),
|
|
61
62
|
container = _render6.container,
|
|
62
|
-
getByDisplayValue = _render6.getByDisplayValue
|
|
63
|
-
|
|
63
|
+
getByDisplayValue = _render6.getByDisplayValue;
|
|
64
|
+
|
|
65
|
+
fireEvent.focus(getByDisplayValue('secon'));
|
|
66
|
+
expect(container.querySelector('ul').firstChild.textContent).toBe('first');
|
|
67
|
+
expect(container.querySelector('ul').childNodes.length).toBe(3);
|
|
68
|
+
});
|
|
69
|
+
it('should close options list when clean button is clicked', function () {
|
|
70
|
+
var _render7 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
|
|
71
|
+
value: "secon",
|
|
72
|
+
options: ['first', 'second', 'third']
|
|
73
|
+
}))),
|
|
74
|
+
container = _render7.container,
|
|
75
|
+
getByDisplayValue = _render7.getByDisplayValue,
|
|
76
|
+
getByRole = _render7.getByRole;
|
|
64
77
|
|
|
65
78
|
fireEvent.focus(getByDisplayValue('secon'));
|
|
66
79
|
fireEvent.click(getByRole('button', {
|
|
@@ -75,12 +88,12 @@ describe('<AutoComplete />', function () {
|
|
|
75
88
|
var onCleanMock = jest.fn();
|
|
76
89
|
var onSelectMock = jest.fn();
|
|
77
90
|
|
|
78
|
-
var
|
|
91
|
+
var _render8 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
|
|
79
92
|
value: "New",
|
|
80
93
|
options: ['New York'],
|
|
81
94
|
onChange: onChangeMock
|
|
82
95
|
}))),
|
|
83
|
-
getByDisplayValue =
|
|
96
|
+
getByDisplayValue = _render8.getByDisplayValue;
|
|
84
97
|
|
|
85
98
|
fireEvent.change(getByDisplayValue('New'), {
|
|
86
99
|
target: {
|
|
@@ -96,15 +109,15 @@ describe('<AutoComplete />', function () {
|
|
|
96
109
|
var onSelectMock = jest.fn();
|
|
97
110
|
var onChangeMock = jest.fn();
|
|
98
111
|
|
|
99
|
-
var
|
|
112
|
+
var _render9 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
|
|
100
113
|
value: "New",
|
|
101
114
|
options: ['New York'],
|
|
102
115
|
onClean: onCleanMock,
|
|
103
116
|
onSelect: onSelectMock,
|
|
104
117
|
onChange: onChangeMock
|
|
105
118
|
}))),
|
|
106
|
-
getByDisplayValue =
|
|
107
|
-
getByRole =
|
|
119
|
+
getByDisplayValue = _render9.getByDisplayValue,
|
|
120
|
+
getByRole = _render9.getByRole;
|
|
108
121
|
|
|
109
122
|
fireEvent.focus(getByDisplayValue('New'));
|
|
110
123
|
fireEvent.click(getByRole('button', {
|
|
@@ -119,15 +132,15 @@ describe('<AutoComplete />', function () {
|
|
|
119
132
|
var onCleanMock = jest.fn();
|
|
120
133
|
var onChangeMock = jest.fn();
|
|
121
134
|
|
|
122
|
-
var
|
|
135
|
+
var _render10 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(AutoComplete, {
|
|
123
136
|
value: "New",
|
|
124
137
|
options: ['New York'],
|
|
125
138
|
onSelect: onSelectMock,
|
|
126
139
|
onClean: onCleanMock,
|
|
127
140
|
onChange: onChangeMock
|
|
128
141
|
}))),
|
|
129
|
-
getByDisplayValue =
|
|
130
|
-
getByRole =
|
|
142
|
+
getByDisplayValue = _render10.getByDisplayValue,
|
|
143
|
+
getByRole = _render10.getByRole;
|
|
131
144
|
|
|
132
145
|
fireEvent.focus(getByDisplayValue('New'));
|
|
133
146
|
fireEvent.click(getByRole('option'));
|
|
@@ -129,7 +129,8 @@ var Dropdown = /*#__PURE__*/React.forwardRef(function (_ref10, ref) {
|
|
|
129
129
|
isOpen: isOpen,
|
|
130
130
|
label: label,
|
|
131
131
|
full: full,
|
|
132
|
-
ref: inputRef
|
|
132
|
+
ref: inputRef,
|
|
133
|
+
includeAriaAttributes: false
|
|
133
134
|
}, getInputProps())), /*#__PURE__*/React.createElement(Button, _extends({
|
|
134
135
|
isOpen: isOpen,
|
|
135
136
|
disabled: disabled
|
package/esm/Input/web/Helper.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
var _templateObject, _templateObject2;
|
|
2
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
|
+
|
|
3
5
|
function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
|
|
4
6
|
|
|
5
7
|
import React from 'react';
|
|
@@ -26,13 +28,17 @@ var Helper = function Helper(_ref3) {
|
|
|
26
28
|
helper = _ref3.helper,
|
|
27
29
|
maxLength = _ref3.maxLength,
|
|
28
30
|
length = _ref3.length,
|
|
29
|
-
hideMaxLength = _ref3.hideMaxLength
|
|
31
|
+
hideMaxLength = _ref3.hideMaxLength,
|
|
32
|
+
a11yId = _ref3.a11yId;
|
|
30
33
|
return /*#__PURE__*/React.createElement(Wrapper, {
|
|
31
34
|
disabled: disabled,
|
|
32
35
|
error: error
|
|
33
|
-
}, (error || helper) && /*#__PURE__*/React.createElement(Info, {
|
|
34
|
-
as: "span"
|
|
35
|
-
|
|
36
|
+
}, (error || helper) && /*#__PURE__*/React.createElement(Info, _extends({
|
|
37
|
+
as: "span",
|
|
38
|
+
"aria-live": "polite"
|
|
39
|
+
}, a11yId && {
|
|
40
|
+
id: a11yId
|
|
41
|
+
}), error || helper), maxLength && !hideMaxLength && /*#__PURE__*/React.createElement(Info, {
|
|
36
42
|
as: "span"
|
|
37
43
|
}, length, "/", maxLength));
|
|
38
44
|
};
|
|
@@ -43,7 +49,8 @@ Helper.propTypes = {
|
|
|
43
49
|
helper: string,
|
|
44
50
|
maxLength: number,
|
|
45
51
|
length: number,
|
|
46
|
-
hideMaxLength: bool
|
|
52
|
+
hideMaxLength: bool,
|
|
53
|
+
a11yId: string
|
|
47
54
|
};
|
|
48
55
|
Helper.defaultProps = {
|
|
49
56
|
disabled: undefined,
|
|
@@ -51,6 +58,7 @@ Helper.defaultProps = {
|
|
|
51
58
|
helper: undefined,
|
|
52
59
|
maxLength: undefined,
|
|
53
60
|
length: undefined,
|
|
54
|
-
hideMaxLength: undefined
|
|
61
|
+
hideMaxLength: undefined,
|
|
62
|
+
a11yId: undefined
|
|
55
63
|
};
|
|
56
64
|
export default Helper;
|
package/esm/Input/web/Input.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var _excluded = ["cleanable", "children", "disabled", "error", "full", "helper", "label", "maxLength", "readOnly", "style", "value", "onChange", "onClean", "hideMaxLength", "rightIcon"];
|
|
1
|
+
var _excluded = ["cleanable", "children", "disabled", "error", "full", "helper", "label", "maxLength", "readOnly", "style", "value", "onChange", "onClean", "hideMaxLength", "rightIcon", "a11yId", "includeAriaAttributes"];
|
|
2
2
|
|
|
3
3
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4;
|
|
4
4
|
|
|
@@ -48,6 +48,8 @@ var Input = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
48
48
|
onClean = _ref3.onClean,
|
|
49
49
|
hideMaxLength = _ref3.hideMaxLength,
|
|
50
50
|
rightIcon = _ref3.rightIcon,
|
|
51
|
+
a11yId = _ref3.a11yId,
|
|
52
|
+
includeAriaAttributes = _ref3.includeAriaAttributes,
|
|
51
53
|
props = _objectWithoutPropertiesLoose(_ref3, _excluded);
|
|
52
54
|
|
|
53
55
|
var inputRef = ref || useRef(null);
|
|
@@ -60,6 +62,24 @@ var Input = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
60
62
|
}
|
|
61
63
|
};
|
|
62
64
|
|
|
65
|
+
var hasHelper = helper || maxLength || error;
|
|
66
|
+
var helperA11yId = includeAriaAttributes && a11yId && a11yId + "-helper";
|
|
67
|
+
var labelA11yId = includeAriaAttributes && a11yId && a11yId + "-label";
|
|
68
|
+
var a11yFieldProps;
|
|
69
|
+
|
|
70
|
+
if (includeAriaAttributes) {
|
|
71
|
+
a11yFieldProps = a11yId ? _extends({}, hasHelper && {
|
|
72
|
+
'aria-describedby': helperA11yId
|
|
73
|
+
}, label && {
|
|
74
|
+
'aria-labelledby': labelA11yId
|
|
75
|
+
}) : _extends({}, label && {
|
|
76
|
+
'aria-label': label
|
|
77
|
+
});
|
|
78
|
+
a11yFieldProps['aria-invalid'] = !!error;
|
|
79
|
+
} else {
|
|
80
|
+
a11yFieldProps = {};
|
|
81
|
+
}
|
|
82
|
+
|
|
63
83
|
return /*#__PURE__*/React.createElement(Control, {
|
|
64
84
|
full: full
|
|
65
85
|
}, /*#__PURE__*/React.createElement(Fieldset, {
|
|
@@ -80,10 +100,12 @@ var Input = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
80
100
|
ref: inputRef,
|
|
81
101
|
value: value,
|
|
82
102
|
onChange: onChange
|
|
83
|
-
})) : children, /*#__PURE__*/React.createElement(Label, {
|
|
103
|
+
}, a11yFieldProps)) : children, /*#__PURE__*/React.createElement(Label, _extends({
|
|
84
104
|
error: error,
|
|
85
105
|
disabled: disabled
|
|
86
|
-
},
|
|
106
|
+
}, labelA11yId && {
|
|
107
|
+
id: labelA11yId
|
|
108
|
+
}), label), label && /*#__PURE__*/React.createElement(Legend, null, label), cleanable && !readOnly && value && /*#__PURE__*/React.createElement(IconWrapper, {
|
|
87
109
|
tabIndex: 0,
|
|
88
110
|
disabled: disabled,
|
|
89
111
|
onClick: cleanField,
|
|
@@ -100,13 +122,14 @@ var Input = /*#__PURE__*/React.forwardRef(function (_ref3, ref) {
|
|
|
100
122
|
width: 20,
|
|
101
123
|
height: 20,
|
|
102
124
|
role: "button"
|
|
103
|
-
}, rightIcon)),
|
|
125
|
+
}, rightIcon)), hasHelper && /*#__PURE__*/React.createElement(Helper, {
|
|
104
126
|
error: error,
|
|
105
127
|
helper: helper,
|
|
106
128
|
maxLength: maxLength,
|
|
107
129
|
length: value.length,
|
|
108
130
|
disabled: disabled,
|
|
109
|
-
hideMaxLength: hideMaxLength
|
|
131
|
+
hideMaxLength: hideMaxLength,
|
|
132
|
+
a11yId: helperA11yId
|
|
110
133
|
}));
|
|
111
134
|
});
|
|
112
135
|
Input.propTypes = {
|
|
@@ -138,7 +161,13 @@ Input.propTypes = {
|
|
|
138
161
|
/** when max length helper is unnecessary to appear */
|
|
139
162
|
hideMaxLength: bool,
|
|
140
163
|
placeholder: string,
|
|
141
|
-
rightIcon: node
|
|
164
|
+
rightIcon: node,
|
|
165
|
+
|
|
166
|
+
/** a unique prefix to generate HTML IDs to be used for aria-labelledby and aria-describedby */
|
|
167
|
+
a11yId: string,
|
|
168
|
+
|
|
169
|
+
/** useful for components that extend the Input component and have their own ARIA attributes implementation (e.g. Dropdown) */
|
|
170
|
+
includeAriaAttributes: bool
|
|
142
171
|
};
|
|
143
172
|
Input.defaultProps = {
|
|
144
173
|
className: undefined,
|
|
@@ -157,6 +186,8 @@ Input.defaultProps = {
|
|
|
157
186
|
onClean: function onClean() {},
|
|
158
187
|
hideMaxLength: false,
|
|
159
188
|
placeholder: undefined,
|
|
160
|
-
rightIcon: undefined
|
|
189
|
+
rightIcon: undefined,
|
|
190
|
+
a11yId: undefined,
|
|
191
|
+
includeAriaAttributes: true
|
|
161
192
|
};
|
|
162
193
|
export default Input;
|
|
@@ -61,6 +61,34 @@ describe('<Input />', function () {
|
|
|
61
61
|
|
|
62
62
|
expect(container).toMatchSnapshot();
|
|
63
63
|
});
|
|
64
|
+
it('should match with a11yId', function () {
|
|
65
|
+
var _render8 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
66
|
+
label: "Label",
|
|
67
|
+
a11yId: "id"
|
|
68
|
+
}))),
|
|
69
|
+
container = _render8.container;
|
|
70
|
+
|
|
71
|
+
expect(container).toMatchSnapshot();
|
|
72
|
+
});
|
|
73
|
+
it('should match with a11yId and error', function () {
|
|
74
|
+
var _render9 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
75
|
+
label: "Label",
|
|
76
|
+
a11yId: "id",
|
|
77
|
+
error: "Error message"
|
|
78
|
+
}))),
|
|
79
|
+
container = _render9.container;
|
|
80
|
+
|
|
81
|
+
expect(container).toMatchSnapshot();
|
|
82
|
+
});
|
|
83
|
+
it('should match with includeAriaAttributes set to false', function () {
|
|
84
|
+
var _render10 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
85
|
+
label: "Label",
|
|
86
|
+
includeAriaAttributes: false
|
|
87
|
+
}))),
|
|
88
|
+
container = _render10.container;
|
|
89
|
+
|
|
90
|
+
expect(container).toMatchSnapshot();
|
|
91
|
+
});
|
|
64
92
|
});
|
|
65
93
|
describe('Events', function () {
|
|
66
94
|
it('should call onChange', function () {
|
|
@@ -101,11 +129,11 @@ describe('<Input />', function () {
|
|
|
101
129
|
});
|
|
102
130
|
describe('maxLength', function () {
|
|
103
131
|
it('should update maxLength counter when add character', function () {
|
|
104
|
-
var
|
|
132
|
+
var _render11 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
105
133
|
label: "Input",
|
|
106
134
|
maxLength: 10
|
|
107
135
|
}))),
|
|
108
|
-
rerender =
|
|
136
|
+
rerender = _render11.rerender;
|
|
109
137
|
|
|
110
138
|
expect(screen.getByText('0/10').textContent).toBe('0/10');
|
|
111
139
|
rerender( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
@@ -128,10 +156,10 @@ describe('<Input />', function () {
|
|
|
128
156
|
expect(onClean).toHaveBeenCalled();
|
|
129
157
|
});
|
|
130
158
|
it('should test if clean button is present', function () {
|
|
131
|
-
var
|
|
159
|
+
var _render12 = render( /*#__PURE__*/React.createElement(ThemeProvider, null, /*#__PURE__*/React.createElement(Input, {
|
|
132
160
|
label: "Input"
|
|
133
161
|
}))),
|
|
134
|
-
rerender =
|
|
162
|
+
rerender = _render12.rerender; // closeButton
|
|
135
163
|
|
|
136
164
|
|
|
137
165
|
expect(screen.queryByRole('button')).toBeNull();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gympass/yoga",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.72.0",
|
|
4
4
|
"description": "Gympass component library",
|
|
5
5
|
"main": "./cjs",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"react": ">=16",
|
|
54
54
|
"styled-components": "^4.4.0"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "9231980c252bc0f14c5c37da6cec98d6070ba14f",
|
|
57
57
|
"module": "./esm",
|
|
58
58
|
"private": false,
|
|
59
59
|
"react-native": "./cjs/index.native.js"
|