@dxc-technology/halstack-react 12.1.0 → 12.2.0

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 (40) hide show
  1. package/HalstackContext.d.ts +23 -0
  2. package/HalstackContext.js +31 -21
  3. package/breadcrumbs/types.d.ts +24 -0
  4. package/common/coreTokens.d.ts +0 -1
  5. package/common/coreTokens.js +0 -1
  6. package/common/variables.d.ts +29 -0
  7. package/common/variables.js +25 -2
  8. package/container/types.d.ts +113 -11
  9. package/contextual-menu/ContextualMenu.js +33 -5
  10. package/contextual-menu/ContextualMenu.stories.tsx +46 -38
  11. package/contextual-menu/ItemAction.js +47 -9
  12. package/contextual-menu/types.d.ts +4 -0
  13. package/divider/Divider.stories.tsx +2 -1
  14. package/file-input/FileItem.js +1 -1
  15. package/icon/Icon.stories.tsx +1 -1
  16. package/number-input/NumberInput.js +5 -2
  17. package/number-input/NumberInput.stories.tsx +9 -0
  18. package/package.json +4 -3
  19. package/password-input/PasswordInput.js +6 -3
  20. package/password-input/PasswordInput.stories.tsx +9 -0
  21. package/resultset-table/ResultsetTable.js +33 -9
  22. package/resultset-table/ResultsetTable.stories.tsx +1 -1
  23. package/resultset-table/ResultsetTable.test.js +101 -30
  24. package/resultset-table/types.d.ts +3 -2
  25. package/select/Select.js +3 -1
  26. package/select/Select.stories.tsx +10 -1
  27. package/text-input/TextInput.js +3 -1
  28. package/text-input/TextInput.stories.tsx +9 -0
  29. package/tooltip/Tooltip.accessibility.test.d.ts +1 -0
  30. package/tooltip/Tooltip.accessibility.test.js +144 -0
  31. package/tooltip/Tooltip.d.ts +4 -0
  32. package/tooltip/Tooltip.js +50 -0
  33. package/tooltip/Tooltip.stories.tsx +111 -0
  34. package/tooltip/Tooltip.test.d.ts +1 -0
  35. package/tooltip/Tooltip.test.js +112 -0
  36. package/tooltip/types.d.ts +16 -0
  37. package/tooltip/types.js +5 -0
  38. package/typography/Typography.test.js +23 -0
  39. package/useTheme.d.ts +23 -0
  40. package/utils/BaseTypography.js +44 -40
@@ -7,6 +7,8 @@ import ExampleContainer from "../../.storybook/components/ExampleContainer";
7
7
  import DxcBadge from "../badge/Badge";
8
8
  import { disabledRules } from "../../test/accessibility/rules/specific/contextual-menu/disabledRules";
9
9
  import preview from "../../.storybook/preview";
10
+ import { ThemeProvider } from "styled-components";
11
+ import useTheme from "../useTheme";
10
12
 
