@dxc-technology/halstack-react 0.0.0-5168fa4 → 0.0.0-51a5c42

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 (139) hide show
  1. package/README.md +1 -1
  2. package/babel.config.js +6 -2
  3. package/dist/BackgroundColorContext.js +46 -0
  4. package/dist/ThemeContext.js +235 -2
  5. package/dist/V3Textarea/V3Textarea.js +264 -0
  6. package/dist/accordion/Accordion.js +170 -81
  7. package/dist/accordion-group/AccordionGroup.js +186 -0
  8. package/dist/alert/Alert.js +184 -83
  9. package/dist/alert/index.d.ts +51 -0
  10. package/dist/badge/Badge.js +63 -0
  11. package/dist/box/Box.js +31 -23
  12. package/dist/button/Button.js +82 -27
  13. package/dist/card/Card.js +64 -56
  14. package/dist/checkbox/Checkbox.js +108 -32
  15. package/dist/chip/Chip.js +135 -40
  16. package/dist/common/RequiredComponent.js +2 -8
  17. package/dist/common/utils.js +2 -22
  18. package/dist/common/variables.js +1471 -134
  19. package/dist/date/Date.js +97 -62
  20. package/dist/date-input/DateInput.js +400 -0
  21. package/dist/date-input/index.d.ts +95 -0
  22. package/dist/dialog/Dialog.js +61 -36
  23. package/dist/dropdown/Dropdown.js +226 -94
  24. package/dist/file-input/FileInput.js +644 -0
  25. package/dist/file-input/FileItem.js +280 -0
  26. package/dist/file-input/index.d.ts +81 -0
  27. package/dist/footer/Footer.js +90 -36
  28. package/dist/footer/dxc_logo.svg +15 -0
  29. package/dist/footer/readme.md +1 -1
  30. package/dist/header/Header.js +173 -89
  31. package/dist/header/Icons.js +59 -0
  32. package/dist/heading/Heading.js +81 -22
  33. package/dist/input-text/InputText.js +292 -104
  34. package/dist/layout/ApplicationLayout.js +331 -0
  35. package/dist/layout/facebook.svg +45 -0
  36. package/dist/layout/linkedin.svg +50 -0
  37. package/dist/layout/twitter.svg +53 -0
  38. package/dist/link/Link.js +142 -34
  39. package/dist/main.d.ts +8 -0
  40. package/dist/main.js +111 -7
  41. package/dist/new-select/NewSelect.js +836 -0
  42. package/dist/new-select/index.d.ts +53 -0
  43. package/dist/number-input/NumberInput.js +136 -0
  44. package/dist/number-input/NumberInputContext.js +16 -0
  45. package/dist/number-input/index.d.ts +113 -0
  46. package/dist/paginator/Paginator.js +160 -49
  47. package/dist/password-input/PasswordInput.js +198 -0
  48. package/dist/password-input/index.d.ts +94 -0
  49. package/dist/progress-bar/ProgressBar.js +97 -44
  50. package/dist/radio/Radio.js +39 -21
  51. package/dist/resultsetTable/ResultsetTable.js +93 -69
  52. package/dist/select/Select.js +250 -143
  53. package/dist/sidenav/Sidenav.js +87 -125
  54. package/dist/slider/Slider.js +206 -70
  55. package/dist/spinner/Spinner.js +249 -64
  56. package/dist/switch/Switch.js +52 -25
  57. package/dist/table/Table.js +63 -15
  58. package/dist/tabs/Tabs.js +208 -35
  59. package/dist/tabs-for-sections/TabsForSections.js +1 -16
  60. package/dist/tag/Tag.js +100 -35
  61. package/dist/text-input/TextInput.js +971 -0
  62. package/dist/text-input/index.d.ts +135 -0
  63. package/dist/textarea/Textarea.js +250 -107
  64. package/dist/textarea/index.d.ts +117 -0
  65. package/dist/toggle/Toggle.js +16 -19
  66. package/dist/toggle-group/ToggleGroup.js +327 -0
  67. package/dist/upload/Upload.js +16 -11
  68. package/dist/upload/buttons-upload/ButtonsUpload.js +34 -20
  69. package/dist/upload/dragAndDropArea/DragAndDropArea.js +78 -31
  70. package/dist/upload/file-upload/FileToUpload.js +50 -24
  71. package/dist/upload/files-upload/FilesToUpload.js +16 -16
  72. package/dist/upload/readme.md +2 -2
  73. package/dist/upload/transaction/Transaction.js +44 -24
  74. package/dist/upload/transactions/Transactions.js +38 -20
  75. package/dist/useTheme.js +22 -0
  76. package/dist/wizard/Wizard.js +156 -55
  77. package/dist/wizard/invalid_icon.svg +4 -5
  78. package/dist/wizard/valid_icon.svg +4 -5
  79. package/package.json +14 -6
  80. package/test/AccordionGroup.test.js +125 -0
  81. package/test/Date.test.js +49 -45
  82. package/test/DateInput.test.js +242 -0
  83. package/test/Dropdown.test.js +19 -4
  84. package/test/FileInput.test.js +201 -0
  85. package/test/Header.test.js +5 -10
  86. package/test/InputText.test.js +53 -41
  87. package/test/Link.test.js +25 -7
  88. package/test/NumberInput.test.js +259 -0
  89. package/test/Paginator.test.js +72 -60
  90. package/test/PasswordInput.test.js +83 -0
  91. package/test/ResultsetTable.test.js +66 -19
  92. package/test/Select.test.js +55 -34
  93. package/test/Sidenav.test.js +22 -64
  94. package/test/Slider.test.js +17 -0
  95. package/test/Spinner.test.js +5 -0
  96. package/test/Tabs.test.js +21 -0
  97. package/test/TextInput.test.js +732 -0
  98. package/test/Textarea.test.js +193 -0
  99. package/test/ToggleGroup.test.js +85 -0
  100. package/test/Upload.test.js +5 -5
  101. package/test/{TextArea.test.js → V3TextArea.test.js} +6 -7
  102. package/dist/accordion/Accordion.stories.js +0 -207
  103. package/dist/accordion/readme.md +0 -96
  104. package/dist/alert/Alert.stories.js +0 -158
  105. package/dist/alert/close.svg +0 -4
  106. package/dist/alert/error.svg +0 -4
  107. package/dist/alert/info.svg +0 -4
  108. package/dist/alert/readme.md +0 -43
  109. package/dist/alert/success.svg +0 -4
  110. package/dist/alert/warning.svg +0 -4
  111. package/dist/button/Button.stories.js +0 -224
  112. package/dist/button/readme.md +0 -93
  113. package/dist/common/services/example-service.js +0 -10
  114. package/dist/common/services/example-service.test.js +0 -12
  115. package/dist/date/calendar.svg +0 -1
  116. package/dist/date/calendar_dark.svg +0 -1
  117. package/dist/dialog/Dialog.stories.js +0 -217
  118. package/dist/dialog/readme.md +0 -32
  119. package/dist/dropdown/Dropdown.stories.js +0 -249
  120. package/dist/dropdown/baseline-arrow_drop_down.svg +0 -1
  121. package/dist/dropdown/baseline-arrow_drop_down_wh.svg +0 -4
  122. package/dist/dropdown/baseline-arrow_drop_up.svg +0 -1
  123. package/dist/dropdown/baseline-arrow_drop_up_wh.svg +0 -4
  124. package/dist/dropdown/readme.md +0 -69
  125. package/dist/footer/Footer.stories.js +0 -94
  126. package/dist/footer/dxc_logo_wht.png +0 -0
  127. package/dist/header/Header.stories.js +0 -176
  128. package/dist/header/close_icon.svg +0 -1
  129. package/dist/header/dxc_logo_black.png +0 -0
  130. package/dist/header/dxc_logo_white.png +0 -0
  131. package/dist/header/hamb_menu_black.svg +0 -1
  132. package/dist/header/hamb_menu_white.svg +0 -1
  133. package/dist/header/readme.md +0 -33
  134. package/dist/input-text/InputText.stories.js +0 -209
  135. package/dist/select/Select.stories.js +0 -235
  136. package/dist/select/readme.md +0 -72
  137. package/dist/sidenav/arrow_icon.svg +0 -3
  138. package/dist/slider/Slider.stories.js +0 -241
  139. package/test/Toggle.test.js +0 -43
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
+
3
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
@@ -9,26 +11,48 @@ exports["default"] = void 0;
9
11
 
