@dxc-technology/halstack-react 0.0.0-f44cd28 → 0.0.0-f77ec3a

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 (248) hide show
  1. package/README.md +2 -2
  2. package/babel.config.js +0 -1
  3. package/dist/BackgroundColorContext.js +46 -0
  4. package/dist/ThemeContext.js +213 -153
  5. package/dist/V3Select/V3Select.js +549 -0
  6. package/dist/V3Select/index.d.ts +27 -0
  7. package/dist/V3Textarea/V3Textarea.js +264 -0
  8. package/dist/V3Textarea/index.d.ts +27 -0
  9. package/dist/accordion/Accordion.js +131 -46
  10. package/dist/accordion/index.d.ts +28 -0
  11. package/dist/accordion-group/AccordionGroup.js +34 -4
  12. package/dist/accordion-group/index.d.ts +16 -0
  13. package/dist/alert/Alert.js +180 -80
  14. package/dist/alert/index.d.ts +51 -0
  15. package/dist/badge/Badge.js +28 -7
  16. package/dist/box/Box.js +29 -18
  17. package/dist/box/index.d.ts +25 -0
  18. package/dist/button/Button.js +62 -23
  19. package/dist/button/index.d.ts +24 -0
  20. package/dist/card/Card.js +72 -35
  21. package/dist/card/index.d.ts +22 -0
  22. package/dist/checkbox/Checkbox.js +98 -28
  23. package/dist/checkbox/index.d.ts +24 -0
  24. package/dist/chip/Chip.js +92 -32
  25. package/dist/chip/index.d.ts +22 -0
  26. package/dist/common/utils.js +2 -22
  27. package/dist/common/variables.js +1404 -179
  28. package/dist/date/Date.js +65 -38
  29. package/dist/date/index.d.ts +27 -0
  30. package/dist/date-input/DateInput.js +400 -0
  31. package/dist/date-input/index.d.ts +95 -0
  32. package/dist/dialog/Dialog.js +54 -31
  33. package/dist/dialog/index.d.ts +18 -0
  34. package/dist/dropdown/Dropdown.js +173 -75
  35. package/dist/dropdown/index.d.ts +26 -0
  36. package/dist/file-input/FileInput.js +644 -0
  37. package/dist/file-input/FileItem.js +287 -0
  38. package/dist/file-input/index.d.ts +81 -0
  39. package/dist/footer/Footer.js +89 -34
  40. package/dist/footer/Icons.js +77 -0
  41. package/dist/footer/index.d.ts +25 -0
  42. package/dist/header/Header.js +190 -88
  43. package/dist/header/Icons.js +59 -0
  44. package/dist/header/index.d.ts +25 -0
  45. package/dist/heading/Heading.js +93 -16
  46. package/dist/heading/index.d.ts +17 -0
  47. package/dist/input-text/Icons.js +22 -0
  48. package/dist/input-text/InputText.js +247 -101
  49. package/dist/input-text/index.d.ts +36 -0
  50. package/dist/layout/ApplicationLayout.js +15 -18
  51. package/dist/layout/Icons.js +55 -0
  52. package/dist/link/Link.js +84 -34
  53. package/dist/link/index.d.ts +23 -0
  54. package/dist/main.d.ts +40 -0
  55. package/dist/main.js +72 -16
  56. package/dist/number-input/NumberInput.js +136 -0
  57. package/dist/number-input/NumberInputContext.js +16 -0
  58. package/dist/number-input/index.d.ts +113 -0
  59. package/dist/paginator/Icons.js +66 -0
  60. package/dist/paginator/Paginator.js +102 -44
  61. package/dist/paginator/index.d.ts +20 -0
  62. package/dist/password-input/PasswordInput.js +203 -0
  63. package/dist/password-input/index.d.ts +94 -0
  64. package/dist/progress-bar/ProgressBar.js +91 -33
  65. package/dist/progress-bar/index.d.ts +18 -0
  66. package/dist/radio/Radio.js +30 -11
  67. package/dist/radio/index.d.ts +23 -0
  68. package/dist/resultsetTable/ResultsetTable.js +79 -48
  69. package/dist/resultsetTable/index.d.ts +19 -0
  70. package/dist/select/Select.js +899 -278
  71. package/dist/select/index.d.ts +53 -0
  72. package/dist/sidenav/Sidenav.js +64 -8
  73. package/dist/sidenav/index.d.ts +13 -0
  74. package/dist/slider/Slider.js +212 -65
  75. package/dist/slider/index.d.ts +29 -0
  76. package/dist/spinner/Spinner.js +247 -56
  77. package/dist/spinner/index.d.ts +17 -0
  78. package/dist/stories/Button.js +71 -0
  79. package/dist/stories/Button.stories.js +55 -0
  80. package/dist/stories/Header.js +67 -0
  81. package/dist/stories/Header.stories.js +31 -0
  82. package/dist/stories/Introduction.stories.mdx +211 -0
  83. package/dist/stories/Page.js +68 -0
  84. package/dist/stories/Page.stories.js +39 -0
  85. package/dist/stories/assets/code-brackets.svg +1 -0
  86. package/dist/stories/assets/colors.svg +1 -0
  87. package/dist/stories/assets/comments.svg +1 -0
  88. package/dist/stories/assets/direction.svg +1 -0
  89. package/dist/stories/assets/flow.svg +1 -0
  90. package/dist/stories/assets/plugin.svg +1 -0
  91. package/dist/stories/assets/repo.svg +1 -0
  92. package/dist/stories/assets/stackalt.svg +1 -0
  93. package/dist/stories/button.css +30 -0
  94. package/dist/stories/header.css +26 -0
  95. package/dist/stories/page.css +69 -0
  96. package/dist/switch/Switch.js +51 -19
  97. package/dist/switch/index.d.ts +24 -0
  98. package/dist/table/Table.js +48 -18
  99. package/dist/table/index.d.ts +13 -0
  100. package/dist/tabs/Tabs.js +58 -17
  101. package/dist/tabs/index.d.ts +19 -0
  102. package/dist/tag/Tag.js +68 -35
  103. package/dist/tag/index.d.ts +24 -0
  104. package/dist/text-input/TextInput.js +974 -0
  105. package/dist/text-input/index.d.ts +135 -0
  106. package/dist/textarea/Textarea.js +246 -97
  107. package/dist/textarea/index.d.ts +117 -0
  108. package/dist/toggle/Toggle.js +16 -19
  109. package/dist/toggle/index.d.ts +21 -0
  110. package/dist/toggle-group/ToggleGroup.js +150 -32
  111. package/dist/toggle-group/index.d.ts +21 -0
  112. package/dist/upload/Upload.js +13 -8
  113. package/dist/upload/buttons-upload/ButtonsUpload.js +32 -19
  114. package/dist/upload/buttons-upload/Icons.js +40 -0
  115. package/dist/upload/dragAndDropArea/DragAndDropArea.js +84 -34
  116. package/dist/upload/dragAndDropArea/Icons.js +39 -0
  117. package/dist/upload/file-upload/FileToUpload.js +64 -33
  118. package/dist/upload/file-upload/Icons.js +66 -0
  119. package/dist/upload/files-upload/FilesToUpload.js +16 -16
  120. package/dist/upload/index.d.ts +15 -0
  121. package/dist/upload/transaction/Icons.js +160 -0
  122. package/dist/upload/transaction/Transaction.js +42 -49
  123. package/dist/upload/transactions/Transactions.js +38 -20
  124. package/dist/wizard/Icons.js +65 -0
  125. package/dist/wizard/Wizard.js +126 -47
  126. package/dist/wizard/index.d.ts +18 -0
  127. package/package.json +19 -13
  128. package/test/AccordionGroup.test.js +16 -0
  129. package/test/Date.test.js +15 -13
  130. package/test/DateInput.test.js +242 -0
  131. package/test/Dropdown.test.js +15 -0
  132. package/test/FileInput.test.js +201 -0
  133. package/test/Footer.test.js +2 -7
  134. package/test/Header.test.js +5 -10
  135. package/test/Heading.test.js +60 -12
  136. package/test/InputText.test.js +1 -2
  137. package/test/Link.test.js +3 -2
  138. package/test/NumberInput.test.js +259 -0
  139. package/test/Paginator.test.js +6 -2
  140. package/test/PasswordInput.test.js +83 -0
  141. package/test/ResultsetTable.test.js +6 -6
  142. package/test/Select.test.js +371 -148
  143. package/test/Slider.test.js +9 -17
  144. package/test/Spinner.test.js +5 -0
  145. package/test/TextInput.test.js +732 -0
  146. package/test/Textarea.test.js +193 -0
  147. package/test/ToggleGroup.test.js +5 -1
  148. package/test/Upload.test.js +1 -1
  149. package/test/V3Select.test.js +212 -0
  150. package/test/{TextArea.test.js → V3TextArea.test.js} +6 -7
  151. package/dist/accordion/Accordion.stories.js +0 -207
  152. package/dist/accordion/readme.md +0 -96
  153. package/dist/accordion-group/AccordionGroup.stories.js +0 -207
  154. package/dist/accordion-group/readme.md +0 -70
  155. package/dist/alert/Alert.stories.js +0 -158
  156. package/dist/alert/close.svg +0 -4
  157. package/dist/alert/error.svg +0 -4
  158. package/dist/alert/info.svg +0 -4
  159. package/dist/alert/readme.md +0 -43
  160. package/dist/alert/success.svg +0 -4
  161. package/dist/alert/warning.svg +0 -4
  162. package/dist/button/Button.stories.js +0 -224
  163. package/dist/button/readme.md +0 -93
  164. package/dist/checkbox/Checkbox.stories.js +0 -144
  165. package/dist/checkbox/readme.md +0 -116
  166. package/dist/common/services/example-service.js +0 -10
  167. package/dist/common/services/example-service.test.js +0 -12
  168. package/dist/date/Date.stories.js +0 -205
  169. package/dist/date/calendar.svg +0 -1
  170. package/dist/date/calendar_dark.svg +0 -1
  171. package/dist/date/readme.md +0 -73
  172. package/dist/dialog/Dialog.stories.js +0 -217
  173. package/dist/dialog/readme.md +0 -32
  174. package/dist/dropdown/Dropdown.stories.js +0 -249
  175. package/dist/dropdown/baseline-arrow_drop_down.svg +0 -1
  176. package/dist/dropdown/baseline-arrow_drop_down_wh.svg +0 -4
  177. package/dist/dropdown/baseline-arrow_drop_up.svg +0 -1
  178. package/dist/dropdown/baseline-arrow_drop_up_wh.svg +0 -4
  179. package/dist/dropdown/readme.md +0 -69
  180. package/dist/footer/Footer.stories.js +0 -94
  181. package/dist/footer/dxc_logo_wht.png +0 -0
  182. package/dist/footer/readme.md +0 -41
  183. package/dist/header/Header.stories.js +0 -176
  184. package/dist/header/close_icon.svg +0 -1
  185. package/dist/header/dxc_logo_black.png +0 -0
  186. package/dist/header/dxc_logo_blk_rgb.svg +0 -6
  187. package/dist/header/dxc_logo_white.png +0 -0
  188. package/dist/header/hamb_menu_black.svg +0 -1
  189. package/dist/header/hamb_menu_white.svg +0 -1
  190. package/dist/header/readme.md +0 -33
  191. package/dist/input-text/InputText.stories.js +0 -209
  192. package/dist/input-text/error.svg +0 -1
  193. package/dist/input-text/readme.md +0 -91
  194. package/dist/layout/facebook.svg +0 -45
  195. package/dist/layout/linkedin.svg +0 -50
  196. package/dist/layout/twitter.svg +0 -53
  197. package/dist/link/readme.md +0 -51
  198. package/dist/paginator/images/next.svg +0 -3
  199. package/dist/paginator/images/nextPage.svg +0 -3
  200. package/dist/paginator/images/previous.svg +0 -3
  201. package/dist/paginator/images/previousPage.svg +0 -3
  202. package/dist/paginator/readme.md +0 -50
  203. package/dist/progress-bar/ProgressBar.stories.js +0 -280
  204. package/dist/progress-bar/readme.md +0 -63
  205. package/dist/radio/Radio.stories.js +0 -166
  206. package/dist/radio/readme.md +0 -70
  207. package/dist/resultsetTable/arrow_downward-24px_wht.svg +0 -1
  208. package/dist/resultsetTable/arrow_upward-24px_wht.svg +0 -1
  209. package/dist/resultsetTable/unfold_more-24px_wht.svg +0 -1
  210. package/dist/select/Select.stories.js +0 -235
  211. package/dist/select/readme.md +0 -72
  212. package/dist/slider/Slider.stories.js +0 -241
  213. package/dist/slider/readme.md +0 -64
  214. package/dist/spinner/Spinner.stories.js +0 -183
  215. package/dist/spinner/readme.md +0 -65
  216. package/dist/switch/Switch.stories.js +0 -134
  217. package/dist/switch/readme.md +0 -133
  218. package/dist/tabs/Tabs.stories.js +0 -130
  219. package/dist/tabs/readme.md +0 -78
  220. package/dist/tabs-for-sections/TabsForSections.js +0 -92
  221. package/dist/tabs-for-sections/readme.md +0 -78
  222. package/dist/toggle/Toggle.stories.js +0 -297
  223. package/dist/toggle/readme.md +0 -80
  224. package/dist/toggle-group/readme.md +0 -82
  225. package/dist/upload/Upload.stories.js +0 -72
  226. package/dist/upload/buttons-upload/drag-drop-icon.svg +0 -4
  227. package/dist/upload/buttons-upload/upload-button.svg +0 -1
  228. package/dist/upload/dragAndDropArea/upload_drop.svg +0 -4
  229. package/dist/upload/dragAndDropArea/upload_file.svg +0 -4
  230. package/dist/upload/file-upload/audio-icon.svg +0 -4
  231. package/dist/upload/file-upload/close.svg +0 -4
  232. package/dist/upload/file-upload/file-icon.svg +0 -4
  233. package/dist/upload/file-upload/video-icon.svg +0 -4
  234. package/dist/upload/readme.md +0 -37
  235. package/dist/upload/transaction/audio-icon-err.svg +0 -4
  236. package/dist/upload/transaction/audio-icon.svg +0 -4
  237. package/dist/upload/transaction/error-icon.svg +0 -4
  238. package/dist/upload/transaction/file-icon-err.svg +0 -4
  239. package/dist/upload/transaction/file-icon.svg +0 -4
  240. package/dist/upload/transaction/image-icon-err.svg +0 -4
  241. package/dist/upload/transaction/image-icon.svg +0 -4
  242. package/dist/upload/transaction/success-icon.svg +0 -4
  243. package/dist/upload/transaction/video-icon-err.svg +0 -4
  244. package/dist/upload/transaction/video-icon.svg +0 -4
  245. package/dist/wizard/invalid_icon.svg +0 -6
  246. package/dist/wizard/valid_icon.svg +0 -6
  247. package/dist/wizard/validation-wrong.svg +0 -6
  248. package/test/TabsForSections.test.js +0 -34