11
13
  export default {
12
14
  title: "Contextual Menu",
@@ -76,7 +78,7 @@ const itemsWithIcon = [
76
78
  {
77
79
  label: "Item 1",
78
80
  icon: (
79
- <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
81
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
80
82
  <path d="M200-120v-640q0-33 23.5-56.5T280-840h400q33 0 56.5 23.5T760-760v640L480-240 200-120Zm80-122 200-86 200 86v-518H280v518Zm0-518h400-400Z" />
81
83
  </svg>
82
84
  ),
@@ -123,7 +125,7 @@ const itemsWithTruncatedText = [
123
125
  label: "Item with a very long label that should be truncated",
124
126
  badge: <DxcBadge color="green" label="New" />,
125
127
  icon: (
126
- <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24">
128
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="currentColor">
127
129
  <path d="M200-120v-640q0-33 23.5-56.5T280-840h400q33 0 56.5 23.5T760-760v640L480-240 200-120Zm80-122 200-86 200 86v-518H280v518Zm0-518h400-400Z" />
128
130
  </svg>
129
131
  ),
@@ -185,39 +187,45 @@ export const Chromatic = () => (
185
187
  </>
186
188
  );
187
189
 
188
- export const SingleItemStates = () => (
189
- <DxcContainer width="300px">
190
- <ContextualMenuContext.Provider value={{ selectedItemId: -1, setSelectedItemId: () => {} }}>
191
- <Title title="Default" theme="light" level={3} />
192
- <ExampleContainer>
193
- <SingleItem {...items[0]} id={0} depthLevel={0} />
194
- </ExampleContainer>
195
- <Title title="Focus" theme="light" level={3} />
196
- <ExampleContainer pseudoState="pseudo-focus">
197
- <SingleItem {...items[0]} id={0} depthLevel={0} />
198
- </ExampleContainer>
199
- <Title title="Hover" theme="light" level={3} />
200
- <ExampleContainer pseudoState="pseudo-hover">
201
- <SingleItem {...items[0]} id={0} depthLevel={0} />
202
- </ExampleContainer>
203
- <Title title="Active" theme="light" level={3} />
204
- <ExampleContainer pseudoState="pseudo-active">
205
- <SingleItem {...items[0]} id={0} depthLevel={0} />
206
- </ExampleContainer>
207
- </ContextualMenuContext.Provider>
208
- <ContextualMenuContext.Provider value={{ selectedItemId: 0, setSelectedItemId: () => {} }}>
209
- <Title title="Selected" theme="light" level={3} />
210
- <ExampleContainer>
211
- <SingleItem {...items[0]} id={0} depthLevel={0} />
212
- </ExampleContainer>
213
- <Title title="Selected hover" theme="light" level={3} />
214
- <ExampleContainer pseudoState="pseudo-hover">
215
- <SingleItem {...items[0]} id={0} depthLevel={0} />
216
- </ExampleContainer>
217
- <Title title="Selected active" theme="light" level={3} />
218
- <ExampleContainer pseudoState="pseudo-active">
219
- <SingleItem {...items[0]} id={0} depthLevel={0} />
220
- </ExampleContainer>
221
- </ContextualMenuContext.Provider>
222
- </DxcContainer>
223
- );
190
+ export const SingleItemStates = () => {
191
+ const colorsTheme = useTheme();
192
+
193
+ return (
194
+ <ThemeProvider theme={colorsTheme.contextualMenu}>
195
+ <DxcContainer width="300px">
196
+ <ContextualMenuContext.Provider value={{ selectedItemId: -1, setSelectedItemId: () => {} }}>
197
+ <Title title="Default" theme="light" level={3} />
198
+ <ExampleContainer>
199
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
200
+ </ExampleContainer>
201
+ <Title title="Focus" theme="light" level={3} />
202
+ <ExampleContainer pseudoState="pseudo-focus">
203
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
204
+ </ExampleContainer>
205
+ <Title title="Hover" theme="light" level={3} />
206
+ <ExampleContainer pseudoState="pseudo-hover">
207
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
208
+ </ExampleContainer>
209
+ <Title title="Active" theme="light" level={3} />
210
+ <ExampleContainer pseudoState="pseudo-active">
211
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
212
+ </ExampleContainer>
213
+ </ContextualMenuContext.Provider>
214
+ <ContextualMenuContext.Provider value={{ selectedItemId: 0, setSelectedItemId: () => {} }}>
215
+ <Title title="Selected" theme="light" level={3} />
216
+ <ExampleContainer>
217
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
218
+ </ExampleContainer>
219
+ <Title title="Selected hover" theme="light" level={3} />
220
+ <ExampleContainer pseudoState="pseudo-hover">
221
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
222
+ </ExampleContainer>
223
+ <Title title="Selected active" theme="light" level={3} />
224
+ <ExampleContainer pseudoState="pseudo-active">
225
+ <SingleItem {...items[0]} id={0} depthLevel={0} />
226
+ </ExampleContainer>
227
+ </ContextualMenuContext.Provider>
228
+ </DxcContainer>
229
+ </ThemeProvider>
230
+ );
231
+ };
@@ -26,9 +26,10 @@ var ItemAction = function ItemAction(_ref) {
26
26
  });
27
27
  return /*#__PURE__*/_react["default"].createElement(Action, (0, _extends2["default"])({
28
28
  depthLevel: depthLevel
29
- }, props), /*#__PURE__*/_react["default"].createElement(Label, null, collapseIcon, icon && depthLevel === 0 && /*#__PURE__*/_react["default"].createElement(Icon, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
29
+ }, props), /*#__PURE__*/_react["default"].createElement(Label, null, collapseIcon && /*#__PURE__*/_react["default"].createElement(Icon, null, collapseIcon), icon && depthLevel === 0 && /*#__PURE__*/_react["default"].createElement(Icon, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
30
30
  icon: icon
31
31
  }) : icon), /*#__PURE__*/_react["default"].createElement(Text, {
32
+ selected: props.selected,
32
33
  onMouseEnter: function onMouseEnter(event) {
33
34
  var text = event.currentTarget;
34
35
  if (text.title === "" && text.scrollWidth > text.clientWidth) text.title = label;
@@ -37,14 +38,51 @@ var ItemAction = function ItemAction(_ref) {
37
38
  };
38
39
  var Action = _styledComponents["default"].button(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n border: none;\n border-radius: 4px;\n width: 100%;\n padding: ", ";\n box-shadow: inset 0 0 0 2px transparent;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ", ";\n ", ";\n cursor: pointer;\n overflow: hidden;\n\n &:hover {\n ", ";\n }\n &:active {\n ", ";\n }\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -1px;\n }\n"])), function (props) {
39
40
  return "".concat(_coreTokens["default"].spacing_4, " ").concat(_coreTokens["default"].spacing_8, " ").concat(_coreTokens["default"].spacing_4, " ", "\n calc(".concat(_coreTokens["default"].spacing_8, " + (").concat(_coreTokens["default"].spacing_24, " * ").concat(props.depthLevel, "))\n "), ";");
40
- }, _coreTokens["default"].spacing_16, function (props) {
41
- return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_100, "; font-weight: ").concat(_coreTokens["default"].type_semibold, ";") : "background-color: ".concat(_coreTokens["default"].color_transparent);
42
- }, function (props) {
43
- return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_200, ";") : "background-color: ".concat(_coreTokens["default"].color_grey_100, ";");
44
- }, function (props) {
45
- return props.selected ? "background-color: ".concat(_coreTokens["default"].color_purple_200, ";") : "background-color: ".concat(_coreTokens["default"].color_grey_100, ";");
41
+ }, _coreTokens["default"].spacing_16, function (_ref2) {
42
+ var selected = _ref2.selected,
43
+ theme = _ref2.theme;
44
+ return selected ? "background-color: ".concat(theme.selectedMenuItemBackgroundColor, ";") : "background-color: ".concat(_coreTokens["default"].color_transparent);
45
+ }, function (_ref3) {
46
+ var selected = _ref3.selected,
47
+ theme = _ref3.theme;
48
+ return selected ? "background-color: ".concat(theme.hoverSelectedMenuItemBackgroundColor, ";") : "background-color: ".concat(theme.hoverMenuItemBackgroundColor, ";");
49
+ }, function (_ref4) {
50
+ var selected = _ref4.selected,
51
+ theme = _ref4.theme;
52
+ return selected ? "background-color: ".concat(theme.activeSelectedMenuItemBackgroundColor, ";") : "background-color: ".concat(theme.activeMenuItemBackgroundColor, ";");
46
53
  }, _coreTokens["default"].color_blue_600);
47
- var Icon = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-size: 16px;\n\n svg {\n height: 16px;\n width: 16px;\n }\n"])));
54
+ var Icon = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n font-size: ", ";\n color: ", ";\n\n svg {\n height: ", ";\n width: ", ";\n }\n"])), function (_ref5) {
55
+ var theme = _ref5.theme;
56
+ return theme.iconSize;
57
+ }, function (_ref6) {
58
+ var theme = _ref6.theme;
59
+ return theme.iconColor;
60
+ }, function (_ref7) {
61
+ var theme = _ref7.theme;
62
+ return theme.iconSize;
63
+ }, function (_ref8) {
64
+ var theme = _ref8.theme;
65
+ return theme.iconSize;
66
+ });
48
67
  var Label = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n gap: ", ";\n overflow: hidden;\n"])), _coreTokens["default"].spacing_8);
