@true-engineering/true-react-common-ui-kit 2.6.0 → 2.7.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 (301) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +26 -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/Icon/icons-list.d.ts +1 -1
  6. package/dist/components/List/List.d.ts +1 -1
  7. package/dist/components/List/List.styles.d.ts +0 -28
  8. package/dist/components/List/index.d.ts +0 -1
  9. package/dist/components/ListItem/ListItem.d.ts +6 -0
  10. package/dist/components/ListItem/ListItem.styles.d.ts +35 -0
  11. package/dist/components/ListItem/constants.d.ts +1 -0
  12. package/dist/components/ListItem/index.d.ts +3 -0
  13. package/dist/components/{List → ListItem}/types.d.ts +5 -0
  14. package/dist/components/MoreMenu/MoreMenu.d.ts +2 -2
  15. package/dist/components/index.d.ts +1 -0
  16. package/dist/helpers/index.d.ts +1 -0
  17. package/dist/true-react-common-ui-kit.js +231 -131
  18. package/dist/true-react-common-ui-kit.js.map +1 -1
  19. package/dist/true-react-common-ui-kit.umd.cjs +232 -132
  20. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  21. package/dist/types.d.ts +1 -1
  22. package/dist/vite-env.d.ts +1 -1
  23. package/package.json +93 -93
  24. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  25. package/src/components/AccountInfo/AccountInfo.styles.ts +55 -55
  26. package/src/components/AccountInfo/AccountInfo.tsx +76 -76
  27. package/src/components/AccountInfo/constants.ts +1 -1
  28. package/src/components/AccountInfo/index.ts +2 -2
  29. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  30. package/src/components/AddButton/AddButton.styles.ts +34 -34
  31. package/src/components/AddButton/AddButton.tsx +48 -48
  32. package/src/components/AddButton/index.ts +2 -2
  33. package/src/components/Button/Button.stories.tsx +56 -56
  34. package/src/components/Button/Button.styles.ts +196 -196
  35. package/src/components/Button/Button.tsx +153 -154
  36. package/src/components/Button/constants.ts +9 -9
  37. package/src/components/Button/index.ts +3 -3
  38. package/src/components/Button/types.ts +5 -5
  39. package/src/components/Checkbox/Checkbox.stories.tsx +32 -32
  40. package/src/components/Checkbox/Checkbox.styles.ts +62 -62
  41. package/src/components/Checkbox/Checkbox.tsx +105 -105
  42. package/src/components/Checkbox/index.ts +2 -2
  43. package/src/components/CloseButton/CloseButton.styles.ts +34 -34
  44. package/src/components/CloseButton/CloseButton.tsx +35 -35
  45. package/src/components/CloseButton/index.ts +2 -2
  46. package/src/components/Colors/Colors.stories.tsx +7 -7
  47. package/src/components/Colors/Colors.styles.ts +38 -38
  48. package/src/components/Colors/Colors.tsx +26 -26
  49. package/src/components/Colors/index.ts +2 -2
  50. package/src/components/CssBaseline/CssBaseline.styles.ts +15 -15
  51. package/src/components/CssBaseline/CssBaseline.tsx +15 -15
  52. package/src/components/CssBaseline/index.ts +2 -2
  53. package/src/components/DateInput/DateInput.stories.tsx +61 -61
  54. package/src/components/DateInput/DateInput.styles.ts +14 -14
  55. package/src/components/DateInput/DateInput.tsx +82 -82
  56. package/src/components/DateInput/constants.ts +2 -2
  57. package/src/components/DateInput/index.ts +3 -3
  58. package/src/components/DatePicker/DatePicker.stories.tsx +87 -87
  59. package/src/components/DatePicker/DatePicker.styles.ts +44 -44
  60. package/src/components/DatePicker/DatePicker.tsx +309 -309
  61. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts +84 -84
  62. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.tsx +79 -79
  63. package/src/components/DatePicker/components/DatePickerHeader/index.ts +2 -2
  64. package/src/components/DatePicker/components/PopperContainer/PopperContainer.tsx +6 -6
  65. package/src/components/DatePicker/components/PopperContainer/index.ts +1 -1
  66. package/src/components/DatePicker/components/index.ts +2 -2
  67. package/src/components/DatePicker/constants.ts +6 -6
  68. package/src/components/DatePicker/helpers.ts +23 -23
  69. package/src/components/DatePicker/index.ts +4 -4
  70. package/src/components/DatePicker/types.ts +45 -45
  71. package/src/components/Description/Description.stories.tsx +27 -27
  72. package/src/components/Description/Description.styles.ts +31 -31
  73. package/src/components/Description/Description.tsx +59 -59
  74. package/src/components/Description/constants.ts +1 -1
  75. package/src/components/Description/index.ts +2 -2
  76. package/src/components/FiltersPane/FiltersPane.stories.tsx +295 -295
  77. package/src/components/FiltersPane/FiltersPane.styles.ts +71 -71
  78. package/src/components/FiltersPane/FiltersPane.tsx +150 -150
  79. package/src/components/FiltersPane/components/Filter/Filter.tsx +203 -203
  80. package/src/components/FiltersPane/components/Filter/index.ts +1 -1
  81. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts +64 -64
  82. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx +141 -141
  83. package/src/components/FiltersPane/components/FilterInterval/index.ts +2 -2
  84. package/src/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.tsx +10 -10
  85. package/src/components/FiltersPane/components/FilterMultiSelect/index.ts +1 -1
  86. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts +143 -143
  87. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx +346 -346
  88. package/src/components/FiltersPane/components/FilterSelect/index.ts +2 -2
  89. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.styles.tsx +15 -15
  90. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +163 -163
  91. package/src/components/FiltersPane/components/FilterValueView/index.tsx +2 -2
  92. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +60 -60
  93. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +181 -181
  94. package/src/components/FiltersPane/components/FilterWithDates/index.ts +2 -2
  95. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.ts +17 -17
  96. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +174 -174
  97. package/src/components/FiltersPane/components/FilterWithPeriod/index.ts +2 -2
  98. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.ts +110 -110
  99. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +149 -149
  100. package/src/components/FiltersPane/components/FilterWrapper/index.ts +2 -2
  101. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts +109 -109
  102. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx +155 -155
  103. package/src/components/FiltersPane/components/FiltersPaneSearch/index.ts +2 -2
  104. package/src/components/FiltersPane/components/index.ts +9 -9
  105. package/src/components/FiltersPane/constants.ts +137 -137
  106. package/src/components/FiltersPane/helpers.ts +26 -26
  107. package/src/components/FiltersPane/index.ts +5 -5
  108. package/src/components/FiltersPane/types.ts +156 -156
  109. package/src/components/Flag/Flag.stories.tsx +29 -29
  110. package/src/components/Flag/Flag.styles.ts +18 -18
  111. package/src/components/Flag/Flag.tsx +27 -27
  112. package/src/components/Flag/augment.d.ts +1 -1
  113. package/src/components/Flag/index.ts +2 -2
  114. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +338 -338
  115. package/src/components/FlexibleTable/FlexibleTable.styles.ts +131 -131
  116. package/src/components/FlexibleTable/FlexibleTable.tsx +205 -205
  117. package/src/components/FlexibleTable/components/TableRow/TableRow.tsx +152 -152
  118. package/src/components/FlexibleTable/components/TableRow/index.ts +1 -1
  119. package/src/components/FlexibleTable/components/TableValue/TableValue.tsx +74 -74
  120. package/src/components/FlexibleTable/components/TableValue/index.ts +1 -1
  121. package/src/components/FlexibleTable/components/index.ts +2 -2
  122. package/src/components/FlexibleTable/constants.ts +1 -1
  123. package/src/components/FlexibleTable/index.ts +3 -3
  124. package/src/components/FlexibleTable/types.ts +52 -52
  125. package/src/components/Icon/Icon.stories.tsx +86 -86
  126. package/src/components/Icon/Icon.styles.ts +10 -10
  127. package/src/components/Icon/Icon.tsx +27 -27
  128. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  129. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  130. package/src/components/Icon/complexIcons/icons.ts +5 -5
  131. package/src/components/Icon/complexIcons/index.ts +1 -1
  132. package/src/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.tsx +16 -16
  133. package/src/components/Icon/components/ComplexIconBoilerplate/index.ts +1 -1
  134. package/src/components/Icon/components/IconBolerplate/IconBoilerplate.tsx +43 -43
  135. package/src/components/Icon/components/IconBolerplate/index.ts +1 -1
  136. package/src/components/Icon/components/index.ts +2 -2
  137. package/src/components/Icon/helpers.ts +9 -9
  138. package/src/components/Icon/icons-list.ts +856 -826
  139. package/src/components/Icon/index.ts +4 -4
  140. package/src/components/Icon/types.ts +16 -16
  141. package/src/components/IncrementInput/IncrementInput.stories.tsx +31 -31
  142. package/src/components/IncrementInput/IncrementInput.styles.ts +77 -77
  143. package/src/components/IncrementInput/IncrementInput.tsx +80 -80
  144. package/src/components/IncrementInput/components/ChangeButton/ChangeButton.tsx +33 -33
  145. package/src/components/IncrementInput/components/ChangeButton/index.ts +1 -1
  146. package/src/components/IncrementInput/components/index.ts +1 -1
  147. package/src/components/IncrementInput/index.ts +2 -2
  148. package/src/components/Input/Input.stories.tsx +86 -86
  149. package/src/components/Input/Input.styles.ts +307 -307
  150. package/src/components/Input/Input.tsx +308 -309
  151. package/src/components/Input/constants.ts +1 -1
  152. package/src/components/Input/index.ts +3 -3
  153. package/src/components/Input/types.ts +6 -6
  154. package/src/components/List/List.stories.tsx +63 -63
  155. package/src/components/List/List.styles.ts +14 -52
  156. package/src/components/List/List.tsx +36 -54
  157. package/src/components/List/index.ts +2 -3
  158. package/src/components/ListItem/ListItem.stories.tsx +67 -0
  159. package/src/components/ListItem/ListItem.styles.ts +48 -0
  160. package/src/components/ListItem/ListItem.tsx +44 -0
  161. package/src/components/ListItem/constants.ts +5 -0
  162. package/src/components/ListItem/index.ts +3 -0
  163. package/src/components/{List → ListItem}/types.ts +19 -13
  164. package/src/components/Modal/Modal.stories.tsx +105 -105
  165. package/src/components/Modal/Modal.styles.ts +305 -305
  166. package/src/components/Modal/Modal.tsx +184 -184
  167. package/src/components/Modal/index.ts +3 -3
  168. package/src/components/Modal/types.ts +17 -17
  169. package/src/components/MoreMenu/MoreMenu.stories.tsx +46 -46
  170. package/src/components/MoreMenu/MoreMenu.styles.ts +70 -70
  171. package/src/components/MoreMenu/MoreMenu.tsx +90 -90
  172. package/src/components/MoreMenu/index.ts +2 -2
  173. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  174. package/src/components/MultiSelect/MultiSelect.styles.ts +55 -55
  175. package/src/components/MultiSelect/MultiSelect.tsx +92 -92
  176. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.ts +73 -73
  177. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +51 -51
  178. package/src/components/MultiSelect/components/MultiSelectInput/index.ts +2 -2
  179. package/src/components/MultiSelect/components/index.ts +1 -1
  180. package/src/components/MultiSelect/index.ts +4 -4
  181. package/src/components/MultiSelect/types.ts +1 -1
  182. package/src/components/MultiSelectList/MultiSelectList.styles.ts +124 -124
  183. package/src/components/MultiSelectList/MultiSelectList.tsx +441 -441
  184. package/src/components/MultiSelectList/constants.ts +21 -21
  185. package/src/components/MultiSelectList/helpers.ts +11 -11
  186. package/src/components/MultiSelectList/index.ts +3 -3
  187. package/src/components/MultiSelectList/types.ts +15 -15
  188. package/src/components/Notification/Notification.stories.tsx +46 -46
  189. package/src/components/Notification/Notification.styles.ts +50 -50
  190. package/src/components/Notification/Notification.tsx +78 -78
  191. package/src/components/Notification/index.ts +3 -3
  192. package/src/components/Notification/types.ts +1 -1
  193. package/src/components/NumberInput/NumberInput.stories.tsx +35 -35
  194. package/src/components/NumberInput/NumberInput.tsx +133 -133
  195. package/src/components/NumberInput/helpers.ts +86 -86
  196. package/src/components/NumberInput/index.ts +1 -1
  197. package/src/components/PhoneInput/PhoneInput.stories.tsx +70 -70
  198. package/src/components/PhoneInput/PhoneInput.styles.ts +84 -84
  199. package/src/components/PhoneInput/PhoneInput.tsx +193 -193
  200. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +21 -21
  201. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts +100 -100
  202. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +145 -145
  203. package/src/components/PhoneInput/components/PhoneInputCountryList/index.ts +2 -2
  204. package/src/components/PhoneInput/components/index.ts +1 -1
  205. package/src/components/PhoneInput/constants.ts +3 -3
  206. package/src/components/PhoneInput/index.ts +5 -5
  207. package/src/components/PhoneInput/phone-info.ts +2147 -2147
  208. package/src/components/PhoneInput/types.ts +16 -16
  209. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  210. package/src/components/RadioButton/RadioButton.styles.ts +37 -37
  211. package/src/components/RadioButton/RadioButton.tsx +55 -55
  212. package/src/components/RadioButton/index.ts +2 -2
  213. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +54 -54
  214. package/src/components/ScrollIntoViewIfNeeded/constants.ts +12 -12
  215. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  216. package/src/components/SearchInput/SearchInput.stories.tsx +23 -23
  217. package/src/components/SearchInput/SearchInput.styles.ts +50 -50
  218. package/src/components/SearchInput/SearchInput.tsx +51 -51
  219. package/src/components/SearchInput/index.ts +2 -2
  220. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  221. package/src/components/Select/Select.stories.tsx +235 -235
  222. package/src/components/Select/Select.styles.ts +96 -96
  223. package/src/components/Select/Select.tsx +574 -575
  224. package/src/components/Select/components/SelectList/SelectList.styles.ts +72 -72
  225. package/src/components/Select/components/SelectList/SelectList.tsx +158 -158
  226. package/src/components/Select/components/SelectList/index.ts +2 -2
  227. package/src/components/Select/components/SelectListItem/SelectListItem.styles.ts +14 -14
  228. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +68 -68
  229. package/src/components/Select/components/SelectListItem/index.ts +1 -1
  230. package/src/components/Select/components/index.ts +2 -2
  231. package/src/components/Select/constants.ts +2 -2
  232. package/src/components/Select/helpers.ts +26 -26
  233. package/src/components/Select/index.ts +4 -4
  234. package/src/components/Select/types.ts +1 -1
  235. package/src/components/SmartInput/SmartInput.stories.tsx +51 -51
  236. package/src/components/SmartInput/SmartInput.tsx +124 -124
  237. package/src/components/SmartInput/constants.ts +84 -84
  238. package/src/components/SmartInput/helpers.ts +13 -13
  239. package/src/components/SmartInput/index.ts +2 -2
  240. package/src/components/SmartInput/types.ts +11 -11
  241. package/src/components/Switch/Switch.stories.tsx +40 -40
  242. package/src/components/Switch/Switch.styles.ts +75 -75
  243. package/src/components/Switch/Switch.tsx +79 -79
  244. package/src/components/Switch/index.ts +3 -3
  245. package/src/components/Switch/types.ts +4 -4
  246. package/src/components/TextArea/TextArea.stories.tsx +35 -35
  247. package/src/components/TextArea/TextArea.styles.ts +153 -153
  248. package/src/components/TextArea/TextArea.tsx +174 -174
  249. package/src/components/TextArea/index.ts +2 -2
  250. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  251. package/src/components/TextWithInfo/TextWithInfo.styles.ts +60 -60
  252. package/src/components/TextWithInfo/TextWithInfo.tsx +60 -60
  253. package/src/components/TextWithInfo/index.ts +2 -2
  254. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  255. package/src/components/TextWithTooltip/TextWithTooltip.styles.ts +19 -19
  256. package/src/components/TextWithTooltip/TextWithTooltip.tsx +143 -143
  257. package/src/components/TextWithTooltip/index.ts +2 -2
  258. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  259. package/src/components/ThemedPreloader/ThemedPreloader.styles.ts +21 -21
  260. package/src/components/ThemedPreloader/ThemedPreloader.tsx +47 -47
  261. package/src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx +29 -29
  262. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  263. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts +54 -54
  264. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx +18 -18
  265. package/src/components/ThemedPreloader/components/DotsPreloader/index.ts +2 -2
  266. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts +11 -11
  267. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +25 -25
  268. package/src/components/ThemedPreloader/components/SvgPreloader/index.ts +2 -2
  269. package/src/components/ThemedPreloader/components/index.ts +3 -3
  270. package/src/components/ThemedPreloader/constants.ts +1 -1
  271. package/src/components/ThemedPreloader/index.ts +4 -4
  272. package/src/components/ThemedPreloader/types.ts +3 -3
  273. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  274. package/src/components/Toaster/Toaster.styles.ts +59 -59
  275. package/src/components/Toaster/Toaster.tsx +108 -108
  276. package/src/components/Toaster/constants.ts +1 -1
  277. package/src/components/Toaster/index.ts +3 -3
  278. package/src/components/Toaster/types.ts +1 -1
  279. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  280. package/src/components/Tooltip/Tooltip.styles.ts +45 -45
  281. package/src/components/Tooltip/Tooltip.tsx +35 -35
  282. package/src/components/Tooltip/index.ts +3 -3
  283. package/src/components/Tooltip/types.ts +1 -1
  284. package/src/components/index.ts +37 -36
  285. package/src/helpers/deprecated.ts +23 -23
  286. package/src/helpers/index.ts +5 -4
  287. package/src/helpers/misc.ts +158 -158
  288. package/src/helpers/phone.ts +87 -87
  289. package/src/helpers/popper-helpers.ts +17 -17
  290. package/src/helpers/snippets.tsx +6 -6
  291. package/src/hooks/index.ts +6 -6
  292. package/src/hooks/use-did-mount-effect.ts +18 -18
  293. package/src/hooks/use-dropdown.ts +82 -82
  294. package/src/hooks/use-is-mounted.ts +15 -15
  295. package/src/hooks/use-on-click-outside.ts +77 -77
  296. package/src/hooks/use-theme.ts +32 -32
  297. package/src/hooks/use-tweak-styles.ts +13 -13
  298. package/src/index.ts +6 -6
  299. package/src/theme.ts +149 -149
  300. package/src/types.ts +109 -108
  301. package/src/vite-env.d.ts +1 -1
