@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
@@ -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, {