@true-engineering/true-react-common-ui-kit 4.0.0-alpha5 → 4.0.0-alpha50

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 (468) hide show
  1. package/README.md +11 -607
  2. package/dist/components/AccountInfo/AccountInfo.styles.d.ts +1 -1
  3. package/dist/components/AddButton/AddButton.styles.d.ts +1 -1
  4. package/dist/components/Button/Button.d.ts +1 -1
  5. package/dist/components/Button/Button.styles.d.ts +1 -1
  6. package/dist/components/Checkbox/Checkbox.d.ts +3 -1
  7. package/dist/components/Checkbox/Checkbox.styles.d.ts +3 -2
  8. package/dist/components/Checkbox/index.d.ts +1 -0
  9. package/dist/components/Checkbox/types.d.ts +3 -0
  10. package/dist/components/CloseButton/CloseButton.styles.d.ts +1 -1
  11. package/dist/components/ControlWrapper/ControlWrapper.d.ts +7 -3
  12. package/dist/components/ControlWrapper/ControlWrapper.styles.d.ts +3 -2
  13. package/dist/components/ControlWrapper/constants.d.ts +1 -0
  14. package/dist/components/ControlWrapper/helpers.d.ts +4 -0
  15. package/dist/components/ControlWrapper/index.d.ts +3 -0
  16. package/dist/components/ControlWrapper/types.d.ts +14 -0
  17. package/dist/components/CssBaseline/CssBaseline.styles.d.ts +1 -1
  18. package/dist/components/DateInput/DateInput.d.ts +1 -3
  19. package/dist/components/DateInput/DateInput.styles.d.ts +1 -1
  20. package/dist/components/DateInput/constants.d.ts +1 -1
  21. package/dist/components/DatePicker/DatePicker.d.ts +4 -4
  22. package/dist/components/DatePicker/DatePicker.styles.d.ts +1 -1
  23. package/dist/components/DatePicker/components/DatePickerBase/DatePickerBase.d.ts +5 -0
  24. package/dist/components/DatePicker/components/DatePickerBase/index.d.ts +1 -0
  25. package/dist/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.d.ts +1 -1
  26. package/dist/components/DatePicker/components/PopperContainer/PopperContainer.d.ts +2 -4
  27. package/dist/components/DatePicker/components/index.d.ts +1 -0
  28. package/dist/components/DatePicker/constants.d.ts +7 -2
  29. package/dist/components/DatePicker/index.d.ts +1 -0
  30. package/dist/components/DatePicker/types.d.ts +2 -2
  31. package/dist/components/Description/Description.styles.d.ts +1 -1
  32. package/dist/components/FileInput/FileInput.d.ts +1 -1
  33. package/dist/components/FileInput/FileInput.styles.d.ts +1 -1
  34. package/dist/components/FileItem/FileItem.styles.d.ts +1 -1
  35. package/dist/components/FileItem/constants.d.ts +3 -4
  36. package/dist/components/FileItem/helpers.d.ts +3 -2
  37. package/dist/components/FileItem/types.d.ts +1 -2
  38. package/dist/components/FiltersPane/FiltersPane.d.ts +7 -3
  39. package/dist/components/FiltersPane/FiltersPane.styles.d.ts +2 -2
  40. package/dist/components/FiltersPane/components/Filter/Filter.d.ts +3 -4
  41. package/dist/components/FiltersPane/components/Filter/helpers.d.ts +4 -0
  42. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.d.ts +3 -11
  43. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.styles.d.ts +3 -6
  44. package/dist/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.d.ts +0 -1
  45. package/dist/components/FiltersPane/components/FilterSelect/FilterSelect.styles.d.ts +3 -6
  46. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.d.ts +4 -3
  47. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.styles.d.ts +1 -1
  48. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.d.ts +5 -11
  49. package/dist/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.d.ts +1 -1
  50. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.d.ts +2 -3
  51. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.d.ts +2 -2
  52. package/dist/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.d.ts +2 -1
  53. package/dist/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.d.ts +1 -1
  54. package/dist/components/FiltersPane/constants.d.ts +1 -1
  55. package/dist/components/FiltersPane/helpers.d.ts +1 -1
  56. package/dist/components/FiltersPane/index.d.ts +1 -0
  57. package/dist/components/FiltersPane/types.d.ts +21 -7
  58. package/dist/components/Flag/Flag.styles.d.ts +1 -1
  59. package/dist/components/Flag/customFlags/customFlags.d.ts +10 -0
  60. package/dist/components/Flag/customFlags/index.d.ts +1 -0
  61. package/dist/components/FlexibleTable/FlexibleTable.d.ts +4 -2
  62. package/dist/components/FlexibleTable/FlexibleTable.styles.d.ts +2 -2
  63. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.d.ts +4 -3
  64. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.d.ts +1 -1
  65. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.d.ts +6 -6
  66. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.d.ts +1 -1
  67. package/dist/components/FlexibleTable/constants.d.ts +18 -2
  68. package/dist/components/FlexibleTable/helpers.d.ts +2 -2
  69. package/dist/components/FlexibleTable/types.d.ts +20 -12
  70. package/dist/components/FloatDocActions/FloatDocActions.d.ts +6 -0
  71. package/dist/components/FloatDocActions/FloatDocActions.styles.d.ts +8 -0
  72. package/dist/components/FloatDocActions/components/DocActions/DocActions.d.ts +12 -0
  73. package/dist/components/FloatDocActions/components/DocActions/DocActions.styles.d.ts +6 -0
  74. package/dist/components/FloatDocActions/components/DocActions/constants.d.ts +1 -0
  75. package/dist/components/FloatDocActions/components/DocActions/index.d.ts +4 -0
  76. package/dist/components/FloatDocActions/components/DocActions/types.d.ts +2 -0
  77. package/dist/components/FloatDocActions/components/index.d.ts +1 -0
  78. package/dist/components/FloatDocActions/constants.d.ts +1 -0
  79. package/dist/components/FloatDocActions/index.d.ts +3 -0
  80. package/dist/components/Icon/Icon.styles.d.ts +1 -1
  81. package/dist/components/Icon/icons/index.d.ts +31 -0
  82. package/dist/components/Icon/index.d.ts +1 -1
  83. package/dist/components/Icon/types.d.ts +7 -11
  84. package/dist/components/IconButton/IconButton.d.ts +1 -2
  85. package/dist/components/IconButton/IconButton.styles.d.ts +1 -1
  86. package/dist/components/IconButton/constants.d.ts +1 -1
  87. package/dist/components/IncrementInput/IncrementInput.styles.d.ts +1 -3
  88. package/dist/components/Input/Input.d.ts +3 -3
  89. package/dist/components/Input/Input.styles.d.ts +1 -1
  90. package/dist/components/Input/InputBase.d.ts +3 -3
  91. package/dist/components/List/List.d.ts +1 -1
  92. package/dist/components/List/List.styles.d.ts +1 -1
  93. package/dist/components/List/components/ListItem/ListItem.styles.d.ts +1 -1
  94. package/dist/components/List/index.d.ts +2 -1
  95. package/dist/components/List/types.d.ts +4 -0
  96. package/dist/components/Modal/Modal.d.ts +1 -1
  97. package/dist/components/Modal/Modal.styles.d.ts +1 -1
  98. package/dist/components/MoreMenu/MoreMenu.styles.d.ts +1 -1
  99. package/dist/components/MultiSelect/MultiSelect.d.ts +0 -1
  100. package/dist/components/MultiSelect/MultiSelect.styles.d.ts +1 -1
  101. package/dist/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.d.ts +1 -1
  102. package/dist/components/MultiSelectList/MultiSelectList.styles.d.ts +1 -1
  103. package/dist/components/MultiSelectList/constants.d.ts +1 -1
  104. package/dist/components/MultiSelectList/helpers.d.ts +1 -1
  105. package/dist/components/NewMoreMenu/NewMoreMenu.styles.d.ts +1 -1
  106. package/dist/components/Notification/Notification.styles.d.ts +1 -1
  107. package/dist/components/NumberInput/NumberInput.d.ts +1 -2
  108. package/dist/components/NumberInput/helpers.d.ts +2 -2
  109. package/dist/components/PhoneInput/PhoneInput.styles.d.ts +1 -1
  110. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.d.ts +1 -1
  111. package/dist/components/RadioButton/RadioButton.d.ts +3 -1
  112. package/dist/components/RadioButton/RadioButton.styles.d.ts +3 -2
  113. package/dist/components/RadioButton/index.d.ts +1 -0
  114. package/dist/components/RadioButton/types.d.ts +3 -0
  115. package/dist/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.d.ts +3 -373
  116. package/dist/components/ScrollIntoViewIfNeeded/constants.d.ts +1 -1
  117. package/dist/components/SearchInput/SearchInput.d.ts +1 -2
  118. package/dist/components/Select/Select.d.ts +8 -6
  119. package/dist/components/Select/Select.styles.d.ts +12 -22
  120. package/dist/components/Select/components/SelectList/SelectList.d.ts +5 -5
  121. package/dist/components/Select/components/SelectList/SelectList.styles.d.ts +1 -1
  122. package/dist/components/Select/components/SelectListItem/SelectListItem.d.ts +4 -3
  123. package/dist/components/Select/helpers.d.ts +1 -1
  124. package/dist/components/Select/index.d.ts +1 -1
  125. package/dist/components/Select/types.d.ts +4 -0
  126. package/dist/components/Selector/Selector.d.ts +0 -1
  127. package/dist/components/Selector/Selector.styles.d.ts +1 -1
  128. package/dist/components/Skeleton/Skeleton.styles.d.ts +1 -1
  129. package/dist/components/SmartInput/SmartInput.d.ts +1 -1
  130. package/dist/components/Status/Status.styles.d.ts +3 -2
  131. package/dist/components/Status/constants.d.ts +0 -1
  132. package/dist/components/Status/index.d.ts +1 -0
  133. package/dist/components/Status/types.d.ts +5 -2
  134. package/dist/components/Switch/Switch.styles.d.ts +1 -1
  135. package/dist/components/TextArea/TextArea.d.ts +5 -6
  136. package/dist/components/TextArea/TextArea.styles.d.ts +5 -4
  137. package/dist/components/TextArea/index.d.ts +1 -1
  138. package/dist/components/TextArea/types.d.ts +4 -2
  139. package/dist/components/TextButton/TextButton.d.ts +1 -1
  140. package/dist/components/TextButton/TextButton.styles.d.ts +1 -1
  141. package/dist/components/TextWithInfo/TextWithInfo.styles.d.ts +1 -1
  142. package/dist/components/TextWithTooltip/TextWithTooltip.styles.d.ts +1 -1
  143. package/dist/components/ThemedPreloader/ThemedPreloader.styles.d.ts +1 -1
  144. package/dist/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.d.ts +1 -1
  145. package/dist/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.d.ts +1 -1
  146. package/dist/components/Toaster/Toaster.styles.d.ts +1 -1
  147. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  148. package/dist/components/Tooltip/Tooltip.styles.d.ts +1 -1
  149. package/dist/components/WithMessages/WithMessages.d.ts +1 -1
  150. package/dist/components/WithMessages/WithMessages.styles.d.ts +1 -1
  151. package/dist/components/WithPopup/WithPopup.d.ts +11 -3
  152. package/dist/components/WithPopup/WithPopup.styles.d.ts +1 -1
  153. package/dist/components/WithPopup/types.d.ts +4 -4
  154. package/dist/components/index.d.ts +1 -1
  155. package/dist/constants/phone-info.d.ts +1 -1
  156. package/dist/helpers/misc.d.ts +3 -3
  157. package/dist/helpers/phone.d.ts +1 -1
  158. package/dist/hooks/index.d.ts +7 -4
  159. package/dist/hooks/use-dropdown.d.ts +3 -3
  160. package/dist/hooks/use-intersection-ref.d.ts +8 -0
  161. package/dist/hooks/use-latest-ref.d.ts +2 -0
  162. package/dist/hooks/use-merge.d.ts +1 -0
  163. package/dist/hooks/use-mixed-styles.d.ts +3 -1
  164. package/dist/hooks/use-on-click-outside.d.ts +2 -2
  165. package/dist/hooks/use-tweak-styles.d.ts +6 -6
  166. package/dist/theme/Provider.d.ts +5 -2
  167. package/dist/theme/common.d.ts +1 -1
  168. package/dist/theme/create-themed-styles.d.ts +2 -0
  169. package/dist/theme/helpers.d.ts +9 -3
  170. package/dist/theme/index.d.ts +2 -0
  171. package/dist/theme/true-jss/ThemedStylesManager.d.ts +18 -0
  172. package/dist/theme/true-jss/TweakStylesManager.d.ts +34 -0
  173. package/dist/theme/true-jss/index.d.ts +2 -0
  174. package/dist/theme/true-jss/jss-context.d.ts +9 -0
  175. package/dist/theme/types.d.ts +7 -5
  176. package/dist/{style.css → true-react-common-ui-kit.css} +78 -142
  177. package/dist/true-react-common-ui-kit.js +2 -31591
  178. package/dist/true-react-common-ui-kit.js.map +1 -1
  179. package/dist/true-react-common-ui-kit.umd.cjs +3 -31580
  180. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  181. package/dist/types.d.ts +9 -2
  182. package/package.json +35 -33
  183. package/src/components/AccountInfo/AccountInfo.stories.tsx +19 -27
  184. package/src/components/AddButton/AddButton.stories.tsx +14 -17
  185. package/src/components/Button/Button.stories.tsx +8 -26
  186. package/src/components/Checkbox/Checkbox.stories.tsx +27 -16
  187. package/src/components/Checkbox/Checkbox.styles.ts +3 -1
  188. package/src/components/Checkbox/Checkbox.tsx +7 -5
  189. package/src/components/Checkbox/index.ts +1 -0
  190. package/src/components/Checkbox/types.ts +4 -0
  191. package/src/components/CloseButton/CloseButton.stories.tsx +5 -6
  192. package/src/components/Colors/Colors.stories.tsx +63 -3
  193. package/src/components/ControlWrapper/ControlWrapper.stories.tsx +45 -35
  194. package/src/components/ControlWrapper/ControlWrapper.styles.ts +7 -6
  195. package/src/components/ControlWrapper/ControlWrapper.tsx +33 -30
  196. package/src/components/ControlWrapper/constants.ts +11 -0
  197. package/src/components/ControlWrapper/helpers.ts +11 -0
  198. package/src/components/ControlWrapper/index.ts +3 -0
  199. package/src/components/ControlWrapper/types.ts +19 -0
  200. package/src/components/DateInput/DateInput.stories.tsx +13 -31
  201. package/src/components/DateInput/DateInput.tsx +3 -4
  202. package/src/components/DatePicker/DatePicker.stories.tsx +18 -42
  203. package/src/components/DatePicker/DatePicker.styles.ts +3 -1
  204. package/src/components/DatePicker/DatePicker.tsx +47 -16
  205. package/src/components/DatePicker/components/DatePickerBase/DatePickerBase.tsx +14 -0
  206. package/src/components/DatePicker/components/DatePickerBase/index.ts +1 -0
  207. package/src/components/DatePicker/components/PopperContainer/PopperContainer.tsx +4 -4
  208. package/src/components/DatePicker/components/index.ts +1 -0
  209. package/src/components/DatePicker/constants.ts +9 -3
  210. package/src/components/DatePicker/helpers.ts +1 -1
  211. package/src/components/DatePicker/index.ts +1 -0
  212. package/src/components/DatePicker/types.ts +6 -4
  213. package/src/components/Description/Description.stories.tsx +11 -16
  214. package/src/components/FileInput/FileInput.stories.tsx +59 -63
  215. package/src/components/FileItem/FileItem.stories.tsx +48 -48
  216. package/src/components/FileItem/constants.ts +3 -14
  217. package/src/components/FileItem/helpers.ts +3 -2
  218. package/src/components/FileItem/types.ts +1 -3
  219. package/src/components/FiltersPane/FiltersPane.stories.tsx +31 -28
  220. package/src/components/FiltersPane/FiltersPane.tsx +28 -19
  221. package/src/components/FiltersPane/components/Filter/Filter.tsx +36 -30
  222. package/src/components/FiltersPane/components/Filter/helpers.ts +18 -0
  223. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts +1 -2
  224. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx +5 -17
  225. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts +1 -2
  226. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx +22 -23
  227. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +27 -22
  228. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +3 -3
  229. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +3 -4
  230. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +4 -3
  231. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +14 -10
  232. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts +5 -0
  233. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx +19 -19
  234. package/src/components/FiltersPane/helpers.ts +3 -3
  235. package/src/components/FiltersPane/index.ts +1 -0
  236. package/src/components/FiltersPane/types.ts +30 -6
  237. package/src/components/Flag/Flag.stories.tsx +16 -20
  238. package/src/components/Flag/Flag.styles.ts +4 -0
  239. package/src/components/Flag/Flag.tsx +25 -11
  240. package/src/components/Flag/customFlags/AB.svg +1 -0
  241. package/src/components/Flag/customFlags/OS.svg +1 -0
  242. package/src/components/Flag/customFlags/customFlags.ts +13 -0
  243. package/src/components/Flag/customFlags/index.ts +1 -0
  244. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +47 -50
  245. package/src/components/FlexibleTable/FlexibleTable.styles.ts +4 -2
  246. package/src/components/FlexibleTable/FlexibleTable.tsx +44 -64
  247. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +8 -5
  248. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +13 -12
  249. package/src/components/FlexibleTable/constants.ts +6 -3
  250. package/src/components/FlexibleTable/types.ts +20 -16
  251. package/src/components/FloatDocActions/FloatDocActions.stories.tsx +111 -0
  252. package/src/components/FloatDocActions/FloatDocActions.styles.ts +12 -0
  253. package/src/components/FloatDocActions/FloatDocActions.tsx +34 -0
  254. package/src/components/FloatDocActions/components/DocActions/DocActions.styles.ts +29 -0
  255. package/src/components/FloatDocActions/components/DocActions/DocActions.tsx +43 -0
  256. package/src/components/FloatDocActions/components/DocActions/constants.ts +1 -0
  257. package/src/components/FloatDocActions/components/DocActions/index.ts +4 -0
  258. package/src/components/FloatDocActions/components/DocActions/types.ts +3 -0
  259. package/src/components/FloatDocActions/components/index.ts +1 -0
  260. package/src/components/FloatDocActions/constants.ts +1 -0
  261. package/src/components/FloatDocActions/index.ts +3 -0
  262. package/src/components/Icon/Icon.stories.tsx +80 -67
  263. package/src/components/Icon/Icon.styles.ts +1 -1
  264. package/src/components/Icon/Icon.tsx +17 -12
  265. package/src/components/Icon/icons/calendar.svg +1 -0
  266. package/src/components/Icon/icons/check.svg +1 -0
  267. package/src/components/Icon/icons/chevron-down-small.svg +1 -0
  268. package/src/components/Icon/icons/chevron-down.svg +1 -0
  269. package/src/components/Icon/icons/chevron-left.svg +1 -0
  270. package/src/components/Icon/icons/chevron-right.svg +1 -0
  271. package/src/components/Icon/icons/close-large.svg +1 -0
  272. package/src/components/Icon/icons/close-window.svg +1 -0
  273. package/src/components/Icon/icons/close.svg +1 -0
  274. package/src/components/Icon/icons/filter.svg +1 -0
  275. package/src/components/Icon/icons/index.ts +62 -0
  276. package/src/components/Icon/icons/information.svg +1 -0
  277. package/src/components/Icon/icons/menu.svg +1 -0
  278. package/src/components/Icon/icons/minus.svg +1 -0
  279. package/src/components/Icon/icons/plus.svg +1 -0
  280. package/src/components/Icon/icons/search.svg +1 -0
  281. package/src/components/Icon/icons/status-error.svg +1 -0
  282. package/src/components/Icon/icons/status-info.svg +1 -0
  283. package/src/components/Icon/icons/status-not-ok.svg +1 -0
  284. package/src/components/Icon/icons/status-ok.svg +1 -0
  285. package/src/components/Icon/icons/status-warning.svg +1 -0
  286. package/src/components/Icon/icons/trash-can.svg +1 -0
  287. package/src/components/Icon/index.ts +1 -1
  288. package/src/components/Icon/types.ts +7 -13
  289. package/src/components/IconButton/IconButton.stories.tsx +7 -12
  290. package/src/components/IconButton/IconButton.styles.ts +15 -13
  291. package/src/components/IconButton/constants.ts +1 -1
  292. package/src/components/IncrementInput/IncrementInput.stories.tsx +25 -23
  293. package/src/components/IncrementInput/IncrementInput.styles.ts +31 -39
  294. package/src/components/IncrementInput/IncrementInput.tsx +28 -25
  295. package/src/components/Input/Input.stories.tsx +37 -68
  296. package/src/components/Input/Input.styles.ts +4 -0
  297. package/src/components/Input/Input.tsx +3 -2
  298. package/src/components/Input/InputBase.tsx +54 -55
  299. package/src/components/List/List.stories.tsx +22 -17
  300. package/src/components/List/List.styles.ts +2 -1
  301. package/src/components/List/List.tsx +5 -2
  302. package/src/components/List/index.ts +2 -1
  303. package/src/components/List/types.ts +5 -0
  304. package/src/components/Modal/Modal.stories.tsx +50 -59
  305. package/src/components/Modal/Modal.tsx +1 -1
  306. package/src/components/MoreMenu/MoreMenu.stories.tsx +24 -15
  307. package/src/components/MultiSelect/MultiSelect.stories.tsx +23 -20
  308. package/src/components/MultiSelectList/MultiSelectList.tsx +15 -11
  309. package/src/components/MultiSelectList/helpers.ts +2 -2
  310. package/src/components/NewMoreMenu/NewMoreMenu.stories.tsx +42 -40
  311. package/src/components/Notification/Notification.stories.tsx +35 -34
  312. package/src/components/NumberInput/NumberInput.stories.tsx +32 -28
  313. package/src/components/PhoneInput/PhoneInput.stories.tsx +31 -56
  314. package/src/components/PhoneInput/PhoneInput.tsx +5 -2
  315. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +5 -11
  316. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +1 -4
  317. package/src/components/RadioButton/RadioButton.stories.tsx +31 -21
  318. package/src/components/RadioButton/RadioButton.styles.ts +2 -1
  319. package/src/components/RadioButton/RadioButton.tsx +12 -5
  320. package/src/components/RadioButton/index.ts +1 -0
  321. package/src/components/RadioButton/types.ts +4 -0
  322. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +15 -9
  323. package/src/components/SearchInput/SearchInput.stories.tsx +14 -14
  324. package/src/components/SearchInput/SearchInput.tsx +20 -29
  325. package/src/components/Select/CustomSelect.stories.tsx +29 -32
  326. package/src/components/Select/MultiSelect.stories.tsx +45 -45
  327. package/src/components/Select/Select.stories.tsx +45 -44
  328. package/src/components/Select/Select.styles.ts +5 -40
  329. package/src/components/Select/Select.tsx +67 -53
  330. package/src/components/Select/components/SelectList/SelectList.tsx +8 -6
  331. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +5 -2
  332. package/src/components/Select/index.ts +1 -1
  333. package/src/components/Select/types.ts +3 -0
  334. package/src/components/Selector/Selector.stories.tsx +25 -27
  335. package/src/components/Selector/Selector.tsx +1 -2
  336. package/src/components/Skeleton/Skeleton.stories.tsx +13 -12
  337. package/src/components/SmartInput/SmartInput.stories.tsx +23 -23
  338. package/src/components/Status/Status.stories.tsx +79 -28
  339. package/src/components/Status/Status.styles.ts +2 -37
  340. package/src/components/Status/constants.ts +0 -10
  341. package/src/components/Status/index.ts +1 -1
  342. package/src/components/Status/types.ts +7 -3
  343. package/src/components/Switch/Switch.stories.tsx +19 -26
  344. package/src/components/TextArea/TextArea.stories.tsx +37 -26
  345. package/src/components/TextArea/TextArea.styles.ts +15 -8
  346. package/src/components/TextArea/TextArea.tsx +95 -62
  347. package/src/components/TextArea/index.ts +1 -1
  348. package/src/components/TextArea/types.ts +5 -5
  349. package/src/components/TextButton/TextButton.stories.tsx +8 -19
  350. package/src/components/TextButton/TextButton.styles.ts +1 -0
  351. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +13 -21
  352. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +26 -25
  353. package/src/components/TextWithTooltip/TextWithTooltip.tsx +1 -2
  354. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +12 -23
  355. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +4 -4
  356. package/src/components/Toaster/Toaster.stories.tsx +16 -14
  357. package/src/components/Tooltip/Tooltip.stories.tsx +5 -4
  358. package/src/components/Tooltip/Tooltip.styles.ts +2 -0
  359. package/src/components/Tooltip/Tooltip.tsx +1 -1
  360. package/src/components/WithMessages/WithMessages.stories.tsx +16 -20
  361. package/src/components/WithPopup/WithPopup.stories.tsx +27 -26
  362. package/src/components/WithPopup/WithPopup.tsx +36 -15
  363. package/src/components/WithTooltip/WithTooltip.stories.tsx +28 -28
  364. package/src/components/index.ts +1 -1
  365. package/src/constants/phone-info.ts +20 -33
  366. package/src/helpers/misc.ts +9 -7
  367. package/src/helpers/phone.ts +19 -15
  368. package/src/helpers/popper-helpers.ts +0 -1
  369. package/src/hooks/index.ts +7 -4
  370. package/src/hooks/use-intersection-ref.ts +30 -0
  371. package/src/hooks/use-latest-ref.ts +7 -0
  372. package/src/hooks/use-merge.ts +8 -0
  373. package/src/hooks/use-mixed-styles.ts +9 -11
  374. package/src/hooks/use-on-click-outside.ts +22 -14
  375. package/src/hooks/use-tweak-styles.ts +49 -27
  376. package/src/theme/Provider.tsx +10 -5
  377. package/src/theme/create-themed-styles.ts +78 -0
  378. package/src/theme/helpers.ts +41 -39
  379. package/src/theme/index.ts +2 -0
  380. package/src/theme/true-jss/ThemedStylesManager.ts +93 -0
  381. package/src/theme/true-jss/TweakStylesManager.ts +156 -0
  382. package/src/theme/true-jss/index.ts +2 -0
  383. package/src/theme/true-jss/jss-context.tsx +34 -0
  384. package/src/theme/types.ts +9 -8
  385. package/src/types.ts +17 -6
  386. package/dist/components/AccountInfo/AccountInfo.stories.d.ts +0 -6
  387. package/dist/components/AddButton/AddButton.stories.d.ts +0 -6
  388. package/dist/components/Button/Button.stories.d.ts +0 -6
  389. package/dist/components/Checkbox/Checkbox.stories.d.ts +0 -8
  390. package/dist/components/CloseButton/CloseButton.stories.d.ts +0 -5
  391. package/dist/components/Colors/Colors.d.ts +0 -2
  392. package/dist/components/Colors/Colors.stories.d.ts +0 -5
  393. package/dist/components/Colors/Colors.styles.d.ts +0 -1
  394. package/dist/components/Colors/index.d.ts +0 -1
  395. package/dist/components/ControlWrapper/ControlWrapper.stories.d.ts +0 -6
  396. package/dist/components/DateInput/DateInput.stories.d.ts +0 -7
  397. package/dist/components/DatePicker/DatePicker.stories.d.ts +0 -7
  398. package/dist/components/Description/Description.stories.d.ts +0 -16
  399. package/dist/components/FileInput/FileInput.stories.d.ts +0 -7
  400. package/dist/components/FileItem/FileItem.stories.d.ts +0 -8
  401. package/dist/components/FiltersPane/FiltersPane.stories.d.ts +0 -31
  402. package/dist/components/Flag/Flag.stories.d.ts +0 -12
  403. package/dist/components/FlexibleTable/FlexibleTable.stories.d.ts +0 -19
  404. package/dist/components/Icon/Icon.stories.d.ts +0 -6
  405. package/dist/components/Icon/complexIcons/icons.d.ts +0 -10
  406. package/dist/components/Icon/complexIcons/index.d.ts +0 -1
  407. package/dist/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.d.ts +0 -6
  408. package/dist/components/Icon/components/ComplexIconBoilerplate/index.d.ts +0 -1
  409. package/dist/components/Icon/components/IconBolerplate/IconBoilerplate.d.ts +0 -6
  410. package/dist/components/Icon/components/IconBolerplate/index.d.ts +0 -1
  411. package/dist/components/Icon/components/index.d.ts +0 -2
  412. package/dist/components/Icon/helpers.d.ts +0 -6
  413. package/dist/components/Icon/icons-list.d.ts +0 -1
  414. package/dist/components/IconButton/IconButton.stories.d.ts +0 -6
  415. package/dist/components/IncrementInput/IncrementInput.stories.d.ts +0 -6
  416. package/dist/components/Input/Input.stories.d.ts +0 -25
  417. package/dist/components/List/List.stories.d.ts +0 -5
  418. package/dist/components/Modal/Modal.stories.d.ts +0 -29
  419. package/dist/components/MoreMenu/MoreMenu.stories.d.ts +0 -6
  420. package/dist/components/MultiSelect/MultiSelect.stories.d.ts +0 -13
  421. package/dist/components/NewMoreMenu/NewMoreMenu.stories.d.ts +0 -12
  422. package/dist/components/Notification/Notification.stories.d.ts +0 -8
  423. package/dist/components/NumberInput/NumberInput.stories.d.ts +0 -7
  424. package/dist/components/PhoneInput/PhoneInput.stories.d.ts +0 -28
  425. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.d.ts +0 -5
  426. package/dist/components/RadioButton/RadioButton.stories.d.ts +0 -7
  427. package/dist/components/SearchInput/SearchInput.stories.d.ts +0 -6
  428. package/dist/components/Select/CustomSelect.stories.d.ts +0 -11
  429. package/dist/components/Select/MultiSelect.stories.d.ts +0 -15
  430. package/dist/components/Select/Select.stories.d.ts +0 -15
  431. package/dist/components/Selector/Selector.stories.d.ts +0 -7
  432. package/dist/components/Skeleton/Skeleton.stories.d.ts +0 -6
  433. package/dist/components/SmartInput/SmartInput.stories.d.ts +0 -18
  434. package/dist/components/Status/Status.stories.d.ts +0 -6
  435. package/dist/components/Switch/Switch.stories.d.ts +0 -16
  436. package/dist/components/TextArea/TextArea.stories.d.ts +0 -17
  437. package/dist/components/TextButton/TextButton.stories.d.ts +0 -6
  438. package/dist/components/TextWithInfo/TextWithInfo.stories.d.ts +0 -12
  439. package/dist/components/TextWithTooltip/TextWithTooltip.stories.d.ts +0 -24
  440. package/dist/components/ThemedPreloader/ThemedPreloader.stories.d.ts +0 -17
  441. package/dist/components/Toaster/Toaster.stories.d.ts +0 -5
  442. package/dist/components/Tooltip/Tooltip.stories.d.ts +0 -5
  443. package/dist/components/WithMessages/WithMessages.stories.d.ts +0 -7
  444. package/dist/components/WithPopup/WithPopup.stories.d.ts +0 -16
  445. package/dist/components/WithTooltip/WithTooltip.stories.d.ts +0 -6
  446. package/src/components/Colors/Colors.styles.ts +0 -36
  447. package/src/components/Colors/Colors.tsx +0 -26
  448. package/src/components/Colors/index.ts +0 -1
  449. package/src/components/Flag/augment.d.ts +0 -1
  450. package/src/components/Icon/complexIcons/augment.d.ts +0 -1
  451. package/src/components/Icon/complexIcons/icons.ts +0 -19
  452. package/src/components/Icon/complexIcons/index.ts +0 -1
  453. package/src/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.tsx +0 -16
  454. package/src/components/Icon/components/ComplexIconBoilerplate/index.ts +0 -1
  455. package/src/components/Icon/components/IconBolerplate/IconBoilerplate.tsx +0 -43
  456. package/src/components/Icon/components/IconBolerplate/index.ts +0 -1
  457. package/src/components/Icon/components/index.ts +0 -2
  458. package/src/components/Icon/helpers.tsx +0 -9
  459. package/src/components/Icon/icons-list.ts +0 -855
  460. package/src/vite-env.d.ts +0 -1
  461. /package/src/components/Icon/{complexIcons/avatarGreen.svg → icons/avatar.svg} +0 -0
  462. /package/src/components/Icon/{complexIcons/fileExcel.svg → icons/file-excel.svg} +0 -0
  463. /package/src/components/Icon/{complexIcons/fileImage.svg → icons/file-image.svg} +0 -0
  464. /package/src/components/Icon/{complexIcons/fileOther.svg → icons/file-other.svg} +0 -0
  465. /package/src/components/Icon/{complexIcons/filePdf.svg → icons/file-pdf.svg} +0 -0
  466. /package/src/components/Icon/{complexIcons/fileWord.svg → icons/file-word.svg} +0 -0
  467. /package/src/components/Icon/{complexIcons/fileXml.svg → icons/file-xml.svg} +0 -0
  468. /package/src/components/Icon/{complexIcons/fileZip.svg → icons/file-zip.svg} +0 -0
