@dxc-technology/halstack-react 0.0.0-59568e7 → 0.0.0-5aa300b

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 (205) hide show
  1. package/HalstackContext.js +7 -11
  2. package/accordion/Accordion.js +117 -104
  3. package/accordion/Accordion.stories.tsx +54 -15
  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/badge/Badge.d.ts +1 -1
  12. package/badge/Badge.js +5 -3
  13. package/badge/types.d.ts +1 -0
  14. package/bleed/Bleed.js +1 -34
  15. package/bleed/Bleed.stories.tsx +94 -95
  16. package/bleed/types.d.ts +1 -1
  17. package/box/Box.js +23 -33
  18. package/box/types.d.ts +1 -0
  19. package/bulleted-list/BulletedList.d.ts +7 -0
  20. package/bulleted-list/BulletedList.js +123 -0
  21. package/bulleted-list/BulletedList.stories.tsx +200 -0
  22. package/bulleted-list/types.d.ts +11 -0
  23. package/{list → bulleted-list}/types.js +0 -0
  24. package/button/Button.js +50 -70
  25. package/button/Button.stories.tsx +61 -1
  26. package/button/types.d.ts +7 -7
  27. package/card/Card.js +34 -36
  28. package/card/types.d.ts +1 -0
  29. package/checkbox/Checkbox.d.ts +2 -2
  30. package/checkbox/Checkbox.js +92 -99
  31. package/checkbox/Checkbox.stories.tsx +79 -59
  32. package/checkbox/Checkbox.test.js +93 -16
  33. package/checkbox/types.d.ts +6 -2
  34. package/chip/Chip.js +11 -23
  35. package/chip/Chip.stories.tsx +41 -9
  36. package/chip/types.d.ts +1 -1
  37. package/common/variables.js +186 -158
  38. package/date-input/Calendar.d.ts +4 -0
  39. package/date-input/Calendar.js +258 -0
  40. package/date-input/DateInput.js +77 -222
  41. package/date-input/DateInput.stories.tsx +30 -17
  42. package/date-input/DateInput.test.js +411 -138
  43. package/date-input/DatePicker.d.ts +4 -0
  44. package/date-input/DatePicker.js +160 -0
  45. package/date-input/YearPicker.d.ts +4 -0
  46. package/date-input/YearPicker.js +115 -0
  47. package/date-input/types.d.ts +53 -0
  48. package/dialog/Dialog.js +52 -28
  49. package/dialog/Dialog.stories.tsx +57 -2
  50. package/dialog/Dialog.test.js +34 -4
  51. package/dialog/types.d.ts +3 -2
  52. package/dropdown/Dropdown.d.ts +1 -1
  53. package/dropdown/Dropdown.js +247 -249
  54. package/dropdown/Dropdown.stories.tsx +135 -64
  55. package/dropdown/Dropdown.test.js +504 -108
  56. package/dropdown/DropdownMenu.d.ts +4 -0
  57. package/dropdown/DropdownMenu.js +80 -0
  58. package/dropdown/DropdownMenuItem.d.ts +4 -0
  59. package/dropdown/DropdownMenuItem.js +92 -0
  60. package/dropdown/types.d.ts +25 -5
  61. package/file-input/FileInput.d.ts +2 -2
  62. package/file-input/FileInput.js +177 -219
  63. package/file-input/FileInput.stories.tsx +38 -10
  64. package/file-input/FileInput.test.js +53 -12
  65. package/file-input/FileItem.d.ts +4 -14
  66. package/file-input/FileItem.js +38 -63
  67. package/file-input/types.d.ts +17 -0
  68. package/flex/Flex.d.ts +4 -0
  69. package/flex/Flex.js +69 -0
  70. package/flex/Flex.stories.tsx +103 -0
  71. package/flex/types.d.ts +32 -0
  72. package/{radio → flex}/types.js +0 -0
  73. package/footer/Footer.stories.tsx +8 -1
  74. package/footer/Icons.js +1 -1
  75. package/footer/types.d.ts +2 -1
  76. package/header/Header.js +74 -72
  77. package/header/Header.stories.tsx +4 -4
  78. package/header/Icons.js +2 -2
  79. package/header/types.d.ts +3 -2
  80. package/inset/Inset.js +1 -34
  81. package/inset/Inset.stories.tsx +36 -36
  82. package/inset/types.d.ts +1 -1
  83. package/layout/ApplicationLayout.d.ts +16 -6
  84. package/layout/ApplicationLayout.js +70 -117
  85. package/layout/ApplicationLayout.stories.tsx +84 -93
  86. package/layout/Icons.d.ts +5 -0
  87. package/layout/Icons.js +13 -2
  88. package/layout/SidenavContext.d.ts +5 -0
  89. package/layout/SidenavContext.js +19 -0
  90. package/layout/types.d.ts +18 -33
  91. package/link/Link.d.ts +2 -2
  92. package/link/Link.js +24 -50
  93. package/link/Link.stories.tsx +13 -6
  94. package/link/types.d.ts +3 -4
  95. package/main.d.ts +6 -9
  96. package/main.js +32 -56
  97. package/number-input/NumberInput.test.js +43 -7
  98. package/package.json +16 -20
  99. package/paginator/Icons.d.ts +5 -0
  100. package/paginator/Icons.js +16 -28
  101. package/paginator/Paginator.js +6 -12
  102. package/paginator/Paginator.test.js +43 -1
  103. package/paragraph/Paragraph.d.ts +6 -0
  104. package/paragraph/Paragraph.js +38 -0
  105. package/paragraph/Paragraph.stories.tsx +44 -0
  106. package/password-input/PasswordInput.test.js +13 -12
  107. package/progress-bar/ProgressBar.d.ts +2 -2
  108. package/progress-bar/ProgressBar.js +56 -50
  109. package/progress-bar/ProgressBar.stories.jsx +3 -1
  110. package/progress-bar/ProgressBar.test.js +67 -22
  111. package/progress-bar/types.d.ts +3 -4
  112. package/quick-nav/QuickNav.js +25 -20
  113. package/quick-nav/QuickNav.stories.tsx +131 -26
  114. package/radio-group/Radio.d.ts +1 -1
  115. package/radio-group/Radio.js +43 -28
  116. package/radio-group/RadioGroup.js +23 -22
  117. package/radio-group/RadioGroup.stories.tsx +1 -0
  118. package/radio-group/RadioGroup.test.js +123 -96
  119. package/radio-group/types.d.ts +2 -2
  120. package/resultsetTable/Icons.d.ts +7 -0
  121. package/resultsetTable/Icons.js +51 -0
  122. package/resultsetTable/ResultsetTable.js +48 -107
  123. package/resultsetTable/ResultsetTable.stories.tsx +50 -25
  124. package/resultsetTable/ResultsetTable.test.js +65 -41
  125. package/resultsetTable/types.d.ts +2 -2
  126. package/select/Listbox.d.ts +1 -1
  127. package/select/Listbox.js +53 -7
  128. package/select/Option.js +8 -10
  129. package/select/Select.js +43 -43
  130. package/select/Select.stories.tsx +225 -136
  131. package/select/Select.test.js +363 -250
  132. package/select/types.d.ts +2 -5
  133. package/sidenav/Sidenav.d.ts +6 -5
  134. package/sidenav/Sidenav.js +182 -52
  135. package/sidenav/Sidenav.stories.tsx +163 -156
  136. package/sidenav/Sidenav.test.js +25 -37
  137. package/sidenav/types.d.ts +50 -27
  138. package/slider/Slider.d.ts +2 -2
  139. package/slider/Slider.js +120 -95
  140. package/slider/Slider.stories.tsx +7 -1
  141. package/slider/Slider.test.js +121 -21
  142. package/slider/types.d.ts +6 -2
  143. package/spinner/Spinner.js +2 -2
  144. package/switch/Switch.d.ts +2 -2
  145. package/switch/Switch.js +135 -68
  146. package/switch/Switch.stories.tsx +8 -30
  147. package/switch/Switch.test.js +144 -17
  148. package/switch/types.d.ts +6 -2
  149. package/table/Table.js +1 -1
  150. package/table/Table.test.js +1 -1
  151. package/tabs/Tab.d.ts +4 -0
  152. package/tabs/Tab.js +133 -0
  153. package/tabs/Tabs.js +360 -104
  154. package/tabs/Tabs.stories.tsx +81 -5
  155. package/tabs/Tabs.test.js +217 -6
  156. package/tabs/types.d.ts +15 -5
  157. package/tabs-nav/NavTabs.d.ts +8 -0
  158. package/tabs-nav/NavTabs.js +125 -0
  159. package/tabs-nav/NavTabs.stories.tsx +172 -0
  160. package/tabs-nav/NavTabs.test.js +82 -0
  161. package/tabs-nav/Tab.d.ts +4 -0
  162. package/tabs-nav/Tab.js +128 -0
  163. package/tabs-nav/types.d.ts +53 -0
  164. package/{row → tabs-nav}/types.js +0 -0
  165. package/tag/Tag.js +1 -1
  166. package/tag/types.d.ts +1 -1
  167. package/text-input/Icons.d.ts +8 -0
  168. package/text-input/Icons.js +60 -0
  169. package/text-input/Suggestion.js +38 -9
  170. package/text-input/Suggestions.d.ts +4 -0
  171. package/text-input/Suggestions.js +134 -0
  172. package/text-input/TextInput.js +195 -292
  173. package/text-input/TextInput.stories.tsx +211 -185
  174. package/text-input/TextInput.test.js +737 -725
  175. package/text-input/types.d.ts +22 -3
  176. package/toggle-group/types.d.ts +1 -1
  177. package/typography/Typography.d.ts +4 -0
  178. package/typography/Typography.js +131 -0
  179. package/typography/Typography.stories.tsx +198 -0
  180. package/typography/types.d.ts +18 -0
  181. package/{stack → typography}/types.js +0 -0
  182. package/wizard/Wizard.js +9 -16
  183. package/wizard/Wizard.stories.tsx +20 -1
  184. package/wizard/types.d.ts +5 -4
  185. package/common/RequiredComponent.js +0 -32
  186. package/list/List.d.ts +0 -4
  187. package/list/List.js +0 -47
  188. package/list/List.stories.tsx +0 -95
  189. package/list/types.d.ts +0 -7
  190. package/radio/Radio.d.ts +0 -4
  191. package/radio/Radio.js +0 -173
  192. package/radio/Radio.stories.tsx +0 -192
  193. package/radio/Radio.test.js +0 -71
  194. package/radio/types.d.ts +0 -54
  195. package/row/Row.d.ts +0 -3
  196. package/row/Row.js +0 -127
  197. package/row/Row.stories.tsx +0 -237
  198. package/row/types.d.ts +0 -28
  199. package/stack/Stack.d.ts +0 -3
  200. package/stack/Stack.js +0 -97
  201. package/stack/Stack.stories.tsx +0 -164
  202. package/stack/types.d.ts +0 -24
  203. package/text/Text.d.ts +0 -7
  204. package/text/Text.js +0 -30
  205. package/text/Text.stories.tsx +0 -19