10
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
13
 
12
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
-
14
14
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
15
15
 
16
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
17
+
16
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
17
19
 
18
- var _react = _interopRequireDefault(require("react"));
20
+ var _react = _interopRequireWildcard(require("react"));
19
21
 
20
- var _styledComponents = _interopRequireDefault(require("styled-components"));
22
+ var _styledComponents = _interopRequireWildcard(require("styled-components"));
21
23
 
22
24
  var _propTypes = _interopRequireDefault(require("prop-types"));
23
25
 
24
26
  var _variables = require("../common/variables.js");
25
27
 
28
+ var _useTheme = _interopRequireDefault(require("../useTheme.js"));
29
+
26
30
  var _valid_icon = _interopRequireDefault(require("./valid_icon.svg"));
27
31
 
28
32
  var _invalid_icon = _interopRequireDefault(require("./invalid_icon.svg"));
29
33
 
34
+ function _templateObject14() {
35
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n ", "\n border: ", ";\n opacity: 1;\n flex-grow: 1;\n"]);
36
+
37
+ _templateObject14 = function _templateObject14() {
38
+ return data;
39
+ };
40
+
41
+ return data;
42
+ }
43
+
44
+ function _templateObject13() {
45
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n text-align: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", ";\n margin: 0;\n"]);
46
+
47
+ _templateObject13 = function _templateObject13() {
48
+ return data;
49
+ };
50
+
51
+ return data;
52
+ }
53
+
30
54
  function _templateObject12() {
31
- var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n ", "\n border: 1px solid #D9D9D9;\n opacity: 1;\n flex-grow: 1;\n"]);
55
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n text-align: ", ";\n font-family: ", ";\n font-size: ", ";\n font-style: ", ";\n font-weight: ", ";\n letter-spacing: ", ";\n ", ";\n text-transform: ", ";\n margin: 0;\n"]);
32
56
 
33
57
  _templateObject12 = function _templateObject12() {
34
58
  return data;
@@ -38,7 +62,7 @@ function _templateObject12() {
38
62
  }
39
63
 
40
64
  function _templateObject11() {
41
- var data = (0, _taggedTemplateLiteral2["default"])(["\n text-align: left;\n font: Lighter 12px/17px Open Sans;\n letter-spacing: 0.58px;\n color: inherit;\n margin: 0;\n"]);
65
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: 12px;\n"]);
42
66
 
43
67
  _templateObject11 = function _templateObject11() {
44
68
  return data;
@@ -48,7 +72,7 @@ function _templateObject11() {
48
72
  }
49
73
 
50
74
  function _templateObject10() {
51
- var data = (0, _taggedTemplateLiteral2["default"])(["\n text-align: left;\n font: Normal 16px/22px Open Sans;\n letter-spacing: 0.77px;\n color: inherit;\n margin: 0;\n"]);
75
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 18px;\n height: 18px;\n position: absolute;\n top: 22.5px;\n left: 22.5px;\n"]);
52
76
 
53
77
  _templateObject10 = function _templateObject10() {
54
78
  return data;
@@ -58,7 +82,7 @@ function _templateObject10() {
58
82
  }
59
83
 
60
84
  function _templateObject9() {
61
- var data = (0, _taggedTemplateLiteral2["default"])(["\n margin-left: 10px;\n color: ", ";\n"]);
85
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n font-family: ", ";\n font-style: ", ";\n font-weight: ", ";\n letter-spacing: ", ";\n opacity: 1;\n margin: 0px 0px 0px 1px;\n"]);
62
86
 
63
87
  _templateObject9 = function _templateObject9() {
64
88
  return data;
@@ -68,7 +92,7 @@ function _templateObject9() {
68
92
  }
69
93
 
70
94
  function _templateObject8() {
71
- var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 18px;\n height: 18px;\n position: absolute;\n bottom: 0px;\n right: 0px;\n"]);
95
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n mask: url(", ") no-repeat center;\n mask-size: ", ";\n height: ", ";\n width: ", ";\n"]);
72
96
 
73
97
  _templateObject8 = function _templateObject8() {
74
98
  return data;
@@ -78,7 +102,7 @@ function _templateObject8() {
78
102
  }
79
103
 
80
104
  function _templateObject7() {
81
- var data = (0, _taggedTemplateLiteral2["default"])(["\n font: Normal 16px/22px Open Sans;\n letter-spacing: 0.77px;\n color: ", ";\n opacity: 1;\n margin: 0;\n"]);
105
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n overflow: hidden;\n img,\n svg {\n height: 100%;\n width: 100%;\n }\n"]);
82
106
 
83
107
  _templateObject7 = function _templateObject7() {
84
108
  return data;
@@ -88,7 +112,7 @@ function _templateObject7() {
88
112
  }
89
113
 
90
114
  function _templateObject6() {
91
- var data = (0, _taggedTemplateLiteral2["default"])(["\n width: 19px;\n height: 19px;\n"]);
115
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n"]);
92
116
 
93
117
  _templateObject6 = function _templateObject6() {
94
118
  return data;
@@ -98,7 +122,7 @@ function _templateObject6() {
98
122
  }
99
123
 
100
124
  function _templateObject5() {
101
- var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n\n ", "\n\n ", "\n\n ", "\n\n border-radius: 45px;\n\n display: flex;\n justify-content: center;\n align-items: center;\n"]);
125
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n width: ", ";\n height: ", ";\n\n ", "\n ", ";\n\n border-radius: ", ";\n display: flex;\n justify-content: center;\n align-items: center;\n"]);
102
126
 
103
127
  _templateObject5 = function _templateObject5() {
104
128
  return data;
@@ -108,7 +132,7 @@ function _templateObject5() {
108
132
  }
109
133
 
110
134
  function _templateObject4() {
111
- var data = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n display: inline-flex;\n padding-bottom: 3px;\n"]);
135
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n display: inline-flex;\n padding-bottom: 4px;\n"]);
112
136
 
113
137
  _templateObject4 = function _templateObject4() {
114
138
  return data;
@@ -118,7 +142,7 @@ function _templateObject4() {
118
142
  }
119
143
 
120
144
  function _templateObject3() {
121
- var data = (0, _taggedTemplateLiteral2["default"])(["\n border: none;\n background: inherit;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n margin: ", ";\n\n padding: 0px;\n ", ";\n\n &:focus {\n outline: none;\n }\n\n &:hover {\n ", ";\n }\n"]);
145
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n border: none;\n background: inherit;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n margin: ", ";\n\n padding: 0px;\n ", ";\n\n &:hover {\n ", ";\n }\n &:focus {\n outline: ", " auto 1px;\n }\n"]);
122
146
 
123
147
  _templateObject3 = function _templateObject3() {
124
148
  return data;
@@ -128,7 +152,7 @@ function _templateObject3() {
128
152
  }
129
153
 
130
154
  function _templateObject2() {
131
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n ", "\n flex-grow: ", ";\n flex-direction: ", ";\n ", "\n \n"]);
155
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n ", "\n flex-grow: ", ";\n flex-direction: ", ";\n ", "\n"]);
132
156
 
133
157
  _templateObject2 = function _templateObject2() {
134
158
  return data;
@@ -138,7 +162,7 @@ function _templateObject2() {
138
162
  }
139
163
 
140
164
  function _templateObject() {
141
- var data = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: ", ";\n justify-content: \"center\";\n ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"]);
165
+ var data = (0, _taggedTemplateLiteral2["default"])(["\n display: inline-flex;\n flex-direction: ", ";\n justify-content: \"center\";\n ", ";\n font-family: ", ";\n\n margin: ", ";\n margin-top: ", ";\n margin-right: ", ";\n margin-bottom: ", ";\n margin-left: ", ";\n"]);
142
166
 
143
167
  _templateObject = function _templateObject() {
144
168
  return data;
@@ -150,19 +174,20 @@ function _templateObject() {
150
174
  var DxcWizard = function DxcWizard(_ref) {
151
175
  var _ref$mode = _ref.mode,
152
176
  mode = _ref$mode === void 0 ? "horizontal" : _ref$mode,
153
- _ref$theme = _ref.theme,
154
- theme = _ref$theme === void 0 ? "light" : _ref$theme,
155
177
  currentStep = _ref.currentStep,
156
178
  onStepClick = _ref.onStepClick,
157
179
  steps = _ref.steps,
158
- margin = _ref.margin;
180
+ margin = _ref.margin,
181
+ _ref$tabIndex = _ref.tabIndex,
182
+ tabIndex = _ref$tabIndex === void 0 ? 0 : _ref$tabIndex;
159
183
 
160
- var _React$useState = _react["default"].useState(currentStep || 0),
161
- _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
162
- innerCurrent = _React$useState2[0],
163
- setInnerCurrentStep = _React$useState2[1];
184
+ var _useState = (0, _react.useState)(currentStep || 0),
185
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
186
+ innerCurrent = _useState2[0],
187
+ setInnerCurrentStep = _useState2[1];
164
188
 
165
189
  var renderedCurrent = currentStep == null ? innerCurrent : currentStep;
190
+ var colorsTheme = (0, _useTheme["default"])();
166
191
 
167
192
  var handleStepClick = function handleStepClick(newValue) {
168
193
  if (currentStep == null) {
@@ -174,7 +199,9 @@ var DxcWizard = function DxcWizard(_ref) {
174
199
  }
175
200
  };
176
201
 
177
- return _react["default"].createElement(StepsContainer, {
202
+ return _react["default"].createElement(_styledComponents.ThemeProvider, {
203
+ theme: colorsTheme.wizard
204
+ }, _react["default"].createElement(StepsContainer, {
178
205
  mode: mode,
179
206
  margin: margin
180
207
  }, steps.map(function (step, i) {
@@ -183,42 +210,50 @@ var DxcWizard = function DxcWizard(_ref) {
183
210
  mode: mode,
184
211
  lastStep: i === steps.length - 1
185
212
  }, _react["default"].createElement(Step, {
213
+ tabIndex: tabIndex,
186
214
  onClick: function onClick() {
187
215
  return handleStepClick(i);
188
216
  },
189
217
  mode: mode,
190
- disable: step.disabled,
191
218
  disabled: step.disabled,
192
219
  first: i === 0,
193
220
  last: i === steps.length - 1
194
221
  }, _react["default"].createElement(StepHeader, null, _react["default"].createElement(IconContainer, {
195
222
  current: i === renderedCurrent,
196
223
  visited: i < renderedCurrent,
197
- brightness: theme,
198
224
  disabled: step.disabled
199
- }, step.iconSrc ? _react["default"].createElement(Icon, {
225
+ }, step.icon ? _react["default"].createElement(StepIconContainer, {
226
+ disabled: step.disabled
227
+ }, (0, _typeof2["default"])(step.icon) === "object" ? step.icon.type === "img" ? _react["default"].createElement(ImgContainer, {
228
+ current: i === renderedCurrent,
229
+ img: step.icon.props.src
230
+ }) : step.icon : _react["default"].createElement(step.icon)) : step.iconSrc ? _react["default"].createElement(Icon, {
200
231
  src: step.iconSrc
201
232
  }) : _react["default"].createElement(Number, {
202
233
  disabled: step.disabled,
203
- current: i === renderedCurrent,
204
- brightness: theme
234
+ current: i === renderedCurrent
205
235
  }, i + 1)), step.valid !== undefined ? step.valid ? _react["default"].createElement(ValidityIcon, {
206
236
  src: _valid_icon["default"]
207
237
  }) : _react["default"].createElement(ValidityIcon, {
208
238
  src: _invalid_icon["default"]
209
- }) : ''), step.label || step.description ? _react["default"].createElement(InfoContainer, {
210
- active: i <= innerCurrent,
211
- brightness: theme
212
- }, step.label ? _react["default"].createElement(Label, null, step.label) : '', step.description ? _react["default"].createElement(Description, null, step.description) : '') : ''), i === steps.length - 1 ? '' : _react["default"].createElement(StepSeparator, {
239
+ }) : ""), step.label || step.description ? _react["default"].createElement(InfoContainer, null, step.label ? _react["default"].createElement(Label, {
240
+ disabled: step.disabled,
241
+ visited: i <= innerCurrent
242
+ }, step.label) : "", step.description ? _react["default"].createElement(Description, {
243
+ disabled: step.disabled,
244
+ visited: i <= innerCurrent
245
+ }, step.description) : "") : ""), i === steps.length - 1 ? "" : _react["default"].createElement(StepSeparator, {
213
246
  mode: mode
214
247
  }));
215
- }));
248
+ })));
216
249
  };
217
250
 
218
251
  var StepsContainer = _styledComponents["default"].div(_templateObject(), function (props) {
219
252
  return props.mode === "vertical" ? "column" : "row";
220
253
  }, function (props) {
221
254
  return props.mode === "vertical" ? "height: 500px" : "width: 100%";
255
+ }, function (props) {
256
+ return props.theme.fontFamily;
222
257
  }, function (props) {
223
258
  return props.margin && (0, _typeof2["default"])(props.margin) !== "object" ? _variables.spaces[props.margin] : "0px";
224
259
  }, function (props) {
@@ -242,59 +277,124 @@ var StepContainer = _styledComponents["default"].div(_templateObject2(), functio
242
277
  });
243
278
 
244
279
  var Step = _styledComponents["default"].button(_templateObject3(), function (props) {
245
- return props.first ? props.mode === "vertical" ? "0 0 25px 0" : "0 25px 0 0" : props.last ? props.mode === "vertical" ? "25px 0 0 0" : "0 0 0 25px" : props.mode === "vertical" ? "25px 0" : "0 25px";
280
+ return props.first ? props.mode === "vertical" ? "0 0 24px 0" : "0 24px 0 0" : props.last ? props.mode === "vertical" ? "24px 0 0 0" : "0 0 0 24px" : props.mode === "vertical" ? "24px 0" : "0 24px";
246
281
  }, function (props) {
247
- return props.disabled ? "cursor: not-allowed" : '';
282
+ return props.disabled ? "cursor: not-allowed" : "";
248
283
  }, function (props) {
249
284
  return props.disabled ? "" : "cursor: pointer";
285
+ }, function (props) {
286
+ return props.theme.focusColor;
250
287
  });
251
288
 
252
289
  var StepHeader = _styledComponents["default"].div(_templateObject4());
253
290
 
254
291
  var IconContainer = _styledComponents["default"].div(_templateObject5(), function (props) {
255
- return !props.current && !props.disabled ? "32px" : "36px";
292
+ return props.disabled ? props.theme.disabledCircleWidth : props.current ? props.theme.selectedCircleWidth : props.theme.circleWidth;
256
293
  }, function (props) {
257
- return !props.current && !props.disabled ? "32px" : "36px";
294
+ return props.disabled ? props.theme.disabledCircleHeight : props.current ? props.theme.selectedCircleHeight : props.theme.circleHeight;
258
295
  }, function (props) {
259
- return !props.current && !props.disabled ? "border: 2px solid ".concat(props.brightness === "light" ? '#000000' : '#FFFFFF', ";") : "";
296
+ return "\n ".concat(!props.current && !props.disabled ? "border: ".concat(props.theme.circleBorderThickness, " ").concat(props.theme.circleBorderStyle, " ").concat(props.theme.circleBorderColor, ";") : props.current ? "border: ".concat(props.theme.selectedCircleBorderThickness, " ").concat(props.theme.selectedCircleBorderStyle, " ").concat(props.theme.selectedCircleBorderColor, ";") : props.disabled ? "border: ".concat(props.theme.disabledCircleBorderThickness, " ").concat(props.theme.disabledCircleBorderStyle, " ").concat(props.theme.disabledCircleBorderColor, ";") : "", "\n background: ").concat(props.disabled ? "".concat(props.theme.disabledBackgroundColor) : props.current ? "".concat(props.theme.stepContainerSelectedBackgroundColor) : "".concat(props.theme.stepContainerBackgroundColor), ";\n ");
260
297
  }, function (props) {
261
- return props.disabled ? "background: #D9D9D9 0% 0% no-repeat padding-box;" : "";
298
+ return props.disabled ? "color: ".concat(props.theme.disabledFontColor, ";") : "color: ".concat(props.current ? props.theme.stepContainerSelectedFontColor : props.theme.stepContainerFontColor, ";");
262
299
  }, function (props) {
263
- return props.current ? "background: #FFED00 0% 0% no-repeat padding-box;" : '';
300
+ return !props.current && !props.disabled ? props.theme.circleBorderRadius : props.current ? props.theme.selectedCircleBorderRadius : props.disabled ? props.theme.disabledCircleBorderRadius : "";
264
301
  });
265
302
 
266
- var Icon = _styledComponents["default"].img(_templateObject6());
303
+ var Icon = _styledComponents["default"].img(_templateObject6(), function (props) {
304
+ return props.theme.stepContainerIconSize;
305
+ }, function (props) {
306
+ return props.theme.stepContainerIconSize;
307
+ });
267
308
 
268
- var Number = _styledComponents["default"].p(_templateObject7(), function (props) {
269
- return !props.current && !props.disabled ? props.brightness === "light" ? '#000000' : '#FFFFFF' : props.current ? '#000000' : '#666666';
309
+ var StepIconContainer = _styledComponents["default"].div(_templateObject7(), function (props) {
310
+ return props.theme.stepContainerIconSize;
311
+ }, function (props) {
312
+ return props.theme.stepContainerIconSize;
270
313
  });
271
314
 
272
- var ValidityIcon = _styledComponents["default"].img(_templateObject8());
315
+ var ImgContainer = _styledComponents["default"].div(_templateObject8(), function (props) {
316
+ return props.current ? props.theme.stepContainerSelectedFontColor : props.theme.stepContainerFontColor;
317
+ }, function (_ref2) {
318
+ var img = _ref2.img;
319
+ return img;
320
+ }, function (props) {
321
+ return "".concat(props.theme.stepContainerIconSize, " ").concat(props.theme.stepContainerIconSize);
322
+ }, function (props) {
323
+ return props.theme.stepContainerIconSize;
324
+ }, function (props) {
325
+ return props.theme.stepContainerIconSize;
326
+ });
273
327
 
274
- var InfoContainer = _styledComponents["default"].div(_templateObject9(), function (props) {
275
- return props.brightness === "light" ? props.active ? '#000000' : '#666666' : props.active ? "#FFFFFF" : "#D9D9D9";
328
+ var Number = _styledComponents["default"].p(_templateObject9(), function (props) {
329
+ return props.theme.stepContainerFontSize;
330
+ }, function (props) {
331
+ return props.theme.stepContainerFontFamily;
332
+ }, function (props) {
333
+ return props.theme.stepContainerFontStyle;
334
+ }, function (props) {
335
+ return props.theme.stepContainerFontWeight;
336
+ }, function (props) {
337
+ return props.theme.stepContainerLetterSpacing;
276
338
  });
277
339
 
278
- var Label = _styledComponents["default"].p(_templateObject10());
340
+ var ValidityIcon = _styledComponents["default"].img(_templateObject10());
341
+
342
+ var InfoContainer = _styledComponents["default"].div(_templateObject11());
343
+
344
+ var Label = _styledComponents["default"].p(_templateObject12(), function (props) {
345
+ return props.theme.labelTextAlign;
346
+ }, function (props) {
347
+ return props.theme.labelFontFamily;
348
+ }, function (props) {
349
+ return props.theme.labelFontSize;
350
+ }, function (props) {
351
+ return props.theme.labelFontStyle;
352
+ }, function (props) {
353
+ return props.theme.labelFontWeight;
354
+ }, function (props) {
355
+ return props.theme.labelLetterSpacing;
356
+ }, function (props) {
357
+ return props.disabled ? "color: ".concat(props.theme.disabledFontColor, ";") : "color: ".concat(props.visited ? props.theme.visitedLabelFontColor : props.theme.labelFontColor, ";");
358
+ }, function (props) {
359
+ return props.theme.labelFontTextTransform;
360
+ });
279
361
 
280
- var Description = _styledComponents["default"].p(_templateObject11());
362
+ var Description = _styledComponents["default"].p(_templateObject13(), function (props) {
363
+ return props.theme.descriptionTextAlign;
364
+ }, function (props) {
365
+ return props.theme.descriptionFontFamily;
366
+ }, function (props) {
367
+ return props.theme.descriptionFontSize;
368
+ }, function (props) {
369
+ return props.theme.descriptionFontStyle;
370
+ }, function (props) {
371
+ return props.theme.descriptionFontWeight;
372
+ }, function (props) {
373
+ return props.theme.descriptionLetterSpacing;
374
+ }, function (props) {
375
+ return props.theme.descriptionFontTextTransform;
376
+ }, function (props) {
377
+ return props.disabled ? "color: ".concat(props.theme.disabledFontColor, ";") : "color: ".concat(props.visited ? props.theme.visitedDescriptionFontColor : props.theme.descriptionFontColor, ";");
378
+ });
281
379
 
282
- var StepSeparator = _styledComponents["default"].div(_templateObject12(), function (props) {
283
- return props.mode === "horizontal" ? '' : '0';
380
+ var StepSeparator = _styledComponents["default"].div(_templateObject14(), function (props) {
381
+ return props.mode === "horizontal" ? "" : "0";
382
+ }, function (props) {
383
+ return props.mode === "horizontal" ? "0" : "";
284
384
  }, function (props) {
285
- return props.mode === "horizontal" ? '0' : '';
385
+ return props.mode === "vertical" ? "margin: 0 18px;" : "";
286
386
  }, function (props) {
287
- return props.mode === "vertical" ? "margin: 0 18px;" : '';
387
+ return "".concat(props.theme.separatorBorderStyle, " ").concat(props.theme.separatorBorderThickness, " ").concat(props.theme.separatorColor);
288
388
  });
289
389
 
290
390
  DxcWizard.propTypes = {
291
391
  mode: _propTypes["default"].oneOf(["horizontal", "vertical"]),
292
- theme: _propTypes["default"].oneOf(["light", "dark"]),
293
392
  currentStep: _propTypes["default"].number,
294
393
  onStepClick: _propTypes["default"].func,
295
394
  steps: _propTypes["default"].arrayOf(_propTypes["default"].shape({
296
395
  label: _propTypes["default"].string,
297
396
  description: _propTypes["default"].string,
397
+ icon: _propTypes["default"].oneOfType([_propTypes["default"].element, _propTypes["default"].func]),
298
398
  iconSrc: _propTypes["default"].string,
299
399
  disabled: _propTypes["default"].bool,
300
400
  valid: _propTypes["default"].bool
@@ -304,7 +404,8 @@ DxcWizard.propTypes = {
304
404
  bottom: _propTypes["default"].oneOf(Object.keys(_variables.spaces)),
305
405
  left: _propTypes["default"].oneOf(Object.keys(_variables.spaces)),
306
406
  right: _propTypes["default"].oneOf(Object.keys(_variables.spaces))
307
- }), _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(_variables.spaces)))])
407
+ }), _propTypes["default"].oneOf((0, _toConsumableArray2["default"])(Object.keys(_variables.spaces)))]),
408
+ tabIndex: _propTypes["default"].number
308
409
  };
309
410
  var _default = DxcWizard;
310
411
  exports["default"] = _default;
@@ -1,6 +1,5 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="496" height="496" viewBox="0 0 496 496">
2
- <g id="Group_2913" data-name="Group 2913" transform="translate(5286 3925)">
3
- <path id="Path_2821" data-name="Path 2821" d="M240,0C372.548,0,480,107.452,480,240S372.548,480,240,480,0,372.548,0,240,107.452,0,240,0Z" transform="translate(-5278 -3917)" fill="#f9cfcf"/>
4
- <path id="times-circle-regular" d="M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm0,448A200,200,0,1,1,456,256,199.945,199.945,0,0,1,256,456ZM357.8,193.8,295.6,256l62.2,62.2a12.011,12.011,0,0,1,0,17l-22.6,22.6a12.011,12.011,0,0,1-17,0L256,295.6l-62.2,62.2a12.011,12.011,0,0,1-17,0l-22.6-22.6a12.011,12.011,0,0,1,0-17L216.4,256l-62.2-62.2a12.011,12.011,0,0,1,0-17l22.6-22.6a12.011,12.011,0,0,1,17,0L256,216.4l62.2-62.2a12.011,12.011,0,0,1,17,0l22.6,22.6a12.011,12.011,0,0,1,0,17Z" transform="translate(-5294 -3933)" fill="#e22"/>
5
- </g>
1
+ <svg id="highlight_off_black_18dp" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
2
+ <path id="Path_2943" data-name="Path 2943" d="M0,0H18V18H0Z" fill="none"/>
3
+ <path id="Path_2944" data-name="Path 2944" d="M10,4a6,6,0,1,0,6,6A6.01,6.01,0,0,0,10,4Zm3,7.945L11.945,13,10,11.06,8.059,13,7,11.945,8.944,10,7,8.059,8.059,7,10,8.944,11.945,7,13,8.059,11.06,10Z" transform="translate(-1.002 -1.002)" fill="#ffe6e9"/>
4
+ <path id="Path_2945" data-name="Path 2945" d="M11.444,6.5,9.5,8.443,7.558,6.5,6.5,7.558,8.443,9.5,6.5,11.444,7.558,12.5,9.5,10.558,11.444,12.5,12.5,11.444,10.558,9.5,12.5,7.558ZM9.5,2A7.5,7.5,0,1,0,17,9.5,7.494,7.494,0,0,0,9.5,2Zm0,13.5a6,6,0,1,1,6-6A6.009,6.009,0,0,1,9.5,15.5Z" transform="translate(-0.501 -0.501)" fill="#d0011b"/>
6
5
  </svg>
@@ -1,6 +1,5 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="496" height="496" viewBox="0 0 496 496">
2
- <g id="Group_2914" data-name="Group 2914" transform="translate(4677 3925)">
3
- <path id="Path_2822" data-name="Path 2822" d="M240,0C372.548,0,480,107.452,480,240S372.548,480,240,480,0,372.548,0,240,107.452,0,240,0Z" transform="translate(-4669 -3917)" fill="#dbf1c4"/>
4
- <path id="check-circle-regular" d="M256,8C119.033,8,8,119.033,8,256S119.033,504,256,504,504,392.967,504,256,392.967,8,256,8Zm0,48A200,200,0,1,1,56,256,199.893,199.893,0,0,1,256,56M396.2,186.267l-22.536-22.718a12,12,0,0,0-16.97-.068L215.346,303.7,155.554,243.42a12,12,0,0,0-16.97-.069l-22.719,22.536a12,12,0,0,0-.068,16.971l90.781,91.516a12,12,0,0,0,16.97.068l172.589-171.2a12,12,0,0,0,.067-16.971Z" transform="translate(-4685 -3933)" fill="#7ed321"/>
5
- </g>
1
+ <svg id="check_circle_black_18dp" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
2
+ <path id="Path_2946" data-name="Path 2946" d="M0,0H18V18H0Z" fill="none"/>
3
+ <path id="Path_2947" data-name="Path 2947" d="M9.986,4a5.986,5.986,0,1,0,5.986,5.986A5.994,5.994,0,0,0,9.986,4Zm-1.5,9.727L5.5,10.734,6.551,9.679l1.938,1.93L13.42,6.679l1.055,1.063Z" transform="translate(-0.986 -0.986)" fill="#eafaef" opacity="0.999"/>
4
+ <path id="Path_2948" data-name="Path 2948" d="M9.493,2a7.493,7.493,0,1,0,7.493,7.493A7.5,7.5,0,0,0,9.493,2Zm0,13.487a5.994,5.994,0,1,1,5.994-5.994A6,6,0,0,1,9.493,15.487Zm3.439-9.306L7.994,11.119,6.054,9.186,5,10.242l3,3,5.994-5.994Z" transform="translate(-0.493 -0.493)" fill="#24a148"/>
6
5
  </svg>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxc-technology/halstack-react",
3
- "version": "0.0.0-5168fa4",
3
+ "version": "0.0.0-51a5c42",
4
4
  "description": "DXC Halstack React components library",
5
5
  "repository": "dxc-technology/halstack-react",
6
6
  "homepage": "http://developer.dxc.com/tools/react",
@@ -11,6 +11,7 @@
11
11
  "url": "https://dxc.com"
12
12
  },
13
13
  "main": "./dist/main.js",
14
+ "types": "./dist/main.d.ts",
14
15
  "peerDependencies": {
15
16
  "react": "^16.8.6",
16
17
  "react-dom": "^16.8.6",
@@ -18,15 +19,19 @@
18
19
  },
19
20
  "dependencies": {
20
21
  "@date-io/date-fns": "^1.3.9",
21
- "@material-ui/core": "4.1.1",
22
+ "@material-ui/core": "4.11.1",
22
23
  "@material-ui/icons": "4.4.3",
23
- "@material-ui/lab": "4.0.0-alpha.16",
24
+ "@material-ui/lab": "4.0.0-alpha.17",
24
25
  "@material-ui/pickers": "3.2.2",
25
26
  "@material-ui/styles": "4.0.2",
27
+ "@testing-library/user-event": "^12.6.3",
28
+ "color": "^3.1.3",
26
29
  "date-fns": "^2.0.0-beta.4",
27
30
  "moment": "2.24.0",
28
31
  "prop-types": "^15.7.2",
29
- "react-use-scrollspy": "^2.0.0"
32
+ "react-use-scrollspy": "^2.0.0",
33
+ "rgb-hex": "^3.0.0",
34
+ "uuid": "^8.3.2"
30
35
  },
31
36
  "scripts": {
32
37
  "test": "jest",
@@ -38,10 +43,12 @@
38
43
  "@babel/cli": "^7.6.2",
39
44
  "@babel/core": "^7.6.2",
40
45
  "@babel/plugin-proposal-class-properties": "^7.5.5",
46
+ "@babel/plugin-proposal-nullish-coalescing-operator": "7.13.8",
47
+ "@babel/plugin-proposal-optional-chaining": "7.13.8",
41
48
  "@babel/plugin-transform-runtime": "^7.10.1",
42
49
  "@babel/preset-env": "^7.6.2",
43
50
  "@babel/preset-react": "^7.0.0",
44
- "@testing-library/react": "^10.0.2",
51
+ "@testing-library/react": "^11.2.5",
45
52
  "babel-jest": "^24.8.0",
46
53
  "babel-loader": "^8.0.6",
47
54
  "eslint": "^5.16.0",
@@ -51,11 +58,12 @@
51
58
  "eslint-plugin-jest": "^22.7.1",
52
59
  "eslint-plugin-jsx-a11y": "^6.2.1",
53
60
  "eslint-plugin-react": "^7.13.0",
61
+ "eslint-plugin-react-hooks": "^4.2.0",
54
62
  "identity-obj-proxy": "^3.0.0",
55
63
  "jest": "^25.5.4",
56
- "react-test-renderer": "^16.8.6",
57
64
  "react": "file:../node_modules/react",
58
65
  "react-dom": "file:../node_modules/react-dom",
66
+ "react-test-renderer": "^16.8.6",
59
67
  "styled-components": "file:../node_modules/styled-components"
60
68
  },
61
69
  "jest": {
@@ -0,0 +1,125 @@
1
+ import React from "react";
2
+ import { render, fireEvent } from "@testing-library/react";
3
+ import DxcAccordionGroup from "../src/accordion-group/AccordionGroup";
4
+
5
+ describe("Accordion component tests", () => {
6
+ test("Uncontrolled accordion group renders with children", () => {
7
+ const { getByText, getAllByRole } = render(
8
+ <DxcAccordionGroup>
9
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium">
10
+ <div>
11
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
12
+ leo lobortis eget.
13
+ </div>
14
+ </DxcAccordionGroup.Accordion>
15
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
16
+ <div>
17
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
18
+ leo lobortis eget.
19
+ </div>
20
+ </DxcAccordionGroup.Accordion>
21
+ </DxcAccordionGroup>
22
+ );
23
+
24
+ expect(getByText("Accordion1")).toBeTruthy();
25
+ expect(getByText("Accordion2")).toBeTruthy();
26
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
27
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
28
+ });
29
+
30
+ test("Uncontrolled accordion group renders with only one children", () => {
31
+ const { getByText, getAllByRole } = render(
32
+ <DxcAccordionGroup>
33
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium">
34
+ <div>
35
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
36
+ leo lobortis eget.
37
+ </div>
38
+ </DxcAccordionGroup.Accordion>
39
+ </DxcAccordionGroup>
40
+ );
41
+
42
+ expect(getByText("Accordion1")).toBeTruthy();
43
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
44
+ });
45
+
46
+ test("Uncontrolled accordion group calls correct function on click", () => {
47
+ const onActiveChange = jest.fn();
48
+ const { getByText, getAllByRole } = render(
49
+ <DxcAccordionGroup margin="large" onActiveChange={onActiveChange}>
50
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
51
+ <div>
52
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
53
+ leo lobortis eget.
54
+ </div>
55
+ </DxcAccordionGroup.Accordion>
56
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
57
+ <div>
58
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse malesuada lacus ex, sit amet blandit
59
+ leo lobortis eget.
60
+ </div>
61
+ </DxcAccordionGroup.Accordion>
62
+ </DxcAccordionGroup>
63
+ );
64
+
65
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
66
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
67
+ fireEvent.click(getByText("Accordion1"));
68
+ expect(onActiveChange).toHaveBeenCalled();
69
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
70
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
71
+ });
72
+
73
+ test("Controlled accordion with indexActive change", () => {
74
+ const onActiveChange = jest.fn();
75
+ const { getByText, getAllByRole, rerender } = render(
76
+ <DxcAccordionGroup margin="large" indexActive={1} onActiveChange={onActiveChange}>
77
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
78
+ <div>Text1</div>
79
+ </DxcAccordionGroup.Accordion>
80
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
81
+ <div>Text2</div>
82
+ </DxcAccordionGroup.Accordion>
83
+ </DxcAccordionGroup>
84
+ );
85
+ expect(getByText("Text1")).toBeTruthy();
86
+ expect(getByText("Text2")).toBeTruthy();
87
+ fireEvent.click(getByText("Accordion1"));
88
+ fireEvent.click(getByText("Accordion2"));
89
+ expect(onActiveChange.mock.calls[0][0]).toBe(0);
90
+ expect(onActiveChange.mock.calls[1][0]).toBe(1);
91
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("false");
92
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("true");
93
+
94
+ rerender(
95
+ <DxcAccordionGroup margin="large" indexActive={0} onActiveChange={onActiveChange}>
96
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
97
+ <div>Text1</div>
98
+ </DxcAccordionGroup.Accordion>
99
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
100
+ <div>Text2</div>
101
+ </DxcAccordionGroup.Accordion>
102
+ </DxcAccordionGroup>
103
+ );
104
+
105
+ expect(getAllByRole("button")[0].getAttribute("aria-expanded")).toBe("true");
106
+ expect(getAllByRole("button")[1].getAttribute("aria-expanded")).toBe("false");
107
+ });
108
+
109
+ test("Disabled uncontrolled accordion group", () => {
110
+ const onActiveChange = jest.fn();
111
+ const { getByText } = render(
112
+ <DxcAccordionGroup margin="large" onActiveChange={onActiveChange} disabled={true}>
113
+ <DxcAccordionGroup.Accordion label="Accordion1" padding="medium" margin="large">
114
+ <div>Text1</div>
115
+ </DxcAccordionGroup.Accordion>
116
+ <DxcAccordionGroup.Accordion label="Accordion2" padding="medium">
117
+ <div>Text2</div>
118
+ </DxcAccordionGroup.Accordion>
119
+ </DxcAccordionGroup>
120
+ );
121
+ fireEvent.click(getByText("Accordion1"));
122
+ fireEvent.click(getByText("Accordion2"));
123
+ expect(onActiveChange).toHaveBeenCalledTimes(0);
124
+ });
125
+ });