@@ -1,11 +1,24 @@
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';
1
+ import { useContext, useMemo } from 'react';
2
+ import {
3
+ isArrayNotEmpty,
4
+ isNotEmpty,
5
+ mergeStyles,
6
+ } from '@true-engineering/true-react-platform-helpers';
7
+ import {
8
+ areStylesThemed,
9
+ themedStyles,
10
+ IComponentName,
11
+ IMaybeArray,
12
+ useTheme,
13
+ JssContext,
14
+ IMixedStyles,
15
+ } from '../theme';
16
+ import { mixStyles } from './use-mixed-styles';
4
17
 
5
18
  // TODO: Можно усилить типы
6
19
  export const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet & `tweak${string}`>({
7
20
  innerStyles,
8
- tweakStyles: currentComponentTweakStyles,
21
+ tweakStyles,
9
22
  className,
10
23
  currentComponentName,
11
24
  }: {
@@ -13,12 +26,12 @@ export const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet &
13
26
  * Это tweakStyles, определенные в родительском компоненте
14
27
  * (например, стили для Input, определенные в стилях компонента Select)
15
28
  */
16
- innerStyles?: StyleSheet[ClassName];
29
+ innerStyles?: IMixedStyles<StyleSheet[ClassName]>;
17
30
  /**
18
31
  * Пропса tweakStyles из родительского компонента
19
32
  * (это уже непосредственно ISelectProps.tweakStyles)
20
33
  */
21
- tweakStyles?: StyleSheet;
34
+ tweakStyles?: IMaybeArray<StyleSheet>;
22
35
  /**
23
36
  * Класс для переопределения tweakStyles из-вне. (Например, 'tweakInput')
24
37
  */
@@ -27,31 +40,40 @@ export const useTweakStyles = <StyleSheet, ClassName extends keyof StyleSheet &
27
40
  * Название компонента который вызывает useTweakStyles. (В данном примере 'Select')
28
41
  */
29
42
  currentComponentName?: IComponentName;
30
- }): StyleSheet[ClassName] =>
31
- useMemo(() => {
32
- const theme = getTheme();
33
- // tweakStyles, переопределенные в теме родительского компонента
43
+ }): Array<NonNullable<StyleSheet[ClassName]>> => {
44
+ const theme = useTheme();
45
+ const isMergeDisabled = isNotEmpty(useContext(JssContext).tweakStylesArch);
46
+
47
+ return useMemo(() => {
34
48
  const themeStyles = isNotEmpty(currentComponentName)
35
- ? (theme.components?.[currentComponentName]?.[className as never] as StyleSheet[ClassName])
49
+ ? (theme.components?.[currentComponentName] as StyleSheet)
36
50
  : undefined;
37
- const tweakStyles = currentComponentTweakStyles?.[className];
38
51
 
39
- // Если нечего мержить
40
- const styles = [innerStyles, tweakStyles, themeStyles].filter(isNotEmpty);
41
- if (styles.length <= 1) {
42
- return styles[0];
52
+ const resultStyles = mixStyles(
53
+ innerStyles,
54
+ mixStyles(themeStyles, tweakStyles).map((style) => style[className]),
55
+ );
56
+
57
+ if (isMergeDisabled || resultStyles.length < 2) {
58
+ return resultStyles;
59
+ }
60
+
61
+ const [maybeInnerStyles, maybeThemeStyles, ...rest] = resultStyles;
62
+
63
+ if (
64
+ maybeThemeStyles !== themeStyles?.[className] || // Если нет themeStyles или innerStyles
65
+ isArrayNotEmpty(rest) // Или есть tweakStyles
66
+ ) {
67
+ // Мёржим как есть
68
+ return [mergeStyles(maybeInnerStyles, maybeThemeStyles, ...rest)];
43
69
  }
44
70
 
45
- // Мы можем подмержить тему в innerStyles, чтобы сохранить кэширование
46
- if (isNotEmpty(innerStyles) && isNotEmpty(themeStyles) && isEmpty(tweakStyles)) {
47
- return areStylesThemed(innerStyles) ? innerStyles : themedStyles(innerStyles, themeStyles);
71
+ // Иначе мёржим themeStyles в innerStyles
72
+ if (!areStylesThemed(maybeInnerStyles)) {
73
+ themedStyles(maybeInnerStyles, maybeThemeStyles);
48
74
  }
49
75
 
50
- // Ну тут уже прощай кэш
51
- return mergeStyles(innerStyles, themeStyles, tweakStyles);
52
- }, [
53
- innerStyles,
54
- className,
55
- currentComponentName,
56
- currentComponentTweakStyles,
57
- ]) as StyleSheet[ClassName];
76
+ // И возвращаем только innerStyles
77
+ return [maybeInnerStyles];
78
+ }, [innerStyles, className, currentComponentName, tweakStyles, theme, isMergeDisabled]);
79
+ };
@@ -1,6 +1,6 @@
1
- import { createContext, FC, ReactNode } from 'react';
1
+ import { createContext, FC, ReactNode, useContext, useMemo } from 'react';
2
2
  import { common } from './common';
