@pingux/astro 2.59.0-alpha.0 → 2.59.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.
Files changed (31) hide show
  1. package/lib/cjs/components/Loader/Loader.mdx +7 -2
  2. package/lib/cjs/components/ProgressBar/ProgressBar.d.ts +5 -0
  3. package/lib/cjs/components/ProgressBar/ProgressBar.js +78 -0
  4. package/lib/cjs/components/ProgressBar/ProgressBar.mdx +35 -0
  5. package/lib/cjs/components/ProgressBar/ProgressBar.stories.d.ts +5 -0
  6. package/lib/cjs/components/ProgressBar/ProgressBar.stories.js +63 -0
  7. package/lib/cjs/components/ProgressBar/ProgressBar.styles.d.ts +13 -0
  8. package/lib/cjs/components/ProgressBar/ProgressBar.styles.js +31 -0
  9. package/lib/cjs/components/ProgressBar/ProgressBar.test.d.ts +1 -0
  10. package/lib/cjs/components/ProgressBar/ProgressBar.test.js +106 -0
  11. package/lib/cjs/components/ProgressBar/index.d.ts +2 -0
  12. package/lib/cjs/components/ProgressBar/index.js +33 -0
  13. package/lib/cjs/index.d.ts +1 -0
  14. package/lib/cjs/index.js +8 -0
  15. package/lib/cjs/styles/variants/variants.js +2 -0
  16. package/lib/cjs/types/index.d.ts +1 -0
  17. package/lib/cjs/types/index.js +22 -11
  18. package/lib/cjs/types/progressBar.d.ts +12 -0
  19. package/lib/cjs/types/progressBar.js +6 -0
  20. package/lib/components/Loader/Loader.mdx +7 -2
  21. package/lib/components/ProgressBar/ProgressBar.js +63 -0
  22. package/lib/components/ProgressBar/ProgressBar.mdx +35 -0
  23. package/lib/components/ProgressBar/ProgressBar.stories.js +53 -0
  24. package/lib/components/ProgressBar/ProgressBar.styles.js +23 -0
  25. package/lib/components/ProgressBar/ProgressBar.test.js +97 -0
  26. package/lib/components/ProgressBar/index.js +2 -0
  27. package/lib/index.js +1 -0
  28. package/lib/styles/variants/variants.js +2 -0
  29. package/lib/types/index.js +1 -0
  30. package/lib/types/progressBar.js +1 -0
  31. package/package.json +3 -2
@@ -11,7 +11,7 @@ This component should be:
11
11
  - Restricted to a single use per view to avoid unnecessary disruption.
12
12
 
13
13
  It should not be used:
14
- - When the wait time for a process is known.
14
+ - When the wait time for a process is known. If it is known, use [ProgressBar](./?path=/story/expirimental-progressbar--default) component instead.
15
15
  - When trying to communicate progression in steps.
16
16
 
