@dxc-technology/halstack-react 0.0.0-4d89cae → 0.0.0-500190a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/BackgroundColorContext.js +8 -4
  2. package/ThemeContext.js +84 -88
  3. package/V3Select/V3Select.js +33 -127
  4. package/V3Textarea/V3Textarea.js +10 -14
  5. package/accordion/Accordion.d.ts +4 -0
  6. package/accordion/Accordion.js +35 -130
  7. package/accordion/types.d.ts +68 -0
  8. package/accordion/types.js +5 -0
  9. package/accordion-group/AccordionGroup.d.ts +7 -0
  10. package/accordion-group/AccordionGroup.js +65 -81
  11. package/accordion-group/types.d.ts +72 -0
  12. package/accordion-group/types.js +5 -0
  13. package/alert/Alert.d.ts +4 -0
  14. package/alert/Alert.js +38 -151
  15. package/alert/Alert.stories.tsx +170 -0
  16. package/alert/types.d.ts +49 -0
  17. package/alert/types.js +5 -0
  18. package/badge/Badge.js +9 -13
  19. package/box/Box.d.ts +4 -0
  20. package/box/Box.js +13 -43
  21. package/box/Box.stories.tsx +132 -0
  22. package/box/types.d.ts +43 -0
  23. package/box/types.js +5 -0
  24. package/button/Button.d.ts +4 -0
  25. package/button/Button.js +22 -81
  26. package/button/Button.stories.tsx +276 -0
  27. package/button/types.d.ts +57 -0
  28. package/button/types.js +5 -0
  29. package/card/Card.d.ts +4 -0
  30. package/card/Card.js +33 -123
  31. package/card/Card.stories.tsx +201 -0
  32. package/card/ice-cream.jpg +0 -0
  33. package/card/types.d.ts +67 -0
  34. package/card/types.js +5 -0
  35. package/checkbox/Checkbox.d.ts +4 -0
  36. package/checkbox/Checkbox.js +13 -59
  37. package/checkbox/Checkbox.stories.tsx +192 -0
  38. package/checkbox/types.d.ts +60 -0
  39. package/checkbox/types.js +5 -0
  40. package/chip/Chip.js +17 -61
  41. package/chip/Chip.stories.tsx +121 -0
  42. package/common/RequiredComponent.js +3 -11
  43. package/common/variables.js +36 -25
  44. package/date/Date.js +16 -22
  45. package/date-input/DateInput.d.ts +4 -0
  46. package/date-input/DateInput.js +22 -61
  47. package/date-input/DateInput.stories.tsx +138 -0
  48. package/date-input/types.d.ts +100 -0
  49. package/date-input/types.js +5 -0
  50. package/dialog/Dialog.d.ts +4 -0
  51. package/dialog/Dialog.js +20 -73
  52. package/dialog/Dialog.stories.tsx +212 -0
  53. package/dialog/types.d.ts +43 -0
  54. package/dialog/types.js +5 -0
  55. package/dropdown/Dropdown.d.ts +4 -0
  56. package/dropdown/Dropdown.js +44 -171
  57. package/dropdown/types.d.ts +89 -0
  58. package/dropdown/types.js +5 -0
  59. package/file-input/FileInput.d.ts +4 -0
  60. package/file-input/FileInput.js +68 -201
  61. package/file-input/FileItem.d.ts +14 -0
  62. package/file-input/FileItem.js +37 -140
  63. package/file-input/types.d.ts +87 -0
  64. package/file-input/types.js +5 -0
  65. package/footer/Footer.d.ts +4 -0
  66. package/footer/Footer.js +38 -193
  67. package/footer/Footer.stories.jsx +151 -0
  68. package/footer/Icons.js +13 -13
  69. package/footer/types.d.ts +61 -0
  70. package/footer/types.js +5 -0
  71. package/header/Header.d.ts +7 -0
  72. package/header/Header.js +60 -206
  73. package/header/Header.stories.tsx +162 -0
  74. package/header/Icons.js +7 -32
  75. package/header/types.d.ts +47 -0
  76. package/header/types.js +5 -0
  77. package/heading/Heading.d.ts +4 -0
  78. package/heading/Heading.js +24 -95
  79. package/heading/Heading.stories.tsx +53 -0
  80. package/heading/types.d.ts +33 -0
  81. package/heading/types.js +5 -0
  82. package/input-text/Icons.js +2 -2
  83. package/input-text/InputText.js +33 -127
  84. package/layout/ApplicationLayout.js +31 -123
  85. package/layout/Icons.js +7 -7
  86. package/link/Link.d.ts +3 -0
  87. package/link/Link.js +18 -94
  88. package/link/Link.stories.tsx +146 -0
  89. package/link/types.d.ts +74 -0
  90. package/link/types.js +5 -0
  91. package/main.d.ts +44 -40
  92. package/main.js +91 -87
  93. package/number-input/NumberInput.d.ts +4 -0
  94. package/number-input/NumberInput.js +7 -57
  95. package/number-input/NumberInput.stories.tsx +115 -0
  96. package/number-input/NumberInputContext.d.ts +4 -0
  97. package/number-input/NumberInputContext.js +5 -2
  98. package/number-input/numberInputContextTypes.d.ts +19 -0
  99. package/number-input/numberInputContextTypes.js +5 -0
  100. package/number-input/types.d.ts +117 -0
  101. package/number-input/types.js +5 -0
  102. package/package.json +15 -12
  103. package/paginator/Icons.js +9 -9
  104. package/paginator/Paginator.d.ts +4 -0
  105. package/paginator/Paginator.js +24 -131
  106. package/paginator/Paginator.stories.tsx +63 -0
  107. package/paginator/types.d.ts +38 -0
  108. package/paginator/types.js +5 -0
  109. package/password-input/PasswordInput.d.ts +4 -0
  110. package/password-input/PasswordInput.js +22 -61
  111. package/password-input/PasswordInput.stories.tsx +131 -0
  112. package/password-input/types.d.ts +107 -0
  113. package/password-input/types.js +5 -0
  114. package/progress-bar/ProgressBar.d.ts +4 -0
  115. package/progress-bar/ProgressBar.js +20 -92
  116. package/progress-bar/ProgressBar.stories.jsx +58 -0
  117. package/progress-bar/types.d.ts +37 -0
  118. package/progress-bar/types.js +5 -0
  119. package/radio/Radio.d.ts +4 -0
  120. package/radio/Radio.js +15 -50
  121. package/radio/Radio.stories.tsx +192 -0
  122. package/radio/types.d.ts +54 -0
  123. package/radio/types.js +5 -0
  124. package/resultsetTable/ResultsetTable.d.ts +4 -0
  125. package/resultsetTable/ResultsetTable.js +38 -145
  126. package/resultsetTable/types.d.ts +67 -0
  127. package/resultsetTable/types.js +5 -0
  128. package/select/Select.js +161 -434
  129. package/select/Select.stories.tsx +572 -0
  130. package/select/index.d.ts +4 -4
  131. package/sidenav/Sidenav.d.ts +9 -0
  132. package/sidenav/Sidenav.js +19 -62
  133. package/sidenav/Sidenav.stories.tsx +165 -0
  134. package/sidenav/types.d.ts +50 -0
  135. package/sidenav/types.js +5 -0
  136. package/slider/Slider.d.ts +4 -0
  137. package/slider/Slider.js +72 -159
  138. package/slider/Slider.stories.tsx +177 -0
  139. package/slider/types.d.ts +78 -0
  140. package/slider/types.js +5 -0
  141. package/spinner/Spinner.d.ts +4 -0
  142. package/spinner/Spinner.js +43 -174
  143. package/spinner/Spinner.stories.jsx +102 -0
  144. package/spinner/types.d.ts +32 -0
  145. package/spinner/types.js +5 -0
  146. package/switch/Switch.d.ts +4 -0
  147. package/switch/Switch.js +26 -69
  148. package/switch/Switch.stories.tsx +160 -0
  149. package/switch/types.d.ts +58 -0
  150. package/switch/types.js +5 -0
  151. package/table/Table.d.ts +4 -0
  152. package/table/Table.js +10 -24
  153. package/table/Table.stories.jsx +276 -0
  154. package/table/types.d.ts +21 -0
  155. package/table/types.js +5 -0
  156. package/tabs/Tabs.d.ts +4 -0
  157. package/tabs/Tabs.js +31 -161
  158. package/tabs/Tabs.stories.tsx +121 -0
  159. package/tabs/types.d.ts +70 -0
  160. package/tabs/types.js +5 -0
  161. package/tag/Tag.d.ts +4 -0
  162. package/tag/Tag.js +37 -126
  163. package/tag/Tag.stories.tsx +145 -0
  164. package/tag/types.d.ts +60 -0
  165. package/tag/types.js +5 -0
  166. package/text-input/TextInput.d.ts +4 -0
  167. package/text-input/TextInput.js +118 -324
  168. package/text-input/types.d.ts +159 -0
  169. package/text-input/types.js +5 -0
  170. package/textarea/Textarea.js +33 -86
  171. package/textarea/Textarea.stories.jsx +135 -0
  172. package/textarea/index.d.ts +18 -8
  173. package/toggle/Toggle.js +15 -49
  174. package/toggle-group/ToggleGroup.d.ts +4 -0
  175. package/toggle-group/ToggleGroup.js +28 -138
  176. package/toggle-group/ToggleGroup.stories.tsx +178 -0
  177. package/toggle-group/types.d.ts +84 -0
  178. package/toggle-group/types.js +5 -0
  179. package/upload/Upload.js +11 -15
  180. package/upload/buttons-upload/ButtonsUpload.js +13 -37
  181. package/upload/buttons-upload/Icons.js +7 -7
  182. package/upload/dragAndDropArea/DragAndDropArea.js +24 -128
  183. package/upload/dragAndDropArea/Icons.js +6 -6
  184. package/upload/file-upload/FileToUpload.js +16 -90
  185. package/upload/file-upload/Icons.js +13 -13
  186. package/upload/files-upload/FilesToUpload.js +12 -26
  187. package/upload/transaction/Icons.js +31 -31
  188. package/upload/transaction/Transaction.js +17 -61
  189. package/upload/transactions/Transactions.js +13 -57
  190. package/wizard/Icons.js +8 -8
  191. package/wizard/Wizard.d.ts +4 -0
  192. package/wizard/Wizard.js +32 -206
  193. package/wizard/Wizard.stories.jsx +224 -0
  194. package/wizard/types.d.ts +64 -0
  195. package/wizard/types.js +5 -0
  196. package/accordion/index.d.ts +0 -28
  197. package/accordion-group/index.d.ts +0 -16
  198. package/alert/index.d.ts +0 -51
  199. package/box/index.d.ts +0 -25
  200. package/button/Button.stories.js +0 -27
  201. package/button/index.d.ts +0 -24
  202. package/card/index.d.ts +0 -22
  203. package/checkbox/index.d.ts +0 -24
  204. package/date-input/index.d.ts +0 -95
  205. package/dialog/index.d.ts +0 -18
  206. package/dropdown/index.d.ts +0 -26
  207. package/file-input/index.d.ts +0 -81
  208. package/footer/index.d.ts +0 -25
  209. package/header/index.d.ts +0 -25
  210. package/heading/index.d.ts +0 -17
  211. package/link/index.d.ts +0 -23
  212. package/number-input/index.d.ts +0 -113
  213. package/paginator/index.d.ts +0 -20
  214. package/password-input/index.d.ts +0 -94
  215. package/progress-bar/index.d.ts +0 -18
  216. package/radio/index.d.ts +0 -23
  217. package/resultsetTable/index.d.ts +0 -19
  218. package/sidenav/index.d.ts +0 -13
  219. package/slider/index.d.ts +0 -29
  220. package/spinner/index.d.ts +0 -17
  221. package/switch/index.d.ts +0 -24
  222. package/table/index.d.ts +0 -13
  223. package/tabs/index.d.ts +0 -19
  224. package/tag/index.d.ts +0 -24
  225. package/text-input/index.d.ts +0 -135
  226. package/toggle-group/index.d.ts +0 -21
  227. package/wizard/index.d.ts +0 -18
