@dxc-technology/halstack-react 0.0.0-c2834c3 → 0.0.0-c291a0c

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 (66) hide show
  1. package/HalstackContext.js +1 -4
  2. package/badge/Badge.d.ts +1 -1
  3. package/badge/Badge.js +5 -3
  4. package/badge/types.d.ts +1 -0
  5. package/bleed/Bleed.js +1 -34
  6. package/bleed/Bleed.stories.tsx +62 -63
  7. package/bleed/types.d.ts +1 -1
  8. package/box/Box.js +22 -32
  9. package/card/Card.js +34 -36
  10. package/common/variables.js +4 -18
  11. package/footer/Icons.js +1 -1
  12. package/inline/Inline.d.ts +4 -0
  13. package/inline/Inline.js +54 -0
  14. package/inline/Inline.stories.tsx +264 -0
  15. package/inline/types.d.ts +32 -0
  16. package/{radio → inline}/types.js +0 -0
  17. package/inset/Inset.js +1 -34
  18. package/inset/Inset.stories.tsx +33 -33
  19. package/inset/types.d.ts +1 -1
  20. package/layout/ApplicationLayout.d.ts +4 -3
  21. package/layout/ApplicationLayout.js +83 -102
  22. package/layout/ApplicationLayout.stories.tsx +14 -59
  23. package/layout/Icons.d.ts +5 -0
  24. package/layout/Icons.js +13 -2
  25. package/layout/SidenavContext.d.ts +5 -0
  26. package/layout/SidenavContext.js +19 -0
  27. package/layout/types.d.ts +5 -10
  28. package/link/Link.d.ts +2 -2
  29. package/link/Link.js +23 -49
  30. package/link/types.d.ts +2 -3
  31. package/list/List.js +1 -1
  32. package/list/List.stories.tsx +16 -22
  33. package/list/types.d.ts +1 -1
  34. package/main.d.ts +3 -2
  35. package/main.js +16 -8
  36. package/package.json +2 -1
  37. package/paginator/Paginator.test.js +42 -0
  38. package/progress-bar/ProgressBar.js +1 -1
  39. package/progress-bar/ProgressBar.stories.jsx +11 -11
  40. package/quick-nav/QuickNav.js +19 -23
  41. package/resultsetTable/ResultsetTable.test.js +42 -0
  42. package/select/Listbox.d.ts +1 -1
  43. package/select/Listbox.js +30 -7
  44. package/select/Select.js +73 -67
  45. package/select/Select.stories.tsx +130 -98
  46. package/select/Select.test.js +299 -194
  47. package/select/types.d.ts +3 -4
  48. package/sidenav/Sidenav.d.ts +1 -1
  49. package/sidenav/Sidenav.js +20 -9
  50. package/stack/Stack.d.ts +2 -1
  51. package/stack/Stack.js +23 -70
  52. package/stack/Stack.stories.tsx +139 -78
  53. package/stack/types.d.ts +11 -7
  54. package/tabs-nav/NavTabs.d.ts +8 -0
  55. package/tabs-nav/NavTabs.js +125 -0
  56. package/tabs-nav/NavTabs.stories.tsx +170 -0
  57. package/tabs-nav/NavTabs.test.js +82 -0
  58. package/tabs-nav/Tab.d.ts +4 -0
  59. package/tabs-nav/Tab.js +132 -0
  60. package/tabs-nav/types.d.ts +53 -0
  61. package/tabs-nav/types.js +5 -0
  62. package/radio/Radio.d.ts +0 -4
  63. package/radio/Radio.js +0 -173
  64. package/radio/Radio.stories.tsx +0 -192
  65. package/radio/Radio.test.js +0 -71
  66. package/radio/types.d.ts +0 -54
@@ -25,13 +25,11 @@ var _Stack = _interopRequireDefault(require("../stack/Stack"));
25
25
 
26
26
  var _Inset = _interopRequireDefault(require("../inset/Inset"));
27
27
 
28
- var _List = _interopRequireDefault(require("../list/List"));
29
-
30
28
  var _Text = _interopRequireDefault(require("../text/Text"));
31
29
 
32
30
  var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
33
31
 
34
- var _templateObject, _templateObject2;
32
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
35
33
 
36
34
  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); }
37
35
 
@@ -45,40 +43,34 @@ var DxcQuickNav = function DxcQuickNav(_ref) {
45
43
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
46
44
  theme: colorsTheme.quickNav
47
45
  }, /*#__PURE__*/_react["default"].createElement(QuickNavContainer, null, /*#__PURE__*/_react["default"].createElement(_Stack["default"], {
48
- gutter: "xsmall"
46
+ gutter: "0.5rem"
49
47
  }, /*#__PURE__*/_react["default"].createElement(_Heading["default"], {
50
48
  level: 4,
51
49
  text: title || translatedLabels.quickNav.contentTitle
52
- }), /*#__PURE__*/_react["default"].createElement(_List["default"], null, /*#__PURE__*/_react["default"].createElement(_Stack["default"], {
53
- gutter: "xsmall"
50
+ }), /*#__PURE__*/_react["default"].createElement(ListColumn, null, /*#__PURE__*/_react["default"].createElement(_Stack["default"], {
51
+ gutter: "0.5rem"
54
52
  }, links.map(function (link) {
55
53
  var _link$links;
56
54
 
57
- return /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
58
- space: "xxsmall"
55
+ return /*#__PURE__*/_react["default"].createElement(ListRow, null, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
56
+ space: "0.25rem"
59
57
  }, /*#__PURE__*/_react["default"].createElement(_Text["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
60
58
  href: "#".concat((0, _slugify["default"])(link === null || link === void 0 ? void 0 : link.label, {
61
59
  lower: true
62
- })),
63
- isSelected: location.href.includes("#".concat((0, _slugify["default"])(link === null || link === void 0 ? void 0 : link.label, {
64
- lower: true
65
- })))
60
+ }))
66
61
  }, link === null || link === void 0 ? void 0 : link.label), (_link$links = link.links) === null || _link$links === void 0 ? void 0 : _link$links.map(function (sublink) {
67
- return /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
68
- horizontal: "xsmall"
62
+ return /*#__PURE__*/_react["default"].createElement(ListRow, null, /*#__PURE__*/_react["default"].createElement(_Inset["default"], {
63
+ horizontal: "0.5rem"
69
64
  }, /*#__PURE__*/_react["default"].createElement(_Text["default"], null, /*#__PURE__*/_react["default"].createElement(Link, {
70
65
  href: "#".concat((0, _slugify["default"])(sublink === null || sublink === void 0 ? void 0 : sublink.label, {
71
66
  lower: true
72
- })),
73
- isSelected: location.href.includes("#".concat((0, _slugify["default"])(sublink === null || sublink === void 0 ? void 0 : sublink.label, {
74
- lower: true
75
- })))
76
- }, sublink === null || sublink === void 0 ? void 0 : sublink.label)));
77
- })));
67
+ }))
68
+ }, sublink === null || sublink === void 0 ? void 0 : sublink.label))));
69
+ }))));
78
70
  }))))));
79
71
  };
80
72
 
81
- var QuickNavContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n border-left: 2px solid ", ";\n li > div:first-child {\n display: none;\n }\n"])), function (props) {
73
+ var QuickNavContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n border-left: 2px solid ", ";\n"])), function (props) {
82
74
  return props.theme.paddingTop;
83
75
  }, function (props) {
84
76
  return props.theme.paddingBottom;
@@ -90,7 +82,11 @@ var QuickNavContainer = _styledComponents["default"].div(_templateObject || (_te
90
82
  return props.theme.dividerBorderColor;
91
83
  });
92
84
 
93
- var Link = _styledComponents["default"].a(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n text-decoration: none;\n font-size: ", ";\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n\n &:hover {\n color: ", ";\n }\n &:focus {\n outline-color: ", ";\n outline-style: ", ";\n outline-width: ", ";\n border-radius: ", ";\n }\n"])), function (props) {
85
+ var ListColumn = _styledComponents["default"].ul(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n list-style-type: none;\n margin: 0;\n padding: 0;\n"])));
86
+
87
+ var ListRow = _styledComponents["default"].li(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])([""])));
88
+
89
+ var Link = _styledComponents["default"].a(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n text-decoration: none;\n font-size: ", ";\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n\n &:hover {\n color: ", ";\n }\n &:focus {\n outline-color: ", ";\n outline-style: ", ";\n outline-width: ", ";\n border-radius: ", ";\n }\n"])), function (props) {
94
90
  return props.theme.fontSize;
95
91
  }, function (props) {
96
92
  return props.theme.fontFamily;
@@ -99,7 +95,7 @@ var Link = _styledComponents["default"].a(_templateObject2 || (_templateObject2
99
95
  }, function (props) {
100
96
  return props.theme.fontWeight;
101
97
  }, function (props) {
102
- return props.isSelected && props.theme.selectedFontColor || props.theme.fontColor;
98
+ return props.theme.fontColor;
103
99
  }, function (props) {
104
100
  return props.theme.hoverFontColor;
105
101
  }, function (props) {
@@ -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, styles, }: ListboxProps) => JSX.Element>;
4
4
  export default _default;
package/select/Listbox.js CHANGED
@@ -11,7 +11,7 @@ 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 _react = _interopRequireWildcard(require("react"));
15
15
 
16
16
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
17
17
 
@@ -37,7 +37,7 @@ var groupsHaveOptions = function groupsHaveOptions(options) {
37
37
  }) : true;
