@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.
- package/HalstackContext.d.ts +23 -0
- package/HalstackContext.js +31 -21
- package/breadcrumbs/types.d.ts +24 -0
- package/common/coreTokens.d.ts +0 -1
- package/common/coreTokens.js +0 -1
- package/common/variables.d.ts +29 -0
- package/common/variables.js +25 -2
- package/container/types.d.ts +113 -11
- package/contextual-menu/ContextualMenu.js +33 -5
- package/contextual-menu/ContextualMenu.stories.tsx +46 -38
- package/contextual-menu/ItemAction.js +47 -9
- package/contextual-menu/types.d.ts +4 -0
- package/divider/Divider.stories.tsx +2 -1
- package/file-input/FileItem.js +1 -1
- package/icon/Icon.stories.tsx +1 -1
- package/number-input/NumberInput.js +5 -2
- package/number-input/NumberInput.stories.tsx +9 -0
- package/package.json +4 -3
- package/password-input/PasswordInput.js +6 -3
- package/password-input/PasswordInput.stories.tsx +9 -0
- package/resultset-table/ResultsetTable.js +33 -9
- package/resultset-table/ResultsetTable.stories.tsx +1 -1
- package/resultset-table/ResultsetTable.test.js +101 -30
- package/resultset-table/types.d.ts +3 -2
- package/select/Select.js +3 -1
- package/select/Select.stories.tsx +10 -1
- package/text-input/TextInput.js +3 -1
- package/text-input/TextInput.stories.tsx +9 -0
- package/tooltip/Tooltip.accessibility.test.d.ts +1 -0
- package/tooltip/Tooltip.accessibility.test.js +144 -0
- package/tooltip/Tooltip.d.ts +4 -0
- package/tooltip/Tooltip.js +50 -0
- package/tooltip/Tooltip.stories.tsx +111 -0
- package/tooltip/Tooltip.test.d.ts +1 -0
- package/tooltip/Tooltip.test.js +112 -0
- package/tooltip/types.d.ts +16 -0
- package/tooltip/types.js +5 -0
- package/typography/Typography.test.js +23 -0
- package/useTheme.d.ts +23 -0
- 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
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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 (
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return
|
|
44
|
-
}, function (
|
|
45
|
-
|
|
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:
|
|
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:
|
|
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
|
|
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 {
|
package/file-input/FileItem.js
CHANGED
|
@@ -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;
|
package/icon/Icon.stories.tsx
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
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": "^
|
|
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 ?
|
|
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,
|
|
87
|
-
}, [sortColumnIndex, sortOrder,
|
|
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
|
|
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 (
|
|
149
|
+
}))), /*#__PURE__*/_react["default"].createElement("tbody", null, filteredResultset.map(function (row) {
|
|
126
150
|
return /*#__PURE__*/_react["default"].createElement("tr", {
|
|
127
|
-
key: "resultSetTableCell_".concat(
|
|
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
|
-
|
|
412
|
+
userEvent.click(dropdown);
|
|
413
413
|
};
|