49
- var Text = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n line-height: 24px;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n"])), _coreTokens["default"].color_grey_900, _coreTokens["default"].type_sans, _coreTokens["default"].type_scale_02);
68
+ var Text = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n"])), function (_ref9) {
69
+ var theme = _ref9.theme;
70
+ return theme.menuItemFontColor;
71
+ }, function (_ref10) {
72
+ var theme = _ref10.theme;
73
+ return theme.fontFamily;
74
+ }, function (_ref11) {
75
+ var theme = _ref11.theme;
76
+ return theme.menuItemFontSize;
77
+ }, function (_ref12) {
78
+ var theme = _ref12.theme;
79
+ return theme.menuItemFontStyle;
80
+ }, function (_ref13) {
81
+ var selected = _ref13.selected,
82
+ theme = _ref13.theme;
83
+ return selected ? theme.selectedMenuItemFontWeight : theme.menuItemFontWeight;
84
+ }, function (_ref14) {
85
+ var theme = _ref14.theme;
86
+ return theme.menuItemLineHeight;
87
+ });
50
88
  var _default = exports["default"] = ItemAction;
@@ -17,6 +17,10 @@ type Section = {
17
17
  title?: string;
18
18
  };
19
19
  type Props = {
20
+ /**
21
+ * Array of items to be displayed in the Contextual menu.
22
+ * Each item can be a single/simple item, a group item or a section.
23
+ */
20
24
  items: (Item | GroupItem)[] | Section[];
21
25
  };