17
17
  The Loader component is based on the [useProgressBar](https://react-spectrum.adobe.com/react-aria/useProgressBar.html) React Aria component.
@@ -26,4 +26,9 @@ This component can be used independently and does not require additional compone
26
26
 
27
27
  This component uses the following attributes to assist screen readers:
28
28
  - The **`aria-label`** attribute is used to provide an accessible name.
29
- - The **`aria-live`** attribute is used to announce content changes in a live region.
29
+ - The **`aria-live`** attribute is used to announce content changes in a live region.
30
+
31
+ ### Determinate vs Indeterminate usage
32
+
33
+ - If the progress to be indicated is determinate, use [ProgressBar](./?path=/story/experimental-progressbar--default) component instead.
34
+ - If the progress to be indicated is indeterminate, use the Loader Component
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { ProgressBarProps } from '../../types';
3
+ export declare const calculateBarWidth: (value: number, minValue: number, maxValue: number) => string;
4
+ declare const ProgressBar: React.ForwardRefExoticComponent<ProgressBarProps & React.RefAttributes<HTMLElement>>;
5
+ export default ProgressBar;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
5
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
7
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
8
+ _Object$defineProperty(exports, "__esModule", {
9
+ value: true
10
+ });
11
+ exports["default"] = exports.calculateBarWidth = void 0;
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
13
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _progress = require("@react-aria/progress");
16
+ var _ = require("../..");
17
+ var _hooks = require("../../hooks");
18
+ var _react2 = require("@emotion/react");
19
+ var _excluded = ["role"];
20
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
21
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
22
+ // Calculate the width of the progress bar as a percentage
23
+ var calculateBarWidth = function calculateBarWidth(value, minValue, maxValue) {
24
+ if (value < minValue) {
25
+ throw new Error('Value cannot be less than minValue');
26
+ }
27
+ if (value > maxValue) {
28
+ throw new Error('Value cannot be greater than maxValue');
29
+ }
30
+ var percentage = (value - minValue) / (maxValue - minValue);
31
+ var barWidth = "".concat(Math.round(percentage * 100), "%");
32
+ return barWidth;
33
+ };
34
+ exports.calculateBarWidth = calculateBarWidth;
35
+ var ProgressBar = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
36
+ var _props$label = props.label,
37
+ label = _props$label === void 0 ? '' : _props$label,
38
+ _props$showValueLabel = props.showValueLabel,
39
+ showValueLabel = _props$showValueLabel === void 0 ? true : _props$showValueLabel,
40
+ value = props.value,
41
+ _props$minValue = props.minValue,
42
+ minValue = _props$minValue === void 0 ? 0 : _props$minValue,
43
+ _props$maxValue = props.maxValue,
44
+ maxValue = _props$maxValue === void 0 ? 100 : _props$maxValue;
45
+ var progressBarRef = (0, _hooks.useLocalOrForwardRef)(ref);
46
+ var _useProgressBar = (0, _progress.useProgressBar)(props),
47
+ progressBarProps = _useProgressBar.progressBarProps,
48
+ labelProps = _useProgressBar.labelProps;
49
+ var role = labelProps.role,
50
+ restLabelProps = (0, _objectWithoutProperties2["default"])(labelProps, _excluded);
51
+ var barWidth = calculateBarWidth(value, minValue, maxValue);
52
+ var ariaLabel = props['aria-label'];
53
+ return (0, _react2.jsx)(_.Box, (0, _extends2["default"])({}, progressBarProps, {
54
+ role: "progressbar",
55
+ "aria-labelledby": labelProps.id,
56
+ "aria-label": ariaLabel,
57
+ gap: "2px",
58
+ ref: progressBarRef
59
+ }), (0, _react2.jsx)(_.Box, {
60
+ isRow: true,
61
+ justifyContent: "space-between"
62
+ }, label && (0, _react2.jsx)(_.Text, (0, _extends2["default"])({
63
+ fontSize: "xs",
64
+ fontWeight: "3"
65
+ }, restLabelProps), label), showValueLabel && (0, _react2.jsx)(_.Text, {
66
+ fontSize: "xs",
67
+ fontWeight: "3"
68
+ }, progressBarProps['aria-valuetext'])), (0, _react2.jsx)(_.Box, {
69
+ variant: "progressBar.container"
70
+ }, (0, _react2.jsx)(_.Box, {
71
+ variant: "progressBar.percentageBar",
72
+ style: {
73
+ width: barWidth
74
+ }
75
+ })));
76
+ });
77
+ var _default = ProgressBar;
78
+ exports["default"] = _default;
@@ -0,0 +1,35 @@
1
+ import { Meta } from '@storybook/addon-docs';
2
+
3
+ <Meta title="Experimental/ProgressBar/ProgressBar" />
4
+
5
+ # ProgressBar
6
+
7
+ The ProgressBar component shows progression that can be calculated against a certain goal, such as loading or percent completion of a task.
8
+
9
+ This component should be:
10
+ - Used to show a determinate loading state.
11
+ - When trying to communicate progression in steps.
12
+
13
+ It should not be used:
14
+ - When the wait time for a process is unknown. If it is unknown, use [Loader](./?path=/story/components-loader--default) component instead.
15
+
16
+ ### Required components
17
+
18
+ This component can be used independently and does not require additional components.
19
+
20
+ ### Accessibility
21
+
22
+ This component should adhere to the [WAI-ARIA ProgressBar](https://w3c.github.io/aria/#progressbar) accessibility guidelines.
23
+
24
+ #### Screen readers
25
+
26
+ This component uses the following attributes to assist screen readers:
27
+
28
+ - The progressBar uses the **`aria-valuemin`** and **`aria-valuemax`** to indicate the minimum and maximum progress indicator values. If they are missing, they default to 0 and 100 respectively.
29
+ - The progressBar uses the **`aria-valuenow`** attribute to indicate the current value of the progressbar.
30
+ - If the progressbar is describing the loading progress of a particular region of a page, authors SHOULD both use **`aria-describedby`** to reference the progressbar status, and set the **`aria-busy`** attribute to true on the region until it is finished loading. It is not possible for the user to alter the value of a progressbar because it is always read-only
31
+
32
+ ### Determinate vs Indeterminate usage
33
+
34
+ - If the progress to be indicated is determinate, use the ProgressBar component.
35
+ - If the progress to be indicated is indeterminate, use the [Loader](./?path=/story/components-loader--default) component instead.
@@ -0,0 +1,5 @@
1
+ import { StoryFn } from '@storybook/react';
2
+ import { ProgressBarProps } from '../../index';
3
+ declare const _default: import("@storybook/types").ComponentAnnotations<import("@storybook/react/dist/types-0a347bb9").R, import("@storybook/types").Args>;
4
+ export default _default;
5
+ export declare const Default: StoryFn<ProgressBarProps>;
@@ -0,0 +1,63 @@
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
+ exports["default"] = exports.Default = void 0;
9
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _storybookDocsLayout = _interopRequireDefault(require("../../../.storybook/storybookDocsLayout"));
12
+ var _index = require("../../index");
13
+ var _ProgressBar = _interopRequireDefault(require("./ProgressBar.mdx"));
14
+ var _react2 = require("@emotion/react");
15
+ var _default = {
16
+ title: 'Experimental/ProgressBar',
17
+ component: _index.ProgressBar,
18
+ parameters: {
19
+ docs: {
20
+ page: function page() {
21
+ return (0, _react2.jsx)(_react["default"].Fragment, null, (0, _react2.jsx)(_ProgressBar["default"], null), (0, _react2.jsx)(_storybookDocsLayout["default"], null));
22
+ },
23
+ source: {
24
+ type: 'code'
25
+ }
26
+ }
27
+ },
28
+ argTypes: {
29
+ isIndeterminate: {
30
+ table: {
31
+ disable: true
32
+ }
33
+ },
34
+ 'data-testid': {
35
+ table: {
36
+ disable: true
37
+ }
38
+ },
39
+ label: {
40
+ table: {
41
+ disable: true
42
+ }
43
+ },
44
+ showValueLabel: {
45
+ table: {
46
+ disable: true
47
+ }
48
+ },
49
+ valueLabel: {
50
+ table: {
51
+ disable: true
52
+ }
53
+ }
54
+ }
55
+ };
56
+ exports["default"] = _default;
57
+ var Default = function Default(args) {
58
+ return (0, _react2.jsx)(_index.ProgressBar, (0, _extends2["default"])({}, args, {
59
+ value: 25,
60
+ "aria-label": "Progress Bar"
61
+ }));
62
+ };
63
+ exports.Default = Default;
@@ -0,0 +1,13 @@
1
+ declare const _default: {
2
+ container: {
3
+ backgroundColor: string;
4
+ borderRadius: string;
5
+ height: string;
6
+ };
7
+ percentageBar: {
8
+ backgroundColor: string;
9
+ borderRadius: string;
10
+ height: string;
11
+ };
12
+ };
13
+ export default _default;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
4
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
5
+ var _filterInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
7
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
8
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
9
+ var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
10
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
11
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
12
+ _Object$defineProperty(exports, "__esModule", {
13
+ value: true
14
+ });
15
+ exports["default"] = void 0;
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
17
+ 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; }
18
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
19
+ var container = {
20
+ backgroundColor: 'neutral.90',
21
+ borderRadius: '3px',
22
+ height: '7px'
23
+ };
24
+ var percentageBar = _objectSpread(_objectSpread({}, container), {}, {
25
+ backgroundColor: 'active'
26
+ });
27
+ var _default = {
28
+ container: container,
29
+ percentageBar: percentageBar
30
+ };
31
+ exports["default"] = _default;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
4
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
5
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
7
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
8
+ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _react2 = require("@testing-library/react");
11
+ var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
12
+ var _ = _interopRequireWildcard(require("."));
13
+ var _react3 = require("@emotion/react");
14
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var testId = 'test-progressbar';
17
+ var defaultProps = {
18
+ 'data-testid': testId,
19
+ value: 25,
20
+ minValue: 0,
21
+ maxValue: 100
22
+ };
23
+ var getComponent = function getComponent() {
24
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
+ return (0, _react2.render)((0, _react3.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props, {
26
+ "aria-label": "Progress Bar"
27
+ })));
28
+ };
29
+
30
+ // Needs to be added to each components test file
31
+ (0, _universalComponentTest.universalComponentTests)({
32
+ renderComponent: function renderComponent(props) {
33
+ return (0, _react3.jsx)(_["default"], (0, _extends2["default"])({}, defaultProps, props, {
34
+ "aria-label": "Progress Bar"
35
+ }));
36
+ }
37
+ });
38
+ test('ProgressBar component does load', function () {
39
+ getComponent();
40
+ var progressBar = _react2.screen.getByRole('progressbar', {
41
+ name: 'Progress Bar'
42
+ });
43
+ expect(progressBar).toBeInTheDocument();
44
+ });
45
+ test('should render a label', function () {
46
+ getComponent({
47
+ label: 'Loading...'
48
+ });
49
+ var label = _react2.screen.getByText('Loading...');
50
+ expect(label).toBeInTheDocument();
51
+ });
52
+ test('renders value as a percentage', function () {
53
+ getComponent({
54
+ value: 25
55
+ });
56
+ var value = _react2.screen.getByText('25%');
57
+ expect(value).toBeInTheDocument();
58
+ });
59
+ test('renders value as custom valueLabel instead of percentage', function () {
60
+ getComponent({
61
+ value: 25,
62
+ valueLabel: '25 of 100 dogs'
63
+ });
64
+ var value = _react2.screen.queryByText('25%');
65
+ var valueLabel = _react2.screen.getByText('25 of 100 dogs');
66
+ expect(value).not.toBeInTheDocument();
67
+ expect(valueLabel).toBeInTheDocument();
68
+ });
69
+ test('does not render value when showValueLabel is false', function () {
70
+ getComponent({
71
+ value: 25,
72
+ showValueLabel: false
73
+ });
74
+ var valueLabel = _react2.screen.queryByText('25%');
75
+ expect(valueLabel).not.toBeInTheDocument();
76
+ });
77
+ test('renders label and custom valueLabel when labe and valueLabel are present', function () {
78
+ getComponent({
79
+ value: 25,
80
+ label: 'Loading...',
81
+ valueLabel: '25 of 100 dogs'
82
+ });
83
+ var label = _react2.screen.getByText('Loading...');
84
+ var valueLabel = _react2.screen.getByText('25 of 100 dogs');
85
+ expect(label).toBeInTheDocument();
86
+ expect(valueLabel).toBeInTheDocument();
87
+ });
88
+ test('calculates bar width with default min and max values', function () {
89
+ expect((0, _.calculateBarWidth)(25, 0, 100)).toBe('25%');
90
+ });
91
+ test('calculates bar width when value equals minValue', function () {
92
+ expect((0, _.calculateBarWidth)(0, 0, 100)).toBe('0%');
93
+ });
94
+ test('calculates bar width when value equals maxValue', function () {
95
+ expect((0, _.calculateBarWidth)(100, 0, 100)).toBe('100%');
96
+ });
97
+ test('throws error when value is less than minValue', function () {
98
+ expect(function () {
99
+ return (0, _.calculateBarWidth)(-10, 0, 100);
100
+ }).toThrow('Value cannot be less than minValue');
101
+ });
102
+ test('throws error when value is greater than maxValue', function () {
103
+ expect(function () {
104
+ return (0, _.calculateBarWidth)(110, 0, 100);
105
+ }).toThrow('Value cannot be greater than maxValue');
106
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './ProgressBar';
2
+ export * from './ProgressBar';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ var _context;
4
+ var _typeof = require("@babel/runtime-corejs3/helpers/typeof");
5
+ var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
6
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
8
+ var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
9
+ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
10
+ _Object$defineProperty(exports, "__esModule", {
11
+ value: true
12
+ });
13
+ var _exportNames = {};
14
+ _Object$defineProperty(exports, "default", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _ProgressBar["default"];
18
+ }
19
+ });
20
+ var _ProgressBar = _interopRequireWildcard(require("./ProgressBar"));
21
+ _forEachInstanceProperty(_context = _Object$keys(_ProgressBar)).call(_context, function (key) {
22
+ if (key === "default" || key === "__esModule") return;
23
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
24
+ if (key in exports && exports[key] === _ProgressBar[key]) return;
25
+ _Object$defineProperty(exports, key, {
26
+ enumerable: true,
27
+ get: function get() {
28
+ return _ProgressBar[key];
29
+ }
30
+ });
31
+ });
32
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
33
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -120,6 +120,7 @@ export * from './components/PasswordField';
120
120
  export { default as PopoverContainer } from './components/PopoverContainer';