@@ -0,0 +1,159 @@
1
+ /// <reference types="react" />
2
+ declare type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
+ declare type Margin = {
4
+ top?: Space;
5
+ bottom?: Space;
6
+ left?: Space;
7
+ right?: Space;
8
+ };
9
+ declare type SVG = React.SVGProps<SVGSVGElement> | React.FunctionComponent<React.SVGProps<SVGSVGElement>>;
10
+ declare type Action = {
11
+ /**
12
+ * This function will be called when the user clicks the action.
13
+ */
14
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
15
+ /**
16
+ * Icon to be shown in the action.
17
+ */
18
+ icon: string | SVG;
19
+ /**
20
+ * Title of the action.
21
+ */
22
+ title?: string;
23
+ };
24
+ declare type Props = {
25
+ /**
26
+ * Text to be placed above the input. This label will be used as the aria-label attribute of the list of suggestions.
27
+ */
28
+ label?: string;
29
+ /**
30
+ * Name attribute of the input element.
31
+ */
32
+ name?: string;
33
+ /**
34
+ * Value of the input. If undefined, the component will be uncontrolled and the value will be managed internally by the component.
35
+ */
36
+ value?: string;
37
+ /**
38
+ * Helper text to be placed above the input.
39
+ */
40
+ helperText?: string;
41
+ /**
42
+ * Text to be put as placeholder of the input.
43
+ */
44
+ placeholder?: string;
45
+ /**
46
+ * Action to be shown in the input. This is an object composed of an onClick function and an icon,
47
+ * being the latter either an inline svg or a URL to the image.
48
+ */
49
+ action?: Action;
50
+ /**
51
+ * If true, the input will have an action to clear the entered value.
52
+ */
53
+ clearable?: boolean;
54
+ /**
55
+ * If true, the component will be disabled.
56
+ */
57
+ disabled?: boolean;
58
+ /**
59
+ * If true, the input will be optional, showing '(Optional)'
60
+ * next to the label. Otherwise, the field will be considered required and an error will be
61
+ * passed as a parameter to the OnBlur and onChange functions when it has
62
+ * not been filled.
63
+ */
64
+ optional?: boolean;
65
+ /**
66
+ * Prefix to be placed before the input value.
67
+ */
68
+ prefix?: string;
69
+ /**
70
+ * Suffix to be placed after the input value.
71
+ */
72
+ suffix?: string;
73
+ /**
74
+ * This function will be called when the user types within the input
75
+ * element of the component. An object including the current value and
76
+ * the error (if the value entered is not valid) will be passed to this
77
+ * function. If there is no error, error will be null.
78
+ */
79
+ onChange?: (val: {
80
+ value: string;
81
+ error: string | null;
82
+ }) => void;
83
+ /**
84
+ * This function will be called when the input element loses the focus.
85
+ * An object including the input value and the error (if the value
86
+ * entered is not valid) will be passed to this function. If there is no error,
87
+ * error will be null.
88
+ */
89
+ onBlur?: (val: {
90
+ value: string;
91
+ error: string | null;
92
+ }) => void;
93
+ /**
94
+ * If it is defined, the component will change its appearance, showing
95
+ * the error below the input component. If it is not defined, the error
96
+ * messages will be managed internally, but never displayed on its own.
97
+ */
98
+ error?: string;
99
+ /**
100
+ * These are the options to be displayed as suggestions. It can be either an array or a function:
101
+ * - Array: Array of options that will be filtered by the component.
102
+ * - Function: This function will be called when the user changes the value, we will send as a parameter the new value;
103
+ * apart from that this function should return one promise on which we should make 'then' to get the suggestions filtered.
104
+ */
105
+ suggestions?: string[] | ((value: string) => Promise<string[]>);
106
+ /**
107
+ * Regular expression that defines the valid format allowed by the input.
108
+ * This will be checked both when the input element loses the focus and
109
+ * while typing within it. If the string entered does not match the
110
+ * pattern, the onBlur and onChange functions will be called with the
111
+ * current value and an internal error informing that this value does not
112
+ * match the pattern. If the pattern is met, the error parameter of both
113
+ * events will be null.
114
+ */
115
+ pattern?: string;
116
+ /**
117
+ * Specifies the minimun length allowed by the input.
118
+ * This will be checked both when the input element loses the
119
+ * focus and while typing within it. If the string entered does not
120
+ * comply the minimum length, the onBlur and onChange functions will be called
121
+ * with the current value and an internal error informing that the value
122
+ * length does not comply the specified range. If a valid length is
123
+ * reached, the error parameter of both events will be null.
124
+ */
125
+ minLength?: number;
126
+ /**
127
+ * Specifies the maximum length allowed by the input.
128
+ * This will be checked both when the input element loses the
129
+ * focus and while typing within it. If the string entered does not
130
+ * comply the maximum length, the onBlur and onChange functions will be called
131
+ * with the current value and an internal error informing that the value
132
+ * length does not comply the specified range. If a valid length is
133
+ * reached, the error parameter of both events will be null.
134
+ */
135
+ maxLength?: number;
136
+ /**
137
+ * HTML autocomplete attribute. Lets the user specify if any permission the user agent has to provide automated assistance in filling out the input value.
138
+ * Its value must be one of all the possible values of the HTML autocomplete attribute: 'on', 'off', 'email', 'username', 'new-password', ...
139
+ */
140
+ autocomplete?: string;
141
+ /**
142
+ * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
143
+ * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
144
+ */
145
+ margin?: Space | Margin;
146
+ /**
147
+ * Size of the component ('small' | 'medium' | 'large' | 'fillParent').
148
+ */
149
+ size?: "small" | "medium" | "large" | "fillParent";
150
+ /**
151
+ * Value of the tabindex attribute.
152
+ */
153
+ tabIndex?: number;
154
+ };
155
+ /**
156
+ * Reference to the component.
157
+ */
158
+ export declare type RefType = HTMLDivElement;
159
+ export default Props;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof3 = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -33,74 +33,16 @@ var _uuid = require("uuid");
33
33
 
