@dxc-technology/halstack-react 0.0.0-910214a → 0.0.0-918d2c8

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 (195) hide show
  1. package/HalstackContext.js +90 -50
  2. package/accordion/Accordion.js +117 -104
  3. package/accordion/Accordion.stories.tsx +104 -16
  4. package/accordion/Accordion.test.js +9 -10
  5. package/accordion/types.d.ts +5 -4
  6. package/accordion-group/AccordionGroup.js +2 -21
  7. package/accordion-group/AccordionGroup.stories.tsx +27 -1
  8. package/accordion-group/AccordionGroup.test.js +20 -45
  9. package/accordion-group/types.d.ts +10 -3
  10. package/alert/Alert.js +1 -1
  11. package/alert/Alert.stories.tsx +28 -0
  12. package/bleed/Bleed.stories.tsx +63 -63
  13. package/box/Box.js +1 -1
  14. package/box/Box.stories.tsx +15 -0
  15. package/box/types.d.ts +1 -0
  16. package/bulleted-list/BulletedList.d.ts +7 -0
  17. package/bulleted-list/BulletedList.js +123 -0
  18. package/bulleted-list/BulletedList.stories.tsx +200 -0
  19. package/bulleted-list/types.d.ts +11 -0
  20. package/{list → bulleted-list}/types.js +0 -0
  21. package/button/Button.js +50 -70
  22. package/button/Button.stories.tsx +159 -8
  23. package/button/types.d.ts +7 -7
  24. package/card/types.d.ts +1 -0
  25. package/checkbox/Checkbox.d.ts +2 -2
  26. package/checkbox/Checkbox.js +92 -99
  27. package/checkbox/Checkbox.stories.tsx +131 -59
  28. package/checkbox/Checkbox.test.js +93 -16
  29. package/checkbox/types.d.ts +6 -2
  30. package/chip/Chip.js +16 -22
  31. package/chip/Chip.stories.tsx +96 -9
  32. package/chip/types.d.ts +1 -1
  33. package/common/variables.js +309 -260
  34. package/date-input/Calendar.d.ts +4 -0
  35. package/date-input/Calendar.js +258 -0
  36. package/date-input/DateInput.js +134 -237
  37. package/date-input/DateInput.stories.tsx +199 -33
  38. package/date-input/DateInput.test.js +494 -138
  39. package/date-input/DatePicker.d.ts +4 -0
  40. package/date-input/DatePicker.js +146 -0
  41. package/date-input/Icons.d.ts +6 -0
  42. package/date-input/Icons.js +75 -0
  43. package/date-input/YearPicker.d.ts +4 -0
  44. package/date-input/YearPicker.js +126 -0
  45. package/date-input/types.d.ts +51 -0
  46. package/dialog/Dialog.js +50 -28
  47. package/dialog/Dialog.stories.tsx +99 -22
  48. package/dialog/Dialog.test.js +34 -4
  49. package/dialog/types.d.ts +3 -2
  50. package/dropdown/Dropdown.d.ts +1 -1
  51. package/dropdown/Dropdown.js +246 -249
  52. package/dropdown/Dropdown.stories.tsx +245 -56
  53. package/dropdown/Dropdown.test.js +504 -108
  54. package/dropdown/DropdownMenu.d.ts +4 -0
  55. package/dropdown/DropdownMenu.js +70 -0
  56. package/dropdown/DropdownMenuItem.d.ts +4 -0
  57. package/dropdown/DropdownMenuItem.js +81 -0
  58. package/dropdown/types.d.ts +25 -5
  59. package/file-input/FileInput.d.ts +2 -2
  60. package/file-input/FileInput.js +177 -219
  61. package/file-input/FileInput.stories.tsx +122 -11
  62. package/file-input/FileInput.test.js +53 -12
  63. package/file-input/FileItem.d.ts +4 -14
  64. package/file-input/FileItem.js +38 -63
  65. package/file-input/types.d.ts +17 -0
  66. package/flex/Flex.d.ts +4 -0
  67. package/flex/Flex.js +69 -0
  68. package/flex/Flex.stories.tsx +103 -0
  69. package/flex/types.d.ts +32 -0
  70. package/{row → flex}/types.js +0 -0
  71. package/footer/Footer.stories.tsx +99 -1
  72. package/footer/Icons.js +1 -1
  73. package/footer/types.d.ts +2 -1
  74. package/header/Header.js +87 -87
  75. package/header/Header.stories.tsx +152 -9
  76. package/header/Icons.js +2 -2
  77. package/header/types.d.ts +3 -2
  78. package/inset/Inset.js +1 -34
  79. package/inset/Inset.stories.tsx +36 -36
  80. package/inset/types.d.ts +1 -1
  81. package/layout/ApplicationLayout.d.ts +15 -6
  82. package/layout/ApplicationLayout.js +37 -65
  83. package/layout/ApplicationLayout.stories.tsx +80 -44
  84. package/layout/types.d.ts +17 -27
  85. package/link/Link.js +2 -2
  86. package/link/Link.stories.tsx +73 -6
  87. package/link/types.d.ts +1 -1
  88. package/main.d.ts +5 -8
  89. package/main.js +28 -52
  90. package/number-input/NumberInput.test.js +43 -7
  91. package/package.json +16 -20
  92. package/paginator/Icons.d.ts +5 -0
  93. package/paginator/Icons.js +16 -28
  94. package/paginator/Paginator.js +6 -12
  95. package/paginator/Paginator.stories.tsx +24 -0
  96. package/paginator/Paginator.test.js +50 -1
  97. package/paragraph/Paragraph.d.ts +6 -0
  98. package/paragraph/Paragraph.js +38 -0
  99. package/paragraph/Paragraph.stories.tsx +44 -0
  100. package/password-input/PasswordInput.test.js +13 -12
  101. package/progress-bar/ProgressBar.d.ts +2 -2
  102. package/progress-bar/ProgressBar.js +59 -53
  103. package/progress-bar/ProgressBar.stories.jsx +38 -3
  104. package/progress-bar/ProgressBar.test.js +67 -22
  105. package/progress-bar/types.d.ts +3 -4
  106. package/quick-nav/QuickNav.js +25 -20
  107. package/quick-nav/QuickNav.stories.tsx +145 -26
  108. package/radio-group/Radio.d.ts +1 -1
  109. package/radio-group/Radio.js +43 -28
  110. package/radio-group/RadioGroup.js +23 -22
  111. package/radio-group/RadioGroup.stories.tsx +132 -18
  112. package/radio-group/RadioGroup.test.js +123 -96
  113. package/radio-group/types.d.ts +2 -2
  114. package/resultsetTable/Icons.d.ts +7 -0
  115. package/resultsetTable/Icons.js +51 -0
  116. package/resultsetTable/ResultsetTable.js +48 -107
  117. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  118. package/resultsetTable/ResultsetTable.test.js +60 -41
  119. package/resultsetTable/types.d.ts +2 -2
  120. package/select/Listbox.d.ts +1 -1
  121. package/select/Listbox.js +33 -16
  122. package/select/Option.js +11 -24
  123. package/select/Select.js +79 -60
  124. package/select/Select.stories.tsx +513 -136
  125. package/select/Select.test.js +358 -250
  126. package/select/types.d.ts +3 -6
  127. package/sidenav/Sidenav.d.ts +6 -5
  128. package/sidenav/Sidenav.js +174 -55
  129. package/sidenav/Sidenav.stories.tsx +249 -149
  130. package/sidenav/Sidenav.test.js +25 -37
  131. package/sidenav/types.d.ts +50 -27
  132. package/slider/Slider.d.ts +2 -2
  133. package/slider/Slider.js +120 -95
  134. package/slider/Slider.stories.tsx +64 -1
  135. package/slider/Slider.test.js +121 -21
  136. package/slider/types.d.ts +6 -2
  137. package/spinner/Spinner.js +2 -2
  138. package/spinner/Spinner.stories.jsx +27 -1
  139. package/switch/Switch.d.ts +2 -2
  140. package/switch/Switch.js +135 -68
  141. package/switch/Switch.stories.tsx +41 -30
  142. package/switch/Switch.test.js +144 -17
  143. package/switch/types.d.ts +6 -2
  144. package/table/Table.js +1 -1
  145. package/table/Table.stories.jsx +80 -1
  146. package/table/Table.test.js +1 -1
  147. package/tabs/Tab.d.ts +4 -0
  148. package/tabs/Tab.js +133 -0
  149. package/tabs/Tabs.js +360 -104
  150. package/tabs/Tabs.stories.tsx +119 -5
  151. package/tabs/Tabs.test.js +217 -6
  152. package/tabs/types.d.ts +15 -5
  153. package/tabs-nav/NavTabs.js +5 -5
  154. package/tabs-nav/NavTabs.stories.tsx +8 -6
  155. package/tabs-nav/Tab.js +8 -12
  156. package/tabs-nav/types.d.ts +1 -1
  157. package/tag/Tag.js +1 -1
  158. package/tag/Tag.stories.tsx +14 -1
  159. package/tag/types.d.ts +1 -1
  160. package/text-input/Icons.d.ts +8 -0
  161. package/text-input/Icons.js +60 -0
  162. package/text-input/Suggestion.js +38 -9
  163. package/text-input/Suggestions.d.ts +4 -0
  164. package/text-input/Suggestions.js +134 -0
  165. package/text-input/TextInput.js +195 -292
  166. package/text-input/TextInput.stories.tsx +280 -185
  167. package/text-input/TextInput.test.js +737 -725
  168. package/text-input/types.d.ts +22 -3
  169. package/textarea/Textarea.stories.jsx +60 -1
  170. package/toggle-group/ToggleGroup.stories.tsx +42 -0
  171. package/toggle-group/types.d.ts +1 -1
  172. package/typography/Typography.d.ts +4 -0
  173. package/typography/Typography.js +131 -0
  174. package/typography/Typography.stories.tsx +198 -0
  175. package/typography/types.d.ts +18 -0
  176. package/{stack → typography}/types.js +0 -0
  177. package/wizard/Wizard.js +9 -16
  178. package/wizard/Wizard.stories.tsx +40 -1
  179. package/wizard/types.d.ts +5 -4
  180. package/common/RequiredComponent.js +0 -32
  181. package/list/List.d.ts +0 -4
  182. package/list/List.js +0 -47
  183. package/list/List.stories.tsx +0 -95
  184. package/list/types.d.ts +0 -7
  185. package/row/Row.d.ts +0 -3
  186. package/row/Row.js +0 -127
  187. package/row/Row.stories.tsx +0 -237
  188. package/row/types.d.ts +0 -28
  189. package/stack/Stack.d.ts +0 -3
  190. package/stack/Stack.js +0 -97
  191. package/stack/Stack.stories.tsx +0 -164
  192. package/stack/types.d.ts +0 -24
  193. package/text/Text.d.ts +0 -7
  194. package/text/Text.js +0 -30
  195. package/text/Text.stories.tsx +0 -19
