@dxc-technology/halstack-react 0.0.0-e201636 → 0.0.0-e26622f

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 (152) hide show
  1. package/accordion/Accordion.js +122 -103
  2. package/accordion/Accordion.stories.tsx +2 -3
  3. package/accordion/Accordion.test.js +9 -10
  4. package/accordion/types.d.ts +5 -4
  5. package/accordion-group/AccordionGroup.js +2 -21
  6. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  7. package/accordion-group/AccordionGroup.test.js +20 -45
  8. package/accordion-group/types.d.ts +10 -3
  9. package/alert/Alert.js +1 -1
  10. package/bleed/Bleed.js +1 -34
  11. package/bleed/Bleed.stories.tsx +94 -95
  12. package/bleed/types.d.ts +1 -1
  13. package/box/Box.js +1 -1
  14. package/box/types.d.ts +1 -0
  15. package/bulleted-list/BulletedList.d.ts +7 -0
  16. package/bulleted-list/BulletedList.js +123 -0
  17. package/bulleted-list/BulletedList.stories.tsx +200 -0
  18. package/bulleted-list/types.d.ts +11 -0
  19. package/{list → bulleted-list}/types.js +0 -0
  20. package/button/Button.js +43 -61
  21. package/button/Button.stories.tsx +9 -0
  22. package/button/types.d.ts +7 -7
  23. package/card/Card.js +34 -36
  24. package/card/types.d.ts +1 -0
  25. package/checkbox/Checkbox.js +87 -95
  26. package/checkbox/Checkbox.test.js +93 -16
  27. package/checkbox/types.d.ts +2 -2
  28. package/chip/types.d.ts +1 -1
  29. package/common/variables.js +56 -18
  30. package/date-input/DateInput.js +3 -3
  31. package/dialog/Dialog.js +52 -28
  32. package/dialog/Dialog.stories.tsx +57 -2
  33. package/dialog/Dialog.test.js +34 -4
  34. package/dialog/types.d.ts +3 -2
  35. package/dropdown/Dropdown.d.ts +1 -1
  36. package/dropdown/Dropdown.js +244 -247
  37. package/dropdown/Dropdown.stories.tsx +126 -63
  38. package/dropdown/Dropdown.test.js +509 -108
  39. package/dropdown/DropdownMenu.d.ts +4 -0
  40. package/dropdown/DropdownMenu.js +80 -0
  41. package/dropdown/DropdownMenuItem.d.ts +4 -0
  42. package/dropdown/DropdownMenuItem.js +92 -0
  43. package/dropdown/types.d.ts +25 -5
  44. package/flex/Flex.d.ts +4 -0
  45. package/flex/Flex.js +69 -0
  46. package/flex/Flex.stories.tsx +103 -0
  47. package/flex/types.d.ts +32 -0
  48. package/{row → flex}/types.js +0 -0
  49. package/footer/Footer.stories.tsx +8 -1
  50. package/footer/Icons.js +1 -1
  51. package/footer/types.d.ts +2 -1
  52. package/header/Header.js +74 -72
  53. package/header/Header.stories.tsx +4 -4
  54. package/header/Icons.js +2 -2
  55. package/header/types.d.ts +3 -2
  56. package/inset/Inset.js +1 -34
  57. package/inset/Inset.stories.tsx +36 -36
  58. package/inset/types.d.ts +1 -1
  59. package/layout/ApplicationLayout.d.ts +15 -6
  60. package/layout/ApplicationLayout.js +37 -65
  61. package/layout/ApplicationLayout.stories.tsx +80 -44
  62. package/layout/types.d.ts +17 -27
  63. package/link/Link.js +1 -1
  64. package/link/Link.stories.tsx +13 -6
  65. package/link/types.d.ts +1 -1
  66. package/main.d.ts +5 -8
  67. package/main.js +28 -52
  68. package/number-input/NumberInput.test.js +1 -1
  69. package/package.json +10 -9
  70. package/paginator/Paginator.test.js +42 -0
  71. package/paragraph/Paragraph.d.ts +6 -0
  72. package/paragraph/Paragraph.js +38 -0
  73. package/paragraph/Paragraph.stories.tsx +44 -0
  74. package/password-input/PasswordInput.test.js +13 -12
  75. package/progress-bar/ProgressBar.d.ts +2 -2
  76. package/progress-bar/ProgressBar.js +56 -50
  77. package/progress-bar/ProgressBar.stories.jsx +3 -1
  78. package/progress-bar/ProgressBar.test.js +67 -22
  79. package/progress-bar/types.d.ts +3 -4
  80. package/quick-nav/QuickNav.js +25 -20
  81. package/quick-nav/QuickNav.stories.tsx +131 -26
  82. package/radio-group/Radio.d.ts +1 -1
  83. package/radio-group/Radio.js +43 -28
  84. package/radio-group/RadioGroup.js +26 -29
  85. package/radio-group/RadioGroup.stories.tsx +1 -0
  86. package/radio-group/RadioGroup.test.js +28 -58
  87. package/radio-group/types.d.ts +2 -2
  88. package/resultsetTable/ResultsetTable.test.js +42 -0
  89. package/select/Listbox.d.ts +1 -1
  90. package/select/Listbox.js +53 -7
  91. package/select/Select.js +42 -43
  92. package/select/Select.stories.tsx +131 -98
  93. package/select/Select.test.js +105 -50
  94. package/select/types.d.ts +2 -5
  95. package/sidenav/Sidenav.d.ts +6 -5
  96. package/sidenav/Sidenav.js +176 -55
  97. package/sidenav/Sidenav.stories.tsx +154 -156
  98. package/sidenav/Sidenav.test.js +25 -37
  99. package/sidenav/types.d.ts +50 -27
  100. package/slider/Slider.js +116 -92
  101. package/slider/Slider.stories.tsx +7 -1
  102. package/slider/Slider.test.js +121 -21
  103. package/slider/types.d.ts +2 -2
  104. package/switch/Switch.d.ts +1 -1
  105. package/switch/Switch.js +132 -66
  106. package/switch/Switch.stories.tsx +8 -30
  107. package/switch/Switch.test.js +144 -17
  108. package/switch/types.d.ts +3 -4
  109. package/tabs/Tab.d.ts +4 -0
  110. package/tabs/Tab.js +135 -0
  111. package/tabs/Tabs.js +360 -104
  112. package/tabs/Tabs.stories.tsx +74 -0
  113. package/tabs/Tabs.test.js +217 -6
  114. package/tabs/types.d.ts +15 -5
  115. package/tabs-nav/NavTabs.js +5 -5
  116. package/tabs-nav/Tab.js +3 -5
  117. package/tabs-nav/types.d.ts +1 -1
  118. package/tag/Tag.js +1 -1
  119. package/tag/types.d.ts +1 -1
  120. package/text-input/Icons.d.ts +8 -0
  121. package/text-input/Icons.js +60 -0
  122. package/text-input/Suggestion.js +7 -5
  123. package/text-input/Suggestions.d.ts +4 -0
  124. package/text-input/Suggestions.js +134 -0
  125. package/text-input/TextInput.js +181 -278
  126. package/text-input/TextInput.stories.tsx +189 -182
  127. package/text-input/TextInput.test.js +165 -163
  128. package/text-input/types.d.ts +22 -3
  129. package/toggle-group/types.d.ts +1 -1
  130. package/typography/Typography.d.ts +4 -0
  131. package/typography/Typography.js +131 -0
  132. package/typography/Typography.stories.tsx +198 -0
  133. package/typography/types.d.ts +18 -0
  134. package/{stack → typography}/types.js +0 -0
  135. package/wizard/Wizard.js +9 -16
  136. package/wizard/Wizard.stories.tsx +20 -1
  137. package/wizard/types.d.ts +5 -4
  138. package/list/List.d.ts +0 -4
  139. package/list/List.js +0 -47
  140. package/list/List.stories.tsx +0 -95
  141. package/list/types.d.ts +0 -7
  142. package/row/Row.d.ts +0 -3
  143. package/row/Row.js +0 -127
  144. package/row/Row.stories.tsx +0 -237
  145. package/row/types.d.ts +0 -28
  146. package/stack/Stack.d.ts +0 -3
  147. package/stack/Stack.js +0 -97
  148. package/stack/Stack.stories.tsx +0 -164
  149. package/stack/types.d.ts +0 -24
  150. package/text/Text.d.ts +0 -7
  151. package/text/Text.js +0 -30
  152. package/text/Text.stories.tsx +0 -19
