@true-engineering/true-react-common-ui-kit 2.2.0 → 2.3.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 (244) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +16 -0
  3. package/dist/components/Flag/augment.d.ts +1 -1
  4. package/dist/components/Icon/complexIcons/augment.d.ts +1 -1
  5. package/dist/components/Modal/Modal.d.ts +3 -3
  6. package/dist/true-react-common-ui-kit.js +151 -97
  7. package/dist/true-react-common-ui-kit.js.map +1 -1
  8. package/dist/true-react-common-ui-kit.umd.cjs +151 -97
  9. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  10. package/dist/vite-env.d.ts +1 -1
  11. package/package.json +93 -93
  12. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  13. package/src/components/AccountInfo/AccountInfo.styles.ts +55 -55
  14. package/src/components/AccountInfo/AccountInfo.tsx +77 -77
  15. package/src/components/AccountInfo/index.ts +2 -2
  16. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  17. package/src/components/AddButton/AddButton.styles.ts +34 -34
  18. package/src/components/AddButton/AddButton.tsx +48 -48
  19. package/src/components/AddButton/index.ts +2 -2
  20. package/src/components/Button/Button.stories.tsx +52 -52
  21. package/src/components/Button/Button.styles.ts +196 -196
  22. package/src/components/Button/Button.tsx +167 -167
  23. package/src/components/Button/index.ts +2 -2
  24. package/src/components/Checkbox/Checkbox.stories.tsx +32 -32
  25. package/src/components/Checkbox/Checkbox.styles.ts +62 -62
  26. package/src/components/Checkbox/Checkbox.tsx +105 -105
  27. package/src/components/Checkbox/index.ts +2 -2
  28. package/src/components/CloseButton/CloseButton.styles.ts +34 -34
  29. package/src/components/CloseButton/CloseButton.tsx +35 -35
  30. package/src/components/CloseButton/index.ts +2 -2
  31. package/src/components/Colors/Colors.stories.tsx +7 -7
  32. package/src/components/Colors/Colors.styles.ts +38 -38
  33. package/src/components/Colors/Colors.tsx +26 -26
  34. package/src/components/Colors/index.ts +2 -2
  35. package/src/components/CssBaseline/CssBaseline.styles.ts +15 -15
  36. package/src/components/CssBaseline/CssBaseline.tsx +15 -15
  37. package/src/components/CssBaseline/index.ts +2 -2
  38. package/src/components/DateInput/DateInput.stories.tsx +61 -61
  39. package/src/components/DateInput/DateInput.styles.ts +14 -14
  40. package/src/components/DateInput/DateInput.tsx +82 -82
  41. package/src/components/DateInput/constants.ts +2 -2
  42. package/src/components/DateInput/index.ts +3 -3
  43. package/src/components/DatePicker/DatePicker.stories.tsx +87 -87
  44. package/src/components/DatePicker/DatePicker.styles.ts +44 -44
  45. package/src/components/DatePicker/DatePicker.tsx +327 -327
  46. package/src/components/DatePicker/DatePickerHeader/DatePickerHeader.styles.ts +84 -84
  47. package/src/components/DatePicker/DatePickerHeader/DatePickerHeader.tsx +79 -79
  48. package/src/components/DatePicker/DatePickerHeader/index.ts +2 -2
  49. package/src/components/DatePicker/constants.ts +1 -1
  50. package/src/components/DatePicker/helpers.ts +23 -23
  51. package/src/components/DatePicker/index.ts +3 -3
  52. package/src/components/DatePicker/types.ts +45 -45
  53. package/src/components/Description/Description.stories.tsx +27 -27
  54. package/src/components/Description/Description.styles.ts +31 -31
  55. package/src/components/Description/Description.tsx +60 -60
  56. package/src/components/Description/index.ts +2 -2
  57. package/src/components/FiltersPane/FilterInterval/FilterInterval.styles.ts +64 -64
  58. package/src/components/FiltersPane/FilterInterval/FilterInterval.tsx +143 -143
  59. package/src/components/FiltersPane/FilterInterval/index.ts +1 -1
  60. package/src/components/FiltersPane/FilterMultiSelect/FilterMultiSelect.tsx +10 -10
  61. package/src/components/FiltersPane/FilterMultiSelect/index.ts +1 -1
  62. package/src/components/FiltersPane/FilterSelect/FilterSelect.styles.ts +143 -143
  63. package/src/components/FiltersPane/FilterSelect/FilterSelect.tsx +348 -348
  64. package/src/components/FiltersPane/FilterSelect/index.ts +1 -1
  65. package/src/components/FiltersPane/FilterSelect/locales.ts +37 -37
  66. package/src/components/FiltersPane/FilterValueView/FilterValueView.styles.tsx +15 -15
  67. package/src/components/FiltersPane/FilterValueView/FilterValueView.tsx +166 -166
  68. package/src/components/FiltersPane/FilterValueView/index.tsx +1 -1
  69. package/src/components/FiltersPane/FilterWithDates/FilterWithDates.styles.ts +60 -60
  70. package/src/components/FiltersPane/FilterWithDates/FilterWithDates.tsx +184 -184
  71. package/src/components/FiltersPane/FilterWithDates/index.ts +1 -1
  72. package/src/components/FiltersPane/FilterWithPeriod/FilterWithPeriod.styles.ts +17 -17
  73. package/src/components/FiltersPane/FilterWithPeriod/FilterWithPeriod.tsx +198 -198
  74. package/src/components/FiltersPane/FilterWithPeriod/index.ts +1 -1
  75. package/src/components/FiltersPane/FilterWrapper/FilterWrapper.styles.ts +110 -110
  76. package/src/components/FiltersPane/FilterWrapper/FilterWrapper.tsx +346 -346
  77. package/src/components/FiltersPane/FilterWrapper/index.ts +1 -1
  78. package/src/components/FiltersPane/FiltersPane.stories.tsx +295 -295
  79. package/src/components/FiltersPane/FiltersPane.styles.ts +71 -71
  80. package/src/components/FiltersPane/FiltersPane.tsx +151 -151
  81. package/src/components/FiltersPane/FiltersPaneSearch/FiltersPaneSearch.styles.ts +109 -109
  82. package/src/components/FiltersPane/FiltersPaneSearch/FiltersPaneSearch.tsx +155 -155
  83. package/src/components/FiltersPane/FiltersPaneSearch/index.ts +1 -1
  84. package/src/components/FiltersPane/index.ts +20 -20
  85. package/src/components/FiltersPane/locales.ts +107 -107
  86. package/src/components/FiltersPane/types.ts +112 -112
  87. package/src/components/Flag/Flag.stories.tsx +29 -29
  88. package/src/components/Flag/Flag.styles.ts +18 -18
  89. package/src/components/Flag/Flag.tsx +27 -27
  90. package/src/components/Flag/augment.d.ts +1 -1
  91. package/src/components/Flag/index.ts +2 -2
  92. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +84 -84
  93. package/src/components/FlexibleTable/FlexibleTable.styles.ts +131 -131
  94. package/src/components/FlexibleTable/FlexibleTable.tsx +205 -205
  95. package/src/components/FlexibleTable/TableRow.tsx +152 -152
  96. package/src/components/FlexibleTable/TableValue.tsx +75 -75
  97. package/src/components/FlexibleTable/fixture-test.ts +254 -254
  98. package/src/components/FlexibleTable/index.ts +3 -3
  99. package/src/components/FlexibleTable/types.ts +52 -52
  100. package/src/components/Icon/ComplexIconBoilerplate.tsx +17 -17
  101. package/src/components/Icon/Icon.stories.tsx +85 -85
  102. package/src/components/Icon/Icon.styles.ts +10 -10
  103. package/src/components/Icon/Icon.tsx +32 -32
  104. package/src/components/Icon/IconBoilerplate.tsx +42 -42
  105. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  106. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  107. package/src/components/Icon/complexIcons/icons.ts +7 -7
  108. package/src/components/Icon/complexIcons/index.ts +1 -1
  109. package/src/components/Icon/icons/icons.ts +838 -838
  110. package/src/components/Icon/icons/index.ts +1 -1
  111. package/src/components/Icon/index.ts +4 -4
  112. package/src/components/IncrementInput/ChangeButton.tsx +33 -33
  113. package/src/components/IncrementInput/IncrementInput.stories.tsx +31 -31
  114. package/src/components/IncrementInput/IncrementInput.styles.ts +77 -77
  115. package/src/components/IncrementInput/IncrementInput.tsx +80 -80
  116. package/src/components/IncrementInput/index.ts +2 -2
  117. package/src/components/Input/Input.stories.tsx +86 -86
  118. package/src/components/Input/Input.styles.ts +307 -307
  119. package/src/components/Input/Input.tsx +311 -311
  120. package/src/components/Input/index.ts +2 -2
  121. package/src/components/List/List.stories.tsx +62 -62
  122. package/src/components/List/List.styles.ts +52 -52
  123. package/src/components/List/List.tsx +64 -64
  124. package/src/components/List/index.ts +2 -2
  125. package/src/components/Modal/Modal.stories.tsx +105 -105
  126. package/src/components/Modal/Modal.styles.ts +305 -305
  127. package/src/components/Modal/Modal.tsx +200 -186
  128. package/src/components/Modal/index.ts +2 -2
  129. package/src/components/MoreMenu/MoreMenu.stories.tsx +46 -46
  130. package/src/components/MoreMenu/MoreMenu.styles.ts +70 -70
  131. package/src/components/MoreMenu/MoreMenu.tsx +90 -90
  132. package/src/components/MoreMenu/index.ts +2 -2
  133. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  134. package/src/components/MultiSelect/MultiSelect.styles.ts +55 -55
  135. package/src/components/MultiSelect/MultiSelect.tsx +89 -89
  136. package/src/components/MultiSelect/MultiSelectInput/MultiSelectInput.styles.ts +73 -73
  137. package/src/components/MultiSelect/MultiSelectInput/MultiSelectInput.tsx +51 -51
  138. package/src/components/MultiSelect/MultiSelectInput/index.ts +1 -1
  139. package/src/components/MultiSelect/index.ts +3 -3
  140. package/src/components/MultiSelectList/MultiSelectList.styles.ts +124 -124
  141. package/src/components/MultiSelectList/MultiSelectList.tsx +451 -451
  142. package/src/components/MultiSelectList/index.ts +2 -2
  143. package/src/components/MultiSelectList/locales.ts +37 -37
  144. package/src/components/Notification/Notification.stories.tsx +46 -46
  145. package/src/components/Notification/Notification.styles.ts +50 -50
  146. package/src/components/Notification/Notification.tsx +79 -79
  147. package/src/components/Notification/index.ts +2 -2
  148. package/src/components/NumberInput/NumberInput.stories.tsx +35 -35
  149. package/src/components/NumberInput/NumberInput.tsx +133 -133
  150. package/src/components/NumberInput/helpers.ts +86 -86
  151. package/src/components/NumberInput/index.ts +1 -1
  152. package/src/components/PhoneInput/PhoneInput.stories.tsx +70 -70
  153. package/src/components/PhoneInput/PhoneInput.styles.ts +84 -84
  154. package/src/components/PhoneInput/PhoneInput.tsx +194 -194
  155. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +21 -21
  156. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.styles.ts +100 -100
  157. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.tsx +147 -147
  158. package/src/components/PhoneInput/PhoneInputCountryList/index.ts +2 -2
  159. package/src/components/PhoneInput/index.ts +6 -6
  160. package/src/components/PhoneInput/phone-info.ts +2147 -2147
  161. package/src/components/PhoneInput/types.ts +16 -16
  162. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  163. package/src/components/RadioButton/RadioButton.styles.ts +37 -37
  164. package/src/components/RadioButton/RadioButton.tsx +55 -55
  165. package/src/components/RadioButton/index.ts +2 -2
  166. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +61 -61
  167. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  168. package/src/components/SearchInput/SearchInput.stories.tsx +23 -23
  169. package/src/components/SearchInput/SearchInput.styles.ts +50 -50
  170. package/src/components/SearchInput/SearchInput.tsx +50 -50
  171. package/src/components/SearchInput/index.ts +2 -2
  172. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  173. package/src/components/Select/Select.stories.tsx +235 -235
  174. package/src/components/Select/Select.styles.ts +96 -96
  175. package/src/components/Select/Select.tsx +575 -575
  176. package/src/components/Select/SelectList/SelectList.styles.ts +72 -72
  177. package/src/components/Select/SelectList/SelectList.tsx +158 -158
  178. package/src/components/Select/SelectList/index.ts +1 -1
  179. package/src/components/Select/SelectListItem/SelectListItem.styles.ts +14 -14
  180. package/src/components/Select/SelectListItem/SelectListItem.tsx +68 -68
  181. package/src/components/Select/constants.ts +2 -2
  182. package/src/components/Select/helpers.ts +26 -26
  183. package/src/components/Select/index.ts +4 -4
  184. package/src/components/Select/types.ts +1 -1
  185. package/src/components/SmartInput/SmartInput.stories.tsx +50 -50
  186. package/src/components/SmartInput/SmartInput.tsx +147 -147
  187. package/src/components/SmartInput/helpers.ts +85 -85
  188. package/src/components/SmartInput/index.ts +1 -1
  189. package/src/components/Switch/Switch.stories.tsx +40 -40
  190. package/src/components/Switch/Switch.styles.ts +75 -75
  191. package/src/components/Switch/Switch.tsx +83 -83
  192. package/src/components/Switch/index.ts +2 -2
  193. package/src/components/TextArea/TextArea.stories.tsx +35 -35
  194. package/src/components/TextArea/TextArea.styles.ts +153 -153
  195. package/src/components/TextArea/TextArea.tsx +165 -165
  196. package/src/components/TextArea/index.ts +2 -2
  197. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  198. package/src/components/TextWithInfo/TextWithInfo.styles.ts +60 -60
  199. package/src/components/TextWithInfo/TextWithInfo.tsx +60 -60
  200. package/src/components/TextWithInfo/index.ts +2 -2
  201. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  202. package/src/components/TextWithTooltip/TextWithTooltip.styles.ts +19 -19
  203. package/src/components/TextWithTooltip/TextWithTooltip.tsx +143 -143
  204. package/src/components/TextWithTooltip/index.ts +2 -2
  205. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  206. package/src/components/ThemedPreloader/ThemedPreloader.styles.ts +21 -21
  207. package/src/components/ThemedPreloader/ThemedPreloader.tsx +50 -50
  208. package/src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx +29 -29
  209. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  210. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts +54 -54
  211. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx +18 -18
  212. package/src/components/ThemedPreloader/components/DotsPreloader/index.ts +2 -2
  213. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts +11 -11
  214. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +25 -25
  215. package/src/components/ThemedPreloader/components/SvgPreloader/index.ts +2 -2
  216. package/src/components/ThemedPreloader/components/index.ts +2 -2
  217. package/src/components/ThemedPreloader/index.ts +2 -2
  218. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  219. package/src/components/Toaster/Toaster.styles.ts +59 -59
  220. package/src/components/Toaster/Toaster.tsx +110 -110
  221. package/src/components/Toaster/index.ts +2 -2
  222. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  223. package/src/components/Tooltip/Tooltip.styles.ts +45 -45
  224. package/src/components/Tooltip/Tooltip.tsx +35 -35
  225. package/src/components/Tooltip/index.ts +3 -3
  226. package/src/components/Tooltip/types.ts +1 -1
  227. package/src/components/index.ts +36 -36
  228. package/src/helpers/deprecated.ts +22 -22
  229. package/src/helpers/index.ts +4 -4
  230. package/src/helpers/misc.ts +158 -158
  231. package/src/helpers/phone.ts +87 -87
  232. package/src/helpers/popper-helpers.ts +17 -17
  233. package/src/helpers/snippets.tsx +6 -6
  234. package/src/hooks/index.ts +6 -6
  235. package/src/hooks/use-did-mount-effect.ts +18 -18
  236. package/src/hooks/use-dropdown.ts +82 -82
  237. package/src/hooks/use-is-mounted.ts +15 -15
  238. package/src/hooks/use-on-click-outside.ts +77 -77
  239. package/src/hooks/use-theme.ts +32 -32
  240. package/src/hooks/use-tweak-styles.ts +13 -13
  241. package/src/index.ts +6 -6
  242. package/src/theme.ts +149 -149
  243. package/src/types.ts +107 -107
  244. package/src/vite-env.d.ts +1 -1