package/select/Listbox.js CHANGED
@@ -11,11 +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 _react = _interopRequireWildcard(require("react"));
15
15
 
16
- var _styledComponents = _interopRequireWildcard(require("styled-components"));
17
-
18
- var _useTheme = _interopRequireDefault(require("../useTheme"));
16
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
19
17
 
20
18
  var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
21
19
 
@@ -37,7 +35,7 @@ var groupsHaveOptions = function groupsHaveOptions(options) {
37
35
  }) : true;
38
36
  };
39
37
 
40
- var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
38
+ var Listbox = function Listbox(_ref) {
41
39
  var id = _ref.id,
42
40
  currentValue = _ref.currentValue,
43
41
  options = _ref.options,
@@ -47,10 +45,11 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
47
45
  optional = _ref.optional,
48
46
  optionalItem = _ref.optionalItem,
49
47
  searchable = _ref.searchable,
50
- handleOptionOnClick = _ref.handleOptionOnClick;
51
- var colorsTheme = (0, _useTheme["default"])();
48
+ handleOptionOnClick = _ref.handleOptionOnClick,
49
+ styles = _ref.styles;
52
50
  var translatedLabels = (0, _useTranslatedLabels["default"])();
53
- var globalIndex = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
51
+ var listboxRef = (0, _react.useRef)(null);
52
+ var globalIndex = optional && !multiple ? 0 : -1;
54
53
 
55
54
  var mapOptionFunc = function mapOptionFunc(option, mapIndex) {
56
55
  if (option.options) {
@@ -92,9 +91,27 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
92
91
  }
93
92
  };
94
93
 
95
- return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
96
- theme: colorsTheme.select
97
- }, /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
94
+ (0, _react.useLayoutEffect)(function () {
95
+ if (currentValue && !multiple) {
96
+ var _listEl$scrollTo;
97
+
98
+ var listEl = listboxRef === null || listboxRef === void 0 ? void 0 : listboxRef.current;
99
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
100
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
101
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
102
+ });
103
+ }
104
+ }, [currentValue, multiple]);
105
+ (0, _react.useLayoutEffect)(function () {
106
+ var _listboxRef$current, _visualFocusedOptionE;
107
+
108
+ 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];
109
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
110
+ block: "nearest",
111
+ inline: "start"
112
+ });
113
+ }, [visualFocusIndex]);
114
+ return /*#__PURE__*/_react["default"].createElement(ListboxContainer, {
98
115
  id: id,
99
116
  onClick: function onClick(event) {
100
117
  event.stopPropagation();
@@ -102,10 +119,10 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
102
119
  onMouseDown: function onMouseDown(event) {
103
120
  event.preventDefault();
104
121
  },
105
- ref: ref,
122
+ ref: listboxRef,
106
123
  role: "listbox",
107
124
  "aria-multiselectable": multiple,
108
- "aria-orientation": "vertical"
125
+ style: styles
109
126
  }, 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
127
  key: "option-".concat(optionalItem.value),
111
128
  id: "option-".concat(0),
@@ -116,10 +133,10 @@ var Listbox = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
116
133
  isGroupedOption: false,
117
134
  isLastOption: lastOptionIndex === 0,
118
135
  isSelected: multiple ? currentValue.includes(optionalItem.value) : currentValue === optionalItem.value
119
- }), options.map(mapOptionFunc)));
120
- });
136
+ }), options.map(mapOptionFunc));
137
+ };
121
138
 
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) {
139
+ 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
140
  return props.theme.listDialogBackgroundColor;
124
141
  }, function (props) {
125
142
  return props.theme.listDialogBorderColor;
package/select/Option.js CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
@@ -13,19 +11,13 @@ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/hel
13
11
 
14
12
  var _react = _interopRequireDefault(require("react"));
15
13
 
16
- var _styledComponents = _interopRequireWildcard(require("styled-components"));
17
-
18
- var _useTheme = _interopRequireDefault(require("../useTheme"));
14
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
19
15
 
20
16
  var _Checkbox = _interopRequireDefault(require("../checkbox/Checkbox"));
21
17
 
22
18
  var _Icons = _interopRequireDefault(require("./Icons"));
23
19
 
24
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
25
-
26
- 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); }
27
-
28
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
20
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
29
21
 