@@ -19,30 +19,72 @@ var _react = _interopRequireWildcard(require("react"));
19
19
 
20
20
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
21
 
22
- var _Popper = _interopRequireDefault(require("@material-ui/core/Popper"));
23
-
24
- var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
25
-
26
- var _core = require("@material-ui/core");
27
-
28
- var _Grow = _interopRequireDefault(require("@material-ui/core/Grow"));
29
-
30
- var _Paper = _interopRequireDefault(require("@material-ui/core/Paper"));
31
-
32
- var _MenuList = _interopRequireDefault(require("@material-ui/core/MenuList"));
33
-
34
22
  var _variables = require("../common/variables.js");
35
23
 
36
24
  var _utils = require("../common/utils.js");
37
25
 
38
26
  var _useTheme = _interopRequireDefault(require("../useTheme"));
39
27
 
40
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10;
28
+ var _uuid = require("uuid");
29
+
30
+ var Popover = _interopRequireWildcard(require("@radix-ui/react-popover"));
31
+
32
+ var _DropdownMenu = _interopRequireDefault(require("./DropdownMenu"));
33
+
34
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
41
35
 
42
36
  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); }
43
37
 
44
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(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; }
45
39
 
40
+ var upArrowIcon = /*#__PURE__*/_react["default"].createElement("svg", {
41
+ xmlns: "http://www.w3.org/2000/svg",
42
+ width: "24",
43
+ height: "24",
44
+ viewBox: "0 0 24 24",
45
+ fill: "currentColor"
46
+ }, /*#__PURE__*/_react["default"].createElement("path", {
47
+ d: "M7 14l5-5 5 5z"
48
+ }), /*#__PURE__*/_react["default"].createElement("path", {
49
+ d: "M0 0h24v24H0z",
50
+ fill: "none"
51
+ }));
52
+
53
+ var downArrowIcon = /*#__PURE__*/_react["default"].createElement("svg", {
54
+ xmlns: "http://www.w3.org/2000/svg",
55
+ width: "24",
56
+ height: "24",
57
+ viewBox: "0 0 24 24",
58
+ fill: "currentColor"
59
+ }, /*#__PURE__*/_react["default"].createElement("path", {
60
+ d: "M7 10l5 5 5-5z"
61
+ }), /*#__PURE__*/_react["default"].createElement("path", {
62
+ d: "M0 0h24v24H0z",
63
+ fill: "none"
64
+ }));
65
+
66
+ var useWidth = function useWidth(target) {
67
+ var _useState = (0, _react.useState)(0),
68
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
69
+ width = _useState2[0],
70
+ setWidth = _useState2[1];
71
+
72
+ (0, _react.useEffect)(function () {
73
+ if (target != null) {
74
+ setWidth(target.getBoundingClientRect().width);
75
+ var triggerObserver = new ResizeObserver(function (entries) {
76
+ var rect = entries[0].target.getBoundingClientRect();
77
+ setWidth(rect === null || rect === void 0 ? void 0 : rect.width);
78
+ });
79
+ triggerObserver.observe(target);
80
+ return function () {
81
+ triggerObserver.unobserve(target);
82
+ };
83
+ }
84
+ }, [target]);
85
+ return width;
86
+ };
87
+
46
88
  var DxcDropdown = function DxcDropdown(_ref) {
47
89
  var options = _ref.options,
48
90
  _ref$optionsIconPosit = _ref.optionsIconPosition,
@@ -54,173 +96,207 @@ var DxcDropdown = function DxcDropdown(_ref) {
54
96
  label = _ref$label === void 0 ? "" : _ref$label,
55
97
  _ref$caretHidden = _ref.caretHidden,
56
98
  caretHidden = _ref$caretHidden === void 0 ? false : _ref$caretHidden,
57
- onSelectOption = _ref.onSelectOption,
99
+ _ref$disabled = _ref.disabled,
100
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
58
101
  _ref$expandOnHover = _ref.expandOnHover,
59
102
  expandOnHover = _ref$expandOnHover === void 0 ? false : _ref$expandOnHover,
103
+ onSelectOption = _ref.onSelectOption,
60
104
  margin = _ref.margin,
61
105
  _ref$size = _ref.size,
62
106
  size = _ref$size === void 0 ? "fitContent" : _ref$size,
63
107
  _ref$tabIndex = _ref.tabIndex,
64
- tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex,
65
- _ref$disabled = _ref.disabled,
66
- disabled = _ref$disabled === void 0 ? false : _ref$disabled;
108
+ tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
67
109
 
68
- var _useState = (0, _react.useState)(),
69
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
70
- width = _useState2[0],
71
- setWidth = _useState2[1];
110
+ var _useState3 = (0, _react.useState)("trigger-".concat((0, _uuid.v4)())),
111
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 1),
112
+ triggerId = _useState4[0];
113
+
114
+ var menuId = "menu-".concat(triggerId);
115
+
116
+ var _useState5 = (0, _react.useState)(false),
117
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
118
+ isOpen = _useState6[0],
119
+ changeIsOpen = _useState6[1];
120
+
121
+ var _useState7 = (0, _react.useState)(0),
122
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
123
+ visualFocusIndex = _useState8[0],
124
+ setVisualFocusIndex = _useState8[1];
72
125
 
73
126
  var colorsTheme = (0, _useTheme["default"])();
74
- var ref = (0, _react.useRef)(null);
127
+ var triggerRef = (0, _react.useRef)(null);
128
+ var menuRef = (0, _react.useRef)(null);
129
+ var width = useWidth(triggerRef.current);
75
130
 
76
- var handleResize = function handleResize() {
77
- if (ref.current) setWidth(ref.current.offsetWidth);
131
+ var handleOnOpenMenu = function handleOnOpenMenu() {
132
+ changeIsOpen(true);
78
133
  };
79
134
 
80
- (0, _react.useEffect)(function () {
81
- if (ref.current) {
82
- ref.current.addEventListener("resize", handleResize);
83
- handleResize();
84
- }
135
+ var handleOnCloseMenu = function handleOnCloseMenu() {
136
+ changeIsOpen(false);
137
+ setVisualFocusIndex(0);
138
+ };
139
+
140
+ var handleMenuItemOnClick = (0, _react.useCallback)(function (value) {
141
+ var _triggerRef$current;
142
+
143
+ onSelectOption(value);
144
+ handleOnCloseMenu();
145
+ (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : _triggerRef$current.focus();
146
+ }, [onSelectOption]);
147
+
148
+ var handleOnBlur = function handleOnBlur(event) {
149
+ !event.currentTarget.contains(event.relatedTarget) && handleOnCloseMenu();
150
+ };
151
+
152
+ var handleTriggerOnClick = function handleTriggerOnClick() {
153
+ changeIsOpen(function (isOpen) {
154
+ return !isOpen;
155
+ });
156
+ };
85
157
 
86
- return function () {
87
- if (ref.current) ref.current.removeEventListener("resize", handleResize);
88
- };
89
- }, []);
90
-
91
- var _useState3 = (0, _react.useState)(null),
92
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
93
- anchorEl = _useState4[0],
94
- setAnchorEl = _useState4[1];
95
-
96
- function handleClickListItem(event) {
97
- setAnchorEl(event.currentTarget);
98
- }
99
-
100
- function handleMenuItemClick(option) {
101
- setAnchorEl(null);
102
- onSelectOption(option.value);
103
- }
104
-
105
- function handleClose() {
106
- setAnchorEl(null);
107
- }
108
-
109
- var handleCloseOver = expandOnHover ? handleClose : undefined;
110
-
111
- var UpArrowIcon = function UpArrowIcon() {
112
- return /*#__PURE__*/_react["default"].createElement("svg", {
113
- xmlns: "http://www.w3.org/2000/svg",
114
- width: "24",
115
- height: "24",
116
- viewBox: "0 0 24 24",
117
- fill: "currentColor"
118
- }, /*#__PURE__*/_react["default"].createElement("path", {
119
- d: "M7 14l5-5 5 5z"
120
- }), /*#__PURE__*/_react["default"].createElement("path", {
121
- d: "M0 0h24v24H0z",
122
- fill: "none"
123
- }));
158
+ var handleTriggerOnKeyDown = function handleTriggerOnKeyDown(event) {
159
+ switch (event.key) {
160
+ case "Up":
161
+ case "ArrowUp":
162
+ event.preventDefault();
163
+ setVisualFocusIndex(options.length - 1);
164
+ handleOnOpenMenu();
165
+ break;
166
+
167
+ case " ":
168
+ case "Down":
169
+ case "ArrowDown":
170
+ case "Enter":
171
+ event.preventDefault();
172
+ handleOnOpenMenu();
173
+ break;
174
+ }
124
175
  };
125
176
 
126
- var DownArrowIcon = function DownArrowIcon() {
127
- return /*#__PURE__*/_react["default"].createElement("svg", {
128
- xmlns: "http://www.w3.org/2000/svg",
129
- width: "24",
130
- height: "24",
131
- viewBox: "0 0 24 24",
132
- fill: "currentColor"
133
- }, /*#__PURE__*/_react["default"].createElement("path", {
134
- d: "M7 10l5 5 5-5z"
135
- }), /*#__PURE__*/_react["default"].createElement("path", {
136
- d: "M0 0h24v24H0z",
137
- fill: "none"
138
- }));
177
+ var setPreviousIndexFocus = function setPreviousIndexFocus() {
178
+ setVisualFocusIndex(function (currentFocusIndex) {
179
+ var index = currentFocusIndex === 0 ? options.length - 1 : currentFocusIndex - 1;
180
+ return index;
181
+ });
139
182
  };
140
183
 
141
- var labelComponent = /*#__PURE__*/_react["default"].createElement(DropdownTriggerLabel, {
142
- iconPosition: iconPosition,
143
- label: label
144
- }, label);
184
+ var setNextIndexFocus = function setNextIndexFocus() {
185
+ setVisualFocusIndex(function (currentFocusIndex) {
186
+ var index = currentFocusIndex === options.length - 1 ? 0 : currentFocusIndex + 1;
187
+ return index;
188
+ });
189
+ };
145
190
 
191
+ var handleMenuOnKeyDown = (0, _react.useCallback)(function (event) {
192
+ var _triggerRef$current2, _triggerRef$current3;
193
+
194
+ switch (event.key) {
195
+ case "Up":
196
+ case "ArrowUp":
197
+ event.preventDefault();
198
+ setPreviousIndexFocus();
199
+ break;
200
+
201
+ case "Down":
202
+ case "ArrowDown":
203
+ event.preventDefault();
204
+ setNextIndexFocus();
205
+ break;
206
+
207
+ case " ":
208
+ case "Enter":
209
+ event.preventDefault();
210
+ handleMenuItemOnClick(options[visualFocusIndex].value);
211
+ break;
212
+
213
+ case "Esc":
214
+ case "Escape":
215
+ event.preventDefault();
216
+ handleOnCloseMenu();
217
+ (_triggerRef$current2 = triggerRef.current) === null || _triggerRef$current2 === void 0 ? void 0 : _triggerRef$current2.focus();
218
+ break;
219
+
220
+ case "Home":
221
+ case "PageUp":
222
+ event.preventDefault();
223
+ setVisualFocusIndex(0);
224
+ break;
225
+
226
+ case "End":
227
+ case "PageDown":
228
+ event.preventDefault();
229
+ setVisualFocusIndex(options.length - 1);
230
+ break;
231
+
232
+ case "Tab":
233
+ handleOnCloseMenu();
234
+ (_triggerRef$current3 = triggerRef.current) === null || _triggerRef$current3 === void 0 ? void 0 : _triggerRef$current3.focus();
235
+ break;
236
+ }
237
+ }, [onSelectOption, visualFocusIndex, options]);
238
+ (0, _react.useLayoutEffect)(function () {
239
+ var _menuRef$current, _visualFocusedMenuIte;
240
+
241
+ var visualFocusedMenuItem = menuRef === null || menuRef === void 0 ? void 0 : (_menuRef$current = menuRef.current) === null || _menuRef$current === void 0 ? void 0 : _menuRef$current.querySelectorAll("[role='menuitem']")[visualFocusIndex];
242
+ visualFocusedMenuItem === null || visualFocusedMenuItem === void 0 ? void 0 : (_visualFocusedMenuIte = visualFocusedMenuItem.scrollIntoView) === null || _visualFocusedMenuIte === void 0 ? void 0 : _visualFocusedMenuIte.call(visualFocusedMenuItem, {
243
+ block: "nearest",
244
+ inline: "start"
245
+ });
246
+ }, [visualFocusIndex]);
146
247
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
147
248
  theme: colorsTheme.dropdown
148
- }, /*#__PURE__*/_react["default"].createElement(DXCDropdownContainer, {
249
+ }, /*#__PURE__*/_react["default"].createElement(DropdownContainer, {
250
+ onMouseEnter: !disabled && expandOnHover ? handleOnOpenMenu : undefined,
251
+ onMouseLeave: !disabled && expandOnHover ? handleOnCloseMenu : undefined,
252
+ onBlur: !disabled ? handleOnBlur : undefined,
149
253
  margin: margin,
150
- size: size,
151
- disabled: disabled
152
- }, /*#__PURE__*/_react["default"].createElement("div", {
153
- onMouseOver: expandOnHover && !disabled ? handleClickListItem : undefined,
154
- onMouseOut: handleCloseOver,
155
- onFocus: handleCloseOver,
156
- onBlur: handleCloseOver
254
+ size: size
255
+ }, /*#__PURE__*/_react["default"].createElement(Popover.Root, {
256
+ open: isOpen
257
+ }, /*#__PURE__*/_react["default"].createElement(Popover.Trigger, {
258
+ asChild: true,
259
+ type: undefined
157
260
  }, /*#__PURE__*/_react["default"].createElement(DropdownTrigger, {
158
- opened: anchorEl === null ? false : true,
159
- onClick: handleClickListItem,
261
+ opened: isOpen,
262
+ onClick: handleTriggerOnClick,
263
+ onKeyDown: handleTriggerOnKeyDown,
264
+ onBlur: function onBlur(event) {
265
+ event.stopPropagation();
266
+ },
160
267
  disabled: disabled,
161
268
  label: label,
162
- caretHidden: caretHidden,
163
269
  margin: margin,
164
270
  size: size,
165
- ref: ref,
166
- tabIndex: tabIndex
167
- }, /*#__PURE__*/_react["default"].createElement(DropdownTriggerContainer, {
168
- caretHidden: caretHidden
169
- }, iconPosition === "after" && labelComponent, icon && /*#__PURE__*/_react["default"].createElement(ButtonIconContainer, {
170
- label: label,
171
- iconPosition: iconPosition,
172
- disabled: disabled
173
- }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(ButtonIcon, {
271
+ id: triggerId,
272
+ "aria-haspopup": "true",
273
+ "aria-controls": menuId,
274
+ "aria-expanded": isOpen ? true : undefined,
275
+ tabIndex: tabIndex,
276
+ ref: triggerRef
277
+ }, /*#__PURE__*/_react["default"].createElement(DropdownTriggerContent, null, label && iconPosition === "after" && /*#__PURE__*/_react["default"].createElement(DropdownTriggerLabel, null, label), icon && /*#__PURE__*/_react["default"].createElement(DropdownTriggerIcon, {
278
+ disabled: disabled,
279
+ role: typeof icon === "string" ? undefined : "img"
280
+ }, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement("img", {
174
281
  src: icon
175
- }) : icon), iconPosition === "before" && labelComponent), /*#__PURE__*/_react["default"].createElement(CaretIconContainer, {
176
- caretHidden: caretHidden,
282
+ }) : icon), label && iconPosition === "before" && /*#__PURE__*/_react["default"].createElement(DropdownTriggerLabel, null, label)), !caretHidden && /*#__PURE__*/_react["default"].createElement(CaretIcon, {
177
283
  disabled: disabled
178
- }, !caretHidden && (anchorEl === null ? /*#__PURE__*/_react["default"].createElement(DownArrowIcon, null) : /*#__PURE__*/_react["default"].createElement(UpArrowIcon, null)))), /*#__PURE__*/_react["default"].createElement(DXCMenu, {
179
- anchorEl: anchorEl,
180
- open: Boolean(anchorEl),
181
- onClose: handleClose,
182
- getContentAnchorEl: null,
183
- anchorOrigin: {
184
- vertical: "bottom",
185
- horizontal: "left"
186
- },
187
- transformOrigin: {
188
- vertical: "top",
189
- horizontal: "left"
284
+ }, isOpen ? upArrowIcon : downArrowIcon))), /*#__PURE__*/_react["default"].createElement(Popover.Content, {
285
+ sideOffset: 1,
286
+ asChild: true
287
+ }, /*#__PURE__*/_react["default"].createElement(_DropdownMenu["default"], {
288
+ id: menuId,
289
+ dropdownTriggerId: triggerId,
290
+ options: options,
291
+ iconsPosition: optionsIconPosition,
292
+ visualFocusIndex: visualFocusIndex,
293
+ menuItemOnClick: handleMenuItemOnClick,
294
+ onKeyDown: handleMenuOnKeyDown,
295
+ styles: {
296
+ width: width
190
297
  },
191
- size: size,
192
- width: width,
193
- role: undefined,
194
- transition: true,
195
- disablePortal: true,
196
- placement: "bottom-start"
197
- }, function (_ref2) {
198
- var TransitionProps = _ref2.TransitionProps;
199
- return /*#__PURE__*/_react["default"].createElement(_Grow["default"], TransitionProps, /*#__PURE__*/_react["default"].createElement(_Paper["default"], null, /*#__PURE__*/_react["default"].createElement(_core.ClickAwayListener, {
200
- onClickAway: handleClose
201
- }, /*#__PURE__*/_react["default"].createElement(_MenuList["default"], {
202
- autoFocusItem: Boolean(anchorEl),
203
- id: "menu-list-grow"
204
- }, options.map(function (option) {
205
- return /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
206
- key: option.value,
207
- value: option.value,
208
- disableRipple: true,
209
- onClick: function onClick(event) {
210
- return handleMenuItemClick(option);
211
- }
212
- }, optionsIconPosition === "after" && /*#__PURE__*/_react["default"].createElement("span", {
213
- className: "optionLabel"
214
- }, option.label), option.icon && /*#__PURE__*/_react["default"].createElement(ListIconContainer, {
215
- label: option.label,
216
- iconPosition: optionsIconPosition
217
- }, typeof option.icon === "string" ? /*#__PURE__*/_react["default"].createElement(ListIcon, {
218
- src: option.icon
219
- }) : option.icon), optionsIconPosition === "before" && /*#__PURE__*/_react["default"].createElement("span", {
220
- className: "optionLabel"
221
- }, option.label));
222
- })))));
223
- }))));
298
+ ref: menuRef
299
+ })))));
224
300
  };
