@true-engineering/true-react-common-ui-kit 3.0.3 → 3.0.5

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 (300) hide show
  1. package/LICENSE +201 -201
  2. package/dist/components/FiltersPane/FiltersPane.d.ts +0 -1
  3. package/dist/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.d.ts +0 -1
  4. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.d.ts +0 -1
  5. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.d.ts +1 -1
  6. package/dist/components/Flag/augment.d.ts +1 -1
  7. package/dist/components/Icon/complexIcons/augment.d.ts +1 -1
  8. package/dist/components/MultiSelect/MultiSelect.d.ts +0 -1
  9. package/dist/components/TextWithInfo/TextWithInfo.styles.d.ts +1 -1
  10. package/dist/true-react-common-ui-kit.js +91 -79
  11. package/dist/true-react-common-ui-kit.js.map +1 -1
  12. package/dist/true-react-common-ui-kit.umd.cjs +91 -79
  13. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  14. package/dist/vite-env.d.ts +1 -1
  15. package/package.json +94 -94
  16. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  17. package/src/components/AccountInfo/AccountInfo.styles.ts +51 -51
  18. package/src/components/AccountInfo/AccountInfo.tsx +79 -79
  19. package/src/components/AccountInfo/constants.ts +1 -1
  20. package/src/components/AccountInfo/index.ts +2 -2
  21. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  22. package/src/components/AddButton/AddButton.styles.ts +34 -34
  23. package/src/components/AddButton/AddButton.tsx +49 -49
  24. package/src/components/AddButton/index.ts +2 -2
  25. package/src/components/Button/Button.stories.tsx +56 -56
  26. package/src/components/Button/Button.styles.ts +200 -200
  27. package/src/components/Button/Button.tsx +147 -147
  28. package/src/components/Button/constants.ts +9 -9
  29. package/src/components/Button/index.ts +3 -3
  30. package/src/components/Button/types.ts +5 -5
  31. package/src/components/Checkbox/Checkbox.stories.tsx +28 -28
  32. package/src/components/Checkbox/Checkbox.styles.ts +47 -47
  33. package/src/components/Checkbox/Checkbox.tsx +83 -83
  34. package/src/components/Checkbox/index.ts +2 -2
  35. package/src/components/CloseButton/CloseButton.styles.ts +33 -33
  36. package/src/components/CloseButton/CloseButton.tsx +33 -33
  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 +36 -36
  40. package/src/components/Colors/Colors.tsx +26 -26
  41. package/src/components/Colors/index.ts +1 -1
  42. package/src/components/CssBaseline/CssBaseline.styles.ts +14 -14
  43. package/src/components/CssBaseline/CssBaseline.tsx +13 -13
  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 +18 -18
  47. package/src/components/DateInput/DateInput.tsx +87 -87
  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 +88 -88
  51. package/src/components/DatePicker/DatePicker.styles.ts +38 -38
  52. package/src/components/DatePicker/DatePicker.tsx +306 -306
  53. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts +88 -88
  54. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.tsx +89 -89
  55. package/src/components/DatePicker/components/DatePickerHeader/index.ts +2 -2
  56. package/src/components/DatePicker/components/PopperContainer/PopperContainer.tsx +6 -6
  57. package/src/components/DatePicker/components/PopperContainer/index.ts +1 -1
  58. package/src/components/DatePicker/components/index.ts +2 -2
  59. package/src/components/DatePicker/constants.ts +6 -6
  60. package/src/components/DatePicker/helpers.ts +23 -23
  61. package/src/components/DatePicker/index.ts +4 -4
  62. package/src/components/DatePicker/types.ts +45 -45
  63. package/src/components/Description/Description.stories.tsx +27 -27
  64. package/src/components/Description/Description.styles.ts +30 -30
  65. package/src/components/Description/Description.tsx +59 -59
  66. package/src/components/Description/constants.ts +1 -1
  67. package/src/components/Description/index.ts +2 -2
  68. package/src/components/FiltersPane/FiltersPane.stories.tsx +287 -287
  69. package/src/components/FiltersPane/FiltersPane.styles.ts +87 -87
  70. package/src/components/FiltersPane/FiltersPane.tsx +155 -155
  71. package/src/components/FiltersPane/components/Filter/Filter.tsx +203 -203
  72. package/src/components/FiltersPane/components/Filter/index.ts +1 -1
  73. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts +61 -61
  74. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx +154 -154
  75. package/src/components/FiltersPane/components/FilterInterval/index.ts +2 -2
  76. package/src/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.tsx +10 -10
  77. package/src/components/FiltersPane/components/FilterMultiSelect/index.ts +1 -1
  78. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts +140 -140
  79. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx +354 -354
  80. package/src/components/FiltersPane/components/FilterSelect/index.ts +2 -2
  81. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.styles.tsx +15 -15
  82. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +165 -165
  83. package/src/components/FiltersPane/components/FilterValueView/index.tsx +2 -2
  84. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +68 -68
  85. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  86. package/src/components/FiltersPane/components/FilterWithDates/index.ts +2 -2
  87. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.ts +21 -21
  88. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  89. package/src/components/FiltersPane/components/FilterWithPeriod/index.ts +2 -2
  90. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.ts +115 -115
  91. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +167 -167
  92. package/src/components/FiltersPane/components/FilterWrapper/index.ts +2 -2
  93. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts +117 -117
  94. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx +165 -165
  95. package/src/components/FiltersPane/components/FiltersPaneSearch/index.ts +2 -2
  96. package/src/components/FiltersPane/components/index.ts +9 -9
  97. package/src/components/FiltersPane/constants.ts +137 -137
  98. package/src/components/FiltersPane/helpers.ts +26 -26
  99. package/src/components/FiltersPane/index.ts +5 -5
  100. package/src/components/FiltersPane/types.ts +156 -156
  101. package/src/components/Flag/Flag.stories.tsx +29 -29
  102. package/src/components/Flag/Flag.styles.ts +17 -17
  103. package/src/components/Flag/Flag.tsx +25 -25
  104. package/src/components/Flag/augment.d.ts +1 -1
  105. package/src/components/Flag/index.ts +2 -2
  106. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +353 -353
  107. package/src/components/FlexibleTable/FlexibleTable.styles.ts +103 -103
  108. package/src/components/FlexibleTable/FlexibleTable.tsx +260 -260
  109. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +32 -32
  110. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +69 -69
  111. package/src/components/FlexibleTable/components/FlexibleTableCell/index.ts +2 -2
  112. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +23 -23
  113. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +155 -155
  114. package/src/components/FlexibleTable/components/FlexibleTableRow/index.ts +2 -2
  115. package/src/components/FlexibleTable/components/index.ts +2 -2
  116. package/src/components/FlexibleTable/constants.ts +1 -1
  117. package/src/components/FlexibleTable/helpers.ts +15 -15
  118. package/src/components/FlexibleTable/index.ts +4 -4
  119. package/src/components/FlexibleTable/types.ts +52 -52
  120. package/src/components/Icon/Icon.stories.tsx +86 -86
  121. package/src/components/Icon/Icon.styles.ts +10 -10
  122. package/src/components/Icon/Icon.tsx +26 -26
  123. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  124. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  125. package/src/components/Icon/complexIcons/icons.ts +5 -5
  126. package/src/components/Icon/complexIcons/index.ts +1 -1
  127. package/src/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.tsx +16 -16
  128. package/src/components/Icon/components/ComplexIconBoilerplate/index.ts +1 -1
  129. package/src/components/Icon/components/IconBolerplate/IconBoilerplate.tsx +43 -43
  130. package/src/components/Icon/components/IconBolerplate/index.ts +1 -1
  131. package/src/components/Icon/components/index.ts +2 -2
  132. package/src/components/Icon/helpers.tsx +9 -9
  133. package/src/components/Icon/icons-list.ts +856 -856
  134. package/src/components/Icon/index.ts +5 -5
  135. package/src/components/Icon/snippet.tsx +6 -6
  136. package/src/components/Icon/types.ts +18 -18
  137. package/src/components/IncrementInput/IncrementInput.stories.tsx +31 -31
  138. package/src/components/IncrementInput/IncrementInput.styles.ts +77 -77
  139. package/src/components/IncrementInput/IncrementInput.tsx +104 -104
  140. package/src/components/IncrementInput/index.ts +2 -2
  141. package/src/components/Input/Input.stories.tsx +86 -86
  142. package/src/components/Input/Input.styles.ts +307 -307
  143. package/src/components/Input/Input.tsx +310 -310
  144. package/src/components/Input/constants.ts +1 -1
  145. package/src/components/Input/index.ts +3 -3
  146. package/src/components/Input/types.ts +6 -6
  147. package/src/components/List/List.stories.tsx +70 -70
  148. package/src/components/List/List.styles.ts +51 -51
  149. package/src/components/List/List.tsx +33 -33
  150. package/src/components/List/components/ListItem/ListItem.styles.ts +47 -47
  151. package/src/components/List/components/ListItem/ListItem.tsx +57 -57
  152. package/src/components/List/components/ListItem/index.ts +2 -2
  153. package/src/components/List/components/index.ts +1 -1
  154. package/src/components/List/index.ts +3 -3
  155. package/src/components/Modal/Modal.stories.tsx +105 -105
  156. package/src/components/Modal/Modal.styles.ts +303 -303
  157. package/src/components/Modal/Modal.tsx +186 -186
  158. package/src/components/Modal/index.ts +3 -3
  159. package/src/components/Modal/types.ts +17 -17
  160. package/src/components/MoreMenu/MoreMenu.stories.tsx +46 -46
  161. package/src/components/MoreMenu/MoreMenu.styles.ts +68 -68
  162. package/src/components/MoreMenu/MoreMenu.tsx +93 -93
  163. package/src/components/MoreMenu/index.ts +2 -2
  164. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  165. package/src/components/MultiSelect/MultiSelect.styles.ts +59 -59
  166. package/src/components/MultiSelect/MultiSelect.tsx +101 -101
  167. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.ts +73 -73
  168. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  169. package/src/components/MultiSelect/components/MultiSelectInput/index.ts +2 -2
  170. package/src/components/MultiSelect/components/index.ts +1 -1
  171. package/src/components/MultiSelect/index.ts +4 -4
  172. package/src/components/MultiSelect/types.ts +1 -1
  173. package/src/components/MultiSelectList/MultiSelectList.styles.ts +136 -136
  174. package/src/components/MultiSelectList/MultiSelectList.tsx +458 -458
  175. package/src/components/MultiSelectList/constants.ts +21 -21
  176. package/src/components/MultiSelectList/helpers.ts +11 -11
  177. package/src/components/MultiSelectList/index.ts +3 -3
  178. package/src/components/MultiSelectList/types.ts +15 -15
  179. package/src/components/Notification/Notification.stories.tsx +46 -46
  180. package/src/components/Notification/Notification.styles.ts +55 -55
  181. package/src/components/Notification/Notification.tsx +75 -75
  182. package/src/components/Notification/index.ts +3 -3
  183. package/src/components/Notification/types.ts +1 -1
  184. package/src/components/NumberInput/NumberInput.stories.tsx +35 -35
  185. package/src/components/NumberInput/NumberInput.tsx +133 -133
  186. package/src/components/NumberInput/helpers.ts +86 -86
  187. package/src/components/NumberInput/index.ts +1 -1
  188. package/src/components/PhoneInput/PhoneInput.stories.tsx +70 -70
  189. package/src/components/PhoneInput/PhoneInput.styles.ts +89 -89
  190. package/src/components/PhoneInput/PhoneInput.tsx +210 -210
  191. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +21 -21
  192. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts +103 -103
  193. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  194. package/src/components/PhoneInput/components/PhoneInputCountryList/index.ts +2 -2
  195. package/src/components/PhoneInput/components/index.ts +1 -1
  196. package/src/components/PhoneInput/constants.ts +3 -3
  197. package/src/components/PhoneInput/index.ts +4 -4
  198. package/src/components/PhoneInput/types.ts +16 -16
  199. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  200. package/src/components/RadioButton/RadioButton.styles.ts +37 -37
  201. package/src/components/RadioButton/RadioButton.tsx +55 -55
  202. package/src/components/RadioButton/index.ts +2 -2
  203. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +54 -54
  204. package/src/components/ScrollIntoViewIfNeeded/constants.ts +12 -12
  205. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  206. package/src/components/SearchInput/SearchInput.stories.tsx +23 -23
  207. package/src/components/SearchInput/SearchInput.styles.ts +50 -50
  208. package/src/components/SearchInput/SearchInput.tsx +56 -56
  209. package/src/components/SearchInput/index.ts +2 -2
  210. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  211. package/src/components/Select/Select.stories.tsx +235 -235
  212. package/src/components/Select/Select.styles.ts +146 -146
  213. package/src/components/Select/Select.tsx +574 -574
  214. package/src/components/Select/components/SelectList/SelectList.styles.ts +71 -71
  215. package/src/components/Select/components/SelectList/SelectList.tsx +157 -157
  216. package/src/components/Select/components/SelectList/index.ts +2 -2
  217. package/src/components/Select/components/SelectListItem/SelectListItem.styles.ts +14 -14
  218. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +68 -68
  219. package/src/components/Select/components/SelectListItem/index.ts +1 -1
  220. package/src/components/Select/components/index.ts +2 -2
  221. package/src/components/Select/constants.ts +2 -2
  222. package/src/components/Select/helpers.ts +27 -27
  223. package/src/components/Select/index.ts +4 -4
  224. package/src/components/Select/types.ts +1 -1
  225. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  226. package/src/components/Skeleton/Skeleton.styles.ts +46 -46
  227. package/src/components/Skeleton/Skeleton.tsx +12 -12
  228. package/src/components/Skeleton/index.ts +2 -2
  229. package/src/components/SmartInput/SmartInput.stories.tsx +51 -51
  230. package/src/components/SmartInput/SmartInput.tsx +124 -124
  231. package/src/components/SmartInput/constants.ts +84 -84
  232. package/src/components/SmartInput/helpers.ts +13 -13
  233. package/src/components/SmartInput/index.ts +2 -2
  234. package/src/components/SmartInput/types.ts +11 -11
  235. package/src/components/Switch/Switch.stories.tsx +40 -40
  236. package/src/components/Switch/Switch.styles.ts +75 -75
  237. package/src/components/Switch/Switch.tsx +76 -76
  238. package/src/components/Switch/index.ts +3 -3
  239. package/src/components/Switch/types.ts +4 -4
  240. package/src/components/TextArea/TextArea.stories.tsx +35 -35
  241. package/src/components/TextArea/TextArea.styles.ts +157 -153
  242. package/src/components/TextArea/TextArea.tsx +171 -171
  243. package/src/components/TextArea/index.ts +2 -2
  244. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  245. package/src/components/TextWithInfo/TextWithInfo.styles.ts +59 -59
  246. package/src/components/TextWithInfo/TextWithInfo.tsx +61 -61
  247. package/src/components/TextWithInfo/index.ts +2 -2
  248. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  249. package/src/components/TextWithTooltip/TextWithTooltip.styles.ts +21 -21
  250. package/src/components/TextWithTooltip/TextWithTooltip.tsx +149 -149
  251. package/src/components/TextWithTooltip/index.ts +2 -2
  252. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  253. package/src/components/ThemedPreloader/ThemedPreloader.styles.ts +26 -26
  254. package/src/components/ThemedPreloader/ThemedPreloader.tsx +55 -55
  255. package/src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx +29 -29
  256. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  257. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts +54 -54
  258. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx +15 -15
  259. package/src/components/ThemedPreloader/components/DotsPreloader/index.ts +2 -2
  260. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts +11 -11
  261. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +24 -24
  262. package/src/components/ThemedPreloader/components/SvgPreloader/index.ts +2 -2
  263. package/src/components/ThemedPreloader/components/index.ts +3 -3
  264. package/src/components/ThemedPreloader/constants.ts +1 -1
  265. package/src/components/ThemedPreloader/index.ts +4 -4
  266. package/src/components/ThemedPreloader/types.ts +3 -3
  267. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  268. package/src/components/Toaster/Toaster.styles.ts +60 -60
  269. package/src/components/Toaster/Toaster.tsx +114 -114
  270. package/src/components/Toaster/constants.ts +1 -1
  271. package/src/components/Toaster/index.ts +3 -3
  272. package/src/components/Toaster/types.ts +1 -1
  273. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  274. package/src/components/Tooltip/Tooltip.styles.ts +49 -49
  275. package/src/components/Tooltip/Tooltip.tsx +39 -39
  276. package/src/components/Tooltip/index.ts +3 -3
  277. package/src/components/Tooltip/types.ts +1 -1
  278. package/src/components/index.ts +37 -37
  279. package/src/constants/index.ts +1 -1
  280. package/src/constants/phone-info.ts +2147 -2147
  281. package/src/helpers/index.ts +3 -3
  282. package/src/helpers/misc.ts +158 -158
  283. package/src/helpers/phone.ts +91 -91
  284. package/src/helpers/popper-helpers.ts +17 -17
  285. package/src/hooks/index.ts +7 -7
  286. package/src/hooks/use-did-mount-effect.ts +18 -18
  287. package/src/hooks/use-dropdown.ts +82 -82
  288. package/src/hooks/use-is-mounted.ts +15 -15
  289. package/src/hooks/use-merged-refs.ts +4 -4
  290. package/src/hooks/use-mixed-styles.ts +14 -14
  291. package/src/hooks/use-on-click-outside.ts +77 -77
  292. package/src/hooks/use-tweak-styles.ts +57 -57
  293. package/src/index.ts +6 -6
  294. package/src/theme/Provider.tsx +21 -21
  295. package/src/theme/common.ts +160 -149
  296. package/src/theme/helpers.ts +74 -74
  297. package/src/theme/index.ts +4 -4
  298. package/src/theme/types.ts +141 -141
  299. package/src/types.ts +26 -26
  300. package/src/vite-env.d.ts +1 -1