30
22
  var Option = function Option(_ref) {
31
23
  var id = _ref.id,
@@ -37,10 +29,7 @@ var Option = function Option(_ref) {
37
29
  isGroupedOption = _ref$isGroupedOption === void 0 ? false : _ref$isGroupedOption,
38
30
  isLastOption = _ref.isLastOption,
39
31
  isSelected = _ref.isSelected;
40
- var colorsTheme = (0, _useTheme["default"])();
41
- return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
42
- theme: colorsTheme.select
43
- }, /*#__PURE__*/_react["default"].createElement(OptionItem, {
32
+ return /*#__PURE__*/_react["default"].createElement(OptionItem, {
44
33
  id: id,
45
34
  onClick: function onClick() {
46
35
  _onClick(option);
@@ -62,13 +51,13 @@ var Option = function Option(_ref) {
62
51
  grouped: isGroupedOption,
63
52
  multiple: multiple,
64
53
  role: !(typeof option.icon === "string") ? "img" : undefined
65
- }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement(OptionIconImg, {
54
+ }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
66
55
  src: option.icon
67
56
  }) : option.icon), /*#__PURE__*/_react["default"].createElement(OptionContent, {
68
57
  grouped: isGroupedOption,
69
58
  hasIcon: option.icon ? true : false,
70
59
  multiple: multiple
71
- }, /*#__PURE__*/_react["default"].createElement(OptionLabel, null, option.label), !multiple && isSelected && /*#__PURE__*/_react["default"].createElement(OptionSelectedIndicator, null, _Icons["default"].selected)))));
60
+ }, /*#__PURE__*/_react["default"].createElement(OptionLabel, null, option.label), !multiple && isSelected && /*#__PURE__*/_react["default"].createElement(OptionSelectedIndicator, null, _Icons["default"].selected))));
72
61
  };