121
121
  export * from './components/PopoverContainer';
122
122
  export { default as PopoverMenu } from './components/PopoverMenu';
123
+ export { default as ProgressBar } from './components/ProgressBar';
123
124
  export { default as Radio } from './components/Radio';
124
125
  export * from './components/Radio';
125
126
  export { default as RadioField } from './components/RadioField';
package/lib/cjs/index.js CHANGED
@@ -89,6 +89,7 @@ var _exportNames = {
89
89
  PasswordField: true,
90
90
  PopoverContainer: true,
91
91
  PopoverMenu: true,
92
+ ProgressBar: true,
92
93
  Radio: true,
93
94
  RadioField: true,
94
95
  RadioGroupField: true,
@@ -624,6 +625,12 @@ _Object$defineProperty(exports, "PopoverMenu", {
624
625
  return _PopoverMenu["default"];
625
626
  }
626
627
  });
628
+ _Object$defineProperty(exports, "ProgressBar", {
629
+ enumerable: true,
630
+ get: function get() {
631
+ return _ProgressBar["default"];
632
+ }
633
+ });
627
634
  _Object$defineProperty(exports, "Radio", {
628
635
  enumerable: true,
629
636
  get: function get() {
@@ -1416,6 +1423,7 @@ _forEachInstanceProperty(_context45 = _Object$keys(_PopoverContainer)).call(_con
1416
1423
  });
1417
1424
  });