22
26
  /**
@@ -1,7 +1,8 @@
1
1
  import React from "react";
2
2
  import Title from "../../.storybook/components/Title";
3
3
  import DxcDivider from "./Divider";
4
- import { DxcFlex, DxcParagraph } from "../main";
4
+ import DxcFlex from "../flex/Flex";
5
+ import DxcParagraph from "../paragraph/Paragraph";
5
6
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
7
 
7
8
  export default {
@@ -100,7 +100,7 @@ var FileName = _styledComponents["default"].span(_templateObject5 || (_templateO
100
100
  return props.theme.fileItemLineHeight;
101
101
  });
102
102
  var ErrorIcon = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n padding: 3px;\n height: 18px;\n width: 18px;\n font-size: 18px;\n color: #d0011b;\n"])));
103
- var DeleteFileAction = _styledComponents["default"].button(_templateObject7 || (_templateObject7 = (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 border-radius: 2px;\n background-color: transparent;\n box-shadow: 0 0 0 2px transparent;\n padding: 3px;\n cursor: pointer;\n color: ", ";\n font-size: 18px;\n &:hover {\n background-color: ", ";\n }\n &:focus,\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (props) {
103
+ var DeleteFileAction = _styledComponents["default"].button(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-wrap: wrap;\n align-content: center;\n justify-content: center;\n height: 24px;\n width: 24px;\n font-size: 1rem;\n font-family: ", ";\n border: 1px solid transparent;\n border-radius: 2px;\n background-color: transparent;\n box-shadow: 0 0 0 2px transparent;\n padding: 3px;\n cursor: pointer;\n color: ", ";\n font-size: 18px;\n &:hover {\n background-color: ", ";\n }\n &:focus,\n &:focus-visible {\n outline: none;\n box-shadow: 0 0 0 2px ", ";\n }\n &:active {\n background-color: ", ";\n }\n"])), function (props) {
104
104
  return props.theme.fontFamily;
105
105
  }, function (props) {
106
106
  return props.theme.deleteFileItemColor;
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import DxcIcon from "./Icon";
3
3
  import Title from "../../.storybook/components/Title";
4
4
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
- import { DxcTypography } from "../main";
5
+ import DxcTypography from "../typography/Typography";
6
6
 
7
7
  export default {
8
8
  title: "Icon",
@@ -59,7 +59,8 @@ var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, r
59
59
  stepNumber: step
60
60
  }
61
61
  }, /*#__PURE__*/_react["default"].createElement(NumberInputContainer, {
62
- ref: numberInputRef
62
+ ref: numberInputRef,
63
+ size: size
63
64
  }, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
64
65
  label: label,
65
66
  name: name,
@@ -82,5 +83,7 @@ var DxcNumberInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref, r
82
83
  ref: ref
83
84
  })));