@@ -1,87 +1,87 @@
1
- import { isNotEmpty, isEmpty } from '@true-engineering/true-react-platform-helpers';
2
- import { phoneInfo, IPhoneInfo, IPhoneValue } from '../components';
3
-
4
- export const findCountryByCode = (
5
- countryCode?: string,
6
- countriesList = phoneInfo,
7
- ): IPhoneInfo | undefined =>
8
- isNotEmpty(countryCode)
9
- ? countriesList.find((info) => info.countryCode === countryCode)
10
- : undefined;
11
-
12
- export const findCountryIndexByCode = (countryCode?: string, countriesList = phoneInfo): number =>
13
- isNotEmpty(countryCode)
14
- ? countriesList.findIndex((info) => info.countryCode === countryCode)
15
- : -1;
16
-
17
- export const getCountryTextByLocale = (country: IPhoneInfo, locale: string): string =>
18
- locale.toLowerCase() === 'ru' ? country.countryRu : country.countryEn;
19
-
20
- export const sortCountriesByLocale = (countriesList: IPhoneInfo[], locale: string) =>
21
- countriesList.sort((countryA, countryB) =>
22
- getCountryTextByLocale(countryA, locale).localeCompare(
23
- getCountryTextByLocale(countryB, locale),
24
- ),
25
- );
26
-
27
- export const checkSearchStringInCountry = (country: IPhoneInfo, searchString: string): boolean => {
28
- const checkValue = searchString.toLowerCase().trim().replace('+', '');
29
-
30
- const possibleValues = [
31
- country.countryRu,
32
- country.countryEn,
33
- ...country.countryRu.split(' '),
34
- ...country.countryEn.split(' '),
35
- country.dialCode,
36
- ].map((part) => part.toLowerCase());
37
-
38
- return possibleValues.some((v) => v.startsWith(checkValue));
39
- };
40
-
41
- export const getFullPhone = (phone?: IPhoneValue): string =>
42
- (phone?.dialCode ?? '') + (phone?.phoneNumber ?? '');
43
-
44
- export const getCountryCodeFromPhone = (phoneWithCode: string): string | undefined => {
45
- // попробуем найти уникальный код страны fullCode (dialCode + arealCode)
46
- let countryCode = phoneInfo.find((info) =>
47
- info.fullCodes.some((code) => phoneWithCode.startsWith(code)),
48
- )?.countryCode;
49
-
50
- if (isEmpty(countryCode) && isNotEmpty(phoneWithCode)) {
51
- // если не нашли уникальный fullCode (dialCode + arealCode),
52
- // то пробуем найти dialCode и выбираем с наименьшим Priority
53
- countryCode = phoneInfo
54
- .filter((info) => phoneWithCode.startsWith(info.dialCode))
55
- .sort(
56
- (infoA, infoB) => (infoA.dialCodePriority ?? 1000) - (infoB.dialCodePriority ?? 1000),
57
- )[0]?.countryCode;
58
- }
59
-
60
- return countryCode;
61
- };
62
-
63
- export const getPhoneObjFromString = (fullPhone: string, countryCode?: string): IPhoneValue => {
64
- const newCountryCode = countryCode ?? getCountryCodeFromPhone(fullPhone);
65
- const dialCode = findCountryByCode(newCountryCode)?.dialCode;
66
- const phoneNumber = fullPhone.slice(dialCode?.length);
67
-
68
- return { dialCode, phoneNumber, countryCode: newCountryCode };
69
- };
70
-
71
- export const DEFAULT_PHONE_MASK = '+ 9 999 999 999 999 99';
72
-
73
- export const getPhoneMask = (countryCode?: string): string => {
74
- let mask = DEFAULT_PHONE_MASK;
75
- if (isNotEmpty(countryCode)) {
76
- const countrySettings = findCountryByCode(countryCode);
77
-
78
- if (countrySettings !== undefined) {
79
- const dialCodeLength = countrySettings.dialCode.length;
80
- const areaAndPhoneMask =
81
- countrySettings.phoneMask ?? mask.substring(2, mask.length - dialCodeLength);
82
- mask = `+ ${'9'.repeat(dialCodeLength)} ${areaAndPhoneMask}`;
83
- }
84
- }
85
-
86
- return mask;
87
- };
1
+ import { isNotEmpty, isEmpty } from '@true-engineering/true-react-platform-helpers';
2
+ import { phoneInfo, IPhoneInfo, IPhoneValue } from '../components';
3
+
4
+ export const findCountryByCode = (
5
+ countryCode?: string,
6
+ countriesList = phoneInfo,
7
+ ): IPhoneInfo | undefined =>
8
+ isNotEmpty(countryCode)
9
+ ? countriesList.find((info) => info.countryCode === countryCode)
10
+ : undefined;
11
+
12
+ export const findCountryIndexByCode = (countryCode?: string, countriesList = phoneInfo): number =>
13
+ isNotEmpty(countryCode)
14
+ ? countriesList.findIndex((info) => info.countryCode === countryCode)
15
+ : -1;
16
+
17
+ export const getCountryTextByLocale = (country: IPhoneInfo, locale: string): string =>
18
+ locale.toLowerCase() === 'ru' ? country.countryRu : country.countryEn;
19
+
20
+ export const sortCountriesByLocale = (countriesList: IPhoneInfo[], locale: string) =>
21
+ countriesList.sort((countryA, countryB) =>
22
+ getCountryTextByLocale(countryA, locale).localeCompare(
23
+ getCountryTextByLocale(countryB, locale),
24
+ ),
25
+ );
26
+
27
+ export const checkSearchStringInCountry = (country: IPhoneInfo, searchString: string): boolean => {
28
+ const checkValue = searchString.toLowerCase().trim().replace('+', '');
29
+
30
+ const possibleValues = [
31
+ country.countryRu,
32
+ country.countryEn,
33
+ ...country.countryRu.split(' '),
34
+ ...country.countryEn.split(' '),
35
+ country.dialCode,
36
+ ].map((part) => part.toLowerCase());
37
+
38
+ return possibleValues.some((v) => v.startsWith(checkValue));
39
+ };
40
+
41
+ export const getFullPhone = (phone?: IPhoneValue): string =>
42
+ (phone?.dialCode ?? '') + (phone?.phoneNumber ?? '');
43
+
44
+ export const getCountryCodeFromPhone = (phoneWithCode: string): string | undefined => {
45
+ // попробуем найти уникальный код страны fullCode (dialCode + arealCode)
46
+ let countryCode = phoneInfo.find((info) =>
47
+ info.fullCodes.some((code) => phoneWithCode.startsWith(code)),
48
+ )?.countryCode;
49
+
50
+ if (isEmpty(countryCode) && isNotEmpty(phoneWithCode)) {
51
+ // если не нашли уникальный fullCode (dialCode + arealCode),
52
+ // то пробуем найти dialCode и выбираем с наименьшим Priority
53
+ countryCode = phoneInfo
54
+ .filter((info) => phoneWithCode.startsWith(info.dialCode))
55
+ .sort(
56
+ (infoA, infoB) => (infoA.dialCodePriority ?? 1000) - (infoB.dialCodePriority ?? 1000),
57
+ )[0]?.countryCode;
58
+ }
59
+
60
+ return countryCode;
61
+ };
62
+
63
+ export const getPhoneObjFromString = (fullPhone: string, countryCode?: string): IPhoneValue => {
64
+ const newCountryCode = countryCode ?? getCountryCodeFromPhone(fullPhone);
65
+ const dialCode = findCountryByCode(newCountryCode)?.dialCode;
66
+ const phoneNumber = fullPhone.slice(dialCode?.length);
67
+
68
+ return { dialCode, phoneNumber, countryCode: newCountryCode };
69
+ };
70
+
71
+ export const DEFAULT_PHONE_MASK = '+ 9 999 999 999 999 99';
72
+
73
+ export const getPhoneMask = (countryCode?: string): string => {
74
+ let mask = DEFAULT_PHONE_MASK;
75
+ if (isNotEmpty(countryCode)) {
76
+ const countrySettings = findCountryByCode(countryCode);
77
+
78
+ if (countrySettings !== undefined) {
79
+ const dialCodeLength = countrySettings.dialCode.length;
80
+ const areaAndPhoneMask =
81
+ countrySettings.phoneMask ?? mask.substring(2, mask.length - dialCodeLength);
82
+ mask = `+ ${'9'.repeat(dialCodeLength)} ${areaAndPhoneMask}`;
83
+ }
84
+ }
85
+
86
+ return mask;
87
+ };
@@ -1,17 +1,17 @@
1
- import { Modifier } from 'react-overlays/usePopper';
2
-
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- export const minWidthModifier: Partial<Modifier<any, any>> = {
5
- name: 'minWidth',
6
- enabled: true,
7
- phase: 'beforeWrite',
8
- requires: ['computeStyles'],
9
- fn: ({ state }) => {
10
- state.styles.popper.minWidth = `${state.rects.reference.width}px`;
11
- },
12
- effect: ({ state }) => {
13
- state.elements.popper.style.minWidth = `${
14
- (state.elements.reference as HTMLElement).offsetWidth
15
- }px`;
16
- },
17
- };
1
+ import { Modifier } from 'react-overlays/usePopper';
2
+
3
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
+ export const minWidthModifier: Partial<Modifier<any, any>> = {
5
+ name: 'minWidth',
6
+ enabled: true,
7
+ phase: 'beforeWrite',
8
+ requires: ['computeStyles'],
9
+ fn: ({ state }) => {
10
+ state.styles.popper.minWidth = `${state.rects.reference.width}px`;
11
+ },
12
+ effect: ({ state }) => {
13
+ state.elements.popper.style.minWidth = `${
14
+ (state.elements.reference as HTMLElement).offsetWidth
15
+ }px`;
16
+ },
17
+ };
@@ -1,6 +1,6 @@
1
- import { ReactNode } from 'react';
2
- import { Icon } from '../components';
3
- import { IIcon } from '../types';
4
-
5
- export const renderIcon = (icon: IIcon): ReactNode =>
6
- typeof icon === 'string' ? <Icon type={icon} /> : icon;
1
+ import { ReactNode } from 'react';
2
+ import { Icon } from '../components';
3
+ import { IIcon } from '../types';
4
+
5
+ export const renderIcon = (icon: IIcon): ReactNode =>
6
+ typeof icon === 'string' ? <Icon type={icon} /> : icon;
@@ -1,6 +1,6 @@
1
- export * from './use-is-mounted';
2
- export * from './use-on-click-outside';
3
- export * from './use-theme';
4
- export * from './use-dropdown';
5
- export * from './use-tweak-styles';
6
- export * from './use-did-mount-effect';
1
+ export * from './use-is-mounted';
2
+ export * from './use-on-click-outside';
3
+ export * from './use-theme';
4
+ export * from './use-dropdown';
5
+ export * from './use-tweak-styles';
6
+ export * from './use-did-mount-effect';
@@ -1,18 +1,18 @@
1
- import { DependencyList, EffectCallback, useEffect, useRef } from 'react';
2
-
3
- export const useDidMountEffect = (effect: EffectCallback, dependencies: DependencyList): void => {
4
- const isMountedRef = useRef(false);
5
- useEffect(() => {
6
- let unmount: ReturnType<EffectCallback>;
7
- if (isMountedRef.current) {
8
- unmount = effect();
9
- } else {
10
- isMountedRef.current = true;
11
- }
12
- return () => {
13
- if (unmount !== undefined) {
14
- unmount();
15
- }
16
- };
17
- }, dependencies);
18
- };
1
+ import { DependencyList, EffectCallback, useEffect, useRef } from 'react';
2
+
3
+ export const useDidMountEffect = (effect: EffectCallback, dependencies: DependencyList): void => {
4
+ const isMountedRef = useRef(false);
5
+ useEffect(() => {
6
+ let unmount: ReturnType<EffectCallback>;
7
+ if (isMountedRef.current) {
8
+ unmount = effect();
9
+ } else {
10
+ isMountedRef.current = true;
11
+ }
12
+ return () => {
13
+ if (unmount !== undefined) {
14
+ unmount();
15
+ }
16
+ };
17
+ }, dependencies);
18
+ };
@@ -1,82 +1,82 @@
1
- import { DependencyList, useEffect } from 'react';
2
- import usePopper, { VirtualElement } from 'react-overlays/usePopper';
3
- import { getScrollParent, minWidthModifier } from '../helpers';
4
- import { IDropdownWithPopperOptions } from '../types';
5
-
6
- export const useDropdown = ({
7
- isOpen,
8
- onDropdownClose,
9
- referenceElement,
10
- dropdownElement,
11
- options,
12
- dependenciesForPositionUpdating = [],
13
- }: {
14
- isOpen: boolean;
15
- referenceElement: VirtualElement | null | undefined;
16
- dropdownElement: HTMLElement | null | undefined;
17
- options?: IDropdownWithPopperOptions;
18
- dependenciesForPositionUpdating?: DependencyList;
19
- onDropdownClose(event: Event): void;
20
- }): ReturnType<typeof usePopper> | undefined => {
21
- const {
22
- shouldUsePopper = false,
23
- shouldRenderInBody = false,
24
- shouldHideOnScroll = false,
25
- scrollParent = 'document',
26
- canBeFlipped = false,
27
- modifiers = [],
28
- placement = 'bottom-start',
29
- flipOptions,
30
- } = options ?? {};
31
-
32
- useEffect(() => {
33
- if (!shouldHideOnScroll || !isOpen) {
34
- return;
35
- }
36
-
37
- const scrollParentEl =
38
- scrollParent === 'auto'
39
- ? getScrollParent(referenceElement as Element)
40
- : scrollParent === 'document'
41
- ? document
42
- : scrollParent;
43
- scrollParentEl.addEventListener('scroll', onDropdownClose);
44
-
45
- return () => {
46
- scrollParentEl.removeEventListener('scroll', onDropdownClose);
47
- };
48
- }, [shouldHideOnScroll, isOpen]);
49
-
50
- let popperData: ReturnType<typeof usePopper> | undefined;
51
- if (shouldUsePopper) {
52
- popperData = usePopper(referenceElement, dropdownElement, {
53
- enabled: isOpen,
54
- placement,
55
- modifiers: [
56
- ...(shouldRenderInBody ? [minWidthModifier] : []),
57
- {
58
- name: 'offset',
59
- options: {
60
- offset: [0, 6],
61
- },
62
- },
63
- {
64
- name: 'flip',
65
- options: {
66
- fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],
67
- ...flipOptions,
68
- },
69
- },
70
- ...modifiers,
71
- ],
72
- });
73
- }
74
-
75
- useEffect(() => {
76
- if (dependenciesForPositionUpdating.length !== 0) {
77
- popperData?.update();
78
- }
79
- }, dependenciesForPositionUpdating);
80
-
81
- return popperData;
82
- };
1
+ import { DependencyList, useEffect } from 'react';
2
+ import usePopper, { VirtualElement } from 'react-overlays/usePopper';
3
+ import { getScrollParent, minWidthModifier } from '../helpers';
4
+ import { IDropdownWithPopperOptions } from '../types';
5
+
6
+ export const useDropdown = ({
7
+ isOpen,
8
+ onDropdownClose,
9
+ referenceElement,
10
+ dropdownElement,
11
+ options,
12
+ dependenciesForPositionUpdating = [],
13
+ }: {
14
+ isOpen: boolean;
15
+ referenceElement: VirtualElement | null | undefined;
16
+ dropdownElement: HTMLElement | null | undefined;
17
+ options?: IDropdownWithPopperOptions;
18
+ dependenciesForPositionUpdating?: DependencyList;
19
+ onDropdownClose(event: Event): void;
20
+ }): ReturnType<typeof usePopper> | undefined => {
21
+ const {
22
+ shouldUsePopper = false,
23
+ shouldRenderInBody = false,
24
+ shouldHideOnScroll = false,
25
+ scrollParent = 'document',
26
+ canBeFlipped = false,
27
+ modifiers = [],
28
+ placement = 'bottom-start',
29
+ flipOptions,
30
+ } = options ?? {};
31
+
32
+ useEffect(() => {
33
+ if (!shouldHideOnScroll || !isOpen) {
34
+ return;
35
+ }
36
+
37
+ const scrollParentEl =
38
+ scrollParent === 'auto'
39
+ ? getScrollParent(referenceElement as Element)
40
+ : scrollParent === 'document'
41
+ ? document
42
+ : scrollParent;
43
+ scrollParentEl.addEventListener('scroll', onDropdownClose);
44
+
45
+ return () => {
46
+ scrollParentEl.removeEventListener('scroll', onDropdownClose);
47
+ };
48
+ }, [shouldHideOnScroll, isOpen]);
49
+
50
+ let popperData: ReturnType<typeof usePopper> | undefined;
51
+ if (shouldUsePopper) {
52
+ popperData = usePopper(referenceElement, dropdownElement, {
53
+ enabled: isOpen,
54
+ placement,
55
+ modifiers: [
56
+ ...(shouldRenderInBody ? [minWidthModifier] : []),
57
+ {
58
+ name: 'offset',
59
+ options: {
60
+ offset: [0, 6],
61
+ },
62
+ },
63
+ {
64
+ name: 'flip',
65
+ options: {
66
+ fallbackPlacements: canBeFlipped ? ['bottom-start', 'top-start'] : ['bottom-start'],
67
+ ...flipOptions,
68
+ },
69
+ },
70
+ ...modifiers,
71
+ ],
72
+ });
73
+ }
74
+
75
+ useEffect(() => {
76
+ if (dependenciesForPositionUpdating.length !== 0) {
77
+ popperData?.update();
78
+ }
79
+ }, dependenciesForPositionUpdating);
80
+
81
+ return popperData;
82
+ };
@@ -1,15 +1,15 @@
1
- import { useCallback, useEffect, useRef } from 'react';
2
-
3
- export const useIsMounted = (): (() => boolean) => {
4
- const isMounted = useRef(false);
5
-
6
- useEffect(() => {
7
- isMounted.current = true;
8
-
9
- return () => {
10
- isMounted.current = false;
11
- };
12
- }, []);
13
-
14
- return useCallback(() => isMounted.current, []);
15
- };
1
+ import { useCallback, useEffect, useRef } from 'react';
2
+
3
+ export const useIsMounted = (): (() => boolean) => {
4
+ const isMounted = useRef(false);
5
+
6
+ useEffect(() => {
7
+ isMounted.current = true;
8
+
9
+ return () => {
10
+ isMounted.current = false;
11
+ };
12
+ }, []);
13
+
14
+ return useCallback(() => isMounted.current, []);
15
+ };
@@ -1,77 +1,77 @@
1
- import { RefObject, useEffect } from 'react';
2
-
3
- export const checkElementParentsClassNames = (element: HTMLElement, className: string): boolean => {
4
- if (element.classList.contains(className)) {
5
- return true;
6
- }
7
-
8
- if (element === document.body) {
9
- return false;
10
- }
11
-
12
- if (element.parentElement) {
13
- return checkElementParentsClassNames(element.parentElement, className);
14
- }
15
-
16
- return false;
17
- };
18
-
19
- export const isElementOneOfParents = (element: HTMLElement, elToSearch: HTMLElement): boolean => {
20
- if (element === elToSearch) {
21
- return true;
22
- }
23
-
24
- if (element === document.body) {
25
- return false;
26
- }
27
-
28
- if (element.parentElement) {
29
- return isElementOneOfParents(element.parentElement, elToSearch);
30
- }
31
-
32
- return false;
33
- };
34
-
35
- export function useOnClickOutsideWithRef<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(
36
- ref: RefObject<Elem>,
37
- handler: (event: MouseEvent | TouchEvent) => void,
38
- ignoreRef?: RefObject<IgnoreElem>,
39
- ): void {
40
- useOnClickOutside(ref, handler, undefined, ignoreRef);
41
- }
42
-
43
- export function useOnClickOutside<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(
44
- ref: RefObject<Elem>,
45
- handler: (event: MouseEvent | TouchEvent) => void,
46
- ignoreClassName?: string,
47
- ignoreRef?: RefObject<IgnoreElem>,
48
- ): void {
49
- useEffect(() => {
50
- const listener = (event: MouseEvent | TouchEvent) => {
51
- // Do nothing if clicking ref's element or descendent elements
52
- if (!ref.current || ref.current.contains(event.target as HTMLElement)) {
53
- return;
54
- }
55
-
56
- if (
57
- (ignoreClassName !== undefined &&
58
- checkElementParentsClassNames(event.target as HTMLElement, ignoreClassName)) ||
59
- (ignoreRef !== undefined &&
60
- ignoreRef.current !== null &&
61
- isElementOneOfParents(event.target as HTMLElement, ignoreRef.current))
62
- ) {
63
- return;
64
- }
65
-
66
- handler(event);
67
- };
68
-
69
- document.addEventListener('mousedown', listener);
70
- document.addEventListener('touchstart', listener);
71
-
72
- return () => {
73
- document.removeEventListener('mousedown', listener);
74
- document.removeEventListener('touchstart', listener);
75
- };
76
- }, [ref, handler, ignoreClassName]);
77
- }
1
+ import { RefObject, useEffect } from 'react';
2
+
3
+ export const checkElementParentsClassNames = (element: HTMLElement, className: string): boolean => {
4
+ if (element.classList.contains(className)) {
5
+ return true;
6
+ }
7
+
8
+ if (element === document.body) {
9
+ return false;
10
+ }
11
+
12
+ if (element.parentElement) {
13
+ return checkElementParentsClassNames(element.parentElement, className);
14
+ }
15
+
16
+ return false;
17
+ };
18
+
19
+ export const isElementOneOfParents = (element: HTMLElement, elToSearch: HTMLElement): boolean => {
20
+ if (element === elToSearch) {
21
+ return true;
22
+ }
23
+
24
+ if (element === document.body) {
25
+ return false;
26
+ }
27
+
28
+ if (element.parentElement) {
29
+ return isElementOneOfParents(element.parentElement, elToSearch);
30
+ }
31
+
32
+ return false;
33
+ };
34
+
35
+ export function useOnClickOutsideWithRef<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(
36
+ ref: RefObject<Elem>,
37
+ handler: (event: MouseEvent | TouchEvent) => void,
38
+ ignoreRef?: RefObject<IgnoreElem>,
39
+ ): void {
40
+ useOnClickOutside(ref, handler, undefined, ignoreRef);
41
+ }
42
+
43
+ export function useOnClickOutside<Elem extends HTMLElement, IgnoreElem extends HTMLElement>(
44
+ ref: RefObject<Elem>,
45
+ handler: (event: MouseEvent | TouchEvent) => void,
46
+ ignoreClassName?: string,
47
+ ignoreRef?: RefObject<IgnoreElem>,
48
+ ): void {
49
+ useEffect(() => {
50
+ const listener = (event: MouseEvent | TouchEvent) => {
51
+ // Do nothing if clicking ref's element or descendent elements
52
+ if (!ref.current || ref.current.contains(event.target as HTMLElement)) {
53
+ return;
54
+ }
55
+
56
+ if (
57
+ (ignoreClassName !== undefined &&
58
+ checkElementParentsClassNames(event.target as HTMLElement, ignoreClassName)) ||
59
+ (ignoreRef !== undefined &&
60
+ ignoreRef.current !== null &&
61
+ isElementOneOfParents(event.target as HTMLElement, ignoreRef.current))
62
+ ) {
63
+ return;
64
+ }
65
+
66
+ handler(event);
67
+ };
68
+
69
+ document.addEventListener('mousedown', listener);
70
+ document.addEventListener('touchstart', listener);
71
+
72
+ return () => {
73
+ document.removeEventListener('mousedown', listener);
74
+ document.removeEventListener('touchstart', listener);
75
+ };
76
+ }, [ref, handler, ignoreClassName]);
77
+ }