225
301
 
226
302
  var sizes = {
@@ -228,18 +304,14 @@ var sizes = {
228
304
  medium: "240px",
229
305
  large: "480px",
230
306
  fillParent: "100%",
231
- fitContent: "unset"
307
+ fitContent: "fit-content"
232
308
  };
233
309
 
234
310
  var calculateWidth = function calculateWidth(margin, size) {
235
- if (size === "fillParent") {
236
- return "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")");
237
- }
238
-
239
- return sizes[size];
311
+ return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
240
312
  };
241
313
 
242
- var DXCDropdownContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n text-overflow: ellipsis;\n overflow: hidden;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n display: inline-block;\n"])), function (props) {
314
+ var DropdownContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-block;\n width: ", ";\n text-overflow: ellipsis;\n overflow: hidden;\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
243
315
  return calculateWidth(props.margin, props.size);
244
316
  }, function (props) {
245
317
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
@@ -253,64 +325,10 @@ var DXCDropdownContainer = _styledComponents["default"].div(_templateObject || (
253
325
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
254
326
  });
255
327
 
256
- var DXCMenu = (0, _styledComponents["default"])(_Popper["default"])(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n z-index: 1;\n\n .MuiMenuItem-gutters {\n width: ", ";\n }\n .MuiMenuItem-root {\n min-height: 36px;\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n height: auto;\n }\n .MuiPaper-root {\n min-width: ", ";\n border-width: ", ";\n border-style: ", ";\n border-color: ", ";\n border-bottom-left-radius: ", ";\n border-bottom-right-radius: ", ";\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n max-height: 230px;\n overflow-y: auto;\n\n ::-webkit-scrollbar {\n width: 3px;\n }\n ::-webkit-scrollbar-track {\n background-color: ", ";\n border-radius: 3px;\n }\n ::-webkit-scrollbar-thumb {\n background-color: ", ";\n border-radius: 3px;\n }\n\n .MuiList-padding {\n padding-top: 0px;\n padding-bottom: 0px;\n }\n .MuiListItem-button {\n display: flex;\n background-color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n color: ", ";\n cursor: pointer;\n }\n .MuiListItem-button:focus {\n outline: ", " solid 2px;\n outline-offset: -2px;\n }\n .MuiListItem-button:hover {\n background-color: ", ";\n }\n .MuiListItem-button:active {\n background-color: ", ";\n outline: ", " solid 2px;\n outline-offset: -2px;\n }\n }\n"])), function (props) {
257
- return calculateWidth(props.margin, props.size);
258
- }, function (props) {
259
- return props.theme.optionPaddingTop;
260
- }, function (props) {
261
- return props.theme.optionPaddingBottom;
262
- }, function (props) {
263
- return props.theme.optionPaddingLeft;
264
- }, function (props) {
265
- return props.theme.optionPaddingRight;
266
- }, function (props) {
267
- return "".concat(props.width, "px");
268
- }, function (props) {
269
- return props.theme.borderThickness;
270
- }, function (props) {
271
- return props.theme.borderStyle;
272
- }, function (props) {
273
- return props.theme.borderColor;
274
- }, function (props) {
275
- return props.theme.borderRadius;
276
- }, function (props) {
277
- return props.theme.borderRadius;
278
- }, function (props) {
279
- return props.theme.scrollBarTrackColor;
280
- }, function (props) {
281
- return props.theme.scrollBarThumbColor;
282
- }, function (props) {
283
- return props.theme.optionBackgroundColor;
284
- }, function (props) {
285
- return props.theme.optionFontFamily;
286
- }, function (props) {
287
- return props.theme.optionFontSize;
288
- }, function (props) {
289
- return props.theme.optionFontStyle;
290
- }, function (props) {
291
- return props.theme.optionFontWeight;
292
- }, function (props) {
293
- return props.theme.optionFontColor;
294
- }, function (props) {
295
- return props.theme.focusColor;
296
- }, function (props) {
297
- return props.theme.hoverOptionBackgroundColor;
298
- }, function (props) {
299
- return props.theme.activeOptionBackgroundColor;
300
- }, function (props) {
301
- return props.theme.focusColor;
302
- });
303
-
304
- var DropdownTrigger = _styledComponents["default"].button(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n height: auto;\n min-height: 40px;\n cursor: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n border-radius: ", ";\n border-width: ", ";\n border-style: ", ";\n border-color: ", ";\n min-width: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n background-color: ", ";\n color: ", ";\n border-bottom-right-radius: ", ";\n border-bottom-left-radius: ", ";\n\n ", ";\n"])), function (props) {
305
- return props.disabled ? "not-allowed" : "pointer";
306
- }, function (props) {
307
- return props.theme.buttonFontFamily;
308
- }, function (props) {
309
- return props.theme.buttonFontSize;
310
- }, function (props) {
311
- return props.theme.buttonFontStyle;
328
+ var DropdownTrigger = _styledComponents["default"].button(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: ", ";\n width: 100%;\n min-height: 40px;\n min-width: ", ";\n border-radius: ", ";\n border-width: ", ";\n border-style: ", ";\n border-color: ", ";\n padding-top: ", ";\n padding-bottom: ", ";\n padding-left: ", ";\n padding-right: ", ";\n background-color: ", ";\n color: ", ";\n cursor: ", ";\n\n ", ";\n"])), function (props) {
329
+ return props.theme.caretIconSpacing;
312
330
  }, function (props) {
313
- return props.theme.buttonFontWeight;
331
+ return props.label === "" ? "0px" : calculateWidth(props.margin, props.size);
314
332
  }, function (props) {
315
333
  return props.theme.borderRadius;
316
334
  }, function (props) {
@@ -319,8 +337,6 @@ var DropdownTrigger = _styledComponents["default"].button(_templateObject3 || (_
319
337
  return props.theme.borderStyle;
320
338
  }, function (props) {
321
339
  return props.disabled ? props.theme.disabledBorderColor : props.theme.borderColor;
322
- }, function (props) {
323
- return props.label === "" ? "0px" : calculateWidth(props.margin, props.size);
324
340
  }, function (props) {
325
341
  return props.theme.buttonPaddingTop;
326
342
  }, function (props) {
@@ -334,52 +350,34 @@ var DropdownTrigger = _styledComponents["default"].button(_templateObject3 || (_
334
350
  }, function (props) {
335
351
  return props.disabled ? props.theme.disabledColor : props.theme.buttonFontColor;
336
352
  }, function (props) {
337
- return props.opened ? "0px" : props.theme.borderRadius;
338
- }, function (props) {
339
- return props.opened ? "0px" : props.theme.borderRadius;
353
+ return props.disabled ? "not-allowed" : "pointer";
340
354
  }, function (props) {
341
- return !props.disabled && " \n &:focus {\n outline: none;\n }\n &:focus-visible {\n outline: ".concat(props.theme.focusColor, " solid 2px;\n outline-offset: -2px;\n }\n &:hover {\n background-color: ").concat(props.theme.hoverButtonBackgroundColor, ";\n }\n &:active {\n background-color: ").concat(props.theme.activeButtonBackgroundColor, ";\n }\n ");
355
+ return !props.disabled && "\n &:focus {\n outline: ".concat(props.theme.focusColor, " solid 2px;\n outline-offset: -2px;\n }\n &:hover {\n background-color: ").concat(props.theme.hoverButtonBackgroundColor, ";\n }\n &:active {\n background-color: ").concat(props.theme.activeButtonBackgroundColor, ";\n }\n ");
342
356
  });
343
357
 
344
- var DropdownTriggerLabel = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n text-align: left;\n text-overflow: ellipsis;\n overflow: hidden;\n"])));
345
-
346
- var DropdownTriggerContainer = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n margin-left: 0px;\n margin-right: 0px;\n width: ", ";\n white-space: nowrap;\n"])), function (props) {
347
- return props.caretHidden ? "100%" : "calc(100% - 36px)";
358
+ var DropdownTriggerContent = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n gap: ", ";\n margin-left: 0px;\n margin-right: 0px;\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n"])), function (props) {
359
+ return props.theme.buttonIconSpacing;
348
360
  });
349
361
 
350
- var ButtonIcon = _styledComponents["default"].img(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])([""])));
351
-
352
- var ButtonIconContainer = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n width: ", ";\n height: ", ";\n margin-left: ", ";\n margin-right: ", ";\n color: ", ";\n\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
353
- return props.theme.buttonIconSize;
354
- }, function (props) {
355
- return props.theme.buttonIconSize;
362
+ var DropdownTriggerLabel = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n text-overflow: ellipsis;\n overflow: hidden;\n"])), function (props) {
363
+ return props.theme.buttonFontFamily;
356
364
  }, function (props) {
357
- return props.iconPosition === "after" && props.label !== "" && props.theme.buttonIconSpacing || "0px";
365
+ return props.theme.buttonFontSize;
358
366
  }, function (props) {
359
- return props.iconPosition === "before" && props.label !== "" && props.theme.buttonIconSpacing || "0px";
367
+ return props.theme.buttonFontStyle;
360
368
  }, function (props) {
361
- return props.disabled ? props.theme.disabledColor : props.theme.buttonIconColor;
369
+ return props.theme.buttonFontWeight;
362
370
  });
