@salutejs/plasma-new-hope 0.194.0-canary.1562.11852874401.0 → 0.194.0-canary.1565.11870784206.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. package/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
  2. package/cjs/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  3. package/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  4. package/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js.map +1 -1
  5. package/cjs/components/Combobox/ComboboxOld/Combobox.css +4 -5
  6. package/cjs/components/Combobox/ComboboxOld/ui/ComboboxDivider/ComboboxDivider.css +4 -5
  7. package/cjs/components/Combobox/ComboboxOld/ui/ComboboxFooter/ComboboxFooter.css +4 -5
  8. package/cjs/components/Combobox/ComboboxOld/ui/ComboboxGroup/ComboboxGroup.css +4 -5
  9. package/cjs/components/Combobox/ComboboxOld/ui/ComboboxHeader/ComboboxHeader.css +4 -5
  10. package/cjs/components/Dropdown/Dropdown.css +4 -5
  11. package/cjs/components/Dropdown/Dropdown.js +2 -4
  12. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  13. package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.css +4 -5
  14. package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
  15. package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js.map +1 -1
  16. package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +1 -7
  17. package/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js.map +1 -1
  18. package/cjs/components/Dropdown/ui/DropdownItem/{DropdownItem.styles_14yih1y.css → DropdownItem.styles_1b439rx.css} +0 -1
  19. package/cjs/components/Select/Select.js +1 -0
  20. package/cjs/components/Select/Select.js.map +1 -1
  21. package/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  22. package/cjs/components/Select/ui/Inner/ui/Item/Item.js.map +1 -1
  23. package/cjs/components/TextField/TextField.js +27 -3
  24. package/cjs/components/TextField/TextField.js.map +1 -1
  25. package/cjs/components/TextField/hooks/useValidation.js +273 -0
  26. package/cjs/components/TextField/hooks/useValidation.js.map +1 -0
  27. package/cjs/index.css +4 -5
  28. package/cjs/utils/constants.js +4 -0
  29. package/cjs/utils/constants.js.map +1 -1
  30. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
  31. package/emotion/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  32. package/emotion/cjs/components/Dropdown/Dropdown.js +2 -4
  33. package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
  34. package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
  35. package/emotion/cjs/components/Select/Select.js +1 -0
  36. package/emotion/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  37. package/emotion/cjs/components/TextField/TextField.js +27 -4
  38. package/emotion/cjs/components/TextField/TextField.template-doc.mdx +330 -0
  39. package/emotion/cjs/components/TextField/hooks/index.js +8 -1
  40. package/emotion/cjs/components/TextField/hooks/useValidation.js +276 -0
  41. package/emotion/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  42. package/emotion/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  43. package/emotion/cjs/utils/constants.js +4 -2
  44. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  45. package/emotion/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  46. package/emotion/es/components/Dropdown/Dropdown.js +2 -4
  47. package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  48. package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
  49. package/emotion/es/components/Select/Select.js +1 -0
  50. package/emotion/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  51. package/emotion/es/components/TextField/TextField.js +28 -5
  52. package/emotion/es/components/TextField/TextField.template-doc.mdx +330 -0
  53. package/emotion/es/components/TextField/hooks/index.js +2 -1
  54. package/emotion/es/components/TextField/hooks/useValidation.js +270 -0
  55. package/emotion/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  56. package/emotion/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  57. package/emotion/es/utils/constants.js +3 -1
  58. package/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  59. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  60. package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  61. package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js.map +1 -1
  62. package/es/components/Combobox/ComboboxOld/Combobox.css +4 -5
  63. package/es/components/Combobox/ComboboxOld/ui/ComboboxDivider/ComboboxDivider.css +4 -5
  64. package/es/components/Combobox/ComboboxOld/ui/ComboboxFooter/ComboboxFooter.css +4 -5
  65. package/es/components/Combobox/ComboboxOld/ui/ComboboxGroup/ComboboxGroup.css +4 -5
  66. package/es/components/Combobox/ComboboxOld/ui/ComboboxHeader/ComboboxHeader.css +4 -5
  67. package/es/components/Dropdown/Dropdown.css +4 -5
  68. package/es/components/Dropdown/Dropdown.js +2 -4
  69. package/es/components/Dropdown/Dropdown.js.map +1 -1
  70. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.css +4 -5
  71. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  72. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js.map +1 -1
  73. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -7
  74. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js.map +1 -1
  75. package/es/components/Dropdown/ui/DropdownItem/{DropdownItem.styles_14yih1y.css → DropdownItem.styles_1b439rx.css} +0 -1
  76. package/es/components/Select/Select.js +1 -0
  77. package/es/components/Select/Select.js.map +1 -1
  78. package/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  79. package/es/components/Select/ui/Inner/ui/Item/Item.js.map +1 -1
  80. package/es/components/TextField/TextField.js +27 -3
  81. package/es/components/TextField/TextField.js.map +1 -1
  82. package/es/components/TextField/hooks/useValidation.js +269 -0
  83. package/es/components/TextField/hooks/useValidation.js.map +1 -0
  84. package/es/index.css +4 -5
  85. package/es/utils/constants.js +3 -1
  86. package/es/utils/constants.js.map +1 -1
  87. package/package.json +2 -3
  88. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
  89. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  90. package/styled-components/cjs/components/Dropdown/Dropdown.js +2 -4
  91. package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
  92. package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
  93. package/styled-components/cjs/components/Select/Select.js +1 -0
  94. package/styled-components/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  95. package/styled-components/cjs/components/TextField/TextField.js +26 -3
  96. package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +330 -0
  97. package/styled-components/cjs/components/TextField/hooks/index.js +8 -1
  98. package/styled-components/cjs/components/TextField/hooks/useValidation.js +276 -0
  99. package/styled-components/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  100. package/styled-components/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  101. package/styled-components/cjs/utils/constants.js +4 -2
  102. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  103. package/styled-components/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  104. package/styled-components/es/components/Dropdown/Dropdown.js +2 -4
  105. package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  106. package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
  107. package/styled-components/es/components/Select/Select.js +1 -0
  108. package/styled-components/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  109. package/styled-components/es/components/TextField/TextField.js +27 -4
  110. package/styled-components/es/components/TextField/TextField.template-doc.mdx +330 -0
  111. package/styled-components/es/components/TextField/hooks/index.js +2 -1
  112. package/styled-components/es/components/TextField/hooks/useValidation.js +270 -0
  113. package/styled-components/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  114. package/styled-components/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  115. package/styled-components/es/utils/constants.js +3 -1
  116. package/types/components/Autocomplete/Autocomplete.types.d.ts +2 -2
  117. package/types/components/Autocomplete/Autocomplete.types.d.ts.map +1 -1
  118. package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts +1676 -92
  119. package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts.map +1 -1
  120. package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
  121. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +2 -1
  122. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  123. package/types/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.d.ts.map +1 -1
  124. package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts +1676 -92
  125. package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts.map +1 -1
  126. package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts +1676 -92
  127. package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts.map +1 -1
  128. package/types/components/Dropdown/Dropdown.d.ts +2 -50
  129. package/types/components/Dropdown/Dropdown.d.ts.map +1 -1
  130. package/types/components/Dropdown/Dropdown.types.d.ts +6 -11
  131. package/types/components/Dropdown/Dropdown.types.d.ts.map +1 -1
  132. package/types/components/Dropdown/index.d.ts +0 -1
  133. package/types/components/Dropdown/index.d.ts.map +1 -1
  134. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.d.ts.map +1 -1
  135. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts +0 -1
  136. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts.map +1 -1
  137. package/types/components/Range/Range.styles.d.ts +1676 -92
  138. package/types/components/Range/Range.styles.d.ts.map +1 -1
  139. package/types/components/Select/Select.d.ts.map +1 -1
  140. package/types/components/Select/Select.types.d.ts +2 -1
  141. package/types/components/Select/Select.types.d.ts.map +1 -1
  142. package/types/components/Select/ui/Inner/ui/Item/Item.d.ts.map +1 -1
  143. package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts +1676 -92
  144. package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts.map +1 -1
  145. package/types/components/Slider/components/Double/Double.styles.d.ts +1676 -92
  146. package/types/components/Slider/components/Double/Double.styles.d.ts.map +1 -1
  147. package/types/components/TextField/TextField.d.ts.map +1 -1
  148. package/types/components/TextField/TextField.types.d.ts +51 -1
  149. package/types/components/TextField/TextField.types.d.ts.map +1 -1
  150. package/types/components/TextField/hooks/index.d.ts +1 -0
  151. package/types/components/TextField/hooks/index.d.ts.map +1 -1
  152. package/types/components/TextField/hooks/useValidation.d.ts +7 -0
  153. package/types/components/TextField/hooks/useValidation.d.ts.map +1 -0
  154. package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts +64 -2
  155. package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  156. package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts +1 -25
  157. package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts.map +1 -1
  158. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts +2732 -92
  159. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts.map +1 -1
  160. package/types/examples/plasma_b2c/components/TextField/TextField.d.ts +1676 -92
  161. package/types/examples/plasma_b2c/components/TextField/TextField.d.ts.map +1 -1
  162. package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts +64 -2
  163. package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  164. package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts +1 -25
  165. package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts.map +1 -1
  166. package/types/examples/plasma_web/components/Mask/Mask.d.ts +2732 -92
  167. package/types/examples/plasma_web/components/Mask/Mask.d.ts.map +1 -1
  168. package/types/examples/plasma_web/components/TextField/TextField.d.ts +1676 -92
  169. package/types/examples/plasma_web/components/TextField/TextField.d.ts.map +1 -1
  170. package/types/utils/constants.d.ts +2 -0
  171. package/types/utils/constants.d.ts.map +1 -1
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useValidation = void 0;
7
+ var _react = /*#__PURE__*/require("react");
8
+ var _utils = /*#__PURE__*/require("../../../utils");
9
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
10
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
11
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
12
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
13
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
14
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
15
+ var getUniqueKeys = function getUniqueKeys(lengthOptions) {
16
+ return lengthOptions.map(function (option) {
17
+ return option.replace(/min|max|Length/g, '');
18
+ });
19
+ };
20
+ var validateLenghtOptions = function validateLenghtOptions(options) {
21
+ var _options$minLength, _options$maxLength;
22
+ if (!options) {
23
+ return;
24
+ }
25
+ var minHash = Object.keys(options).filter(function (key) {
26
+ return key.startsWith('min');
27
+ });
28
+ var maxHash = Object.keys(options).filter(function (key) {
29
+ return key.startsWith('max');
30
+ });
31
+ var minMaxUniqueKeys = (minHash === null || minHash === void 0 ? void 0 : minHash.length) >= (maxHash === null || maxHash === void 0 ? void 0 : maxHash.length) ? getUniqueKeys(minHash) : getUniqueKeys(maxHash);
32
+ var globalMinValue = Number(options === null || options === void 0 || (_options$minLength = options.minLength) === null || _options$minLength === void 0 ? void 0 : _options$minLength.value);
33
+ var globalMaxValue = Number(options === null || options === void 0 || (_options$maxLength = options.maxLength) === null || _options$maxLength === void 0 ? void 0 : _options$maxLength.value);
34
+ if (globalMinValue <= 0) {
35
+ console.error('minLength must be more than 0');
36
+ }
37
+ if (globalMaxValue <= 0) {
38
+ console.error('maxLength must be more than 0');
39
+ }
40
+ if (globalMaxValue <= globalMinValue) {
41
+ console.error('maxLength must be more than minLength');
42
+ }
43
+ minMaxUniqueKeys.forEach(function (key) {
44
+ var _options$optionMinKey, _options$optionMaxKey;
45
+ var optionMinKey = "min".concat(key, "Length");
46
+ var optionMaxKey = "max".concat(key, "Length");
47
+ var minValue = Number(options === null || options === void 0 || (_options$optionMinKey = options[optionMinKey]) === null || _options$optionMinKey === void 0 ? void 0 : _options$optionMinKey.value);
48
+ var maxValue = Number(options === null || options === void 0 || (_options$optionMaxKey = options[optionMaxKey]) === null || _options$optionMaxKey === void 0 ? void 0 : _options$optionMaxKey.value);
49
+ if (!minValue || minValue <= 0) {
50
+ console.error("".concat(optionMinKey, " must be more than 0"));
51
+ }
52
+ if (!maxValue || maxValue <= 0) {
53
+ console.error("".concat(optionMaxKey, " must be more than 0"));
54
+ }
55
+ if (maxValue <= minValue) {
56
+ console.error("".concat(optionMaxKey, " must be more than ").concat(optionMinKey));
57
+ }
58
+ });
59
+ };
60
+ var validateWithLengthOptions = function validateWithLengthOptions(value, options, optionKey) {
61
+ var _options$optionMinKey2, _options$optionMaxKey2;
62
+ var optionMinKey = "min".concat(optionKey, "Length");
63
+ var optionMaxKey = "max".concat(optionKey, "Length");
64
+ var minValue = Number((_options$optionMinKey2 = options[optionMinKey]) === null || _options$optionMinKey2 === void 0 ? void 0 : _options$optionMinKey2.value);
65
+ var maxValue = Number((_options$optionMaxKey2 = options[optionMaxKey]) === null || _options$optionMaxKey2 === void 0 ? void 0 : _options$optionMaxKey2.value);
66
+ if (minValue && value.length < minValue) {
67
+ var _options$optionMinKey3;
68
+ return {
69
+ isValid: false,
70
+ errorMessage: ((_options$optionMinKey3 = options[optionMinKey]) === null || _options$optionMinKey3 === void 0 ? void 0 : _options$optionMinKey3.errorMessage) || "".concat(optionMinKey, " is too short")
71
+ };
72
+ }
73
+ if (maxValue && value.length > maxValue) {
74
+ var _options$optionMaxKey3;
75
+ return {
76
+ isValid: false,
77
+ errorMessage: ((_options$optionMaxKey3 = options[optionMaxKey]) === null || _options$optionMaxKey3 === void 0 ? void 0 : _options$optionMaxKey3.errorMessage) || "".concat(optionMaxKey, " is too long")
78
+ };
79
+ }
80
+ return {
81
+ isValid: true
82
+ };
83
+ };
84
+ var validateEmailDomainsLists = function validateEmailDomainsLists(blacklistDomains, whitelistDomains) {
85
+ if (!(blacklistDomains !== null && blacklistDomains !== void 0 && blacklistDomains.length) || !(whitelistDomains !== null && whitelistDomains !== void 0 && whitelistDomains.length)) {
86
+ return;
87
+ }
88
+ var uniqueDomains = new Set([].concat(_toConsumableArray(blacklistDomains), _toConsumableArray(whitelistDomains)));
89
+ if (uniqueDomains.size !== blacklistDomains.length + whitelistDomains.length) {
90
+ console.error('Blacklisted domains must not overlap whitelisted domains');
91
+ }
92
+ };
93
+ var validateWithDomainsLists = function validateWithDomainsLists(domainWithZone, options) {
94
+ var _options$whitelistDom, _options$blacklistDom, _options$blacklistDom2, _options$whitelistDom2;
95
+ if (!((_options$whitelistDom = options.whitelistDomains) !== null && _options$whitelistDom !== void 0 && (_options$whitelistDom = _options$whitelistDom.value) !== null && _options$whitelistDom !== void 0 && _options$whitelistDom.length) && !((_options$blacklistDom = options.blacklistDomains) !== null && _options$blacklistDom !== void 0 && (_options$blacklistDom = _options$blacklistDom.value) !== null && _options$blacklistDom !== void 0 && _options$blacklistDom.length)) {
96
+ return {
97
+ isValid: true
98
+ };
99
+ }
100
+ if (options !== null && options !== void 0 && (_options$blacklistDom2 = options.blacklistDomains) !== null && _options$blacklistDom2 !== void 0 && (_options$blacklistDom2 = _options$blacklistDom2.value) !== null && _options$blacklistDom2 !== void 0 && _options$blacklistDom2.includes(domainWithZone)) {
101
+ var _options$blacklistDom3;
102
+ return {
103
+ isValid: false,
104
+ errorMessage: ((_options$blacklistDom3 = options.blacklistDomains) === null || _options$blacklistDom3 === void 0 ? void 0 : _options$blacklistDom3.errorMessage) || 'Domain is blacklisted'
105
+ };
106
+ }
107
+ if (!(options !== null && options !== void 0 && (_options$whitelistDom2 = options.whitelistDomains) !== null && _options$whitelistDom2 !== void 0 && (_options$whitelistDom2 = _options$whitelistDom2.value) !== null && _options$whitelistDom2 !== void 0 && _options$whitelistDom2.includes(domainWithZone))) {
108
+ var _options$whitelistDom3;
109
+ return {
110
+ isValid: false,
111
+ errorMessage: ((_options$whitelistDom3 = options.whitelistDomains) === null || _options$whitelistDom3 === void 0 ? void 0 : _options$whitelistDom3.errorMessage) || 'Domain is not whitelisted'
112
+ };
113
+ }
114
+ return {
115
+ isValid: true
116
+ };
117
+ };
118
+ var validateEmail = function validateEmail(email, options) {
119
+ var _options$customEmailR, _options$minLength2, _options$maxLength2;
120
+ if (!email) {
121
+ return {
122
+ isValid: true
123
+ };
124
+ }
125
+ var emailRegex = (options === null || options === void 0 || (_options$customEmailR = options.customEmailRegex) === null || _options$customEmailR === void 0 ? void 0 : _options$customEmailR.value) || _utils.constants.emailPattern;
126
+ if (!emailRegex.test(email)) {
127
+ var _options$customEmailR2;
128
+ return {
129
+ isValid: false,
130
+ errorMessage: (options === null || options === void 0 || (_options$customEmailR2 = options.customEmailRegex) === null || _options$customEmailR2 === void 0 ? void 0 : _options$customEmailR2.errorMessage) || 'Invalid email'
131
+ };
132
+ }
133
+ if (!options) {
134
+ return {
135
+ isValid: true
136
+ };
137
+ }
138
+ if ((_options$minLength2 = options.minLength) !== null && _options$minLength2 !== void 0 && _options$minLength2.value && email.length < options.minLength.value) {
139
+ var _options$minLength3;
140
+ return {
141
+ isValid: false,
142
+ errorMessage: ((_options$minLength3 = options.minLength) === null || _options$minLength3 === void 0 ? void 0 : _options$minLength3.errorMessage) || 'Email is too short'
143
+ };
144
+ }
145
+ if ((_options$maxLength2 = options.maxLength) !== null && _options$maxLength2 !== void 0 && _options$maxLength2.value && email.length > options.maxLength.value) {
146
+ var _options$maxLength3;
147
+ return {
148
+ isValid: false,
149
+ errorMessage: ((_options$maxLength3 = options.maxLength) === null || _options$maxLength3 === void 0 ? void 0 : _options$maxLength3.errorMessage) || 'Email is too long'
150
+ };
151
+ }
152
+ var emailHost = email.split('@')[0];
153
+ var emailDomainWithZone = email.split('@')[1];
154
+ var emailZone = emailDomainWithZone.split('.').pop();
155
+ if (!(emailZone !== null && emailZone !== void 0 && emailZone.length)) {
156
+ var _options$customEmailR3;
157
+ return {
158
+ isValid: false,
159
+ errorMessage: ((_options$customEmailR3 = options.customEmailRegex) === null || _options$customEmailR3 === void 0 ? void 0 : _options$customEmailR3.errorMessage) || 'Invalid email'
160
+ };
161
+ }
162
+ var emailDomain = emailDomainWithZone.substring(0, emailDomainWithZone.length - (emailZone.length + 1));
163
+ var hostValidation = validateWithLengthOptions(emailHost, options, 'Host');
164
+ if (!hostValidation.isValid) {
165
+ return hostValidation;
166
+ }
167
+ var domainValidation = validateWithLengthOptions(emailDomain, options, 'Domain');
168
+ if (!domainValidation.isValid) {
169
+ return domainValidation;
170
+ }
171
+ var zoneValidation = validateWithLengthOptions(emailZone, options, 'Zone');
172
+ if (!zoneValidation.isValid) {
173
+ return zoneValidation;
174
+ }
175
+ var domainWithZoneValidation = validateWithDomainsLists(emailDomainWithZone, options);
176
+ if (!domainWithZoneValidation.isValid) {
177
+ return domainWithZoneValidation;
178
+ }
179
+ return {
180
+ isValid: true
181
+ };
182
+ };
183
+ var validatePassword = function validatePassword(password, options) {
184
+ var _options$minLength4, _options$maxLength4, _options$includeUpper, _options$includeLower, _options$includeDigit, _options$includeSpeci;
185
+ if (!password || !options) {
186
+ return {
187
+ isValid: true
188
+ };
189
+ }
190
+ if ((_options$minLength4 = options.minLength) !== null && _options$minLength4 !== void 0 && _options$minLength4.value && password.length < options.minLength.value) {
191
+ var _options$minLength5;
192
+ return {
193
+ isValid: false,
194
+ errorMessage: ((_options$minLength5 = options.minLength) === null || _options$minLength5 === void 0 ? void 0 : _options$minLength5.errorMessage) || 'Password is too short'
195
+ };
196
+ }
197
+ if ((_options$maxLength4 = options.maxLength) !== null && _options$maxLength4 !== void 0 && _options$maxLength4.value && password.length > options.maxLength.value) {
198
+ var _options$maxLength5;
199
+ return {
200
+ isValid: false,
201
+ errorMessage: ((_options$maxLength5 = options.maxLength) === null || _options$maxLength5 === void 0 ? void 0 : _options$maxLength5.errorMessage) || 'Password is too long'
202
+ };
203
+ }
204
+ var lowercasedPassword = password.toLowerCase();
205
+ var uppercasedPassword = password.toUpperCase();
206
+ if ((_options$includeUpper = options.includeUppercase) !== null && _options$includeUpper !== void 0 && _options$includeUpper.value && password === lowercasedPassword) {
207
+ var _options$includeUpper2;
208
+ return {
209
+ isValid: false,
210
+ errorMessage: ((_options$includeUpper2 = options.includeUppercase) === null || _options$includeUpper2 === void 0 ? void 0 : _options$includeUpper2.errorMessage) || 'Password must contain at least one uppercase letter'
211
+ };
212
+ }
213
+ if ((_options$includeLower = options.includeLowercase) !== null && _options$includeLower !== void 0 && _options$includeLower.value && password === uppercasedPassword) {
214
+ var _options$includeLower2;
215
+ return {
216
+ isValid: false,
217
+ errorMessage: ((_options$includeLower2 = options.includeLowercase) === null || _options$includeLower2 === void 0 ? void 0 : _options$includeLower2.errorMessage) || 'Password must contain at least one lowercase letter'
218
+ };
219
+ }
220
+ if ((_options$includeDigit = options.includeDigits) !== null && _options$includeDigit !== void 0 && _options$includeDigit.value && !/\d/.test(password)) {
221
+ var _options$includeDigit2;
222
+ return {
223
+ isValid: false,
224
+ errorMessage: ((_options$includeDigit2 = options.includeDigits) === null || _options$includeDigit2 === void 0 ? void 0 : _options$includeDigit2.errorMessage) || 'Password must contain digits'
225
+ };
226
+ }
227
+ if ((_options$includeSpeci = options.includeSpecialSymbols) !== null && _options$includeSpeci !== void 0 && _options$includeSpeci.value && !_utils.constants.specialCharacters.test(password)) {
228
+ var _options$includeSpeci2;
229
+ return {
230
+ isValid: false,
231
+ errorMessage: ((_options$includeSpeci2 = options.includeSpecialSymbols) === null || _options$includeSpeci2 === void 0 ? void 0 : _options$includeSpeci2.errorMessage) || 'Password must contain special characters'
232
+ };
233
+ }
234
+ return {
235
+ isValid: true
236
+ };
237
+ };
238
+ var validationVariants = {
239
+ email: validateEmail,
240
+ password: validatePassword
241
+ };
242
+ var useValidation = exports.useValidation = function useValidation(_ref) {
243
+ var validationType = _ref.validationType,
244
+ options = _ref.options,
245
+ onValidate = _ref.onValidate;
246
+ var handleValidationBlur = function handleValidationBlur(event) {
247
+ if (!validationType) {
248
+ return;
249
+ }
250
+ var validationResult = validationVariants[validationType](event.target.value, options);
251
+ onValidate === null || onValidate === void 0 || onValidate(validationResult);
252
+ };
253
+ var handleValidationKeyDown = function handleValidationKeyDown(event) {
254
+ if (!validationType) {
255
+ return;
256
+ }
257
+ if (event.keyCode === _utils.constants.keyCodes.Enter) {
258
+ event.preventDefault();
259
+ var _ref2 = event.target,
260
+ value = _ref2.value;
261
+ var validationResult = validationVariants[validationType](value, options);
262
+ onValidate === null || onValidate === void 0 || onValidate(validationResult);
263
+ }
264
+ };
265
+ (0, _react.useEffect)(function () {
266
+ validateLenghtOptions(options);
267
+ if (validationType === 'email') {
268
+ var _whitelistDomains, _blacklistDomains;
269
+ validateEmailDomainsLists(options === null || options === void 0 || (_whitelistDomains = options.whitelistDomains) === null || _whitelistDomains === void 0 ? void 0 : _whitelistDomains.value, (_blacklistDomains = options.blacklistDomains) === null || _blacklistDomains === void 0 ? void 0 : _blacklistDomains.value);
270
+ }
271
+ }, []);
272
+ return {
273
+ handleValidationBlur: handleValidationBlur,
274
+ handleValidationKeyDown: handleValidationKeyDown
275
+ };
276
+ };
@@ -1,7 +1,7 @@
1
1
  import React, { ComponentProps, useState } from 'react';
