@pingux/astro 2.8.1-alpha.1 → 2.8.1-alpha.3

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.
@@ -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), helperText && (0, _react2.jsx)(_.FieldHelperText, {
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
+ });
@@ -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), helperText && ___EmotionJSX(FieldHelperText, {
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
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.8.1-alpha.1",
3
+ "version": "2.8.1-alpha.3",
4
4
  "description": "PingUX themeable React component library",
5
5
  "repository": {
6
6
  "type": "git",