34
34
  var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext.js"));
35
35
 
36
- function _templateObject6() {
37
- var data = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: 0.75rem;\n font-weight: 400;\n min-height: 1.5em;\n line-height: 1.5em;\n"]);
38
-
39
- _templateObject6 = function _templateObject6() {
40
- return data;
41
- };
42
-
43
- return data;
44
- }
45
-
46
- function _templateObject5() {
47
- var data = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n ", "\n\n margin: calc(1rem * 0.25) 0;\n padding: calc(1rem * 0.5) calc(1rem * 1);\n box-shadow: 0 0 0 2px transparent;\n border-radius: calc(1rem * 0.25);\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"]);
48
-
49
- _templateObject5 = function _templateObject5() {
50
- return data;
51
- };
52
-
53
- return data;
54
- }
55
-
56
- function _templateObject4() {
57
- var data = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"]);
58
-
59
- _templateObject4 = function _templateObject4() {
60
- return data;
61
- };
62
-
63
- return data;
64
- }
65
-
66
- function _templateObject3() {
67
- var data = (0, _taggedTemplateLiteral2["default"])(["\n font-weight: ", ";\n"]);
36
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
68
37
 
69
- _templateObject3 = function _templateObject3() {
70
- return data;
71
- };
72
-
73
- return data;
74
- }
75
-
76
- function _templateObject2() {
77
- var data = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"]);
78
-
79
- _templateObject2 = function _templateObject2() {
80
- return data;
81
- };
82
-
83
- return data;
84
- }
85
-
86
- function _templateObject() {
87
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"]);
38
+ 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); }
88
39
 