73
62
 
74
63
  var OptionItem = _styledComponents["default"].li(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0 0.5rem;\n box-shadow: inset 0 0 0 2px transparent;\n ", "\n ", ";\n line-height: 1.715em;\n cursor: pointer;\n\n &:hover {\n ", ";\n }\n &:active {\n ", ";\n }\n"])), function (props) {
@@ -87,21 +76,19 @@ var StyledOption = _styledComponents["default"].span(_templateObject2 || (_templ
87
76
  return props.last || props.visualFocused || props.selected ? "border-bottom: 1px solid transparent" : "border-bottom: 1px solid ".concat(props.theme.listOptionDividerColor);
88
77
  });
89
78
 
90
- var OptionIcon = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 24px;\n width: 24px;\n ", "\n color: ", ";\n"])), function (props) {
91
- return props.grouped && !props.multiple ? "padding-left: 16px;" : "padding-left: 8px;";
79
+ var OptionIcon = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: 0.125rem;\n margin-left: ", ";\n color: ", ";\n\n svg,\n img {\n height: 20px;\n width: 20px;\n }\n"])), function (props) {
80
+ return props.grouped && !props.multiple ? "16px" : "8px";
92
81
  }, function (props) {
93
82
  return props.theme.listOptionIconColor;
94
83
  });