84
85
  });
85
- var NumberInputContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n // Chrome, Safari, Edge, Opera\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n // Firefox\n input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n"])));
86
+ var NumberInputContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n ", "\n // Chrome, Safari, Edge, Opera\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n // Firefox\n input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n"])), function (props) {
87
+ return props.size == "fillParent" && "width: 100%;";
88
+ });
86
89
  var _default = exports["default"] = DxcNumberInput;
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import Title from "../../.storybook/components/Title";
3
3
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
4
4
  import DxcNumberInput from "./NumberInput";
5
+ import DxcFlex from "../flex/Flex";
5
6
 
6
7
  export default {
7
8
  title: "Number Input",
@@ -113,5 +114,13 @@ export const Chromatic = () => (
113
114
  <Title title="FillParent size" theme="light" level={4} />
114
115
  <DxcNumberInput label="FillParent" size="fillParent" />
115
116
  </ExampleContainer>
117
+ <ExampleContainer>
118
+ <Title title="Different sizes inside a flex" theme="light" level={4} />
119
+ <DxcFlex justifyContent="space-between" gap="1rem">
120
+ <DxcNumberInput label="fillParent" size="fillParent" />
121
+ <DxcNumberInput label="medium" size="medium" />
122
+ <DxcNumberInput label="large" size="large" />
123
+ </DxcFlex>
124
+ </ExampleContainer>
116
125
  </>
117
126
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxc-technology/halstack-react",
3
- "version": "12.1.0",
3
+ "version": "12.2.0",
4
4
  "description": "DXC Halstack React components library",
5
5
  "repository": "dxc-technology/halstack-react",
6
6
  "homepage": "https://developer.dxc.com/halstack",
@@ -19,6 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@radix-ui/react-popover": "^1.0.7",
22
+ "@radix-ui/react-tooltip": "^1.0.7",
22
23
  "color": "^3.1.3",
23
24
  "dayjs": "^1.11.1",
24
25
  "slugify": "^1.6.5"
@@ -52,7 +53,7 @@
52
53
  "@storybook/builder-vite": "^8.0.8",
53
54
  "@storybook/react": "^8.0.8",
54
55
  "@storybook/react-vite": "^8.0.8",
55
- "@storybook/test": "^8.0.8",
56
+ "@storybook/test": "^8.0.9",
56
57
  "@storybook/test-runner": "^0.17.0",
57
58
  "@testing-library/react": "^13.0.0",
58
59
  "@testing-library/user-event": "^13.0.0",
@@ -64,7 +65,7 @@
64
65
  "axe-playwright": "^2.0.1",
65
66
  "babel-jest": "^24.8.0",
66
67
  "babel-loader": "^8.0.6",
67
- "chromatic": "^8.0.0",
68
+ "chromatic": "^11.3.0",
68
69
  "css-loader": "^7.1.1",
69
70
  "eslint": "^8.53.0",
70
71
  "eslint-config-airbnb": "^19.0.4",
@@ -64,7 +64,8 @@ var DxcPasswordInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref,
64
64
  }, [isPasswordVisible, passwordInput]);
65
65
  return /*#__PURE__*/_react["default"].createElement(PasswordInput, {
66
66
  ref: ref,
67
- role: "group"
67
+ role: "group",
68
+ size: size
68
69
  }, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
69
70
  label: label,
70
71
  name: name,
@@ -76,7 +77,7 @@ var DxcPasswordInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref,
76
77
  return !isPasswordVisible;
77
78
  });
78
79
  },