3
- import { IUiKitTheme } from './types';
3
+ import type { IUiKitTheme } from './types';
4
4
 
5
5
  export interface IThemedProviderProps {
6
6
  theme: IUiKitTheme;
@@ -11,11 +11,16 @@ let globalTheme: IUiKitTheme;
11
11
 
12
12
  export const getTheme = (): IUiKitTheme => globalTheme;
13
13
 
14
- export const ThemeContext = createContext<{
14
+ interface ThemeContextValue {
15
15
  theme: IUiKitTheme;
16
- }>({ theme: common });
16
+ }
17
+
18
+ export const ThemeContext = createContext<ThemeContextValue>({ theme: common });
17
19
 
18
20
  export const ThemeProvider: FC<IThemedProviderProps> = ({ theme, children }) => {
19
21
  globalTheme = theme;
20
- return <ThemeContext.Provider value={{ theme }}>{children}</ThemeContext.Provider>;
22
+ const value: ThemeContextValue = useMemo(() => ({ theme }), [theme]);
23
+ return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;
21
24
  };
25
+
26
+ export const useTheme = (): IUiKitTheme => useContext(ThemeContext).theme;
@@ -0,0 +1,78 @@
1
+ import { useContext, useInsertionEffect, useMemo } from 'react';
2
+ import { createUseStyles, Styles } from 'react-jss';
3
+ import { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
4
+ import { mixStyles } from '../hooks/use-mixed-styles';
5
+ import { getTheme, useTheme } from './Provider';
6
+ import {
7
+ checkStyles,
8
+ cleanStyles,
9
+ getTweakStylesCache,
10
+ isStylesNotEmpty,
11
+ mergeTweakStyles,
12
+ } from './helpers';
13
+ import { ThemedStylesManager, JssContext } from './true-jss';
14
+ import { IComponentName, IStyles, IUseStyles } from './types';
15
+
16
+ const DEFAULT_NAME = 'LocalComponent';
17
+
18
+ export function createThemedStyles<C extends string>(
19
+ ...args: [IStyles<C>] | [IComponentName, IStyles<C>]
20
+ ): IUseStyles<C> {
21
+ const [componentName, styles] = args.length === 2 ? args : [undefined, args[0]];
22
+ const name = componentName ?? DEFAULT_NAME;
23
+
24
+ if (process.env.NODE_ENV !== 'production') {
25
+ checkStyles(name, styles);
26
+ }
27
+
28
+ const tweakStylesManager = new ThemedStylesManager({ styles, name });
29
+ const tweakStylesCache = getTweakStylesCache();
30
+
31
+ const useStyles = createUseStyles<C>((tweakStyles) => {
32
+ const theme = getTheme();
33
+ return mergeStyles(
34
+ styles as Styles<C>,
35
+ isNotEmpty(componentName) ? (theme?.components?.[componentName] as Styles<C>) : undefined,
36
+ tweakStyles,
37
+ );
38
+ });
39
+
40
+ return (data) => {
41
+ const jssContext = useContext(JssContext);
42
+
43
+ const tweakStyles = useMemo(
44
+ () => mixStyles(data?.theme).filter(isStylesNotEmpty),
45
+ [data?.theme],
46
+ );
47
+
48
+ if (jssContext.tweakStylesArch !== 'true-jss') {
49
+ const tweakStylesStrategy =
50
+ jssContext.tweakStylesArch === 'react-jss' ? tweakStylesCache : mergeTweakStyles;
51
+
52
+ const theme = useMemo(
53
+ () => cleanStyles(tweakStylesStrategy(tweakStyles)),
54
+ [tweakStylesStrategy, tweakStyles],
55
+ );
56
+
57
+ return useStyles(isNotEmpty(data) ? { ...data, theme } : data);
58
+ }
59
+
60
+ const { components } = useTheme();
61
+
62
+ const themeStyles = isNotEmpty(componentName) ? components?.[componentName] : undefined;
63
+
64
+ const classes = tweakStylesManager.getClasses(themeStyles, tweakStyles, jssContext);
65
+
66
+ useInsertionEffect(() => {
67
+ const unmanage = tweakStylesManager.manage(themeStyles);
68
+ return unmanage;
69
+ }, [themeStyles]);
70
+
71
+ useInsertionEffect(() => {
72
+ const unmanage = tweakStylesManager.manageTweak(themeStyles, tweakStyles);
73
+ return unmanage;
74
+ }, [themeStyles, classes]);
75
+
76
+ return classes;
77
+ };
78
+ }
@@ -1,29 +1,31 @@
1
- import { createUseStyles, Styles } from 'react-jss';
2
- import merge from 'lodash-es/merge';
1
+ import { merge } from 'lodash-es';
3
2
  import {
4
3
  isArrayNotEmpty,
5
4
  isNotEmpty,
6
5
  mergeStyles,
7
6
  } from '@true-engineering/true-react-platform-helpers';
8
- import { getTheme } from './Provider';
9
- import { IComponentName, IStyles, IUseStyles } from './types';
7
+ import { IMaybeArray } from './types';
10
8
 
11
9
  const EMPTY_STYLES = {};
12
10
 
13
- const isTweakStyle = (key: string): boolean => key.startsWith('tweak');
11
+ export const isTweakStyle = (key: string): boolean => key.startsWith('tweak');
14
12
 
15
- const cleanStyles = <T>(tweakStyles?: T): T =>
16
- isNotEmpty(tweakStyles) && Object.keys(tweakStyles).some((key) => !isTweakStyle(key))
17
- ? tweakStyles
18
- : (EMPTY_STYLES as T);
13
+ export const isStylesNotEmpty = <T>(tweakStyles?: T): tweakStyles is NonNullable<T> =>
14
+ isNotEmpty(tweakStyles) && !Object.keys(tweakStyles).every(isTweakStyle);
19
15
 
20
- const checkStyles = (componentName: string, styles: Record<string, unknown>): void => {
21
- const invalidClasses = Object.keys(styles).reduce((acc, key) => {
22
- if (isTweakStyle(key)) {
23
- acc.push(key);
24
- }
25
- return acc;
26
- }, [] as string[]);
16
+ export const cleanStyles = <T>(tweakStyles?: T): T =>
17
+ isStylesNotEmpty(tweakStyles) ? tweakStyles : (EMPTY_STYLES as T);
18
+
19
+ export const mergeTweakStyles = <T>(tweakStyles?: IMaybeArray<T>): T | undefined => {
20
+ if (!Array.isArray(tweakStyles)) {
21
+ return tweakStyles;
22
+ }
23
+ const [first, ...rest] = tweakStyles;
24
+ return isArrayNotEmpty(rest) ? mergeStyles(first, ...rest) : first;
25
+ };
26
+
27
+ export const checkStyles = (componentName: string, styles: Record<string, unknown>): void => {
28
+ const invalidClasses = Object.keys(styles).filter(isTweakStyle);
27
29
 
28
30
  if (isArrayNotEmpty(invalidClasses)) {
29
31
  console.error(
@@ -47,30 +49,30 @@ export const themedStyles = <T>(styles: T, themeComponentStyles: T): T => {
47
49
  return styles;
48
50
  };
49
51
 
50
- export function createThemedStyles<C extends string, P>(styles: IStyles<C, P>): IUseStyles<C, P>;
52
+ type TweakStylesCache = (styles: object[], prev?: object[]) => object | undefined;
53
+ export const getTweakStylesCache = (): TweakStylesCache => {
54
+ let mergedStyles: object | undefined;
55
+ const cache = new WeakMap<object, TweakStylesCache>();
56
+
57
+ const getNext = (next: object) => {
58
+ if (!cache.has(next)) {
59
+ cache.set(next, getTweakStylesCache());
60
+ }
51
61
 
52
- export function createThemedStyles<C extends string, P>(
53
- componentName: IComponentName,
54
- styles: IStyles<C, P>,
55
- ): IUseStyles<C, P>;
62
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
63
+ return cache.get(next)!;
64
+ };
56
65
 
57
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
- export function createThemedStyles<C extends string, P>(...args: any[]): IUseStyles<C, P> {
59
- const shouldUseTheme = args.length > 1;
60
- const styles: IStyles<C, P> = shouldUseTheme ? args[1] : args[0];
61
- const componentName: IComponentName | undefined = shouldUseTheme ? args[0] : undefined;
66
+ return (styles, prev = []) => {
67
+ const [next, ...rest] = styles;
68
+ if (isNotEmpty(next)) {
69
+ return getNext(next)(rest, prev.concat(next));
70
+ }
62
71
 
63
- if (process.env.NODE_ENV !== 'production') {
64
- checkStyles(componentName ?? 'LocalComponent', styles);
65
- }
66
- const useStyles = createUseStyles<C, P>((tweakStyles) => {
67
- const theme = getTheme();
68
- return mergeStyles(
69
- styles as Styles<C, P>,
70
- isNotEmpty(componentName) ? (theme?.components?.[componentName] as Styles<C, P>) : undefined,
71
- tweakStyles,
72
- );
73
- });
72
+ if (isNotEmpty(mergedStyles)) {
73
+ return mergedStyles;
74
+ }
74
75
 
75
- return (data) => useStyles(isNotEmpty(data) ? { ...data, theme: cleanStyles(data.theme) } : data);
76
- }
76
+ return (mergedStyles = mergeTweakStyles(prev));
77
+ };
78
+ };
@@ -1,4 +1,6 @@
1
1
  export * from './Provider';
2
+ export * from './true-jss';
2
3
  export * from './common';
3
4
  export * from './types';
4
5
  export * from './helpers';
6
+ export * from './create-themed-styles';
@@ -0,0 +1,93 @@
1
+ import { jss } from 'react-jss';
2
+ import type { Classes, StyleSheet } from 'jss';
3
+ import { isNotEmpty, mergeStyles } from '@true-engineering/true-react-platform-helpers';
4
+ import { IStyles } from '../types';
5
+ import { IPartialStyle, TweakStylesManager } from './TweakStylesManager';
6
+ import { IJssContext } from './jss-context';
7
+
8
+ interface IStyleSheet<C extends string> {
9
+ manager: TweakStylesManager<C>;
10
+ refs: number;
11
+ sheet: StyleSheet<C>;
12
+ detachTimeout?: number;
13
+ }
14
+
15
+ const NO_THEME_STYLES: IPartialStyle = {};
16
+
17
+ interface IThemedStylesManagerOptions<C extends string> {
18
+ styles: IStyles<C>;
19
+ name: string;
20
+ }
21
+
22
+ export class ThemedStylesManager<C extends string> {
23
+ #styleSheetMap = new Map<IPartialStyle, IStyleSheet<C>>();
24
+ #styles: IStyles<C>;
25
+ #name: string;
26
+
27
+ constructor({ styles, name }: IThemedStylesManagerOptions<C>) {
28
+ this.#styles = styles;
29
+ this.#name = name;
30
+ }
31
+
32
+ public getClasses(
33
+ theme = NO_THEME_STYLES,
34
+ tweak: IPartialStyle[],
35
+ jssContext: IJssContext,
36
+ ): Classes<C> {
37
+ return this.getOrCreate(theme, jssContext).manager.getClasses(tweak);
38
+ }
39
+
40
+ public manageTweak(theme = NO_THEME_STYLES, tweak: IPartialStyle[]): VoidFunction | undefined {
41
+ this.#styleSheetMap.get(theme)?.manager.manage(tweak);
42
+
43
+ return () => this.#styleSheetMap.get(theme)?.manager.unmanage(tweak);
44
+ }
45
+
46
+ public manage(theme = NO_THEME_STYLES): VoidFunction | undefined {
47
+ const value = this.#styleSheetMap.get(theme);
48
+ if (!isNotEmpty(value)) {
49
+ return;
50
+ }
51
+ if (isNotEmpty(value.detachTimeout)) {
52
+ clearTimeout(value.detachTimeout);
53
+ value.detachTimeout = undefined;
54
+ }
55
+ value.refs += 1;
56
+ if (value.refs > 0) {
57
+ value.sheet.attach();
58
+ }
59
+
60
+ return () => this.unmanage(theme);
61
+ }
62
+
63
+ private unmanage(theme = NO_THEME_STYLES): void {
64
+ const value = this.#styleSheetMap.get(theme);
65
+ if (!isNotEmpty(value) || value.refs === 0) {
66
+ return;
67
+ }
68
+ value.refs -= 1;
69
+ if (value.refs === 0 && !isNotEmpty(value.detachTimeout)) {
70
+ value.detachTimeout = window.setTimeout(() => {
71
+ if (value.refs === 0) {
72
+ value.sheet.detach();
73
+ }
74
+ }, 100);
75
+ }
76
+ }
77
+
78
+ private getOrCreate(theme: IPartialStyle, jssContext: IJssContext): IStyleSheet<C> {
79
+ if (!this.#styleSheetMap.has(theme)) {
80
+ const sheet = jss.createStyleSheet(mergeStyles(this.#styles, theme), {
81
+ link: true,
82
+ meta: this.#name,
83
+ generateId: jssContext.generateId,
84
+ });
85
+ const classes = { ...sheet.classes };
86
+ const manager = new TweakStylesManager({ sheet, classes });
87
+ this.#styleSheetMap.set(theme, { sheet, manager, refs: 0 });
88
+ }
89
+
90
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
91
+ return this.#styleSheetMap.get(theme)!;
92
+ }
93
+ }
@@ -0,0 +1,156 @@
1
+ import type { Classes, Rule, StyleSheet } from 'jss';
2
+ import {
3
+ isArrayNotEmpty,
4
+ isNotEmpty,
5
+ joinStrings,
6
+ mergeStyles,
7
+ } from '@true-engineering/true-react-platform-helpers';
8
+ import { isTweakStyle } from '../helpers';
9
+
10
+ export type IPartialStyle = object;
11
+
12
+ interface TweakRules<C extends string> {
13
+ classes: Classes<C>;
14
+ refs?: number;
15
+ rules: Map<C, Rule>;
16
+ }
17
+
18
+ interface TweakStylesManagerOptions<C extends string> {
19
+ sheet: StyleSheet<C>;
20
+ classes: Classes<C>;
21
+ tweak?: IPartialStyle[];
22
+ }
23
+
24
+ export class TweakStylesManager<C extends string> {
25
+ #map = new WeakMap<IPartialStyle, TweakStylesManager<C>>();
26
+ #sheet: StyleSheet<C>;
27
+ #classes: Classes<C>;
28
+ #tweak: IPartialStyle[];
29
+
30
+ #tweakRules: TweakRules<C> | undefined;
31
+ constructor({ sheet, classes, tweak = [] }: TweakStylesManagerOptions<C>) {
32
+ this.#sheet = sheet;
33
+ this.#classes = classes;
34
+ this.#tweak = tweak;
35
+ }
36
+
37
+ public getClasses([next, ...rest]: IPartialStyle[]): Classes<C> {
38
+ const nextManager = this.getNextManager(next);
39
+ if (isNotEmpty(nextManager)) {
40
+ return nextManager.getClasses(rest);
41
+ }
42
+ return this.getOrCreate()?.classes ?? this.#classes;
43
+ }
44
+
45
+ public manage([next, ...rest]: IPartialStyle[]): void {
46
+ const nextManager = this.getNextManager(next);
47
+ if (isNotEmpty(nextManager)) {
48
+ return nextManager.manage(rest);
49
+ }
50
+ if (!isNotEmpty(this.#tweakRules)) {
51
+ return;
52
+ }
53
+ if (this.#tweakRules.refs === 0) {
54
+ this.insertRules();
55
+ }
56
+ this.#tweakRules.refs = (this.#tweakRules.refs ?? 0) + 1;
57
+ }
58
+
59
+ public unmanage([next, ...rest]: IPartialStyle[]): void {
60
+ const nextManager = this.getNextManager(next);
61
+ if (isNotEmpty(nextManager)) {
62
+ return nextManager.unmanage(rest);
63
+ }
64
+ if (!isNotEmpty(this.#tweakRules) || this.#tweakRules.refs === 0) {
65
+ return;
66
+ }
67
+ this.#tweakRules.refs = (this.#tweakRules.refs ?? 1) - 1;
68
+ if (this.#tweakRules.refs === 0) {
69
+ this.deleteRules();
70
+ }
71
+ }
72
+
73
+ private getNextManager(next?: IPartialStyle) {
74
+ if (!isNotEmpty(next)) {
75
+ return;
76
+ }
77
+ if (!this.#map.has(next)) {
78
+ const manager = new TweakStylesManager({
79
+ sheet: this.#sheet,
80
+ classes: this.#classes,
81
+ tweak: this.#tweak.concat(next),
82
+ });
83
+ this.#map.set(next, manager);
84
+ }
85
+ return this.#map.get(next);
86
+ }
87
+
88
+ private getOrCreate() {
89
+ if (!isNotEmpty(this.#tweakRules) && isArrayNotEmpty(this.#tweak)) {
90
+ const [first, ...rest] = this.#tweak;
91
+ const styles = isArrayNotEmpty(rest) ? mergeStyles(first, ...rest) : first;
92
+
93
+ const rules = this.addRules(styles);
94
+
95
+ const classes = { ...this.#classes };
96
+ rules.forEach((rule, key) => {
97
+ classes[key] = joinStrings([classes[key], rule.id], ' ');
98
+ });
99
+
100
+ this.#tweakRules = { classes, rules };
101
+ }
102
+ return this.#tweakRules;
103
+ }
104
+
105
+ private addRules(styles: IPartialStyle) {
106
+ return new Map(
107
+ Object.entries(styles)
108
+ .map(([key, style]) => this.addRule(key as C, style))
109
+ .filter(isNotEmpty),
110
+ );
111
+ }
112
+
113
+ private addRule(key: C, style: object) {
114
+ if (isTweakStyle(key)) {
115
+ return;
116
+ }
117
+ const rule = this.#sheet.addRule(key, style, { index: this.getInsertIndex(key) });
118
+ return isNotEmpty(rule) ? ([key, rule] as const) : undefined;
119
+ }
120
+
121
+ private insertRules() {
122
+ this.#tweakRules?.rules.forEach((rule, key) => {
123
+ this.#sheet.rules.register(rule);
124
+ this.#sheet.rules.index.splice(this.getInsertIndex(key), 0, rule);
125
+ this.#sheet.insertRule(rule);
126
+ });
127
+ }
128
+
129
+ private deleteRules() {
130
+ this.#tweakRules?.rules.forEach((rule) => this.#sheet.deleteRule(rule));
131
+ }
132
+
133
+ private getInsertIndex(key: C) {
134
+ return (
135
+ this.#sheet.rules.index.findIndex((rule) => rule.key === key) + 1 ||
136
+ this.#sheet.rules.index.length
137
+ );
138
+ }
139
+ }
140
+
141
+ declare module 'jss' {
142
+ export interface RuleList {
143
+ index: Rule[];
144
+ }
145
+ export interface StyleSheet<RuleName> {
146
+ rules: RuleList;
147
+ // eslint-disable-next-line @typescript-eslint/method-signature-style
148
+ deleteRule(rule: Rule): boolean;
149
+ // eslint-disable-next-line @typescript-eslint/method-signature-style
150
+ addRule(
151
+ name: RuleName,
152
+ style: JssStyle,
153
+ options?: Partial<Rule['options']>,
154
+ ): (Rule & { id: string }) | null;
155
+ }
156
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ThemedStylesManager';
2
+ export * from './jss-context';
@@ -0,0 +1,34 @@
1
+ import { Context, FC, PropsWithChildren, useContext, useMemo } from 'react';
2
+ import { JssContext as JssContextLib } from 'react-jss';
3
+ import { GenerateId } from 'jss';
4
+
5
+ export interface IJssContext {
6
+ generateId?: GenerateId;
7
+ tweakStylesArch?: 'react-jss' | 'true-jss';
8
+ }
9
+
10
+ /** Типизация JssContext оказалась некорректна */
11
+ export const JssContext = JssContextLib as unknown as Context<IJssContext>;
12
+
13
+ export const JssProvider: FC<PropsWithChildren<IJssContext>> = ({
14
+ children,
15
+ tweakStylesArch,
16
+ generateId,
17
+ }) => {
18
+ const context = useContext(JssContext);
19
+
20
+ const value: IJssContext = useMemo(
21
+ () => ({
22
+ ...context,
23
+ tweakStylesArch: tweakStylesArch ?? context.tweakStylesArch,
24
+ generateId: generateId ?? context.generateId,
25
+ }),
26
+ [context, tweakStylesArch, generateId],
27
+ );
28
+
29
+ return (
30
+ <JssContext.Provider key={tweakStylesArch} value={value}>
31
+ {children}
32
+ </JssContext.Provider>
33
+ );
34
+ };
@@ -6,15 +6,13 @@ import type {
6
6
  IButtonStyles,
7
7
  ICheckboxStyles,
8
8
  ICloseButtonStyles,
9
- ICommonIcon,
10
- IComplexIcon,
11
- IWithMessagesStyles,
12
9
  IControlWrapperStyles,
13
10
  ICssBaselineStyles,
14
11
  IDateInputStyles,
15
12
  IDatePickerHeaderStyles,
16
13
  IDatePickerStyles,
17
14
  IDescriptionStyles,
15
+ IDocActionsStyles,
18
16
  IDotsPreloaderStyles,
19
17
  IFileInputStyles,
20
18
  IFileItemStyles,
@@ -32,6 +30,7 @@ import type {
32
30
  IFlexibleTableStyles,
33
31
  IIconButtonStyles,
34
32
  IIconStyles,
33
+ IIconType,
35
34
  IIncrementInputStyles,
36
35
  IInputStyles,
37
36
  IListItemStyles,
@@ -63,14 +62,17 @@ import type {
63
62
  IThemedPreloaderStyles,
64
63
  IToasterStyles,
65
64
  ITooltipStyles,
65
+ IWithMessagesStyles,
66
66
  IWithPopupStyles,
67
67
  IWithTooltipStyles,
68
68
  } from '../components';
69
69
 
70
- export type IStyles<C extends string, P> = Styles<C, P, Partial<Styles<C, P>>>;
70
+ export type IStyles<C extends string, P = unknown> = Styles<C, P, Partial<Styles<C, P>>>;
71
71
 
72
+ export type IMaybeArray<T> = T[] | T;
73
+ export type IMixedStyles<T> = IMaybeArray<T | boolean | undefined>;
72
74
  export type IUseStyles<C extends string, P = unknown> = (
73
- data?: P & { theme?: Partial<Styles<C, P>> },
75
+ data?: P & { theme?: IMaybeArray<Partial<Styles<C, P>>> },
74
76
  ) => Classes<C>;
75
77
 
76
78
  export type ITweakStyles<
@@ -91,6 +93,7 @@ export interface IComponentStyles {
91
93
  DatePicker: IDatePickerStyles;
92
94
  DatePickerHeader: IDatePickerHeaderStyles;
93
95
  Description: IDescriptionStyles;
96
+ DocActions: IDocActionsStyles;
94
97
  DotsPreloader: IDotsPreloaderStyles;
95
98
  SvgPreloader: ISvgPreloaderStyles;
96
99
  FileInput: IFileInputStyles;
@@ -145,14 +148,12 @@ export interface IComponentStyles {
145
148
 
146
149
  export type IComponentName = keyof IComponentStyles;
147
150
 
148
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
151
  export type IUiKitAnimations = Record<string, any>;
150
152
  export type IUiKitHelpers = Record<string, Styles | (() => Styles)>;
151
153
 
152
154
  export interface IUiKitTheme {
153
155
  components?: Partial<IComponentStyles>;
154
- icons?: Partial<Record<ICommonIcon, ISvgIcon>>;
155
- complexIcons?: Partial<Record<IComplexIcon, string>>;
156
+ icons?: Partial<Record<IIconType, ISvgIcon>>;
156
157
  preloaders?: Partial<Record<IPreloaderSvgType, string>>; // TODO: заменить string
157
158
  animations?: IUiKitAnimations;
158
159
  colors?: Record<string, string>;