95
84
 
96
- var OptionContent = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n overflow: hidden;\n ", "\n"])), function (props) {
97
- return props.grouped && !props.multiple && !props.hasIcon ? "padding-left: 16px;" : "padding-left: 8px;";
85
+ var OptionContent = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n gap: 0.25rem;\n width: 100%;\n overflow: hidden;\n margin-left: ", ";\n"])), function (props) {
86
+ return props.grouped && !props.multiple && !props.hasIcon ? "16px" : "8px";
98
87
  });
99
88
 
100
- var OptionIconImg = _styledComponents["default"].img(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n width: 16px;\n height: 16px;\n"])));
101
-
102
- var OptionLabel = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
89
+ var OptionLabel = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n"])));
103
90
 
104
- var OptionSelectedIndicator = _styledComponents["default"].span(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 16px;\n width: 16px;\n margin-left: 4px;\n color: ", ";\n"])), function (props) {
91
+ var OptionSelectedIndicator = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n color: ", ";\n\n svg {\n width: 16px;\n height: 16px;\n }\n"])), function (props) {
105
92
  return props.theme.selectedListOptionIconColor;
106
93
  });
107
94
 
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); }
@@ -138,6 +140,28 @@ var notOptionalCheck = function notOptionalCheck(value, multiple, optional) {
138
140
  return !optional && (multiple ? value.length === 0 : value === "");
139
141
  };