89
- _templateObject = function _templateObject() {
90
- return data;
91
- };
92
-
93
- return data;
94
- }
40
+ 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; }
95
41
 
96
42
  var getNotOptionalErrorMessage = function getNotOptionalErrorMessage() {
97
43
  return "This field is required. Please, enter a value.";
98
44
  };
99
45
 
100
- var getLengthErrorMessage = function getLengthErrorMessage(length) {
101
- return "Min length ".concat(length.min, ", max length ").concat(length.max, ".");
102
- };
103
-
104
46
  var getPatternErrorMessage = function getPatternErrorMessage() {
105
47
  return "Please match the format requested.";
106
48
  };
@@ -109,7 +51,7 @@ var patternMatch = function patternMatch(pattern, value) {
109
51
  return new RegExp(pattern).test(value);
110
52
  };
111
53
 
112
- var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
54
+ var DxcTextarea = /*#__PURE__*/_react["default"].forwardRef(function (_ref, ref) {
113
55
  var _ref$label = _ref.label,
114
56
  label = _ref$label === void 0 ? "" : _ref$label,
115
57
  _ref$name = _ref.name,
@@ -132,7 +74,8 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
132
74
  _ref$error = _ref.error,
133
75
  error = _ref$error === void 0 ? "" : _ref$error,
134
76
  pattern = _ref.pattern,
135
- length = _ref.length,
77
+ minLength = _ref.minLength,
78
+ maxLength = _ref.maxLength,
136
79
  _ref$autocomplete = _ref.autocomplete,
137
80
  autocomplete = _ref$autocomplete === void 0 ? "off" : _ref$autocomplete,
138
81
  margin = _ref.margin,
@@ -155,12 +98,16 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
155
98
  var textareaRef = (0, _react.useRef)(null);
156
99
  var errorId = "error-message-".concat(textareaId);
157
100
 
101
+ var getLengthErrorMessage = function getLengthErrorMessage() {
102
+ return "Min length ".concat(minLength, ", max length ").concat(maxLength, ".");
103
+ };
104
+
158
105
  var isNotOptional = function isNotOptional(value) {
159
106
  return value === "" && !optional;
160
107
  };
161
108
 
162
109
  var isLengthIncorrect = function isLengthIncorrect(value) {
163
- return value !== "" && length && length.min && length.max && (value.length < length.min || value.length > length.max);
110
+ return value !== "" && minLength && maxLength && (value.length < minLength || value.length > maxLength);
164
111
  };
165
112
 
166
113
  var changeValue = function changeValue(newValue) {
@@ -170,7 +117,7 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
170
117
  error: getNotOptionalErrorMessage()
171
118
  });else if (isLengthIncorrect(newValue)) onChange === null || onChange === void 0 ? void 0 : onChange({
172
119
  value: newValue,
173
- error: getLengthErrorMessage(length)
120
+ error: getLengthErrorMessage()
174
121
  });else if (newValue && pattern && !patternMatch(pattern, newValue)) onChange === null || onChange === void 0 ? void 0 : onChange({
175
122
  value: newValue,
176
123
  error: getPatternErrorMessage()
@@ -186,7 +133,7 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
186
133
  error: getNotOptionalErrorMessage()
187
134
  });else if (isLengthIncorrect(event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
188
135
  value: event.target.value,
189
- error: getLengthErrorMessage(length)
136
+ error: getLengthErrorMessage()
190
137
  });else if (event.target.value && pattern && !patternMatch(pattern, event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
191
138
  value: event.target.value,
192
139
  error: getPatternErrorMessage()
@@ -209,20 +156,20 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
209
156
  textareaRef.current.style.height = "".concat(newHeight, "px");
210
157
  }
211
158
  }, [value, verticalGrow, rows, innerValue]);