@@ -0,0 +1,135 @@
1
+ type Size = "small" | "medium" | "large" | "fillParent";
2
+ type Space = "xxsmall" | "xsmall" | "small" | "medium" | "large" | "xlarge" | "xxlarge";
3
+ type Margin = {
4
+ top?: Space;
5
+ bottom?: Space;
6
+ left?: Space;
7
+ right?: Space;
8
+ };
9
+ type SVG = string | (HTMLElement & SVGElement);
10
+ type Action = {
11
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
12
+ icon: SVG;
13
+ };
14
+
15
+ type Props = {
16
+ /**
17
+ * Text to be placed above the input. This label will be used as the aria-label attribute of the list of suggestions.
18
+ */
19
+ label?: string;
20
+ /**
21
+ * Name attribute of the input element.
22
+ */
23
+ name?: string;
24
+ /**
25
+ * Value of the input. If undefined, the component will be uncontrolled and the value will be managed internally by the component.
26
+ */
27
+ value?: string;
28
+ /**
29
+ * Helper text to be placed above the input.
30
+ */
31
+ helperText?: string;
32
+ /**
33
+ * Text to be put as placeholder of the input.
34
+ */
35
+ placeholder?: string;
36
+ /**
37
+ * Action to be shown in the input. This is an object composed of an onClick function and an icon,
38
+ * being the latter either an inline svg or a URL to the image.
39
+ */
40
+ action?: Action;
41
+ /**
42
+ * If true, the input will have an action to clear the entered value.
43
+ */
44
+ clearable?: boolean;
45
+ /**
46
+ * If true, the component will be disabled.
47
+ */
48
+ disabled?: boolean;
49
+ /**
50
+ * If true, the input will be optional, showing '(Optional)'
51
+ * next to the label. Otherwise, the field will be considered required and an error will be
52
+ * passed as a parameter to the OnBlur and onChange functions when it has
53
+ * not been filled.
54
+ */
55
+ optional?: boolean;
56
+ /**
57
+ * Prefix to be placed before the input value.
58
+ */
59
+ prefix?: string;
60
+ /**
61
+ * Suffix to be placed after the input value.
62
+ */
63
+ suffix?: string;
64
+ /**
65
+ * This function will be called when the user types within the input
66
+ * element of the component. An object including the current value and
67
+ * the error (if the value entered is not valid) will be passed to this
68
+ * function. If there is no error, error will be null.
69
+ */
70
+ onChange?: (val: { value: string; error: string }) => void;
71
+ /**
72
+ * This function will be called when the input element loses the focus.
73
+ * An object including the input value and the error (if the value
74
+ * entered is not valid) will be passed to this function. If there is no error,
75
+ * error will be null.
76
+ */
77
+ onBlur?: (obj: { value: string; error: string }) => void;
78
+ /**
79
+ * If it is defined, the component will change its appearance, showing
80
+ * the error below the input component. If it is not defined, the error
81
+ * messages will be managed internally, but never displayed on its own.
82
+ */
83
+ error?: string;
84
+ /**
85
+ * These are the options to be displayed as suggestions. It can be either an array or a function:
86
+ * - Array: Array of options that will be filtered by the component.
87
+ * - Function: This function will be called when the user changes the value, we will send as a parameter the new value;
88
+ * apart from that this function should return one promise on which we should make 'then' to get the suggestions filtered.
89
+ */
90
+ suggestions?: string[] | (() => void);
91
+ /**
92
+ * Regular expression that defines the valid format allowed by the input.
93
+ * This will be checked both when the input element loses the focus and
94
+ * while typing within it. If the string entered does not match the
95
+ * pattern, the onBlur and onChange functions will be called with the
96
+ * current value and an internal error informing that this value does not
97
+ * match the pattern. If the pattern is met, the error parameter of both
98
+ * events will be null.
99
+ */
100
+ pattern?: string;
101
+ /**
102
+ * Specifies the minimun and maximum length allowed by the input.
103
+ * This will be checked both when the input element loses the
104
+ * focus and while typing within it. If the string entered does not
105
+ * comply the length, the onBlur and onChange functions will be called
106
+ * with the current value and an internal error informing that the value
107
+ * length does not comply the specified range. If a valid length is
108
+ * reached, the error parameter of both events will be null.
109
+ */
110
+ length?: { min?: number; max?: number };
111
+ /**
112
+ * HTML autocomplete attribute. Lets the user specify if any permission the user agent has to provide automated assistance in filling out the input value.
113
+ * Its value must be one of all the possible values of the HTML autocomplete attribute: 'on', 'off', 'email', 'username', 'new-password', ...
114
+ */
115
+ autocomplete?: string;
116
+ /**
117
+ * Size of the margin to be applied to the component ('xxsmall' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge').
118
+ * You can pass an object with 'top', 'bottom', 'left' and 'right' properties in order to specify different margin sizes.
119
+ */
120
+ margin?: Space | Margin;
121
+ /**
122
+ * Size of the component ('small' | 'medium' | 'large' | 'fillParent').
123
+ */
124
+ size?: Size;
125
+ /**
126
+ * Value of the tabindex attribute.
127
+ */
128
+ tabIndex?: number;
129
+ /**
130
+ * Reference to the component.
131
+ */
132
+ ref?: React.RefObject<HTMLDivElement>;
133
+ };
134
+
135
+ export default function DxcTextInput(props: Props): JSX.Element;
@@ -21,22 +21,70 @@ var _react = _interopRequireWildcard(require("react"));
21
21
 
