@dxc-technology/halstack-react 0.0.0-f77ec3a → 0.0.0-f7f591a

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 (183) hide show
  1. package/{dist/BackgroundColorContext.js → BackgroundColorContext.js} +0 -0
  2. package/{dist/ThemeContext.js → ThemeContext.js} +0 -0
  3. package/{dist/V3Select → V3Select}/V3Select.js +0 -0
  4. package/{dist/V3Select → V3Select}/index.d.ts +0 -0
  5. package/{dist/V3Textarea → V3Textarea}/V3Textarea.js +0 -0
  6. package/{dist/V3Textarea → V3Textarea}/index.d.ts +0 -0
  7. package/{dist/accordion → accordion}/Accordion.js +0 -0
  8. package/{dist/accordion → accordion}/index.d.ts +0 -0
  9. package/{dist/accordion-group → accordion-group}/AccordionGroup.js +0 -0
  10. package/{dist/accordion-group → accordion-group}/index.d.ts +0 -0
  11. package/{dist/alert → alert}/Alert.js +0 -0
  12. package/{dist/alert → alert}/index.d.ts +0 -0
  13. package/{dist/badge → badge}/Badge.js +0 -0
  14. package/{dist/box → box}/Box.js +0 -0
  15. package/{dist/box → box}/index.d.ts +0 -0
  16. package/{dist/button → button}/Button.js +0 -0
  17. package/button/Button.stories.js +27 -0
  18. package/{dist/button → button}/index.d.ts +0 -0
  19. package/{dist/card → card}/Card.js +0 -0
  20. package/{dist/card → card}/index.d.ts +0 -0
  21. package/{dist/checkbox → checkbox}/Checkbox.js +0 -0
  22. package/{dist/checkbox → checkbox}/index.d.ts +0 -0
  23. package/{dist/chip → chip}/Chip.js +0 -0
  24. package/{dist/chip → chip}/index.d.ts +0 -0
  25. package/{dist/common → common}/OpenSans.css +0 -0
  26. package/{dist/common → common}/RequiredComponent.js +0 -0
  27. package/{dist/common → common}/fonts/OpenSans-Bold.ttf +0 -0
  28. package/{dist/common → common}/fonts/OpenSans-BoldItalic.ttf +0 -0
  29. package/{dist/common → common}/fonts/OpenSans-ExtraBold.ttf +0 -0
  30. package/{dist/common → common}/fonts/OpenSans-ExtraBoldItalic.ttf +0 -0
  31. package/{dist/common → common}/fonts/OpenSans-Italic.ttf +0 -0
  32. package/{dist/common → common}/fonts/OpenSans-Light.ttf +0 -0
  33. package/{dist/common → common}/fonts/OpenSans-LightItalic.ttf +0 -0
  34. package/{dist/common → common}/fonts/OpenSans-Regular.ttf +0 -0
  35. package/{dist/common → common}/fonts/OpenSans-SemiBold.ttf +0 -0
  36. package/{dist/common → common}/fonts/OpenSans-SemiBoldItalic.ttf +0 -0
  37. package/{dist/common → common}/utils.js +0 -0
  38. package/{dist/common → common}/variables.js +14 -22
  39. package/{dist/date → date}/Date.js +0 -0
  40. package/{dist/date → date}/index.d.ts +0 -0
  41. package/{dist/date-input → date-input}/DateInput.js +0 -0
  42. package/{dist/date-input → date-input}/index.d.ts +0 -0
  43. package/{dist/dialog → dialog}/Dialog.js +0 -0
  44. package/{dist/dialog → dialog}/index.d.ts +0 -0
  45. package/{dist/dropdown → dropdown}/Dropdown.js +0 -0
  46. package/{dist/dropdown → dropdown}/index.d.ts +0 -0
  47. package/{dist/file-input → file-input}/FileInput.js +1 -1
  48. package/{dist/file-input → file-input}/FileItem.js +0 -0
  49. package/{dist/file-input → file-input}/index.d.ts +0 -0
  50. package/{dist/footer → footer}/Footer.js +0 -0
  51. package/{dist/footer → footer}/Icons.js +0 -0
  52. package/{dist/footer → footer}/index.d.ts +0 -0
  53. package/{dist/header → header}/Header.js +0 -0
  54. package/{dist/header → header}/Icons.js +0 -0
  55. package/{dist/header → header}/index.d.ts +0 -0
  56. package/{dist/heading → heading}/Heading.js +0 -0
  57. package/{dist/heading → heading}/index.d.ts +0 -0
  58. package/{dist/input-text → input-text}/Icons.js +0 -0
  59. package/{dist/input-text → input-text}/InputText.js +0 -0
  60. package/{dist/input-text → input-text}/index.d.ts +0 -0
  61. package/{dist/layout → layout}/ApplicationLayout.js +0 -0
  62. package/{dist/layout → layout}/Icons.js +0 -0
  63. package/{dist/link → link}/Link.js +0 -0
  64. package/{dist/link → link}/index.d.ts +0 -0
  65. package/{dist/main.d.ts → main.d.ts} +0 -0
  66. package/{dist/main.js → main.js} +0 -0
  67. package/{dist/number-input → number-input}/NumberInput.js +0 -0
  68. package/{dist/number-input → number-input}/NumberInputContext.js +0 -0
  69. package/{dist/number-input → number-input}/index.d.ts +0 -0
  70. package/package.json +9 -9
  71. package/{dist/paginator → paginator}/Icons.js +0 -0
  72. package/{dist/paginator → paginator}/Paginator.js +0 -0
  73. package/{dist/paginator → paginator}/index.d.ts +0 -0
  74. package/{dist/password-input → password-input}/PasswordInput.js +0 -0
  75. package/{dist/password-input → password-input}/index.d.ts +0 -0
  76. package/{dist/progress-bar → progress-bar}/ProgressBar.js +0 -0
  77. package/{dist/progress-bar → progress-bar}/index.d.ts +0 -0
  78. package/{dist/radio → radio}/Radio.js +0 -0
  79. package/{dist/radio → radio}/index.d.ts +0 -0
  80. package/{dist/resultsetTable → resultsetTable}/ResultsetTable.js +1 -1
  81. package/{dist/resultsetTable → resultsetTable}/index.d.ts +0 -0
  82. package/{dist/select → select}/Select.js +128 -88
  83. package/select/index.d.ts +131 -0
  84. package/{dist/sidenav → sidenav}/Sidenav.js +0 -0
  85. package/{dist/sidenav → sidenav}/index.d.ts +0 -0
  86. package/{dist/slider → slider}/Slider.js +0 -0
  87. package/{dist/slider → slider}/index.d.ts +0 -0
  88. package/{dist/spinner → spinner}/Spinner.js +0 -0
  89. package/{dist/spinner → spinner}/index.d.ts +0 -0
  90. package/{dist/switch → switch}/Switch.js +0 -0
  91. package/{dist/switch → switch}/index.d.ts +0 -0
  92. package/{dist/table → table}/Table.js +0 -0
  93. package/{dist/table → table}/index.d.ts +0 -0
  94. package/{dist/tabs → tabs}/Tabs.js +0 -0
  95. package/{dist/tabs → tabs}/index.d.ts +0 -0
  96. package/{dist/tag → tag}/Tag.js +0 -0
  97. package/{dist/tag → tag}/index.d.ts +0 -0
  98. package/{dist/text-input → text-input}/TextInput.js +199 -183
  99. package/{dist/text-input → text-input}/index.d.ts +0 -0
  100. package/{dist/textarea → textarea}/Textarea.js +0 -0
  101. package/{dist/textarea → textarea}/index.d.ts +0 -0
  102. package/{dist/toggle → toggle}/Toggle.js +0 -0
  103. package/{dist/toggle → toggle}/index.d.ts +0 -0
  104. package/{dist/toggle-group → toggle-group}/ToggleGroup.js +0 -0
  105. package/{dist/toggle-group → toggle-group}/index.d.ts +0 -0
  106. package/{dist/upload → upload}/Upload.js +0 -0
  107. package/{dist/upload → upload}/buttons-upload/ButtonsUpload.js +0 -0
  108. package/{dist/upload → upload}/buttons-upload/Icons.js +0 -0
  109. package/{dist/upload → upload}/dragAndDropArea/DragAndDropArea.js +0 -0
  110. package/{dist/upload → upload}/dragAndDropArea/Icons.js +0 -0
  111. package/{dist/upload → upload}/file-upload/FileToUpload.js +0 -0
  112. package/{dist/upload → upload}/file-upload/Icons.js +0 -0
  113. package/{dist/upload → upload}/files-upload/FilesToUpload.js +0 -0
  114. package/{dist/upload → upload}/index.d.ts +0 -0
  115. package/{dist/upload → upload}/transaction/Icons.js +0 -0
  116. package/{dist/upload → upload}/transaction/Transaction.js +0 -0
  117. package/{dist/upload → upload}/transactions/Transactions.js +0 -0
  118. package/{dist/useTheme.js → useTheme.js} +0 -0
  119. package/{dist/wizard → wizard}/Icons.js +0 -0
  120. package/{dist/wizard → wizard}/Wizard.js +0 -0
  121. package/{dist/wizard → wizard}/index.d.ts +0 -0
  122. package/README.md +0 -66
  123. package/babel.config.js +0 -7
  124. package/dist/select/index.d.ts +0 -53
  125. package/dist/stories/Button.js +0 -71
  126. package/dist/stories/Button.stories.js +0 -55
  127. package/dist/stories/Header.js +0 -67
  128. package/dist/stories/Header.stories.js +0 -31
  129. package/dist/stories/Introduction.stories.mdx +0 -211
  130. package/dist/stories/Page.js +0 -68
  131. package/dist/stories/Page.stories.js +0 -39
  132. package/dist/stories/assets/code-brackets.svg +0 -1
  133. package/dist/stories/assets/colors.svg +0 -1
  134. package/dist/stories/assets/comments.svg +0 -1
  135. package/dist/stories/assets/direction.svg +0 -1
  136. package/dist/stories/assets/flow.svg +0 -1
  137. package/dist/stories/assets/plugin.svg +0 -1
  138. package/dist/stories/assets/repo.svg +0 -1
  139. package/dist/stories/assets/stackalt.svg +0 -1
  140. package/dist/stories/button.css +0 -30
  141. package/dist/stories/header.css +0 -26
  142. package/dist/stories/page.css +0 -69
  143. package/test/Accordion.test.js +0 -33
  144. package/test/AccordionGroup.test.js +0 -125
  145. package/test/Alert.test.js +0 -53
  146. package/test/Box.test.js +0 -10
  147. package/test/Button.test.js +0 -18
  148. package/test/Card.test.js +0 -30
  149. package/test/Checkbox.test.js +0 -45
  150. package/test/Chip.test.js +0 -25
  151. package/test/Date.test.js +0 -395
  152. package/test/DateInput.test.js +0 -242
  153. package/test/Dialog.test.js +0 -23
  154. package/test/Dropdown.test.js +0 -145
  155. package/test/FileInput.test.js +0 -201
  156. package/test/Footer.test.js +0 -94
  157. package/test/Header.test.js +0 -34
  158. package/test/Heading.test.js +0 -83
  159. package/test/InputText.test.js +0 -239
  160. package/test/Link.test.js +0 -43
  161. package/test/NumberInput.test.js +0 -259
  162. package/test/Paginator.test.js +0 -181
  163. package/test/PasswordInput.test.js +0 -83
  164. package/test/ProgressBar.test.js +0 -35
  165. package/test/Radio.test.js +0 -37
  166. package/test/ResultsetTable.test.js +0 -330
  167. package/test/Select.test.js +0 -415
  168. package/test/Sidenav.test.js +0 -45
  169. package/test/Slider.test.js +0 -74
  170. package/test/Spinner.test.js +0 -32
  171. package/test/Switch.test.js +0 -45
  172. package/test/Table.test.js +0 -36
  173. package/test/Tabs.test.js +0 -109
  174. package/test/Tag.test.js +0 -32
  175. package/test/TextInput.test.js +0 -732
  176. package/test/Textarea.test.js +0 -193
  177. package/test/ToggleGroup.test.js +0 -85
  178. package/test/Upload.test.js +0 -60
  179. package/test/V3Select.test.js +0 -212
  180. package/test/V3TextArea.test.js +0 -51
  181. package/test/Wizard.test.js +0 -130
  182. package/test/mocks/pngMock.js +0 -1
  183. package/test/mocks/svgMock.js +0 -1