38
38
  };
39
39
 
40
- var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
40
+ var Listbox = function Listbox(_ref) {
41
41
  var id = _ref.id,
42
42
  currentValue = _ref.currentValue,
43
43
  options = _ref.options,
@@ -47,9 +47,11 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
47
47
  optional = _ref.optional,
48
48
  optionalItem = _ref.optionalItem,
49
49
  searchable = _ref.searchable,
50
- handleOptionOnClick = _ref.handleOptionOnClick;
50
+ handleOptionOnClick = _ref.handleOptionOnClick,
51
+ styles = _ref.styles;
51
52
  var colorsTheme = (0, _useTheme["default"])();
52
53
  var translatedLabels = (0, _useTranslatedLabels["default"])();
54
+ var listboxRef = (0, _react.useRef)(null);
53
55
  var globalIndex = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
54
56
 
55
57
  var mapOptionFunc = function mapOptionFunc(option, mapIndex) {
@@ -92,6 +94,26 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
92
94
  }
93
95
  };
94
96
 
97
+ (0, _react.useLayoutEffect)(function () {
98
+ if (currentValue && !multiple) {
99
+ var _listEl$scrollTo;
100
+
101
+ var listEl = listboxRef === null || listboxRef === void 0 ? void 0 : listboxRef.current;
102
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
103
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
104
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
105
+ });
106
+ }
107
+ }, [currentValue, multiple]);
108
+ (0, _react.useLayoutEffect)(function () {
109
+ var _listboxRef$current, _visualFocusedOptionE;
110
+
111
+ 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];
112
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
113
+ block: "nearest",
114
+ inline: "start"
115
+ });
116
+ }, [visualFocusIndex]);
95
117
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
96
118
  theme: colorsTheme.select
97
119
  }, /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
@@ -102,10 +124,11 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
102
124
  onMouseDown: function onMouseDown(event) {
103
125
  event.preventDefault();
104
126
  },
105
- ref: ref,
127
+ ref: listboxRef,
106
128
  role: "listbox",
107
129
  "aria-multiselectable": multiple,
108
- "aria-orientation": "vertical"
130
+ "aria-orientation": "vertical",
131
+ style: styles
109
132
  }, 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
133
  key: "option-".concat(optionalItem.value),
111
134
  id: "option-".concat(0),
@@ -117,9 +140,9 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
117
140
  isLastOption: lastOptionIndex === 0,
118
141
  isSelected: multiple ? currentValue.includes(optionalItem.value) : currentValue === optionalItem.value
119
142
  }), options.map(mapOptionFunc)));
120
- });
143
+ };
121
144
 
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) {
145
+ 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
146
  return props.theme.listDialogBackgroundColor;
124
147
  }, function (props) {
125
148
  return props.theme.listDialogBorderColor;
package/select/Select.js CHANGED
@@ -35,6 +35,8 @@ var _Icons = _interopRequireDefault(require("./Icons"));
35
35
 
36
36
  var _Listbox = _interopRequireDefault(require("./Listbox"));
37
37
 
38
+ var Popover = _interopRequireWildcard(require("@radix-ui/react-popover"));
39
+
38
40
  var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17;
39
41
 
40
42
  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); }
@@ -55,6 +57,10 @@ var filteredGroupsHaveOptions = function filteredGroupsHaveOptions(filteredOptio
55
57
  }) : true;