212
- return _react["default"].createElement(_styledComponents.ThemeProvider, {
159
+ return /*#__PURE__*/_react["default"].createElement(_styledComponents.ThemeProvider, {
213
160
  theme: colorsTheme.textarea
214
- }, _react["default"].createElement(TextareaContainer, {
161
+ }, /*#__PURE__*/_react["default"].createElement(TextareaContainer, {
215
162
  margin: margin,
216
163
  size: size,
217
164
  ref: ref
218
- }, _react["default"].createElement(Label, {
165
+ }, /*#__PURE__*/_react["default"].createElement(Label, {
219
166
  htmlFor: textareaId,
220
167
  disabled: disabled,
221
168
  backgroundType: backgroundType
222
- }, label, " ", optional && _react["default"].createElement(OptionalLabel, null, "(Optional)")), _react["default"].createElement(HelperText, {
169
+ }, label, " ", optional && /*#__PURE__*/_react["default"].createElement(OptionalLabel, null, "(Optional)")), /*#__PURE__*/_react["default"].createElement(HelperText, {
223
170
  disabled: disabled,
224
171
  backgroundType: backgroundType
225
- }, helperText), _react["default"].createElement(Textarea, {
172
+ }, helperText), /*#__PURE__*/_react["default"].createElement(Textarea, {
226
173
  id: textareaId,
227
174
  name: name,
228
175
  value: value !== null && value !== void 0 ? value : innerValue,
@@ -233,8 +180,8 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
233
180
  onBlur: handleTOnBlur,
234
181
  disabled: disabled,
235
182
  error: error,
236
- minLength: length === null || length === void 0 ? void 0 : length.min,
237
- maxLength: length === null || length === void 0 ? void 0 : length.max,
183
+ minLength: minLength,
184
+ maxLength: maxLength,
238
185
  autoComplete: autocomplete,
239
186
  backgroundType: backgroundType,
240
187
  ref: textareaRef,
@@ -242,7 +189,7 @@ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
242
189
  "aria-invalid": error ? "true" : "false",
243
190
  "aria-describedby": error ? errorId : undefined,
244
191
  "aria-required": optional ? "false" : "true"
245
- }), !disabled && _react["default"].createElement(Error, {
192
+ }), !disabled && /*#__PURE__*/_react["default"].createElement(Error, {
246
193
  id: errorId,
247
194
  backgroundType: backgroundType
248
195
  }, error)));
@@ -259,7 +206,7 @@ var calculateWidth = function calculateWidth(margin, size) {
259
206
  return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
260
207
  };
261
208
 
262
- var TextareaContainer = _styledComponents["default"].div(_templateObject(), function (props) {
209
+ var TextareaContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n\n width: ", ";\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"])), function (props) {
263
210
  return calculateWidth(props.margin, props.size);
264
211
  }, function (props) {
265
212
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
@@ -273,7 +220,7 @@ var TextareaContainer = _styledComponents["default"].div(_templateObject(), func
273
220
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
274
221
  });
275
222
 
276
- var Label = _styledComponents["default"].label(_templateObject2(), function (props) {
223
+ var Label = _styledComponents["default"].label(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
277
224
  return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
278
225
  }, function (props) {
279
226
  return props.theme.fontFamily;
@@ -287,11 +234,11 @@ var Label = _styledComponents["default"].label(_templateObject2(), function (pro
287
234
  return props.theme.labelLineHeight;
288
235
  });
289
236
 
290
- var OptionalLabel = _styledComponents["default"].span(_templateObject3(), function (props) {
237
+ var OptionalLabel = _styledComponents["default"].span(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n font-weight: ", ";\n"])), function (props) {
291
238
  return props.theme.optionalLabelFontWeight;
292
239
  });
293
240
 
294
- var HelperText = _styledComponents["default"].span(_templateObject4(), function (props) {
241
+ var HelperText = _styledComponents["default"].span(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n line-height: ", ";\n"])), function (props) {
295
242
  return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledHelperTextFontColorOnDark : props.theme.disabledHelperTextFontColor : props.backgroundType === "dark" ? props.theme.helperTextFontColorOnDark : props.theme.helperTextFontColor;
296
243
  }, function (props) {
297
244
  return props.theme.fontFamily;
@@ -305,10 +252,12 @@ var HelperText = _styledComponents["default"].span(_templateObject4(), function
305
252
  return props.theme.helperTextLineHeight;
306
253
  });
307
254
 
308
- var Textarea = _styledComponents["default"].textarea(_templateObject5(), function (props) {
255
+ var Textarea = _styledComponents["default"].textarea(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n ", "\n\n margin: ", ";\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 (props) {
309
256
  if (props.verticalGrow === "none") return "resize: none;";else if (props.verticalGrow === "auto") return "resize: none; overflow: hidden;";else if (props.verticalGrow === "manual") return "resize: vertical;";else return "resize: none;";
310
257
  }, function (props) {
311
258
  if (props.disabled) return props.backgroundType === "dark" ? "background-color: ".concat(props.theme.disabledContainerFillColorOnDark, ";") : "background-color: ".concat(props.theme.disabledContainerFillColor, ";");else return "background-color: transparent;";
259
+ }, function (props) {
260
+ return "".concat(props.theme.inputMarginTop, " 0 ").concat(props.theme.inputMarginBottom, " 0");
312
261
  }, function (props) {
313
262
  if (props.disabled) return props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;else return props.backgroundType === "dark" ? props.theme.enabledBorderColorOnDark : props.theme.enabledBorderColor;
314
263
  }, function (props) {
@@ -331,7 +280,7 @@ var Textarea = _styledComponents["default"].textarea(_templateObject5(), functio
331
280
  return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledPlaceholderFontColorOnDark : props.theme.disabledPlaceholderFontColor : props.backgroundType === "dark" ? props.theme.placeholderFontColorOnDark : props.theme.placeholderFontColor;
332
281
  });
333
282
 
334
- var Error = _styledComponents["default"].span(_templateObject6(), function (props) {
283
+ var Error = _styledComponents["default"].span(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-family: ", ";\n font-size: 0.75rem;\n font-weight: 400;\n min-height: 1.5em;\n line-height: 1.5em;\n"])), function (props) {
335
284
  return props.backgroundType === "dark" ? props.theme.errorMessageColorOnDark : props.theme.errorMessageColor;
336
285
  }, function (props) {
337
286
  return props.theme.fontFamily;
@@ -345,10 +294,8 @@ DxcTextarea.propTypes = {
345
294
  placeholder: _propTypes["default"].string,
346
295
  verticalGrow: _propTypes["default"].oneOf(["auto", "none", "manual"]),
347
296
  rows: _propTypes["default"].number,
348
- length: _propTypes["default"].shape({
349
- min: _propTypes["default"].number,
350
- max: _propTypes["default"].number
351
- }),
297
+ minLength: _propTypes["default"].number,
298
+ maxLength: _propTypes["default"].number,
352
299
  pattern: _propTypes["default"].string,
353
300
  disabled: _propTypes["default"].bool,
354
301
  optional: _propTypes["default"].bool,
@@ -0,0 +1,135 @@
1
+ import React from "react";
2
+ import DxcTextarea from "./Textarea";
3
+ import Title from "../../.storybook/components/Title";
4
+ import ExampleContainer from "../../.storybook/components/ExampleContainer";
5
+ import { BackgroundColorProvider } from "../BackgroundColorContext";
6
+ import DarkContainer from "../../.storybook/components/DarkSection";
7
+
8
+ export default {
9
+ title: "Textarea",
10
+ component: DxcTextarea,
11
+ };
12
+
13
+ export const Chromatic = () => (
14
+ <>
15
+ <>
16
+ <ExampleContainer pseudoState="pseudo-hover">
17
+ <Title title="Hovered" theme="light" level={4} />
18
+ <DxcTextarea label="Hovered" />
19
+ </ExampleContainer>
20
+ <ExampleContainer pseudoState="pseudo-focus">
21
+ <Title title="Focused" theme="light" level={4} />
22
+ <DxcTextarea label="Focused" />
23
+ </ExampleContainer>
24
+ <ExampleContainer>
25
+ <Title title="Disabled" theme="light" level={4} />
26
+ <DxcTextarea
27
+ label="Disabled"
28
+ optional
29
+ helperText="Sample text"
30
+ placeholder="Enter your text here..."
31
+ disabled
32
+ />
33
+ </ExampleContainer>
34
+ <ExampleContainer>
35
+ <Title title="Disabled with value" theme="light" level={4} />
36
+ <DxcTextarea label="Disabled" value="Example text" disabled />
37
+ </ExampleContainer>
38
+ <ExampleContainer>
39
+ <Title title="With error" theme="light" level={4} />
40
+ <DxcTextarea
41
+ label="Textarea with error"
42
+ helperText="Helper text"
43
+ placeholder="Enter your text here..."
44
+ error="Error message"
45
+ />
46
+ </ExampleContainer>
47
+ <ExampleContainer>
48
+ <Title title="Helper text and optional with value" theme="light" level={4} />
49
+ <DxcTextarea label="Helper & optional" value="Some text" helperText="Sample text" optional />
50
+ </ExampleContainer>
51
+ <ExampleContainer>
52
+ <Title title="Resizable" theme="light" level={4} />
53
+ <DxcTextarea label="With resizer" helperText="Helper text" verticalGrow="manual" />
54
+ </ExampleContainer>
55
+ <ExampleContainer>
56
+ <Title title="Grow manual" theme="light" level={4} />
57
+ <DxcTextarea
58
+ label="Manual vertical grow"
59
+ verticalGrow="manual"
60
+ value="Long textttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt"
61
+ />
62
+ </ExampleContainer>
63
+ </>
64
+ <BackgroundColorProvider color="#333333">
65
+ <DarkContainer>
66
+ <>
67
+ <Title title="Helper text and optional with value" theme="dark" level={4} />
68
+ <DxcTextarea label="Helper & optional" value="Some text" margin="medium" helperText="Sample text" optional />
69
+
70
+ <Title title="Disabled" theme="dark" level={4} />
71
+ <DxcTextarea
72
+ label="Disabled"
73
+ margin="medium"
74
+ optional
75
+ helperText="Sample text"
76
+ placeholder="Enter your text here..."
77
+ disabled
78
+ />
79
+ <Title title="Disabled with value" theme="dark" level={4} />
80
+ <DxcTextarea label="Disabled" margin="medium" value="Example text" disabled />
81
+ <Title title="With error" theme="dark" level={4} />
82
+ <DxcTextarea
83
+ label="Textarea with error"
84
+ margin="medium"
85
+ helperText="Helper text"
86
+ placeholder="Enter your text here..."
87
+ error="Error message"
88
+ />
89
+ </>
90
+ </DarkContainer>
91
+ </BackgroundColorProvider>
92
+ <Title title="Sizes" theme="light" level={2} />
93
+ <ExampleContainer>
94
+ <DxcTextarea label="Small" size="small" />
95
+ </ExampleContainer>
96
+ <ExampleContainer>
97
+ <DxcTextarea label="Medium" size="medium" />
98
+ </ExampleContainer>
99
+ <ExampleContainer>
100
+ <DxcTextarea label="Large" size="large" />
101
+ </ExampleContainer>
102
+ <ExampleContainer>
103
+ <DxcTextarea label="Fill parent" size="fillParent" />
104
+ </ExampleContainer>
105
+ <Title title="Margins" theme="light" level={2} />
106
+ <ExampleContainer>
107
+ <Title title="Xxsmall margin" theme="light" level={4} />
108
+ <DxcTextarea label="Xxsmmall" margin="xxsmall" />
109
+ </ExampleContainer>
110
+ <ExampleContainer>
111
+ <Title title="Xsmall margin" theme="light" level={4} />
112
+ <DxcTextarea label="xsmmall" margin="xsmall" />
113
+ </ExampleContainer>
114
+ <ExampleContainer>
115
+ <Title title="Small margin" theme="light" level={4} />
116
+ <DxcTextarea label="smmall" margin="small" />
117
+ </ExampleContainer>
118
+ <ExampleContainer>
119
+ <Title title="Medium margin" theme="light" level={4} />
120
+ <DxcTextarea label="medium" margin="medium" />
121
+ </ExampleContainer>
122
+ <ExampleContainer>
123
+ <Title title="Large margin" theme="light" level={4} />
124
+ <DxcTextarea label="Large" margin="large" />
125
+ </ExampleContainer>
126
+ <ExampleContainer>
127
+ <Title title="Xlarge margin" theme="light" level={4} />
128
+ <DxcTextarea label="Xlarge" margin="xlarge" />
129
+ </ExampleContainer>
130
+ <ExampleContainer>
131
+ <Title title="Xxlarge margin" theme="light" level={4} />
132
+ <DxcTextarea label="Xxlarge" margin="xxlarge" />
133
+ </ExampleContainer>
134
+ </>
135
+ );
@@ -33,9 +33,9 @@ type Props = {
33
33
  */
34
34
  disabled?: boolean;
35
35
  /**
36
- * If true, the textarea will be optional, showing '(Optional)'
37
- * next to the label. Otherwise, the field will be considered required
38
- * and an error will be passed as a parameter to the OnBlur and onChange functions
36
+ * If true, the textarea will be optional, showing '(Optional)'
37
+ * next to the label. Otherwise, the field will be considered required
38
+ * and an error will be passed as a parameter to the OnBlur and onChange functions
39
39
  * when it has not been filled.
40
40
  */
41
41
  optional?: boolean;
@@ -53,14 +53,14 @@ type Props = {
53
53
  /**
54
54
  * This function will be called when the user types within the textarea.
55
55
  * An object including the current value and the error (if the value
56
- * entered is not valid) will be passed to this function.
56
+ * entered is not valid) will be passed to this function.
57
57
  * If there is no error, error will be null.
58
58
  */
59
59
  onChange?: (val: { value: string; error: string }) => void;
60
60
  /**
61
61
  * This function will be called when the textarea loses the focus. An
62
62
  * object including the textarea value and the error (if the value entered
63
- * is not valid) will be passed to this function. If there is no error,
63
+ * is not valid) will be passed to this function. If there is no error,
64
64
  * error will be null.
65
65
  */
66
66
  onBlur?: (val: { value: string; error: string }) => void;
@@ -81,15 +81,25 @@ type Props = {
81
81
  */
82
82
  pattern?: string;
83
83
  /**
84
- * Specifies the minimun and maximum length allowed by the textarea.
84
+ * Specifies the minimun length allowed by the textarea.
85
85
  * This will be checked both when the textarea loses the
86
86
  * focus and while typing within it. If the string entered does not
87
- * comply the length, the onBlur and onChange functions will be called
87
+ * comply the minimum length, the onBlur and onChange functions will be called
88
88
  * with the current value and an internal error informing that the value
89
89
  * length does not comply the specified range. If a valid length is
90
90
  * reached, the error parameter of both events will be null.
91
91
  */
92
- length?: { min: number; max: number };
92
+ minLength?: number;
93
+ /**
94
+ * Specifies the maximum length allowed by the textarea.
95
+ * This will be checked both when the textarea loses the
96
+ * focus and while typing within it. If the string entered does not
97
+ * comply the maximum length, the onBlur and onChange functions will be called
98
+ * with the current value and an internal error informing that the value
99
+ * length does not comply the specified range. If a valid length is
100
+ * reached, the error parameter of both events will be null.
101
+ */
102
+ maxLength?: number;
93
103
  /**
94
104
  * HTML autocomplete attribute. Lets the user specify if any permission the user agent has to provide automated assistance in filling out the textarea value.
95
105
  * Its value must be one of all the possible values of the HTML autocomplete attribute: 'on', 'off', 'email', 'username', 'new-password', ...