140
142
 
143
+ var useWidth = function useWidth(target) {
144
+ var _useState = (0, _react.useState)(0),
145
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
146
+ width = _useState2[0],
147
+ setWidth = _useState2[1];
148
+
149
+ (0, _react.useEffect)(function () {
150
+ if (target != null) {
151
+ setWidth(target.getBoundingClientRect().width);
152
+ var triggerObserver = new ResizeObserver(function (entries) {
153
+ var rect = entries[0].target.getBoundingClientRect();
154
+ setWidth(rect === null || rect === void 0 ? void 0 : rect.width);
155
+ });
156
+ triggerObserver.observe(target);
157
+ return function () {
158
+ triggerObserver.unobserve(target);
159
+ };
160
+ }
161
+ }, [target]);
162
+ return width;
163
+ };
164
+
141
165
  var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
142
166
  var _selectedOption$label;
143
167
 
@@ -167,37 +191,37 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
167
191
  _ref$tabIndex = _ref.tabIndex,
168
192
  tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
169
193
 
170
- var _useState = (0, _react.useState)("select-".concat((0, _uuid.v4)())),
171
- _useState2 = (0, _slicedToArray2["default"])(_useState, 1),
172
- selectId = _useState2[0];
194
+ var _useState3 = (0, _react.useState)("select-".concat((0, _uuid.v4)())),
195
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 1),
196
+ selectId = _useState4[0];
173
197
 
174
198
  var selectLabelId = "label-".concat(selectId);
175
199
  var errorId = "error-".concat(selectId);
176
200
  var optionsListId = "".concat(selectId, "-listbox");
177
201
 
178
- var _useState3 = (0, _react.useState)(defaultValue !== null && defaultValue !== void 0 ? defaultValue : multiple ? [] : ""),
179
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
180
- innerValue = _useState4[0],
181
- setInnerValue = _useState4[1];
182
-
183
- var _useState5 = (0, _react.useState)(""),
202
+ var _useState5 = (0, _react.useState)(defaultValue !== null && defaultValue !== void 0 ? defaultValue : multiple ? [] : ""),
184
203
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
185
- searchValue = _useState6[0],
186
- setSearchValue = _useState6[1];
204
+ innerValue = _useState6[0],
205
+ setInnerValue = _useState6[1];
187
206
 
188
- var _useState7 = (0, _react.useState)(-1),
207
+ var _useState7 = (0, _react.useState)(""),
189
208
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
190
- visualFocusIndex = _useState8[0],
191
- changeVisualFocusIndex = _useState8[1];
209
+ searchValue = _useState8[0],
210
+ setSearchValue = _useState8[1];
192
211
 
193
- var _useState9 = (0, _react.useState)(false),
212
+ var _useState9 = (0, _react.useState)(-1),
194
213
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
195
- isOpen = _useState10[0],
196
- changeIsOpen = _useState10[1];
214
+ visualFocusIndex = _useState10[0],
215
+ changeVisualFocusIndex = _useState10[1];
216
+
217
+ var _useState11 = (0, _react.useState)(false),
218
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
219
+ isOpen = _useState12[0],
220
+ changeIsOpen = _useState12[1];
197
221
 
198
- var selectContainerRef = (0, _react.useRef)(null);
222
+ var selectRef = (0, _react.useRef)(null);
199
223
  var selectSearchInputRef = (0, _react.useRef)(null);
200
- var selectOptionsListRef = (0, _react.useRef)(null);
224
+ var width = useWidth(selectRef.current);
201
225
  var colorsTheme = (0, _useTheme["default"])();
202
226
  var translatedLabels = (0, _useTranslatedLabels["default"])();
203
227
  var optionalItem = {
@@ -275,9 +299,9 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
275
299
  };
276
300
 