2
2
  import type { StoryObj, Meta } from '@storybook/react';
3
3
  import { action } from '@storybook/addon-actions';
4
- import { IconPlaceholder } from '@salutejs/plasma-sb-utils';
4
+ import { disableProps, IconPlaceholder } from '@salutejs/plasma-sb-utils';
5
5
 
6
6
  import { WithTheme } from '../../../_helpers';
7
7
  import { IconCross } from '../../../../components/_Icon';
@@ -291,3 +291,255 @@ export const Chips: StoryObj<StoryPropsChips> = {
291
291
  },
292
292
  render: (args) => <StoryChips {...args} />,
293
293
  };
294
+
295
+ type StoryEmailValidationProps = StoryPropsDefault & {
296
+ minLengthValue?: number;
297
+ minLengthErrorMessage?: string;
298
+ maxLengthValue?: number;
299
+ maxLengthErrorMessage?: string;
300
+ minHostLengthValue?: number;
301
+ minHostLengthErrorMessage?: string;
302
+ maxHostLengthValue?: number;
303
+ maxHostLengthErrorMessage?: string;
304
+ minDomainLengthValue?: number;
305
+ minDomainLengthErrorMessage?: string;
306
+ maxDomainLengthValue?: number;
307
+ maxDomainLengthErrorMessage?: string;
308
+ minZoneLengthValue?: number;
309
+ minZoneLengthErrorMessage?: string;
310
+ maxZoneLengthValue?: number;
311
+ maxZoneLengthErrorMessage?: string;
312
+ whitelistDomainsValue?: string;
313
+ whitelistDomainsErrorMessage?: string;
314
+ blacklistDomainsValue?: string;
315
+ blacklistDomainsErrorMessage?: string;
316
+ };
317
+
318
+ const StoryEmailValidation = ({
319
+ minLengthValue,
320
+ minLengthErrorMessage,
321
+ maxLengthValue,
322
+ maxLengthErrorMessage,
323
+ minHostLengthValue,
324
+ minHostLengthErrorMessage,
325
+ maxHostLengthValue,
326
+ maxHostLengthErrorMessage,
327
+ minDomainLengthValue,
328
+ minDomainLengthErrorMessage,
329
+ maxDomainLengthValue,
330
+ maxDomainLengthErrorMessage,
331
+ minZoneLengthValue,
332
+ minZoneLengthErrorMessage,
333
+ maxZoneLengthValue,
334
+ maxZoneLengthErrorMessage,
335
+ whitelistDomainsValue,
336
+ whitelistDomainsErrorMessage,
337
+ blacklistDomainsValue,
338
+ blacklistDomainsErrorMessage,
339
+ ...rest
340
+ }: StoryEmailValidationProps) => {
341
+ const [error, setError] = useState('');
342
+
343
+ const validationOptions = {
344
+ minLength: {
345
+ value: minLengthValue || undefined,
346
+ errorMessage: minLengthErrorMessage || 'Почта слишком короткая',
347
+ },
348
+ maxLength: {
349
+ value: maxLengthValue || undefined,
350
+ errorMessage: maxLengthErrorMessage || 'Почта слишком длинная',
351
+ },
352
+ minHostLength: {
353
+ value: minHostLengthValue || undefined,
354
+ errorMessage: minHostLengthErrorMessage || 'Хост слишком короткий',
355
+ },
356
+ maxHostLength: {
357
+ value: maxHostLengthValue || undefined,
358
+ errorMessage: maxHostLengthErrorMessage || 'Хост слишком длинный',
359
+ },
360
+ minDomainLength: {
361
+ value: minDomainLengthValue || undefined,
362
+ errorMessage: minDomainLengthErrorMessage || 'Домен слишком короткий',
363
+ },
364
+ maxDomainLength: {
365
+ value: maxDomainLengthValue || undefined,
366
+ errorMessage: maxDomainLengthErrorMessage || 'Домен слишком длинный',
367
+ },
368
+ minZoneLength: {
369
+ value: minZoneLengthValue || undefined,
370
+ errorMessage: minZoneLengthErrorMessage || 'Доменная зона слишком короткая',
371
+ },
372
+ maxZoneLength: {
373
+ value: maxZoneLengthValue || undefined,
374
+ errorMessage: maxZoneLengthErrorMessage || 'Доменная зона слишком длинная',
375
+ },
376
+ whitelistDomains: {
377
+ value: whitelistDomainsValue?.split(',') || undefined,
378
+ errorMessage: whitelistDomainsErrorMessage || 'Домен не разрешен',
379
+ },
380
+ blacklistDomains: {
381
+ value: blacklistDomainsValue?.split(',') || undefined,
382
+ errorMessage: blacklistDomainsErrorMessage || 'Домен запрещен',
383
+ },
384
+ };
385
+
386
+ const handleOnChange = () => {
387
+ setError('');
388
+ };
389
+
390
+ const handleOnValidate = ({ errorMessage }: { errorMessage?: string }) => {
391
+ setError(errorMessage || '');
392
+ };
393
+
394
+ return (
395
+ <TextField
396
+ label="Валидация почты"
397
+ validationType="email"
398
+ options={validationOptions}
399
+ size="l"
400
+ view={error ? 'negative' : 'default'}
401
+ leftHelper={error || 'Валидация почты'}
402
+ onChange={handleOnChange}
403
+ onValidate={handleOnValidate}
404
+ {...rest}
405
+ />
406
+ );
407
+ };
408
+
409
+ export const EmailValidation: StoryObj<StoryEmailValidationProps> = {
410
+ argTypes: {
411
+ ...disableProps(['view', 'size', 'maxLength', 'required', 'requiredPlacement', 'optional']),
412
+ },
413
+ args: {
414
+ labelPlacement: 'outer',
415
+ placeholder: 'Заполните поле',
416
+ minLengthValue: 5,
417
+ minLengthErrorMessage: 'Почта слишком короткая',
418
+ maxLengthValue: 25,
419
+ maxLengthErrorMessage: 'Почта слишком длинная',
420
+ minHostLengthValue: 1,
421
+ minHostLengthErrorMessage: 'Хост слишком короткий',
422
+ maxHostLengthValue: 12,
423
+ maxHostLengthErrorMessage: 'Хост слишком длинный',
424
+ minDomainLengthValue: 1,
425
+ minDomainLengthErrorMessage: 'Домен слишком короткий',
426
+ maxDomainLengthValue: 6,
427
+ maxDomainLengthErrorMessage: 'Домен слишком длинный',
428
+ minZoneLengthValue: 1,
429
+ minZoneLengthErrorMessage: 'Доменная зона слишком короткая',
430
+ maxZoneLengthValue: 5,
431
+ maxZoneLengthErrorMessage: 'Доменная зона слишком длинная',
432
+ whitelistDomainsValue: 'gmail.com,yandex.ru,mail.ru,mail.com',
433
+ whitelistDomainsErrorMessage: 'Домен не разрешен',
434
+ blacklistDomainsValue: 'heh.org,hah.ha',
435
+ blacklistDomainsErrorMessage: 'Домен запрещен',
436
+ },
437
+ render: (args) => <StoryEmailValidation {...args} />,
438
+ };
439
+
440
+ type StoryPasswordValidationProps = StoryPropsDefault & {
441
+ minLengthValue?: number;
442
+ minLengthErrorMessage?: string;
443
+ maxLengthValue?: number;
444
+ maxLengthErrorMessage?: string;
445
+ includeUppercase?: boolean;
446
+ includeUppercaseErrorMessage?: string;
447
+ includeLowercase?: boolean;
448
+ includeLowercaseErrorMessage?: string;
449
+ includeDigits?: boolean;
450
+ includeDigitsErrorMessage?: string;
451
+ includeSpecialSymbols?: boolean;
452
+ includeSpecialSymbolsErrorMessage?: string;
453
+ };
454
+
455
+ const StoryPasswordValidation = ({
456
+ minLengthValue,
457
+ minLengthErrorMessage,
458
+ maxLengthValue,
459
+ maxLengthErrorMessage,
460
+ includeUppercase,
461
+ includeUppercaseErrorMessage,
462
+ includeLowercase,
463
+ includeLowercaseErrorMessage,
464
+ includeDigits,
465
+ includeDigitsErrorMessage,
466
+ includeSpecialSymbols,
467
+ includeSpecialSymbolsErrorMessage,
468
+ ...rest
469
+ }: StoryPasswordValidationProps) => {
470
+ const [error, setError] = useState('');
471
+
472
+ const validationOptions = {
473
+ minLength: {
474
+ value: minLengthValue || undefined,
475
+ errorMessage: minLengthErrorMessage || 'Пароль слишком короткий',
476
+ },
477
+ maxLength: {
478
+ value: maxLengthValue || undefined,
479
+ errorMessage: maxLengthErrorMessage || 'Пароль слишком длинный',
480
+ },
481
+ includeUppercase: {
482
+ value: includeUppercase,
483
+ errorMessage: includeUppercaseErrorMessage || 'Пароль должен содержать хотя бы одну заглавную букву',
484
+ },
485
+ includeLowercase: {
486
+ value: includeLowercase,
487
+ errorMessage: includeLowercaseErrorMessage || 'Пароль должен содержать хотя бы одну строчную букву',
488
+ },
489
+ includeDigits: {
490
+ value: includeDigits,
491
+ errorMessage: includeDigitsErrorMessage || 'Пароль должен содержать хотя бы одну цифру',
492
+ },
493
+ includeSpecialSymbols: {
494
+ value: includeSpecialSymbols,
495
+ errorMessage:
496
+ includeSpecialSymbolsErrorMessage || 'Пароль должен содержать хотя бы один специальный символ',
497
+ },
498
+ };
499
+
500
+ const handleOnChange = () => {
501
+ setError('');
502
+ };
503
+
504
+ const handleOnValidate = ({ errorMessage }: { errorMessage?: string }) => {
505
+ setError(errorMessage || '');
506
+ };
507
+
508
+ return (
509
+ <TextField
510
+ label="Валидация пароля"
511
+ validationType="password"
512
+ options={validationOptions}
513
+ size="l"
514
+ view={error ? 'negative' : 'default'}
515
+ leftHelper={error || 'Валидация пароля'}
516
+ onChange={handleOnChange}
517
+ onValidate={handleOnValidate}
518
+ {...rest}
519
+ />
520
+ );
521
+ };
522
+
523
+ export const PasswordValidation: StoryObj<StoryPasswordValidationProps> = {
524
+ argTypes: {
525
+ ...disableProps(['view', 'size', 'maxLength', 'required', 'requiredPlacement', 'optional']),
526
+ },
527
+ args: {
528
+ labelPlacement: 'outer',
529
+ placeholder: 'Заполните поле',
530
+ passwordHidden: false,
531
+ minLengthValue: 5,
532
+ minLengthErrorMessage: 'Пароль слишком короткий',
533
+ maxLengthValue: 25,
534
+ maxLengthErrorMessage: 'Пароль слишком длинный',
535
+ includeUppercase: true,
536
+ includeUppercaseErrorMessage: 'Пароль должен содержать хотя бы одну заглавную букву',
537
+ includeLowercase: true,
538
+ includeLowercaseErrorMessage: 'Пароль должен содержать хотя бы одну строчную букву',
539
+ includeDigits: true,
540
+ includeDigitsErrorMessage: 'Пароль должен содержать хотя бы одну цифру',
541
+ includeSpecialSymbols: true,
542
+ includeSpecialSymbolsErrorMessage: 'Пароль должен содержать хотя бы один специальный символ',
543
+ },
544
+ render: (args) => <StoryPasswordValidation {...args} />,
545
+ };