@@ -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,4 +1,4 @@
1
- import { useMemo } from 'react';
2
- import { mergeRefs } from '@true-engineering/true-react-platform-helpers';
3
-
4
- export const useMergedRefs: typeof mergeRefs = (refs) => useMemo(() => mergeRefs(refs), refs);
1
+ import { useMemo } from 'react';
2
+ import { mergeRefs } from '@true-engineering/true-react-platform-helpers';
3
+
4
+ export const useMergedRefs: typeof mergeRefs = (refs) => useMemo(() => mergeRefs(refs), refs);
@@ -1,14 +1,14 @@
1
- import { useMemo } from 'react';
2
- import { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
3
-
4
- export const useMixedStyles = <StyleSheet>(
5
- baseStyles?: StyleSheet,
6
- tweakStyles?: StyleSheet,
7
- ): StyleSheet | undefined =>
8
- useMemo(
9
- () =>
10
- isNotEmpty(baseStyles) && isNotEmpty(tweakStyles)
11
- ? mergeStyles(baseStyles, tweakStyles)
12
- : baseStyles ?? tweakStyles,
13
- [baseStyles, tweakStyles],
14
- );
1
+ import { useMemo } from 'react';
2
+ import { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
3
+
4
+ export const useMixedStyles = <StyleSheet>(
5
+ baseStyles?: StyleSheet,
6
+ tweakStyles?: StyleSheet,
7
+ ): StyleSheet | undefined =>
8
+ useMemo(
9
+ () =>
10
+ isNotEmpty(baseStyles) && isNotEmpty(tweakStyles)
11
+ ? mergeStyles(baseStyles, tweakStyles)
12
+ : baseStyles ?? tweakStyles,
13
+ [baseStyles, tweakStyles],
14
+ );
@@ -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
+ }
@@ -1,57 +1,57 @@
1
- import { useMemo } from 'react';
2
- import { isEmpty, isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
3
- import { areStylesThemed, getTheme, IComponentName, themedStyles } from '../theme';
4
-
5
- // TODO: Можно усилить типы
6
- export const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet>({
7
- innerStyles,
8
- tweakStyles: currentComponentTweakStyles,
9
- className,
10
- currentComponentName,
11
- }: {
12
- /**
13
- * Это tweakStyles, определенные в родительском компоненте
14
- * (например, стили для Input, определенные в стилях компонента Select)
15
- */
16
- innerStyles?: StyleSheet[ClassName];
17
- /**
18
- * Пропса tweakStyles из родительского компонента
19
- * (это уже непосредственно ISelectProps.tweakStyles)
20
- */
21
- tweakStyles?: StyleSheet;
22
- /**
23
- * Класс для переопределения tweakStyles из-вне. (Например, 'tweakInput')
24
- */
25
- className: ClassName;
26
- /**
27
- * Название компонента который вызывает useTweakStyles. (В данном примере 'Select')
28
- */
29
- currentComponentName?: IComponentName;
30
- }): StyleSheet[ClassName] =>
31
- useMemo(() => {
32
- const theme = getTheme();
33
- // tweakStyles, переопределенные в теме родительского компонента
34
- const themeStyles = isNotEmpty(currentComponentName)
35
- ? (theme.components?.[currentComponentName]?.[className as never] as StyleSheet[ClassName])
36
- : undefined;
37
- const tweakStyles = currentComponentTweakStyles?.[className];
38
-
39
- // Если нечего мержить
40
- const styles = [innerStyles, tweakStyles, themeStyles].filter(isNotEmpty);
41
- if (styles.length <= 1) {
42
- return styles[0];
43
- }
44
-
45
- // Мы можем подмержить тему в innerStyles, чтобы сохранить кэширование
46
- if (isNotEmpty(innerStyles) && isNotEmpty(themeStyles) && isEmpty(tweakStyles)) {
47
- return areStylesThemed(innerStyles) ? innerStyles : themedStyles(innerStyles, themeStyles);
48
- }
49
-
50
- // Ну тут уже прощай кэш
51
- return mergeStyles(innerStyles, themeStyles, tweakStyles);
52
- }, [
53
- innerStyles,
54
- className,
55
- currentComponentName,
56
- currentComponentTweakStyles,
57
- ]) as StyleSheet[ClassName];
1
+ import { useMemo } from 'react';
2
+ import { isEmpty, isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
3
+ import { areStylesThemed, getTheme, IComponentName, themedStyles } from '../theme';
4
+
5
+ // TODO: Можно усилить типы
6
+ export const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet>({
7
+ innerStyles,
8
+ tweakStyles: currentComponentTweakStyles,
9
+ className,
10
+ currentComponentName,
11
+ }: {
12
+ /**
13
+ * Это tweakStyles, определенные в родительском компоненте
14
+ * (например, стили для Input, определенные в стилях компонента Select)
15
+ */
16
+ innerStyles?: StyleSheet[ClassName];
17
+ /**
18
+ * Пропса tweakStyles из родительского компонента
19
+ * (это уже непосредственно ISelectProps.tweakStyles)
20
+ */
21
+ tweakStyles?: StyleSheet;
22
+ /**
23
+ * Класс для переопределения tweakStyles из-вне. (Например, 'tweakInput')
24
+ */
25
+ className: ClassName;
26
+ /**
27
+ * Название компонента который вызывает useTweakStyles. (В данном примере 'Select')
28
+ */
29
+ currentComponentName?: IComponentName;
30
+ }): StyleSheet[ClassName] =>
31
+ useMemo(() => {
32
+ const theme = getTheme();
33
+ // tweakStyles, переопределенные в теме родительского компонента
34
+ const themeStyles = isNotEmpty(currentComponentName)
35
+ ? (theme.components?.[currentComponentName]?.[className as never] as StyleSheet[ClassName])
36
+ : undefined;
37
+ const tweakStyles = currentComponentTweakStyles?.[className];
38
+
39
+ // Если нечего мержить
40
+ const styles = [innerStyles, tweakStyles, themeStyles].filter(isNotEmpty);
41
+ if (styles.length <= 1) {
42
+ return styles[0];
43
+ }
44
+
45
+ // Мы можем подмержить тему в innerStyles, чтобы сохранить кэширование
46
+ if (isNotEmpty(innerStyles) && isNotEmpty(themeStyles) && isEmpty(tweakStyles)) {
47
+ return areStylesThemed(innerStyles) ? innerStyles : themedStyles(innerStyles, themeStyles);
48
+ }
49
+
50
+ // Ну тут уже прощай кэш
51
+ return mergeStyles(innerStyles, themeStyles, tweakStyles);
52
+ }, [
53
+ innerStyles,
54
+ className,
55
+ currentComponentName,
56
+ currentComponentTweakStyles,
57
+ ]) as StyleSheet[ClassName];
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
- export * from './theme';
2
- export * from './components';
3
- export * from './hooks';
4
- export * from './types';
5
- export * from './constants';
6
- export * from './helpers';
1
+ export * from './theme';
2
+ export * from './components';
3
+ export * from './hooks';
4
+ export * from './types';
5
+ export * from './constants';
6
+ export * from './helpers';
@@ -1,21 +1,21 @@
1
- import { createContext, FC, ReactNode } from 'react';
2
- import { common } from './common';
3
- import { IUiKitTheme } from './types';
4
-
5
- export interface IThemedProviderProps {
6
- theme: IUiKitTheme;
7
- children: ReactNode;
8
- }
9
-
10
- let globalTheme: IUiKitTheme;
11
-
12
- export const getTheme = (): IUiKitTheme => globalTheme;
13
-
14
- export const ThemeContext = createContext<{
15
- theme: IUiKitTheme;
16
- }>({ theme: common });
17
-
18
- export const ThemeProvider: FC<IThemedProviderProps> = ({ theme, children }) => {
19
- globalTheme = theme;
20
- return <ThemeContext.Provider value={{ theme }}>{children}</ThemeContext.Provider>;
21
- };
1
+ import { createContext, FC, ReactNode } from 'react';
2
+ import { common } from './common';
3
+ import { IUiKitTheme } from './types';
4
+
5
+ export interface IThemedProviderProps {
6
+ theme: IUiKitTheme;
7
+ children: ReactNode;
8
+ }
9
+
10
+ let globalTheme: IUiKitTheme;
11
+
12
+ export const getTheme = (): IUiKitTheme => globalTheme;
13
+
14
+ export const ThemeContext = createContext<{
15
+ theme: IUiKitTheme;
16
+ }>({ theme: common });
17
+
18
+ export const ThemeProvider: FC<IThemedProviderProps> = ({ theme, children }) => {
19
+ globalTheme = theme;
20
+ return <ThemeContext.Provider value={{ theme }}>{children}</ThemeContext.Provider>;
21
+ };