@dxc-technology/halstack-react 0.0.0-74ba970 → 0.0.0-752ca0a
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/BackgroundColorContext.d.ts +2 -2
- package/BackgroundColorContext.js +1 -1
- package/HalstackContext.d.ts +1349 -5
- package/HalstackContext.js +117 -77
- package/README.md +47 -0
- package/accordion/Accordion.d.ts +1 -1
- package/accordion/Accordion.js +14 -37
- package/accordion/Accordion.stories.tsx +104 -113
- package/accordion/Accordion.test.js +1 -1
- package/accordion/types.d.ts +2 -13
- package/accordion-group/AccordionGroup.d.ts +4 -3
- package/accordion-group/AccordionGroup.js +23 -44
- package/accordion-group/AccordionGroup.stories.tsx +77 -76
- package/accordion-group/AccordionGroup.test.js +7 -17
- package/accordion-group/AccordionGroupAccordion.d.ts +4 -0
- package/accordion-group/AccordionGroupAccordion.js +43 -0
- package/accordion-group/types.d.ts +2 -13
- package/alert/Alert.js +4 -8
- package/alert/Alert.stories.tsx +28 -0
- package/alert/Alert.test.js +1 -1
- package/bleed/Bleed.stories.tsx +1 -0
- package/box/Box.d.ts +1 -1
- package/box/Box.js +7 -26
- package/box/Box.stories.tsx +38 -51
- package/box/Box.test.js +1 -1
- package/box/types.d.ts +0 -11
- package/bulleted-list/BulletedList.js +4 -2
- package/bulleted-list/BulletedList.stories.tsx +7 -1
- package/bulleted-list/types.d.ts +31 -4
- package/button/Button.d.ts +1 -1
- package/button/Button.js +48 -60
- package/button/Button.stories.tsx +151 -9
- package/button/Button.test.js +12 -1
- package/button/types.d.ts +7 -3
- package/card/Card.d.ts +1 -1
- package/card/Card.js +27 -45
- package/card/Card.stories.tsx +12 -42
- package/card/Card.test.js +1 -1
- package/card/types.d.ts +1 -6
- package/checkbox/Checkbox.d.ts +2 -2
- package/checkbox/Checkbox.js +71 -51
- package/checkbox/Checkbox.stories.tsx +146 -58
- package/checkbox/Checkbox.test.js +84 -11
- package/checkbox/types.d.ts +10 -2
- package/chip/Chip.js +28 -49
- package/chip/Chip.stories.tsx +121 -26
- package/chip/Chip.test.js +3 -5
- package/common/OpenSans.css +68 -80
- package/common/coreTokens.d.ts +146 -0
- package/common/coreTokens.js +167 -0
- package/common/utils.d.ts +1 -0
- package/common/utils.js +4 -4
- package/common/variables.d.ts +1499 -0
- package/common/variables.js +1004 -1134
- package/date-input/Calendar.d.ts +4 -0
- package/date-input/Calendar.js +258 -0
- package/date-input/DateInput.js +138 -239
- package/date-input/DateInput.stories.tsx +209 -33
- package/date-input/DateInput.test.js +519 -149
- package/date-input/DatePicker.d.ts +4 -0
- package/date-input/DatePicker.js +146 -0
- package/date-input/Icons.d.ts +6 -0
- package/date-input/Icons.js +75 -0
- package/date-input/YearPicker.d.ts +4 -0
- package/date-input/YearPicker.js +126 -0
- package/date-input/types.d.ts +55 -0
- package/dialog/Dialog.d.ts +1 -1
- package/dialog/Dialog.js +54 -85
- package/dialog/Dialog.stories.tsx +154 -170
- package/dialog/Dialog.test.js +302 -3
- package/dialog/types.d.ts +0 -12
- package/dropdown/Dropdown.js +40 -39
- package/dropdown/Dropdown.stories.tsx +210 -84
- package/dropdown/Dropdown.test.js +21 -26
- package/dropdown/DropdownMenu.js +12 -18
- package/dropdown/DropdownMenuItem.js +4 -17
- package/dropdown/types.d.ts +3 -3
- package/file-input/FileInput.d.ts +2 -2
- package/file-input/FileInput.js +174 -220
- package/file-input/FileInput.stories.tsx +122 -11
- package/file-input/FileInput.test.js +14 -14
- package/file-input/FileItem.d.ts +4 -14
- package/file-input/FileItem.js +39 -63
- package/file-input/types.d.ts +18 -1
- package/flex/Flex.d.ts +1 -1
- package/flex/Flex.js +33 -19
- package/flex/Flex.stories.tsx +35 -26
- package/flex/types.d.ts +83 -7
- package/footer/Footer.d.ts +1 -1
- package/footer/Footer.js +44 -64
- package/footer/Footer.stories.tsx +36 -21
- package/footer/Footer.test.js +16 -26
- package/footer/types.d.ts +10 -11
- package/grid/Grid.d.ts +7 -0
- package/grid/Grid.js +91 -0
- package/grid/Grid.stories.tsx +219 -0
- package/grid/types.d.ts +115 -0
- package/header/Header.d.ts +4 -3
- package/header/Header.js +20 -49
- package/header/Header.stories.tsx +115 -36
- package/header/Header.test.js +2 -2
- package/header/types.d.ts +1 -14
- package/heading/Heading.js +1 -1
- package/heading/Heading.test.js +1 -1
- package/image/Image.d.ts +4 -0
- package/image/Image.js +85 -0
- package/image/Image.stories.tsx +127 -0
- package/image/types.d.ts +72 -0
- package/inset/Inset.stories.tsx +2 -1
- package/layout/ApplicationLayout.d.ts +5 -5
- package/layout/ApplicationLayout.js +15 -12
- package/layout/ApplicationLayout.stories.tsx +1 -1
- package/layout/Icons.d.ts +7 -4
- package/layout/Icons.js +52 -56
- package/layout/types.d.ts +2 -3
- package/link/Link.js +4 -4
- package/link/Link.stories.tsx +60 -0
- package/link/Link.test.js +2 -4
- package/link/types.d.ts +2 -2
- package/main.d.ts +4 -2
- package/main.js +17 -1
- package/{tabs-nav → nav-tabs}/NavTabs.d.ts +2 -2
- package/{tabs-nav → nav-tabs}/NavTabs.js +8 -11
- package/{tabs-nav → nav-tabs}/NavTabs.stories.tsx +110 -6
- package/{tabs-nav → nav-tabs}/NavTabs.test.js +1 -1
- package/{tabs-nav → nav-tabs}/Tab.js +48 -32
- package/{tabs-nav → nav-tabs}/types.d.ts +8 -9
- package/nav-tabs/types.js +5 -0
- package/number-input/NumberInput.d.ts +7 -0
- package/number-input/NumberInput.js +6 -4
- package/number-input/NumberInput.test.js +317 -98
- package/package.json +9 -14
- package/paginator/Icons.d.ts +5 -0
- package/paginator/Icons.js +16 -28
- package/paginator/Paginator.js +8 -16
- package/paginator/Paginator.stories.tsx +24 -0
- package/paginator/Paginator.test.js +58 -48
- package/paragraph/Paragraph.d.ts +3 -4
- package/paragraph/Paragraph.js +5 -5
- package/password-input/Icons.d.ts +6 -0
- package/password-input/Icons.js +39 -0
- package/password-input/PasswordInput.js +35 -82
- package/password-input/PasswordInput.stories.tsx +1 -0
- package/password-input/PasswordInput.test.js +34 -40
- package/progress-bar/ProgressBar.d.ts +2 -2
- package/progress-bar/ProgressBar.js +5 -5
- package/progress-bar/ProgressBar.stories.jsx +35 -2
- package/progress-bar/ProgressBar.test.js +1 -1
- package/progress-bar/types.d.ts +4 -3
- package/quick-nav/QuickNav.js +11 -12
- package/quick-nav/QuickNav.stories.tsx +111 -19
- package/radio-group/Radio.js +10 -10
- package/radio-group/RadioGroup.js +15 -13
- package/radio-group/RadioGroup.stories.tsx +131 -18
- package/radio-group/RadioGroup.test.js +117 -60
- package/resultsetTable/Icons.d.ts +7 -0
- package/resultsetTable/Icons.js +51 -0
- package/resultsetTable/ResultsetTable.js +49 -108
- package/resultsetTable/ResultsetTable.stories.tsx +50 -25
- package/resultsetTable/ResultsetTable.test.js +41 -64
- package/resultsetTable/types.d.ts +1 -1
- package/select/Listbox.d.ts +1 -1
- package/select/Listbox.js +5 -34
- package/select/Option.js +11 -24
- package/select/Select.js +59 -36
- package/select/Select.stories.tsx +497 -153
- package/select/Select.test.js +345 -292
- package/select/types.d.ts +2 -2
- package/sidenav/Icons.d.ts +7 -0
- package/sidenav/Icons.js +51 -0
- package/sidenav/Sidenav.d.ts +2 -2
- package/sidenav/Sidenav.js +66 -96
- package/sidenav/Sidenav.stories.tsx +165 -63
- package/sidenav/types.d.ts +21 -18
- package/slider/Slider.d.ts +2 -2
- package/slider/Slider.js +17 -14
- package/slider/Slider.stories.tsx +57 -0
- package/slider/Slider.test.js +1 -1
- package/slider/types.d.ts +6 -2
- package/spinner/Spinner.js +17 -23
- package/spinner/Spinner.stories.jsx +53 -27
- package/spinner/Spinner.test.js +1 -1
- package/switch/Switch.d.ts +3 -3
- package/switch/Switch.js +7 -6
- package/switch/Switch.stories.tsx +33 -0
- package/switch/Switch.test.js +1 -1
- package/switch/types.d.ts +8 -3
- package/table/Table.js +3 -3
- package/table/Table.stories.jsx +80 -1
- package/table/Table.test.js +2 -2
- package/tabs/Tab.js +12 -15
- package/tabs/Tabs.js +11 -17
- package/tabs/Tabs.stories.tsx +45 -5
- package/tabs/Tabs.test.js +4 -5
- package/tabs/types.d.ts +2 -2
- package/tag/Tag.js +7 -9
- package/tag/Tag.stories.tsx +14 -1
- package/tag/Tag.test.js +1 -1
- package/text-input/Suggestion.js +34 -7
- package/text-input/TextInput.js +224 -228
- package/text-input/TextInput.stories.tsx +132 -5
- package/text-input/TextInput.test.js +757 -658
- package/text-input/types.d.ts +9 -0
- package/textarea/Textarea.js +27 -26
- package/textarea/Textarea.stories.jsx +68 -1
- package/textarea/Textarea.test.js +61 -19
- package/textarea/types.d.ts +4 -0
- package/toggle-group/ToggleGroup.d.ts +2 -2
- package/toggle-group/ToggleGroup.js +85 -59
- package/toggle-group/ToggleGroup.stories.tsx +48 -3
- package/toggle-group/ToggleGroup.test.js +38 -24
- package/toggle-group/types.d.ts +22 -13
- package/typography/Typography.d.ts +2 -2
- package/typography/Typography.js +14 -113
- package/typography/Typography.stories.tsx +1 -1
- package/useTheme.d.ts +1251 -1
- package/useTheme.js +1 -1
- package/useTranslatedLabels.d.ts +84 -1
- package/utils/BaseTypography.d.ts +21 -0
- package/utils/BaseTypography.js +108 -0
- package/utils/FocusLock.d.ts +13 -0
- package/utils/FocusLock.js +138 -0
- package/wizard/Wizard.js +2 -2
- package/wizard/Wizard.stories.tsx +20 -0
- package/wizard/Wizard.test.js +1 -1
- package/wizard/types.d.ts +5 -6
- package/card/ice-cream.jpg +0 -0
- package/common/RequiredComponent.js +0 -32
- package/number-input/NumberInputContext.d.ts +0 -4
- package/number-input/NumberInputContext.js +0 -19
- package/number-input/numberInputContextTypes.d.ts +0 -19
- /package/{tabs-nav → grid}/types.js +0 -0
- /package/{number-input/numberInputContextTypes.js → image/types.js} +0 -0
- /package/{tabs-nav → nav-tabs}/Tab.d.ts +0 -0
package/text-input/types.d.ts
CHANGED
|
@@ -59,6 +59,10 @@ declare type Props = {
|
|
|
59
59
|
* If true, the component will be disabled.
|
|
60
60
|
*/
|
|
61
61
|
disabled?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* If true, the component will not be mutable, meaning the user can not edit the control.
|
|
64
|
+
*/
|
|
65
|
+
readOnly?: boolean;
|
|
62
66
|
/**
|
|
63
67
|
* If true, the input will be optional, showing '(Optional)'
|
|
64
68
|
* next to the label. Otherwise, the field will be considered required and an error will be
|
|
@@ -189,4 +193,9 @@ export declare type SuggestionProps = {
|
|
|
189
193
|
visuallyFocused: boolean;
|
|
190
194
|
highlighted: boolean;
|
|
191
195
|
};
|
|
196
|
+
export declare type AutosuggestWrapperProps = {
|
|
197
|
+
condition: boolean;
|
|
198
|
+
wrapper: (children: React.ReactNode) => JSX.Element;
|
|
199
|
+
children: React.ReactNode;
|
|
200
|
+
};
|
|
192
201
|
export default Props;
|
package/textarea/Textarea.js
CHANGED
|
@@ -19,13 +19,13 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
19
19
|
|
|
20
20
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
21
21
|
|
|
22
|
-
var _utils = require("../common/utils
|
|
22
|
+
var _utils = require("../common/utils");
|
|
23
23
|
|
|
24
24
|
var _useTheme = _interopRequireDefault(require("../useTheme"));
|
|
25
25
|
|
|
26
26
|
var _useTranslatedLabels = _interopRequireDefault(require("../useTranslatedLabels"));
|
|
27
27
|
|
|
28
|
-
var _variables = require("../common/variables
|
|
28
|
+
var _variables = require("../common/variables");
|
|
29
29
|
|
|
30
30
|
var _uuid = require("uuid");
|
|
31
31
|
|
|
@@ -53,6 +53,8 @@ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref)
|
|
|
53
53
|
placeholder = _ref$placeholder === void 0 ? "" : _ref$placeholder,
|
|
54
54
|
_ref$disabled = _ref.disabled,
|
|
55
55
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
56
|
+
_ref$readOnly = _ref.readOnly,
|
|
57
|
+
readOnly = _ref$readOnly === void 0 ? false : _ref$readOnly,
|
|
56
58
|
_ref$optional = _ref.optional,
|
|
57
59
|
optional = _ref$optional === void 0 ? false : _ref$optional,
|
|
58
60
|
_ref$verticalGrow = _ref.verticalGrow,
|
|
@@ -112,7 +114,15 @@ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref)
|
|
|
112
114
|
});
|
|
113
115
|
};
|
|
114
116
|
|
|
115
|
-
var
|
|
117
|
+
var autoVerticalGrow = function autoVerticalGrow() {
|
|
118
|
+
var textareaLineHeight = parseInt(window.getComputedStyle(textareaRef.current)["line-height"]);
|
|
119
|
+
var textareaPaddingTopBottom = parseInt(window.getComputedStyle(textareaRef.current)["padding-top"]) * 2;
|
|
120
|
+
textareaRef.current.style.height = "".concat(textareaLineHeight * rows, "px");
|
|
121
|
+
var newHeight = textareaRef.current.scrollHeight - textareaPaddingTopBottom;
|
|
122
|
+
textareaRef.current.style.height = "".concat(newHeight, "px");
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
var handleOnBlur = function handleOnBlur(event) {
|
|
116
126
|
if (isNotOptional(event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
|
|
117
127
|
value: event.target.value,
|
|
118
128
|
error: translatedLabels.formFields.requiredValueErrorMessage
|
|
@@ -127,19 +137,11 @@ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref)
|
|
|
127
137
|
});
|
|
128
138
|
};
|
|
129
139
|
|
|
130
|
-
var
|
|
140
|
+
var handleOnChange = function handleOnChange(event) {
|
|
131
141
|
changeValue(event.target.value);
|
|
142
|
+
verticalGrow === "auto" && autoVerticalGrow();
|
|
132
143
|
};
|
|
133
144
|
|
|
134
|
-
(0, _react.useLayoutEffect)(function () {
|
|
135
|
-
if (verticalGrow === "auto") {
|
|
136
|
-
var textareaLineHeight = parseInt(window.getComputedStyle(textareaRef.current)["line-height"]);
|
|
137
|
-
var textareaPaddingTopBottom = parseInt(window.getComputedStyle(textareaRef.current)["padding-top"]) * 2;
|
|
138
|
-
textareaRef.current.style.height = "".concat(textareaLineHeight * rows, "px");
|
|
139
|
-
var newHeight = textareaRef.current.scrollHeight - textareaPaddingTopBottom;
|
|
140
|
-
textareaRef.current.style.height = "".concat(newHeight, "px");
|
|
141
|
-
}
|
|
142
|
-
}, [value, verticalGrow, rows, innerValue]);
|
|
143
145
|
return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
|
|
144
146
|
theme: colorsTheme.textarea
|
|
145
147
|
}, /*#__PURE__*/_react["default"].createElement(TextareaContainer, {
|
|
@@ -161,9 +163,10 @@ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref)
|
|
|
161
163
|
placeholder: placeholder,
|
|
162
164
|
verticalGrow: verticalGrow,
|
|
163
165
|
rows: rows,
|
|
164
|
-
onChange:
|
|
165
|
-
onBlur:
|
|
166
|
+
onChange: handleOnChange,
|
|
167
|
+
onBlur: handleOnBlur,
|
|
166
168
|
disabled: disabled,
|
|
169
|
+
readOnly: readOnly,
|
|
167
170
|
error: error,
|
|
168
171
|
minLength: minLength,
|
|
169
172
|
maxLength: maxLength,
|
|
@@ -171,10 +174,9 @@ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref)
|
|
|
171
174
|
backgroundType: backgroundType,
|
|
172
175
|
ref: textareaRef,
|
|
173
176
|
tabIndex: tabIndex,
|
|
174
|
-
"aria-
|
|
175
|
-
"aria-invalid": error ? "true" : "false",
|
|
177
|
+
"aria-invalid": error ? true : false,
|
|
176
178
|
"aria-errormessage": error ? errorId : undefined,
|
|
177
|
-
"aria-required":
|
|
179
|
+
"aria-required": !disabled && !optional
|
|
178
180
|
}), !disabled && typeof error === "string" && /*#__PURE__*/_react["default"].createElement(Error, {
|
|
179
181
|
id: errorId,
|
|
180
182
|
backgroundType: backgroundType,
|
|
@@ -193,7 +195,7 @@ var calculateWidth = function calculateWidth(margin, size) {
|
|
|
193
195
|
return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
|
|
194
196
|
};
|
|
195
197
|
|
|
196
|
-
var TextareaContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n
|
|
198
|
+
var TextareaContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
|
|
197
199
|
return calculateWidth(props.margin, props.size);
|
|
198
200
|
}, function (props) {
|
|
199
201
|
return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
|
|
@@ -241,18 +243,17 @@ var HelperText = _styledComponents["default"].span(_templateObject4 || (_templat
|
|
|
241
243
|
return props.theme.helperTextLineHeight;
|
|
242
244
|
});
|
|
243
245
|
|
|
244
|
-
var Textarea = _styledComponents["default"].textarea(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n ", "\n\n padding: 0.5rem 1rem;\n box-shadow: 0 0 0 2px transparent;\n border-radius: 0.25rem;\n border: 1px solid\n ", ";\n ", "\n\n ", ";\n
|
|
245
|
-
|
|
246
|
+
var Textarea = _styledComponents["default"].textarea(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n\n ", "\n\n padding: 0.5rem 1rem;\n box-shadow: 0 0 0 2px transparent;\n border-radius: 0.25rem;\n border: 1px solid\n ", ";\n\n ", "\n\n ", ";\n\n color: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: 1.5em;\n\n ::placeholder {\n color: ", ";\n }\n"])), function (_ref2) {
|
|
247
|
+
var verticalGrow = _ref2.verticalGrow;
|
|
248
|
+
if (verticalGrow === "none") return "resize: none;";else if (verticalGrow === "auto") return "resize: none; overflow: hidden;";else if (verticalGrow === "manual") return "resize: vertical;";else return "resize: none;";
|
|
246
249
|
}, function (props) {
|
|
247
250
|
if (props.disabled) return props.backgroundType === "dark" ? "background-color: ".concat(props.theme.disabledContainerFillColorOnDark, ";") : "background-color: ".concat(props.theme.disabledContainerFillColor, ";");else return "background-color: transparent;";
|
|
248
251
|
}, function (props) {
|
|
249
|
-
if (props.disabled) return props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;else return props.backgroundType === "dark" ? props.theme.enabledBorderColorOnDark : props.theme.enabledBorderColor;
|
|
250
|
-
}, function (props) {
|
|
251
|
-
return props.error && !props.disabled && "border-color: transparent;\n box-shadow: 0 0 0 2px ".concat(props.backgroundType === "dark" ? props.theme.errorBorderColorOnDark : props.theme.errorBorderColor, ";\n ");
|
|
252
|
+
if (props.disabled) return props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;else if (props.error) return "transparent";else if (props.readOnly) return props.theme.readOnlyBorderColor;else return props.backgroundType === "dark" ? props.theme.enabledBorderColorOnDark : props.theme.enabledBorderColor;
|
|
252
253
|
}, function (props) {
|
|
253
|
-
return props.disabled && "
|
|
254
|
+
return props.error && !props.disabled && "box-shadow: 0 0 0 2px ".concat(props.backgroundType === "dark" ? props.theme.errorBorderColorOnDark : props.theme.errorBorderColor, ";\n ");
|
|
254
255
|
}, function (props) {
|
|
255
|
-
return !props.disabled
|
|
256
|
+
return !props.disabled ? "&:hover {\n border-color: ".concat(props.error ? "transparent" : props.readOnly ? props.theme.hoverReadOnlyBorderColor : props.backgroundType === "dark" ? props.theme.hoverBorderColorOnDark : props.theme.hoverBorderColor, ";\n ").concat(props.error && "box-shadow: 0 0 0 2px ".concat(props.backgroundType === "dark" ? props.theme.hoverErrorBorderColorOnDark : props.theme.hoverErrorBorderColor, ";"), "\n }\n &:focus, &:focus-within {\n outline: none;\n border-color: transparent;\n box-shadow: 0 0 0 2px ").concat(props.backgroundType === "dark" ? props.theme.focusBorderColorOnDark : props.theme.focusBorderColor, ";\n }") : "cursor: not-allowed;";
|
|
256
257
|
}, function (props) {
|
|
257
258
|
return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledValueFontColorOnDark : props.theme.disabledValueFontColor : props.backgroundType === "dark" ? props.theme.valueFontColorOnDark : props.theme.valueFontColor;
|
|
258
259
|
}, function (props) {
|
|
@@ -4,12 +4,20 @@ import Title from "../../.storybook/components/Title";
|
|
|
4
4
|
import ExampleContainer from "../../.storybook/components/ExampleContainer";
|
|
5
5
|
import { BackgroundColorProvider } from "../BackgroundColorContext";
|
|
6
6
|
import DarkContainer from "../../.storybook/components/DarkSection";
|
|
7
|
+
import { HalstackProvider } from "../HalstackContext";
|
|
7
8
|
|
|
8
9
|
export default {
|
|
9
10
|
title: "Textarea",
|
|
10
11
|
component: DxcTextarea,
|
|
11
12
|
};
|
|
12
13
|
|
|
14
|
+
const opinionatedTheme = {
|
|
15
|
+
textarea: {
|
|
16
|
+
fontColor: "#000000",
|
|
17
|
+
hoverBorderColor: "#a46ede",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
13
21
|
export const Chromatic = () => (
|
|
14
22
|
<>
|
|
15
23
|
<>
|
|
@@ -35,6 +43,14 @@ export const Chromatic = () => (
|
|
|
35
43
|
<Title title="Disabled with value" theme="light" level={4} />
|
|
36
44
|
<DxcTextarea label="Disabled" defaultValue="Example text" disabled />
|
|
37
45
|
</ExampleContainer>
|
|
46
|
+
<ExampleContainer>
|
|
47
|
+
<Title title="Read only" theme="light" level={4} />
|
|
48
|
+
<DxcTextarea label="Label" readOnly defaultValue="Example text" verticalGrow="manual" />
|
|
49
|
+
</ExampleContainer>
|
|
50
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
51
|
+
<Title title="Hovered read only" theme="light" level={4} />
|
|
52
|
+
<DxcTextarea label="Label" readOnly defaultValue="Example text" verticalGrow="manual" />
|
|
53
|
+
</ExampleContainer>
|
|
38
54
|
<ExampleContainer>
|
|
39
55
|
<Title title="With error" theme="light" level={4} />
|
|
40
56
|
<DxcTextarea
|
|
@@ -151,7 +167,58 @@ export const Chromatic = () => (
|
|
|
151
167
|
<ExampleContainer>
|
|
152
168
|
<Title title="Xxlarge margin" theme="light" level={4} />
|
|
153
169
|
<DxcTextarea label="Xxlarge" margin="xxlarge" />
|
|
154
|
-
|
|
170
|
+
</ExampleContainer>
|
|
171
|
+
<Title title="Opinionated theme" theme="light" level={2} />
|
|
172
|
+
<ExampleContainer pseudoState="pseudo-hover">
|
|
173
|
+
<Title title="Hovered" theme="light" level={4} />
|
|
174
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
175
|
+
<DxcTextarea label="Hovered" helperText="Sample text" placeholder="Placeholder" />
|
|
176
|
+
</HalstackProvider>
|
|
177
|
+
</ExampleContainer>
|
|
178
|
+
<ExampleContainer pseudoState="pseudo-focus">
|
|
179
|
+
<Title title="Focused" theme="light" level={4} />
|
|
180
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
181
|
+
<DxcTextarea label="Focused" helperText="Sample text" />
|
|
182
|
+
</HalstackProvider>
|
|
183
|
+
</ExampleContainer>
|
|
184
|
+
<ExampleContainer>
|
|
185
|
+
<Title title="Disabled" theme="light" level={4} />
|
|
186
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
187
|
+
<DxcTextarea
|
|
188
|
+
label="Disabled"
|
|
189
|
+
optional
|
|
190
|
+
helperText="Sample text"
|
|
191
|
+
placeholder="Enter your text here..."
|
|
192
|
+
disabled
|
|
193
|
+
/>
|
|
194
|
+
</HalstackProvider>
|
|
195
|
+
</ExampleContainer>
|
|
196
|
+
<ExampleContainer>
|
|
197
|
+
<Title title="Disabled with value" theme="light" level={4} />
|
|
198
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
199
|
+
<DxcTextarea label="Disabled" helperText="Sample text" defaultValue="Example text" disabled />
|
|
200
|
+
</HalstackProvider>
|
|
201
|
+
</ExampleContainer>
|
|
202
|
+
<ExampleContainer>
|
|
203
|
+
<Title title="With error" theme="light" level={4} />
|
|
204
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
205
|
+
<DxcTextarea
|
|
206
|
+
label="Textarea with error"
|
|
207
|
+
helperText="Helper text"
|
|
208
|
+
placeholder="Enter your text here..."
|
|
209
|
+
error="Error message."
|
|
210
|
+
/>
|
|
211
|
+
</HalstackProvider>
|
|
212
|
+
</ExampleContainer>
|
|
213
|
+
<ExampleContainer>
|
|
214
|
+
<Title title="Grow manual" theme="light" level={4} />{" "}
|
|
215
|
+
<HalstackProvider theme={opinionatedTheme}>
|
|
216
|
+
<DxcTextarea
|
|
217
|
+
label="Manual vertical grow"
|
|
218
|
+
verticalGrow="manual"
|
|
219
|
+
defaultValue="Long textttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"
|
|
220
|
+
/>
|
|
221
|
+
</HalstackProvider>
|
|
155
222
|
</ExampleContainer>
|
|
156
223
|
</>
|
|
157
224
|
);
|
|
@@ -8,7 +8,7 @@ var _react2 = require("@testing-library/react");
|
|
|
8
8
|
|
|
9
9
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
10
10
|
|
|
11
|
-
var _Textarea = _interopRequireDefault(require("./Textarea"));
|
|
11
|
+
var _Textarea = _interopRequireDefault(require("./Textarea.tsx"));
|
|
12
12
|
|
|
13
13
|
describe("Textarea component tests", function () {
|
|
14
14
|
test("Renders with correct label", function () {
|
|
@@ -78,14 +78,13 @@ describe("Textarea component tests", function () {
|
|
|
78
78
|
var textarea = getByLabelText("Example label");
|
|
79
79
|
expect(textarea.rows).toBe(10);
|
|
80
80
|
});
|
|
81
|
-
test("Renders with correct
|
|
81
|
+
test("Renders with correct accessibility attributes", function () {
|
|
82
82
|
var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
83
83
|
label: "Example label"
|
|
84
84
|
})),
|
|
85
85
|
getByLabelText = _render7.getByLabelText;
|
|
86
86
|
|
|
87
87
|
var textarea = getByLabelText("Example label");
|
|
88
|
-
expect(textarea.getAttribute("aria-disabled")).toBe("false");
|
|
89
88
|
expect(textarea.getAttribute("aria-invalid")).toBe("false");
|
|
90
89
|
expect(textarea.getAttribute("aria-describedBy")).toBeNull();
|
|
91
90
|
expect(textarea.getAttribute("aria-required")).toBe("true");
|
|
@@ -101,7 +100,7 @@ describe("Textarea component tests", function () {
|
|
|
101
100
|
var textarea = getByLabelText("Example label");
|
|
102
101
|
expect(textarea.value).toBe("Example text");
|
|
103
102
|
});
|
|
104
|
-
test("Disabled textarea
|
|
103
|
+
test("Disabled textarea can not be modified", function () {
|
|
105
104
|
var onChange = jest.fn();
|
|
106
105
|
|
|
107
106
|
var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
@@ -112,23 +111,66 @@ describe("Textarea component tests", function () {
|
|
|
112
111
|
getByLabelText = _render9.getByLabelText;
|
|
113
112
|
|
|
114
113
|
var textarea = getByLabelText("Example label");
|
|
115
|
-
expect(textarea.getAttribute("aria-disabled")).toBe("true");
|
|
116
114
|
|
|
117
115
|
_userEvent["default"].type(textarea, "Test");
|
|
118
116
|
|
|
119
117
|
expect(onChange).not.toHaveBeenCalled();
|
|
120
118
|
});
|
|
119
|
+
test("Read-only textarea does not trigger onChange function", function () {
|
|
120
|
+
var onChange = jest.fn();
|
|
121
|
+
|
|
122
|
+
var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
123
|
+
label: "Example label",
|
|
124
|
+
onChange: onChange,
|
|
125
|
+
readOnly: true
|
|
126
|
+
})),
|
|
127
|
+
getByLabelText = _render10.getByLabelText;
|
|
128
|
+
|
|
129
|
+
var textarea = getByLabelText("Example label");
|
|
130
|
+
|
|
131
|
+
_userEvent["default"].type(textarea, "Test");
|
|
132
|
+
|
|
133
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
134
|
+
});
|
|
135
|
+
test("Read-only textarea sends its value on submit", function () {
|
|
136
|
+
var handlerOnSubmit = jest.fn(function (e) {
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
var formData = new FormData(e.target);
|
|
139
|
+
var formProps = Object.fromEntries(formData);
|
|
140
|
+
expect(formProps).toStrictEqual({
|
|
141
|
+
data: "Comments"
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
var _render11 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement("form", {
|
|
146
|
+
onSubmit: handlerOnSubmit
|
|
147
|
+
}, /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
148
|
+
label: "Example label",
|
|
149
|
+
name: "data",
|
|
150
|
+
defaultValue: "Comments",
|
|
151
|
+
readOnly: true
|
|
152
|
+
}), /*#__PURE__*/_react["default"].createElement("button", {
|
|
153
|
+
type: "submit"
|
|
154
|
+
}, "Submit"))),
|
|
155
|
+
getByText = _render11.getByText;
|
|
156
|
+
|
|
157
|
+
var submit = getByText("Submit");
|
|
158
|
+
|
|
159
|
+
_userEvent["default"].click(submit);
|
|
160
|
+
|
|
161
|
+
expect(handlerOnSubmit).toHaveBeenCalled();
|
|
162
|
+
});
|
|
121
163
|
test("Not optional constraint (onBlur)", function () {
|
|
122
164
|
var onChange = jest.fn();
|
|
123
165
|
var onBlur = jest.fn();
|
|
124
166
|
|
|
125
|
-
var
|
|
167
|
+
var _render12 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
126
168
|
label: "Example label",
|
|
127
169
|
placeholder: "Placeholder",
|
|
128
170
|
onChange: onChange,
|
|
129
171
|
onBlur: onBlur
|
|
130
172
|
})),
|
|
131
|
-
getByLabelText =
|
|
173
|
+
getByLabelText = _render12.getByLabelText;
|
|
132
174
|
|
|
133
175
|
var textarea = getByLabelText("Example label");
|
|
134
176
|
|
|
@@ -158,12 +200,12 @@ describe("Textarea component tests", function () {
|
|
|
158
200
|
test("Not optional constraint (onChange)", function () {
|
|
159
201
|
var onChange = jest.fn();
|
|
160
202
|
|
|
161
|
-
var
|
|
203
|
+
var _render13 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
162
204
|
label: "Example label",
|
|
163
205
|
placeholder: "Placeholder",
|
|
164
206
|
onChange: onChange
|
|
165
207
|
})),
|
|
166
|
-
getByLabelText =
|
|
208
|
+
getByLabelText = _render13.getByLabelText;
|
|
167
209
|
|
|
168
210
|
var textarea = getByLabelText("Example label");
|
|
169
211
|
|
|
@@ -192,7 +234,7 @@ describe("Textarea component tests", function () {
|
|
|
192
234
|
var onChange = jest.fn();
|
|
193
235
|
var onBlur = jest.fn();
|
|
194
236
|
|
|
195
|
-
var
|
|
237
|
+
var _render14 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
196
238
|
label: "Example label",
|
|
197
239
|
placeholder: "Placeholder",
|
|
198
240
|
onChange: onChange,
|
|
@@ -203,7 +245,7 @@ describe("Textarea component tests", function () {
|
|
|
203
245
|
},
|
|
204
246
|
pattern: "^.*(?=.*[a-zA-Z])(?=.*\\d)(?=.*[!&$%&? \"]).*$"
|
|
205
247
|
})),
|
|
206
|
-
getByLabelText =
|
|
248
|
+
getByLabelText = _render14.getByLabelText;
|
|
207
249
|
|
|
208
250
|
var textarea = getByLabelText("Example label");
|
|
209
251
|
|
|
@@ -251,7 +293,7 @@ describe("Textarea component tests", function () {
|
|
|
251
293
|
var onChange = jest.fn();
|
|
252
294
|
var onBlur = jest.fn();
|
|
253
295
|
|
|
254
|
-
var
|
|
296
|
+
var _render15 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
255
297
|
label: "Example label",
|
|
256
298
|
placeholder: "Placeholder",
|
|
257
299
|
onChange: onChange,
|
|
@@ -263,7 +305,7 @@ describe("Textarea component tests", function () {
|
|
|
263
305
|
minLength: 5,
|
|
264
306
|
maxLength: 10
|
|
265
307
|
})),
|
|
266
|
-
getByLabelText =
|
|
308
|
+
getByLabelText = _render15.getByLabelText;
|
|
267
309
|
|
|
268
310
|
var textarea = getByLabelText("Example label");
|
|
269
311
|
|
|
@@ -311,7 +353,7 @@ describe("Textarea component tests", function () {
|
|
|
311
353
|
var onChange = jest.fn();
|
|
312
354
|
var onBlur = jest.fn();
|
|
313
355
|
|
|
314
|
-
var
|
|
356
|
+
var _render16 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
315
357
|
label: "Example label",
|
|
316
358
|
placeholder: "Placeholder",
|
|
317
359
|
onChange: onChange,
|
|
@@ -324,7 +366,7 @@ describe("Textarea component tests", function () {
|
|
|
324
366
|
minLength: 5,
|
|
325
367
|
maxLength: 10
|
|
326
368
|
})),
|
|
327
|
-
getByLabelText =
|
|
369
|
+
getByLabelText = _render16.getByLabelText;
|
|
328
370
|
|
|
329
371
|
var textarea = getByLabelText("Example label");
|
|
330
372
|
|
|
@@ -389,11 +431,11 @@ describe("Textarea component tests", function () {
|
|
|
389
431
|
test("onBlur function is called correctly", function () {
|
|
390
432
|
var onBlur = jest.fn();
|
|
391
433
|
|
|
392
|
-
var
|
|
434
|
+
var _render17 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
393
435
|
label: "Example label",
|
|
394
436
|
onBlur: onBlur
|
|
395
437
|
})),
|
|
396
|
-
getByLabelText =
|
|
438
|
+
getByLabelText = _render17.getByLabelText;
|
|
397
439
|
|
|
398
440
|
var textarea = getByLabelText("Example label");
|
|
399
441
|
|
|
@@ -413,12 +455,12 @@ describe("Textarea component tests", function () {
|
|
|
413
455
|
test("onChange function is called correctly", function () {
|
|
414
456
|
var onChange = jest.fn();
|
|
415
457
|
|
|
416
|
-
var
|
|
458
|
+
var _render18 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_Textarea["default"], {
|
|
417
459
|
label: "Example label",
|
|
418
460
|
value: "Test value",
|
|
419
461
|
onChange: onChange
|
|
420
462
|
})),
|
|
421
|
-
getByLabelText =
|
|
463
|
+
getByLabelText = _render18.getByLabelText;
|
|
422
464
|
|
|
423
465
|
var textarea = getByLabelText("Example label");
|
|
424
466
|
|
package/textarea/types.d.ts
CHANGED
|
@@ -34,6 +34,10 @@ declare type Props = {
|
|
|
34
34
|
* If true, the component will be disabled.
|
|
35
35
|
*/
|
|
36
36
|
disabled?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* If true, the component will not be mutable, meaning the user can not edit the control.
|
|
39
|
+
*/
|
|
40
|
+
readOnly?: boolean;
|
|
37
41
|
/**
|
|
38
42
|
* If true, the textarea will be optional, showing '(Optional)'
|
|
39
43
|
* next to the label. Otherwise, the field will be considered required
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import
|
|
3
|
-
declare const DxcToggleGroup: ({ label, helperText, defaultValue, value, onChange, disabled, options, margin, multiple, tabIndex, }:
|
|
2
|
+
import ToggleGroupPropsType from "./types";
|
|
3
|
+
declare const DxcToggleGroup: ({ label, helperText, defaultValue, value, onChange, disabled, options, margin, multiple, tabIndex, }: ToggleGroupPropsType) => JSX.Element;
|
|
4
4
|
export default DxcToggleGroup;
|