22
22
  var _styledComponents = _interopRequireWildcard(require("styled-components"));
23
23
 
24
- var _TextField = _interopRequireDefault(require("@material-ui/core/TextField"));
24
+ var _utils = require("../common/utils.js");
25
25
 
26
- var _propTypes = _interopRequireDefault(require("prop-types"));
26
+ var _useTheme = _interopRequireDefault(require("../useTheme.js"));
27
27
 
28
- require("../common/OpenSans.css");
28
+ var _propTypes = _interopRequireDefault(require("prop-types"));
29
29
 
30
30
  var _variables = require("../common/variables.js");
31
31
 
32
- var _utils = require("../common/utils.js");
32
+ var _uuid = require("uuid");
33
33
 
34
- var _useTheme = _interopRequireDefault(require("../useTheme.js"));
34
+ var _BackgroundColorContext = _interopRequireDefault(require("../BackgroundColorContext.js"));
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"]);
35
58
 
36
- var _RequiredComponent = _interopRequireDefault(require("../common/RequiredComponent"));
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"]);
68
+
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
+ }
37
85
 
38
86
  function _templateObject() {
39
- var data = (0, _taggedTemplateLiteral2["default"])(["\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n\n display: inline-block;\n position: relative;\n height: auto;\n width: ", ";\n .MuiTextField-root {\n width: 100%;\n font-family: \"Open Sans\", sans-serif;\n .MuiFormHelperText-root {\n font-family: \"Open Sans\", sans-serif;\n margin-top: 6px;\n }\n .MuiFormLabel-root {\n font-size: 16px;\n color: ", ";\n &.Mui-disabled {\n color: ", " !important;\n cursor: not-allowed;\n }\n padding-left: \"inherit\";\n &.Mui-focused {\n color: ", ";\n &.MuiInputLabel-shrink {\n transform: \"translate(0, 1.5px) scale(0.75);\";\n }\n }\n &.MuiInputLabel-shrink {\n font-family: \"Open Sans\", sans-serif;\n transform: \"translate(0, 1.5px) scale(0.75)\";\n }\n &.Mui-error {\n color: ", ";\n }\n\n &:not(.MuiInputLabel-shrink) {\n font-family: \"Open Sans\", sans-serif;\n color: ", ";\n & + div,\n & + div + p {\n color: ", ";\n }\n }\n\n &.MuiInputLabel-shrink {\n & + div::before {\n border-color: ", ";\n }\n & + div + p {\n color: ", ";\n }\n }\n }\n .MuiInputBase-root.MuiInput-root.MuiInput-underline {\n font-family: \"Open Sans\", sans-serif;\n &::before {\n border-bottom: ", ";\n }\n &:not(.Mui-error)::before,\n &:not(&.Mui-focused)::before {\n border-bottom: ", ";\n }\n &::after {\n border-bottom: ", ";\n }\n\n .MuiInputBase-inputMultiline {\n overflow: auto !important;\n\n ::-webkit-scrollbar {\n width: 3px;\n }\n\n ::-webkit-scrollbar-track {\n background-color: ", ";\n border-radius: 3px;\n }\n\n ::-webkit-scrollbar-thumb {\n background-color: ", ";\n border-radius: 3px;\n }\n }\n\n &.Mui-error {\n &::before {\n border-width: 1px;\n border-color: ", ";\n }\n &::after {\n transform: scaleX(0);\n }\n }\n\n &.Mui-focused {\n &::after {\n border-width: 2px;\n border-color: ", ";\n transform: scaleX(1);\n }\n\n &.Mui-error::after {\n border-color: ", ";\n }\n }\n\n &.Mui-disabled {\n cursor: not-allowed;\n\n &::before {\n border-bottom: ", ";\n border-bottom-style: solid;\n }\n }\n .MuiInputBase-input {\n padding-left: \"inherit\";\n color: ", ";\n text-overflow: ellipsis;\n &.Mui-disabled {\n cursor: not-allowed;\n }\n }\n\n &:hover:not(.Mui-disabled):before &:hover:not(.Mui-error):before {\n border-bottom: ", ";\n }\n }\n\n & > p {\n &.Mui-error {\n color: ", ";\n }\n &.Mui-disabled {\n color: ", " !important;\n cursor: not-allowed;\n }\n }\n }\n"]);
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"]);
40
88
 
41
89
  _templateObject = function _templateObject() {
42
90
  return data;
@@ -45,102 +93,175 @@ function _templateObject() {
45
93
  return data;
46
94
  }
47
95
 
48
- var DxcTextarea = function DxcTextarea(_ref) {
96
+ var getNotOptionalErrorMessage = function getNotOptionalErrorMessage() {
97
+ return "This field is required. Please, enter a value.";
98
+ };
99
+
100
+ var getLengthErrorMessage = function getLengthErrorMessage(length) {
101
+ return "Min length ".concat(length.min, ", max length ").concat(length.max, ".");
102
+ };
103
+
104
+ var getPatternErrorMessage = function getPatternErrorMessage() {
105
+ return "Please match the format requested.";
106
+ };
107
+
108
+ var patternMatch = function patternMatch(pattern, value) {
109
+ return new RegExp(pattern).test(value);
110
+ };
111
+
112
+ var DxcTextarea = _react["default"].forwardRef(function (_ref, ref) {
49
113
  var _ref$label = _ref.label,
50
- label = _ref$label === void 0 ? " " : _ref$label,
114
+ label = _ref$label === void 0 ? "" : _ref$label,
51
115
  _ref$name = _ref.name,
52
116
  name = _ref$name === void 0 ? "" : _ref$name,
53
117
  value = _ref.value,
54
- _ref$assistiveText = _ref.assistiveText,
55
- assistiveText = _ref$assistiveText === void 0 ? "" : _ref$assistiveText,
56
- _ref$disabled = _ref.disabled,
57
- disabled = _ref$disabled === void 0 ? false : _ref$disabled,
58
- _ref$onChange = _ref.onChange,
59
- onChange = _ref$onChange === void 0 ? "" : _ref$onChange,
60
- _ref$onBlur = _ref.onBlur,
61
- onBlur = _ref$onBlur === void 0 ? "" : _ref$onBlur,
62
- _ref$numRows = _ref.numRows,
63
- numRows = _ref$numRows === void 0 ? 4 : _ref$numRows,
64
- _ref$invalid = _ref.invalid,
65
- invalid = _ref$invalid === void 0 ? false : _ref$invalid,
66
- _ref$required = _ref.required,
67
- required = _ref$required === void 0 ? false : _ref$required,
118
+ _ref$helperText = _ref.helperText,
119
+ helperText = _ref$helperText === void 0 ? "" : _ref$helperText,
68
120
  _ref$placeholder = _ref.placeholder,
69
121
  placeholder = _ref$placeholder === void 0 ? "" : _ref$placeholder,
122
+ _ref$disabled = _ref.disabled,
123
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
124
+ _ref$optional = _ref.optional,
125
+ optional = _ref$optional === void 0 ? false : _ref$optional,
126
+ _ref$verticalGrow = _ref.verticalGrow,
127
+ verticalGrow = _ref$verticalGrow === void 0 ? "auto" : _ref$verticalGrow,
128
+ _ref$rows = _ref.rows,
129
+ rows = _ref$rows === void 0 ? 4 : _ref$rows,
130
+ onChange = _ref.onChange,
131
+ onBlur = _ref.onBlur,
132
+ _ref$error = _ref.error,
133
+ error = _ref$error === void 0 ? "" : _ref$error,
134
+ pattern = _ref.pattern,
135
+ length = _ref.length,
136
+ _ref$autocomplete = _ref.autocomplete,
137
+ autocomplete = _ref$autocomplete === void 0 ? "off" : _ref$autocomplete,
70
138
  margin = _ref.margin,
71
139
  _ref$size = _ref.size,
72
- size = _ref$size === void 0 ? "medium" : _ref$size;
140
+ size = _ref$size === void 0 ? "medium" : _ref$size,
141
+ _ref$tabIndex = _ref.tabIndex,
142
+ tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
73
143
 
74
144
  var _useState = (0, _react.useState)(""),
75
145
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
76
146
  innerValue = _useState2[0],
77
147
  setInnerValue = _useState2[1];
78
148
 
149
+ var _useState3 = (0, _react.useState)("textarea-".concat((0, _uuid.v4)())),
150
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 1),
151
+ textareaId = _useState4[0];
152
+
79
153
  var colorsTheme = (0, _useTheme["default"])();
154
+ var backgroundType = (0, _react.useContext)(_BackgroundColorContext["default"]);
155
+ var textareaRef = (0, _react.useRef)(null);
156
+ var errorId = "error-message-".concat(textareaId);
80
157
 
81
- var handlerTextareaChange = function handlerTextareaChange(event) {
82
- if (value === null || value === undefined) {
83
- if (typeof onChange === "function") {
84
- setInnerValue(event.target.value);
85
- onChange(event.target.value);
86
- } else {
87
- setInnerValue(event.target.value);
88
- }
89
- } else if (onChange !== "") {
90
- if (typeof onChange === "function") {
91
- onChange(event.target.value);
92
- } else {
93
- setInnerValue(event.target.value);
94
- }
95
- }
158
+ var isNotOptional = function isNotOptional(value) {
159
+ return value === "" && !optional;
96
160
  };
97
161
 
98
- var handlerTextareaBlur = function handlerTextareaBlur(event) {
99
- setInnerValue(event.target.value);
162
+ var isLengthIncorrect = function isLengthIncorrect(value) {
163
+ return value !== "" && length && length.min && length.max && (value.length < length.min || value.length > length.max);
164
+ };
100
165
 
101
- if (onBlur) {
102
- onBlur(event.target.value);
103
- }
166
+ var changeValue = function changeValue(newValue) {
167
+ value !== null && value !== void 0 ? value : setInnerValue(newValue);
168
+ if (isNotOptional(newValue)) onChange === null || onChange === void 0 ? void 0 : onChange({
169
+ value: newValue,
170
+ error: getNotOptionalErrorMessage()
171
+ });else if (isLengthIncorrect(newValue)) onChange === null || onChange === void 0 ? void 0 : onChange({
172
+ value: newValue,
173
+ error: getLengthErrorMessage(length)
174
+ });else if (newValue && pattern && !patternMatch(pattern, newValue)) onChange === null || onChange === void 0 ? void 0 : onChange({
175
+ value: newValue,
176
+ error: getPatternErrorMessage()
177
+ });else onChange === null || onChange === void 0 ? void 0 : onChange({
178
+ value: newValue,
179
+ error: null
180
+ });
181
+ };
182
+
183
+ var handleTOnBlur = function handleTOnBlur(event) {
184
+ if (isNotOptional(event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
185
+ value: event.target.value,
186
+ error: getNotOptionalErrorMessage()
187
+ });else if (isLengthIncorrect(event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
188
+ value: event.target.value,
189
+ error: getLengthErrorMessage(length)
190
+ });else if (event.target.value && pattern && !patternMatch(pattern, event.target.value)) onBlur === null || onBlur === void 0 ? void 0 : onBlur({
191
+ value: event.target.value,
192
+ error: getPatternErrorMessage()
193
+ });else onBlur === null || onBlur === void 0 ? void 0 : onBlur({
194
+ value: event.target.value,
195
+ error: null
196
+ });
104
197
  };
105
198
 
199
+ var handleTOnChange = function handleTOnChange(event) {
200
+ changeValue(event.target.value);
201
+ };
202
+
203
+ (0, _react.useLayoutEffect)(function () {
204
+ if (verticalGrow === "auto") {
205
+ var textareaLineHeight = parseInt(window.getComputedStyle(textareaRef.current)["line-height"]);
206
+ var textareaPaddingTopBottom = parseInt(window.getComputedStyle(textareaRef.current)["padding-top"]) * 2;
207
+ textareaRef.current.style.height = "".concat(textareaLineHeight * rows, "px");
208
+ var newHeight = textareaRef.current.scrollHeight - textareaPaddingTopBottom;
209
+ textareaRef.current.style.height = "".concat(newHeight, "px");
210
+ }
211
+ }, [value, verticalGrow, rows, innerValue]);
106
212
  return _react["default"].createElement(_styledComponents.ThemeProvider, {
107
213
  theme: colorsTheme.textarea
108
- }, _react["default"].createElement(TextContainer, {
109
- required: required,
110
- assistiveText: assistiveText,
214
+ }, _react["default"].createElement(TextareaContainer, {
111
215
  margin: margin,
112
- size: size
113
- }, _react["default"].createElement(_TextField["default"], {
114
- error: invalid,
115
- value: value !== null ? value : innerValue,
216
+ size: size,
217
+ ref: ref
218
+ }, _react["default"].createElement(Label, {
219
+ htmlFor: textareaId,
220
+ disabled: disabled,
221
+ backgroundType: backgroundType
222
+ }, label, " ", optional && _react["default"].createElement(OptionalLabel, null, "(Optional)")), _react["default"].createElement(HelperText, {
223
+ disabled: disabled,
224
+ backgroundType: backgroundType
225
+ }, helperText), _react["default"].createElement(Textarea, {
226
+ id: textareaId,
116
227
  name: name,
117
- multiline: true,
228
+ value: value !== null && value !== void 0 ? value : innerValue,
229
+ placeholder: placeholder,
230
+ verticalGrow: verticalGrow,
231
+ rows: rows,
232
+ onChange: handleTOnChange,
233
+ onBlur: handleTOnBlur,
118
234
  disabled: disabled,
119
- label: required ? _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement(_RequiredComponent["default"], null), label) : label,
120
- helperText: assistiveText,
121
- onChange: handlerTextareaChange,
122
- onBlur: onBlur && handlerTextareaBlur || null,
123
- rows: numRows,
124
- placeholder: placeholder
125
- })));
126
- };
235
+ error: error,
236
+ minLength: length === null || length === void 0 ? void 0 : length.min,
237
+ maxLength: length === null || length === void 0 ? void 0 : length.max,
238
+ autoComplete: autocomplete,
239
+ backgroundType: backgroundType,
240
+ ref: textareaRef,
241
+ tabIndex: tabIndex,
242
+ "aria-invalid": error ? "true" : "false",
243
+ "aria-describedby": error ? errorId : undefined,
244
+ "aria-required": optional ? "false" : "true"
245
+ }), !disabled && _react["default"].createElement(Error, {
246
+ id: errorId,
247
+ backgroundType: backgroundType
248
+ }, error)));
249
+ });
127
250
 