@@ -1,158 +1,158 @@
1
- import hexToRgba from 'hex-to-rgba';
2
- import {
3
- isNotEmpty,
4
- isString,
5
- isStringNotEmpty,
6
- } from '@true-engineering/true-react-platform-helpers';
7
- import { IDataAttributes } from '../types';
8
-
9
- export const rgba = hexToRgba;
10
-
11
- export const transformToKebab = (string: string): string => {
12
- let result = '';
13
- string.split('').forEach((char) => {
14
- if (char.toLowerCase() === char) {
15
- result += char;
16
- } else {
17
- result += `-${char.toLowerCase()}`;
18
- }
19
- });
20
-
21
- return result;
22
- };
23
-
24
- export const hasExactParent = (element: Element, parent: Element): boolean => {
25
- if (element === parent) {
26
- return true; // Found the exact parent
27
- }
28
-
29
- const parentNode = getParentNode(element);
30
-
31
- if (parentNode === element) {
32
- return false; // Reached the top-level HTML element or Shadow DOM host
33
- }
34
-
35
- return hasExactParent(parentNode, parent);
36
- };
37
-
38
- export const getParentNode = (element: Element | ShadowRoot | Document): Element =>
39
- element.nodeName === 'HTML' || element === document
40
- ? (element as Element)
41
- : (element.parentNode as Element) ?? (element as ShadowRoot).host;
42
-
43
- export const getStyleComputedProperty = (element: Element): Partial<CSSStyleDeclaration> =>
44
- element.nodeType !== 1 ? {} : getComputedStyle(element, null);
45
-
46
- export const getScrollParent = (element: Element | Document): Element => {
47
- if (!element) {
48
- return document.body;
49
- }
50
-
51
- switch (element.nodeName) {
52
- case 'HTML':
53
- case 'BODY':
54
- return (element as Element).ownerDocument.body;
55
- case '#document':
56
- return (element as Document).body;
57
- }
58
-
59
- const { overflow, overflowX, overflowY } = getStyleComputedProperty(element as Element) ?? {};
60
- if (/(auto|scroll|overlay)/.test((overflow ?? '') + (overflowY ?? '') + (overflowX ?? ''))) {
61
- return element as Element;
62
- }
63
- return getScrollParent(getParentNode(element as Element));
64
- };
65
-
66
- export const isElementOffScreen = (element: HTMLElement, input?: HTMLElement): boolean => {
67
- const el = element;
68
- const scrollParent = getScrollParent(element);
69
-
70
- const { scrollHeight: scrollHeightWithElement } = scrollParent;
71
- el.hidden = true;
72
- const { scrollHeight: scrollHeightWithoutElement } = scrollParent;
73
- el.hidden = false;
74
-
75
- const isOffscreen = scrollHeightWithElement !== scrollHeightWithoutElement;
76
-
77
- if (isOffscreen && input !== undefined) {
78
- const elRect = el.getBoundingClientRect();
79
- const scrollParentRect = scrollParent.getBoundingClientRect();
80
- const topOffset = elRect.top - scrollParentRect.top;
81
- if (input.clientHeight + el.clientHeight > topOffset) {
82
- return false;
83
- }
84
- }
85
-
86
- return isOffscreen;
87
- };
88
-
89
- export const getNumberInRange = (value: number, min = -Infinity, max = Infinity): number =>
90
- Math.min(max, Math.max(min, value));
91
-
92
- const DEFAULT_THOUSANDS_SEPARATOR = '\u2009';
93
-
94
- export const formatStringNumber = (
95
- val?: string,
96
- separator = DEFAULT_THOUSANDS_SEPARATOR,
97
- ): string => {
98
- if (val === undefined) {
99
- return '';
100
- }
101
- const parts = val.split('.');
102
-
103
- parts[0] = parts[0]
104
- // убрать лидирующие нули
105
- .replace(/^0+(?=\d)/, '')
106
- // проставить сепараторы тысяч
107
- .replace(/\B(?=(\d{3})+(?!\d))/g, separator);
108
- return (parts[1] ?? '').length > 0 ? parts.join('.') : parts[0];
109
- };
110
-
111
- export const formatNumber = (val?: number, separator = DEFAULT_THOUSANDS_SEPARATOR): string => {
112
- if (val === undefined || isNaN(val)) {
113
- return '';
114
- }
115
- return formatStringNumber(String(val), separator);
116
- };
117
-
118
- export const removeStringFormat = (val?: string): string =>
119
- (val ?? '').replace(',', '.').replace(/\s/g, '');
120
-
121
- export const stringToNumber = (val?: string): number | undefined => {
122
- const trimmed = removeStringFormat(val);
123
- if (trimmed === '') {
124
- return undefined;
125
- }
126
- const num = Number(trimmed);
127
- return isNaN(num) ? undefined : num;
128
- };
129
-
130
- export const setCaretPosition = (elem: HTMLInputElement, caretPos: number | null): void => {
131
- if (caretPos === null || elem === null) {
132
- return;
133
- }
134
- if (elem.selectionStart) {
135
- elem.focus();
136
- elem.setSelectionRange(caretPos, caretPos);
137
- } else {
138
- elem.focus();
139
- }
140
- };
141
-
142
- export const isSpaceChar = (char?: string): boolean =>
143
- char !== undefined && char.match(/\s/) !== null;
144
-
145
- export const getNumberLength = (n?: number): number =>
146
- n === undefined || isNaN(n) ? 0 : n.toString().length;
147
-
148
- export const trimStringToMaxLength = (val: string, maxLength: number) =>
149
- val.length > maxLength ? val.slice(0, maxLength) : val;
150
-
151
- export const addDataAttributes = (data: IDataAttributes = {}): IDataAttributes =>
152
- Object.fromEntries(
153
- Object.entries(data).map(([key, value]) =>
154
- (isString(value) && isStringNotEmpty(value)) || isNotEmpty(value)
155
- ? [`data-${transformToKebab(key)}`, value]
156
- : [],
157
- ),
158
- );
1
+ import hexToRgba from 'hex-to-rgba';
2
+ import {
3
+ isNotEmpty,
4
+ isString,
5
+ isStringNotEmpty,
6
+ } from '@true-engineering/true-react-platform-helpers';
7
+ import { IDataAttributes } from '../types';
8
+
9
+ export const rgba = hexToRgba;
10
+
11
+ export const transformToKebab = (string: string): string => {
12
+ let result = '';
13
+ string.split('').forEach((char) => {
14
+ if (char.toLowerCase() === char) {
15
+ result += char;
16
+ } else {
17
+ result += `-${char.toLowerCase()}`;
18
+ }
19
+ });
20
+
21
+ return result;
22
+ };
23
+
24
+ export const hasExactParent = (element: Element, parent: Element): boolean => {
25
+ if (element === parent) {
26
+ return true; // Found the exact parent
27
+ }
28
+
29
+ const parentNode = getParentNode(element);
30
+
31
+ if (parentNode === element) {
32
+ return false; // Reached the top-level HTML element or Shadow DOM host
33
+ }
34
+
35
+ return hasExactParent(parentNode, parent);
36
+ };
37
+
38
+ export const getParentNode = (element: Element | ShadowRoot | Document): Element =>
39
+ element.nodeName === 'HTML' || element === document
40
+ ? (element as Element)
41
+ : (element.parentNode as Element) ?? (element as ShadowRoot).host;
42
+
43
+ export const getStyleComputedProperty = (element: Element): Partial<CSSStyleDeclaration> =>
44
+ element.nodeType !== 1 ? {} : getComputedStyle(element, null);
45
+
46
+ export const getScrollParent = (element: Element | Document): Element => {
47
+ if (!element) {
48
+ return document.body;
49
+ }
50
+
51
+ switch (element.nodeName) {
52
+ case 'HTML':
53
+ case 'BODY':
54
+ return (element as Element).ownerDocument.body;
55
+ case '#document':
56
+ return (element as Document).body;
57
+ }
58
+
59
+ const { overflow, overflowX, overflowY } = getStyleComputedProperty(element as Element) ?? {};
60
+ if (/(auto|scroll|overlay)/.test((overflow ?? '') + (overflowY ?? '') + (overflowX ?? ''))) {
61
+ return element as Element;
62
+ }
63
+ return getScrollParent(getParentNode(element as Element));
64
+ };
65
+
66
+ export const isElementOffScreen = (element: HTMLElement, input?: HTMLElement): boolean => {
67
+ const el = element;
68
+ const scrollParent = getScrollParent(element);
69
+
70
+ const { scrollHeight: scrollHeightWithElement } = scrollParent;
71
+ el.hidden = true;
72
+ const { scrollHeight: scrollHeightWithoutElement } = scrollParent;
73
+ el.hidden = false;
74
+
75
+ const isOffscreen = scrollHeightWithElement !== scrollHeightWithoutElement;
76
+
77
+ if (isOffscreen && input !== undefined) {
78
+ const elRect = el.getBoundingClientRect();
79
+ const scrollParentRect = scrollParent.getBoundingClientRect();
80
+ const topOffset = elRect.top - scrollParentRect.top;
81
+ if (input.clientHeight + el.clientHeight > topOffset) {
82
+ return false;
83
+ }
84
+ }
85
+
86
+ return isOffscreen;
87
+ };
88
+
89
+ export const getNumberInRange = (value: number, min = -Infinity, max = Infinity): number =>
90
+ Math.min(max, Math.max(min, value));
91
+
92
+ const DEFAULT_THOUSANDS_SEPARATOR = '\u2009';
93
+
94
+ export const formatStringNumber = (
95
+ val?: string,
96
+ separator = DEFAULT_THOUSANDS_SEPARATOR,
97
+ ): string => {
98
+ if (val === undefined) {
99
+ return '';
100
+ }
101
+ const parts = val.split('.');
102
+
103
+ parts[0] = parts[0]
104
+ // убрать лидирующие нули
105
+ .replace(/^0+(?=\d)/, '')
106
+ // проставить сепараторы тысяч
107
+ .replace(/\B(?=(\d{3})+(?!\d))/g, separator);
108
+ return (parts[1] ?? '').length > 0 ? parts.join('.') : parts[0];
109
+ };
110
+
111
+ export const formatNumber = (val?: number, separator = DEFAULT_THOUSANDS_SEPARATOR): string => {
112
+ if (val === undefined || isNaN(val)) {
113
+ return '';
114
+ }
115
+ return formatStringNumber(String(val), separator);
116
+ };
117
+
118
+ export const removeStringFormat = (val?: string): string =>
119
+ (val ?? '').replace(',', '.').replace(/\s/g, '');
120
+
121
+ export const stringToNumber = (val?: string): number | undefined => {
122
+ const trimmed = removeStringFormat(val);
123
+ if (trimmed === '') {
124
+ return undefined;
125
+ }
126
+ const num = Number(trimmed);
127
+ return isNaN(num) ? undefined : num;
128
+ };
129
+
130
+ export const setCaretPosition = (elem: HTMLInputElement, caretPos: number | null): void => {
131
+ if (caretPos === null || elem === null) {
132
+ return;
133
+ }
134
+ if (elem.selectionStart) {
135
+ elem.focus();
136
+ elem.setSelectionRange(caretPos, caretPos);
137
+ } else {
138
+ elem.focus();
139
+ }
140
+ };
141
+
142
+ export const isSpaceChar = (char?: string): boolean =>
143
+ char !== undefined && char.match(/\s/) !== null;
144
+
145
+ export const getNumberLength = (n?: number): number =>
146
+ n === undefined || isNaN(n) ? 0 : n.toString().length;
147
+
148
+ export const trimStringToMaxLength = (val: string, maxLength: number) =>
149
+ val.length > maxLength ? val.slice(0, maxLength) : val;
150
+
151
+ export const addDataAttributes = (data: IDataAttributes = {}): IDataAttributes =>
152
+ Object.fromEntries(
153
+ Object.entries(data).map(([key, value]) =>
154
+ (isString(value) && isStringNotEmpty(value)) || isNotEmpty(value)
155
+ ? [`data-${transformToKebab(key)}`, value]
156
+ : [],
157
+ ),
158
+ );
@@ -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
+ };