56
58
  };
57
59
 
60
+ var canOpenOptions = function canOpenOptions(options, disabled) {
61
+ return !disabled && (options === null || options === void 0 ? void 0 : options.length) > 0 && groupsHaveOptions(options);
62
+ };
63
+
58
64
  var filterOptionsBySearchValue = function filterOptionsBySearchValue(options, searchValue) {
59
65
  if ((options === null || options === void 0 ? void 0 : options.length) > 0) {
60
66
  if (options[0].options) return options.map(function (optionGroup) {
@@ -130,6 +136,10 @@ var getSelectedOption = function getSelectedOption(value, options, multiple, opt
130
136
  };
131
137
  };
132
138
 
139
+ var notOptionalCheck = function notOptionalCheck(value, multiple, optional) {
140
+ return !optional && (multiple ? value.length === 0 : value === "");
141
+ };
142
+
133
143
  var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
134
144
  var _selectedOption$label;
135
145
 
@@ -187,9 +197,13 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
187
197
  isOpen = _useState10[0],
188
198
  changeIsOpen = _useState10[1];
189
199
 
190
- var selectContainerRef = (0, _react.useRef)(null);
200
+ var _useState11 = (0, _react.useState)(null),
201
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
202
+ listboxStyles = _useState12[0],
203
+ setListboxStyles = _useState12[1];
204
+
205
+ var selectRef = (0, _react.useRef)(null);
191
206
  var selectSearchInputRef = (0, _react.useRef)(null);
192
- var selectOptionsListRef = (0, _react.useRef)(null);
193
207
  var colorsTheme = (0, _useTheme["default"])();
194
208
  var translatedLabels = (0, _useTranslatedLabels["default"])();
195
209
  var optionalItem = {
@@ -209,20 +223,8 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
209
223
  selectedOption = _useMemo.selectedOption,
210
224
  singleSelectionIndex = _useMemo.singleSelectionIndex;
211
225
 
212
- var notOptionalCheck = function notOptionalCheck(value) {
213
- return !optional && value === "";
214
- };
215
-
216
- var notOptionalMultipleCheck = function notOptionalMultipleCheck(value) {
217
- return !optional && value.length === 0;
218
- };
219
-
220
- var canBeOpenOptions = function canBeOpenOptions() {
221
- return !disabled && (options === null || options === void 0 ? void 0 : options.length) > 0 && groupsHaveOptions(options);
222
- };
223
-
224
226
  var openOptions = function openOptions() {
225
- if (!isOpen && canBeOpenOptions()) changeIsOpen(true);
227
+ if (!isOpen && canOpenOptions(options, disabled)) changeIsOpen(true);
226
228
  };
227
229
 
228
230
  var closeOptions = function closeOptions() {
@@ -233,27 +235,21 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
233
235
  };
234
236
 
235
237
  var handleSelectChangeValue = function handleSelectChangeValue(newOption) {
238
+ var newValue;
239
+
236
240
  if (multiple) {
237
- var res = [];
238
- if ((value !== null && value !== void 0 ? value : innerValue).includes(newOption.value)) res = (value !== null && value !== void 0 ? value : innerValue).filter(function (optionVal) {
241
+ if ((value !== null && value !== void 0 ? value : innerValue).includes(newOption.value)) newValue = (value !== null && value !== void 0 ? value : innerValue).filter(function (optionVal) {
239
242
  return optionVal !== newOption.value;
240
- });else res = [].concat((0, _toConsumableArray2["default"])(value !== null && value !== void 0 ? value : innerValue), [newOption.value]);
241
- value !== null && value !== void 0 ? value : setInnerValue(res);
242
- if (notOptionalMultipleCheck(res)) onChange === null || onChange === void 0 ? void 0 : onChange({
243
- value: res,
244
- error: translatedLabels.formFields.requiredValueErrorMessage
245
- });else onChange === null || onChange === void 0 ? void 0 : onChange({
246
- value: res
247
- });
248
- } else {
249
- value !== null && value !== void 0 ? value : setInnerValue(newOption.value);
250
- if (notOptionalCheck(newOption.value)) onChange === null || onChange === void 0 ? void 0 : onChange({
251
- value: newOption.value,
252
- error: translatedLabels.formFields.requiredValueErrorMessage
253
- });else onChange === null || onChange === void 0 ? void 0 : onChange({
254
- value: newOption.value
255
- });
256
- }
243
+ });else newValue = [].concat((0, _toConsumableArray2["default"])(value !== null && value !== void 0 ? value : innerValue), [newOption.value]);
244
+ } else newValue = newOption.value;
245
+
246
+ value !== null && value !== void 0 ? value : setInnerValue(newValue);
247
+ notOptionalCheck(newValue, multiple, optional) ? onChange === null || onChange === void 0 ? void 0 : onChange({
248
+ value: newValue,
249
+ error: translatedLabels.formFields.requiredValueErrorMessage
250
+ }) : onChange === null || onChange === void 0 ? void 0 : onChange({
251
+ value: newValue
252
+ });
257
253
  };
258
254
 
259
255
  var handleSelectOnClick = function handleSelectOnClick() {
@@ -274,11 +270,12 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
274
270
  if (!event.currentTarget.contains(event.relatedTarget)) {
275
271
  closeOptions();
276
272
  setSearchValue("");
277
- if (notOptionalCheck(value !== null && value !== void 0 ? value : innerValue)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
278
- value: value !== null && value !== void 0 ? value : innerValue,
273
+ var currentValue = value !== null && value !== void 0 ? value : innerValue;
274
+ notOptionalCheck(currentValue, multiple, optional) ? onBlur === null || onBlur === void 0 ? void 0 : onBlur({
275
+ value: currentValue,
279
276
  error: translatedLabels.formFields.requiredValueErrorMessage
280
- });else onBlur === null || onBlur === void 0 ? void 0 : onBlur({
281
- value: value !== null && value !== void 0 ? value : innerValue
277
+ }) : onBlur === null || onBlur === void 0 ? void 0 : onBlur({
278
+ value: currentValue
282
279
  });
283
280
  }
284
281
  };
@@ -368,26 +365,23 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
368
365
  !multiple && closeOptions();
369
366
  setSearchValue("");
370
367
  }, [handleSelectChangeValue, closeOptions, multiple]);
371
- (0, _react.useLayoutEffect)(function () {
372
- if (isOpen && singleSelectionIndex) {
373
- var _listEl$scrollTo;
374
-
375
- var listEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : selectOptionsListRef.current;
376
- var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
377
- listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
378
- top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
379
- });
380
- }
381
- }, [isOpen]);
382
- (0, _react.useLayoutEffect)(function () {
383
- var _selectOptionsListRef, _visualFocusedOptionE;
384
-
385
- var visualFocusedOptionEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : (_selectOptionsListRef = selectOptionsListRef.current) === null || _selectOptionsListRef === void 0 ? void 0 : _selectOptionsListRef.querySelectorAll("[role='option']")[visualFocusIndex];
386
- visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
387
- block: "nearest",
388
- inline: "start"
368
+
369
+ var handleListboxResize = function handleListboxResize() {
370
+ var _selectRef$current;
371
+
372
+ var rect = selectRef === null || selectRef === void 0 ? void 0 : (_selectRef$current = selectRef.current) === null || _selectRef$current === void 0 ? void 0 : _selectRef$current.getBoundingClientRect();
373
+ setListboxStyles({
374
+ width: rect === null || rect === void 0 ? void 0 : rect.width
389
375
  });
390
- }, [visualFocusIndex]);
376
+ };
377
+
378
+ (0, _react.useEffect)(function () {
379
+ handleListboxResize();
380
+ window.addEventListener("resize", handleListboxResize);
381
+ return function () {
382
+ window.removeEventListener("resize", handleListboxResize);
383
+ };
384
+ }, [setListboxStyles]);
391
385
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
392
386
  theme: colorsTheme.select