277
301
  var handleSelectOnKeyDown = function handleSelectOnKeyDown(event) {
278
- switch (event.keyCode) {
279
- case 40:
280
- // Arrow Down
302
+ switch (event.key) {
303
+ case "Down":
304
+ case "ArrowDown":
281
305
  event.preventDefault();
282
306
  singleSelectionIndex !== undefined && (!isOpen || visualFocusIndex === -1 && singleSelectionIndex > -1 && singleSelectionIndex <= lastOptionIndex) ? changeVisualFocusIndex(singleSelectionIndex) : changeVisualFocusIndex(function (visualFocusIndex) {
283
307
  if (visualFocusIndex < lastOptionIndex) return visualFocusIndex + 1;else if (visualFocusIndex === lastOptionIndex) return 0;
@@ -285,8 +309,8 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
285
309
  openOptions();
286
310
  break;
287
311
 
288
- case 38:
289
- // Arrow Up
312
+ case "Up":
313
+ case "ArrowUp":
290
314
  event.preventDefault();
291
315
  singleSelectionIndex !== undefined && (!isOpen || visualFocusIndex === -1 && singleSelectionIndex > -1 && singleSelectionIndex <= lastOptionIndex) ? changeVisualFocusIndex(singleSelectionIndex) : changeVisualFocusIndex(function (visualFocusIndex) {
292
316
  return visualFocusIndex === 0 || visualFocusIndex === -1 ? lastOptionIndex : visualFocusIndex - 1;
@@ -294,15 +318,14 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
294
318
  openOptions();
295
319
  break;
296
320
 
297
- case 27:
298
- // Esc
321
+ case "Esc":
322
+ case "Escape":
299
323
  event.preventDefault();
300
324
  closeOptions();
301
325
  setSearchValue("");
302
326
  break;
303
327
 
304
- case 13:
305
- // Enter
328
+ case "Enter":
306
329
  if (isOpen && visualFocusIndex >= 0) {
307
330
  var accLength = optional && !multiple ? 1 : 0;
308
331
 
@@ -359,26 +382,6 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
359
382
  !multiple && closeOptions();
360
383
  setSearchValue("");
361
384
  }, [handleSelectChangeValue, closeOptions, multiple]);
362
- (0, _react.useLayoutEffect)(function () {
363
- if (isOpen && singleSelectionIndex) {
364
- var _listEl$scrollTo;
365
-
366
- var listEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : selectOptionsListRef.current;
367
- var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
368
- listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
369
- top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
370
- });
371
- }
372
- }, [isOpen]);
373
- (0, _react.useLayoutEffect)(function () {
374
- var _selectOptionsListRef, _visualFocusedOptionE;
375
-
376
- var visualFocusedOptionEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : (_selectOptionsListRef = selectOptionsListRef.current) === null || _selectOptionsListRef === void 0 ? void 0 : _selectOptionsListRef.querySelectorAll("[role='option']")[visualFocusIndex];
377
- visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
378
- block: "nearest",
379
- inline: "start"
380
- });
381
- }, [visualFocusIndex]);
382
385
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
383
386
  theme: colorsTheme.select
384
387
  }, /*#__PURE__*/_react["default"].createElement(SelectContainer, {
@@ -389,12 +392,17 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
389
392
  id: selectLabelId,
390
393
  disabled: disabled,
391
394
  onClick: function onClick() {
392
- selectContainerRef.current.focus();
395
+ selectRef.current.focus();
393
396
  },
394
397
  helperText: helperText
395
398
  }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, translatedLabels.formFields.optionalLabel)), helperText && /*#__PURE__*/_react["default"].createElement(HelperText, {
396
399
  disabled: disabled
397
- }, 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
+ type: undefined
405
+ }, /*#__PURE__*/_react["default"].createElement(Select, {
398
406
  id: selectId,
399
407
  disabled: disabled,
400
408
  error: error,
@@ -402,16 +410,16 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
402
410
  onClick: handleSelectOnClick,
403
411
  onFocus: handleSelectOnFocus,
404
412
  onKeyDown: handleSelectOnKeyDown,
405
- ref: selectContainerRef,
406
- tabIndex: tabIndex,
413
+ ref: selectRef,
414
+ tabIndex: disabled ? -1 : tabIndex,
407
415
  role: "combobox",
408
416
  "aria-controls": optionsListId,
409
417
  "aria-disabled": disabled,
410
418
  "aria-expanded": isOpen,
411
419
  "aria-haspopup": "listbox",
412
- "aria-labelledby": selectLabelId,
420
+ "aria-labelledby": label ? selectLabelId : undefined,
413
421
  "aria-activedescendant": visualFocusIndex >= 0 ? "option-".concat(visualFocusIndex) : undefined,
414
- "aria-invalid": error ? "true" : "false",
422
+ "aria-invalid": error ? true : false,
415
423
  "aria-errormessage": error ? errorId : undefined,
416
424
  "aria-required": !disabled && !optional
417
425
  }, multiple && selectedOption.length > 0 && /*#__PURE__*/_react["default"].createElement(SelectionIndicator, null, /*#__PURE__*/_react["default"].createElement(SelectionNumber, {
@@ -428,6 +436,7 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
428
436
  "aria-label": translatedLabels.select.actionClearSelectionTitle
429
437
  }, _Icons["default"].clear)), /*#__PURE__*/_react["default"].createElement(SearchableValueContainer, null, /*#__PURE__*/_react["default"].createElement(ValueInput, {
430
438
  name: name,
439
+ disabled: disabled,
431
440
  value: multiple ? (value !== null && value !== void 0 ? value : innerValue).join(",") : value !== null && value !== void 0 ? value : innerValue,
432
441
  readOnly: true,
433
442
  "aria-hidden": "true"
@@ -458,7 +467,17 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
458
467
  "aria-label": translatedLabels.select.actionClearSearchTitle
459
468
  }, _Icons["default"].clear), /*#__PURE__*/_react["default"].createElement(CollapseIndicator, {
460
469
  disabled: disabled
461
- }, isOpen ? _Icons["default"].arrowUp : _Icons["default"].arrowDown), isOpen && /*#__PURE__*/_react["default"].createElement(_Listbox["default"], {
470
+ }, isOpen ? _Icons["default"].arrowUp : _Icons["default"].arrowDown))), /*#__PURE__*/_react["default"].createElement(Popover.Content, {
471
+ sideOffset: 4,
472
+ onOpenAutoFocus: function onOpenAutoFocus(event) {
473
+ // Avoid select to lose focus when the list is opened
474
+ event.preventDefault();
475
+ },
476
+ onCloseAutoFocus: function onCloseAutoFocus(event) {
477
+ // Avoid select to lose focus when the list is closed
478
+ event.preventDefault();
479
+ }
480
+ }, /*#__PURE__*/_react["default"].createElement(_Listbox["default"], {
462
481
  id: optionsListId,
463
482
  currentValue: value !== null && value !== void 0 ? value : innerValue,
464
483
  options: searchable ? filteredOptions : options,
@@ -469,8 +488,10 @@ var DxcSelect = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
469
488
  optionalItem: optionalItem,
470
489
  searchable: searchable,
471
490
  handleOptionOnClick: handleOptionOnClick,
472
- ref: selectOptionsListRef
473
- })), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
491
+ styles: {
492
+ width: width
493
+ }
494
+ }))), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
474
495
  id: errorId,
475
496
  "aria-live": error ? "assertive" : "off"
476
497
  }, error)));
@@ -569,9 +590,7 @@ var SelectionNumber = _styledComponents["default"].span(_templateObject7 || (_te
569
590
  return props.disabled ? "cursor: not-allowed;" : "cursor: default;";
570
591
  });
571
592
 
572
- 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) {
573
- return props.theme.fontFamily;
574
- }, function (props) {
593
+ 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) {
575
594
  return props.disabled ? "cursor: not-allowed;" : "cursor: pointer;";
576
595
  }, function (props) {
577
596
  return props.disabled ? "transparent" : props.theme.enabledSelectionIndicatorActionBackgroundColor;