79
- icon: isPasswordVisible ? 'Visibility_Off' : 'Visibility',
80
+ icon: isPasswordVisible ? "Visibility_Off" : "Visibility",
80
81
  title: isPasswordVisible ? passwordInput.inputHidePasswordTitle : passwordInput.inputShowPasswordTitle
81
82
  },
82
83
  error: error,
@@ -93,5 +94,7 @@ var DxcPasswordInput = /*#__PURE__*/_react["default"].forwardRef(function (_ref,
93
94
  tabIndex: tabIndex
94
95
  }));
95
96
  });
96
- var PasswordInput = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n & ::-ms-reveal {\n display: none;\n }\n"])));
97
+ var PasswordInput = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n ", "\n & ::-ms-reveal {\n display: none;\n }\n"])), function (props) {
98
+ return props.size == "fillParent" && "width: 100%;";
99
+ });
97
100
  var _default = exports["default"] = DxcPasswordInput;
@@ -3,6 +3,7 @@ import { userEvent, within } from "@storybook/test";
3
3
  import DxcPasswordInput from "./PasswordInput";
4
4
  import Title from "../../.storybook/components/Title";
5
5
  import ExampleContainer from "../../.storybook/components/ExampleContainer";
6
+ import DxcFlex from "../flex/Flex";
6
7
 
7
8
  export default {
8
9
  title: "Password Input",
@@ -81,6 +82,14 @@ export const Chromatic = () => (
81
82
  <Title title="FillParent size" theme="light" level={4} />
82
83
  <DxcPasswordInput label="FillParent" size="fillParent" />
83
84
  </ExampleContainer>
85
+ <ExampleContainer>
86
+ <Title title="Without label" theme="light" level={4} />
87
+ <DxcFlex justifyContent="space-between" gap="1rem">
88
+ <DxcPasswordInput label="fillParent" size="fillParent" />
89
+ <DxcPasswordInput label="medium" size="medium" />
90
+ <DxcPasswordInput label="large" size="large" />
91
+ </DxcFlex>
92
+ </ExampleContainer>
84
93
  </>
85
94
  );
86
95
 
@@ -26,8 +26,8 @@ var normalizeSortValue = function normalizeSortValue(sortValue) {
26
26
  };
27
27
  var sortArray = function sortArray(index, order, resultset) {
28
28
  return resultset.slice().sort(function (element1, element2) {
29
- var sortValueA = normalizeSortValue(element1[index].sortValue || element1[index].displayValue);
30
- var sortValueB = normalizeSortValue(element2[index].sortValue || element2[index].displayValue);
29
+ var sortValueA = normalizeSortValue(element1.cells[index].sortValue || element1[index].displayValue);
30
+ var sortValueB = normalizeSortValue(element2.cells[index].sortValue || element2[index].displayValue);
31
31
  var comparison = 0;
32
32
  if ((0, _typeof2["default"])(sortValueA) === "object") {
33
33
  comparison = -1;
@@ -47,6 +47,17 @@ var getMinItemsPerPageIndex = function getMinItemsPerPageIndex(currentPageIntern
47
47
  var getMaxItemsPerPageIndex = function getMaxItemsPerPageIndex(minItemsPerPageIndex, itemsPerPage, resultset, page) {
48
48
  return minItemsPerPageIndex + itemsPerPage > resultset.length ? resultset.length : itemsPerPage * page - 1;
49
49
  };
50
+ var assignIdsToRows = function assignIdsToRows(resultset) {
51
+ if (resultset.length > 0) {
52
+ return resultset.map(function (row, index) {
53
+ return {
54
+ cells: row,
55
+ id: "row_".concat(index)
56
+ };
57
+ });
58
+ }
59
+ return [];
60
+ };
50
61
  var DxcResultsetTable = function DxcResultsetTable(_ref) {
51
62
  var columns = _ref.columns,
52
63
  rows = _ref.rows,
@@ -76,6 +87,10 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
76
87
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
77
88
  sortOrder = _useState6[0],
78
89
  changeSortOrder = _useState6[1];
90
+ var prevRowCountRef = (0, _react.useRef)(rows.length);
91
+ var rowsWithIds = (0, _react.useMemo)(function () {
92
+ return assignIdsToRows(rows);
93
+ }, [rows]);
79
94
  var minItemsPerPageIndex = (0, _react.useMemo)(function () {
80
95
  return getMinItemsPerPageIndex(page, itemsPerPage, page);
81
96
  }, [itemsPerPage, page]);
@@ -83,8 +98,8 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
83
98
  return getMaxItemsPerPageIndex(minItemsPerPageIndex, itemsPerPage, rows, page);
84
99
  }, [itemsPerPage, minItemsPerPageIndex, page, rows]);
85
100
  var sortedResultset = (0, _react.useMemo)(function () {
86
- return sortColumnIndex !== -1 ? sortArray(sortColumnIndex, sortOrder, rows) : rows;
87
- }, [sortColumnIndex, sortOrder, rows]);
101
+ return sortColumnIndex !== -1 ? sortArray(sortColumnIndex, sortOrder, rowsWithIds) : rowsWithIds;
102
+ }, [sortColumnIndex, sortOrder, rowsWithIds]);
88
103
  var filteredResultset = (0, _react.useMemo)(function () {
89
104
  return sortedResultset && sortedResultset.slice(minItemsPerPageIndex, maxItemsPerPageIndex + 1);
90
105
  }, [sortedResultset, minItemsPerPageIndex, maxItemsPerPageIndex]);
@@ -98,9 +113,18 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
98
113
  };
99
114
  (0, _react.useEffect)(function () {
100
115
  if (!hidePaginator) {
101
- rows.length > 0 ? changePage(1) : changePage(0);
116
+ if (rows.length === 0) {
117
+ changePage(0);
118
+ } else if (rows.length < prevRowCountRef.current) {
119
+ var lastPage = Math.ceil(rows.length / itemsPerPage);
120
+ var prevLastPage = Math.ceil(prevRowCountRef.current / itemsPerPage);
121
+ if (lastPage < prevLastPage) {
122
+ changePage(Math.min(lastPage, page));
123
+ }
124
+ }
125
+ prevRowCountRef.current = rows.length;
102
126
  }
103
- }, [rows]);
127
+ }, [rows.length]);
104
128
  return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
