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

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 (180) 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/Select/ui/Target/ui/Textfield/Textfield.js +3 -18
  24. package/cjs/components/Select/ui/Target/ui/Textfield/Textfield.js.map +1 -1
  25. package/cjs/components/TextField/TextField.js +27 -3
  26. package/cjs/components/TextField/TextField.js.map +1 -1
  27. package/cjs/components/TextField/hooks/useValidation.js +273 -0
  28. package/cjs/components/TextField/hooks/useValidation.js.map +1 -0
  29. package/cjs/index.css +4 -5
  30. package/cjs/utils/constants.js +4 -0
  31. package/cjs/utils/constants.js.map +1 -1
  32. package/emotion/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
  33. package/emotion/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  34. package/emotion/cjs/components/Dropdown/Dropdown.js +2 -4
  35. package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
  36. package/emotion/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
  37. package/emotion/cjs/components/Select/Select.js +1 -0
  38. package/emotion/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  39. package/emotion/cjs/components/Select/ui/Target/ui/Textfield/Textfield.js +3 -24
  40. package/emotion/cjs/components/TextField/TextField.js +27 -4
  41. package/emotion/cjs/components/TextField/TextField.template-doc.mdx +330 -0
  42. package/emotion/cjs/components/TextField/hooks/index.js +8 -1
  43. package/emotion/cjs/components/TextField/hooks/useValidation.js +276 -0
  44. package/emotion/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  45. package/emotion/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  46. package/emotion/cjs/utils/constants.js +4 -2
  47. package/emotion/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  48. package/emotion/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  49. package/emotion/es/components/Dropdown/Dropdown.js +2 -4
  50. package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  51. package/emotion/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +11 -15
  52. package/emotion/es/components/Select/Select.js +1 -0
  53. package/emotion/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  54. package/emotion/es/components/Select/ui/Target/ui/Textfield/Textfield.js +3 -24
  55. package/emotion/es/components/TextField/TextField.js +28 -5
  56. package/emotion/es/components/TextField/TextField.template-doc.mdx +330 -0
  57. package/emotion/es/components/TextField/hooks/index.js +2 -1
  58. package/emotion/es/components/TextField/hooks/useValidation.js +270 -0
  59. package/emotion/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  60. package/emotion/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  61. package/emotion/es/utils/constants.js +3 -1
  62. package/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  63. package/es/components/Combobox/ComboboxNew/Combobox.js.map +1 -1
  64. package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  65. package/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js.map +1 -1
  66. package/es/components/Combobox/ComboboxOld/Combobox.css +4 -5
  67. package/es/components/Combobox/ComboboxOld/ui/ComboboxDivider/ComboboxDivider.css +4 -5
  68. package/es/components/Combobox/ComboboxOld/ui/ComboboxFooter/ComboboxFooter.css +4 -5
  69. package/es/components/Combobox/ComboboxOld/ui/ComboboxGroup/ComboboxGroup.css +4 -5
  70. package/es/components/Combobox/ComboboxOld/ui/ComboboxHeader/ComboboxHeader.css +4 -5
  71. package/es/components/Dropdown/Dropdown.css +4 -5
  72. package/es/components/Dropdown/Dropdown.js +2 -4
  73. package/es/components/Dropdown/Dropdown.js.map +1 -1
  74. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.css +4 -5
  75. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  76. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.js.map +1 -1
  77. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -7
  78. package/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js.map +1 -1
  79. package/es/components/Dropdown/ui/DropdownItem/{DropdownItem.styles_14yih1y.css → DropdownItem.styles_1b439rx.css} +0 -1
  80. package/es/components/Select/Select.js +1 -0
  81. package/es/components/Select/Select.js.map +1 -1
  82. package/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  83. package/es/components/Select/ui/Inner/ui/Item/Item.js.map +1 -1
  84. package/es/components/Select/ui/Target/ui/Textfield/Textfield.js +4 -19
  85. package/es/components/Select/ui/Target/ui/Textfield/Textfield.js.map +1 -1
  86. package/es/components/TextField/TextField.js +27 -3
  87. package/es/components/TextField/TextField.js.map +1 -1
  88. package/es/components/TextField/hooks/useValidation.js +269 -0
  89. package/es/components/TextField/hooks/useValidation.js.map +1 -0
  90. package/es/index.css +4 -5
  91. package/es/utils/constants.js +3 -1
  92. package/es/utils/constants.js.map +1 -1
  93. package/package.json +2 -3
  94. package/styled-components/cjs/components/Combobox/ComboboxNew/Combobox.js +1 -0
  95. package/styled-components/cjs/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  96. package/styled-components/cjs/components/Dropdown/Dropdown.js +2 -4
  97. package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.js +2 -3
  98. package/styled-components/cjs/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
  99. package/styled-components/cjs/components/Select/Select.js +1 -0
  100. package/styled-components/cjs/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  101. package/styled-components/cjs/components/Select/ui/Target/ui/Textfield/Textfield.js +3 -24
  102. package/styled-components/cjs/components/TextField/TextField.js +26 -3
  103. package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +330 -0
  104. package/styled-components/cjs/components/TextField/hooks/index.js +8 -1
  105. package/styled-components/cjs/components/TextField/hooks/useValidation.js +276 -0
  106. package/styled-components/cjs/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  107. package/styled-components/cjs/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  108. package/styled-components/cjs/utils/constants.js +4 -2
  109. package/styled-components/es/components/Combobox/ComboboxNew/Combobox.js +1 -0
  110. package/styled-components/es/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.js +2 -1
  111. package/styled-components/es/components/Dropdown/Dropdown.js +2 -4
  112. package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.js +3 -4
  113. package/styled-components/es/components/Dropdown/ui/DropdownItem/DropdownItem.styles.js +2 -5
  114. package/styled-components/es/components/Select/Select.js +1 -0
  115. package/styled-components/es/components/Select/ui/Inner/ui/Item/Item.js +2 -1
  116. package/styled-components/es/components/Select/ui/Target/ui/Textfield/Textfield.js +3 -24
  117. package/styled-components/es/components/TextField/TextField.js +27 -4
  118. package/styled-components/es/components/TextField/TextField.template-doc.mdx +330 -0
  119. package/styled-components/es/components/TextField/hooks/index.js +2 -1
  120. package/styled-components/es/components/TextField/hooks/useValidation.js +270 -0
  121. package/styled-components/es/examples/plasma_b2c/components/TextField/TextField.stories.tsx +253 -1
  122. package/styled-components/es/examples/plasma_web/components/TextField/TextField.stories.tsx +252 -0
  123. package/styled-components/es/utils/constants.js +3 -1
  124. package/types/components/Autocomplete/Autocomplete.types.d.ts +2 -2
  125. package/types/components/Autocomplete/Autocomplete.types.d.ts.map +1 -1
  126. package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts +1676 -92
  127. package/types/components/Autocomplete/ui/TextField/TextField.styles.d.ts.map +1 -1
  128. package/types/components/Combobox/ComboboxNew/Combobox.d.ts.map +1 -1
  129. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts +2 -1
  130. package/types/components/Combobox/ComboboxNew/Combobox.types.d.ts.map +1 -1
  131. package/types/components/Combobox/ComboboxNew/ui/Inner/ui/Item/Item.d.ts.map +1 -1
  132. package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts +1676 -92
  133. package/types/components/Combobox/ComboboxNew/ui/Target/Target.styles.d.ts.map +1 -1
  134. package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts +1676 -92
  135. package/types/components/DatePicker/SingleDate/SingleDate.styles.d.ts.map +1 -1
  136. package/types/components/Dropdown/Dropdown.d.ts +2 -50
  137. package/types/components/Dropdown/Dropdown.d.ts.map +1 -1
  138. package/types/components/Dropdown/Dropdown.types.d.ts +6 -11
  139. package/types/components/Dropdown/Dropdown.types.d.ts.map +1 -1
  140. package/types/components/Dropdown/index.d.ts +0 -1
  141. package/types/components/Dropdown/index.d.ts.map +1 -1
  142. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.d.ts.map +1 -1
  143. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts +0 -1
  144. package/types/components/Dropdown/ui/DropdownItem/DropdownItem.styles.d.ts.map +1 -1
  145. package/types/components/Range/Range.styles.d.ts +1676 -92
  146. package/types/components/Range/Range.styles.d.ts.map +1 -1
  147. package/types/components/Select/Select.d.ts.map +1 -1
  148. package/types/components/Select/Select.types.d.ts +2 -1
  149. package/types/components/Select/Select.types.d.ts.map +1 -1
  150. package/types/components/Select/ui/Inner/ui/Item/Item.d.ts.map +1 -1
  151. package/types/components/Select/ui/Target/ui/Textfield/Textfield.d.ts.map +1 -1
  152. package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts +1676 -92
  153. package/types/components/Select/ui/Target/ui/Textfield/Textfield.styles.d.ts.map +1 -1
  154. package/types/components/Slider/components/Double/Double.styles.d.ts +1676 -92
  155. package/types/components/Slider/components/Double/Double.styles.d.ts.map +1 -1
  156. package/types/components/TextField/TextField.d.ts.map +1 -1
  157. package/types/components/TextField/TextField.types.d.ts +51 -1
  158. package/types/components/TextField/TextField.types.d.ts.map +1 -1
  159. package/types/components/TextField/hooks/index.d.ts +1 -0
  160. package/types/components/TextField/hooks/index.d.ts.map +1 -1
  161. package/types/components/TextField/hooks/useValidation.d.ts +7 -0
  162. package/types/components/TextField/hooks/useValidation.d.ts.map +1 -0
  163. package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts +64 -2
  164. package/types/examples/plasma_b2c/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  165. package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts +1 -25
  166. package/types/examples/plasma_b2c/components/Dropdown/Dropdown.d.ts.map +1 -1
  167. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts +2732 -92
  168. package/types/examples/plasma_b2c/components/Mask/Mask.d.ts.map +1 -1
  169. package/types/examples/plasma_b2c/components/TextField/TextField.d.ts +1676 -92
  170. package/types/examples/plasma_b2c/components/TextField/TextField.d.ts.map +1 -1
  171. package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts +64 -2
  172. package/types/examples/plasma_web/components/Autocomplete/Autocomplete.d.ts.map +1 -1
  173. package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts +1 -25
  174. package/types/examples/plasma_web/components/Dropdown/Dropdown.d.ts.map +1 -1
  175. package/types/examples/plasma_web/components/Mask/Mask.d.ts +2732 -92
  176. package/types/examples/plasma_web/components/Mask/Mask.d.ts.map +1 -1
  177. package/types/examples/plasma_web/components/TextField/TextField.d.ts +1676 -92
  178. package/types/examples/plasma_web/components/TextField/TextField.d.ts.map +1 -1
  179. package/types/utils/constants.d.ts +2 -0
  180. package/types/utils/constants.d.ts.map +1 -1
@@ -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
+ };
@@ -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
+ };
@@ -10,4 +10,6 @@ export var keyCodes = {
10
10
  Enter: 13,
11
11
  Space: 32,
12
12
  Escape: 27
13
- };
13
+ };
14
+ export var emailPattern = /^[^\s@]+@([^\s@.,]+\.)+[^\s@.,]{2,}$/;
15
+ export var specialCharacters = /[!@#$%^&*(),.?":{}|<>]/;
@@ -349,6 +349,7 @@ var comboboxRoot = function comboboxRoot(Root) {
349
349
  handleItemClick: handleItemClick,
350
350
  variant: variant,
351
351
  renderItem: renderItem,
352
+ valueToItemMap: valueToItemMap,
352
353
  treeId: treeId
353
354
  }
354
355
  }, /*#__PURE__*/React.createElement(FloatingPopover, {