128
251
  var sizes = {
129
- small: "42px",
130
- medium: "240px",
252
+ small: "240px",
253
+ medium: "360px",
131
254
  large: "480px",
132
255
  fillParent: "100%"
133
256
  };
134
257
 
135
258
  var calculateWidth = function calculateWidth(margin, size) {
136
- if (size === "fillParent") {
137
- return "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")");
138
- }
139
-
140
- return sizes[size];
259
+ return size === "fillParent" ? "calc(".concat(sizes[size], " - ").concat((0, _utils.getMargin)(margin, "left"), " - ").concat((0, _utils.getMargin)(margin, "right"), ")") : sizes[size];
141
260
  };
142
261
 
143
- var TextContainer = _styledComponents["default"].div(_templateObject(), function (props) {
262
+ var TextareaContainer = _styledComponents["default"].div(_templateObject(), function (props) {
263
+ return calculateWidth(props.margin, props.size);
264
+ }, function (props) {
144
265
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
145
266
  }, function (props) {
146
267
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.top ? _variables.spaces[props.margin.top] : "";
@@ -150,71 +271,99 @@ var TextContainer = _styledComponents["default"].div(_templateObject(), function
150
271
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.bottom ? _variables.spaces[props.margin.bottom] : "";
151
272
  }, function (props) {
152
273
  return props.margin && (0, _typeof2["default"])(props.margin) === "object" && props.margin.left ? _variables.spaces[props.margin.left] : "";
274
+ });
275
+
276
+ var Label = _styledComponents["default"].label(_templateObject2(), function (props) {
277
+ return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledLabelFontColorOnDark : props.theme.disabledLabelFontColor : props.backgroundType === "dark" ? props.theme.labelFontColorOnDark : props.theme.labelFontColor;
153
278
  }, function (props) {
154
- return calculateWidth(props.margin, props.size);
279
+ return props.theme.fontFamily;
155
280
  }, function (props) {
156
- return props.theme.fontColor;
281
+ return props.theme.labelFontSize;
157
282
  }, function (props) {
158
- return props.theme.disabledFontColor;
283
+ return props.theme.labelFontStyle;
159
284
  }, function (props) {
160
- return props.theme.fontColor;
285
+ return props.theme.labelFontWeight;
161
286
  }, function (props) {
162
- return props.theme.error;
287
+ return props.theme.labelLineHeight;
288
+ });
289
+
290
+ var OptionalLabel = _styledComponents["default"].span(_templateObject3(), function (props) {
291
+ return props.theme.optionalLabelFontWeight;
292
+ });
293
+
294
+ var HelperText = _styledComponents["default"].span(_templateObject4(), function (props) {
295
+ return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledHelperTextFontColorOnDark : props.theme.disabledHelperTextFontColor : props.backgroundType === "dark" ? props.theme.helperTextFontColorOnDark : props.theme.helperTextFontColor;
163
296
  }, function (props) {
164
- return props.theme.fontColor;
297
+ return props.theme.fontFamily;
165
298
  }, function (props) {
166
- return props.theme.fontColor;
299
+ return props.theme.helperTextFontSize;
167
300
  }, function (props) {
168
- return props.theme.fontColor;
301
+ return props.theme.helperTextFontStyle;
169
302
  }, function (props) {
170
- return props.theme.fontColor;
303
+ return props.theme.helperTextFontWeight;
171
304
  }, function (props) {
172
- return "1px solid ".concat(props.theme.fontColor);
305
+ return props.theme.helperTextLineHeight;
306
+ });
307
+
308
+ var Textarea = _styledComponents["default"].textarea(_templateObject5(), function (props) {
309
+ 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;";
173
310
  }, function (props) {
174
- return "1px solid ".concat(props.theme.fontColor);
311
+ if (props.disabled) return props.backgroundType === "dark" ? "background-color: ".concat(props.theme.disabledContainerFillColorOnDark, ";") : "background-color: ".concat(props.theme.disabledContainerFillColor, ";");else return "background-color: transparent;";
175
312
  }, function (props) {
176
- return "2px solid ".concat(props.theme.fontColor);
313
+ if (props.disabled) return props.backgroundType === "dark" ? props.theme.disabledBorderColorOnDark : props.theme.disabledBorderColor;else return props.backgroundType === "dark" ? props.theme.enabledBorderColorOnDark : props.theme.enabledBorderColor;
177
314
  }, function (props) {
178
- return props.theme.scrollBarTrackColor;
315
+ 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 ");
179
316
  }, function (props) {
180
- return props.theme.scrollBarThumbColor;
317
+ return props.disabled && "cursor: not-allowed;";
181
318
  }, function (props) {
182
- return props.theme.error;
319
+ return !props.disabled && "\n &:hover {\n border-color: ".concat(props.error ? "transparent" : 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 {\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 }\n &: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 }\n ");
183
320
  }, function (props) {
184
- return props.theme.fontColor;
321
+ return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledValueFontColorOnDark : props.theme.disabledValueFontColor : props.backgroundType === "dark" ? props.theme.valueFontColorOnDark : props.theme.valueFontColor;
185
322
  }, function (props) {
186
- return props.theme.error;
323
+ return props.theme.fontFamily;
187
324
  }, function (props) {
188
- return "1px solid ".concat(props.theme.disabledFontColor, " !important");
325
+ return props.theme.valueFontSize;
189
326
  }, function (props) {
190
- return props.theme.fontColor;
327
+ return props.theme.valueFontStyle;
191
328
  }, function (props) {
192
- return props.theme.fontColor;
329
+ return props.theme.valueFontWeight;
193
330
  }, function (props) {
194
- return "".concat(props.theme.error, " !important");
331
+ return props.disabled ? props.backgroundType === "dark" ? props.theme.disabledPlaceholderFontColorOnDark : props.theme.disabledPlaceholderFontColor : props.backgroundType === "dark" ? props.theme.placeholderFontColorOnDark : props.theme.placeholderFontColor;
332
+ });
333
+
334
+ var Error = _styledComponents["default"].span(_templateObject6(), function (props) {
335
+ return props.backgroundType === "dark" ? props.theme.errorMessageColorOnDark : props.theme.errorMessageColor;
195
336
  }, function (props) {
196
- return props.theme.disabledFontColor;
337
+ return props.theme.fontFamily;
197
338
  });
198
339
 
199
340
  DxcTextarea.propTypes = {
200
341
  label: _propTypes["default"].string,
201
342
  name: _propTypes["default"].string,
202
343
  value: _propTypes["default"].string,
203
- assistiveText: _propTypes["default"].string,
204
- disabled: _propTypes["default"].bool,
205
- required: _propTypes["default"].bool,
206
- invalid: _propTypes["default"].bool,
344
+ helperText: _propTypes["default"].string,
207
345
  placeholder: _propTypes["default"].string,
346
+ verticalGrow: _propTypes["default"].oneOf(["auto", "none", "manual"]),
347
+ rows: _propTypes["default"].number,
348
+ length: _propTypes["default"].shape({
349
+ min: _propTypes["default"].number,
350
+ max: _propTypes["default"].number
351
+ }),
352
+ pattern: _propTypes["default"].string,
353
+ disabled: _propTypes["default"].bool,
354
+ optional: _propTypes["default"].bool,
208
355
  onChange: _propTypes["default"].func,
209
356
  onBlur: _propTypes["default"].func,
210
- numRows: _propTypes["default"].number,
211
- size: _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(sizes))),
357
+ error: _propTypes["default"].string,
358
+ autocomplete: _propTypes["default"].string,
212
359
  margin: _propTypes["default"].oneOfType([_propTypes["default"].shape({
213
360
  top: _propTypes["default"].oneOf(Object.keys(_variables.spaces)),
214
361
  bottom: _propTypes["default"].oneOf(Object.keys(_variables.spaces)),
215
362
  left: _propTypes["default"].oneOf(Object.keys(_variables.spaces)),
216
363
  right: _propTypes["default"].oneOf(Object.keys(_variables.spaces))
217
- }), _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(_variables.spaces)))])
364
+ }), _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(_variables.spaces)))]),
365
+ size: _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(sizes))),
366
+ tabIndex: _propTypes["default"].number
218
367
  };
219
368
  var _default = DxcTextarea;
220
369
  exports["default"] = _default;