@dxc-technology/halstack-react 6.0.0 → 6.1.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/accordion/types.d.ts +1 -1
- package/accordion-group/types.d.ts +1 -1
- package/bulleted-list/types.d.ts +1 -1
- package/button/Button.js +43 -61
- package/button/Button.stories.tsx +9 -0
- package/button/types.d.ts +7 -7
- package/chip/types.d.ts +1 -1
- package/common/variables.js +15 -6
- package/date-input/DateInput.js +3 -3
- package/dialog/Dialog.js +52 -28
- package/dialog/Dialog.stories.tsx +1 -2
- package/dialog/Dialog.test.js +34 -4
- package/dialog/types.d.ts +2 -2
- package/dropdown/Dropdown.d.ts +1 -1
- package/dropdown/Dropdown.js +242 -246
- package/dropdown/Dropdown.stories.tsx +126 -63
- package/dropdown/Dropdown.test.js +510 -108
- package/dropdown/DropdownMenu.d.ts +4 -0
- package/dropdown/DropdownMenu.js +80 -0
- package/dropdown/DropdownMenuItem.d.ts +4 -0
- package/dropdown/DropdownMenuItem.js +92 -0
- package/dropdown/types.d.ts +25 -5
- package/flex/Flex.js +1 -1
- package/flex/types.d.ts +1 -1
- package/footer/types.d.ts +1 -1
- package/header/Header.js +74 -72
- package/header/Icons.js +2 -2
- package/header/types.d.ts +2 -2
- package/layout/ApplicationLayout.js +3 -3
- package/link/Link.js +1 -1
- package/link/Link.stories.tsx +12 -5
- package/link/types.d.ts +1 -1
- package/package.json +7 -7
- package/progress-bar/ProgressBar.d.ts +2 -2
- package/progress-bar/ProgressBar.js +56 -50
- package/progress-bar/ProgressBar.stories.jsx +3 -1
- package/progress-bar/ProgressBar.test.js +67 -22
- package/progress-bar/types.d.ts +3 -4
- package/radio-group/RadioGroup.js +11 -13
- package/select/Listbox.d.ts +1 -1
- package/select/Listbox.js +25 -1
- package/select/Select.js +14 -31
- package/select/Select.stories.tsx +6 -5
- package/select/Select.test.js +63 -50
- package/select/types.d.ts +2 -4
- package/sidenav/Sidenav.js +15 -3
- package/sidenav/types.d.ts +1 -1
- package/slider/Slider.js +3 -3
- package/slider/Slider.test.js +37 -0
- package/switch/Switch.d.ts +1 -1
- package/switch/Switch.js +110 -54
- package/switch/Switch.stories.tsx +8 -30
- package/switch/Switch.test.js +122 -8
- package/switch/types.d.ts +3 -4
- package/tabs/types.d.ts +1 -1
- package/tabs-nav/NavTabs.js +5 -5
- package/tabs-nav/Tab.js +3 -5
- package/tabs-nav/types.d.ts +1 -1
- package/tag/types.d.ts +1 -1
- package/text-input/TextInput.js +12 -21
- package/text-input/TextInput.stories.tsx +1 -2
- package/text-input/types.d.ts +1 -1
- package/toggle-group/types.d.ts +1 -1
- package/wizard/types.d.ts +1 -1
package/select/Select.test.js
CHANGED
|
@@ -306,7 +306,7 @@ var grouped_icon_options = [{
|
|
|
306
306
|
}]
|
|
307
307
|
}];
|
|
308
308
|
describe("Select component tests", function () {
|
|
309
|
-
test("
|
|
309
|
+
test("When clicking the label, the focus goes to the select", function () {
|
|
310
310
|
var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
311
311
|
label: "test-select-label",
|
|
312
312
|
helperText: "test-select-helper-text",
|
|
@@ -317,40 +317,18 @@ describe("Select component tests", function () {
|
|
|
317
317
|
|
|
318
318
|
var select = getByRole("combobox");
|
|
319
319
|
var label = getByText("test-select-label");
|
|
320
|
-
expect(label).toBeTruthy();
|
|
321
320
|
|
|
322
321
|
_userEvent["default"].click(label);
|
|
323
322
|
|
|
324
323
|
expect(document.activeElement).toEqual(select);
|
|
325
324
|
});
|
|
326
|
-
test("Renders with correct
|
|
325
|
+
test("Renders with correct aria attributes when is in error state", function () {
|
|
327
326
|
var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
328
|
-
label: "test-select-label",
|
|
329
|
-
helperText: "test-select-helper-text",
|
|
330
|
-
placeholder: "Example text"
|
|
331
|
-
})),
|
|
332
|
-
getByText = _render2.getByText;
|
|
333
|
-
|
|
334
|
-
expect(getByText("test-select-helper-text")).toBeTruthy();
|
|
335
|
-
expect(getByText("Example text")).toBeTruthy();
|
|
336
|
-
});
|
|
337
|
-
test("Renders with correct optional label", function () {
|
|
338
|
-
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
339
|
-
label: "test-select-label",
|
|
340
|
-
optional: true
|
|
341
|
-
})),
|
|
342
|
-
getByText = _render3.getByText;
|
|
343
|
-
|
|
344
|
-
expect(getByText("test-select-label")).toBeTruthy();
|
|
345
|
-
expect(getByText("(Optional)")).toBeTruthy();
|
|
346
|
-
});
|
|
347
|
-
test("Renders with error message and correct aria attributes", function () {
|
|
348
|
-
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
349
327
|
label: "Error label",
|
|
350
328
|
error: "Error message."
|
|
351
329
|
})),
|
|
352
|
-
getByText =
|
|
353
|
-
getByRole =
|
|
330
|
+
getByText = _render2.getByText,
|
|
331
|
+
getByRole = _render2.getByRole;
|
|
354
332
|
|
|
355
333
|
var select = getByRole("combobox");
|
|
356
334
|
var errorMessage = getByText("Error message.");
|
|
@@ -360,13 +338,13 @@ describe("Select component tests", function () {
|
|
|
360
338
|
expect(errorMessage.getAttribute("aria-live")).toBe("assertive");
|
|
361
339
|
});
|
|
362
340
|
test("Renders with correct aria attributes", function () {
|
|
363
|
-
var
|
|
341
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
364
342
|
label: "test-select-label",
|
|
365
343
|
placeholder: "Example",
|
|
366
344
|
options: single_options
|
|
367
345
|
})),
|
|
368
|
-
getByText =
|
|
369
|
-
getByRole =
|
|
346
|
+
getByText = _render3.getByText,
|
|
347
|
+
getByRole = _render3.getByRole;
|
|
370
348
|
|
|
371
349
|
var select = getByRole("combobox");
|
|
372
350
|
var label = getByText("test-select-label");
|
|
@@ -385,17 +363,17 @@ describe("Select component tests", function () {
|
|
|
385
363
|
expect(list.getAttribute("aria-multiselectable")).toBe("false");
|
|
386
364
|
});
|
|
387
365
|
test("Single selection: Renders with correct default value", function () {
|
|
388
|
-
var
|
|
366
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
389
367
|
label: "test-select-label",
|
|
390
368
|
name: "test",
|
|
391
369
|
defaultValue: "4",
|
|
392
370
|
options: single_options
|
|
393
371
|
})),
|
|
394
|
-
getByText =
|
|
395
|
-
getByRole =
|
|
396
|
-
getAllByRole =
|
|
397
|
-
queryByRole =
|
|
398
|
-
container =
|
|
372
|
+
getByText = _render4.getByText,
|
|
373
|
+
getByRole = _render4.getByRole,
|
|
374
|
+
getAllByRole = _render4.getAllByRole,
|
|
375
|
+
queryByRole = _render4.queryByRole,
|
|
376
|
+
container = _render4.container;
|
|
399
377
|
|
|
400
378
|
var select = getByRole("combobox");
|
|
401
379
|
var submitInput = container.querySelector("input[name=\"test\"]");
|
|
@@ -413,18 +391,18 @@ describe("Select component tests", function () {
|
|
|
413
391
|
expect(submitInput.value).toBe("8");
|
|
414
392
|
});
|
|
415
393
|
test("Multiple selection: Renders with correct default value", function () {
|
|
416
|
-
var
|
|
394
|
+
var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
417
395
|
label: "test-select-label",
|
|
418
396
|
name: "test",
|
|
419
397
|
defaultValue: ["4", "2", "6"],
|
|
420
398
|
options: single_options,
|
|
421
399
|
multiple: true
|
|
422
400
|
})),
|
|
423
|
-
getByText =
|
|
424
|
-
getByRole =
|
|
425
|
-
getAllByRole =
|
|
426
|
-
queryByRole =
|
|
427
|
-
container =
|
|
401
|
+
getByText = _render5.getByText,
|
|
402
|
+
getByRole = _render5.getByRole,
|
|
403
|
+
getAllByRole = _render5.getAllByRole,
|
|
404
|
+
queryByRole = _render5.queryByRole,
|
|
405
|
+
container = _render5.container;
|
|
428
406
|
|
|
429
407
|
var select = getByRole("combobox");
|
|
430
408
|
var submitInput = container.querySelector("input[name=\"test\"]");
|
|
@@ -443,18 +421,15 @@ describe("Select component tests", function () {
|
|
|
443
421
|
expect(getByText("Option 02, Option 03, Option 04, Option 06")).toBeTruthy();
|
|
444
422
|
expect(submitInput.value).toBe("4,2,6,3");
|
|
445
423
|
});
|
|
446
|
-
test("Disabled select -
|
|
447
|
-
var
|
|
424
|
+
test("Disabled select - Cannot gain focus or open the listbox via click", function () {
|
|
425
|
+
var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
448
426
|
label: "test-select-label",
|
|
449
427
|
value: ["1", "2"],
|
|
450
428
|
options: single_options,
|
|
451
|
-
disabled: true
|
|
452
|
-
searchable: true,
|
|
453
|
-
multiple: true
|
|
429
|
+
disabled: true
|
|
454
430
|
})),
|
|
455
|
-
getByRole =
|
|
456
|
-
|
|
457
|
-
queryByRole = _render8.queryByRole;
|
|
431
|
+
getByRole = _render6.getByRole,
|
|
432
|
+
queryByRole = _render6.queryByRole;
|
|
458
433
|
|
|
459
434
|
var select = getByRole("combobox");
|
|
460
435
|
expect(select.getAttribute("aria-disabled")).toBe("true");
|
|
@@ -462,12 +437,49 @@ describe("Select component tests", function () {
|
|
|
462
437
|
_userEvent["default"].click(select);
|
|
463
438
|
|
|
464
439
|
expect(queryByRole("listbox")).toBeFalsy();
|
|
440
|
+
expect(document.activeElement === select).toBeFalsy();
|
|
441
|
+
});
|
|
442
|
+
test("Disabled select - Clear all options action must be shown but not clickable", function () {
|
|
443
|
+
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
444
|
+
label: "test-select-label",
|
|
445
|
+
value: ["1", "2"],
|
|
446
|
+
options: single_options,
|
|
447
|
+
disabled: true,
|
|
448
|
+
searchable: true,
|
|
449
|
+
multiple: true
|
|
450
|
+
})),
|
|
451
|
+
getByRole = _render7.getByRole,
|
|
452
|
+
getByText = _render7.getByText;
|
|
465
453
|
|
|
466
454
|
_userEvent["default"].click(getByRole("button"));
|
|
467
455
|
|
|
468
456
|
expect(getByText("Option 01, Option 02")).toBeTruthy();
|
|
469
457
|
});
|
|
470
|
-
test("
|
|
458
|
+
test("Disabled select - Does not call onBlur event", function () {
|
|
459
|
+
var onBlur = jest.fn();
|
|
460
|
+
|
|
461
|
+
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
462
|
+
label: "test-select-label",
|
|
463
|
+
options: single_options,
|
|
464
|
+
disabled: true,
|
|
465
|
+
onBlur: onBlur
|
|
466
|
+
})),
|
|
467
|
+
getByRole = _render8.getByRole;
|
|
468
|
+
|
|
469
|
+
var select = getByRole("combobox");
|
|
470
|
+
|
|
471
|
+
_userEvent["default"].click(select);
|
|
472
|
+
|
|
473
|
+
_react2.fireEvent.keyDown(getByRole("combobox"), {
|
|
474
|
+
key: "Tab",
|
|
475
|
+
code: "Tab",
|
|
476
|
+
keyCode: 9,
|
|
477
|
+
charCode: 9
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
expect(onBlur).not.toHaveBeenCalled();
|
|
481
|
+
});
|
|
482
|
+
test("Disabled select - When the component gains the focus, the listbox does not open", function () {
|
|
471
483
|
var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Select["default"], {
|
|
472
484
|
label: "test-select-label",
|
|
473
485
|
value: ["1", "2"],
|
|
@@ -484,6 +496,7 @@ describe("Select component tests", function () {
|
|
|
484
496
|
_react2.fireEvent.focus(select);
|
|
485
497
|
|
|
486
498
|
expect(queryByRole("listbox")).toBeFalsy();
|
|
499
|
+
expect(document.activeElement === select).toBeFalsy();
|
|
487
500
|
});
|
|
488
501
|
test("Controlled - Single selection - Not optional constraint", function () {
|
|
489
502
|
var onChange = jest.fn();
|
package/select/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ declare type Margin = {
|
|
|
6
6
|
left?: Space;
|
|
7
7
|
right?: Space;
|
|
8
8
|
};
|
|
9
|
-
declare type SVG = React.SVGProps<SVGSVGElement>;
|
|
9
|
+
declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
|
|
10
10
|
declare type OptionGroup = {
|
|
11
11
|
/**
|
|
12
12
|
* Label of the group to be shown in the select's listbox.
|
|
@@ -201,9 +201,7 @@ export declare type ListboxProps = {
|
|
|
201
201
|
optionalItem: Option;
|
|
202
202
|
searchable: boolean;
|
|
203
203
|
handleOptionOnClick: (option: Option) => void;
|
|
204
|
-
|
|
205
|
-
width: number;
|
|
206
|
-
};
|
|
204
|
+
getSelectWidth: () => number;
|
|
207
205
|
};
|
|
208
206
|
/**
|
|
209
207
|
* Reference to the select component.
|
package/sidenav/Sidenav.js
CHANGED
|
@@ -124,12 +124,20 @@ var Group = function Group(_ref4) {
|
|
|
124
124
|
collapsed = _useState2[0],
|
|
125
125
|
setCollapsed = _useState2[1];
|
|
126
126
|
|
|
127
|
+
var selectedGroup = (0, _react.useMemo)(function () {
|
|
128
|
+
return collapsed ? _react["default"].Children.toArray(children).some(function (child) {
|
|
129
|
+
var _child$props;
|
|
130
|
+
|
|
131
|
+
return (_child$props = child["props"]) === null || _child$props === void 0 ? void 0 : _child$props.selected;
|
|
132
|
+
}) : false;
|
|
133
|
+
}, [collapsed, children]);
|
|
127
134
|
return /*#__PURE__*/_react["default"].createElement(SidenavGroup, null, collapsable && title ? /*#__PURE__*/_react["default"].createElement(SidenavGroupTitleButton, {
|
|
128
135
|
role: "button",
|
|
129
136
|
"aria-expanded": !collapsed,
|
|
130
137
|
onClick: function onClick() {
|
|
131
138
|
return setCollapsed(!collapsed);
|
|
132
|
-
}
|
|
139
|
+
},
|
|
140
|
+
selectedGroup: selectedGroup
|
|
133
141
|
}, /*#__PURE__*/_react["default"].createElement(SidenavContent, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(SidenavIcon, {
|
|
134
142
|
src: icon
|
|
135
143
|
}) : icon, title), collapsed ? collapsedIcon : collapsableIcon) : title && /*#__PURE__*/_react["default"].createElement(SidenavGroupTitle, null, typeof icon === "string" ? /*#__PURE__*/_react["default"].createElement(SidenavIcon, {
|
|
@@ -206,7 +214,7 @@ var SidenavGroupTitle = _styledComponents["default"].span(_templateObject5 || (_
|
|
|
206
214
|
return props.theme.groupTitleFontSize;
|
|
207
215
|
});
|
|
208
216
|
|
|
209
|
-
var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n all: unset;\n cursor: pointer;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n display: flex;\n align-items: center;\n margin: 0px;\n padding: 0.5rem 1.2rem;\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n &:hover {\n
|
|
217
|
+
var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n all: unset;\n cursor: pointer;\n justify-content: space-between;\n box-sizing: border-box;\n width: 100%;\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n display: flex;\n align-items: center;\n margin: 0px;\n padding: 0.5rem 1.2rem;\n &:focus-visible {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n &:hover {\n ", "\n }\n &:active {\n background-color: ", ";\n color: ", ";\n }\n ", "\n svg {\n width: 18px;\n height: auto;\n }\n"])), function (props) {
|
|
210
218
|
return props.theme.groupTitleFontFamily;
|
|
211
219
|
}, function (props) {
|
|
212
220
|
return props.theme.groupTitleFontStyle;
|
|
@@ -217,9 +225,13 @@ var SidenavGroupTitleButton = _styledComponents["default"].button(_templateObjec
|
|
|
217
225
|
}, function (props) {
|
|
218
226
|
return props.theme.linkFocusColor;
|
|
219
227
|
}, function (props) {
|
|
220
|
-
return props.theme.groupTitleHoverBackgroundColor;
|
|
228
|
+
return props.selectedGroup ? "color: ".concat(props.theme.groupTitleSelectedHoverFontColor, "; background: ").concat(props.theme.groupTitleSelectedHoverBackgroundColor, ";") : "color: ".concat(props.theme.groupTitleFontColor, "; background: ").concat(props.theme.groupTitleHoverBackgroundColor, ";");
|
|
221
229
|
}, function (props) {
|
|
222
230
|
return props.theme.groupTitleActiveBackgroundColor;
|
|
231
|
+
}, function (props) {
|
|
232
|
+
return props.theme.groupTitleFontColor;
|
|
233
|
+
}, function (props) {
|
|
234
|
+
return props.selectedGroup ? "color: ".concat(props.theme.groupTitleSelectedFontColor, "; background: ").concat(props.theme.groupTitleSelectedBackgroundColor, ";") : "color: ".concat(props.theme.groupTitleFontColor, "; background: transparent;");
|
|
223
235
|
});
|
|
224
236
|
|
|
225
237
|
var SidenavLink = _styledComponents["default"].a(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n letter-spacing: ", ";\n\n text-transform: ", ";\n text-decoration: ", ";\n\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n font-size: ", ";\n line-height: 19px;\n\n ", "\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n\n box-shadow: 0 0 0 2px transparent;\n\n padding: 0.5rem 1.2rem;\n\n cursor: pointer;\n svg {\n width: 16px;\n margin-right: 0.5rem;\n }\n\n &:hover {\n ", "\n }\n\n &:focus {\n outline: 2px solid ", ";\n outline-offset: -2px;\n }\n\n &:active {\n color: #ffffff;\n background: #4d4d4d;\n outline: 2px solid #0095ff;\n outline-offset: -2px;\n }\n"])), function (props) {
|
package/sidenav/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
declare type SVG = React.SVGProps<SVGSVGElement>;
|
|
2
|
+
declare type SVG = React.ReactNode & React.SVGProps<SVGSVGElement>;
|
|
3
3
|
declare type SidenavPropsType = {
|
|
4
4
|
/**
|
|
5
5
|
* The area inside the sidenav. This area can be used to render the content inside the sidenav.
|
package/slider/Slider.js
CHANGED
|
@@ -89,7 +89,7 @@ var DxcSlider = function DxcSlider(_ref) {
|
|
|
89
89
|
}, [labelFormatCallback, maxValue]);
|
|
90
90
|
|
|
91
91
|
var handlerSliderChange = function handlerSliderChange(event, newValue) {
|
|
92
|
-
var valueToCheck = value
|
|
92
|
+
var valueToCheck = value != null && value >= 0 ? value : innerValue;
|
|
93
93
|
valueToCheck !== newValue && setInnerValue(newValue);
|
|
94
94
|
onChange === null || onChange === void 0 ? void 0 : onChange(newValue);
|
|
95
95
|
};
|
|
@@ -128,7 +128,7 @@ var DxcSlider = function DxcSlider(_ref) {
|
|
|
128
128
|
backgroundType: backgroundType,
|
|
129
129
|
disabled: disabled
|
|
130
130
|
}, minLabel), /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
|
|
131
|
-
value: value != null && value >= 0
|
|
131
|
+
value: value != null && value >= 0 ? value : innerValue,
|
|
132
132
|
min: minValue,
|
|
133
133
|
max: maxValue,
|
|
134
134
|
onChange: handlerSliderChange,
|
|
@@ -143,7 +143,7 @@ var DxcSlider = function DxcSlider(_ref) {
|
|
|
143
143
|
step: step
|
|
144
144
|
}, maxLabel), showInput && /*#__PURE__*/_react["default"].createElement(StyledTextInput, null, /*#__PURE__*/_react["default"].createElement(_TextInput["default"], {
|
|
145
145
|
name: name,
|
|
146
|
-
value: value != null && value >= 0
|
|
146
|
+
value: value != null && value >= 0 ? value.toString() : innerValue.toString(),
|
|
147
147
|
disabled: disabled,
|
|
148
148
|
onChange: handlerInputChange,
|
|
149
149
|
size: "fillParent"
|
package/slider/Slider.test.js
CHANGED
|
@@ -6,6 +6,8 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
6
6
|
|
|
7
7
|
var _react2 = require("@testing-library/react");
|
|
8
8
|
|
|
9
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
|
+
|
|
9
11
|
var _Slider = _interopRequireDefault(require("./Slider"));
|
|
10
12
|
|
|
11
13
|
describe("Slider component tests", function () {
|
|
@@ -147,4 +149,39 @@ describe("Slider component tests", function () {
|
|
|
147
149
|
expect(getByText("100$")).toBeTruthy();
|
|
148
150
|
expect(labelFormatCallback).toHaveBeenCalledTimes(2);
|
|
149
151
|
});
|
|
152
|
+
test("Change value correctly to 0 from external function", function () {
|
|
153
|
+
var onChange = jest.fn();
|
|
154
|
+
|
|
155
|
+
var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
|
|
156
|
+
minValue: 0,
|
|
157
|
+
maxValue: 100,
|
|
158
|
+
onChange: onChange,
|
|
159
|
+
showLimitsValues: true,
|
|
160
|
+
value: 13,
|
|
161
|
+
showInput: true
|
|
162
|
+
})),
|
|
163
|
+
rerender = _render8.rerender,
|
|
164
|
+
getByRole = _render8.getByRole;
|
|
165
|
+
|
|
166
|
+
var slider = getByRole("slider");
|
|
167
|
+
|
|
168
|
+
_userEvent["default"].tab();
|
|
169
|
+
|
|
170
|
+
_react2.fireEvent.keyDown(slider, {
|
|
171
|
+
key: "ArrowRight",
|
|
172
|
+
code: "ArrowRight",
|
|
173
|
+
keyCode: 39,
|
|
174
|
+
charCode: 39
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
rerender( /*#__PURE__*/_react["default"].createElement(_Slider["default"], {
|
|
178
|
+
minValue: 0,
|
|
179
|
+
maxValue: 100,
|
|
180
|
+
onChange: onChange,
|
|
181
|
+
showLimitsValues: true,
|
|
182
|
+
value: 0,
|
|
183
|
+
showInput: true
|
|
184
|
+
}));
|
|
185
|
+
expect(slider.getAttribute("aria-valuenow")).toBe("0");
|
|
186
|
+
});
|
|
150
187
|
});
|
package/switch/Switch.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import SwitchPropsType from "./types";
|
|
2
|
+
import { SwitchPropsType } from "./types";
|
|
3
3
|
declare const DxcSwitch: ({ defaultChecked, checked, value, label, labelPosition, name, disabled, optional, onChange, margin, size, tabIndex, }: SwitchPropsType) => JSX.Element;
|
|
4
4
|
export default DxcSwitch;
|
package/switch/Switch.js
CHANGED
|
@@ -19,8 +19,6 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
19
19
|
|
|
20
20
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
21
21
|
|
|
22
|
-
var _core = require("@material-ui/core");
|
|
23
|
-
|
|
24
22
|
var _uuid = require("uuid");
|
|
25
23
|
|
|
26
24
|
var _variables = require("../common/variables.js");
|
|
@@ -33,13 +31,15 @@ var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabel
|
|
|
33
31
|
|
|
34
32
|
var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext"));
|
|
35
33
|
|
|
36
|
-
var _templateObject, _templateObject2;
|
|
34
|
+
var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
|
|
37
35
|
|
|
38
36
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
37
|
|
|
40
38
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
41
39
|
|
|
42
40
|
var DxcSwitch = function DxcSwitch(_ref) {
|
|
41
|
+
var _ref2;
|
|
42
|
+
|
|
43
43
|
var defaultChecked = _ref.defaultChecked,
|
|
44
44
|
checked = _ref.checked,
|
|
45
45
|
value = _ref.value,
|
|
@@ -71,9 +71,32 @@ var DxcSwitch = function DxcSwitch(_ref) {
|
|
|
71
71
|
innerChecked = _useState4[0],
|
|
72
72
|
setInnerChecked = _useState4[1];
|
|
73
73
|
|
|
74
|
+
var _useState5 = (0, _react.useState)((_ref2 = label !== "" && label !== null && label !== undefined) !== null && _ref2 !== void 0 ? _ref2 : false),
|
|
75
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 1),
|
|
76
|
+
hasLabel = _useState6[0];
|
|
77
|
+
|
|
74
78
|
var colorsTheme = (0, _useTheme["default"])();
|
|
75
79
|
var translatedLabels = (0, _useTranslatedLabels["default"])();
|
|
76
80
|
var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
|
|
81
|
+
var refTrack = (0, _react.useRef)(null);
|
|
82
|
+
|
|
83
|
+
var handleOnKeyDown = function handleOnKeyDown(event) {
|
|
84
|
+
switch (event.key) {
|
|
85
|
+
case "Enter":
|
|
86
|
+
case " ":
|
|
87
|
+
//Space
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
refTrack.current.focus();
|
|
90
|
+
var isChecked = !(checked !== null && checked !== void 0 ? checked : innerChecked);
|
|
91
|
+
setInnerChecked(isChecked);
|
|
92
|
+
|
|
93
|
+
if (typeof onChange === "function") {
|
|
94
|
+
onChange(isChecked);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
77
100
|
|
|
78
101
|
var handlerSwitchChange = function handlerSwitchChange(event) {
|
|
79
102
|
if (checked === undefined) {
|
|
@@ -81,40 +104,64 @@ var DxcSwitch = function DxcSwitch(_ref) {
|
|
|
81
104
|
|
|
82
105
|
var isChecked = (_event$target$checked = event.target.checked) !== null && _event$target$checked !== void 0 ? _event$target$checked : !innerChecked;
|
|
83
106
|
setInnerChecked(isChecked);
|
|
84
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(isChecked);
|
|
85
|
-
} else onChange === null || onChange === void 0 ? void 0 : onChange(!checked);
|
|
86
|
-
};
|
|
87
107
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
108
|
+
if (typeof onChange === "function") {
|
|
109
|
+
onChange(isChecked);
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
if (typeof onChange === "function") {
|
|
113
|
+
onChange(!checked);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
95
117
|
|
|
96
118
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
|
|
97
119
|
theme: colorsTheme["switch"]
|
|
98
120
|
}, /*#__PURE__*/_react["default"].createElement(SwitchContainer, {
|
|
99
121
|
margin: margin,
|
|
122
|
+
size: size,
|
|
123
|
+
onKeyDown: handleOnKeyDown
|
|
124
|
+
}, labelPosition === "before" && hasLabel && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
|
|
125
|
+
id: labelId,
|
|
126
|
+
labelPosition: labelPosition,
|
|
127
|
+
onClick: !disabled ? handlerSwitchChange : undefined,
|
|
100
128
|
disabled: disabled,
|
|
129
|
+
backgroundType: backgroundType,
|
|
130
|
+
hasLabel: hasLabel
|
|
131
|
+
}, label, " ", optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel)), /*#__PURE__*/_react["default"].createElement(SwitchBase, {
|
|
101
132
|
labelPosition: labelPosition,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
tabIndex: tabIndex
|
|
112
|
-
},
|
|
113
|
-
onChange: handlerSwitchChange,
|
|
133
|
+
hasLabel: hasLabel,
|
|
134
|
+
htmlFor: labelId,
|
|
135
|
+
onClick: disabled === true ? function () {} : handlerSwitchChange
|
|
136
|
+
}, /*#__PURE__*/_react["default"].createElement(SwitchInput, {
|
|
137
|
+
type: "checkbox",
|
|
138
|
+
role: "switch",
|
|
139
|
+
name: name,
|
|
140
|
+
id: labelId,
|
|
141
|
+
disabled: disabled,
|
|
114
142
|
value: value,
|
|
143
|
+
"aria-labelledby": labelId,
|
|
144
|
+
"aria-label": hasLabel ? label : undefined,
|
|
145
|
+
"aria-checked": checked !== null && checked !== void 0 ? checked : innerChecked,
|
|
146
|
+
defaultChecked: defaultChecked !== null && defaultChecked !== void 0 ? defaultChecked : undefined,
|
|
147
|
+
tabIndex: -1
|
|
148
|
+
}), disabled ? /*#__PURE__*/_react["default"].createElement(DisabledSwitchTrack, {
|
|
149
|
+
backgroundType: backgroundType,
|
|
150
|
+
"data-checked": checked !== null && checked !== void 0 ? checked : innerChecked ? innerChecked : undefined,
|
|
151
|
+
tabIndex: -1
|
|
152
|
+
}) : /*#__PURE__*/_react["default"].createElement(SwitchTrack, {
|
|
153
|
+
backgroundType: backgroundType,
|
|
154
|
+
"data-checked": checked !== null && checked !== void 0 ? checked : innerChecked ? innerChecked : undefined,
|
|
155
|
+
tabIndex: tabIndex,
|
|
156
|
+
ref: refTrack
|
|
157
|
+
})), labelPosition === "after" && hasLabel && /*#__PURE__*/_react["default"].createElement(LabelContainer, {
|
|
158
|
+
id: labelId,
|
|
159
|
+
labelPosition: labelPosition,
|
|
160
|
+
onClick: !disabled ? handlerSwitchChange : undefined,
|
|
115
161
|
disabled: disabled,
|
|
116
|
-
|
|
117
|
-
|
|
162
|
+
backgroundType: backgroundType,
|
|
163
|
+
hasLabel: hasLabel
|
|
164
|
+
}, optional && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, translatedLabels.formFields.optionalLabel), " ", label)));
|
|
118
165
|
};
|
|
119
166
|
|
|
120
167
|
var sizes = {
|
|
@@ -129,7 +176,7 @@ var calculateWidth = function calculateWidth(margin, size) {
|
|
|
129
176
|
return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
|
|
130
177
|
};
|
|
131
178
|
|
|
132
|
-
var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n
|
|
179
|
+
var SwitchContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n align-items: center;\n width: ", ";\n height: 40px;\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
|
|
133
180
|
return calculateWidth(props.margin, props.size);
|
|
134
181
|
}, function (props) {
|
|
135
182
|
return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
|
|
@@ -141,16 +188,38 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
|
|
|
141
188
|
return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
|
|
142
189
|
}, function (props) {
|
|
143
190
|
return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
var LabelContainer = _styledComponents["default"].span(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ", ";\n opacity: 1;\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n cursor: ", ";\n\n ", ";\n\n ", "\n"])), function (props) {
|
|
194
|
+
return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
|
|
144
195
|
}, function (props) {
|
|
145
|
-
return props.
|
|
196
|
+
return props.theme.labelFontFamily;
|
|
146
197
|
}, function (props) {
|
|
147
|
-
return props.theme.
|
|
198
|
+
return props.theme.labelFontSize;
|
|
148
199
|
}, function (props) {
|
|
149
|
-
return
|
|
200
|
+
return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
|
|
150
201
|
}, function (props) {
|
|
151
|
-
return props.
|
|
202
|
+
return props.theme.labelFontWeight;
|
|
203
|
+
}, function (props) {
|
|
204
|
+
return props.disabled === true ? "not-allowed" : "pointer";
|
|
205
|
+
}, function (props) {
|
|
206
|
+
return !props.hasLabel ? "margin: 0px;" : props.labelPosition === "after" ? "margin-left: ".concat(props.theme.spaceBetweenLabelSwitch, ";") : "margin-right: ".concat(props.theme.spaceBetweenLabelSwitch, ";");
|
|
207
|
+
}, function (props) {
|
|
208
|
+
return props.labelPosition === "before" && "order: -1";
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
var SwitchBase = _styledComponents["default"].label(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n margin: ", ";\n"])), function (props) {
|
|
212
|
+
return !props.hasLabel ? "0px 4px" : props.labelPosition === "before" ? "0 4px 0 12px" : "0 12px 0 4px";
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
var SwitchInput = _styledComponents["default"].input(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n opacity: 0;\n width: 0;\n height: 0;\n margin: 0px;\n"])));
|
|
216
|
+
|
|
217
|
+
var SwitchTrack = _styledComponents["default"].span(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n border-radius: 15px;\n width: ", ";\n height: ", ";\n position: relative;\n transition: transform 0.2s ease;\n\n &:focus-visible {\n outline: none;\n ::before {\n outline: ", ";\n outline-offset: 6px;\n }\n }\n\n /* Thumb element */\n ::before {\n content: \"\";\n transform: initial;\n transition: transform 0.2s ease;\n position: absolute;\n width: ", ";\n height: ", ";\n border-radius: 50%;\n z-index: 1;\n box-shadow: 0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%);\n bottom: -6px;\n left: -4px;\n transform: translateX(0px);\n background-color: ", ";\n }\n\n /* Unchecked */\n background-color: ", ";\n\n /* Checked */\n &[data-checked=\"true\"] {\n background-color: ", ";\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
|
|
218
|
+
return props.theme.trackWidth;
|
|
152
219
|
}, function (props) {
|
|
153
220
|
return props.theme.trackHeight;
|
|
221
|
+
}, function (props) {
|
|
222
|
+
return "".concat(props.backgroundType === "dark" ? props.theme.thumbFocusColorOnDark : props.theme.thumbFocusColor, " solid 2px");
|
|
154
223
|
}, function (props) {
|
|
155
224
|
return props.theme.thumbWidth;
|
|
156
225
|
}, function (props) {
|
|
@@ -158,38 +227,25 @@ var SwitchContainer = _styledComponents["default"].div(_templateObject || (_temp
|
|
|
158
227
|
}, function (props) {
|
|
159
228
|
return props.backgroundType === "dark" ? props.theme.uncheckedThumbBackgroundColorOnDark : props.theme.uncheckedThumbBackgroundColor;
|
|
160
229
|
}, function (props) {
|
|
161
|
-
return props.backgroundType === "dark" ? props.theme.
|
|
162
|
-
}, function (props) {
|
|
163
|
-
return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
|
|
164
|
-
}, function (props) {
|
|
165
|
-
return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
|
|
166
|
-
}, function (props) {
|
|
167
|
-
return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
|
|
230
|
+
return props.backgroundType === "dark" ? props.theme.uncheckedTrackBackgroundColorOnDark : props.theme.uncheckedTrackBackgroundColor;
|
|
168
231
|
}, function (props) {
|
|
169
|
-
return props.backgroundType === "dark" ? props.theme.
|
|
232
|
+
return props.backgroundType === "dark" ? props.theme.checkedTrackBackgroundColorOnDark : props.theme.checkedTrackBackgroundColor;
|
|
170
233
|
}, function (props) {
|
|
171
234
|
return props.theme.thumbShift;
|
|
172
235
|
}, function (props) {
|
|
173
|
-
return props.backgroundType === "dark" ? props.theme.
|
|
236
|
+
return props.backgroundType === "dark" ? props.theme.checkedThumbBackgroundColorOnDark : props.theme.checkedThumbBackgroundColor;
|
|
174
237
|
});
|
|
175
238
|
|
|
176
|
-
var
|
|
177
|
-
return props.
|
|
178
|
-
}, function (props) {
|
|
179
|
-
return props.theme.labelFontFamily;
|
|
180
|
-
}, function (props) {
|
|
181
|
-
return props.theme.labelFontSize;
|
|
182
|
-
}, function (props) {
|
|
183
|
-
return props.disabled ? props.theme.disabledLabelFontStyle : props.theme.labelFontStyle;
|
|
239
|
+
var DisabledSwitchTrack = (0, _styledComponents["default"])(SwitchTrack)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n cursor: not-allowed;\n\n /* Unchecked */\n background-color: ", ";\n\n ::before {\n background-color: ", ";\n }\n\n /* Checked */\n &[data-checked=\"true\"] {\n background-color: ", ";\n\n ::before {\n transform: translateX(", ");\n background-color: ", ";\n }\n }\n"])), function (props) {
|
|
240
|
+
return props.backgroundType === "dark" ? props.theme.disabledUncheckedTrackBackgroundColorOnDark : props.theme.disabledUncheckedTrackBackgroundColor;
|
|
184
241
|
}, function (props) {
|
|
185
|
-
return props.theme.
|
|
242
|
+
return props.backgroundType === "dark" ? props.theme.disabledUncheckedThumbBackgroundColorOnDark : props.theme.disabledUncheckedThumbBackgroundColor;
|
|
186
243
|
}, function (props) {
|
|
187
|
-
return props.
|
|
244
|
+
return props.backgroundType === "dark" ? props.theme.disabledCheckedTrackBackgroundColorOnDark : props.theme.disabledCheckedTrackBackgroundColor;
|
|
188
245
|
}, function (props) {
|
|
189
|
-
return props.
|
|
246
|
+
return props.theme.thumbShift;
|
|
190
247
|
}, function (props) {
|
|
191
|
-
return props.
|
|
248
|
+
return props.backgroundType === "dark" ? props.theme.disabledCheckedThumbBackgroundColorOnDark : props.theme.disabledCheckedThumbBackgroundColor;
|
|
192
249
|
});
|
|
193
|
-
|
|
194
250
|
var _default = DxcSwitch;
|
|
195
251
|
exports["default"] = _default;
|