@@ -27,7 +27,7 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
27
27
 
28
28
  var _Radio = _interopRequireDefault(require("./Radio"));
29
29
 
30
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
30
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
31
31
 
32
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
33
 
@@ -41,6 +41,8 @@ var getInitialFocusIndex = function getInitialFocusIndex(innerOptions, value) {
41
41
  };
42
42
 
43
43
  var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
44
+ var _ref2;
45
+
44
46
  var label = _ref.label,
45
47
  name = _ref.name,
46
48
  helperText = _ref.helperText,
@@ -102,11 +104,11 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
102
104
  value !== null && value !== void 0 ? value : setInnerValue(newValue);
103
105
  onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
104
106
  }
105
- }, [value, innerValue, setInnerValue, onChange]);
107
+ }, [value, innerValue, onChange]);
106
108
 
107
- var handleOnBlur = function handleOnBlur(e) {
109
+ var handleOnBlur = function handleOnBlur(event) {
108
110
  // If the radio group loses the focus to an element not contained inside it...
109
- if (!e.currentTarget.contains(e.relatedTarget)) {
111
+ if (!event.currentTarget.contains(event.relatedTarget)) {
110
112
  setFirstTimeFocus(true);
111
113
  var currentValue = value !== null && value !== void 0 ? value : innerValue;
112
114
  !optional && !Boolean(currentValue) ? onBlur === null || onBlur === void 0 ? void 0 : onBlur({
@@ -149,27 +151,24 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
149
151
  };
150
152
 
151
153
  var handleOnKeyDown = function handleOnKeyDown(event) {
152
- switch (event.keyCode) {
153
- case 37: // arrow left
154
-
155
- case 38:
156
- // arrow up
154
+ switch (event.key) {
155
+ case "Left":
156
+ case "ArrowLeft":
157
+ case "Up":
158
+ case "ArrowUp":
157
159
  event.preventDefault();
158
160
  setPreviousRadioChecked();
159
161
  break;
160
162
 
161
- case 39: // arrow right
162
-
163
- case 40:
164
- // arrow down
163
+ case "Right":
164
+ case "ArrowRight":
165
+ case "Down":
166
+ case "ArrowDown":
165
167
  event.preventDefault();
166
168
  setNextRadioChecked();
167
169
  break;
168
170
 
169
- case 13: // enter
170
-
171
- case 32:
172
- // space
171
+ case " ":
173
172
  event.preventDefault();
174
173
  handleOnChange(innerOptions[currentFocusIndex].value);
175
174
  break;
@@ -184,7 +183,7 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
184
183
  id: radioGroupLabelId,
185
184
  helperText: helperText,
186
185
  disabled: disabled
187
- }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, translatedLabels.formFields.optionalLabel)), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
186
+ }, label, optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, " ".concat(translatedLabels.formFields.optionalLabel))), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
188
187
  disabled: disabled
189
188
  }, helperText), /*#__PURE__*/_react["default"].createElement(RadioGroup, {
190
189
  onBlur: handleOnBlur,
@@ -194,20 +193,20 @@ var DxcRadioGroup = /*#__PURE__*/_react["default"].forwardRef(function (_ref, re
194
193
  role: "radiogroup",
195
194
  "aria-disabled": disabled,
196
195
  "aria-labelledby": radioGroupLabelId,
197
- "aria-invalid": error ? "true" : "false",
196
+ "aria-invalid": error ? true : false,
198
197
  "aria-errormessage": error ? errorId : undefined,
199
198
  "aria-required": !disabled && !readonly && !optional,
200
199
  "aria-readonly": readonly,
201
200
  "aria-orientation": stacking === "column" ? "vertical" : "horizontal"
202
- }, /*#__PURE__*/_react["default"].createElement(ValueInput, {
201
+ }, /*#__PURE__*/_react["default"].createElement("input", {
202
+ type: "hidden",
203
203
  name: name,
204
- value: value !== null && value !== void 0 ? value : innerValue,
205
- readOnly: true,
206
- "aria-hidden": "true"
204
+ value: (_ref2 = value !== null && value !== void 0 ? value : innerValue) !== null && _ref2 !== void 0 ? _ref2 : ""
207
205
  }), innerOptions.map(function (option, index) {
208
206
  return /*#__PURE__*/_react["default"].createElement(_Radio["default"], {
209
- option: option,
210
- currentValue: value !== null && value !== void 0 ? value : innerValue,
207
+ key: "radio-".concat(index),
208
+ label: option.label,
209
+ checked: (value !== null && value !== void 0 ? value : innerValue) === option.value,
211
210
  onClick: function onClick() {
212
211
  handleOnChange(option.value);
213
212
  setCurrentFocusIndex(index);
@@ -262,7 +261,7 @@ var HelperText = _styledComponents["default"].span(_templateObject4 || (_templat
262
261
  return props.theme.groupLabelMargin;
263
262
  });
264
263
 
265
- var RadioGroup = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n flex-direction: ", ";\n\n row-gap: ", ";\n column-gap: ", ";\n"])), function (props) {
264
+ var RadioGroup = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n flex-direction: ", ";\n row-gap: ", ";\n column-gap: ", ";\n"])), function (props) {
266
265
  return props.stacking;
267
266
  }, function (props) {
268
267
  return props.theme.groupVerticalGutter;
@@ -270,9 +269,7 @@ var RadioGroup = _styledComponents["default"].div(_templateObject5 || (_template
270
269
  return props.theme.groupHorizontalGutter;
271
270
  });
272
271
 
273
- var ValueInput = _styledComponents["default"].input(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: none;\n"])));
274
-
275
- var Error = _styledComponents["default"].span(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 1.5em;\n color: ", ";\n font-family: ", ";\n font-size: 0.75rem;\n font-weight: 400;\n line-height: 1.5em;\n margin-top: 0.5rem;\n"])), function (props) {
272
+ var Error = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n min-height: 1.5em;\n color: ", ";\n font-family: ", ";\n font-size: 0.75rem;\n font-weight: 400;\n line-height: 1.5em;\n margin-top: 0.5rem;\n"])), function (props) {
276
273
  return props.theme.errorMessageColor;
277
274
  }, function (props) {
278
275
  return props.theme.fontFamily;
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
2
3
  import Title from "../../.storybook/components/Title";
3
4
  import DxcRadioGroup from "./RadioGroup";
@@ -4,12 +4,12 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  var _react = _interopRequireDefault(require("react"));
6
6
 
7
- var _RadioGroup = _interopRequireDefault(require("./RadioGroup"));
8
-
9
7
  var _react2 = require("@testing-library/react");
10
8
 
11
9
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
12
10
 
11
+ var _RadioGroup = _interopRequireDefault(require("./RadioGroup.tsx"));
12
+
13
13
  var options = [{
14
14
  label: "Option 01",
15
15
  value: "1"
@@ -38,7 +38,7 @@ var options = [{
38
38
  label: "Option 09",
39
39
  value: "9"
40
40
  }];
41
- var single_disabled_options = [{
41
+ var singleDisabledOptions = [{
42
42
  label: "Option 01",
43
43
  value: "1"
44
44
  }, {
@@ -107,8 +107,8 @@ describe("Radio Group component tests", function () {
107
107
  });
108
108
 
109
109
  _react2.fireEvent.keyDown(radioGroup, {
110
- key: "Enter",
111
- code: "Enter",
110
+ key: " ",
111
+ code: "Space",
112
112
  keyCode: 13,
113
113
  charCode: 13
114
114
  });
@@ -135,7 +135,7 @@ describe("Radio Group component tests", function () {
135
135
  var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
136
136
  name: "test",
137
137
  label: "test-radioGroup-label",
138
- options: single_disabled_options
138
+ options: singleDisabledOptions
139
139
  })),
140
140
  getByRole = _render4.getByRole,
141
141
  getAllByRole = _render4.getAllByRole;
@@ -403,7 +403,7 @@ describe("Radio Group component tests", function () {
403
403
  expect(onChange).not.toHaveBeenCalled();
404
404
  expect(document.activeElement).toEqual(checkedRadio);
405
405
  });
406
- test("The 'enter' key checks the current focused option if anyone is checked", function () {
406
+ test("The 'space' key checks the current focused option if anyone is checked", function () {
407
407
  var onChange = jest.fn();
408
408
 
409
409
  var _render14 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
@@ -422,37 +422,7 @@ describe("Radio Group component tests", function () {
422
422
  var submitInput = container.querySelector("input[name=\"test\"]");
423
423
 
424
424
  _react2.fireEvent.keyDown(radioGroup, {
425
- key: "Enter",
426
- code: "Enter",
427
- keyCode: 13,
428
- charCode: 13
429
- });
430
-
431
- expect(onChange).toHaveBeenCalledWith("1");
432
- expect(checkedRadio.getAttribute("aria-checked")).toBe("true");
433
- expect(checkedRadio.tabIndex).toBe(0);
434
- expect(submitInput.value).toBe("1");
435
- });
436
- test("The 'space' key checks the current focused option if anyone is checked", function () {
437
- var onChange = jest.fn();
438
-
439
- var _render15 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
440
- name: "test",
441
- label: "test-radio-group-label",
442
- helperText: "test-radio-group-helper-text",
443
- options: options,
444
- onChange: onChange
445
- })),
446
- getByRole = _render15.getByRole,
447
- getAllByRole = _render15.getAllByRole,
448
- container = _render15.container;
449
-
450
- var radioGroup = getByRole("radiogroup");
451
- var checkedRadio = getAllByRole("radio")[0];
452
- var submitInput = container.querySelector("input[name=\"test\"]");
453
-
454
- _react2.fireEvent.keyDown(radioGroup, {
455
- key: "Space",
425
+ key: " ",
456
426
  code: "Space",
457
427
  keyCode: 32,
458
428
  charCode: 32
@@ -467,7 +437,7 @@ describe("Radio Group component tests", function () {
467
437
  var onChange = jest.fn();
468
438
  var onBlur = jest.fn();
469
439
 
470
- var _render16 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
440
+ var _render15 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
471
441
  name: "test",
472
442
  label: "test-radio-group-label",
473
443
  helperText: "test-radio-group-helper-text",
@@ -475,9 +445,9 @@ describe("Radio Group component tests", function () {
475
445
  onChange: onChange,
476
446
  onBlur: onBlur
477
447
  })),
478
- getByRole = _render16.getByRole,
479
- getAllByRole = _render16.getAllByRole,
480
- container = _render16.container;
448
+ getByRole = _render15.getByRole,
449
+ getAllByRole = _render15.getAllByRole,
450
+ container = _render15.container;
481
451
 
482
452
  var radioGroup = getByRole("radiogroup");
483
453
  var radios = getAllByRole("radio");
@@ -510,7 +480,7 @@ describe("Radio Group component tests", function () {
510
480
  var onChange = jest.fn();
511
481
  var onBlur = jest.fn();
512
482
 
513
- var _render17 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
483
+ var _render16 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
514
484
  defaultValue: "8",
515
485
  name: "test",
516
486
  label: "test-radio-group-label",
@@ -519,9 +489,9 @@ describe("Radio Group component tests", function () {
519
489
  onChange: onChange,
520
490
  onBlur: onBlur
521
491
  })),
522
- getByRole = _render17.getByRole,
523
- getAllByRole = _render17.getAllByRole,
524
- container = _render17.container;
492
+ getByRole = _render16.getByRole,
493
+ getAllByRole = _render16.getAllByRole,
494
+ container = _render16.container;
525
495
 
526
496
  var radioGroup = getByRole("radiogroup");
527
497
  var radios = getAllByRole("radio");
@@ -559,7 +529,7 @@ describe("Radio Group component tests", function () {
559
529
  var onChange = jest.fn();
560
530
  var onBlur = jest.fn();
561
531
 
562
- var _render18 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
532
+ var _render17 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
563
533
  defaultValue: "2",
564
534
  name: "test",
565
535
  label: "test-radio-group-label",
@@ -568,9 +538,9 @@ describe("Radio Group component tests", function () {
568
538
  onChange: onChange,
569
539
  onBlur: onBlur
570
540
  })),
571
- getByRole = _render18.getByRole,
572
- getAllByRole = _render18.getAllByRole,
573
- container = _render18.container;
541
+ getByRole = _render17.getByRole,
542
+ getAllByRole = _render17.getAllByRole,
543
+ container = _render17.container;
574
544
 
575
545
  var radioGroup = getByRole("radiogroup");
576
546
  var radios = getAllByRole("radio");
@@ -607,16 +577,16 @@ describe("Radio Group component tests", function () {
607
577
  test("Keyboard focus movement continues from the last radio input clicked", function () {
608
578
  var onChange = jest.fn();
609
579
 
610
- var _render19 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
580
+ var _render18 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
611
581
  name: "test",
612
582
  label: "test-radio-group-label",
613
583
  helperText: "test-radio-group-helper-text",
614
584
  options: options,
615
585
  onChange: onChange
616
586
  })),
617
- getByRole = _render19.getByRole,
618
- getAllByRole = _render19.getAllByRole,
619
- container = _render19.container;
587
+ getByRole = _render18.getByRole,
588
+ getAllByRole = _render18.getAllByRole,
589
+ container = _render18.container;
620
590
 
621
591
  var radioGroup = getByRole("radiogroup");
622
592
  var radios = getAllByRole("radio");
@@ -655,7 +625,7 @@ describe("Radio Group component tests", function () {
655
625
  test("Readonly radio group lets the user move the focus, but neither click nor keyboard press changes the value", function () {
656
626
  var onChange = jest.fn();
657
627
 
658
- var _render20 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
628
+ var _render19 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_RadioGroup["default"], {
659
629
  name: "test",
660
630
  label: "test-radio-group-label",
661
631
  helperText: "test-radio-group-helper-text",
@@ -663,9 +633,9 @@ describe("Radio Group component tests", function () {
663
633
  onChange: onChange,
664
634
  readonly: true
665
635
  })),
666
- getByRole = _render20.getByRole,
667
- getAllByRole = _render20.getAllByRole,
668
- container = _render20.container;
636
+ getByRole = _render19.getByRole,
637
+ getAllByRole = _render19.getAllByRole,
638
+ container = _render19.container;
669
639
 
670
640
  var radioGroup = getByRole("radiogroup");
671
641
  var radios = getAllByRole("radio");
@@ -102,8 +102,8 @@ export declare type RefType = HTMLDivElement;
102
102
  * Single radio prop types.
103
103
  */
104
104
  export declare type RadioProps = {
105
- option: Option;
106
- currentValue?: string;
105
+ label: string;
106
+ checked: boolean;
107
107
  onClick: () => void;
108
108
  error?: string;
109
109
  disabled: boolean;
@@ -2,6 +2,10 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
6
+
7
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
8
+
5
9
  var _react = _interopRequireDefault(require("react"));
6
10
 
7
11
  var _react2 = require("@testing-library/react");
@@ -10,6 +14,44 @@ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
10
14
 
11
15
  var _ResultsetTable = _interopRequireDefault(require("./ResultsetTable"));
12
16
 
17
+ // Mocking DOMRect for Radix Primitive Popover
18
+ global.globalThis = global;
19
+
20
+ global.ResizeObserver = /*#__PURE__*/function () {
21
+ function ResizeObserver(cb) {
22
+ (0, _classCallCheck2["default"])(this, ResizeObserver);
23
+ this.cb = cb;
24
+ }
25
+
26
+ (0, _createClass2["default"])(ResizeObserver, [{
27
+ key: "observe",
28
+ value: function observe() {
29
+ this.cb([{
30
+ borderBoxSize: {
31
+ inlineSize: 0,
32
+ blockSize: 0
33
+ }
34
+ }]);
35
+ }
36
+ }, {
37
+ key: "unobserve",
38
+ value: function unobserve() {}
39
+ }]);
40
+ return ResizeObserver;
41
+ }();
42
+
43
+ global.DOMRect = {
44
+ fromRect: function fromRect() {
45
+ return {
46
+ top: 0,
47
+ left: 0,
48
+ bottom: 0,
49
+ right: 0,
50
+ width: 0,
51
+ height: 0
52
+ };
53
+ }
54
+ };
13
55
  var columns = [{
14
56
  displayValue: "Id",
15
57
  isSortable: false
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { ListboxProps } from "./types";
3
- declare const _default: React.MemoExoticComponent<React.ForwardRefExoticComponent<ListboxProps & React.RefAttributes<HTMLUListElement>>>;
3
+ declare const _default: React.MemoExoticComponent<({ id, currentValue, options, visualFocusIndex, lastOptionIndex, multiple, optional, optionalItem, searchable, handleOptionOnClick, getSelectWidth, }: ListboxProps) => JSX.Element>;
4
4
  export default _default;
package/select/Listbox.js CHANGED
@@ -11,7 +11,9 @@ exports["default"] = void 0;
11
11
 
12
12
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
13
 
14
- var _react = _interopRequireDefault(require("react"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
17
19
 
@@ -37,7 +39,7 @@ var groupsHaveOptions = function groupsHaveOptions(options) {
37
39
  }) : true;
38
40
  };
39
41
 
40
- var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
42
+ var Listbox = function Listbox(_ref) {
41
43
  var id = _ref.id,
42
44
  currentValue = _ref.currentValue,
43
45
  options = _ref.options,
@@ -47,9 +49,17 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
47
49
  optional = _ref.optional,
48
50
  optionalItem = _ref.optionalItem,
49
51
  searchable = _ref.searchable,
50
- handleOptionOnClick = _ref.handleOptionOnClick;
52
+ handleOptionOnClick = _ref.handleOptionOnClick,
53
+ getSelectWidth = _ref.getSelectWidth;
51
54
  var colorsTheme = (0, _useTheme["default"])();
52
55
  var translatedLabels = (0, _useTranslatedLabels["default"])();
56
+ var listboxRef = (0, _react.useRef)(null);
57
+
58
+ var _useState = (0, _react.useState)(null),
59
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
60
+ styles = _useState2[0],
61
+ setStyles = _useState2[1];
62
+
53
63
  var globalIndex = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
54
64
 
55
65
  var mapOptionFunc = function mapOptionFunc(option, mapIndex) {
@@ -92,6 +102,42 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
92
102
  }
93
103
  };
94
104
 
105
+ (0, _react.useLayoutEffect)(function () {
106
+ if (currentValue && !multiple) {
107
+ var _listEl$scrollTo;
108
+
109
+ var listEl = listboxRef === null || listboxRef === void 0 ? void 0 : listboxRef.current;
110
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
111
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
112
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
113
+ });
114
+ }
115
+ }, [currentValue, multiple]);
116
+ (0, _react.useLayoutEffect)(function () {
117
+ var _listboxRef$current, _visualFocusedOptionE;
118
+
119
+ var visualFocusedOptionEl = listboxRef === null || listboxRef === void 0 ? void 0 : (_listboxRef$current = listboxRef.current) === null || _listboxRef$current === void 0 ? void 0 : _listboxRef$current.querySelectorAll("[role='option']")[visualFocusIndex];
120
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
121
+ block: "nearest",
122
+ inline: "start"
123
+ });
124
+ }, [visualFocusIndex]);
125
+
126
+ var handleResize = function handleResize() {
127
+ setStyles({
128
+ width: getSelectWidth()
129
+ });
130
+ };
131
+
132
+ (0, _react.useLayoutEffect)(function () {
133
+ handleResize();
134
+ }, [getSelectWidth]);
135
+ (0, _react.useEffect)(function () {
136
+ window.addEventListener("resize", handleResize);
137
+ return function () {
138
+ window.removeEventListener("resize", handleResize);
139
+ };
140
+ }, [getSelectWidth]);
95
141
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
96
142
  theme: colorsTheme.select
97
143
  }, /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
@@ -102,10 +148,10 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
102
148
  onMouseDown: function onMouseDown(event) {
103
149
  event.preventDefault();
104
150
  },
105
- ref: ref,
151
+ ref: listboxRef,
106
152
  role: "listbox",
107
153
  "aria-multiselectable": multiple,
108
- "aria-orientation": "vertical"
154
+ style: styles
109
155
  }, searchable && (options.length === 0 || !groupsHaveOptions(options)) ? /*#__PURE__*/_react["default"].createElement(OptionsSystemMessage, null, /*#__PURE__*/_react["default"].createElement(NoMatchesFoundIcon, null, _Icons["default"].searchOff), translatedLabels.select.noMatchesErrorMessage) : optional && !multiple && /*#__PURE__*/_react["default"].createElement(_Option["default"], {
110
156
  key: "option-".concat(optionalItem.value),
111
157
  id: "option-".concat(0),
@@ -117,9 +163,9 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
117
163
  isLastOption: lastOptionIndex === 0,
118
164
  isSelected: multiple ? currentValue.includes(optionalItem.value) : currentValue === optionalItem.value
119
165
  }), options.map(mapOptionFunc)));
120
- });
166
+ };
121
167
 
122
- var ListboxContainer = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n z-index: 1;\n max-height: 304px;\n overflow-y: auto;\n top: calc(100% + 4px);\n left: 0;\n margin: 0;\n padding: 0.25rem 0;\n width: 100%;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 0.25rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n cursor: default;\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
168
+ var ListboxContainer = _styledComponents["default"].ul(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n box-sizing: border-box;\n max-height: 304px;\n overflow-y: auto;\n margin: 0;\n padding: 0.25rem 0;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 0.25rem;\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n cursor: default;\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n"])), function (props) {
123
169
  return props.theme.listDialogBackgroundColor;
124
170
  }, function (props) {
125
171
  return props.theme.listDialogBorderColor;