393
387
  }, /*#__PURE__*/_react["default"].createElement(SelectContainer, {
@@ -398,12 +392,16 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
398
392
  id: selectLabelId,
399
393
  disabled: disabled,
400
394
  onClick: function onClick() {
401
- selectContainerRef.current.focus();
395
+ selectRef.current.focus();
402
396
  },
403
397
  helperText: helperText
404
398
  }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, translatedLabels.formFields.optionalLabel)), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
405
399
  disabled: disabled
406
- }, helperText), /*#__PURE__*/_react["default"].createElement(Select, {
400
+ }, helperText), /*#__PURE__*/_react["default"].createElement(Popover.Root, {
401
+ open: isOpen
402
+ }, /*#__PURE__*/_react["default"].createElement(Popover.Trigger, {
403
+ asChild: true
404
+ }, /*#__PURE__*/_react["default"].createElement(Select, {
407
405
  id: selectId,
408
406
  disabled: disabled,
409
407
  error: error,
@@ -411,14 +409,14 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
411
409
  onClick: handleSelectOnClick,
412
410
  onFocus: handleSelectOnFocus,
413
411
  onKeyDown: handleSelectOnKeyDown,
414
- ref: selectContainerRef,
412
+ ref: selectRef,
415
413
  tabIndex: tabIndex,
416
414
  role: "combobox",
417
415
  "aria-controls": optionsListId,
418
416
  "aria-disabled": disabled,
419
417
  "aria-expanded": isOpen,
420
418
  "aria-haspopup": "listbox",
421
- "aria-labelledby": selectLabelId,
419
+ "aria-labelledby": label ? selectLabelId : undefined,
422
420
  "aria-activedescendant": visualFocusIndex >= 0 ? "option-".concat(visualFocusIndex) : undefined,
423
421
  "aria-invalid": error ? "true" : "false",
424
422
  "aria-errormessage": error ? errorId : undefined,
@@ -467,7 +465,17 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
467
465
  "aria-label": translatedLabels.select.actionClearSearchTitle
468
466
  }, _Icons["default"].clear), /*#__PURE__*/_react["default"].createElement(CollapseIndicator, {
469
467
  disabled: disabled
470
- }, isOpen ? _Icons["default"].arrowUp : _Icons["default"].arrowDown), isOpen && /*#__PURE__*/_react["default"].createElement(_Listbox["default"], {
468
+ }, isOpen ? _Icons["default"].arrowUp : _Icons["default"].arrowDown))), /*#__PURE__*/_react["default"].createElement(Popover.Content, {
469
+ sideOffset: 4,
470
+ onOpenAutoFocus: function onOpenAutoFocus(event) {
471
+ // Avoid select to lose focus when the list is opened
472
+ event.preventDefault();
473
+ },
474
+ onCloseAutoFocus: function onCloseAutoFocus(event) {
475
+ // Avoid select to lose focus when the list is closed
476
+ event.preventDefault();
477
+ }
478
+ }, /*#__PURE__*/_react["default"].createElement(_Listbox["default"], {
471
479
  id: optionsListId,
472
480
  currentValue: value !== null && value !== void 0 ? value : innerValue,
473
481
  options: searchable ? filteredOptions : options,
@@ -478,8 +486,8 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
478
486
  optionalItem: optionalItem,
479
487
  searchable: searchable,
480
488
  handleOptionOnClick: handleOptionOnClick,
481
- ref: selectOptionsListRef
482
- })), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
489
+ styles: listboxStyles
490
+ }))), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
483
491
  id: errorId,