1418
1425
  var _PopoverMenu = _interopRequireDefault(require("./components/PopoverMenu"));
1426
+ var _ProgressBar = _interopRequireDefault(require("./components/ProgressBar"));
1419
1427
  var _Radio = _interopRequireWildcard(require("./components/Radio"));
1420
1428
  _forEachInstanceProperty(_context46 = _Object$keys(_Radio)).call(_context46, function (key) {
1421
1429
  if (key === "default" || key === "__esModule") return;
@@ -45,6 +45,7 @@ var _NavBar = _interopRequireDefault(require("../../components/NavBar/NavBar.sty
45
45
  var _OverlayPanel = _interopRequireDefault(require("../../components/OverlayPanel/OverlayPanel.styles"));
46
46
  var _PanelHeader = _interopRequireDefault(require("../../components/PanelHeader/PanelHeader.styles"));
47
47
  var _PopoverMenu = _interopRequireDefault(require("../../components/PopoverMenu/PopoverMenu.styles"));
48
+ var _ProgressBar = _interopRequireDefault(require("../../components/ProgressBar/ProgressBar.styles"));
48
49
  var _RockerButton = _interopRequireDefault(require("../../components/RockerButton/RockerButton.styles"));
49
50
  var _ScrollBox = _interopRequireDefault(require("../../components/ScrollBox/ScrollBox.styles"));
50
51
  var _Separator = _interopRequireDefault(require("../../components/Separator/Separator.styles"));
@@ -88,6 +89,7 @@ var _default = _objectSpread({
88
89
  overlayPanel: _OverlayPanel["default"],
89
90
  popoverMenu: _PopoverMenu["default"],
90
91
  panelHeader: _PanelHeader["default"],
92
+ progressBar: _ProgressBar["default"],
91
93
  rockerButton: _RockerButton["default"],
92
94
  scrollBox: _ScrollBox["default"],
93
95
  separator: _Separator["default"],
@@ -29,6 +29,7 @@ export * from './navBar';
29
29
  export * from './overlayPanel';
30
30
  export * from './popoverContainer';
31
31
  export * from './popoverMenu';
32
+ export * from './progressBar';
32
33
  export * from './requirementsList';
33
34
  export * from './rockerButtonGroup';
34
35
  export * from './scrollBox';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27, _context28, _context29, _context30, _context31, _context32, _context33, _context34, _context35, _context36, _context37, _context38, _context39, _context40, _context41;
3
+ var _context, _context2, _context3, _context4, _context5, _context6, _context7, _context8, _context9, _context10, _context11, _context12, _context13, _context14, _context15, _context16, _context17, _context18, _context19, _context20, _context21, _context22, _context23, _context24, _context25, _context26, _context27, _context28, _context29, _context30, _context31, _context32, _context33, _context34, _context35, _context36, _context37, _context38, _context39, _context40, _context41, _context42;
4
4
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
5
5
  var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
6
6
  var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
@@ -348,8 +348,19 @@ _forEachInstanceProperty(_context31 = _Object$keys(_popoverMenu)).call(_context3
348
348
  }
349
349
  });
350
350
  });
351
+ var _progressBar = require("./progressBar");
352
+ _forEachInstanceProperty(_context32 = _Object$keys(_progressBar)).call(_context32, function (key) {
353
+ if (key === "default" || key === "__esModule") return;
354
+ if (key in exports && exports[key] === _progressBar[key]) return;
355
+ _Object$defineProperty(exports, key, {
356
+ enumerable: true,
357
+ get: function get() {
358
+ return _progressBar[key];
359
+ }
360
+ });
361
+ });
351
362
  var _requirementsList = require("./requirementsList");
352
- _forEachInstanceProperty(_context32 = _Object$keys(_requirementsList)).call(_context32, function (key) {
363
+ _forEachInstanceProperty(_context33 = _Object$keys(_requirementsList)).call(_context33, function (key) {
353
364
  if (key === "default" || key === "__esModule") return;
354
365
  if (key in exports && exports[key] === _requirementsList[key]) return;
355
366
  _Object$defineProperty(exports, key, {
@@ -360,7 +371,7 @@ _forEachInstanceProperty(_context32 = _Object$keys(_requirementsList)).call(_con
360
371
  });
361
372
  });
362
373
  var _rockerButtonGroup = require("./rockerButtonGroup");
363
- _forEachInstanceProperty(_context33 = _Object$keys(_rockerButtonGroup)).call(_context33, function (key) {
374
+ _forEachInstanceProperty(_context34 = _Object$keys(_rockerButtonGroup)).call(_context34, function (key) {
364
375
  if (key === "default" || key === "__esModule") return;
365
376
  if (key in exports && exports[key] === _rockerButtonGroup[key]) return;
366
377
  _Object$defineProperty(exports, key, {
@@ -371,7 +382,7 @@ _forEachInstanceProperty(_context33 = _Object$keys(_rockerButtonGroup)).call(_co
371
382
  });
372
383
  });
373
384
  var _scrollBox = require("./scrollBox");
374
- _forEachInstanceProperty(_context34 = _Object$keys(_scrollBox)).call(_context34, function (key) {
385
+ _forEachInstanceProperty(_context35 = _Object$keys(_scrollBox)).call(_context35, function (key) {
375
386
  if (key === "default" || key === "__esModule") return;
376
387
  if (key in exports && exports[key] === _scrollBox[key]) return;
377
388
  _Object$defineProperty(exports, key, {
@@ -382,7 +393,7 @@ _forEachInstanceProperty(_context34 = _Object$keys(_scrollBox)).call(_context34,
382
393
  });
383
394
  });
384
395
  var _separator = require("./separator");
385
- _forEachInstanceProperty(_context35 = _Object$keys(_separator)).call(_context35, function (key) {
396
+ _forEachInstanceProperty(_context36 = _Object$keys(_separator)).call(_context36, function (key) {
386
397
  if (key === "default" || key === "__esModule") return;
387
398
  if (key in exports && exports[key] === _separator[key]) return;
388
399
  _Object$defineProperty(exports, key, {
@@ -393,7 +404,7 @@ _forEachInstanceProperty(_context35 = _Object$keys(_separator)).call(_context35,
393
404
  });
394
405
  });
395
406
  var _shared = require("./shared");
396
- _forEachInstanceProperty(_context36 = _Object$keys(_shared)).call(_context36, function (key) {
407
+ _forEachInstanceProperty(_context37 = _Object$keys(_shared)).call(_context37, function (key) {
397
408
  if (key === "default" || key === "__esModule") return;
398
409
  if (key in exports && exports[key] === _shared[key]) return;
399
410
  _Object$defineProperty(exports, key, {
@@ -404,7 +415,7 @@ _forEachInstanceProperty(_context36 = _Object$keys(_shared)).call(_context36, fu
404
415
  });
405
416
  });
406
417
  var _tab = require("./tab");
407
- _forEachInstanceProperty(_context37 = _Object$keys(_tab)).call(_context37, function (key) {
418
+ _forEachInstanceProperty(_context38 = _Object$keys(_tab)).call(_context38, function (key) {
408
419
  if (key === "default" || key === "__esModule") return;
409
420
  if (key in exports && exports[key] === _tab[key]) return;
410
421
  _Object$defineProperty(exports, key, {
@@ -415,7 +426,7 @@ _forEachInstanceProperty(_context37 = _Object$keys(_tab)).call(_context37, funct
415
426
  });
416
427
  });
417
428
  var _table = require("./table");
418
- _forEachInstanceProperty(_context38 = _Object$keys(_table)).call(_context38, function (key) {
429
+ _forEachInstanceProperty(_context39 = _Object$keys(_table)).call(_context39, function (key) {
419
430
  if (key === "default" || key === "__esModule") return;
420
431
  if (key in exports && exports[key] === _table[key]) return;
421
432
  _Object$defineProperty(exports, key, {
@@ -426,7 +437,7 @@ _forEachInstanceProperty(_context38 = _Object$keys(_table)).call(_context38, fun
426
437
  });
427
438
  });
428
439
  var _tabs = require("./tabs");
429
- _forEachInstanceProperty(_context39 = _Object$keys(_tabs)).call(_context39, function (key) {
440
+ _forEachInstanceProperty(_context40 = _Object$keys(_tabs)).call(_context40, function (key) {
430
441
  if (key === "default" || key === "__esModule") return;
431
442
  if (key in exports && exports[key] === _tabs[key]) return;
432
443
  _Object$defineProperty(exports, key, {
@@ -437,7 +448,7 @@ _forEachInstanceProperty(_context39 = _Object$keys(_tabs)).call(_context39, func
437
448
  });
438
449
  });
439
450
  var _text = require("./text");
440
- _forEachInstanceProperty(_context40 = _Object$keys(_text)).call(_context40, function (key) {
451
+ _forEachInstanceProperty(_context41 = _Object$keys(_text)).call(_context41, function (key) {
441
452
  if (key === "default" || key === "__esModule") return;
442
453
  if (key in exports && exports[key] === _text[key]) return;
443
454
  _Object$defineProperty(exports, key, {
@@ -448,7 +459,7 @@ _forEachInstanceProperty(_context40 = _Object$keys(_text)).call(_context40, func
448
459
  });
449
460
  });
450
461
  var _tooltipTrigger = require("./tooltipTrigger");
451
- _forEachInstanceProperty(_context41 = _Object$keys(_tooltipTrigger)).call(_context41, function (key) {
462
+ _forEachInstanceProperty(_context42 = _Object$keys(_tooltipTrigger)).call(_context42, function (key) {
452
463
  if (key === "default" || key === "__esModule") return;
453
464
  if (key in exports && exports[key] === _tooltipTrigger[key]) return;
454
465
  _Object$defineProperty(exports, key, {
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { TestingAttributes } from './shared/test';
3
+ export interface ProgressBarProps extends TestingAttributes {
4
+ isIndeterminate?: boolean;
5
+ label?: React.ReactNode;
6
+ formatOptions?: Intl.NumberFormatOptions;
7
+ valueLabel?: React.ReactNode;
8
+ value: number;
9
+ minValue?: number;
10
+ maxValue?: number;
11
+ showValueLabel?: boolean;
12
+ }
@@ -0,0 +1,6 @@
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
+ });
@@ -11,7 +11,7 @@ This component should be:
11
11
  - Restricted to a single use per view to avoid unnecessary disruption.
12
12
 
13
13
  It should not be used:
14
- - When the wait time for a process is known.
14
+ - When the wait time for a process is known. If it is known, use [ProgressBar](./?path=/story/expirimental-progressbar--default) component instead.
15
15
  - When trying to communicate progression in steps.
16
16
 
17
17
  The Loader component is based on the [useProgressBar](https://react-spectrum.adobe.com/react-aria/useProgressBar.html) React Aria component.
@@ -26,4 +26,9 @@ This component can be used independently and does not require additional compone
26
26
 
27
27
  This component uses the following attributes to assist screen readers:
28
28
  - The **`aria-label`** attribute is used to provide an accessible name.
29
- - The **`aria-live`** attribute is used to announce content changes in a live region.
29
+ - The **`aria-live`** attribute is used to announce content changes in a live region.
30
+
31
+ ### Determinate vs Indeterminate usage
32
+
33
+ - If the progress to be indicated is determinate, use [ProgressBar](./?path=/story/experimental-progressbar--default) component instead.
34
+ - If the progress to be indicated is indeterminate, use the Loader Component
@@ -0,0 +1,63 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
3
+ var _excluded = ["role"];
4
+ import React, { forwardRef } from 'react';
5
+ import { useProgressBar } from '@react-aria/progress';
6
+ import { Box, Text } from '../..';
7
+ import { useLocalOrForwardRef } from '../../hooks';
8
+ import { jsx as ___EmotionJSX } from "@emotion/react";
9
+ // Calculate the width of the progress bar as a percentage
10
+ export var calculateBarWidth = function calculateBarWidth(value, minValue, maxValue) {
11
+ if (value < minValue) {
12
+ throw new Error('Value cannot be less than minValue');
13
+ }
14
+ if (value > maxValue) {
15
+ throw new Error('Value cannot be greater than maxValue');
16
+ }
17
+ var percentage = (value - minValue) / (maxValue - minValue);
18
+ var barWidth = "".concat(Math.round(percentage * 100), "%");
19
+ return barWidth;
20
+ };
21
+ var ProgressBar = /*#__PURE__*/forwardRef(function (props, ref) {
22
+ var _props$label = props.label,
23
+ label = _props$label === void 0 ? '' : _props$label,
24
+ _props$showValueLabel = props.showValueLabel,
25
+ showValueLabel = _props$showValueLabel === void 0 ? true : _props$showValueLabel,
26
+ value = props.value,
27
+ _props$minValue = props.minValue,
28
+ minValue = _props$minValue === void 0 ? 0 : _props$minValue,
29
+ _props$maxValue = props.maxValue,
30
+ maxValue = _props$maxValue === void 0 ? 100 : _props$maxValue;
31
+ var progressBarRef = useLocalOrForwardRef(ref);
32
+ var _useProgressBar = useProgressBar(props),
33
+ progressBarProps = _useProgressBar.progressBarProps,
34
+ labelProps = _useProgressBar.labelProps;
35
+ var role = labelProps.role,
36
+ restLabelProps = _objectWithoutProperties(labelProps, _excluded);
37
+ var barWidth = calculateBarWidth(value, minValue, maxValue);
38
+ var ariaLabel = props['aria-label'];
39
+ return ___EmotionJSX(Box, _extends({}, progressBarProps, {
40
+ role: "progressbar",
41
+ "aria-labelledby": labelProps.id,
42
+ "aria-label": ariaLabel,
43
+ gap: "2px",
44
+ ref: progressBarRef
45
+ }), ___EmotionJSX(Box, {
46
+ isRow: true,
47
+ justifyContent: "space-between"
48
+ }, label && ___EmotionJSX(Text, _extends({
49
+ fontSize: "xs",
50
+ fontWeight: "3"
51
+ }, restLabelProps), label), showValueLabel && ___EmotionJSX(Text, {
52
+ fontSize: "xs",
53
+ fontWeight: "3"
54
+ }, progressBarProps['aria-valuetext'])), ___EmotionJSX(Box, {
55
+ variant: "progressBar.container"
56
+ }, ___EmotionJSX(Box, {
57
+ variant: "progressBar.percentageBar",
58
+ style: {
59
+ width: barWidth
60
+ }
61
+ })));
62
+ });
63
+ export default ProgressBar;
@@ -0,0 +1,35 @@
1
+ import { Meta } from '@storybook/addon-docs';
2
+
3
+ <Meta title="Experimental/ProgressBar/ProgressBar" />
4
+
5
+ # ProgressBar
6
+
7
+ The ProgressBar component shows progression that can be calculated against a certain goal, such as loading or percent completion of a task.
8
+
9
+ This component should be:
10
+ - Used to show a determinate loading state.
11
+ - When trying to communicate progression in steps.
12
+
13
+ It should not be used:
14
+ - When the wait time for a process is unknown. If it is unknown, use [Loader](./?path=/story/components-loader--default) component instead.
15
+
16
+ ### Required components
17
+
18
+ This component can be used independently and does not require additional components.
19
+
20
+ ### Accessibility
21
+
22
+ This component should adhere to the [WAI-ARIA ProgressBar](https://w3c.github.io/aria/#progressbar) accessibility guidelines.
23
+
24
+ #### Screen readers
25
+
26
+ This component uses the following attributes to assist screen readers:
27
+
28
+ - The progressBar uses the **`aria-valuemin`** and **`aria-valuemax`** to indicate the minimum and maximum progress indicator values. If they are missing, they default to 0 and 100 respectively.
29
+ - The progressBar uses the **`aria-valuenow`** attribute to indicate the current value of the progressbar.
30
+ - If the progressbar is describing the loading progress of a particular region of a page, authors SHOULD both use **`aria-describedby`** to reference the progressbar status, and set the **`aria-busy`** attribute to true on the region until it is finished loading. It is not possible for the user to alter the value of a progressbar because it is always read-only
31
+
32
+ ### Determinate vs Indeterminate usage
33
+
34
+ - If the progress to be indicated is determinate, use the ProgressBar component.
35
+ - If the progress to be indicated is indeterminate, use the [Loader](./?path=/story/components-loader--default) component instead.
@@ -0,0 +1,53 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React from 'react';
3
+ import DocsLayout from '../../../.storybook/storybookDocsLayout';
4
+ import { ProgressBar } from '../../index';
5
+ import ProgressBarReadMe from './ProgressBar.mdx';
6
+ import { jsx as ___EmotionJSX } from "@emotion/react";
7
+ export default {
8
+ title: 'Experimental/ProgressBar',
9
+ component: ProgressBar,
10
+ parameters: {
11
+ docs: {
12
+ page: function page() {
13
+ return ___EmotionJSX(React.Fragment, null, ___EmotionJSX(ProgressBarReadMe, null), ___EmotionJSX(DocsLayout, null));
14
+ },
15
+ source: {
16
+ type: 'code'
17
+ }
18
+ }
19
+ },
20
+ argTypes: {
21
+ isIndeterminate: {
22
+ table: {
23
+ disable: true
24
+ }
25
+ },
26
+ 'data-testid': {
27
+ table: {
28
+ disable: true
29
+ }
30
+ },
31
+ label: {
32
+ table: {
33
+ disable: true
34
+ }
35
+ },
36
+ showValueLabel: {
37
+ table: {
38
+ disable: true
39
+ }
40
+ },
41
+ valueLabel: {
42
+ table: {
43
+ disable: true
44
+ }
45
+ }
46
+ }
47
+ };
48
+ export var Default = function Default(args) {
49
+ return ___EmotionJSX(ProgressBar, _extends({}, args, {
50
+ value: 25,
51
+ "aria-label": "Progress Bar"
52
+ }));
53
+ };
@@ -0,0 +1,23 @@
1
+ import _Object$keys from "@babel/runtime-corejs3/core-js-stable/object/keys";
2
+ import _Object$getOwnPropertySymbols from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols";
3
+ import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
4
+ import _Object$getOwnPropertyDescriptor from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor";
5
+ import _forEachInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/for-each";
6
+ import _Object$getOwnPropertyDescriptors from "@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors";
7
+ import _Object$defineProperties from "@babel/runtime-corejs3/core-js-stable/object/define-properties";
8
+ import _Object$defineProperty from "@babel/runtime-corejs3/core-js-stable/object/define-property";
9
+ import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
10
+ 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; }
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context, _context2; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context = ownKeys(Object(source), !0)).call(_context, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context2 = ownKeys(Object(source))).call(_context2, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
12
+ var container = {
13
+ backgroundColor: 'neutral.90',
14
+ borderRadius: '3px',
15
+ height: '7px'
16
+ };
17
+ var percentageBar = _objectSpread(_objectSpread({}, container), {}, {
18
+ backgroundColor: 'active'
19
+ });
20
+ export default {
21
+ container: container,
22
+ percentageBar: percentageBar
23
+ };
@@ -0,0 +1,97 @@
1
+ import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
2
+ import React from 'react';
3
+ import { render, screen } from '@testing-library/react';
4
+ import { universalComponentTests } from '../../utils/testUtils/universalComponentTest';
5
+ import ProgressBar, { calculateBarWidth } from '.';
6
+ import { jsx as ___EmotionJSX } from "@emotion/react";
7
+ var testId = 'test-progressbar';
8
+ var defaultProps = {
9
+ 'data-testid': testId,
10
+ value: 25,
11
+ minValue: 0,
12
+ maxValue: 100
13
+ };
14
+ var getComponent = function getComponent() {
15
+ var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
16
+ return render(___EmotionJSX(ProgressBar, _extends({}, defaultProps, props, {
17
+ "aria-label": "Progress Bar"
18
+ })));
19
+ };
20
+
21
+ // Needs to be added to each components test file
22
+ universalComponentTests({
23
+ renderComponent: function renderComponent(props) {
24
+ return ___EmotionJSX(ProgressBar, _extends({}, defaultProps, props, {
25
+ "aria-label": "Progress Bar"
26
+ }));
27
+ }
28
+ });
29
+ test('ProgressBar component does load', function () {
30
+ getComponent();
31
+ var progressBar = screen.getByRole('progressbar', {
32
+ name: 'Progress Bar'
33
+ });
34
+ expect(progressBar).toBeInTheDocument();
35
+ });
36
+ test('should render a label', function () {
37
+ getComponent({
38
+ label: 'Loading...'
39
+ });
40
+ var label = screen.getByText('Loading...');
41
+ expect(label).toBeInTheDocument();
42
+ });
43
+ test('renders value as a percentage', function () {
44
+ getComponent({
45
+ value: 25
46
+ });
47
+ var value = screen.getByText('25%');
48
+ expect(value).toBeInTheDocument();
49
+ });
50
+ test('renders value as custom valueLabel instead of percentage', function () {
51
+ getComponent({
52
+ value: 25,
53
+ valueLabel: '25 of 100 dogs'
54
+ });
55
+ var value = screen.queryByText('25%');
56
+ var valueLabel = screen.getByText('25 of 100 dogs');
57
+ expect(value).not.toBeInTheDocument();
58
+ expect(valueLabel).toBeInTheDocument();
59
+ });
60
+ test('does not render value when showValueLabel is false', function () {
61
+ getComponent({
62
+ value: 25,
63
+ showValueLabel: false
64
+ });
65
+ var valueLabel = screen.queryByText('25%');
66
+ expect(valueLabel).not.toBeInTheDocument();
67
+ });
68
+ test('renders label and custom valueLabel when labe and valueLabel are present', function () {
69
+ getComponent({
70
+ value: 25,
71
+ label: 'Loading...',
72
+ valueLabel: '25 of 100 dogs'
73
+ });
74
+ var label = screen.getByText('Loading...');
75
+ var valueLabel = screen.getByText('25 of 100 dogs');
76
+ expect(label).toBeInTheDocument();
77
+ expect(valueLabel).toBeInTheDocument();
78
+ });
79
+ test('calculates bar width with default min and max values', function () {
80
+ expect(calculateBarWidth(25, 0, 100)).toBe('25%');
81
+ });
82
+ test('calculates bar width when value equals minValue', function () {
83
+ expect(calculateBarWidth(0, 0, 100)).toBe('0%');
84
+ });
85
+ test('calculates bar width when value equals maxValue', function () {
86
+ expect(calculateBarWidth(100, 0, 100)).toBe('100%');
87
+ });
88
+ test('throws error when value is less than minValue', function () {
89
+ expect(function () {
90
+ return calculateBarWidth(-10, 0, 100);
91
+ }).toThrow('Value cannot be less than minValue');
92
+ });
93
+ test('throws error when value is greater than maxValue', function () {
94
+ expect(function () {
95
+ return calculateBarWidth(110, 0, 100);
96
+ }).toThrow('Value cannot be greater than maxValue');
97
+ });
@@ -0,0 +1,2 @@
1
+ export { default } from './ProgressBar';
2
+ export * from './ProgressBar';
package/lib/index.js CHANGED
@@ -124,6 +124,7 @@ export * from './components/PasswordField';
124
124
  export { default as PopoverContainer } from './components/PopoverContainer';
125
125
  export * from './components/PopoverContainer';
126
126
  export { default as PopoverMenu } from './components/PopoverMenu';
127
+ export { default as ProgressBar } from './components/ProgressBar';
127
128
  export { default as Radio } from './components/Radio';
128
129
  export * from './components/Radio';
129
130
  export { default as RadioField } from './components/RadioField';
@@ -38,6 +38,7 @@ import navBar from '../../components/NavBar/NavBar.styles';
38
38
  import overlayPanel from '../../components/OverlayPanel/OverlayPanel.styles';
39
39
  import panelHeader from '../../components/PanelHeader/PanelHeader.styles';
40
40
  import popoverMenu from '../../components/PopoverMenu/PopoverMenu.styles';
41
+ import progressBar from '../../components/ProgressBar/ProgressBar.styles';
41
42
  import rockerButton from '../../components/RockerButton/RockerButton.styles';
42
43
  import scrollBox from '../../components/ScrollBox/ScrollBox.styles';
43
44
  import separator from '../../components/Separator/Separator.styles';
@@ -77,6 +78,7 @@ export default _objectSpread({
77
78
  overlayPanel: overlayPanel,
78
79
  popoverMenu: popoverMenu,
79
80
  panelHeader: panelHeader,
81
+ progressBar: progressBar,
80
82
  rockerButton: rockerButton,
81
83
  scrollBox: scrollBox,
82
84
  separator: separator,
@@ -29,6 +29,7 @@ export * from './navBar';
29
29
  export * from './overlayPanel';
30
30
  export * from './popoverContainer';
31
31
  export * from './popoverMenu';
32
+ export * from './progressBar';
32
33
  export * from './requirementsList';
33
34
  export * from './rockerButtonGroup';
34
35
  export * from './scrollBox';
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pingux/astro",
3
- "version": "2.59.0-alpha.0",
3
+ "version": "2.59.0",
4
4
  "description": "React component library for Ping Identity's design system",
5
5
  "repository": {
6
6
  "type": "git",
@@ -65,6 +65,7 @@
65
65
  "@react-aria/listbox": "~3.10.2",
66
66
  "@react-aria/live-announcer": "~3.1.1",
67
67
  "@react-aria/overlays": "^3.7.0",
68
+ "@react-aria/progress": "^3.4.9",
68
69
  "@react-aria/selection": "~3.10.1",
69
70
  "@react-aria/table": "^3.9.0",
70
71
  "@react-aria/tabs": "^3.8.3",
@@ -73,7 +74,6 @@
73
74
  "@react-aria/visually-hidden": "~3.6.0",
74
75
  "@react-spectrum/utils": "~3.6.1",
75
76
  "@react-stately/calendar": "3.0.1",
76
- "@react-stately/collections": "^3.10.5",
77
77
  "@react-stately/color": "~3.1.1",
78
78
  "@react-stately/datepicker": "^3.0.1",
79
79
  "@react-stately/dnd": "^3.2.6",
@@ -139,6 +139,7 @@
139
139
  "@emotion/babel-preset-css-prop": "^11.2.0",
140
140
  "@emotion/cache": "^11.4.0",
141
141
  "@emotion/eslint-plugin": "^11.2.0",
142
+ "@react-stately/collections": "^3.10.2",
142
143
  "@storybook/addon-a11y": "^7.1.0",
143
144
  "@storybook/addon-console": "^2.0.0",
144
145
  "@storybook/addon-docs": "^7.1.0",