@true-engineering/true-react-common-ui-kit 2.3.1 → 2.3.2

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 (251) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +12 -0
  3. package/dist/components/DatePicker/DatePicker.d.ts +1 -1
  4. package/dist/components/FiltersPane/FilterSelect/FilterSelect.d.ts +1 -1
  5. package/dist/components/FiltersPane/FiltersPane.d.ts +1 -1
  6. package/dist/components/Flag/augment.d.ts +1 -1
  7. package/dist/components/FlexibleTable/FlexibleTable.d.ts +1 -1
  8. package/dist/components/Icon/Icon.d.ts +1 -1
  9. package/dist/components/Icon/complexIcons/augment.d.ts +1 -1
  10. package/dist/components/MultiSelectList/MultiSelectList.d.ts +1 -1
  11. package/dist/components/PhoneInput/PhoneInput.d.ts +1 -1
  12. package/dist/components/Select/Select.d.ts +1 -1
  13. package/dist/true-react-common-ui-kit.js +577 -577
  14. package/dist/true-react-common-ui-kit.js.map +1 -1
  15. package/dist/true-react-common-ui-kit.umd.cjs +577 -577
  16. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  17. package/dist/vite-env.d.ts +1 -1
  18. package/package.json +93 -93
  19. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  20. package/src/components/AccountInfo/AccountInfo.styles.ts +55 -55
  21. package/src/components/AccountInfo/AccountInfo.tsx +77 -77
  22. package/src/components/AccountInfo/index.ts +2 -2
  23. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  24. package/src/components/AddButton/AddButton.styles.ts +34 -34
  25. package/src/components/AddButton/AddButton.tsx +48 -48
  26. package/src/components/AddButton/index.ts +2 -2
  27. package/src/components/Button/Button.stories.tsx +52 -52
  28. package/src/components/Button/Button.styles.ts +196 -196
  29. package/src/components/Button/Button.tsx +167 -167
  30. package/src/components/Button/index.ts +2 -2
  31. package/src/components/Checkbox/Checkbox.stories.tsx +32 -32
  32. package/src/components/Checkbox/Checkbox.styles.ts +62 -62
  33. package/src/components/Checkbox/Checkbox.tsx +105 -105
  34. package/src/components/Checkbox/index.ts +2 -2
  35. package/src/components/CloseButton/CloseButton.styles.ts +34 -34
  36. package/src/components/CloseButton/CloseButton.tsx +35 -35
  37. package/src/components/CloseButton/index.ts +2 -2
  38. package/src/components/Colors/Colors.stories.tsx +7 -7
  39. package/src/components/Colors/Colors.styles.ts +38 -38
  40. package/src/components/Colors/Colors.tsx +26 -26
  41. package/src/components/Colors/index.ts +2 -2
  42. package/src/components/CssBaseline/CssBaseline.styles.ts +15 -15
  43. package/src/components/CssBaseline/CssBaseline.tsx +15 -15
  44. package/src/components/CssBaseline/index.ts +2 -2
  45. package/src/components/DateInput/DateInput.stories.tsx +61 -61
  46. package/src/components/DateInput/DateInput.styles.ts +14 -14
  47. package/src/components/DateInput/DateInput.tsx +82 -82
  48. package/src/components/DateInput/constants.ts +2 -2
  49. package/src/components/DateInput/index.ts +3 -3
  50. package/src/components/DatePicker/DatePicker.stories.tsx +87 -87
  51. package/src/components/DatePicker/DatePicker.styles.ts +44 -44
  52. package/src/components/DatePicker/DatePicker.tsx +327 -327
  53. package/src/components/DatePicker/DatePickerHeader/DatePickerHeader.styles.ts +84 -84
  54. package/src/components/DatePicker/DatePickerHeader/DatePickerHeader.tsx +79 -79
  55. package/src/components/DatePicker/DatePickerHeader/index.ts +2 -2
  56. package/src/components/DatePicker/constants.ts +1 -1
  57. package/src/components/DatePicker/helpers.ts +23 -23
  58. package/src/components/DatePicker/index.ts +3 -3
  59. package/src/components/DatePicker/types.ts +45 -45
  60. package/src/components/Description/Description.stories.tsx +27 -27
  61. package/src/components/Description/Description.styles.ts +31 -31
  62. package/src/components/Description/Description.tsx +60 -60
  63. package/src/components/Description/index.ts +2 -2
  64. package/src/components/FiltersPane/FilterInterval/FilterInterval.styles.ts +64 -64
  65. package/src/components/FiltersPane/FilterInterval/FilterInterval.tsx +143 -143
  66. package/src/components/FiltersPane/FilterInterval/index.ts +1 -1
  67. package/src/components/FiltersPane/FilterMultiSelect/FilterMultiSelect.tsx +10 -10
  68. package/src/components/FiltersPane/FilterMultiSelect/index.ts +1 -1
  69. package/src/components/FiltersPane/FilterSelect/FilterSelect.styles.ts +143 -143
  70. package/src/components/FiltersPane/FilterSelect/FilterSelect.tsx +348 -348
  71. package/src/components/FiltersPane/FilterSelect/index.ts +1 -1
  72. package/src/components/FiltersPane/FilterSelect/locales.ts +37 -37
  73. package/src/components/FiltersPane/FilterValueView/FilterValueView.styles.tsx +15 -15
  74. package/src/components/FiltersPane/FilterValueView/FilterValueView.tsx +166 -166
  75. package/src/components/FiltersPane/FilterValueView/index.tsx +1 -1
  76. package/src/components/FiltersPane/FilterWithDates/FilterWithDates.styles.ts +60 -60
  77. package/src/components/FiltersPane/FilterWithDates/FilterWithDates.tsx +184 -184
  78. package/src/components/FiltersPane/FilterWithDates/index.ts +1 -1
  79. package/src/components/FiltersPane/FilterWithPeriod/FilterWithPeriod.styles.ts +17 -17
  80. package/src/components/FiltersPane/FilterWithPeriod/FilterWithPeriod.tsx +198 -198
  81. package/src/components/FiltersPane/FilterWithPeriod/index.ts +1 -1
  82. package/src/components/FiltersPane/FilterWrapper/FilterWrapper.styles.ts +110 -110
  83. package/src/components/FiltersPane/FilterWrapper/FilterWrapper.tsx +346 -346
  84. package/src/components/FiltersPane/FilterWrapper/index.ts +1 -1
  85. package/src/components/FiltersPane/FiltersPane.stories.tsx +295 -295
  86. package/src/components/FiltersPane/FiltersPane.styles.ts +71 -71
  87. package/src/components/FiltersPane/FiltersPane.tsx +151 -151
  88. package/src/components/FiltersPane/FiltersPaneSearch/FiltersPaneSearch.styles.ts +109 -109
  89. package/src/components/FiltersPane/FiltersPaneSearch/FiltersPaneSearch.tsx +155 -155
  90. package/src/components/FiltersPane/FiltersPaneSearch/index.ts +1 -1
  91. package/src/components/FiltersPane/index.ts +20 -20
  92. package/src/components/FiltersPane/locales.ts +107 -107
  93. package/src/components/FiltersPane/types.ts +112 -112
  94. package/src/components/Flag/Flag.stories.tsx +29 -29
  95. package/src/components/Flag/Flag.styles.ts +18 -18
  96. package/src/components/Flag/Flag.tsx +27 -27
  97. package/src/components/Flag/augment.d.ts +1 -1
  98. package/src/components/Flag/index.ts +2 -2
  99. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +84 -84
  100. package/src/components/FlexibleTable/FlexibleTable.styles.ts +131 -131
  101. package/src/components/FlexibleTable/FlexibleTable.tsx +205 -205
  102. package/src/components/FlexibleTable/TableRow.tsx +152 -152
  103. package/src/components/FlexibleTable/TableValue.tsx +75 -75
  104. package/src/components/FlexibleTable/fixture-test.ts +254 -254
  105. package/src/components/FlexibleTable/index.ts +3 -3
  106. package/src/components/FlexibleTable/types.ts +52 -52
  107. package/src/components/Icon/ComplexIconBoilerplate.tsx +17 -17
  108. package/src/components/Icon/Icon.stories.tsx +85 -85
  109. package/src/components/Icon/Icon.styles.ts +10 -10
  110. package/src/components/Icon/Icon.tsx +32 -32
  111. package/src/components/Icon/IconBoilerplate.tsx +42 -42
  112. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  113. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  114. package/src/components/Icon/complexIcons/icons.ts +7 -7
  115. package/src/components/Icon/complexIcons/index.ts +1 -1
  116. package/src/components/Icon/icons/icons.ts +838 -838
  117. package/src/components/Icon/icons/index.ts +1 -1
  118. package/src/components/Icon/index.ts +4 -4
  119. package/src/components/IncrementInput/ChangeButton.tsx +33 -33
  120. package/src/components/IncrementInput/IncrementInput.stories.tsx +31 -31
  121. package/src/components/IncrementInput/IncrementInput.styles.ts +77 -77
  122. package/src/components/IncrementInput/IncrementInput.tsx +80 -80
  123. package/src/components/IncrementInput/index.ts +2 -2
  124. package/src/components/Input/Input.stories.tsx +86 -86
  125. package/src/components/Input/Input.styles.ts +307 -307
  126. package/src/components/Input/Input.tsx +311 -311
  127. package/src/components/Input/index.ts +2 -2
  128. package/src/components/List/List.stories.tsx +62 -62
  129. package/src/components/List/List.styles.ts +52 -52
  130. package/src/components/List/List.tsx +64 -64
  131. package/src/components/List/index.ts +2 -2
  132. package/src/components/Modal/Modal.stories.tsx +105 -105
  133. package/src/components/Modal/Modal.styles.ts +305 -305
  134. package/src/components/Modal/Modal.tsx +200 -200
  135. package/src/components/Modal/index.ts +2 -2
  136. package/src/components/MoreMenu/MoreMenu.stories.tsx +46 -46
  137. package/src/components/MoreMenu/MoreMenu.styles.ts +70 -70
  138. package/src/components/MoreMenu/MoreMenu.tsx +90 -90
  139. package/src/components/MoreMenu/index.ts +2 -2
  140. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  141. package/src/components/MultiSelect/MultiSelect.styles.ts +55 -55
  142. package/src/components/MultiSelect/MultiSelect.tsx +89 -89
  143. package/src/components/MultiSelect/MultiSelectInput/MultiSelectInput.styles.ts +73 -73
  144. package/src/components/MultiSelect/MultiSelectInput/MultiSelectInput.tsx +51 -51
  145. package/src/components/MultiSelect/MultiSelectInput/index.ts +1 -1
  146. package/src/components/MultiSelect/index.ts +3 -3
  147. package/src/components/MultiSelectList/MultiSelectList.styles.ts +124 -124
  148. package/src/components/MultiSelectList/MultiSelectList.tsx +451 -451
  149. package/src/components/MultiSelectList/index.ts +2 -2
  150. package/src/components/MultiSelectList/locales.ts +37 -37
  151. package/src/components/Notification/Notification.stories.tsx +46 -46
  152. package/src/components/Notification/Notification.styles.ts +50 -50
  153. package/src/components/Notification/Notification.tsx +79 -79
  154. package/src/components/Notification/index.ts +2 -2
  155. package/src/components/NumberInput/NumberInput.stories.tsx +35 -35
  156. package/src/components/NumberInput/NumberInput.tsx +133 -133
  157. package/src/components/NumberInput/helpers.ts +86 -86
  158. package/src/components/NumberInput/index.ts +1 -1
  159. package/src/components/PhoneInput/PhoneInput.stories.tsx +70 -70
  160. package/src/components/PhoneInput/PhoneInput.styles.ts +84 -84
  161. package/src/components/PhoneInput/PhoneInput.tsx +194 -194
  162. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +21 -21
  163. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.styles.ts +100 -100
  164. package/src/components/PhoneInput/PhoneInputCountryList/PhoneInputCountryList.tsx +147 -147
  165. package/src/components/PhoneInput/PhoneInputCountryList/index.ts +2 -2
  166. package/src/components/PhoneInput/index.ts +6 -6
  167. package/src/components/PhoneInput/phone-info.ts +2147 -2147
  168. package/src/components/PhoneInput/types.ts +16 -16
  169. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  170. package/src/components/RadioButton/RadioButton.styles.ts +37 -37
  171. package/src/components/RadioButton/RadioButton.tsx +55 -55
  172. package/src/components/RadioButton/index.ts +2 -2
  173. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +61 -61
  174. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  175. package/src/components/SearchInput/SearchInput.stories.tsx +23 -23
  176. package/src/components/SearchInput/SearchInput.styles.ts +50 -50
  177. package/src/components/SearchInput/SearchInput.tsx +50 -50
  178. package/src/components/SearchInput/index.ts +2 -2
  179. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  180. package/src/components/Select/Select.stories.tsx +235 -235
  181. package/src/components/Select/Select.styles.ts +96 -96
  182. package/src/components/Select/Select.tsx +575 -575
  183. package/src/components/Select/SelectList/SelectList.styles.ts +72 -72
  184. package/src/components/Select/SelectList/SelectList.tsx +158 -158
  185. package/src/components/Select/SelectList/index.ts +1 -1
  186. package/src/components/Select/SelectListItem/SelectListItem.styles.ts +14 -14
  187. package/src/components/Select/SelectListItem/SelectListItem.tsx +68 -68
  188. package/src/components/Select/constants.ts +2 -2
  189. package/src/components/Select/helpers.ts +26 -26
  190. package/src/components/Select/index.ts +4 -4
  191. package/src/components/Select/types.ts +1 -1
  192. package/src/components/SmartInput/SmartInput.stories.tsx +50 -50
  193. package/src/components/SmartInput/SmartInput.tsx +147 -147
  194. package/src/components/SmartInput/helpers.ts +85 -85
  195. package/src/components/SmartInput/index.ts +1 -1
  196. package/src/components/Switch/Switch.stories.tsx +40 -40
  197. package/src/components/Switch/Switch.styles.ts +75 -75
  198. package/src/components/Switch/Switch.tsx +83 -83
  199. package/src/components/Switch/index.ts +2 -2
  200. package/src/components/TextArea/TextArea.stories.tsx +35 -35
  201. package/src/components/TextArea/TextArea.styles.ts +153 -153
  202. package/src/components/TextArea/TextArea.tsx +165 -165
  203. package/src/components/TextArea/index.ts +2 -2
  204. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  205. package/src/components/TextWithInfo/TextWithInfo.styles.ts +60 -60
  206. package/src/components/TextWithInfo/TextWithInfo.tsx +60 -60
  207. package/src/components/TextWithInfo/index.ts +2 -2
  208. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  209. package/src/components/TextWithTooltip/TextWithTooltip.styles.ts +19 -19
  210. package/src/components/TextWithTooltip/TextWithTooltip.tsx +143 -143
  211. package/src/components/TextWithTooltip/index.ts +2 -2
  212. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  213. package/src/components/ThemedPreloader/ThemedPreloader.styles.ts +21 -21
  214. package/src/components/ThemedPreloader/ThemedPreloader.tsx +50 -50
  215. package/src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx +29 -29
  216. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  217. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts +54 -54
  218. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx +18 -18
  219. package/src/components/ThemedPreloader/components/DotsPreloader/index.ts +2 -2
  220. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts +11 -11
  221. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +25 -25
  222. package/src/components/ThemedPreloader/components/SvgPreloader/index.ts +2 -2
  223. package/src/components/ThemedPreloader/components/index.ts +2 -2
  224. package/src/components/ThemedPreloader/index.ts +2 -2
  225. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  226. package/src/components/Toaster/Toaster.styles.ts +59 -59
  227. package/src/components/Toaster/Toaster.tsx +110 -110
  228. package/src/components/Toaster/index.ts +2 -2
  229. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  230. package/src/components/Tooltip/Tooltip.styles.ts +45 -45
  231. package/src/components/Tooltip/Tooltip.tsx +35 -35
  232. package/src/components/Tooltip/index.ts +3 -3
  233. package/src/components/Tooltip/types.ts +1 -1
  234. package/src/components/index.ts +36 -36
  235. package/src/helpers/deprecated.ts +23 -23
  236. package/src/helpers/index.ts +4 -4
  237. package/src/helpers/misc.ts +158 -158
  238. package/src/helpers/phone.ts +87 -87
  239. package/src/helpers/popper-helpers.ts +17 -17
  240. package/src/helpers/snippets.tsx +6 -6
  241. package/src/hooks/index.ts +6 -6
  242. package/src/hooks/use-did-mount-effect.ts +18 -18
  243. package/src/hooks/use-dropdown.ts +82 -82
  244. package/src/hooks/use-is-mounted.ts +15 -15
  245. package/src/hooks/use-on-click-outside.ts +77 -77
  246. package/src/hooks/use-theme.ts +32 -32
  247. package/src/hooks/use-tweak-styles.ts +13 -13
  248. package/src/index.ts +6 -6
  249. package/src/theme.ts +149 -149
  250. package/src/types.ts +107 -107
  251. 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
+ }