484
492
  "aria-live": error ? "assertive" : "off"
485
493
  }, error)));
@@ -578,9 +586,7 @@ var SelectionNumber = _styledComponents["default"].span(_templateObject7 || (_te
578
586
  return props.disabled ? "cursor: not-allowed;" : "cursor: default;";
579
587
  });
580
588
 
581
- var ClearOptionsAction = _styledComponents["default"].button(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n width: 23px;\n height: 22px;\n font-size: 1rem;\n font-family: ", ";\n border: none;\n padding: 0.25rem;\n ", "\n background-color: ", ";\n color: ", ";\n\n :focus-visible {\n outline: none;\n }\n ", "\n\n svg {\n line-height: 18px;\n }\n"])), function (props) {
582
- return props.theme.fontFamily;
583
- }, function (props) {
589
+ var ClearOptionsAction = _styledComponents["default"].button(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n width: 23px;\n height: 22px;\n border: none;\n padding: 0.25rem;\n ", "\n background-color: ", ";\n color: ", ";\n\n :focus-visible {\n outline: none;\n }\n ", "\n\n svg {\n line-height: 18px;\n }\n"])), function (props) {
584
590
  return props.disabled ? "cursor: not-allowed;" : "cursor: pointer;";
585
591
  }, function (props) {
586
592
  return props.disabled ? "transparent" : props.theme.enabledSelectionIndicatorActionBackgroundColor;