105
129
  theme: colorsTheme.table
106
130
  }, /*#__PURE__*/_react["default"].createElement(DxcResultsetTableContainer, {
@@ -122,10 +146,10 @@ var DxcResultsetTable = function DxcResultsetTable(_ref) {
122
146
  mode: mode,
123
147
  "aria-label": column.isSortable ? "Sort column" : undefined
124
148
  }, /*#__PURE__*/_react["default"].createElement("span", null, column.displayValue), column.isSortable && /*#__PURE__*/_react["default"].createElement(SortIcon, null, sortColumnIndex === index ? sortOrder === "ascending" ? _Icons["default"].arrowUp : _Icons["default"].arrowDown : _Icons["default"].bothArrows)));
125
- }))), /*#__PURE__*/_react["default"].createElement("tbody", null, filteredResultset.map(function (cells, rowIndex) {
149
+ }))), /*#__PURE__*/_react["default"].createElement("tbody", null, filteredResultset.map(function (row) {
126
150
  return /*#__PURE__*/_react["default"].createElement("tr", {
127
- key: "resultSetTableCell_".concat(page, "_").concat(rowIndex)
128
- }, cells.map(function (cellContent, cellIndex) {
151
+ key: "resultSetTableCell_".concat(row.id)
152
+ }, row.cells.map(function (cellContent, cellIndex) {
129
153
  return /*#__PURE__*/_react["default"].createElement("td", {
130
154
  key: "resultSetTableCellContent_".concat(cellIndex)
131
155
  }, cellContent.displayValue);
@@ -409,5 +409,5 @@ export const DropdownAction = ResultsetActionsCellDropdown.bind({});
409
409
  DropdownAction.play = async ({ canvasElement }) => {
410
410
  const canvas = within(canvasElement);
411
411
  const dropdown = canvas.getAllByRole("button")[5];
412
- await userEvent.click(dropdown);
412
+ userEvent.click(dropdown);
413
413
  };