@@ -62,7 +62,7 @@ function _templateObject26() {
62
62
  }
63
63
 
64
64
  function _templateObject25() {
65
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 24px;\n width: 24px;\n margin-left: 8px;\n color: ", ";\n"]);
65
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 24px;\n width: 24px;\n ", "\n color: ", ";\n"]);
66
66
 
67
67
  _templateObject25 = function _templateObject25() {
68
68
  return data;
@@ -72,7 +72,7 @@ function _templateObject25() {
72
72
  }
73
73
 
74
74
  function _templateObject24() {
75
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n overflow: hidden;\n padding-left: 8px;\n ", "\n"]);
75
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: space-between;\n width: 100%;\n overflow: hidden;\n ", "\n"]);
76
76
 
77
77
  _templateObject24 = function _templateObject24() {
78
78
  return data;
@@ -82,7 +82,7 @@ function _templateObject24() {
82
82
  }
83
83
 
84
84
  function _templateObject23() {
85
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: 4px 8px 3px 0;\n min-height: 24px;\n ", "\n ", ";\n"]);
85
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: 0.25rem 0.5rem 0.188rem 0;\n min-height: 24px;\n ", "\n ", ";\n"]);
86
86
 
87
87
  _templateObject23 = function _templateObject23() {
88
88
  return data;
@@ -92,7 +92,7 @@ function _templateObject23() {
92
92
  }
93
93
 
94
94
  function _templateObject22() {
95
- var data = (0, _taggedTemplateLiteral2["default"])(["\n padding: 0 8px;\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"]);
95
+ var data = (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"]);
96
96
 
97
97
  _templateObject22 = function _templateObject22() {
98
98
  return data;
@@ -142,7 +142,7 @@ function _templateObject18() {
142
142
  }
143
143
 
144
144
  function _templateObject17() {
145
- var data = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n z-index: 1;\n max-height: 304px;\n overflow-x: auto;\n top: calc(100% + 4px);\n left: 0;\n margin: 0;\n padding: 4px 0;\n width: 100%;\n box-sizing: border-box;\n background-color: ", ";\n border: 1px solid ", ";\n border-radius: 4px;\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"]);
145
+ var data = (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"]);
146
146
 
147
147
  _templateObject17 = function _templateObject17() {
148
148
  return data;
@@ -232,7 +232,7 @@ function _templateObject9() {
232
232
  }
233
233
 
234
234
  function _templateObject8() {
235
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 24px;\n width: 24px;\n font-size: 1rem;\n font-family: ", ";\n border: 1px solid transparent;\n padding: 3px;\n ", "\n background-color: ", ";\n color: ", ";\n\n ", "\n\n svg {\n line-height: 18px;\n }\n"]);
235
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n height: 24px;\n width: 24px;\n font-size: 1rem;\n font-family: ", ";\n border: 1px solid transparent;\n padding: 3px;\n ", "\n background-color: ", ";\n color: ", ";\n\n :focus-visible {\n outline: none;\n }\n ", "\n\n svg {\n line-height: 18px;\n }\n"]);
236
236
 
237
237
  _templateObject8 = function _templateObject8() {
238
238
  return data;
@@ -302,7 +302,7 @@ function _templateObject2() {
302
302
  }
303
303
 
304
304
  function _templateObject() {
305
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"]);
305
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"]);
306
306
 
307
307
  _templateObject = function _templateObject() {
308
308
  return data;
@@ -313,6 +313,7 @@ function _templateObject() {
313
313
 
314
314
  var selectIcons = {
315
315
  error: _react["default"].createElement("svg", {
316
+ role: "img",
316
317
  xmlns: "http://www.w3.org/2000/svg",
317
318
  height: "24px",
318
319
  viewBox: "0 0 24 24",
@@ -322,6 +323,7 @@ var selectIcons = {
322
323
  d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"
323
324
  })),
324
325
  arrowUp: _react["default"].createElement("svg", {
326
+ role: "img",
325
327
  xmlns: "http://www.w3.org/2000/svg",
326
328
  height: "24px",
327
329
  viewBox: "0 0 24 24",
@@ -334,6 +336,7 @@ var selectIcons = {
334
336
  d: "M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6 1.41 1.41z"
335
337
  })),
336
338
  arrowDown: _react["default"].createElement("svg", {
339
+ role: "img",
337
340
  xmlns: "http://www.w3.org/2000/svg",
338
341
  height: "24px",
339
342
  viewBox: "0 0 24 24",
@@ -346,6 +349,7 @@ var selectIcons = {
346
349
  d: "M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"
347
350
  })),
348
351
  clear: _react["default"].createElement("svg", {
352
+ role: "img",
349
353
  xmlns: "http://www.w3.org/2000/svg",
350
354
  width: "24",
351
355
  height: "24",
@@ -358,6 +362,7 @@ var selectIcons = {
358
362
  d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z"
359
363
  })),
360
364
  selected: _react["default"].createElement("svg", {
365
+ role: "img",
361
366
  xmlns: "http://www.w3.org/2000/svg",
362
367
  height: "24px",
363
368
  viewBox: "0 0 24 24",
@@ -370,6 +375,7 @@ var selectIcons = {
370
375
  d: "M9 16.2L4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4L9 16.2z"
371
376
  })),
372
377
  searchOff: _react["default"].createElement("svg", {
378
+ role: "img",
373
379
  xmlns: "http://www.w3.org/2000/svg",
374
380
  height: "24px",
375
381
  viewBox: "0 0 24 24",
@@ -468,13 +474,83 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
468
474
  var selectSearchInputRef = (0, _react.useRef)(null);
469
475
  var selectOptionsListRef = (0, _react.useRef)(null);
470
476
  var colorsTheme = (0, _useTheme["default"])();
471
- var filteredOptions = (0, _react.useMemo)(function () {
472
- return filterOptionsBySearchValue(options, searchValue);
473
- }, [options, searchValue]);
474
477
  var optionalEmptyOption = {
475
478
  label: placeholder,
476
479
  value: ""
477
480
  };
481
+ var filteredOptions = (0, _react.useMemo)(function () {
482
+ return filterOptionsBySearchValue(options, searchValue);
483
+ }, [options, searchValue]);
484
+
485
+ var getLastOptionIndex = function getLastOptionIndex() {
486
+ var last = 0;
487
+
488
+ var reducer = function reducer(acc, current) {
489
+ var _current$options;
490
+
491
+ return acc + ((_current$options = current.options) === null || _current$options === void 0 ? void 0 : _current$options.length);
492
+ };
493
+
494
+ if (searchable && filteredOptions.length > 0) filteredOptions[0].options ? last = filteredOptions.reduce(reducer, 0) - 1 : last = filteredOptions.length - 1;else if ((options === null || options === void 0 ? void 0 : options.length) > 0) options[0].options ? last = options.reduce(reducer, 0) - 1 : last = options.length - 1;
495
+ return optional && !multiple ? last + 1 : last;
496
+ };
497
+
498
+ var lastOptionIndex = (0, _react.useMemo)(function () {
499
+ return getLastOptionIndex();
500
+ }, [searchable, optional, multiple, filteredOptions, options]);
501
+
502
+ var getSelectedOption = function getSelectedOption() {
503
+ var val = value !== null && value !== void 0 ? value : innerValue;
504
+ var selectedOption = multiple ? [] : "";
505
+ var singleSelectionIndex;
506
+
507
+ if (multiple) {
508
+ if ((options === null || options === void 0 ? void 0 : options.length) > 0) {
509
+ options.forEach(function (option) {
510
+ if (option.options) {
511
+ option.options.forEach(function (singleOption) {
512
+ if (val.includes(singleOption.value)) selectedOption.push(singleOption);
513
+ });
514
+ } else if (val.includes(option.value)) selectedOption.push(option);
515
+ });
516
+ }
517
+ } else {
518
+ if (optional && val === "") {
519
+ selectedOption = optionalEmptyOption;
520
+ singleSelectionIndex = 0;
521
+ } else if ((options === null || options === void 0 ? void 0 : options.length) > 0) {
522
+ var group_index = 0;
523
+ options.some(function (option, index) {
524
+ if (option.options) {
525
+ option.options.some(function (singleOption) {
526
+ if (singleOption.value === val) {
527
+ selectedOption = singleOption;
528
+ singleSelectionIndex = optional ? group_index + 1 : group_index;
529
+ return true;
530
+ }
531
+
532
+ group_index++;
533
+ });
534
+ } else if (option.value === val) {
535
+ selectedOption = option;
536
+ singleSelectionIndex = optional ? index + 1 : index;
537
+ return true;
538
+ }
539
+ });
540
+ }
541
+ }
542
+
543
+ return {
544
+ selectedOption: selectedOption,
545
+ singleSelectionIndex: singleSelectionIndex
546
+ };
547
+ };
548
+
549
+ var _useMemo = (0, _react.useMemo)(function () {
550
+ return getSelectedOption();
551
+ }, [options, multiple, value, innerValue]),
552
+ selectedOption = _useMemo.selectedOption,
553
+ singleSelectionIndex = _useMemo.singleSelectionIndex;
478
554
 
479
555
  var notOptionalCheck = function notOptionalCheck(value) {
480
556
  return value === "" && !optional;
@@ -547,16 +623,16 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
547
623
  };
548
624
 
549
625
  var handleSelectOnClick = function handleSelectOnClick() {
626
+ searchable && selectSearchInputRef.current.focus();
627
+
550
628
  if (isOpen) {
551
629
  closeOptions();
552
630
  setSearchValue("");
553
631
  } else openOptions();
554
-
555
- searchable && selectSearchInputRef.current.focus();
556
632
  };
557
633
 
558
- var handleSelectOnFocus = function handleSelectOnFocus() {
559
- searchable && selectSearchInputRef.current.focus();
634
+ var handleSelectOnFocus = function handleSelectOnFocus(event) {
635
+ if (!event.currentTarget.contains(event.relatedTarget)) searchable && selectSearchInputRef.current.focus();
560
636
  };
561
637
 
562
638
  var handleSelectOnBlur = function handleSelectOnBlur(event) {
@@ -579,7 +655,7 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
579
655
  case 40:
580
656
  // Arrow Down
581
657
  event.preventDefault();
582
- changeVisualFocusIndex(function (visualFocusIndex) {
658
+ singleSelectionIndex !== undefined && (!isOpen || visualFocusIndex === -1 && singleSelectionIndex > -1 && singleSelectionIndex <= lastOptionIndex) ? changeVisualFocusIndex(singleSelectionIndex) : changeVisualFocusIndex(function (visualFocusIndex) {
583
659
  if (visualFocusIndex < lastOptionIndex) return visualFocusIndex + 1;else if (visualFocusIndex === lastOptionIndex) return 0;
584
660
  });
585
661
  openOptions();
@@ -588,7 +664,7 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
588
664
  case 38:
589
665
  // Arrow Up
590
666
  event.preventDefault();
591
- changeVisualFocusIndex(function (visualFocusIndex) {
667
+ singleSelectionIndex !== undefined && (!isOpen || visualFocusIndex === -1 && singleSelectionIndex > -1 && singleSelectionIndex <= lastOptionIndex) ? changeVisualFocusIndex(singleSelectionIndex) : changeVisualFocusIndex(function (visualFocusIndex) {
592
668
  return visualFocusIndex === 0 || visualFocusIndex === -1 ? lastOptionIndex : visualFocusIndex - 1;
593
669
  });
594
670
  openOptions();
@@ -638,11 +714,6 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
638
714
  openOptions();
639
715
  };
640
716
 
641
- var handleClearActionOnClick = function handleClearActionOnClick(event) {
642
- event.stopPropagation();
643
- setSearchValue("");
644
- };
645
-
646
717
  var handleClearOptionsActionOnClick = function handleClearOptionsActionOnClick(event) {
647
718
  event.stopPropagation();
648
719
  value !== null && value !== void 0 ? value : setInnerValue([]);
@@ -650,76 +721,33 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
650
721
  value: [],
651
722
  error: getNotOptionalErrorMessage()
652
723
  });
653
- selectContainerRef.current.focus();
654
724
  };
655
725
 
656
- var getLastOptionIndex = function getLastOptionIndex() {
657
- var last = 0;
658
-
659
- var reducer = function reducer(acc, current) {
660
- var _current$options;
661
-
662
- return acc + ((_current$options = current.options) === null || _current$options === void 0 ? void 0 : _current$options.length);
663
- };
664
-
665
- if (searchable && filteredOptions.length > 0) filteredOptions[0].options ? last = filteredOptions.reduce(reducer, 0) - 1 : last = filteredOptions.length - 1;else if ((options === null || options === void 0 ? void 0 : options.length) > 0) options[0].options ? last = options.reduce(reducer, 0) - 1 : last = options.length - 1;
666
- return optional && !multiple ? last + 1 : last;
726
+ var handleClearSearchActionOnClick = function handleClearSearchActionOnClick(event) {
727
+ event.stopPropagation();
728
+ setSearchValue("");
667
729
  };
668
730
 
669
- var lastOptionIndex = (0, _react.useMemo)(function () {
670
- return getLastOptionIndex();
671
- }, [searchable, optional, multiple, searchable ? filteredOptions : options]);
672
-
673
- var getSelectedOption = function getSelectedOption() {
674
- var val = value !== null && value !== void 0 ? value : innerValue;
675
- var selectedOption = multiple ? [] : "";
731
+ (0, _react.useLayoutEffect)(function () {
732
+ if (isOpen && singleSelectionIndex) {
733
+ var _listEl$scrollTo;
676
734
 
677
- if (multiple) {
678
- if ((options === null || options === void 0 ? void 0 : options.length) > 0) {
679
- options.forEach(function (option) {
680
- if (option.options) {
681
- option.options.forEach(function (singleOption) {
682
- if (val.includes(singleOption.value)) selectedOption.push(singleOption);
683
- });
684
- } else if (val.includes(option.value)) selectedOption.push(option);
685
- });
686
- }
687
- } else {
688
- if ((options === null || options === void 0 ? void 0 : options.length) > 0) {
689
- options.forEach(function (option) {
690
- if (option.options) {
691
- option.options.forEach(function (singleOption) {
692
- if (singleOption.value === val) selectedOption = singleOption;
693
- });
694
- } else if (option.value === val) selectedOption = option;
695
- });
696
- }
735
+ var listEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : selectOptionsListRef.current;
736
+ var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
737
+ listEl === null || listEl === void 0 ? void 0 : (_listEl$scrollTo = listEl.scrollTo) === null || _listEl$scrollTo === void 0 ? void 0 : _listEl$scrollTo.call(listEl, {
738
+ top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
739
+ });
697
740
  }
698
-
699
- return selectedOption;
700
- };
701
-
702
- var selectedOption = (0, _react.useMemo)(function () {
703
- return getSelectedOption();
704
- }, [options, multiple, value !== null && value !== void 0 ? value : innerValue]);
741
+ }, [isOpen]);
705
742
  (0, _react.useLayoutEffect)(function () {
706
- var _selectOptionsListRef;
743
+ var _selectOptionsListRef, _visualFocusedOptionE;
707
744
 
708
745
  var visualFocusedOptionEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : (_selectOptionsListRef = selectOptionsListRef.current) === null || _selectOptionsListRef === void 0 ? void 0 : _selectOptionsListRef.querySelectorAll("[role='option']")[visualFocusIndex];
709
- visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : visualFocusedOptionEl.scrollIntoView({
746
+ visualFocusedOptionEl === null || visualFocusedOptionEl === void 0 ? void 0 : (_visualFocusedOptionE = visualFocusedOptionEl.scrollIntoView) === null || _visualFocusedOptionE === void 0 ? void 0 : _visualFocusedOptionE.call(visualFocusedOptionEl, {
710
747
  block: "nearest",
711
748
  inline: "start"
712
749
  });
713
750
  }, [visualFocusIndex]);
714
- (0, _react.useLayoutEffect)(function () {
715
- if (isOpen && !multiple) {
716
- var listEl = selectOptionsListRef === null || selectOptionsListRef === void 0 ? void 0 : selectOptionsListRef.current;
717
- var selectedListOptionEl = listEl === null || listEl === void 0 ? void 0 : listEl.querySelector("[aria-selected='true']");
718
- listEl === null || listEl === void 0 ? void 0 : listEl.scrollTo({
719
- top: (selectedListOptionEl === null || selectedListOptionEl === void 0 ? void 0 : selectedListOptionEl.offsetTop) - (listEl === null || listEl === void 0 ? void 0 : listEl.clientHeight) / 2
720
- });
721
- }
722
- }, [isOpen]);
723
751
 
724
752
  var Option = function Option(_ref2) {
725
753
  var option = _ref2.option,
@@ -730,8 +758,7 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
730
758
  var isLastOption = index === lastOptionIndex;
731
759
  return _react["default"].createElement(OptionItem, {
732
760
  id: "option-".concat(index),
733
- onClick: function onClick(event) {
734
- // left mouse button only
761
+ onClick: function onClick() {
735
762
  handleSelectChangeValue(option);
736
763
  !multiple && closeOptions();
737
764
  setSearchValue("");
@@ -750,7 +777,9 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
750
777
  tabIndex: -1,
751
778
  checked: isSelected
752
779
  }), option.icon && _react["default"].createElement(OptionIcon, {
753
- selected: isSelected
780
+ grouped: isGroupedOption,
781
+ multiple: multiple,
782
+ role: !(typeof option.icon === "string") && "img"
754
783
  }, typeof option.icon === "string" ? _react["default"].createElement(OptionIconImg, {
755
784
  src: option.icon
756
785
  }) : option.icon), _react["default"].createElement(OptionContent, {
@@ -760,7 +789,7 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
760
789
  }, _react["default"].createElement(OptionLabel, null, option.label), !multiple && isSelected && _react["default"].createElement(OptionSelectedIndicator, null, selectIcons.selected))));
761
790
  };
762
791
 
763
- var global_index = optional && !multiple ? 0 : -1; // index for options (not groups), starting from 0 to options.length -1
792
+ var global_index = optional && !multiple ? 0 : -1; // index for options, starting from 0 to options.length -1
764
793
 
765
794
  var mapOptionFunc = function mapOptionFunc(option) {
766
795
  if (option.options) {
@@ -814,13 +843,17 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
814
843
  "aria-expanded": isOpen ? "true" : "false",
815
844
  "aria-haspopup": "listbox",
816
845
  "aria-labelledby": selectLabelId,
817
- "aria-activedescendant": visualFocusIndex >= 0 && "option-".concat(visualFocusIndex),
846
+ "aria-activedescendant": visualFocusIndex >= 0 ? "option-".concat(visualFocusIndex) : undefined,
818
847
  "aria-invalid": error ? "true" : "false",
819
848
  "aria-required": optional ? "false" : "true"
820
849
  }, multiple && selectedOption.length > 0 && _react["default"].createElement(SelectionIndicator, null, _react["default"].createElement(SelectionNumber, {
821
850
  disabled: disabled
822
851
  }, selectedOption.length, " "), _react["default"].createElement(ClearOptionsAction, {
823
852
  disabled: disabled,
853
+ onMouseDown: function onMouseDown(event) {
854
+ // Avoid input to lose focus when pressed
855
+ event.preventDefault();
856
+ },
824
857
  onClick: handleClearOptionsActionOnClick,
825
858
  tabIndex: -1,
826
859
  title: "Clear selected options",
@@ -828,7 +861,8 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
828
861
  }, selectIcons.clear)), _react["default"].createElement(SearchableValueContainer, null, _react["default"].createElement(ValueInput, {
829
862
  name: name,
830
863
  value: multiple ? (value !== null && value !== void 0 ? value : innerValue).join(", ") : value !== null && value !== void 0 ? value : innerValue,
831
- readOnly: true
864
+ readOnly: true,
865
+ "aria-hidden": "true"
832
866
  }), searchable && _react["default"].createElement(SearchInput, {
833
867
  value: searchValue,
834
868
  disabled: disabled,
@@ -844,8 +878,12 @@ var DxcSelect = _react["default"].forwardRef(function (_ref, ref) {
844
878
  }).join(", ")), selectedOption.length === 0 && placeholder) : _react["default"].createElement(SelectedOption, {
845
879
  disabled: disabled,
846
880
  atBackground: !(value !== null && value !== void 0 ? value : innerValue) || isOpen
847
- }, _react["default"].createElement(OptionLabel, null, (_ref3 = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _ref3 !== void 0 ? _ref3 : placeholder)))), !disabled && error && _react["default"].createElement(ErrorIcon, null, selectIcons.error), searchable && searchValue.length > 0 && _react["default"].createElement(ClearAction, {
848
- onClick: handleClearActionOnClick,
881
+ }, _react["default"].createElement(OptionLabel, null, (_ref3 = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _ref3 !== void 0 ? _ref3 : placeholder)))), !disabled && error && _react["default"].createElement(ErrorIcon, null, selectIcons.error), searchable && searchValue.length > 0 && _react["default"].createElement(ClearSearchAction, {
882
+ onMouseDown: function onMouseDown(event) {
883
+ // Avoid input to lose focus
884
+ event.preventDefault();
885
+ },
886
+ onClick: handleClearSearchActionOnClick,
849
887
  tabIndex: -1,
850
888
  title: "Clear search text",
851
889
  "aria-label": "Clear search text"
@@ -1020,7 +1058,7 @@ var CollapseIndicator = _styledComponents["default"].span(_templateObject15(), f
1020
1058
  return props.disabled ? props.theme.disabledColor : props.theme.collapseIndicatorColor;
1021
1059
  });
1022
1060
 
1023
- var ClearAction = _styledComponents["default"].button(_templateObject16(), function (props) {
1061
+ var ClearSearchAction = _styledComponents["default"].button(_templateObject16(), function (props) {
1024
1062
  return props.theme.fontFamily;
1025
1063
  }, function (props) {
1026
1064
  return props.disabled ? "cursor: not-allowed;" : "cursor: pointer;";
@@ -1077,10 +1115,12 @@ var StyledOption = _styledComponents["default"].span(_templateObject23(), functi
1077
1115
  });
1078
1116
 
1079
1117
  var OptionContent = _styledComponents["default"].span(_templateObject24(), function (props) {
1080
- return props.grouped && !props.multiple && !props.hasIcon && "padding-left: 16px;";
1118
+ return props.grouped && !props.multiple && !props.hasIcon ? "padding-left: 16px;" : "padding-left: 8px;";
1081
1119
  });
1082
1120
 
1083
1121
  var OptionIcon = _styledComponents["default"].span(_templateObject25(), function (props) {
1122
+ return props.grouped && !props.multiple ? "padding-left: 16px;" : "padding-left: 8px;";
1123
+ }, function (props) {
1084
1124
  return props.theme.listItemIconColor;
1085
1125
  });
1086
1126
 
@@ -0,0 +1,131 @@
1
+ type SVG = string | (HTMLElement & SVGElement);
2
+ type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
+ type Margin = {
4
+ top?: Space;
5
+ bottom?: Space;
6
+ left?: Space;
7
+ right?: Space;
8
+ };
9
+
10
+ type OptionGroup = {
11
+ /**
12
+ * Label of the group to be shown in the select's listbox.
13
+ */
14
+ label: string;
15
+ /**
16
+ * List of the grouped options.
17
+ */
18
+ options: Option[];
19
+ };
20
+ type Option = {
21
+ /**
22
+ * Element used as the icon that will be placed before the option label.
23
+ * It can be a url of an image or an inline SVG. If the url option
24
+ * is the chosen one, take into account that the component's
25
+ * color styling tokens will not be applied to the image.
26
+ */
27
+ icon?: SVG;
28
+ /**
29
+ * Label of the option to be shown in the select's listbox.
30
+ */
31
+ label: string;
32
+ /**
33
+ * Value of the option. It should be unique and
34
+ * not an empty string, which is reserved to the empty option added
35
+ * by optional prop.
36
+ */
37
+ value: string;
38
+ };
39
+
40
+ type Props = {
41
+ /**
42
+ * Text to be placed above the select.
43
+ */
44
+ label?: string;
45
+ /**
46
+ * Name attribute of the input element. This attribute will allow users
47
+ * to find the component's value during the submit event. In this event,
48
+ * the component's value will always be a regular string, for both single
49
+ * and multiple selection modes, been in the first one a single option
50
+ * value and in the multiple variant more than one option value,
51
+ * separated by commas.
52
+ */
53
+ name?: string;
54
+ /**
55
+ * Value of the select. If undefined, the component will be uncontrolled
56
+ * and the value will be managed internally by the component.
57
+ */
58
+ value?: string | string[];
59
+ /**
60
+ * An array of objects representing the selectable options.
61
+ */
62
+ options?: Option[] | OptionGroup[];
63
+ /**
64
+ * Helper text to be placed above the select.
65
+ */
66
+ helperText?: string;
67
+ /**
68
+ * Text to be put as placeholder of the select.
69
+ */
70
+ placeholder?: string;
71
+ /**
72
+ * If true, the component will be disabled.
73
+ */
74
+ disabled?: boolean;
75
+ /**
76
+ * If true, the select will be optional, showing '(Optional)'
77
+ * next to the label and adding a default first option with empty value, been
78
+ * the placeholder (if defined) its label. Otherwise, the field will be
79
+ * considered required and an error will be passed as a parameter to the
80
+ * OnBlur and onChange functions if an option wasn't selected.
81
+ */
82
+ optional?: boolean;
83
+ /**
84
+ * If true, enables search functionality.
85
+ */
86
+ searchable?: boolean;
87
+ /**
88
+ * If true, the select component will support multiple selected options.
89
+ * In that case, value will be an array of strings with each selected
90
+ * option value.
91
+ */
92
+ multiple?: boolean;
93
+ /**
94
+ * This function will be called when the user selects an option.
95
+ * An object including the current value and the error (if the value entered is not valid)
96
+ * will be passed to this function. If there is no error, error will be null.
97
+ */
98
+ onChange?: (value: string | string[]) => void;
99
+ /**
100
+ * This function will be called when the select loses the focus. An
101
+ * object including the value (or values) and the error (if the value
102
+ * selected is not valid) will be passed to this function. If there is no error,
103
+ * error will be null.
104
+ */
105
+ onBlur?: (val: { value: string | string[]; error: string }) => void;
106
+ /**
107
+ * If it is defined, the component will change its appearance, showing
108
+ * the error below the select component. If it is not defined, the error
109
+ * messages will be managed internally, but never displayed on its own.
110
+ */
111
+ error?: string;
112
+ /**
113
+ * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
114
+ * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
115
+ */
116
+ margin?: Space | Margin;
117
+ /**
118
+ * Size of the component ('small' | 'medium' | 'large' | 'fillParent').
119
+ */
120
+ size?: "small" | "medium" | "large" | "fillParent";
121
+ /**
122
+ * Value of the tabindex attribute.
123
+ */
124
+ tabIndex?: number;
125
+ /**
126
+ * Reference to the component.
127
+ */
128
+ ref?: React.RefObject<HTMLDivElement>;
129
+ };
130
+
131
+ export default function DxcSelect(props: Props): JSX.Element;
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes