@pingux/astro 1.1.0-alpha.0 → 1.1.0-alpha.12
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/CHANGELOG.md +132 -0
- package/lib/cjs/components/AccordionGridGroup/AccordionGridGroup.test.js +24 -0
- package/lib/cjs/components/AccordionGridItem/AccordionGridItemBody.js +1 -1
- package/lib/cjs/components/AccordionGridItem/AccordionGridItemHeader.js +1 -1
- package/lib/cjs/components/AccordionGroup/AccordionGroup.test.js +33 -1
- package/lib/cjs/components/AccordionItem/AccordionItem.js +5 -4
- package/lib/cjs/components/Button/Button.js +1 -2
- package/lib/cjs/components/Button/Button.stories.js +2 -1
- package/lib/cjs/components/Button/Button.test.js +2 -1
- package/lib/cjs/components/CodeView/CodeView.js +165 -0
- package/lib/cjs/components/CodeView/CodeView.stories.js +93 -0
- package/lib/cjs/components/CodeView/CodeView.test.js +211 -0
- package/lib/cjs/components/CodeView/index.js +18 -0
- package/lib/cjs/components/ColorField/ColorField.js +1 -0
- package/lib/cjs/components/ComboBoxField/ComboBoxField.js +7 -0
- package/lib/cjs/components/ComboBoxField/ComboBoxField.stories.js +25 -1
- package/lib/cjs/components/ComboBoxField/ComboBoxField.test.js +44 -0
- package/lib/cjs/components/CopyText/CopyText.js +34 -11
- package/lib/cjs/components/FileInputField/FileItem.js +2 -1
- package/lib/cjs/components/IconButton/IconButton.js +1 -1
- package/lib/cjs/components/IconButton/IconButton.stories.js +8 -17
- package/lib/cjs/components/IconButton/IconButton.test.js +4 -5
- package/lib/cjs/components/ImageUploadField/ImagePreviewButton.js +2 -1
- package/lib/cjs/components/List/List.js +3 -0
- package/lib/cjs/components/List/List.stories.js +7 -2
- package/lib/cjs/components/ListBox/ListBox.js +3 -6
- package/lib/cjs/components/ListBox/ListBox.test.js +2 -0
- package/lib/cjs/components/ListBox/Option.js +6 -0
- package/lib/cjs/components/ListView/ListView.stories.js +580 -39
- package/lib/cjs/components/Messages/Message.js +2 -2
- package/lib/cjs/components/MultivaluesField/MultivaluesField.js +2 -1
- package/lib/cjs/components/OverlayPanel/OverlayPanel.stories.js +15 -14
- package/lib/cjs/components/PopoverContainer/PopoverContainer.test.js +15 -0
- package/lib/cjs/components/TextArea/TextArea.js +5 -1
- package/lib/cjs/components/TooltipTrigger/TooltipTrigger.js +10 -5
- package/lib/cjs/index.js +10 -0
- package/lib/cjs/styles/variants/accordion.js +2 -2
- package/lib/cjs/styles/variants/buttons.js +11 -1
- package/lib/cjs/styles/variants/codeView.js +80 -0
- package/lib/cjs/styles/variants/variants.js +3 -0
- package/lib/components/AccordionGridGroup/AccordionGridGroup.test.js +23 -1
- package/lib/components/AccordionGridItem/AccordionGridItemBody.js +1 -1
- package/lib/components/AccordionGridItem/AccordionGridItemHeader.js +1 -1
- package/lib/components/AccordionGroup/AccordionGroup.test.js +30 -1
- package/lib/components/AccordionItem/AccordionItem.js +6 -5
- package/lib/components/Button/Button.js +2 -3
- package/lib/components/Button/Button.stories.js +2 -1
- package/lib/components/Button/Button.test.js +2 -1
- package/lib/components/CodeView/CodeView.js +130 -0
- package/lib/components/CodeView/CodeView.stories.js +67 -0
- package/lib/components/CodeView/CodeView.test.js +171 -0
- package/lib/components/CodeView/index.js +1 -0
- package/lib/components/ColorField/ColorField.js +1 -0
- package/lib/components/ComboBoxField/ComboBoxField.js +7 -0
- package/lib/components/ComboBoxField/ComboBoxField.stories.js +21 -0
- package/lib/components/ComboBoxField/ComboBoxField.test.js +35 -0
- package/lib/components/CopyText/CopyText.js +35 -11
- package/lib/components/FileInputField/FileItem.js +2 -1
- package/lib/components/IconButton/IconButton.js +1 -1
- package/lib/components/IconButton/IconButton.stories.js +7 -13
- package/lib/components/IconButton/IconButton.test.js +4 -5
- package/lib/components/ImageUploadField/ImagePreviewButton.js +2 -1
- package/lib/components/List/List.js +2 -0
- package/lib/components/List/List.stories.js +6 -2
- package/lib/components/ListBox/ListBox.js +3 -5
- package/lib/components/ListBox/ListBox.test.js +2 -0
- package/lib/components/ListBox/Option.js +6 -0
- package/lib/components/ListView/ListView.stories.js +577 -39
- package/lib/components/Messages/Message.js +2 -2
- package/lib/components/MultivaluesField/MultivaluesField.js +2 -1
- package/lib/components/OverlayPanel/OverlayPanel.stories.js +7 -5
- package/lib/components/PopoverContainer/PopoverContainer.test.js +16 -1
- package/lib/components/TextArea/TextArea.js +5 -1
- package/lib/components/TooltipTrigger/TooltipTrigger.js +10 -5
- package/lib/index.js +1 -0
- package/lib/styles/variants/accordion.js +2 -2
- package/lib/styles/variants/buttons.js +11 -1
- package/lib/styles/variants/codeView.js +68 -0
- package/lib/styles/variants/variants.js +2 -0
- package/package.json +3 -1
@@ -0,0 +1,211 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
4
|
+
|
5
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
|
6
|
+
|
7
|
+
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-properties"));
|
8
|
+
|
9
|
+
var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors"));
|
10
|
+
|
11
|
+
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
|
12
|
+
|
13
|
+
var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor"));
|
14
|
+
|
15
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
16
|
+
|
17
|
+
var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols"));
|
18
|
+
|
19
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
20
|
+
|
21
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
|
22
|
+
|
23
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/asyncToGenerator"));
|
24
|
+
|
25
|
+
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
26
|
+
|
27
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
28
|
+
|
29
|
+
var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
|
30
|
+
|
31
|
+
var _react = _interopRequireDefault(require("react"));
|
32
|
+
|
33
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
34
|
+
|
35
|
+
var _testAxe = _interopRequireDefault(require("../../utils/testUtils/testAxe"));
|
36
|
+
|
37
|
+
var _testWrapper = require("../../utils/testUtils/testWrapper");
|
38
|
+
|
39
|
+
var _ = require("../..");
|
40
|
+
|
41
|
+
var _react2 = require("@emotion/react");
|
42
|
+
|
43
|
+
function ownKeys(object, enumerableOnly) { var keys = (0, _keys["default"])(object); if (_getOwnPropertySymbols["default"]) { var symbols = (0, _getOwnPropertySymbols["default"])(object); if (enumerableOnly) symbols = (0, _filter["default"])(symbols).call(symbols, function (sym) { return (0, _getOwnPropertyDescriptor["default"])(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
44
|
+
|
45
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { var _context5; (0, _forEach["default"])(_context5 = ownKeys(Object(source), true)).call(_context5, function (key) { (0, _defineProperty3["default"])(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors["default"]) { (0, _defineProperties["default"])(target, (0, _getOwnPropertyDescriptors["default"])(source)); } else { var _context6; (0, _forEach["default"])(_context6 = ownKeys(Object(source))).call(_context6, function (key) { (0, _defineProperty2["default"])(target, key, (0, _getOwnPropertyDescriptor["default"])(source, key)); }); } } return target; }
|
46
|
+
|
47
|
+
var testId = 'test-code-sample';
|
48
|
+
|
49
|
+
var originalClipboard = _objectSpread({}, global.navigator.clipboard);
|
50
|
+
|
51
|
+
var originalExecCommand = global.document.execCommand;
|
52
|
+
var defaultProps = {
|
53
|
+
'data-testid': testId
|
54
|
+
};
|
55
|
+
var textValue = "\nexport const Default = args => (\n <>\n <Text sx={{ fontWeight: 2 }}>JSON</Text>\n <CodeView {...args} />\n </>\n);\n";
|
56
|
+
|
57
|
+
var getComponent = function getComponent() {
|
58
|
+
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
59
|
+
return (0, _testWrapper.render)((0, _react2.jsx)(_.CodeView, (0, _extends2["default"])({}, defaultProps, props), textValue));
|
60
|
+
}; // Need to be added to each test file to test accessibility using axe.
|
61
|
+
|
62
|
+
|
63
|
+
(0, _testAxe["default"])(getComponent);
|
64
|
+
test('renders component in the default state', function () {
|
65
|
+
getComponent();
|
66
|
+
|
67
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
68
|
+
|
69
|
+
expect(container).toBeInstanceOf(HTMLDivElement);
|
70
|
+
expect(container).toBeInTheDocument();
|
71
|
+
});
|
72
|
+
test('tooltip renders on hover', function () {
|
73
|
+
getComponent();
|
74
|
+
|
75
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
76
|
+
|
77
|
+
_testWrapper.fireEvent.mouseMove(container);
|
78
|
+
|
79
|
+
_testWrapper.fireEvent.mouseEnter(container);
|
80
|
+
|
81
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
|
82
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copy to clipboard');
|
83
|
+
});
|
84
|
+
test('content and copy button are focused via keyboard', function () {
|
85
|
+
getComponent();
|
86
|
+
|
87
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
88
|
+
|
89
|
+
expect(container).not.toHaveFocus();
|
90
|
+
|
91
|
+
_userEvent["default"].tab();
|
92
|
+
|
93
|
+
expect(container).toHaveFocus();
|
94
|
+
|
95
|
+
var copyBtn = _testWrapper.screen.getByLabelText('copy');
|
96
|
+
|
97
|
+
expect(copyBtn).not.toHaveFocus();
|
98
|
+
|
99
|
+
_userEvent["default"].tab();
|
100
|
+
|
101
|
+
expect(copyBtn).toHaveFocus();
|
102
|
+
expect(copyBtn).toHaveClass('is-focused');
|
103
|
+
});
|
104
|
+
test('doesn\'t render copy button and tooltip with prop hasNoCopyButton', function () {
|
105
|
+
getComponent({
|
106
|
+
hasNoCopyButton: true
|
107
|
+
});
|
108
|
+
|
109
|
+
var container = _testWrapper.screen.getByTestId(testId);
|
110
|
+
|
111
|
+
_testWrapper.fireEvent.mouseMove(container);
|
112
|
+
|
113
|
+
_testWrapper.fireEvent.mouseEnter(container);
|
114
|
+
|
115
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).not.toBeInTheDocument();
|
116
|
+
expect(_testWrapper.screen.queryByLabelText('copy')).not.toBeInTheDocument();
|
117
|
+
});
|
118
|
+
test('renders line numbers with prop hasLineNumbers', function () {
|
119
|
+
var linesLength = ((0, _trim["default"])(textValue).call(textValue).split('\n').length - 1).toString();
|
120
|
+
getComponent();
|
121
|
+
expect(_testWrapper.screen.queryByText('1')).not.toBeInTheDocument();
|
122
|
+
expect(_testWrapper.screen.queryByText(linesLength)).not.toBeInTheDocument();
|
123
|
+
getComponent({
|
124
|
+
hasLineNumbers: true
|
125
|
+
});
|
126
|
+
expect(_testWrapper.screen.queryByText('1')).toBeInTheDocument();
|
127
|
+
expect(_testWrapper.screen.queryByText(linesLength)).toBeInTheDocument();
|
128
|
+
});
|
129
|
+
beforeEach(function () {
|
130
|
+
var mockClipboard = {
|
131
|
+
writeText: jest.fn()
|
132
|
+
};
|
133
|
+
global.navigator.clipboard = mockClipboard;
|
134
|
+
global.document.execCommand = jest.fn();
|
135
|
+
global.document.execCommand.mockReturnValue(true);
|
136
|
+
});
|
137
|
+
afterEach(function () {
|
138
|
+
jest.resetAllMocks();
|
139
|
+
global.navigator.clipboard = originalClipboard;
|
140
|
+
global.document.execCommand = originalExecCommand;
|
141
|
+
});
|
142
|
+
test('click on copy button copies data to the clipboard', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
143
|
+
var button;
|
144
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
145
|
+
while (1) {
|
146
|
+
switch (_context2.prev = _context2.next) {
|
147
|
+
case 0:
|
148
|
+
getComponent();
|
149
|
+
button = _testWrapper.screen.getByLabelText('copy');
|
150
|
+
_context2.next = 4;
|
151
|
+
return (0, _testWrapper.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
152
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
153
|
+
while (1) {
|
154
|
+
switch (_context.prev = _context.next) {
|
155
|
+
case 0:
|
156
|
+
return _context.abrupt("return", _userEvent["default"].click(button));
|
157
|
+
|
158
|
+
case 1:
|
159
|
+
case "end":
|
160
|
+
return _context.stop();
|
161
|
+
}
|
162
|
+
}
|
163
|
+
}, _callee);
|
164
|
+
})));
|
165
|
+
|
166
|
+
case 4:
|
167
|
+
expect(navigator.clipboard.writeText).toBeCalledTimes(1);
|
168
|
+
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(textValue);
|
169
|
+
|
170
|
+
case 6:
|
171
|
+
case "end":
|
172
|
+
return _context2.stop();
|
173
|
+
}
|
174
|
+
}
|
175
|
+
}, _callee2);
|
176
|
+
})));
|
177
|
+
test('after button click, the tooltip renders with the text "Copied!"', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
178
|
+
var button;
|
179
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
180
|
+
while (1) {
|
181
|
+
switch (_context4.prev = _context4.next) {
|
182
|
+
case 0:
|
183
|
+
getComponent();
|
184
|
+
button = _testWrapper.screen.getByLabelText('copy');
|
185
|
+
_context4.next = 4;
|
186
|
+
return (0, _testWrapper.act)( /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
187
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
188
|
+
while (1) {
|
189
|
+
switch (_context3.prev = _context3.next) {
|
190
|
+
case 0:
|
191
|
+
return _context3.abrupt("return", _userEvent["default"].click(button));
|
192
|
+
|
193
|
+
case 1:
|
194
|
+
case "end":
|
195
|
+
return _context3.stop();
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}, _callee3);
|
199
|
+
})));
|
200
|
+
|
201
|
+
case 4:
|
202
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toBeInTheDocument();
|
203
|
+
expect(_testWrapper.screen.queryByRole('tooltip')).toHaveTextContent('Copied!');
|
204
|
+
|
205
|
+
case 6:
|
206
|
+
case "end":
|
207
|
+
return _context4.stop();
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}, _callee4);
|
211
|
+
})));
|
@@ -0,0 +1,18 @@
|
|
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
|
+
_Object$defineProperty(exports, "default", {
|
12
|
+
enumerable: true,
|
13
|
+
get: function get() {
|
14
|
+
return _CodeView["default"];
|
15
|
+
}
|
16
|
+
});
|
17
|
+
|
18
|
+
var _CodeView = _interopRequireDefault(require("./CodeView"));
|
@@ -149,6 +149,7 @@ var ColorField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
149
149
|
return (0, _concat["default"])(_context2 = (0, _concat["default"])(_context3 = (0, _concat["default"])(_context4 = "rgba(".concat(colorValue === null || colorValue === void 0 ? void 0 : colorValue.red, ", ")).call(_context4, colorValue === null || colorValue === void 0 ? void 0 : colorValue.green, ", ")).call(_context3, colorValue === null || colorValue === void 0 ? void 0 : colorValue.blue, ", ")).call(_context2, colorValue === null || colorValue === void 0 ? void 0 : colorValue.alpha, ")");
|
150
150
|
}, []);
|
151
151
|
return (0, _react2.jsx)(_index.Box, fieldContainerProps, label && (0, _react2.jsx)(_index.Label, fieldLabelProps), (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({
|
152
|
+
"aria-label": "Select color",
|
152
153
|
bg: getRgbaFromState(state),
|
153
154
|
onPress: handleButtonPress,
|
154
155
|
ref: triggerRef,
|
@@ -157,6 +157,12 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
157
157
|
(0, _react.useImperativeHandle)(ref, function () {
|
158
158
|
return inputRef.current;
|
159
159
|
});
|
160
|
+
/* istanbul ignore next */
|
161
|
+
|
162
|
+
var onSelectionChangeHandler = function onSelectionChangeHandler(key) {
|
163
|
+
var newVal = key || selectedKey || '';
|
164
|
+
if (onSelectionChange) onSelectionChange(newVal);
|
165
|
+
};
|
160
166
|
|
161
167
|
var _useFilter = (0, _i18n.useFilter)({
|
162
168
|
sensitivity: 'base'
|
@@ -164,6 +170,7 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
164
170
|
contains = _useFilter.contains;
|
165
171
|
|
166
172
|
var state = (0, _combobox2.useComboBoxState)(_objectSpread(_objectSpread({}, comboBoxOptions), {}, {
|
173
|
+
onSelectionChange: hasCustomValue ? onSelectionChangeHandler : onSelectionChange,
|
167
174
|
defaultFilter: contains
|
168
175
|
}));
|
169
176
|
|
@@ -10,7 +10,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
10
10
|
value: true
|
11
11
|
});
|
12
12
|
|
13
|
-
exports.WithCustomHeight = exports.WithoutStatusIndicator = exports.Required = exports.HelperText = exports.Disabled = exports.FocusMenuTrigger = exports.DisabledKeys = exports.AllowCustomValue = exports.ControlledFiltering = exports.ControlledSelection = exports.ControlledMenu = exports.ControlledInput = exports.AsyncLoading = exports.WithSections = exports.Default = exports["default"] = void 0;
|
13
|
+
exports.WithCustomHeight = exports.WithoutStatusIndicator = exports.Required = exports.HelperText = exports.Disabled = exports.FocusMenuTrigger = exports.DisabledKeys = exports.AllowCustomValue = exports.ControlledWithCustomValue = exports.ControlledFiltering = exports.ControlledSelection = exports.ControlledMenu = exports.ControlledInput = exports.AsyncLoading = exports.WithSections = exports.Default = exports["default"] = void 0;
|
14
14
|
|
15
15
|
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
16
16
|
|
@@ -383,6 +383,30 @@ var ControlledFiltering = function ControlledFiltering() {
|
|
383
383
|
|
384
384
|
exports.ControlledFiltering = ControlledFiltering;
|
385
385
|
|
386
|
+
var ControlledWithCustomValue = function ControlledWithCustomValue() {
|
387
|
+
var _useState9 = (0, _react.useState)(''),
|
388
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
|
389
|
+
inputValue = _useState10[0],
|
390
|
+
setInputValue = _useState10[1];
|
391
|
+
|
392
|
+
return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_ComboBoxField["default"], (0, _extends2["default"])({
|
393
|
+
label: "Example label",
|
394
|
+
defaultItems: items
|
395
|
+
}, actions, {
|
396
|
+
inputValue: inputValue,
|
397
|
+
selectedKey: inputValue,
|
398
|
+
onInputChange: setInputValue,
|
399
|
+
onSelectionChange: setInputValue,
|
400
|
+
hasCustomValue: true
|
401
|
+
}), function (item) {
|
402
|
+
return (0, _react2.jsx)(_index.Item, {
|
403
|
+
key: item.name
|
404
|
+
}, item.name);
|
405
|
+
}));
|
406
|
+
};
|
407
|
+
|
408
|
+
exports.ControlledWithCustomValue = ControlledWithCustomValue;
|
409
|
+
|
386
410
|
var AllowCustomValue = function AllowCustomValue() {
|
387
411
|
return (0, _react2.jsx)(_index.OverlayProvider, null, (0, _react2.jsx)(_ComboBoxField["default"], (0, _extends2["default"])({
|
388
412
|
label: "Example label",
|
@@ -772,6 +772,50 @@ test('two listbox can not be open at the same time', function () {
|
|
772
772
|
name: 'Tango'
|
773
773
|
})).toBeInTheDocument();
|
774
774
|
});
|
775
|
+
test('should handle selecting custom option', function () {
|
776
|
+
getComponent({
|
777
|
+
hasCustomValue: true
|
778
|
+
});
|
779
|
+
|
780
|
+
var input = _testWrapper.screen.queryByRole('combobox');
|
781
|
+
|
782
|
+
expect(input).toHaveValue(''); // type something
|
783
|
+
|
784
|
+
_userEvent["default"].type(input, 'custom'); // set input value as selected
|
785
|
+
|
786
|
+
|
787
|
+
_userEvent["default"].type(input, '{enter}', {
|
788
|
+
skipClick: true
|
789
|
+
});
|
790
|
+
|
791
|
+
expect(_testWrapper.screen.queryByRole('listbox')).not.toBeInTheDocument();
|
792
|
+
expect(_testWrapper.screen.queryByRole('combobox')).toHaveValue('custom'); // blur input
|
793
|
+
|
794
|
+
_userEvent["default"].tab();
|
795
|
+
|
796
|
+
expect(input).toHaveValue('custom');
|
797
|
+
});
|
798
|
+
test('onSelectionChange works properly with custom value', function () {
|
799
|
+
var onSelectionChange = jest.fn();
|
800
|
+
getComponent({
|
801
|
+
hasCustomValue: true,
|
802
|
+
onSelectionChange: onSelectionChange,
|
803
|
+
onInputChange: onSelectionChange
|
804
|
+
});
|
805
|
+
|
806
|
+
var input = _testWrapper.screen.queryByRole('combobox');
|
807
|
+
|
808
|
+
expect(input).toHaveValue('');
|
809
|
+
expect(onSelectionChange).not.toHaveBeenCalled(); // Should fire when input value was typed, and enter was pressed
|
810
|
+
|
811
|
+
_userEvent["default"].type(input, 'custom{enter}');
|
812
|
+
|
813
|
+
expect(onSelectionChange).toHaveBeenCalledWith('custom'); // Should fire when input is cleared
|
814
|
+
|
815
|
+
_userEvent["default"].type(input, '{selectall}{backspace}{enter}');
|
816
|
+
|
817
|
+
expect(onSelectionChange).toHaveBeenCalledWith('');
|
818
|
+
});
|
775
819
|
test('should have no accessibility violations', /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
776
820
|
var _getComponent6, container, results;
|
777
821
|
|
@@ -12,12 +12,12 @@ _Object$defineProperty(exports, "__esModule", {
|
|
12
12
|
|
13
13
|
exports["default"] = void 0;
|
14
14
|
|
15
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
16
|
-
|
17
15
|
var _setTimeout2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/set-timeout"));
|
18
16
|
|
19
17
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
|
20
18
|
|
19
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
20
|
+
|
21
21
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
|
22
22
|
|
23
23
|
var _react = _interopRequireWildcard(require("react"));
|
@@ -40,19 +40,19 @@ var _react2 = require("@emotion/react");
|
|
40
40
|
|
41
41
|
var TooltipWrapper = function TooltipWrapper(_ref) {
|
42
42
|
var children = _ref.children,
|
43
|
-
|
44
|
-
|
45
|
-
return (0, _react2.jsx)(_index.TooltipTrigger, {
|
43
|
+
tooltip = _ref.tooltip,
|
44
|
+
others = (0, _objectWithoutProperties2["default"])(_ref, ["children", "tooltip"]);
|
45
|
+
return (0, _react2.jsx)(_index.TooltipTrigger, (0, _extends2["default"])({
|
46
46
|
key: tooltip,
|
47
47
|
direction: "top",
|
48
48
|
isNotFlippable: true,
|
49
|
-
isOpen: isOpen,
|
50
49
|
offset: 5
|
51
|
-
}, children, (0, _react2.jsx)(_index.Tooltip, null, tooltip));
|
50
|
+
}, others), children, (0, _react2.jsx)(_index.Tooltip, null, tooltip));
|
52
51
|
};
|
53
52
|
|
54
53
|
TooltipWrapper.propTypes = {
|
55
54
|
isOpen: _propTypes["default"].bool,
|
55
|
+
targetRef: _propTypes["default"].shape({}),
|
56
56
|
tooltip: _propTypes["default"].string
|
57
57
|
};
|
58
58
|
/**
|
@@ -64,7 +64,9 @@ var CopyText = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
64
64
|
textToCopy = props.textToCopy,
|
65
65
|
tooltipText = props.tooltipText,
|
66
66
|
mode = props.mode,
|
67
|
-
|
67
|
+
tooltipProps = props.tooltipProps,
|
68
|
+
wrapperProps = props.wrapperProps,
|
69
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["children", "textToCopy", "tooltipText", "mode", "tooltipProps", "wrapperProps"]);
|
68
70
|
var value = textToCopy || (mode === 'link' ? children.props.href : children.props.children);
|
69
71
|
|
70
72
|
var _useState = (0, _react.useState)(false),
|
@@ -99,13 +101,28 @@ var CopyText = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
99
101
|
return undefined;
|
100
102
|
}, [isCopied]);
|
101
103
|
var copyToClipboard = (0, _useCopyToClipboard["default"])(value, setIsCopied);
|
102
|
-
var content = mode === 'link' ? children : (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({
|
104
|
+
var content = mode === 'link' || mode === 'nonClickableContent' ? children : (0, _react2.jsx)(_index.Button, (0, _extends2["default"])({
|
103
105
|
variant: "quiet",
|
104
106
|
onPress: copyToClipboard,
|
105
107
|
"aria-label": "copy-content"
|
106
108
|
}, focusProps), children);
|
107
109
|
var tooltip = isCopied ? 'Copied!' : tooltipText;
|
108
110
|
var isTooltipOpen = isFocusVisible || isHovered || isCopied;
|
111
|
+
var wrapperRef = (0, _react.useRef)();
|
112
|
+
|
113
|
+
if (mode === 'nonClickableContent') {
|
114
|
+
return (0, _react2.jsx)(TooltipWrapper, (0, _extends2["default"])({
|
115
|
+
isOpen: isTooltipOpen,
|
116
|
+
tooltip: tooltip,
|
117
|
+
targetRef: wrapperRef
|
118
|
+
}, tooltipProps), (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
119
|
+
ref: wrapperRef,
|
120
|
+
isRow: true,
|
121
|
+
tabIndex: 0
|
122
|
+
}, (0, _utils.mergeProps)(hoverProps, others), wrapperProps), content, (0, _react2.jsx)(_CopyButton["default"], (0, _extends2["default"])({
|
123
|
+
onPress: copyToClipboard
|
124
|
+
}, focusProps))));
|
125
|
+
}
|
109
126
|
|
110
127
|
if (mode === 'link') {
|
111
128
|
return (0, _react2.jsx)(_index.Box, (0, _extends2["default"])({
|
@@ -133,13 +150,19 @@ var CopyText = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
133
150
|
});
|
134
151
|
CopyText.propTypes = {
|
135
152
|
/** The behavioral pattern to apply to the component. */
|
136
|
-
mode: _propTypes["default"].oneOf(['text', 'link']),
|
153
|
+
mode: _propTypes["default"].oneOf(['text', 'link', 'nonClickableContent']),
|
137
154
|
|
138
155
|
/** The text to be copied instead of the text inside the child component. */
|
139
156
|
textToCopy: _propTypes["default"].string,
|
140
157
|
|
141
158
|
/** The text to be displayed in the tooltip. */
|
142
|
-
tooltipText: _propTypes["default"].string
|
159
|
+
tooltipText: _propTypes["default"].string,
|
160
|
+
|
161
|
+
/** Props to apply to the tooltip in nonClickableContent mode. */
|
162
|
+
tooltipProps: _propTypes["default"].shape({}),
|
163
|
+
|
164
|
+
/** Props to apply to the wrapper in nonClickableContent mode. */
|
165
|
+
wrapperProps: _propTypes["default"].shape({})
|
143
166
|
};
|
144
167
|
CopyText.defaultProps = {
|
145
168
|
mode: 'text',
|
@@ -115,7 +115,7 @@ var IconButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
115
115
|
tabIndex: 0,
|
116
116
|
ref: buttonRef,
|
117
117
|
className: classNames,
|
118
|
-
"aria-label": ariaLabel
|
118
|
+
"aria-label": ariaLabel,
|
119
119
|
sx: chipBg && isHovered && {
|
120
120
|
'path': {
|
121
121
|
fill: chipBg
|
@@ -8,7 +8,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
8
8
|
value: true
|
9
9
|
});
|
10
10
|
|
11
|
-
exports.Disabled = exports.WithTooltip = exports.
|
11
|
+
exports.Disabled = exports.WithTooltip = exports.Default = exports["default"] = void 0;
|
12
12
|
|
13
13
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
14
14
|
|
@@ -53,8 +53,10 @@ var _default = {
|
|
53
53
|
isDisabled: {},
|
54
54
|
variant: {
|
55
55
|
control: {
|
56
|
-
type: '
|
57
|
-
|
56
|
+
type: 'select',
|
57
|
+
options: ['iconButton', 'inverted', 'square', 'invertedSquare']
|
58
|
+
},
|
59
|
+
defaultValue: 'iconButton'
|
58
60
|
}
|
59
61
|
}
|
60
62
|
};
|
@@ -62,7 +64,7 @@ exports["default"] = _default;
|
|
62
64
|
|
63
65
|
var Default = function Default(args) {
|
64
66
|
return (0, _react2.jsx)(_["default"], (0, _extends2["default"])({
|
65
|
-
"aria-label": "
|
67
|
+
"aria-label": "default icon button"
|
66
68
|
}, args), (0, _react2.jsx)(_Icon["default"], {
|
67
69
|
icon: _CreateIcon["default"]
|
68
70
|
}));
|
@@ -70,20 +72,9 @@ var Default = function Default(args) {
|
|
70
72
|
|
71
73
|
exports.Default = Default;
|
72
74
|
|
73
|
-
var Inverted = function Inverted() {
|
74
|
-
return (0, _react2.jsx)(_["default"], {
|
75
|
-
"aria-label": "my-label",
|
76
|
-
variant: "inverted"
|
77
|
-
}, (0, _react2.jsx)(_Icon["default"], {
|
78
|
-
icon: _CreateIcon["default"]
|
79
|
-
}));
|
80
|
-
};
|
81
|
-
|
82
|
-
exports.Inverted = Inverted;
|
83
|
-
|
84
75
|
var WithTooltip = function WithTooltip() {
|
85
76
|
return (0, _react2.jsx)(_["default"], {
|
86
|
-
"aria-label": "
|
77
|
+
"aria-label": "icon button with tooltip",
|
87
78
|
title: "Edit"
|
88
79
|
}, (0, _react2.jsx)(_Icon["default"], {
|
89
80
|
icon: _CreateIcon["default"]
|
@@ -94,7 +85,7 @@ exports.WithTooltip = WithTooltip;
|
|
94
85
|
|
95
86
|
var Disabled = function Disabled() {
|
96
87
|
return (0, _react2.jsx)(_["default"], {
|
97
|
-
"aria-label": "
|
88
|
+
"aria-label": "disabled icon button",
|
98
89
|
isDisabled: true
|
99
90
|
}, (0, _react2.jsx)(_Icon["default"], {
|
100
91
|
icon: _CreateIcon["default"]
|
@@ -29,7 +29,8 @@ var Icon = function Icon(props) {
|
|
29
29
|
var testId = 'test-button';
|
30
30
|
var defaultProps = {
|
31
31
|
'data-testid': testId,
|
32
|
-
icon: Icon
|
32
|
+
icon: Icon,
|
33
|
+
'aria-label': 'Create'
|
33
34
|
};
|
34
35
|
|
35
36
|
var getComponent = function getComponent() {
|
@@ -162,10 +163,8 @@ test('tooltip is not shown on hover or focus when prop is not passed', function
|
|
162
163
|
expect(_testWrapper.screen.queryByRole('tooltip')).not.toBeInTheDocument();
|
163
164
|
});
|
164
165
|
test('the button should be getting aria label attribute', function () {
|
165
|
-
var testLabel = '
|
166
|
-
getComponent(
|
167
|
-
'aria-label': testLabel
|
168
|
-
});
|
166
|
+
var testLabel = defaultProps['aria-label'];
|
167
|
+
getComponent();
|
169
168
|
expect(_testWrapper.screen.getByLabelText(testLabel)).toBeInTheDocument();
|
170
169
|
});
|
171
170
|
test('show button isDisabled status', function () {
|
@@ -113,7 +113,8 @@ var ImagePreviewButton = /*#__PURE__*/(0, _react.forwardRef)(function (props, re
|
|
113
113
|
ref: buttonRef,
|
114
114
|
variant: "imageUpload",
|
115
115
|
sx: widthHeightSx,
|
116
|
-
"data-testid": "image-preview-button"
|
116
|
+
"data-testid": "image-preview-button",
|
117
|
+
"aria-label": "Image preview"
|
117
118
|
}, (0, _utils.mergeProps)(focusProps, others)), previewImage && isImageType ? imagePreview : noImagePreview, isLoading && loadingPreview, (isHovered || isFocusVisible) && !isLoading && hoveredPreview));
|
118
119
|
});
|
119
120
|
ImagePreviewButton.propTypes = {
|
@@ -20,6 +20,8 @@ var _react = _interopRequireWildcard(require("react"));
|
|
20
20
|
|
21
21
|
var _Box = _interopRequireDefault(require("../Box/Box"));
|
22
22
|
|
23
|
+
var _hooks = require("../../hooks");
|
24
|
+
|
23
25
|
var _react2 = require("@emotion/react");
|
24
26
|
|
25
27
|
/**
|
@@ -29,6 +31,7 @@ var _react2 = require("@emotion/react");
|
|
29
31
|
var List = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
30
32
|
var children = props.children,
|
31
33
|
others = (0, _objectWithoutProperties2["default"])(props, ["children"]);
|
34
|
+
(0, _hooks.useDeprecationWarning)('The List component will be deprecated in Astro-UI 2.0.0, use ListView instead.');
|
32
35
|
return (0, _react2.jsx)(_Box["default"], (0, _extends2["default"])({
|
33
36
|
ref: ref,
|
34
37
|
role: "list",
|
@@ -20,11 +20,16 @@ var _Text = _interopRequireDefault(require("../Text"));
|
|
20
20
|
|
21
21
|
var _Separator = _interopRequireDefault(require("../Separator"));
|
22
22
|
|
23
|
+
var _withDeprecationWarning = _interopRequireDefault(require("../../utils/devUtils/decorators/withDeprecationWarning"));
|
24
|
+
|
23
25
|
var _react2 = require("@emotion/react");
|
24
26
|
|
25
27
|
var _default = {
|
26
|
-
title: 'List',
|
27
|
-
component: [_["default"], _ListItem["default"]]
|
28
|
+
title: 'Deprecated/List',
|
29
|
+
component: [_["default"], _ListItem["default"]],
|
30
|
+
decorators: [function (Story, context) {
|
31
|
+
return (0, _withDeprecationWarning["default"])(Story, context, 'The `List` component will be deprecated in Astro-UI 2.0.0, use `ListView` instead.');
|
32
|
+
}]
|
28
33
|
};
|
29
34
|
exports["default"] = _default;
|
30
35
|
|
@@ -55,8 +55,6 @@ var _ListBoxContext = require("./ListBoxContext");
|
|
55
55
|
|
56
56
|
var _index = require("./index.js");
|
57
57
|
|
58
|
-
var _hooks = require("../../hooks");
|
59
|
-
|
60
58
|
var _isIterable = require("../../utils/devUtils/props/isIterable");
|
61
59
|
|
62
60
|
var _Loader = _interopRequireDefault(require("../Loader"));
|
@@ -120,12 +118,11 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
120
118
|
selectedKeys = props.selectedKeys,
|
121
119
|
selectionMode = props.selectionMode,
|
122
120
|
state = props.state,
|
121
|
+
ariaLabel = props['aria-label'],
|
123
122
|
ariaLabelledby = props['aria-labelledby'],
|
124
123
|
ariaDescribedby = props['aria-describedby'],
|
125
124
|
ariaDetails = props['aria-details'],
|
126
|
-
others = (0, _objectWithoutProperties2["default"])(props, ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "onLoadMore", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-labelledby", "aria-describedby", "aria-details"]);
|
127
|
-
var ariaLabel = props['aria-label'];
|
128
|
-
(0, _hooks.useAriaLabelWarning)('ListBox', ariaLabel);
|
125
|
+
others = (0, _objectWithoutProperties2["default"])(props, ["defaultSelectedKeys", "disabledKeys", "hasAutoFocus", "hasFocusWrap", "hasNoEmptySelection", "hasVirtualFocus", "id", "isLoading", "isFocusedOnHover", "isSelectedOnPressUp", "isVirtualized", "items", "keyboardDelegate", "label", "onLoadMore", "onScroll", "onSelectionChange", "renderEmptyState", "selectedKeys", "selectionMode", "state", "aria-label", "aria-labelledby", "aria-describedby", "aria-details"]);
|
129
126
|
var focusStrategy = state.focusStrategy; // Object matching React Aria API with all options
|
130
127
|
|
131
128
|
var listBoxOptions = {
|
@@ -149,7 +146,7 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
149
146
|
shouldFocusWrap: hasFocusWrap,
|
150
147
|
shouldSelectOnPressUp: isSelectedOnPressUp,
|
151
148
|
shouldUseVirtualFocus: hasVirtualFocus,
|
152
|
-
'aria-label': ariaLabel
|
149
|
+
'aria-label': ariaLabel,
|
153
150
|
'aria-labelledby': ariaLabelledby,
|
154
151
|
'aria-describedby': ariaDescribedby,
|
155
152
|
'aria-details': ariaDetails
|
@@ -44,11 +44,13 @@ var itemsWithSections = [{
|
|
44
44
|
}];
|
45
45
|
var defaultProps = {
|
46
46
|
'data-testid': testId,
|
47
|
+
'aria-label': 'listbox',
|
47
48
|
'aria-labelledby': 'label',
|
48
49
|
items: items
|
49
50
|
};
|
50
51
|
var defaultWithSectionsProps = {
|
51
52
|
'data-testid': testId,
|
53
|
+
'aria-label': 'listbox',
|
52
54
|
'aria-labelledby': 'label',
|
53
55
|
items: itemsWithSections
|
54
56
|
};
|