@pingux/astro 1.2.0-alpha.5 → 1.2.0-alpha.9
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/HelpHint/HelpHint.js +24 -6
- package/lib/cjs/components/HelpHint/HelpHint.stories.js +57 -0
- package/lib/cjs/components/HelpHint/HelpHint.test.js +80 -0
- package/lib/cjs/components/NumberField/NumberField.js +3 -1
- package/lib/cjs/components/NumberField/NumberField.test.js +7 -0
- package/lib/cjs/components/OverlayPanel/OverlayPanel.js +2 -16
- package/lib/cjs/components/OverlayPanel/OverlayPanel.test.js +44 -0
- package/lib/cjs/styles/variants/buttons.js +5 -0
- package/lib/components/HelpHint/HelpHint.js +25 -5
- package/lib/components/HelpHint/HelpHint.stories.js +34 -0
- package/lib/components/HelpHint/HelpHint.test.js +58 -0
- package/lib/components/NumberField/NumberField.js +2 -1
- package/lib/components/NumberField/NumberField.test.js +7 -0
- package/lib/components/OverlayPanel/OverlayPanel.js +3 -16
- package/lib/components/OverlayPanel/OverlayPanel.test.js +38 -0
- package/lib/styles/variants/buttons.js +5 -0
- package/package.json +2 -2
@@ -18,8 +18,6 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-c
|
|
18
18
|
|
19
19
|
var _react = _interopRequireWildcard(require("react"));
|
20
20
|
|
21
|
-
var _HelpIcon = _interopRequireDefault(require("mdi-react/HelpIcon"));
|
22
|
-
|
23
21
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
24
22
|
|
25
23
|
var _IconButton = _interopRequireDefault(require("../IconButton"));
|
@@ -30,20 +28,40 @@ var _Icon = _interopRequireDefault(require("../Icon"));
|
|
30
28
|
|
31
29
|
var _react2 = require("@emotion/react");
|
32
30
|
|
31
|
+
var HelpIcon = function HelpIcon() {
|
32
|
+
return (0, _react2.jsx)("svg", {
|
33
|
+
width: "7",
|
34
|
+
height: "9",
|
35
|
+
viewBox: "0 0 7 9",
|
36
|
+
fill: "none",
|
37
|
+
xmlns: "http://www.w3.org/2000/svg"
|
38
|
+
}, (0, _react2.jsx)("path", {
|
39
|
+
d: "M2.56685 7.306V9H4.29385V7.306H2.56685ZM0.795848 3.676H2.41285C2.41285 3.478 2.43485 3.29467 2.47885 3.126C2.52285 2.95 2.58885 2.79967 2.67685 2.675C2.77218 2.543 2.88951 2.44033 3.02885 2.367C3.17551 2.28633 3.34785 2.246 3.54585 2.246C3.83918 2.246 4.06651 2.32667 4.22785 2.488C4.39651 2.64933 4.48085 2.89867 4.48085 3.236C4.48818 3.434 4.45151 3.599 4.37085 3.731C4.29751 3.863 4.19851 3.984 4.07385 4.094C3.94918 4.204 3.81351 4.314 3.66685 4.424C3.52018 4.534 3.38085 4.666 3.24885 4.82C3.11685 4.96667 2.99951 5.14633 2.89685 5.359C2.80151 5.57167 2.74285 5.83567 2.72085 6.151V6.646H4.20585V6.228C4.23518 6.008 4.30485 5.82467 4.41485 5.678C4.53218 5.53133 4.66418 5.403 4.81085 5.293C4.95751 5.17567 5.11151 5.062 5.27285 4.952C5.44151 4.83467 5.59185 4.69533 5.72385 4.534C5.86318 4.37267 5.97685 4.17833 6.06485 3.951C6.16018 3.72367 6.20785 3.434 6.20785 3.082C6.20785 2.86933 6.16018 2.642 6.06485 2.4C5.97685 2.15067 5.82651 1.91967 5.61385 1.707C5.40118 1.49433 5.11885 1.31833 4.76685 1.179C4.42218 1.03233 3.98951 0.959 3.46885 0.959C3.06551 0.959 2.69885 1.02867 2.36885 1.168C2.04618 1.3 1.76751 1.487 1.53285 1.729C1.30551 1.971 1.12585 2.257 0.993848 2.587C0.869181 2.917 0.803181 3.28 0.795848 3.676Z",
|
40
|
+
fill: "#3B4A58"
|
41
|
+
}));
|
42
|
+
};
|
43
|
+
/**
|
44
|
+
* A `HelpHint` is a composed component using tooltip trigger and icon button.
|
45
|
+
*
|
46
|
+
* For customization the trigger icon,
|
47
|
+
* please see the [TooltipTrigger](./?path=/docs/tooltiptrigger--default) docs.
|
48
|
+
*/
|
49
|
+
|
50
|
+
|
33
51
|
var HelpHint = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
34
52
|
var children = props.children,
|
35
53
|
tooltipProps = props.tooltipProps,
|
36
54
|
iconButtonProps = props.iconButtonProps,
|
37
55
|
others = (0, _objectWithoutProperties2["default"])(props, ["children", "tooltipProps", "iconButtonProps"]);
|
38
56
|
return (0, _react2.jsx)(_TooltipTrigger["default"], (0, _extends2["default"])({
|
39
|
-
ref: ref
|
40
|
-
|
57
|
+
ref: ref,
|
58
|
+
direction: "top"
|
59
|
+
}, others, tooltipProps), (0, _react2.jsx)(_IconButton["default"], (0, _extends2["default"])({
|
41
60
|
variant: "helpHint",
|
42
61
|
"aria-label": "label help hint",
|
43
62
|
"data-testid": "help-hint__button"
|
44
63
|
}, iconButtonProps), (0, _react2.jsx)(_Icon["default"], {
|
45
|
-
icon:
|
46
|
-
size: "11px"
|
64
|
+
icon: HelpIcon
|
47
65
|
})), (0, _react2.jsx)(_TooltipTrigger.Tooltip, tooltipProps, children));
|
48
66
|
});
|
49
67
|
HelpHint.propTypes = {
|
@@ -0,0 +1,57 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
|
6
|
+
|
7
|
+
_Object$defineProperty(exports, "__esModule", {
|
8
|
+
value: true
|
9
|
+
});
|
10
|
+
|
11
|
+
exports.WithTooltipAndIconButtonProps = exports.Default = exports["default"] = void 0;
|
12
|
+
|
13
|
+
var _react = _interopRequireDefault(require("react"));
|
14
|
+
|
15
|
+
var _ = _interopRequireDefault(require("."));
|
16
|
+
|
17
|
+
var _Box = _interopRequireDefault(require("../Box"));
|
18
|
+
|
19
|
+
var _react2 = require("@emotion/react");
|
20
|
+
|
21
|
+
var _default = {
|
22
|
+
title: 'HelpHint',
|
23
|
+
component: _["default"],
|
24
|
+
argTypes: {
|
25
|
+
children: {
|
26
|
+
description: 'Tooltip content',
|
27
|
+
defaultValue: 'Text of the tooltip right here...',
|
28
|
+
control: {
|
29
|
+
type: 'text'
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
};
|
34
|
+
exports["default"] = _default;
|
35
|
+
|
36
|
+
var Default = function Default(args) {
|
37
|
+
return (0, _react2.jsx)(_Box["default"], {
|
38
|
+
p: 50
|
39
|
+
}, (0, _react2.jsx)(_["default"], args));
|
40
|
+
};
|
41
|
+
|
42
|
+
exports.Default = Default;
|
43
|
+
|
44
|
+
var WithTooltipAndIconButtonProps = function WithTooltipAndIconButtonProps() {
|
45
|
+
return (0, _react2.jsx)(_Box["default"], {
|
46
|
+
p: 50
|
47
|
+
}, (0, _react2.jsx)(_["default"], {
|
48
|
+
tooltipProps: {
|
49
|
+
direction: 'bottom'
|
50
|
+
},
|
51
|
+
iconButtonProps: {
|
52
|
+
'aria-label': 'Help hint'
|
53
|
+
}
|
54
|
+
}, "Text of the tooltip right here..."));
|
55
|
+
};
|
56
|
+
|
57
|
+
exports.WithTooltipAndIconButtonProps = WithTooltipAndIconButtonProps;
|
@@ -0,0 +1,80 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
6
|
+
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
8
|
+
|
9
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
10
|
+
|
11
|
+
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
12
|
+
|
13
|
+
var _testAxe = _interopRequireDefault(require("../../utils/testUtils/testAxe"));
|
14
|
+
|
15
|
+
var _HelpHint = _interopRequireDefault(require("./HelpHint"));
|
16
|
+
|
17
|
+
var _react2 = require("@emotion/react");
|
18
|
+
|
19
|
+
var testId = 'help-hint__button';
|
20
|
+
var tooltipValue = 'Some text';
|
21
|
+
var defaultProps = {
|
22
|
+
children: tooltipValue
|
23
|
+
};
|
24
|
+
|
25
|
+
var getComponent = function getComponent() {
|
26
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
27
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_HelpHint["default"], (0, _extends2["default"])({}, defaultProps, props)));
|
28
|
+
}; // Need to be added to each test file to test accessibility using axe.
|
29
|
+
|
30
|
+
|
31
|
+
(0, _testAxe["default"])(getComponent);
|
32
|
+
test('renders HelpHint component', function () {
|
33
|
+
getComponent();
|
34
|
+
|
35
|
+
var helpHintButton = _testWrapper.screen.getByTestId(testId);
|
36
|
+
|
37
|
+
expect(helpHintButton).toBeInTheDocument();
|
38
|
+
});
|
39
|
+
test('shows tooltip on hover', function () {
|
40
|
+
getComponent();
|
41
|
+
|
42
|
+
var helpHintButton = _testWrapper.screen.getByTestId(testId);
|
43
|
+
|
44
|
+
expect(_testWrapper.screen.queryByText(tooltipValue)).not.toBeInTheDocument();
|
45
|
+
|
46
|
+
_testWrapper.fireEvent.mouseMove(helpHintButton);
|
47
|
+
|
48
|
+
_testWrapper.fireEvent.mouseEnter(helpHintButton);
|
49
|
+
|
50
|
+
expect(_testWrapper.screen.getByText(tooltipValue)).toBeInTheDocument();
|
51
|
+
});
|
52
|
+
test('shows tooltip on focus', function () {
|
53
|
+
getComponent();
|
54
|
+
|
55
|
+
var helpHintButton = _testWrapper.screen.getByTestId(testId);
|
56
|
+
|
57
|
+
expect(_testWrapper.screen.queryByText(tooltipValue)).not.toBeInTheDocument();
|
58
|
+
|
59
|
+
_userEvent["default"].tab();
|
60
|
+
|
61
|
+
expect(helpHintButton).toHaveFocus();
|
62
|
+
expect(_testWrapper.screen.queryByText(tooltipValue)).toBeInTheDocument();
|
63
|
+
});
|
64
|
+
test('applies tooltipProps', function () {
|
65
|
+
getComponent({
|
66
|
+
tooltipProps: {
|
67
|
+
isOpen: true
|
68
|
+
}
|
69
|
+
});
|
70
|
+
expect(_testWrapper.screen.getByText(tooltipValue)).toBeInTheDocument();
|
71
|
+
});
|
72
|
+
test('applies iconButtonProps', function () {
|
73
|
+
var newLabel = 'New label';
|
74
|
+
getComponent({
|
75
|
+
iconButtonProps: {
|
76
|
+
'aria-label': newLabel
|
77
|
+
}
|
78
|
+
});
|
79
|
+
expect(_testWrapper.screen.getByLabelText(newLabel)).toBeInTheDocument();
|
80
|
+
});
|
@@ -50,6 +50,8 @@ var _i18n = require("@react-aria/i18n");
|
|
50
50
|
|
51
51
|
var _utils = require("@react-aria/utils");
|
52
52
|
|
53
|
+
var _omit = _interopRequireDefault(require("lodash/omit"));
|
54
|
+
|
53
55
|
var _statuses = _interopRequireDefault(require("../../utils/devUtils/constants/statuses"));
|
54
56
|
|
55
57
|
var _index = require("../../index");
|
@@ -130,7 +132,7 @@ var NumberField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
130
132
|
ref: inputRef // we don't want to merge this props, we want to
|
131
133
|
// overwrite them like defaultValue, value, ect.
|
132
134
|
|
133
|
-
}, fieldControlProps, inputProps)), ControlArrows), helperText && (0, _react2.jsx)(_index.FieldHelperText, {
|
135
|
+
}, fieldControlProps, (0, _omit["default"])(inputProps, 'name'))), ControlArrows), helperText && (0, _react2.jsx)(_index.FieldHelperText, {
|
134
136
|
status: status
|
135
137
|
}, helperText)));
|
136
138
|
});
|
@@ -169,4 +169,11 @@ test('increment and decrement buttons shouldn\'t be able to be focused via keybo
|
|
169
169
|
_userEvent["default"].tab();
|
170
170
|
|
171
171
|
expect(_testWrapper.screen.getByLabelText('arrow-down')).not.toHaveFocus();
|
172
|
+
});
|
173
|
+
test('number field input receiving name attribute', function () {
|
174
|
+
var testName = 'testName';
|
175
|
+
getComponent({
|
176
|
+
name: testName
|
177
|
+
});
|
178
|
+
expect(_testWrapper.screen.getByLabelText(testLabel)).toHaveAttribute('name', testName);
|
172
179
|
});
|
@@ -18,8 +18,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/e
|
|
18
18
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
20
20
|
|
21
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
22
|
-
|
23
21
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
24
22
|
|
25
23
|
var _react = _interopRequireWildcard(require("react"));
|
@@ -52,14 +50,8 @@ var OverlayPanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
52
50
|
onClose = _useOverlayPanelState.onClose;
|
53
51
|
|
54
52
|
var overlayPanelRef = (0, _react.useRef)();
|
55
|
-
|
56
|
-
var _useState = (0, _react.useState)(true),
|
57
|
-
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
58
|
-
contain = _useState2[0],
|
59
|
-
setIsContained = _useState2[1];
|
60
53
|
/* istanbul ignore next */
|
61
54
|
|
62
|
-
|
63
55
|
(0, _react.useImperativeHandle)(ref, function () {
|
64
56
|
return overlayPanelRef.current;
|
65
57
|
});
|
@@ -73,18 +65,12 @@ var OverlayPanel = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
73
65
|
e.stopPropagation();
|
74
66
|
|
75
67
|
if (e.key === 'Escape') {
|
76
|
-
|
68
|
+
onClose(state, triggerRef, onCloseProp);
|
77
69
|
}
|
78
70
|
};
|
79
71
|
|
80
|
-
(0, _react.useEffect)(function () {
|
81
|
-
if (!contain && onClose) {
|
82
|
-
onClose(state, triggerRef, onCloseProp);
|
83
|
-
}
|
84
|
-
}, [contain]);
|
85
72
|
return (0, _react2.jsx)(_focus.FocusScope, {
|
86
|
-
autoFocus: true
|
87
|
-
contain: contain
|
73
|
+
autoFocus: true
|
88
74
|
}, (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
|
89
75
|
variant: "overlayPanel.overlayPanel",
|
90
76
|
ref: overlayPanelRef
|
@@ -79,6 +79,15 @@ test('onClose callback fires when provided', function () {
|
|
79
79
|
|
80
80
|
expect(onClose).toHaveBeenCalled();
|
81
81
|
});
|
82
|
+
test('custom classname can be passed', function () {
|
83
|
+
getComponent({
|
84
|
+
className: 'testing-class'
|
85
|
+
});
|
86
|
+
|
87
|
+
var overlayPanel = _testWrapper.screen.getByTestId(testId);
|
88
|
+
|
89
|
+
expect(overlayPanel).toHaveClass('testing-class');
|
90
|
+
});
|
82
91
|
test('neither callback fires when not provided', function () {
|
83
92
|
var onClose = jest.fn();
|
84
93
|
getComponent({
|
@@ -137,4 +146,39 @@ test('triggerRef.current.focus() fires when provided', function () {
|
|
137
146
|
});
|
138
147
|
|
139
148
|
expect(focusFunction).toHaveBeenCalled();
|
149
|
+
});
|
150
|
+
test('triggerRef.current.focus() does not fire when key other than esc is pressed', function () {
|
151
|
+
var onClose = jest.fn();
|
152
|
+
var focusFunction = jest.fn();
|
153
|
+
var state = {
|
154
|
+
close: onClose
|
155
|
+
};
|
156
|
+
var triggerRef = {
|
157
|
+
current: {
|
158
|
+
focus: focusFunction
|
159
|
+
}
|
160
|
+
};
|
161
|
+
getComponent({
|
162
|
+
state: state,
|
163
|
+
children: (0, _react2.jsx)("div", null, "Test"),
|
164
|
+
triggerRef: triggerRef
|
165
|
+
});
|
166
|
+
|
167
|
+
var overlayPanel = _testWrapper.screen.getByTestId(testId);
|
168
|
+
|
169
|
+
_testWrapper.fireEvent.keyDown(overlayPanel, {
|
170
|
+
key: 'KeyA',
|
171
|
+
code: 'KeyA',
|
172
|
+
keyCode: 65,
|
173
|
+
charCode: 65
|
174
|
+
});
|
175
|
+
|
176
|
+
_testWrapper.fireEvent.keyUp(overlayPanel, {
|
177
|
+
key: 'KeyA',
|
178
|
+
code: 'KeyA',
|
179
|
+
keyCode: 65,
|
180
|
+
charCode: 65
|
181
|
+
});
|
182
|
+
|
183
|
+
expect(focusFunction).not.toHaveBeenCalled();
|
140
184
|
});
|
@@ -317,6 +317,11 @@ var helpHint = _objectSpread(_objectSpread({}, iconButton), {}, {
|
|
317
317
|
ml: '5px',
|
318
318
|
maxWidth: '13px',
|
319
319
|
maxHeight: '14px',
|
320
|
+
borderRadius: '5.5px',
|
321
|
+
'svg': {
|
322
|
+
'height': '100%',
|
323
|
+
mb: 0.75
|
324
|
+
},
|
320
325
|
'path': {
|
321
326
|
fill: 'neutral.20'
|
322
327
|
},
|
@@ -1,12 +1,32 @@
|
|
1
1
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
2
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
3
3
|
import React, { forwardRef } from 'react';
|
4
|
-
import HelpIcon from 'mdi-react/HelpIcon';
|
5
4
|
import PropTypes from 'prop-types';
|
6
5
|
import IconButton from '../IconButton';
|
7
6
|
import TooltipTrigger, { Tooltip } from '../TooltipTrigger';
|
8
7
|
import Icon from '../Icon';
|
9
8
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
9
|
+
|
10
|
+
var HelpIcon = function HelpIcon() {
|
11
|
+
return ___EmotionJSX("svg", {
|
12
|
+
width: "7",
|
13
|
+
height: "9",
|
14
|
+
viewBox: "0 0 7 9",
|
15
|
+
fill: "none",
|
16
|
+
xmlns: "http://www.w3.org/2000/svg"
|
17
|
+
}, ___EmotionJSX("path", {
|
18
|
+
d: "M2.56685 7.306V9H4.29385V7.306H2.56685ZM0.795848 3.676H2.41285C2.41285 3.478 2.43485 3.29467 2.47885 3.126C2.52285 2.95 2.58885 2.79967 2.67685 2.675C2.77218 2.543 2.88951 2.44033 3.02885 2.367C3.17551 2.28633 3.34785 2.246 3.54585 2.246C3.83918 2.246 4.06651 2.32667 4.22785 2.488C4.39651 2.64933 4.48085 2.89867 4.48085 3.236C4.48818 3.434 4.45151 3.599 4.37085 3.731C4.29751 3.863 4.19851 3.984 4.07385 4.094C3.94918 4.204 3.81351 4.314 3.66685 4.424C3.52018 4.534 3.38085 4.666 3.24885 4.82C3.11685 4.96667 2.99951 5.14633 2.89685 5.359C2.80151 5.57167 2.74285 5.83567 2.72085 6.151V6.646H4.20585V6.228C4.23518 6.008 4.30485 5.82467 4.41485 5.678C4.53218 5.53133 4.66418 5.403 4.81085 5.293C4.95751 5.17567 5.11151 5.062 5.27285 4.952C5.44151 4.83467 5.59185 4.69533 5.72385 4.534C5.86318 4.37267 5.97685 4.17833 6.06485 3.951C6.16018 3.72367 6.20785 3.434 6.20785 3.082C6.20785 2.86933 6.16018 2.642 6.06485 2.4C5.97685 2.15067 5.82651 1.91967 5.61385 1.707C5.40118 1.49433 5.11885 1.31833 4.76685 1.179C4.42218 1.03233 3.98951 0.959 3.46885 0.959C3.06551 0.959 2.69885 1.02867 2.36885 1.168C2.04618 1.3 1.76751 1.487 1.53285 1.729C1.30551 1.971 1.12585 2.257 0.993848 2.587C0.869181 2.917 0.803181 3.28 0.795848 3.676Z",
|
19
|
+
fill: "#3B4A58"
|
20
|
+
}));
|
21
|
+
};
|
22
|
+
/**
|
23
|
+
* A `HelpHint` is a composed component using tooltip trigger and icon button.
|
24
|
+
*
|
25
|
+
* For customization the trigger icon,
|
26
|
+
* please see the [TooltipTrigger](./?path=/docs/tooltiptrigger--default) docs.
|
27
|
+
*/
|
28
|
+
|
29
|
+
|
10
30
|
var HelpHint = /*#__PURE__*/forwardRef(function (props, ref) {
|
11
31
|
var children = props.children,
|
12
32
|
tooltipProps = props.tooltipProps,
|
@@ -14,14 +34,14 @@ var HelpHint = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
14
34
|
others = _objectWithoutProperties(props, ["children", "tooltipProps", "iconButtonProps"]);
|
15
35
|
|
16
36
|
return ___EmotionJSX(TooltipTrigger, _extends({
|
17
|
-
ref: ref
|
18
|
-
|
37
|
+
ref: ref,
|
38
|
+
direction: "top"
|
39
|
+
}, others, tooltipProps), ___EmotionJSX(IconButton, _extends({
|
19
40
|
variant: "helpHint",
|
20
41
|
"aria-label": "label help hint",
|
21
42
|
"data-testid": "help-hint__button"
|
22
43
|
}, iconButtonProps), ___EmotionJSX(Icon, {
|
23
|
-
icon: HelpIcon
|
24
|
-
size: "11px"
|
44
|
+
icon: HelpIcon
|
25
45
|
})), ___EmotionJSX(Tooltip, tooltipProps, children));
|
26
46
|
});
|
27
47
|
HelpHint.propTypes = {
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import HelpHint from '.';
|
3
|
+
import Box from '../Box';
|
4
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
5
|
+
export default {
|
6
|
+
title: 'HelpHint',
|
7
|
+
component: HelpHint,
|
8
|
+
argTypes: {
|
9
|
+
children: {
|
10
|
+
description: 'Tooltip content',
|
11
|
+
defaultValue: 'Text of the tooltip right here...',
|
12
|
+
control: {
|
13
|
+
type: 'text'
|
14
|
+
}
|
15
|
+
}
|
16
|
+
}
|
17
|
+
};
|
18
|
+
export var Default = function Default(args) {
|
19
|
+
return ___EmotionJSX(Box, {
|
20
|
+
p: 50
|
21
|
+
}, ___EmotionJSX(HelpHint, args));
|
22
|
+
};
|
23
|
+
export var WithTooltipAndIconButtonProps = function WithTooltipAndIconButtonProps() {
|
24
|
+
return ___EmotionJSX(Box, {
|
25
|
+
p: 50
|
26
|
+
}, ___EmotionJSX(HelpHint, {
|
27
|
+
tooltipProps: {
|
28
|
+
direction: 'bottom'
|
29
|
+
},
|
30
|
+
iconButtonProps: {
|
31
|
+
'aria-label': 'Help hint'
|
32
|
+
}
|
33
|
+
}, "Text of the tooltip right here..."));
|
34
|
+
};
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
2
|
+
import React from 'react';
|
3
|
+
import userEvent from '@testing-library/user-event';
|
4
|
+
import { fireEvent, render, screen } from '../../utils/testUtils/testWrapper';
|
5
|
+
import axeTest from '../../utils/testUtils/testAxe';
|
6
|
+
import HelpHint from './HelpHint';
|
7
|
+
import { jsx as ___EmotionJSX } from "@emotion/react";
|
8
|
+
var testId = 'help-hint__button';
|
9
|
+
var tooltipValue = 'Some text';
|
10
|
+
var defaultProps = {
|
11
|
+
children: tooltipValue
|
12
|
+
};
|
13
|
+
|
14
|
+
var getComponent = function getComponent() {
|
15
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
16
|
+
return render(___EmotionJSX(HelpHint, _extends({}, defaultProps, props)));
|
17
|
+
}; // Need to be added to each test file to test accessibility using axe.
|
18
|
+
|
19
|
+
|
20
|
+
axeTest(getComponent);
|
21
|
+
test('renders HelpHint component', function () {
|
22
|
+
getComponent();
|
23
|
+
var helpHintButton = screen.getByTestId(testId);
|
24
|
+
expect(helpHintButton).toBeInTheDocument();
|
25
|
+
});
|
26
|
+
test('shows tooltip on hover', function () {
|
27
|
+
getComponent();
|
28
|
+
var helpHintButton = screen.getByTestId(testId);
|
29
|
+
expect(screen.queryByText(tooltipValue)).not.toBeInTheDocument();
|
30
|
+
fireEvent.mouseMove(helpHintButton);
|
31
|
+
fireEvent.mouseEnter(helpHintButton);
|
32
|
+
expect(screen.getByText(tooltipValue)).toBeInTheDocument();
|
33
|
+
});
|
34
|
+
test('shows tooltip on focus', function () {
|
35
|
+
getComponent();
|
36
|
+
var helpHintButton = screen.getByTestId(testId);
|
37
|
+
expect(screen.queryByText(tooltipValue)).not.toBeInTheDocument();
|
38
|
+
userEvent.tab();
|
39
|
+
expect(helpHintButton).toHaveFocus();
|
40
|
+
expect(screen.queryByText(tooltipValue)).toBeInTheDocument();
|
41
|
+
});
|
42
|
+
test('applies tooltipProps', function () {
|
43
|
+
getComponent({
|
44
|
+
tooltipProps: {
|
45
|
+
isOpen: true
|
46
|
+
}
|
47
|
+
});
|
48
|
+
expect(screen.getByText(tooltipValue)).toBeInTheDocument();
|
49
|
+
});
|
50
|
+
test('applies iconButtonProps', function () {
|
51
|
+
var newLabel = 'New label';
|
52
|
+
getComponent({
|
53
|
+
iconButtonProps: {
|
54
|
+
'aria-label': newLabel
|
55
|
+
}
|
56
|
+
});
|
57
|
+
expect(screen.getByLabelText(newLabel)).toBeInTheDocument();
|
58
|
+
});
|
@@ -22,6 +22,7 @@ import { useNumberField } from '@react-aria/numberfield';
|
|
22
22
|
import { useNumberFieldState } from '@react-stately/numberfield';
|
23
23
|
import { useLocale } from '@react-aria/i18n';
|
24
24
|
import { mergeProps } from '@react-aria/utils';
|
25
|
+
import omit from 'lodash/omit';
|
25
26
|
import statuses from '../../utils/devUtils/constants/statuses';
|
26
27
|
import { Box, FieldHelperText, Icon, IconButton, Input, Label } from '../../index';
|
27
28
|
import { useField, usePropWarning } from '../../hooks';
|
@@ -94,7 +95,7 @@ var NumberField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
94
95
|
ref: inputRef // we don't want to merge this props, we want to
|
95
96
|
// overwrite them like defaultValue, value, ect.
|
96
97
|
|
97
|
-
}, fieldControlProps, inputProps)), ControlArrows), helperText && ___EmotionJSX(FieldHelperText, {
|
98
|
+
}, fieldControlProps, omit(inputProps, 'name'))), ControlArrows), helperText && ___EmotionJSX(FieldHelperText, {
|
98
99
|
status: status
|
99
100
|
}, helperText)));
|
100
101
|
});
|
@@ -128,4 +128,11 @@ test('increment and decrement buttons shouldn\'t be able to be focused via keybo
|
|
128
128
|
expect(screen.getByLabelText('arrow-up')).not.toHaveFocus();
|
129
129
|
userEvent.tab();
|
130
130
|
expect(screen.getByLabelText('arrow-down')).not.toHaveFocus();
|
131
|
+
});
|
132
|
+
test('number field input receiving name attribute', function () {
|
133
|
+
var testName = 'testName';
|
134
|
+
getComponent({
|
135
|
+
name: testName
|
136
|
+
});
|
137
|
+
expect(screen.getByLabelText(testLabel)).toHaveAttribute('name', testName);
|
131
138
|
});
|
@@ -1,9 +1,8 @@
|
|
1
1
|
import _Object$values from "@babel/runtime-corejs3/core-js-stable/object/values";
|
2
2
|
import _extends from "@babel/runtime-corejs3/helpers/esm/extends";
|
3
3
|
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
4
|
-
import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
5
4
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
6
|
-
import React, { forwardRef, useRef, useImperativeHandle
|
5
|
+
import React, { forwardRef, useRef, useImperativeHandle } from 'react';
|
7
6
|
import PropTypes from 'prop-types';
|
8
7
|
import { FocusScope } from '@react-aria/focus';
|
9
8
|
import Box from '../Box';
|
@@ -26,14 +25,8 @@ var OverlayPanel = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
26
25
|
onClose = _useOverlayPanelState.onClose;
|
27
26
|
|
28
27
|
var overlayPanelRef = useRef();
|
29
|
-
|
30
|
-
var _useState = useState(true),
|
31
|
-
_useState2 = _slicedToArray(_useState, 2),
|
32
|
-
contain = _useState2[0],
|
33
|
-
setIsContained = _useState2[1];
|
34
28
|
/* istanbul ignore next */
|
35
29
|
|
36
|
-
|
37
30
|
useImperativeHandle(ref, function () {
|
38
31
|
return overlayPanelRef.current;
|
39
32
|
});
|
@@ -47,18 +40,12 @@ var OverlayPanel = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
47
40
|
e.stopPropagation();
|
48
41
|
|
49
42
|
if (e.key === 'Escape') {
|
50
|
-
|
43
|
+
onClose(state, triggerRef, onCloseProp);
|
51
44
|
}
|
52
45
|
};
|
53
46
|
|
54
|
-
useEffect(function () {
|
55
|
-
if (!contain && onClose) {
|
56
|
-
onClose(state, triggerRef, onCloseProp);
|
57
|
-
}
|
58
|
-
}, [contain]);
|
59
47
|
return ___EmotionJSX(FocusScope, {
|
60
|
-
autoFocus: true
|
61
|
-
contain: contain
|
48
|
+
autoFocus: true
|
62
49
|
}, ___EmotionJSX(Box, _extends({
|
63
50
|
variant: "overlayPanel.overlayPanel",
|
64
51
|
ref: overlayPanelRef
|
@@ -60,6 +60,13 @@ test('onClose callback fires when provided', function () {
|
|
60
60
|
});
|
61
61
|
expect(onClose).toHaveBeenCalled();
|
62
62
|
});
|
63
|
+
test('custom classname can be passed', function () {
|
64
|
+
getComponent({
|
65
|
+
className: 'testing-class'
|
66
|
+
});
|
67
|
+
var overlayPanel = screen.getByTestId(testId);
|
68
|
+
expect(overlayPanel).toHaveClass('testing-class');
|
69
|
+
});
|
63
70
|
test('neither callback fires when not provided', function () {
|
64
71
|
var onClose = jest.fn();
|
65
72
|
getComponent({
|
@@ -110,4 +117,35 @@ test('triggerRef.current.focus() fires when provided', function () {
|
|
110
117
|
charCode: 27
|
111
118
|
});
|
112
119
|
expect(focusFunction).toHaveBeenCalled();
|
120
|
+
});
|
121
|
+
test('triggerRef.current.focus() does not fire when key other than esc is pressed', function () {
|
122
|
+
var onClose = jest.fn();
|
123
|
+
var focusFunction = jest.fn();
|
124
|
+
var state = {
|
125
|
+
close: onClose
|
126
|
+
};
|
127
|
+
var triggerRef = {
|
128
|
+
current: {
|
129
|
+
focus: focusFunction
|
130
|
+
}
|
131
|
+
};
|
132
|
+
getComponent({
|
133
|
+
state: state,
|
134
|
+
children: ___EmotionJSX("div", null, "Test"),
|
135
|
+
triggerRef: triggerRef
|
136
|
+
});
|
137
|
+
var overlayPanel = screen.getByTestId(testId);
|
138
|
+
fireEvent.keyDown(overlayPanel, {
|
139
|
+
key: 'KeyA',
|
140
|
+
code: 'KeyA',
|
141
|
+
keyCode: 65,
|
142
|
+
charCode: 65
|
143
|
+
});
|
144
|
+
fireEvent.keyUp(overlayPanel, {
|
145
|
+
key: 'KeyA',
|
146
|
+
code: 'KeyA',
|
147
|
+
keyCode: 65,
|
148
|
+
charCode: 65
|
149
|
+
});
|
150
|
+
expect(focusFunction).not.toHaveBeenCalled();
|
113
151
|
});
|
@@ -295,6 +295,11 @@ var helpHint = _objectSpread(_objectSpread({}, iconButton), {}, {
|
|
295
295
|
ml: '5px',
|
296
296
|
maxWidth: '13px',
|
297
297
|
maxHeight: '14px',
|
298
|
+
borderRadius: '5.5px',
|
299
|
+
'svg': {
|
300
|
+
'height': '100%',
|
301
|
+
mb: 0.75
|
302
|
+
},
|
298
303
|
'path': {
|
299
304
|
fill: 'neutral.20'
|
300
305
|
},
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@pingux/astro",
|
3
|
-
"version": "1.2.0-alpha.
|
3
|
+
"version": "1.2.0-alpha.9",
|
4
4
|
"description": "PingUX themeable React component library",
|
5
5
|
"author": "uxdev@pingidentity.com",
|
6
6
|
"license": "Apache-2.0",
|
@@ -132,7 +132,7 @@
|
|
132
132
|
"lodash": "^4.17.21",
|
133
133
|
"mdi-react": "^7.4.0",
|
134
134
|
"moment": "^2.29.1",
|
135
|
-
"prism-react-renderer": "
|
135
|
+
"prism-react-renderer": "1.2.1",
|
136
136
|
"prop-types": "^15.7.2",
|
137
137
|
"react-calendar": "^3.4.0",
|
138
138
|
"react-color": "^2.19.3",
|