363
371
 
364
- var ListIcon = _styledComponents["default"].img(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])([""])));
365
-
366
- var ListIconContainer = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n width: ", ";\n height: ", ";\n margin-left: ", ";\n margin-right: ", ";\n color: ", ";\n\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"])), function (props) {
367
- return props.theme.optionIconSize;
368
- }, function (props) {
369
- return props.theme.optionIconSize;
370
- }, function (props) {
371
- return props.iconPosition === "after" && props.label !== "" && props.theme.optionIconSpacing || "0px";
372
+ var DropdownTriggerIcon = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n\n img,\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
373
+ return props.disabled ? props.theme.disabledColor : props.theme.buttonIconColor;
372
374
  }, function (props) {
373
- return props.iconPosition === "before" && props.label !== "" && props.theme.optionIconSpacing || "0px";
375
+ return props.theme.buttonIconSize;
374
376
  }, function (props) {
375
- return props.theme.optionIconColor;
377
+ return props.theme.buttonIconSize;
376
378
  });
377
379
 
378
- var CaretIconContainer = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: ", ";\n margin-left: ", ";\n color: ", ";\n\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
379
- return props.caretHidden ? "none" : "inline-flex";
380
- }, function (props) {
381
- return props.theme.caretIconSpacing;
382
- }, function (props) {
380
+ var CaretIcon = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n color: ", ";\n\n svg {\n width: ", ";\n height: ", ";\n }\n"])), function (props) {
383
381
  return props.disabled ? props.theme.disabledColor : props.theme.caretIconColor;
384
382
  }, function (props) {
385
383
  return props.theme.caretIconSize;