@pingux/astro 2.8.1-alpha.0 → 2.8.1-alpha.2
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/lib/cjs/components/Calendar/Calendar.js +8 -4
- package/lib/cjs/components/Calendar/Calendar.test.js +3 -3
- package/lib/cjs/components/NumberField/NumberField.js +10 -2
- package/lib/cjs/hooks/useHiddenNumberFieldValue/index.js +14 -0
- package/lib/cjs/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.js +23 -0
- package/lib/cjs/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.test.js +35 -0
- package/lib/components/Calendar/Calendar.js +8 -4
- package/lib/components/Calendar/Calendar.test.js +3 -3
- package/lib/components/NumberField/NumberField.js +11 -3
- package/lib/hooks/useHiddenNumberFieldValue/index.js +1 -0
- package/lib/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.js +16 -0
- package/lib/hooks/useHiddenNumberFieldValue/useHiddenNumberFieldValue.test.js +32 -0
- package/package.json +1 -1
@@ -121,14 +121,16 @@ var Calendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
121
121
|
},
|
122
122
|
mx: "sm",
|
123
123
|
isDisabled: prevButtonProps.isDisabled,
|
124
|
-
"aria-label": "
|
124
|
+
"aria-label": "Previous year navigation"
|
125
125
|
}, (0, _react2.jsx)(_index.Icon, {
|
126
126
|
icon: _ChevronDoubleLeftIcon["default"],
|
127
127
|
size: 18,
|
128
128
|
title: {
|
129
129
|
name: 'Chevron Double Left Icon'
|
130
130
|
}
|
131
|
-
})), (0, _react2.jsx)(_index.IconButton,
|
131
|
+
})), (0, _react2.jsx)(_index.IconButton, (0, _extends2["default"])({}, prevButtonProps, {
|
132
|
+
"aria-label": "Previous month navigation"
|
133
|
+
}), (0, _react2.jsx)(_index.Icon, {
|
132
134
|
icon: _ChevronLeftIcon["default"],
|
133
135
|
size: 18,
|
134
136
|
title: {
|
@@ -139,7 +141,9 @@ var Calendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
139
141
|
role: "heading",
|
140
142
|
"aria-level": "3",
|
141
143
|
fontWeight: 3
|
142
|
-
}, title), (0, _react2.jsx)(_index.IconButton,
|
144
|
+
}, title), (0, _react2.jsx)(_index.IconButton, (0, _extends2["default"])({}, nextButtonProps, {
|
145
|
+
"aria-label": "Next month navigation"
|
146
|
+
}), (0, _react2.jsx)(_index.Icon, {
|
143
147
|
icon: _ChevronRightIcon["default"],
|
144
148
|
size: 18,
|
145
149
|
title: {
|
@@ -151,7 +155,7 @@ var Calendar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
151
155
|
},
|
152
156
|
mx: "sm",
|
153
157
|
isDisabled: nextButtonProps.isDisabled,
|
154
|
-
"aria-label": "
|
158
|
+
"aria-label": "Next year navigation"
|
155
159
|
}, (0, _react2.jsx)(_index.Icon, {
|
156
160
|
icon: _ChevronDoubleRightIcon["default"],
|
157
161
|
size: 18,
|
@@ -47,8 +47,8 @@ test('renders calendar component', function () {
|
|
47
47
|
var buttons = _testWrapper.screen.queryAllByRole('button');
|
48
48
|
var previous = buttons[1];
|
49
49
|
var next = buttons[2];
|
50
|
-
expect(previous).toHaveAttribute('aria-label', 'Previous');
|
51
|
-
expect(next).toHaveAttribute('aria-label', 'Next');
|
50
|
+
expect(previous).toHaveAttribute('aria-label', 'Previous month navigation');
|
51
|
+
expect(next).toHaveAttribute('aria-label', 'Next month navigation');
|
52
52
|
expect(_testWrapper.screen.queryByRole('grid')).toHaveAttribute('aria-label', 'August 2022');
|
53
53
|
var weeksInMonth = _testWrapper.screen.getAllByRole('row');
|
54
54
|
expect(weeksInMonth).toHaveLength(5);
|
@@ -64,7 +64,7 @@ test('renders calendar component', function () {
|
|
64
64
|
expect(gridCells.length).toBe(31);
|
65
65
|
var hiddenButton = (0, _filter["default"])(_context2 = _testWrapper.screen.queryAllByRole('button')).call(_context2, function (button) {
|
66
66
|
return button.getAttribute('aria-label') === 'Next';
|
67
|
-
})[
|
67
|
+
})[0];
|
68
68
|
expect(hiddenButton).toHaveAttribute('tabindex', '-1');
|
69
69
|
_userEvent["default"].click(hiddenButton);
|
70
70
|
expect(heading).toHaveTextContent('September 2022');
|
@@ -29,6 +29,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
29
|
var _uuid = require("uuid");
|
30
30
|
var _ = require("../..");
|
31
31
|
var _hooks = require("../../hooks");
|
32
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("../../hooks/useHiddenNumberFieldValue"));
|
32
33
|
var _ariaAttributes = require("../../utils/docUtils/ariaAttributes");
|
33
34
|
var _fieldAttributes = require("../../utils/docUtils/fieldAttributes");
|
34
35
|
var _statusProp = require("../../utils/docUtils/statusProp");
|
@@ -48,7 +49,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
48
49
|
|
49
50
|
var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
50
51
|
var helperText = props.helperText,
|
51
|
-
status = props.status
|
52
|
+
status = props.status,
|
53
|
+
formatOptions = props.formatOptions;
|
52
54
|
var _useLocale = (0, _i18n.useLocale)(),
|
53
55
|
locale = _useLocale.locale;
|
54
56
|
var state = (0, _reactStately.useNumberFieldState)(_objectSpread(_objectSpread({}, props), {}, {
|
@@ -135,6 +137,10 @@ var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
135
137
|
inputProps.onChange(trimmedValueEvent);
|
136
138
|
}
|
137
139
|
};
|
140
|
+
var hiddenInputValue = (0, _useHiddenNumberFieldValue["default"])({
|
141
|
+
numberValue: state.numberValue,
|
142
|
+
isCurrency: formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.currency
|
143
|
+
});
|
138
144
|
inputProps['aria-roledescription'] = null;
|
139
145
|
var helperTextId = (0, _react.useMemo)(function () {
|
140
146
|
return (0, _uuid.v4)();
|
@@ -152,7 +158,9 @@ var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
152
158
|
onChange: onInputChange,
|
153
159
|
"aria-describedby": helperText && helperTextId,
|
154
160
|
role: "textbox"
|
155
|
-
})), ControlArrows),
|
161
|
+
})), ControlArrows), (0, _react2.jsx)(_reactAria.VisuallyHidden, {
|
162
|
+
"aria-live": "assertive"
|
163
|
+
}, hiddenInputValue), helperText && (0, _react2.jsx)(_.FieldHelperText, {
|
156
164
|
status: status,
|
157
165
|
id: helperTextId
|
158
166
|
}, helperText)));
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
_Object$defineProperty(exports, "default", {
|
9
|
+
enumerable: true,
|
10
|
+
get: function get() {
|
11
|
+
return _useHiddenNumberFieldValue["default"];
|
12
|
+
}
|
13
|
+
});
|
14
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("./useHiddenNumberFieldValue"));
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports["default"] = void 0;
|
8
|
+
var _react = require("react");
|
9
|
+
/**
|
10
|
+
* Returns integer or absolute value for screen reader announcement.
|
11
|
+
*/
|
12
|
+
|
13
|
+
var useHiddenNumberFieldValue = function useHiddenNumberFieldValue(_ref) {
|
14
|
+
var numberValue = _ref.numberValue,
|
15
|
+
isCurrency = _ref.isCurrency;
|
16
|
+
return (0, _react.useMemo)(function () {
|
17
|
+
if (!numberValue) return '';
|
18
|
+
if (!isCurrency) return numberValue;
|
19
|
+
return Math.abs(numberValue);
|
20
|
+
}, [numberValue, isCurrency]);
|
21
|
+
};
|
22
|
+
var _default = useHiddenNumberFieldValue;
|
23
|
+
exports["default"] = _default;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
5
|
+
var _useHiddenNumberFieldValue = _interopRequireDefault(require("./useHiddenNumberFieldValue"));
|
6
|
+
test('When number is not currency, negative values return negative values', function () {
|
7
|
+
var _renderHook = (0, _reactHooks.renderHook)(function () {
|
8
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
9
|
+
isCurrency: false,
|
10
|
+
numberValue: -1
|
11
|
+
});
|
12
|
+
}),
|
13
|
+
result = _renderHook.result;
|
14
|
+
expect(result.current).toBe(-1);
|
15
|
+
});
|
16
|
+
test('When number is currency, it always returns the absolute value', function () {
|
17
|
+
var _renderHook2 = (0, _reactHooks.renderHook)(function () {
|
18
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
19
|
+
isCurrency: true,
|
20
|
+
numberValue: -1
|
21
|
+
});
|
22
|
+
}),
|
23
|
+
result = _renderHook2.result;
|
24
|
+
expect(result.current).toBe(1);
|
25
|
+
});
|
26
|
+
test('When number is not currency, positive values return positive numbers', function () {
|
27
|
+
var _renderHook3 = (0, _reactHooks.renderHook)(function () {
|
28
|
+
return (0, _useHiddenNumberFieldValue["default"])({
|
29
|
+
isCurrency: false,
|
30
|
+
numberValue: 2
|
31
|
+
});
|
32
|
+
}),
|
33
|
+
result = _renderHook3.result;
|
34
|
+
expect(result.current).toBe(2);
|
35
|
+
});
|
@@ -110,14 +110,16 @@ var Calendar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
110
110
|
},
|
111
111
|
mx: "sm",
|
112
112
|
isDisabled: prevButtonProps.isDisabled,
|
113
|
-
"aria-label": "
|
113
|
+
"aria-label": "Previous year navigation"
|
114
114
|
}, ___EmotionJSX(Icon, {
|
115
115
|
icon: ChevronDoubleLeftIcon,
|
116
116
|
size: 18,
|
117
117
|
title: {
|
118
118
|
name: 'Chevron Double Left Icon'
|
119
119
|
}
|
120
|
-
})), ___EmotionJSX(IconButton,
|
120
|
+
})), ___EmotionJSX(IconButton, _extends({}, prevButtonProps, {
|
121
|
+
"aria-label": "Previous month navigation"
|
122
|
+
}), ___EmotionJSX(Icon, {
|
121
123
|
icon: ChevronLeftIcon,
|
122
124
|
size: 18,
|
123
125
|
title: {
|
@@ -128,7 +130,9 @@ var Calendar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
128
130
|
role: "heading",
|
129
131
|
"aria-level": "3",
|
130
132
|
fontWeight: 3
|
131
|
-
}, title), ___EmotionJSX(IconButton,
|
133
|
+
}, title), ___EmotionJSX(IconButton, _extends({}, nextButtonProps, {
|
134
|
+
"aria-label": "Next month navigation"
|
135
|
+
}), ___EmotionJSX(Icon, {
|
132
136
|
icon: ChevronRightIcon,
|
133
137
|
size: 18,
|
134
138
|
title: {
|
@@ -140,7 +144,7 @@ var Calendar = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
140
144
|
},
|
141
145
|
mx: "sm",
|
142
146
|
isDisabled: nextButtonProps.isDisabled,
|
143
|
-
"aria-label": "
|
147
|
+
"aria-label": "Next year navigation"
|
144
148
|
}, ___EmotionJSX(Icon, {
|
145
149
|
icon: ChevronDoubleRightIcon,
|
146
150
|
size: 18,
|
@@ -44,8 +44,8 @@ test('renders calendar component', function () {
|
|
44
44
|
var buttons = screen.queryAllByRole('button');
|
45
45
|
var previous = buttons[1];
|
46
46
|
var next = buttons[2];
|
47
|
-
expect(previous).toHaveAttribute('aria-label', 'Previous');
|
48
|
-
expect(next).toHaveAttribute('aria-label', 'Next');
|
47
|
+
expect(previous).toHaveAttribute('aria-label', 'Previous month navigation');
|
48
|
+
expect(next).toHaveAttribute('aria-label', 'Next month navigation');
|
49
49
|
expect(screen.queryByRole('grid')).toHaveAttribute('aria-label', 'August 2022');
|
50
50
|
var weeksInMonth = screen.getAllByRole('row');
|
51
51
|
expect(weeksInMonth).toHaveLength(5);
|
@@ -61,7 +61,7 @@ test('renders calendar component', function () {
|
|
61
61
|
expect(gridCells.length).toBe(31);
|
62
62
|
var hiddenButton = _filterInstanceProperty(_context2 = screen.queryAllByRole('button')).call(_context2, function (button) {
|
63
63
|
return button.getAttribute('aria-label') === 'Next';
|
64
|
-
})[
|
64
|
+
})[0];
|
65
65
|
expect(hiddenButton).toHaveAttribute('tabindex', '-1');
|
66
66
|
userEvent.click(hiddenButton);
|
67
67
|
expect(heading).toHaveTextContent('September 2022');
|
@@ -12,7 +12,7 @@ import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instanc
|
|
12
12
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
13
13
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context2, _context3; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context2 = ownKeys(Object(source), !0)).call(_context2, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context3 = ownKeys(Object(source))).call(_context3, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
14
14
|
import React, { forwardRef, useCallback, useImperativeHandle, useMemo } from 'react';
|
15
|
-
import { mergeProps, useNumberField } from 'react-aria';
|
15
|
+
import { mergeProps, useNumberField, VisuallyHidden } from 'react-aria';
|
16
16
|
import { useNumberFieldState } from 'react-stately';
|
17
17
|
import MenuDown from '@pingux/mdi-react/MenuDownIcon';
|
18
18
|
import MenuUp from '@pingux/mdi-react/MenuUpIcon';
|
@@ -22,6 +22,7 @@ import PropTypes from 'prop-types';
|
|
22
22
|
import { v4 as uuid } from 'uuid';
|
23
23
|
import { Box, FieldHelperText, Icon, IconButton, Input, Label } from '../..';
|
24
24
|
import { useField, usePropWarning } from '../../hooks';
|
25
|
+
import useHiddenNumberFieldValue from '../../hooks/useHiddenNumberFieldValue';
|
25
26
|
import { ariaAttributesBasePropTypes } from '../../utils/docUtils/ariaAttributes';
|
26
27
|
import { inputFieldAttributesBasePropTypes } from '../../utils/docUtils/fieldAttributes';
|
27
28
|
import { statusPropTypes } from '../../utils/docUtils/statusProp';
|
@@ -37,7 +38,8 @@ import { statusPropTypes } from '../../utils/docUtils/statusProp';
|
|
37
38
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
38
39
|
var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
39
40
|
var helperText = props.helperText,
|
40
|
-
status = props.status
|
41
|
+
status = props.status,
|
42
|
+
formatOptions = props.formatOptions;
|
41
43
|
var _useLocale = useLocale(),
|
42
44
|
locale = _useLocale.locale;
|
43
45
|
var state = useNumberFieldState(_objectSpread(_objectSpread({}, props), {}, {
|
@@ -124,6 +126,10 @@ var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
124
126
|
inputProps.onChange(trimmedValueEvent);
|
125
127
|
}
|
126
128
|
};
|
129
|
+
var hiddenInputValue = useHiddenNumberFieldValue({
|
130
|
+
numberValue: state.numberValue,
|
131
|
+
isCurrency: formatOptions === null || formatOptions === void 0 ? void 0 : formatOptions.currency
|
132
|
+
});
|
127
133
|
inputProps['aria-roledescription'] = null;
|
128
134
|
var helperTextId = useMemo(function () {
|
129
135
|
return uuid();
|
@@ -141,7 +147,9 @@ var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
141
147
|
onChange: onInputChange,
|
142
148
|
"aria-describedby": helperText && helperTextId,
|
143
149
|
role: "textbox"
|
144
|
-
})), ControlArrows),
|
150
|
+
})), ControlArrows), ___EmotionJSX(VisuallyHidden, {
|
151
|
+
"aria-live": "assertive"
|
152
|
+
}, hiddenInputValue), helperText && ___EmotionJSX(FieldHelperText, {
|
145
153
|
status: status,
|
146
154
|
id: helperTextId
|
147
155
|
}, helperText)));
|
@@ -0,0 +1 @@
|
|
1
|
+
export { default } from './useHiddenNumberFieldValue';
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { useMemo } from 'react';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Returns integer or absolute value for screen reader announcement.
|
5
|
+
*/
|
6
|
+
|
7
|
+
var useHiddenNumberFieldValue = function useHiddenNumberFieldValue(_ref) {
|
8
|
+
var numberValue = _ref.numberValue,
|
9
|
+
isCurrency = _ref.isCurrency;
|
10
|
+
return useMemo(function () {
|
11
|
+
if (!numberValue) return '';
|
12
|
+
if (!isCurrency) return numberValue;
|
13
|
+
return Math.abs(numberValue);
|
14
|
+
}, [numberValue, isCurrency]);
|
15
|
+
};
|
16
|
+
export default useHiddenNumberFieldValue;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import { renderHook } from '@testing-library/react-hooks';
|
2
|
+
import useHiddenNumberFieldValue from './useHiddenNumberFieldValue';
|
3
|
+
test('When number is not currency, negative values return negative values', function () {
|
4
|
+
var _renderHook = renderHook(function () {
|
5
|
+
return useHiddenNumberFieldValue({
|
6
|
+
isCurrency: false,
|
7
|
+
numberValue: -1
|
8
|
+
});
|
9
|
+
}),
|
10
|
+
result = _renderHook.result;
|
11
|
+
expect(result.current).toBe(-1);
|
12
|
+
});
|
13
|
+
test('When number is currency, it always returns the absolute value', function () {
|
14
|
+
var _renderHook2 = renderHook(function () {
|
15
|
+
return useHiddenNumberFieldValue({
|
16
|
+
isCurrency: true,
|
17
|
+
numberValue: -1
|
18
|
+
});
|
19
|
+
}),
|
20
|
+
result = _renderHook2.result;
|
21
|
+
expect(result.current).toBe(1);
|
22
|
+
});
|
23
|
+
test('When number is not currency, positive values return positive numbers', function () {
|
24
|
+
var _renderHook3 = renderHook(function () {
|
25
|
+
return useHiddenNumberFieldValue({
|
26
|
+
isCurrency: false,
|
27
|
+
numberValue: 2
|
28
|
+
});
|
29
|
+
}),
|
30
|
+
result = _renderHook3.result;
|
31
|
+
expect(result.current).toBe(2);
|
32
|
+
});
|