nntc-ui 0.2.4 → 0.2.6

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 (666) hide show
  1. package/.editorconfig +25 -0
  2. package/.gitattributes +64 -0
  3. package/.gitlab-ci.yml +40 -0
  4. package/.helm/Chart.yaml +5 -0
  5. package/.helm/values.yaml +12 -0
  6. package/.prettierignore +12 -0
  7. package/.prettierrc.json +19 -0
  8. package/.storybook/global.d.ts +4 -0
  9. package/.storybook/main.ts +12 -0
  10. package/.storybook/preview.tsx +59 -0
  11. package/.stylelintignore +3 -0
  12. package/.stylelintrc.json +5 -0
  13. package/.vscode/settings.json +10 -0
  14. package/Dockerfile +14 -0
  15. package/babel.config.json +23 -0
  16. package/cssModulesPluginTemplate.cjs +5 -0
  17. package/eslint.config.mjs +160 -0
  18. package/nginx.conf +14 -0
  19. package/package.dist.json +20 -0
  20. package/package.json +100 -19
  21. package/postcss.config.cjs +12 -0
  22. package/src/components/common/Button/Button.stories.tsx +93 -0
  23. package/src/components/common/Button/Button.tsx +59 -0
  24. package/src/components/common/Button/button.module.css +337 -0
  25. package/src/components/common/Button/index.ts +1 -0
  26. package/src/components/common/ButtonsGroup/ButtonsGroup.stories.tsx +52 -0
  27. package/src/components/common/ButtonsGroup/ButtonsGroup.tsx +25 -0
  28. package/src/components/common/ButtonsGroup/buttonsGroup.module.css +24 -0
  29. package/{components/common/ButtonsGroup/index.d.ts → src/components/common/ButtonsGroup/index.ts} +0 -1
  30. package/src/components/common/Checkbox/Checkbox.stories.tsx +48 -0
  31. package/src/components/common/Checkbox/Checkbox.tsx +82 -0
  32. package/src/components/common/Checkbox/checkbox.module.css +112 -0
  33. package/{components/common/Checkbox/index.d.ts → src/components/common/Checkbox/index.ts} +0 -1
  34. package/src/components/common/Checklist/Checklist.stories.tsx +138 -0
  35. package/src/components/common/Checklist/Checklist.tsx +159 -0
  36. package/src/components/common/Checklist/checklist.module.css +23 -0
  37. package/{components/common/Checklist/index.d.ts → src/components/common/Checklist/index.ts} +1 -1
  38. package/src/components/common/Checklist/models/Item.ts +4 -0
  39. package/src/components/common/Checklist/models/SelectedItems.ts +3 -0
  40. package/src/components/common/Checklist/utils/filterItems.ts +18 -0
  41. package/src/components/common/ColorPicker/ColorPicker.stories.tsx +198 -0
  42. package/src/components/common/ColorPicker/ColorPicker.tsx +157 -0
  43. package/src/components/common/ColorPicker/colorPicker.module.css +145 -0
  44. package/{components/common/ColorPicker/index.d.ts → src/components/common/ColorPicker/index.ts} +0 -1
  45. package/src/components/common/DateTime/DateTime.stories.tsx +249 -0
  46. package/src/components/common/DateTime/DateTime.tsx +236 -0
  47. package/src/components/common/DateTime/dateTime.module.css +21 -0
  48. package/{components/common/DateTime/index.d.ts → src/components/common/DateTime/index.ts} +0 -1
  49. package/src/components/common/DateTime/models/dayjs.ts +26 -0
  50. package/src/components/common/DateTime/ui/CalendarPopover/CalendarPopover.tsx +585 -0
  51. package/src/components/common/DateTime/ui/CalendarPopover/calendarPopover.module.css +226 -0
  52. package/{components/common/DateTime/ui/CalendarPopover/index.d.ts → src/components/common/DateTime/ui/CalendarPopover/index.ts} +0 -1
  53. package/src/components/common/DateTime/ui/TimeWheelColumn/TimeWheelColumn.tsx +106 -0
  54. package/{components/common/DateTime/ui/TimeWheelColumn/index.d.ts → src/components/common/DateTime/ui/TimeWheelColumn/index.ts} +0 -1
  55. package/src/components/common/DateTime/ui/TimeWheelColumn/timeWheelColumn.module.css +35 -0
  56. package/src/components/common/DateTime/utils/createCalendarDate.ts +15 -0
  57. package/src/components/common/FieldShell/FieldErrorIcon.tsx +39 -0
  58. package/src/components/common/FieldShell/FieldShell.tsx +104 -0
  59. package/src/components/common/FieldShell/fieldShell.module.css +456 -0
  60. package/{components/common/FieldShell/index.d.ts → src/components/common/FieldShell/index.ts} +0 -1
  61. package/src/components/common/Input/Input.stories.tsx +232 -0
  62. package/src/components/common/Input/Input.tsx +140 -0
  63. package/src/components/common/Input/index.ts +1 -0
  64. package/src/components/common/Input/input.module.css +49 -0
  65. package/src/components/common/MultiSelect/MultiSelect.stories.tsx +344 -0
  66. package/src/components/common/MultiSelect/MultiSelect.tsx +260 -0
  67. package/{components/common/MultiSelect/index.d.ts → src/components/common/MultiSelect/index.ts} +1 -1
  68. package/src/components/common/MultiSelect/models/Item.ts +7 -0
  69. package/{components/common/MultiSelect/models/TitleVariant.d.ts → src/components/common/MultiSelect/models/TitleVariant.ts} +0 -1
  70. package/src/components/common/MultiSelect/multiSelect.module.css +198 -0
  71. package/src/components/common/MultiSelect/multiSelect.stories.module.css +4 -0
  72. package/src/components/common/MultiSelect/ui/SelectPopover/SelectPopover.tsx +69 -0
  73. package/{components/common/MultiSelect/ui/SelectPopover/index.d.ts → src/components/common/MultiSelect/ui/SelectPopover/index.ts} +0 -1
  74. package/src/components/common/MultiSelect/utils/getTitle.ts +19 -0
  75. package/src/components/common/RadioButton/RadioButton.stories.tsx +134 -0
  76. package/src/components/common/RadioButton/RadioButton.tsx +90 -0
  77. package/{components/common/RadioButton/index.d.ts → src/components/common/RadioButton/index.ts} +0 -1
  78. package/src/components/common/RadioButton/radioButton.module.css +108 -0
  79. package/src/components/common/Select/Select.stories.tsx +294 -0
  80. package/src/components/common/Select/Select.tsx +181 -0
  81. package/{components/common/Select/index.d.ts → src/components/common/Select/index.ts} +1 -1
  82. package/src/components/common/Select/models/Divider.ts +4 -0
  83. package/src/components/common/Select/models/Item.ts +15 -0
  84. package/src/components/common/Select/select.module.css +87 -0
  85. package/src/components/common/Select/ui/SelectPopover/SelectPopover.tsx +49 -0
  86. package/{components/common/Select/ui/SelectPopover/index.d.ts → src/components/common/Select/ui/SelectPopover/index.ts} +0 -1
  87. package/src/components/common/WrapForLabel/WrapForLabel.stories.tsx +36 -0
  88. package/src/components/common/WrapForLabel/WrapForLabel.tsx +28 -0
  89. package/{components/common/WrapForLabel/index.d.ts → src/components/common/WrapForLabel/index.ts} +0 -1
  90. package/src/components/common/WrapForLabel/wrapForLabel.module.css +14 -0
  91. package/src/components/layout/Layout/Layout.stories.tsx +44 -0
  92. package/src/components/layout/Layout/Layout.tsx +24 -0
  93. package/{components/layout/Layout/index.d.ts → src/components/layout/Layout/index.ts} +0 -1
  94. package/src/components/layout/Layout/layout.module.css +16 -0
  95. package/src/components/layout/Surface/Surface.stories.tsx +56 -0
  96. package/src/components/layout/Surface/Surface.tsx +33 -0
  97. package/{components/layout/Surface/index.d.ts → src/components/layout/Surface/index.ts} +0 -1
  98. package/src/components/layout/Surface/surface.module.css +47 -0
  99. package/src/components/navigation/Menu/Menu.stories.tsx +324 -0
  100. package/src/components/navigation/Menu/Menu.tsx +157 -0
  101. package/{components/navigation/Menu/index.d.ts → src/components/navigation/Menu/index.ts} +1 -1
  102. package/src/components/navigation/Menu/menu.module.css +153 -0
  103. package/src/components/navigation/Menu/models/Divider.ts +4 -0
  104. package/src/components/navigation/Menu/models/Item.ts +20 -0
  105. package/src/components/navigation/Tabs/Tabs.stories.tsx +959 -0
  106. package/src/components/navigation/Tabs/Tabs.tsx +174 -0
  107. package/{components/navigation/Tabs/index.d.ts → src/components/navigation/Tabs/index.ts} +1 -1
  108. package/src/components/navigation/Tabs/models/Item.ts +9 -0
  109. package/src/components/navigation/Tabs/tabs.module.css +179 -0
  110. package/src/components/navigation/Tabs/tabs.stories.module.css +3 -0
  111. package/src/components/view/Card/Card.stories.tsx +99 -0
  112. package/src/components/view/Card/Card.tsx +66 -0
  113. package/src/components/view/Card/card.module.css +50 -0
  114. package/src/components/view/Card/index.ts +1 -0
  115. package/src/components/view/Chip/Chip.stories.tsx +219 -0
  116. package/src/components/view/Chip/Chip.tsx +89 -0
  117. package/src/components/view/Chip/chip.module.css +157 -0
  118. package/{components/view/Chip/index.d.ts → src/components/view/Chip/index.ts} +0 -1
  119. package/src/components/view/InputChip/InputChip.stories.tsx +117 -0
  120. package/src/components/view/InputChip/InputChip.tsx +77 -0
  121. package/{components/view/InputChip/index.d.ts → src/components/view/InputChip/index.ts} +0 -1
  122. package/src/components/view/InputChip/inputChip.module.css +188 -0
  123. package/src/components/view/Loader/Loader.stories.tsx +54 -0
  124. package/src/components/view/Loader/Loader.tsx +29 -0
  125. package/{components/view/Loader/index.d.ts → src/components/view/Loader/index.ts} +0 -1
  126. package/src/components/view/Loader/loader.gif +0 -0
  127. package/src/components/view/Loader/loader.module.css +8 -0
  128. package/src/components/view/Modal/Modal.stories.tsx +63 -0
  129. package/src/components/view/Modal/Modal.tsx +58 -0
  130. package/src/components/view/Modal/index.ts +1 -0
  131. package/src/components/view/Modal/modal.module.css +18 -0
  132. package/src/components/view/Modal/modal.stories.module.css +18 -0
  133. package/src/components/view/Pairs/Pairs.stories.tsx +101 -0
  134. package/src/components/view/Pairs/Pairs.tsx +63 -0
  135. package/{components/view/Pairs/index.d.ts → src/components/view/Pairs/index.ts} +0 -1
  136. package/src/components/view/Pairs/models/Pair.ts +4 -0
  137. package/src/components/view/Pairs/pairs.module.css +35 -0
  138. package/src/components/view/Pairs/ui/TypographyWithTooltip.tsx +31 -0
  139. package/src/components/view/Popover/Popover.stories.tsx +105 -0
  140. package/src/components/view/Popover/Popover.tsx +75 -0
  141. package/{components/view/Popover/index.d.ts → src/components/view/Popover/index.ts} +0 -1
  142. package/src/components/view/Popover/popover.module.css +23 -0
  143. package/src/components/view/Popover/ui/Arrow/Arrow.tsx +11 -0
  144. package/src/components/view/Popover/ui/Arrow/index.ts +1 -0
  145. package/src/components/view/Popover/ui/PopoverContent/PopoverContent.tsx +44 -0
  146. package/{components/view/Popover/ui/PopoverContent/index.d.ts → src/components/view/Popover/ui/PopoverContent/index.ts} +0 -1
  147. package/src/components/view/Popover/ui/PopoverProvider/PopoverProvider.tsx +13 -0
  148. package/src/components/view/Popover/ui/PopoverProvider/constants/PopoverContext.ts +5 -0
  149. package/src/components/view/Popover/ui/PopoverProvider/hooks/usePopover.ts +79 -0
  150. package/{components/view/Popover/ui/PopoverProvider/index.d.ts → src/components/view/Popover/ui/PopoverProvider/index.ts} +0 -1
  151. package/src/components/view/Popover/ui/PopoverProvider/models/PopoverOptions.ts +13 -0
  152. package/src/components/view/Popover/ui/PopoverProvider/models/PopoverState.ts +7 -0
  153. package/src/components/view/Popover/ui/PopoverTrigger/PopoverTrigger.tsx +36 -0
  154. package/{components/view/Popover/ui/PopoverTrigger/index.d.ts → src/components/view/Popover/ui/PopoverTrigger/index.ts} +0 -1
  155. package/src/components/view/Tooltip/Tooltip.stories.tsx +141 -0
  156. package/src/components/view/Tooltip/Tooltip.tsx +74 -0
  157. package/{components/view/Tooltip/index.d.ts → src/components/view/Tooltip/index.ts} +0 -1
  158. package/src/components/view/Tooltip/tooltip.module.css +93 -0
  159. package/src/components/view/Tooltip/ui/TooltipContent/TooltipContent.tsx +88 -0
  160. package/{components/view/Tooltip/ui/TooltipContent/index.d.ts → src/components/view/Tooltip/ui/TooltipContent/index.ts} +0 -1
  161. package/src/components/view/Tooltip/ui/TooltipProvider/TooltipProvider.tsx +13 -0
  162. package/src/components/view/Tooltip/ui/TooltipProvider/constants/TooltipContext.ts +5 -0
  163. package/src/components/view/Tooltip/ui/TooltipProvider/hooks/useTooltip.ts +76 -0
  164. package/{components/view/Tooltip/ui/TooltipProvider/index.d.ts → src/components/view/Tooltip/ui/TooltipProvider/index.ts} +0 -1
  165. package/src/components/view/Tooltip/ui/TooltipProvider/models/TooltipOptions.ts +12 -0
  166. package/{components/view/Tooltip/ui/TooltipProvider/models/TooltipState.d.ts → src/components/view/Tooltip/ui/TooltipProvider/models/TooltipState.ts} +1 -1
  167. package/src/components/view/Tooltip/ui/TooltipTrigger/TooltipTrigger.tsx +36 -0
  168. package/{components/view/Tooltip/ui/TooltipTrigger/index.d.ts → src/components/view/Tooltip/ui/TooltipTrigger/index.ts} +0 -1
  169. package/src/components/view/TreeView/TreeView.stories.tsx +174 -0
  170. package/src/components/view/TreeView/TreeView.tsx +76 -0
  171. package/{components/view/TreeView/index.d.ts → src/components/view/TreeView/index.ts} +0 -1
  172. package/src/components/view/TreeView/models/Item.ts +7 -0
  173. package/src/components/view/TreeView/treeView.module.css +3 -0
  174. package/src/components/view/TreeView/ui/TreeViewItem/TreeViewItem.tsx +84 -0
  175. package/{components/view/TreeView/ui/TreeViewItem/index.d.ts → src/components/view/TreeView/ui/TreeViewItem/index.ts} +0 -1
  176. package/src/components/view/TreeView/ui/TreeViewItem/treeViewItem.module.css +30 -0
  177. package/src/components/view/TreeView/utils/getFilteredTree.ts +23 -0
  178. package/src/components/view/Typography/Typography.stories.tsx +120 -0
  179. package/src/components/view/Typography/Typography.tsx +28 -0
  180. package/{components/view/Typography/index.d.ts → src/components/view/Typography/index.ts} +0 -1
  181. package/src/components/view/Typography/typography.module.css +132 -0
  182. package/src/components/view/VirtualTable/VirtualTable.stories.tsx +285 -0
  183. package/src/components/view/VirtualTable/VirtualTable.tsx +1159 -0
  184. package/src/components/view/VirtualTable/constants/baseColumns.ts +39 -0
  185. package/src/components/view/VirtualTable/constants/bigBaseColumns.ts +35 -0
  186. package/src/components/view/VirtualTable/constants/bigSampleData.ts +92 -0
  187. package/src/components/view/VirtualTable/constants/defaultRowHeight.ts +1 -0
  188. package/src/components/view/VirtualTable/constants/sampleData.ts +213 -0
  189. package/{components/view/VirtualTable/index.d.ts → src/components/view/VirtualTable/index.ts} +2 -1
  190. package/src/components/view/VirtualTable/models/AdditionalButton.ts +10 -0
  191. package/{components/view/VirtualTable/models/ColumnAlign.d.ts → src/components/view/VirtualTable/models/ColumnAlign.ts} +0 -1
  192. package/src/components/view/VirtualTable/models/FilterBy.ts +11 -0
  193. package/src/components/view/VirtualTable/models/SortBy.ts +11 -0
  194. package/{components/view/VirtualTable/models/SortType.d.ts → src/components/view/VirtualTable/models/SortType.ts} +0 -1
  195. package/src/components/view/VirtualTable/models/TableCell.ts +12 -0
  196. package/src/components/view/VirtualTable/models/TableColumn.ts +52 -0
  197. package/src/components/view/VirtualTable/models/TableRow.ts +6 -0
  198. package/{components/view/VirtualTable/models/VerticalAlign.d.ts → src/components/view/VirtualTable/models/VerticalAlign.ts} +0 -1
  199. package/{components/view/VirtualTable/models/VirtualTableBorders.d.ts → src/components/view/VirtualTable/models/VirtualTableBorders.ts} +0 -1
  200. package/src/components/view/VirtualTable/models/VirtualTableRef.ts +7 -0
  201. package/src/components/view/VirtualTable/ui/DateFiltration/DateFiltration.tsx +56 -0
  202. package/src/components/view/VirtualTable/ui/DateFiltration/dateFiltration.module.css +10 -0
  203. package/{components/view/VirtualTable/ui/DateFiltration/index.d.ts → src/components/view/VirtualTable/ui/DateFiltration/index.ts} +0 -1
  204. package/src/components/view/VirtualTable/ui/DefaultColumn/DefaultColumn.tsx +144 -0
  205. package/{components/view/VirtualTable/ui/DefaultColumn/index.d.ts → src/components/view/VirtualTable/ui/DefaultColumn/index.ts} +0 -1
  206. package/src/components/view/VirtualTable/ui/HeaderDropdown/HeaderDropdown.tsx +359 -0
  207. package/src/components/view/VirtualTable/ui/HeaderDropdown/headerDropdown.module.css +20 -0
  208. package/{components/view/VirtualTable/ui/HeaderDropdown/index.d.ts → src/components/view/VirtualTable/ui/HeaderDropdown/index.ts} +0 -1
  209. package/src/components/view/VirtualTable/ui/NumberFiltration/NumberFiltration.tsx +168 -0
  210. package/{components/view/VirtualTable/ui/NumberFiltration/index.d.ts → src/components/view/VirtualTable/ui/NumberFiltration/index.ts} +0 -1
  211. package/src/components/view/VirtualTable/ui/NumberFiltration/numberFiltration.module.css +27 -0
  212. package/src/components/view/VirtualTable/utils/alphanumericCompare.ts +29 -0
  213. package/src/components/view/VirtualTable/utils/dedupeFirstByColumnValue.ts +17 -0
  214. package/src/components/view/VirtualTable/utils/getColumns.ts +40 -0
  215. package/src/components/view/VirtualTable/utils/getNextHorizontalHeaders.ts +21 -0
  216. package/src/components/view/VirtualTable/utils/getNextVerticalHeaders.ts +18 -0
  217. package/src/components/view/VirtualTable/utils/getPrevHorizontalHeaders.ts +19 -0
  218. package/src/components/view/VirtualTable/utils/getPrevVerticalHeaders.ts +22 -0
  219. package/src/components/view/VirtualTable/utils/recursiveFilter.ts +15 -0
  220. package/src/components/view/VirtualTable/utils/recursiveSort.ts +24 -0
  221. package/src/components/view/VirtualTable/utils/rowMatchesFilter.ts +43 -0
  222. package/src/components/view/VirtualTable/utils/rowSelection.ts +125 -0
  223. package/src/components/view/VirtualTable/virtualTable.module.css +346 -0
  224. package/src/hooks/useCompatId.ts +12 -0
  225. package/src/hooks/useTranslation.ts +15 -0
  226. package/src/hooks/window/hooks/useWindowSize.ts +14 -0
  227. package/src/hooks/window/index.ts +1 -0
  228. package/src/i18n/config.ts +23 -0
  229. package/src/i18n/locales/en.json +23 -0
  230. package/src/i18n/locales/ru.json +23 -0
  231. package/src/icons/AddIcon.tsx +9 -0
  232. package/src/icons/AlertIcon.tsx +14 -0
  233. package/src/icons/ArrowDropDownIcon.tsx +9 -0
  234. package/src/icons/ArrowDropUpIcon.tsx +9 -0
  235. package/src/icons/AttachIcon.tsx +10 -0
  236. package/src/icons/BarChartIcon.tsx +9 -0
  237. package/src/icons/BookmarkAddIcon.tsx +12 -0
  238. package/src/icons/BookmarkIcon.tsx +9 -0
  239. package/src/icons/CheckboxDeselectedIcon.tsx +9 -0
  240. package/src/icons/CheckboxIcon.tsx +10 -0
  241. package/src/icons/CheckboxSeveralIcon.tsx +10 -0
  242. package/src/icons/ChevronDownIcon.tsx +9 -0
  243. package/src/icons/ChevronLeftIcon.tsx +9 -0
  244. package/src/icons/ChevronRightIcon.tsx +9 -0
  245. package/src/icons/ChevronUpIcon.tsx +9 -0
  246. package/src/icons/CircleFilledIcon.tsx +9 -0
  247. package/src/icons/CloseIcon.tsx +9 -0
  248. package/src/icons/DateRangeIcon.tsx +10 -0
  249. package/src/icons/DeleteIcon.tsx +16 -0
  250. package/src/icons/DoneIcon.tsx +9 -0
  251. package/src/icons/DownloadIcon.tsx +9 -0
  252. package/src/icons/DragIcon.tsx +21 -0
  253. package/src/icons/EditIcon.tsx +10 -0
  254. package/src/icons/ErrorOutlineIcon.tsx +14 -0
  255. package/src/icons/ExportTableIcon.tsx +19 -0
  256. package/src/icons/FileUploadIcon.tsx +9 -0
  257. package/src/icons/FilterClearIcon.tsx +24 -0
  258. package/src/icons/FilterIcon.tsx +13 -0
  259. package/src/icons/FullScreenOffIcon.tsx +9 -0
  260. package/src/icons/FullScreenOnIcon.tsx +12 -0
  261. package/src/icons/Icon.tsx +27 -0
  262. package/src/icons/InfoIcon.tsx +12 -0
  263. package/src/icons/ListIcon.tsx +9 -0
  264. package/src/icons/MoreVerticalIcon.tsx +10 -0
  265. package/src/icons/PointIcon.tsx +14 -0
  266. package/src/icons/RadioDeselectedIcon.tsx +10 -0
  267. package/src/icons/RadioSelectedIcon.tsx +10 -0
  268. package/src/icons/SaveIcon.tsx +17 -0
  269. package/src/icons/SearchIcon.tsx +10 -0
  270. package/src/icons/SelectUniqueIcon.tsx +9 -0
  271. package/src/icons/SettingsIcon.tsx +10 -0
  272. package/src/icons/SortDownIcon.tsx +9 -0
  273. package/src/icons/SortUpIcon.tsx +9 -0
  274. package/src/icons/TableChartIcon.tsx +9 -0
  275. package/src/icons/UploadIcon.tsx +9 -0
  276. package/src/icons/VisibilityIcon.tsx +18 -0
  277. package/src/icons/WellIcon.tsx +10 -0
  278. package/{icons/index.d.ts → src/icons/index.ts} +0 -1
  279. package/{index.d.ts → src/index.ts} +38 -3
  280. package/{models/ButtonVariant.d.ts → src/models/ButtonVariant.ts} +0 -1
  281. package/{models/CheckboxSize.d.ts → src/models/CheckboxSize.ts} +0 -1
  282. package/{models/ChipSize.d.ts → src/models/ChipSize.ts} +0 -1
  283. package/{models/ChipVariant.d.ts → src/models/ChipVariant.ts} +0 -1
  284. package/src/models/FieldError.ts +4 -0
  285. package/{models/FieldSize.d.ts → src/models/FieldSize.ts} +0 -1
  286. package/{models/FieldVariant.d.ts → src/models/FieldVariant.ts} +0 -1
  287. package/{models/Maybe.d.ts → src/models/Maybe.ts} +0 -1
  288. package/{models/SurfaceSize.d.ts → src/models/SurfaceSize.ts} +0 -1
  289. package/{models/SurfaceType.d.ts → src/models/SurfaceType.ts} +0 -1
  290. package/src/models/TypographyVariant.ts +20 -0
  291. package/src/models/UiProps.ts +3 -0
  292. package/src/stories/icons/Icons.stories.tsx +124 -0
  293. package/src/styles/global.css +142 -0
  294. package/src/styles/localGlobal.css +20 -0
  295. package/src/styles/themes/dark.css +132 -0
  296. package/src/styles/themes/darkBlue.css +132 -0
  297. package/src/styles/themes/light.css +132 -0
  298. package/src/theme/ThemeProvider.tsx +164 -0
  299. package/src/types/global.d.ts +13 -0
  300. package/src/types/tanstack.d.ts +40 -0
  301. package/{utils/index.d.ts → src/utils/index.ts} +0 -1
  302. package/src/utils/toFirstLetterLowerCase.ts +3 -0
  303. package/src/utils/toFirstLetterUpperCase.ts +3 -0
  304. package/tsconfig.dist.json +17 -0
  305. package/tsconfig.json +48 -0
  306. package/vite.config.ts +13 -0
  307. package/webpack.dist.config.cjs +105 -0
  308. package/werf-giterminism.yaml +19 -0
  309. package/werf.yaml +8 -0
  310. package/wiki/VirtualTable.md +660 -0
  311. package/components/common/Button/Button.d.ts +0 -15
  312. package/components/common/Button/Button.d.ts.map +0 -1
  313. package/components/common/Button/index.d.ts +0 -2
  314. package/components/common/Button/index.d.ts.map +0 -1
  315. package/components/common/ButtonsGroup/ButtonsGroup.d.ts +0 -11
  316. package/components/common/ButtonsGroup/ButtonsGroup.d.ts.map +0 -1
  317. package/components/common/ButtonsGroup/index.d.ts.map +0 -1
  318. package/components/common/Checkbox/Checkbox.d.ts +0 -12
  319. package/components/common/Checkbox/Checkbox.d.ts.map +0 -1
  320. package/components/common/Checkbox/index.d.ts.map +0 -1
  321. package/components/common/Checklist/Checklist.d.ts +0 -17
  322. package/components/common/Checklist/Checklist.d.ts.map +0 -1
  323. package/components/common/Checklist/index.d.ts.map +0 -1
  324. package/components/common/Checklist/models/Item.d.ts +0 -5
  325. package/components/common/Checklist/models/Item.d.ts.map +0 -1
  326. package/components/common/Checklist/models/SelectedItems.d.ts +0 -4
  327. package/components/common/Checklist/models/SelectedItems.d.ts.map +0 -1
  328. package/components/common/Checklist/utils/filterItems.d.ts +0 -4
  329. package/components/common/Checklist/utils/filterItems.d.ts.map +0 -1
  330. package/components/common/ColorPicker/ColorPicker.d.ts +0 -16
  331. package/components/common/ColorPicker/ColorPicker.d.ts.map +0 -1
  332. package/components/common/ColorPicker/index.d.ts.map +0 -1
  333. package/components/common/DateTime/DateTime.d.ts +0 -29
  334. package/components/common/DateTime/DateTime.d.ts.map +0 -1
  335. package/components/common/DateTime/index.d.ts.map +0 -1
  336. package/components/common/DateTime/models/dayjs.d.ts +0 -25
  337. package/components/common/DateTime/models/dayjs.d.ts.map +0 -1
  338. package/components/common/DateTime/ui/CalendarPopover/CalendarPopover.d.ts +0 -18
  339. package/components/common/DateTime/ui/CalendarPopover/CalendarPopover.d.ts.map +0 -1
  340. package/components/common/DateTime/ui/CalendarPopover/index.d.ts.map +0 -1
  341. package/components/common/DateTime/ui/TimeWheelColumn/TimeWheelColumn.d.ts +0 -8
  342. package/components/common/DateTime/ui/TimeWheelColumn/TimeWheelColumn.d.ts.map +0 -1
  343. package/components/common/DateTime/ui/TimeWheelColumn/index.d.ts.map +0 -1
  344. package/components/common/DateTime/utils/createCalendarDate.d.ts +0 -3
  345. package/components/common/DateTime/utils/createCalendarDate.d.ts.map +0 -1
  346. package/components/common/FieldShell/FieldErrorIcon.d.ts +0 -11
  347. package/components/common/FieldShell/FieldErrorIcon.d.ts.map +0 -1
  348. package/components/common/FieldShell/FieldShell.d.ts +0 -32
  349. package/components/common/FieldShell/FieldShell.d.ts.map +0 -1
  350. package/components/common/FieldShell/index.d.ts.map +0 -1
  351. package/components/common/Input/Input.d.ts +0 -16
  352. package/components/common/Input/Input.d.ts.map +0 -1
  353. package/components/common/Input/index.d.ts +0 -2
  354. package/components/common/Input/index.d.ts.map +0 -1
  355. package/components/common/MultiSelect/MultiSelect.d.ts +0 -26
  356. package/components/common/MultiSelect/MultiSelect.d.ts.map +0 -1
  357. package/components/common/MultiSelect/index.d.ts.map +0 -1
  358. package/components/common/MultiSelect/models/Item.d.ts +0 -8
  359. package/components/common/MultiSelect/models/Item.d.ts.map +0 -1
  360. package/components/common/MultiSelect/models/TitleVariant.d.ts.map +0 -1
  361. package/components/common/MultiSelect/ui/SelectPopover/SelectPopover.d.ts +0 -14
  362. package/components/common/MultiSelect/ui/SelectPopover/SelectPopover.d.ts.map +0 -1
  363. package/components/common/MultiSelect/ui/SelectPopover/index.d.ts.map +0 -1
  364. package/components/common/MultiSelect/utils/getTitle.d.ts +0 -4
  365. package/components/common/MultiSelect/utils/getTitle.d.ts.map +0 -1
  366. package/components/common/RadioButton/RadioButton.d.ts +0 -13
  367. package/components/common/RadioButton/RadioButton.d.ts.map +0 -1
  368. package/components/common/RadioButton/index.d.ts.map +0 -1
  369. package/components/common/Select/Select.d.ts +0 -23
  370. package/components/common/Select/Select.d.ts.map +0 -1
  371. package/components/common/Select/index.d.ts.map +0 -1
  372. package/components/common/Select/models/Divider.d.ts +0 -5
  373. package/components/common/Select/models/Divider.d.ts.map +0 -1
  374. package/components/common/Select/models/Item.d.ts +0 -13
  375. package/components/common/Select/models/Item.d.ts.map +0 -1
  376. package/components/common/Select/ui/SelectPopover/SelectPopover.d.ts +0 -13
  377. package/components/common/Select/ui/SelectPopover/SelectPopover.d.ts.map +0 -1
  378. package/components/common/Select/ui/SelectPopover/index.d.ts.map +0 -1
  379. package/components/common/WrapForLabel/WrapForLabel.d.ts +0 -12
  380. package/components/common/WrapForLabel/WrapForLabel.d.ts.map +0 -1
  381. package/components/common/WrapForLabel/index.d.ts.map +0 -1
  382. package/components/layout/Layout/Layout.d.ts +0 -11
  383. package/components/layout/Layout/Layout.d.ts.map +0 -1
  384. package/components/layout/Layout/index.d.ts.map +0 -1
  385. package/components/layout/Surface/Surface.d.ts +0 -14
  386. package/components/layout/Surface/Surface.d.ts.map +0 -1
  387. package/components/layout/Surface/index.d.ts.map +0 -1
  388. package/components/navigation/Menu/Menu.d.ts +0 -15
  389. package/components/navigation/Menu/Menu.d.ts.map +0 -1
  390. package/components/navigation/Menu/index.d.ts.map +0 -1
  391. package/components/navigation/Menu/models/Divider.d.ts +0 -5
  392. package/components/navigation/Menu/models/Divider.d.ts.map +0 -1
  393. package/components/navigation/Menu/models/Item.d.ts +0 -19
  394. package/components/navigation/Menu/models/Item.d.ts.map +0 -1
  395. package/components/navigation/Tabs/Tabs.d.ts +0 -27
  396. package/components/navigation/Tabs/Tabs.d.ts.map +0 -1
  397. package/components/navigation/Tabs/index.d.ts.map +0 -1
  398. package/components/navigation/Tabs/models/Item.d.ts +0 -9
  399. package/components/navigation/Tabs/models/Item.d.ts.map +0 -1
  400. package/components/view/Card/Card.d.ts +0 -18
  401. package/components/view/Card/Card.d.ts.map +0 -1
  402. package/components/view/Card/index.d.ts +0 -2
  403. package/components/view/Card/index.d.ts.map +0 -1
  404. package/components/view/Chip/Chip.d.ts +0 -18
  405. package/components/view/Chip/Chip.d.ts.map +0 -1
  406. package/components/view/Chip/index.d.ts.map +0 -1
  407. package/components/view/InputChip/InputChip.d.ts +0 -17
  408. package/components/view/InputChip/InputChip.d.ts.map +0 -1
  409. package/components/view/InputChip/index.d.ts.map +0 -1
  410. package/components/view/Loader/Loader.d.ts +0 -9
  411. package/components/view/Loader/Loader.d.ts.map +0 -1
  412. package/components/view/Loader/index.d.ts.map +0 -1
  413. package/components/view/Modal/Modal.d.ts +0 -11
  414. package/components/view/Modal/Modal.d.ts.map +0 -1
  415. package/components/view/Modal/index.d.ts +0 -2
  416. package/components/view/Modal/index.d.ts.map +0 -1
  417. package/components/view/Pairs/Pairs.d.ts +0 -14
  418. package/components/view/Pairs/Pairs.d.ts.map +0 -1
  419. package/components/view/Pairs/index.d.ts.map +0 -1
  420. package/components/view/Pairs/models/Pair.d.ts +0 -5
  421. package/components/view/Pairs/models/Pair.d.ts.map +0 -1
  422. package/components/view/Pairs/ui/TypographyWithTooltip.d.ts +0 -6
  423. package/components/view/Pairs/ui/TypographyWithTooltip.d.ts.map +0 -1
  424. package/components/view/Popover/Popover.d.ts +0 -19
  425. package/components/view/Popover/Popover.d.ts.map +0 -1
  426. package/components/view/Popover/index.d.ts.map +0 -1
  427. package/components/view/Popover/ui/Arrow/Arrow.d.ts +0 -2
  428. package/components/view/Popover/ui/Arrow/Arrow.d.ts.map +0 -1
  429. package/components/view/Popover/ui/Arrow/index.d.ts +0 -2
  430. package/components/view/Popover/ui/Arrow/index.d.ts.map +0 -1
  431. package/components/view/Popover/ui/PopoverContent/PopoverContent.d.ts +0 -3
  432. package/components/view/Popover/ui/PopoverContent/PopoverContent.d.ts.map +0 -1
  433. package/components/view/Popover/ui/PopoverContent/index.d.ts.map +0 -1
  434. package/components/view/Popover/ui/PopoverProvider/PopoverProvider.d.ts +0 -4
  435. package/components/view/Popover/ui/PopoverProvider/PopoverProvider.d.ts.map +0 -1
  436. package/components/view/Popover/ui/PopoverProvider/constants/PopoverContext.d.ts +0 -3
  437. package/components/view/Popover/ui/PopoverProvider/constants/PopoverContext.d.ts.map +0 -1
  438. package/components/view/Popover/ui/PopoverProvider/hooks/usePopover.d.ts +0 -52
  439. package/components/view/Popover/ui/PopoverProvider/hooks/usePopover.d.ts.map +0 -1
  440. package/components/view/Popover/ui/PopoverProvider/index.d.ts.map +0 -1
  441. package/components/view/Popover/ui/PopoverProvider/models/PopoverOptions.d.ts +0 -13
  442. package/components/view/Popover/ui/PopoverProvider/models/PopoverOptions.d.ts.map +0 -1
  443. package/components/view/Popover/ui/PopoverProvider/models/PopoverState.d.ts +0 -5
  444. package/components/view/Popover/ui/PopoverProvider/models/PopoverState.d.ts.map +0 -1
  445. package/components/view/Popover/ui/PopoverTrigger/PopoverTrigger.d.ts +0 -5
  446. package/components/view/Popover/ui/PopoverTrigger/PopoverTrigger.d.ts.map +0 -1
  447. package/components/view/Popover/ui/PopoverTrigger/index.d.ts.map +0 -1
  448. package/components/view/Tooltip/Tooltip.d.ts +0 -16
  449. package/components/view/Tooltip/Tooltip.d.ts.map +0 -1
  450. package/components/view/Tooltip/index.d.ts.map +0 -1
  451. package/components/view/Tooltip/ui/TooltipContent/TooltipContent.d.ts +0 -9
  452. package/components/view/Tooltip/ui/TooltipContent/TooltipContent.d.ts.map +0 -1
  453. package/components/view/Tooltip/ui/TooltipContent/index.d.ts.map +0 -1
  454. package/components/view/Tooltip/ui/TooltipProvider/TooltipProvider.d.ts +0 -4
  455. package/components/view/Tooltip/ui/TooltipProvider/TooltipProvider.d.ts.map +0 -1
  456. package/components/view/Tooltip/ui/TooltipProvider/constants/TooltipContext.d.ts +0 -3
  457. package/components/view/Tooltip/ui/TooltipProvider/constants/TooltipContext.d.ts.map +0 -1
  458. package/components/view/Tooltip/ui/TooltipProvider/hooks/useTooltip.d.ts +0 -51
  459. package/components/view/Tooltip/ui/TooltipProvider/hooks/useTooltip.d.ts.map +0 -1
  460. package/components/view/Tooltip/ui/TooltipProvider/index.d.ts.map +0 -1
  461. package/components/view/Tooltip/ui/TooltipProvider/models/TooltipOptions.d.ts +0 -12
  462. package/components/view/Tooltip/ui/TooltipProvider/models/TooltipOptions.d.ts.map +0 -1
  463. package/components/view/Tooltip/ui/TooltipProvider/models/TooltipState.d.ts.map +0 -1
  464. package/components/view/Tooltip/ui/TooltipTrigger/TooltipTrigger.d.ts +0 -5
  465. package/components/view/Tooltip/ui/TooltipTrigger/TooltipTrigger.d.ts.map +0 -1
  466. package/components/view/Tooltip/ui/TooltipTrigger/index.d.ts.map +0 -1
  467. package/components/view/TreeView/TreeView.d.ts +0 -12
  468. package/components/view/TreeView/TreeView.d.ts.map +0 -1
  469. package/components/view/TreeView/index.d.ts.map +0 -1
  470. package/components/view/TreeView/models/Item.d.ts +0 -8
  471. package/components/view/TreeView/models/Item.d.ts.map +0 -1
  472. package/components/view/TreeView/ui/TreeViewItem/TreeViewItem.d.ts +0 -16
  473. package/components/view/TreeView/ui/TreeViewItem/TreeViewItem.d.ts.map +0 -1
  474. package/components/view/TreeView/ui/TreeViewItem/index.d.ts.map +0 -1
  475. package/components/view/TreeView/utils/getFilteredTree.d.ts +0 -3
  476. package/components/view/TreeView/utils/getFilteredTree.d.ts.map +0 -1
  477. package/components/view/Typography/Typography.d.ts +0 -9
  478. package/components/view/Typography/Typography.d.ts.map +0 -1
  479. package/components/view/Typography/index.d.ts.map +0 -1
  480. package/components/view/VirtualTable/VirtualTable.d.ts +0 -78
  481. package/components/view/VirtualTable/VirtualTable.d.ts.map +0 -1
  482. package/components/view/VirtualTable/constants/defaultRowHeight.d.ts +0 -2
  483. package/components/view/VirtualTable/constants/defaultRowHeight.d.ts.map +0 -1
  484. package/components/view/VirtualTable/index.d.ts.map +0 -1
  485. package/components/view/VirtualTable/models/AdditionalButton.d.ts +0 -9
  486. package/components/view/VirtualTable/models/AdditionalButton.d.ts.map +0 -1
  487. package/components/view/VirtualTable/models/ColumnAlign.d.ts.map +0 -1
  488. package/components/view/VirtualTable/models/FilterBy.d.ts +0 -12
  489. package/components/view/VirtualTable/models/FilterBy.d.ts.map +0 -1
  490. package/components/view/VirtualTable/models/SortBy.d.ts +0 -11
  491. package/components/view/VirtualTable/models/SortBy.d.ts.map +0 -1
  492. package/components/view/VirtualTable/models/SortType.d.ts.map +0 -1
  493. package/components/view/VirtualTable/models/TableCell.d.ts +0 -15
  494. package/components/view/VirtualTable/models/TableCell.d.ts.map +0 -1
  495. package/components/view/VirtualTable/models/TableColumn.d.ts +0 -52
  496. package/components/view/VirtualTable/models/TableColumn.d.ts.map +0 -1
  497. package/components/view/VirtualTable/models/TableRow.d.ts +0 -6
  498. package/components/view/VirtualTable/models/TableRow.d.ts.map +0 -1
  499. package/components/view/VirtualTable/models/VerticalAlign.d.ts.map +0 -1
  500. package/components/view/VirtualTable/models/VirtualTableBorders.d.ts.map +0 -1
  501. package/components/view/VirtualTable/models/VirtualTableRef.d.ts +0 -8
  502. package/components/view/VirtualTable/models/VirtualTableRef.d.ts.map +0 -1
  503. package/components/view/VirtualTable/ui/DateFiltration/DateFiltration.d.ts +0 -7
  504. package/components/view/VirtualTable/ui/DateFiltration/DateFiltration.d.ts.map +0 -1
  505. package/components/view/VirtualTable/ui/DateFiltration/index.d.ts.map +0 -1
  506. package/components/view/VirtualTable/ui/DefaultColumn/DefaultColumn.d.ts +0 -4
  507. package/components/view/VirtualTable/ui/DefaultColumn/DefaultColumn.d.ts.map +0 -1
  508. package/components/view/VirtualTable/ui/DefaultColumn/index.d.ts.map +0 -1
  509. package/components/view/VirtualTable/ui/HeaderDropdown/HeaderDropdown.d.ts +0 -23
  510. package/components/view/VirtualTable/ui/HeaderDropdown/HeaderDropdown.d.ts.map +0 -1
  511. package/components/view/VirtualTable/ui/HeaderDropdown/index.d.ts.map +0 -1
  512. package/components/view/VirtualTable/ui/NumberFiltration/NumberFiltration.d.ts +0 -7
  513. package/components/view/VirtualTable/ui/NumberFiltration/NumberFiltration.d.ts.map +0 -1
  514. package/components/view/VirtualTable/ui/NumberFiltration/index.d.ts.map +0 -1
  515. package/components/view/VirtualTable/utils/alphanumericCompare.d.ts +0 -2
  516. package/components/view/VirtualTable/utils/alphanumericCompare.d.ts.map +0 -1
  517. package/components/view/VirtualTable/utils/dedupeFirstByColumnValue.d.ts +0 -3
  518. package/components/view/VirtualTable/utils/dedupeFirstByColumnValue.d.ts.map +0 -1
  519. package/components/view/VirtualTable/utils/getColumns.d.ts +0 -5
  520. package/components/view/VirtualTable/utils/getColumns.d.ts.map +0 -1
  521. package/components/view/VirtualTable/utils/getNextHorizontalHeaders.d.ts +0 -4
  522. package/components/view/VirtualTable/utils/getNextHorizontalHeaders.d.ts.map +0 -1
  523. package/components/view/VirtualTable/utils/getNextVerticalHeaders.d.ts +0 -4
  524. package/components/view/VirtualTable/utils/getNextVerticalHeaders.d.ts.map +0 -1
  525. package/components/view/VirtualTable/utils/getPrevHorizontalHeaders.d.ts +0 -4
  526. package/components/view/VirtualTable/utils/getPrevHorizontalHeaders.d.ts.map +0 -1
  527. package/components/view/VirtualTable/utils/getPrevVerticalHeaders.d.ts +0 -4
  528. package/components/view/VirtualTable/utils/getPrevVerticalHeaders.d.ts.map +0 -1
  529. package/components/view/VirtualTable/utils/recursiveFilter.d.ts +0 -4
  530. package/components/view/VirtualTable/utils/recursiveFilter.d.ts.map +0 -1
  531. package/components/view/VirtualTable/utils/recursiveSort.d.ts +0 -4
  532. package/components/view/VirtualTable/utils/recursiveSort.d.ts.map +0 -1
  533. package/components/view/VirtualTable/utils/rowMatchesFilter.d.ts +0 -4
  534. package/components/view/VirtualTable/utils/rowMatchesFilter.d.ts.map +0 -1
  535. package/components/view/VirtualTable/utils/rowSelection.d.ts +0 -24
  536. package/components/view/VirtualTable/utils/rowSelection.d.ts.map +0 -1
  537. package/hooks/useCompatId.d.ts +0 -2
  538. package/hooks/useCompatId.d.ts.map +0 -1
  539. package/hooks/useTranslation.d.ts +0 -6
  540. package/hooks/useTranslation.d.ts.map +0 -1
  541. package/icons/AddIcon.d.ts +0 -4
  542. package/icons/AddIcon.d.ts.map +0 -1
  543. package/icons/AlertIcon.d.ts +0 -4
  544. package/icons/AlertIcon.d.ts.map +0 -1
  545. package/icons/ArrowDropDownIcon.d.ts +0 -4
  546. package/icons/ArrowDropDownIcon.d.ts.map +0 -1
  547. package/icons/ArrowDropUpIcon.d.ts +0 -4
  548. package/icons/ArrowDropUpIcon.d.ts.map +0 -1
  549. package/icons/AttachIcon.d.ts +0 -4
  550. package/icons/AttachIcon.d.ts.map +0 -1
  551. package/icons/BarChartIcon.d.ts +0 -4
  552. package/icons/BarChartIcon.d.ts.map +0 -1
  553. package/icons/BookmarkAddIcon.d.ts +0 -4
  554. package/icons/BookmarkAddIcon.d.ts.map +0 -1
  555. package/icons/BookmarkIcon.d.ts +0 -4
  556. package/icons/BookmarkIcon.d.ts.map +0 -1
  557. package/icons/CheckboxDeselectedIcon.d.ts +0 -4
  558. package/icons/CheckboxDeselectedIcon.d.ts.map +0 -1
  559. package/icons/CheckboxIcon.d.ts +0 -4
  560. package/icons/CheckboxIcon.d.ts.map +0 -1
  561. package/icons/CheckboxSeveralIcon.d.ts +0 -4
  562. package/icons/CheckboxSeveralIcon.d.ts.map +0 -1
  563. package/icons/ChevronDownIcon.d.ts +0 -4
  564. package/icons/ChevronDownIcon.d.ts.map +0 -1
  565. package/icons/ChevronLeftIcon.d.ts +0 -4
  566. package/icons/ChevronLeftIcon.d.ts.map +0 -1
  567. package/icons/ChevronRightIcon.d.ts +0 -4
  568. package/icons/ChevronRightIcon.d.ts.map +0 -1
  569. package/icons/ChevronUpIcon.d.ts +0 -4
  570. package/icons/ChevronUpIcon.d.ts.map +0 -1
  571. package/icons/CircleFilledIcon.d.ts +0 -4
  572. package/icons/CircleFilledIcon.d.ts.map +0 -1
  573. package/icons/CloseIcon.d.ts +0 -4
  574. package/icons/CloseIcon.d.ts.map +0 -1
  575. package/icons/DateRangeIcon.d.ts +0 -4
  576. package/icons/DateRangeIcon.d.ts.map +0 -1
  577. package/icons/DeleteIcon.d.ts +0 -4
  578. package/icons/DeleteIcon.d.ts.map +0 -1
  579. package/icons/DoneIcon.d.ts +0 -4
  580. package/icons/DoneIcon.d.ts.map +0 -1
  581. package/icons/DownloadIcon.d.ts +0 -4
  582. package/icons/DownloadIcon.d.ts.map +0 -1
  583. package/icons/DragIcon.d.ts +0 -4
  584. package/icons/DragIcon.d.ts.map +0 -1
  585. package/icons/EditIcon.d.ts +0 -4
  586. package/icons/EditIcon.d.ts.map +0 -1
  587. package/icons/ErrorOutlineIcon.d.ts +0 -4
  588. package/icons/ErrorOutlineIcon.d.ts.map +0 -1
  589. package/icons/ExportTableIcon.d.ts +0 -4
  590. package/icons/ExportTableIcon.d.ts.map +0 -1
  591. package/icons/FileUploadIcon.d.ts +0 -4
  592. package/icons/FileUploadIcon.d.ts.map +0 -1
  593. package/icons/FilterClearIcon.d.ts +0 -4
  594. package/icons/FilterClearIcon.d.ts.map +0 -1
  595. package/icons/FilterIcon.d.ts +0 -4
  596. package/icons/FilterIcon.d.ts.map +0 -1
  597. package/icons/FullScreenOffIcon.d.ts +0 -4
  598. package/icons/FullScreenOffIcon.d.ts.map +0 -1
  599. package/icons/FullScreenOnIcon.d.ts +0 -4
  600. package/icons/FullScreenOnIcon.d.ts.map +0 -1
  601. package/icons/Icon.d.ts +0 -8
  602. package/icons/Icon.d.ts.map +0 -1
  603. package/icons/InfoIcon.d.ts +0 -4
  604. package/icons/InfoIcon.d.ts.map +0 -1
  605. package/icons/ListIcon.d.ts +0 -4
  606. package/icons/ListIcon.d.ts.map +0 -1
  607. package/icons/MoreVerticalIcon.d.ts +0 -4
  608. package/icons/MoreVerticalIcon.d.ts.map +0 -1
  609. package/icons/PointIcon.d.ts +0 -4
  610. package/icons/PointIcon.d.ts.map +0 -1
  611. package/icons/RadioDeselectedIcon.d.ts +0 -4
  612. package/icons/RadioDeselectedIcon.d.ts.map +0 -1
  613. package/icons/RadioSelectedIcon.d.ts +0 -4
  614. package/icons/RadioSelectedIcon.d.ts.map +0 -1
  615. package/icons/SaveIcon.d.ts +0 -4
  616. package/icons/SaveIcon.d.ts.map +0 -1
  617. package/icons/SearchIcon.d.ts +0 -4
  618. package/icons/SearchIcon.d.ts.map +0 -1
  619. package/icons/SelectUniqueIcon.d.ts +0 -4
  620. package/icons/SelectUniqueIcon.d.ts.map +0 -1
  621. package/icons/SettingsIcon.d.ts +0 -4
  622. package/icons/SettingsIcon.d.ts.map +0 -1
  623. package/icons/SortDownIcon.d.ts +0 -4
  624. package/icons/SortDownIcon.d.ts.map +0 -1
  625. package/icons/SortUpIcon.d.ts +0 -4
  626. package/icons/SortUpIcon.d.ts.map +0 -1
  627. package/icons/TableChartIcon.d.ts +0 -4
  628. package/icons/TableChartIcon.d.ts.map +0 -1
  629. package/icons/UploadIcon.d.ts +0 -4
  630. package/icons/UploadIcon.d.ts.map +0 -1
  631. package/icons/VisibilityIcon.d.ts +0 -4
  632. package/icons/VisibilityIcon.d.ts.map +0 -1
  633. package/icons/WellIcon.d.ts +0 -4
  634. package/icons/WellIcon.d.ts.map +0 -1
  635. package/icons/index.d.ts.map +0 -1
  636. package/index.css +0 -3325
  637. package/index.css.map +0 -1
  638. package/index.d.ts.map +0 -1
  639. package/index.js +0 -3
  640. package/index.js.LICENSE.txt +0 -31
  641. package/index.js.map +0 -1
  642. package/index.mjs +0 -3
  643. package/index.mjs.LICENSE.txt +0 -31
  644. package/index.mjs.map +0 -1
  645. package/models/ButtonVariant.d.ts.map +0 -1
  646. package/models/CheckboxSize.d.ts.map +0 -1
  647. package/models/ChipSize.d.ts.map +0 -1
  648. package/models/ChipVariant.d.ts.map +0 -1
  649. package/models/FieldError.d.ts +0 -5
  650. package/models/FieldError.d.ts.map +0 -1
  651. package/models/FieldSize.d.ts.map +0 -1
  652. package/models/FieldVariant.d.ts.map +0 -1
  653. package/models/Maybe.d.ts.map +0 -1
  654. package/models/SurfaceSize.d.ts.map +0 -1
  655. package/models/SurfaceType.d.ts.map +0 -1
  656. package/models/TypographyVariant.d.ts +0 -2
  657. package/models/TypographyVariant.d.ts.map +0 -1
  658. package/models/UiProps.d.ts +0 -7
  659. package/models/UiProps.d.ts.map +0 -1
  660. package/theme/ThemeProvider.d.ts +0 -23
  661. package/theme/ThemeProvider.d.ts.map +0 -1
  662. package/utils/index.d.ts.map +0 -1
  663. package/utils/toFirstLetterLowerCase.d.ts +0 -2
  664. package/utils/toFirstLetterLowerCase.d.ts.map +0 -1
  665. package/utils/toFirstLetterUpperCase.d.ts +0 -2
  666. package/utils/toFirstLetterUpperCase.d.ts.map +0 -1
@@ -0,0 +1,1159 @@
1
+ import { Header, flexRender, getCoreRowModel, useReactTable } from '@tanstack/react-table';
2
+ import { Range, defaultRangeExtractor, useVirtualizer } from '@tanstack/react-virtual';
3
+ import classnames from 'classnames';
4
+ import dayjs from 'dayjs';
5
+ import {
6
+ Fragment,
7
+ JSX,
8
+ ReactNode,
9
+ PointerEvent as ReactPointerEvent,
10
+ forwardRef,
11
+ useCallback,
12
+ useEffect,
13
+ useImperativeHandle,
14
+ useMemo,
15
+ useRef,
16
+ useState,
17
+ } from 'react';
18
+ import { v4 as uuidv4 } from 'uuid';
19
+
20
+ import { Button } from '@components/common/Button';
21
+ import { Tooltip } from '@components/view/Tooltip';
22
+ import { ChipSize } from '@models/ChipSize';
23
+ import { UiProps } from '@models/UiProps';
24
+ import { toFirstLetterUpperCase } from '@utils/index';
25
+
26
+ import { defaultRowHeight } from './constants/defaultRowHeight';
27
+ import { AdditionalButton } from './models/AdditionalButton';
28
+ import { FilterBy } from './models/FilterBy';
29
+ import { SortBy } from './models/SortBy';
30
+ import { TableCell } from './models/TableCell';
31
+ import { TableColumn } from './models/TableColumn';
32
+ import { TableRow } from './models/TableRow';
33
+ import { VirtualTableBorders } from './models/VirtualTableBorders';
34
+ import { VirtualTableRef } from './models/VirtualTableRef';
35
+ import { DefaultColumn } from './ui/DefaultColumn';
36
+ import { HeaderDropdown } from './ui/HeaderDropdown';
37
+ import { dedupeFirstByColumnValue } from './utils/dedupeFirstByColumnValue';
38
+ import { getColumns } from './utils/getColumns';
39
+ import { getNextHorizontalHeaders } from './utils/getNextHorizontalHeaders';
40
+ import { getNextVerticalHeaders } from './utils/getNextVerticalHeaders';
41
+ import { getPrevHorizontalHeaders } from './utils/getPrevHorizontalHeaders';
42
+ import { getPrevVerticalHeaders } from './utils/getPrevVerticalHeaders';
43
+ import { recursiveFilter } from './utils/recursiveFilter';
44
+ import { recursiveSort } from './utils/recursiveSort';
45
+ import { rowMatchesFilter } from './utils/rowMatchesFilter';
46
+ import {
47
+ computeRowSelection,
48
+ getSelectedIndexesByRows,
49
+ isInteractiveSelectionTarget,
50
+ isScrollbarPointerEvent,
51
+ } from './utils/rowSelection';
52
+ import * as styles from './virtualTable.module.css';
53
+
54
+ const rowSelectionDragThresholdPx = 4;
55
+ const rowSelectionScrollEdgePx = 32;
56
+ const rowSelectionScrollStepPx = 20;
57
+
58
+ type Size = ChipSize;
59
+
60
+ interface Props {
61
+ /** Строки таблицы */
62
+ rows: TableRow[];
63
+ /** Описание колонок (заголовки, сортировка, фильтрация, форматирование) */
64
+ columns: TableColumn[];
65
+ /** Кастомный рендер ячеек: view — режим просмотра, edit — режим редактирования */
66
+ additionalColumnsViews?: (
67
+ id: string,
68
+ value: string | number | undefined,
69
+ payload: { [key: string]: string } | undefined,
70
+ ) => {
71
+ edit:
72
+ | ((onChange: (changeValue?: string, withBlur?: boolean) => void, onBlur: () => void) => JSX.Element | null)
73
+ | null;
74
+ view: JSX.Element | null;
75
+ };
76
+ /** Колбэк при изменении значения редактируемой ячейки */
77
+ onChangeCell?: (rowIndex: number, columnId: string, value: string | number | undefined, original?: TableRow) => void;
78
+ /** Функция расчёта ширины колонки по индексу; по умолчанию — meta.width колонки или 200 px */
79
+ cellWidth?: (columnIndex: number) => number;
80
+ /** Кнопки действий в правой части каждой строки */
81
+ rowButtons?: ((original: TableRow) => AdditionalButton[]) | undefined;
82
+ /** Количество левых колонок, закреплённых при горизонтальной прокрутке */
83
+ fixedColumnsCount?: number;
84
+ /** Высота строк заголовка в пикселях (по одному значению на уровень вложенности) */
85
+ headerRowHeight?: number[];
86
+ /** Высота строки тела таблицы в пикселях */
87
+ bodyRowHeight?: number;
88
+ /** Ширина колонки с кнопками действий строки */
89
+ rowActionWidth?: number;
90
+ /** Автоматически измерять высоту строк по содержимому (для многострочного текста) */
91
+ dynamicRowHeight?: boolean;
92
+ /** Фиксированная высота контейнера таблицы в пикселях */
93
+ height?: number;
94
+ /** Прокрутить таблицу к последней строке при монтировании/обновлении */
95
+ scrollToBottom?: boolean;
96
+ /** Рендерить попапы фильтрации/сортировки внутри контейнера таблицы (важно для overflow и вкладок) */
97
+ useTableContainerAsRootForPopup?: boolean;
98
+ /** Размер компонента: small | medium | large */
99
+ componentSize?: Size;
100
+ /** Стиль границ ячеек: all | horizontal | vertical | none */
101
+ borders?: VirtualTableBorders;
102
+ /** Показывать в заголовке количество уникальных значений столбца */
103
+ showUniqueValuesCount?: boolean;
104
+ /** Начальные фильтры (управляемый режим — через onFiltersChange) */
105
+ globalFilters?: FilterBy[];
106
+ /** Начальные сортировки (управляемый режим — через onSortsChange) */
107
+ globalSorts?: SortBy[];
108
+ /** Колбэк при изменении активных фильтров пользователем */
109
+ onFiltersChange?: (filters: FilterBy[]) => void;
110
+ /** Колбэк при изменении активных сортировок (без внутренней сортировки по isNew) */
111
+ onSortsChange?: (sorts: SortBy[]) => void;
112
+ /** Дополнительный контент слева от заголовка колонки (например, кнопка синхронизации с картой) */
113
+ leftAdditionalHeaderContent?: (headerName: string) => ReactNode;
114
+ /** Дополнительный контент справа от заголовка колонки, перед кнопкой фильтрации */
115
+ rightAdditionalHeaderContent?: (headerName: string) => ReactNode;
116
+ /** Добавить закреплённую колонку с порядковыми номерами строк */
117
+ showRowsNumbers?: boolean;
118
+ /** Чередовать фон строк (zebra); по умолчанию true */
119
+ stripedRows?: boolean;
120
+ /** Включить выделение строк мышью (Ctrl — точечно, Shift — диапазон, drag — несколько подряд) */
121
+ enableSelectRows?: boolean;
122
+ /** Колбэк при изменении набора выделенных строк; передаются полные данные строк в порядке отображения */
123
+ onSelectRowsChange?: (rows: TableRow[]) => void;
124
+ /** Начальное выделение строк (те же объекты, что в rows; управляемый режим — через onSelectRowsChange) */
125
+ globalSelectedRows?: TableRow[];
126
+ }
127
+
128
+ interface SelectionDragState {
129
+ pointerId: number;
130
+ startIndex: number;
131
+ startX: number;
132
+ startY: number;
133
+ baseIndexes: Set<number>;
134
+ ctrl: boolean;
135
+ shift: boolean;
136
+ anchorIndex: number | null;
137
+ isDragCapable: boolean;
138
+ hasDragged: boolean;
139
+ }
140
+
141
+ export const VirtualTable = forwardRef<VirtualTableRef, UiProps<Props>>((props, ref) => {
142
+ const {
143
+ rows,
144
+ columns,
145
+ additionalColumnsViews,
146
+ onChangeCell,
147
+ cellWidth,
148
+ rowButtons,
149
+ fixedColumnsCount = 0,
150
+ headerRowHeight = [defaultRowHeight],
151
+ bodyRowHeight = defaultRowHeight,
152
+ rowActionWidth = 77,
153
+ classes,
154
+ dynamicRowHeight = false,
155
+ height,
156
+ scrollToBottom,
157
+ useTableContainerAsRootForPopup,
158
+ componentSize = 'small',
159
+ borders = 'horizontal',
160
+ showUniqueValuesCount = false,
161
+ globalFilters,
162
+ globalSorts,
163
+ onFiltersChange,
164
+ onSortsChange,
165
+ leftAdditionalHeaderContent,
166
+ rightAdditionalHeaderContent,
167
+ showRowsNumbers,
168
+ stripedRows = true,
169
+ enableSelectRows = false,
170
+ onSelectRowsChange,
171
+ globalSelectedRows,
172
+ } = props;
173
+
174
+ const fixedWithNumbersCount = fixedColumnsCount + (showRowsNumbers ? 1 : 0);
175
+
176
+ const [filterBy, setFilterBy] = useState<FilterBy[]>(globalFilters ?? []);
177
+ const [sortBy, setSortBy] = useState<SortBy[]>([...(globalSorts ?? []), { columnName: 'isNew', direction: 'desc' }]);
178
+ const [selectedIndexes, setSelectedIndexes] = useState<Set<number>>(() => new Set());
179
+
180
+ const tableContainerRef = useRef<HTMLDivElement>(null);
181
+ const selectedIndexesRef = useRef(selectedIndexes);
182
+ const selectedRowsRef = useRef<TableRow[]>(enableSelectRows ? (globalSelectedRows ?? []) : []);
183
+ const processedRowsRef = useRef<TableRow[]>([]);
184
+ const lastSelectedIndexRef = useRef<number | null>(null);
185
+ const lastSelectedRowRef = useRef<TableRow | null>(null);
186
+ const selectionDragRef = useRef<SelectionDragState | null>(null);
187
+ const onSelectRowsChangeRef = useRef(onSelectRowsChange);
188
+ const enableSelectRowsRef = useRef(enableSelectRows);
189
+
190
+ selectedIndexesRef.current = selectedIndexes;
191
+ onSelectRowsChangeRef.current = onSelectRowsChange;
192
+ enableSelectRowsRef.current = enableSelectRows;
193
+
194
+ const rowNumberColumnId = useMemo(() => (showRowsNumbers ? `rowNumber_${uuidv4()}` : null), [showRowsNumbers]);
195
+
196
+ const memoizedColumns = useMemo(() => {
197
+ if (!rowNumberColumnId) {
198
+ return getColumns(columns);
199
+ }
200
+
201
+ const buildRowsNumbersColumn = (template?: TableColumn): TableColumn => ({
202
+ id: rowNumberColumnId,
203
+ ...(!template?.columns?.length ? { accessorKey: rowNumberColumnId } : undefined),
204
+ label: '#',
205
+ columns: template?.columns?.map((child) => buildRowsNumbersColumn(child)),
206
+ });
207
+
208
+ const nextColumns = [buildRowsNumbersColumn(columns[0]), ...columns];
209
+ const result = getColumns(nextColumns);
210
+
211
+ return result;
212
+ }, [columns, rowNumberColumnId]);
213
+
214
+ const processedRows = useMemo(() => {
215
+ const newRows = [...rows];
216
+ // При переключении объета может возникнуть случай, когда у
217
+ // новых строк не будет ранее выбранных значений из фильтра
218
+ const nextFilterBy = filterBy.filter((filterByItem) => {
219
+ if (filterByItem.type === 'value' && filterByItem.uniqueFirstPerValue && filterByItem.values.length === 0) {
220
+ return true;
221
+ }
222
+
223
+ return rows.some((row) => rowMatchesFilter(row, filterByItem));
224
+ });
225
+ const filtered = nextFilterBy.length
226
+ ? recursiveFilter(newRows, nextFilterBy)
227
+ : filterBy.some(
228
+ (fb) =>
229
+ (fb.type === 'numberRange' && fb.values.some((v) => v !== Infinity && v !== -Infinity)) ||
230
+ (fb.type === 'dateRange' &&
231
+ fb.values.some((v) => !dayjs(v).isSame(dayjs(0)) && !dayjs(v).isSame(dayjs(Number.MAX_SAFE_INTEGER)))),
232
+ )
233
+ ? []
234
+ : newRows;
235
+ let sorted = sortBy.length ? recursiveSort(filtered, sortBy) : filtered;
236
+
237
+ for (const fb of nextFilterBy) {
238
+ if (fb.type === 'value' && fb.uniqueFirstPerValue) {
239
+ sorted = dedupeFirstByColumnValue(sorted, fb.columnName);
240
+ }
241
+ }
242
+
243
+ return sorted;
244
+ }, [rows, sortBy, filterBy]);
245
+
246
+ const memoizedData = useMemo(() => {
247
+ const result = rowNumberColumnId
248
+ ? processedRows.map((row, index) => ({
249
+ ...row,
250
+ [rowNumberColumnId]: {
251
+ value: index + 1,
252
+ },
253
+ }))
254
+ : processedRows;
255
+
256
+ window.dispatchEvent(
257
+ new CustomEvent('filteringRows', {
258
+ detail: result,
259
+ }),
260
+ );
261
+ return result;
262
+ }, [processedRows, rowNumberColumnId]);
263
+
264
+ processedRowsRef.current = processedRows;
265
+
266
+ const emitSelection = useCallback((indexes: Set<number>, anchorIndex: number | null) => {
267
+ const source = processedRowsRef.current;
268
+ const orderedIndexes = [...indexes].filter((index) => index >= 0 && index < source.length).sort((a, b) => a - b);
269
+ const nextIndexes = new Set(orderedIndexes);
270
+ const nextRows = orderedIndexes.map((index) => source[index]);
271
+ const previousIndexes = selectedIndexesRef.current;
272
+ const sameSelection =
273
+ nextIndexes.size === previousIndexes.size && orderedIndexes.every((index) => previousIndexes.has(index));
274
+
275
+ if (!sameSelection) {
276
+ setSelectedIndexes(nextIndexes);
277
+ selectedIndexesRef.current = nextIndexes;
278
+ selectedRowsRef.current = nextRows;
279
+ onSelectRowsChangeRef.current?.(nextRows);
280
+ }
281
+
282
+ if (anchorIndex !== null && source[anchorIndex]) {
283
+ lastSelectedIndexRef.current = anchorIndex;
284
+ lastSelectedRowRef.current = source[anchorIndex];
285
+ } else if (anchorIndex === null) {
286
+ lastSelectedIndexRef.current = null;
287
+ lastSelectedRowRef.current = null;
288
+ }
289
+ }, []);
290
+
291
+ useEffect(() => {
292
+ const lastSelectedRow = lastSelectedRowRef.current;
293
+ if (lastSelectedRow) {
294
+ const nextAnchorIndex = processedRows.indexOf(lastSelectedRow);
295
+ lastSelectedIndexRef.current = nextAnchorIndex === -1 ? null : nextAnchorIndex;
296
+ if (nextAnchorIndex === -1) {
297
+ lastSelectedRowRef.current = null;
298
+ }
299
+ }
300
+
301
+ if (selectedRowsRef.current.length === 0) {
302
+ if (selectedIndexesRef.current.size > 0) {
303
+ emitSelection(new Set(), lastSelectedIndexRef.current);
304
+ }
305
+ return;
306
+ }
307
+
308
+ const nextIndexes = getSelectedIndexesByRows(processedRows, selectedRowsRef.current);
309
+ const fallbackAnchor = nextIndexes.size > 0 ? Math.max(...nextIndexes) : null;
310
+
311
+ emitSelection(nextIndexes, lastSelectedIndexRef.current ?? fallbackAnchor);
312
+ }, [processedRows, emitSelection]);
313
+
314
+ useEffect(() => {
315
+ if (!enableSelectRows && selectedIndexesRef.current.size > 0) {
316
+ emitSelection(new Set(), null);
317
+ }
318
+ }, [enableSelectRows, emitSelection]);
319
+
320
+ const partialFiltered = useMemo(() => {
321
+ const newRows = [...rows];
322
+ return Array.from({ length: filterBy.length + 1 }, (_, i) => recursiveFilter(newRows, filterBy.slice(0, i)));
323
+ }, [rows, filterBy]);
324
+
325
+ const columnsEstimateSize = useMemo(
326
+ () =>
327
+ cellWidth ??
328
+ ((index: number) =>
329
+ rowNumberColumnId && index === 0
330
+ ? memoizedData.length.toString().length * 8 + 24
331
+ : (memoizedColumns[index]?.meta?.width ?? 200)),
332
+ [cellWidth, memoizedColumns, memoizedData, rowNumberColumnId],
333
+ );
334
+
335
+ const table = useReactTable({
336
+ data: memoizedData,
337
+ columns: memoizedColumns,
338
+ defaultColumn: DefaultColumn,
339
+ manualSorting: true,
340
+ enableColumnPinning: true,
341
+ getCoreRowModel: getCoreRowModel(),
342
+ initialState: {
343
+ columnPinning: {
344
+ left:
345
+ memoizedColumns
346
+ .filter((_, index) => index < fixedWithNumbersCount)
347
+ .map((mc) => mc.id)
348
+ .filter((id) => id)
349
+ .map((id) => id!) ?? [],
350
+ },
351
+ },
352
+ meta: {
353
+ updateData: (rowIndex: number, columnId: string, value: string | number | undefined, original?: TableRow) => {
354
+ onChangeCell?.(rowIndex, columnId, value, original);
355
+ },
356
+ tableContainerRef,
357
+ additionalColumnsViews,
358
+ },
359
+ });
360
+
361
+ const { rows: rowsFromTable } = table.getRowModel();
362
+ const headerGroups = table.getHeaderGroups();
363
+
364
+ const rowVirtualizer = useVirtualizer({
365
+ count: rowsFromTable.length,
366
+ getScrollElement: () => tableContainerRef?.current,
367
+ estimateSize: () => bodyRowHeight,
368
+ overscan: 5,
369
+ });
370
+
371
+ const columnVirtualizer = useVirtualizer({
372
+ horizontal: true,
373
+ count: headerGroups[0]?.headers.length ?? 1,
374
+ rangeExtractor: useCallback((range: Range) => {
375
+ const stickyIndexes = [...Array(fixedWithNumbersCount)].map((_, index) => index);
376
+ const next = new Set([...stickyIndexes, ...defaultRangeExtractor(range)]);
377
+ return [...next].sort((a, b) => a - b);
378
+ }, []),
379
+ getScrollElement: () => tableContainerRef?.current,
380
+ estimateSize: columnsEstimateSize,
381
+ overscan: 5,
382
+ });
383
+
384
+ const fixedColumnsWidth = useMemo(
385
+ () => [...Array(fixedWithNumbersCount)].reduce((sum: number, _, index) => sum + columnsEstimateSize(index), 0),
386
+ [fixedWithNumbersCount, columnsEstimateSize],
387
+ );
388
+
389
+ const headerGroupHeight = useMemo(() => {
390
+ const delta = headerGroups.length - headerRowHeight.length;
391
+ const result = [...headerRowHeight];
392
+ if (delta > 0) {
393
+ for (let i = 0; i < delta; i++) {
394
+ result.push(defaultRowHeight);
395
+ }
396
+ }
397
+
398
+ return result;
399
+ }, [headerRowHeight, headerGroups]);
400
+
401
+ const summaryHeaderHeight = useMemo(
402
+ () =>
403
+ headerGroupHeight.reduce(
404
+ (sum, current, currentIndex) => (currentIndex < headerGroups.length ? sum + current : sum),
405
+ 0,
406
+ ),
407
+ [headerGroupHeight, headerGroups],
408
+ );
409
+
410
+ const headerGroupY = useCallback(
411
+ (headerIndex: number) =>
412
+ headerGroupHeight.reduce((sum, current, currentIndex) => (currentIndex < headerIndex ? sum + current : sum), 0),
413
+ [headerGroupHeight, headerGroups],
414
+ );
415
+
416
+ const rowsTotalSize = rowVirtualizer.getTotalSize();
417
+ const columnsTotalSize = columnVirtualizer.getTotalSize();
418
+
419
+ const resetFilters = () => {
420
+ setFilterBy([]);
421
+ };
422
+
423
+ const resetSorts = () => {
424
+ setSortBy([{ columnName: 'isNew', direction: 'desc' }]);
425
+ };
426
+
427
+ useImperativeHandle(ref, () => ({
428
+ resetFilters,
429
+ resetSorts,
430
+ }));
431
+
432
+ useEffect(() => {
433
+ if (tableContainerRef?.current) {
434
+ const container = tableContainerRef?.current;
435
+ const rightBorderElement = container.querySelector(`.${styles.rightBorder}`);
436
+ if (rightBorderElement) {
437
+ const containerWidth = container.clientWidth;
438
+ const tableWidth = columnsTotalSize + (!!rowButtons ? rowActionWidth : 0);
439
+ (rightBorderElement as HTMLElement).style.left =
440
+ `${containerWidth > tableWidth ? tableWidth : containerWidth}px`;
441
+ }
442
+ }
443
+ }, [tableContainerRef?.current?.clientWidth, columnsTotalSize, rowButtons, rowActionWidth]);
444
+
445
+ useEffect(() => {
446
+ if (tableContainerRef?.current) {
447
+ const container = tableContainerRef?.current;
448
+ const bottomBorderElement = container.querySelector(`.${styles.bottomBorder}`);
449
+ if (bottomBorderElement) {
450
+ const containerHeight = container.clientHeight;
451
+ const tableHeight = rowsTotalSize + summaryHeaderHeight;
452
+ (bottomBorderElement as HTMLElement).style.top =
453
+ `${containerHeight > tableHeight ? tableHeight : containerHeight}px`;
454
+ }
455
+ }
456
+ }, [tableContainerRef?.current?.clientHeight, rowsTotalSize]);
457
+
458
+ useEffect(() => {
459
+ const scrollListener = function (this: HTMLDivElement) {
460
+ const marginLeftChangingElements = this.querySelectorAll(`.${styles.marginLeftChanging}`);
461
+ marginLeftChangingElements?.forEach(
462
+ (element) => ((element as HTMLElement).style.marginLeft = `${this.scrollLeft}px`),
463
+ );
464
+ };
465
+
466
+ if (tableContainerRef?.current) {
467
+ tableContainerRef.current.addEventListener('scroll', scrollListener);
468
+ if (scrollToBottom) {
469
+ tableContainerRef.current.scrollTo(0, tableContainerRef.current.scrollHeight);
470
+ }
471
+ }
472
+
473
+ return () => {
474
+ if (tableContainerRef?.current) {
475
+ tableContainerRef.current.removeEventListener('scroll', scrollListener);
476
+ }
477
+ };
478
+ }, [tableContainerRef, scrollToBottom]);
479
+
480
+ const virtualRows = rowVirtualizer.getVirtualItems();
481
+ const virtualColumns = columnVirtualizer.getVirtualItems();
482
+ const lastVirtualColumnIndex = virtualColumns[virtualColumns.length - 1]?.index;
483
+ const virtualRowsSizeByIndex = useMemo(
484
+ () => new Map(virtualRows.map((item) => [item.index, item.size])),
485
+ [virtualRows],
486
+ );
487
+
488
+ const getRowSizeByIndex = useCallback(
489
+ (index: number) => virtualRowsSizeByIndex.get(index) ?? bodyRowHeight,
490
+ [bodyRowHeight, virtualRowsSizeByIndex],
491
+ );
492
+
493
+ const getRowspanHeight = useCallback(
494
+ (rowIndex: number, rowspan: number) => {
495
+ const clampedRowspan = Math.max(1, Math.floor(rowspan));
496
+ const lastRowIndex = Math.min(rowsFromTable.length - 1, rowIndex + clampedRowspan - 1);
497
+ const rowsInRange = lastRowIndex - rowIndex + 1;
498
+
499
+ let result = 0;
500
+
501
+ for (let index = rowIndex; index <= lastRowIndex; index += 1) {
502
+ result += getRowSizeByIndex(index);
503
+ }
504
+
505
+ const bordersCompensation = borders === 'all' || borders === 'horizontal' ? Math.max(0, rowsInRange - 1) : 0;
506
+
507
+ return Math.max(0, result - bordersCompensation);
508
+ },
509
+ [borders, getRowSizeByIndex, rowsFromTable.length],
510
+ );
511
+
512
+ const isCellCoveredByRowspan = useCallback(
513
+ (rowIndex: number, columnId: string) => {
514
+ for (let index = rowIndex - 1; index >= 0; index -= 1) {
515
+ const upperCell = rowsFromTable[index]?.original?.[columnId] as TableCell | undefined;
516
+ const upperRowspan = Math.max(1, upperCell?.rowspan ?? 1);
517
+
518
+ if (index + upperRowspan - 1 >= rowIndex) {
519
+ return true;
520
+ }
521
+ }
522
+
523
+ return false;
524
+ },
525
+ [rowsFromTable],
526
+ );
527
+
528
+ const getRowIndexFromTarget = (target: EventTarget | null): number | null => {
529
+ if (!(target instanceof Element)) {
530
+ return null;
531
+ }
532
+
533
+ const rowElement = target.closest(`.${styles.tr}`);
534
+ if (!rowElement) {
535
+ return null;
536
+ }
537
+
538
+ const index = Number(rowElement.getAttribute('data-index'));
539
+ return Number.isFinite(index) ? index : null;
540
+ };
541
+
542
+ const getRowIndexFromClientY = useCallback(
543
+ (clientY: number): number | null => {
544
+ const container = tableContainerRef.current;
545
+ const rowsCount = processedRowsRef.current.length;
546
+ if (!container || rowsCount === 0) {
547
+ return null;
548
+ }
549
+
550
+ const rect = container.getBoundingClientRect();
551
+ const offset = clientY - rect.top + container.scrollTop - summaryHeaderHeight;
552
+
553
+ if (offset < 0) {
554
+ return 0;
555
+ }
556
+
557
+ const totalSize = rowVirtualizer.getTotalSize();
558
+ if (offset >= totalSize) {
559
+ return rowsCount - 1;
560
+ }
561
+
562
+ const measurements = rowVirtualizer.measurementsCache;
563
+ if (measurements.length > 0) {
564
+ let low = 0;
565
+ let high = measurements.length - 1;
566
+
567
+ while (low <= high) {
568
+ const mid = (low + high) >> 1;
569
+ const item = measurements[mid];
570
+
571
+ if (offset < item.start) {
572
+ high = mid - 1;
573
+ } else if (offset >= item.end) {
574
+ low = mid + 1;
575
+ } else {
576
+ return Math.min(rowsCount - 1, item.index);
577
+ }
578
+ }
579
+ }
580
+
581
+ if (!dynamicRowHeight) {
582
+ return Math.max(0, Math.min(rowsCount - 1, Math.floor(offset / bodyRowHeight)));
583
+ }
584
+
585
+ const virtualItems = rowVirtualizer.getVirtualItems();
586
+ if (virtualItems.length === 0) {
587
+ return 0;
588
+ }
589
+
590
+ if (offset < virtualItems[0].start) {
591
+ return virtualItems[0].index;
592
+ }
593
+
594
+ return virtualItems[virtualItems.length - 1].index;
595
+ },
596
+ [bodyRowHeight, dynamicRowHeight, rowVirtualizer, summaryHeaderHeight],
597
+ );
598
+
599
+ const scrollContainerWhileSelecting = (clientY: number) => {
600
+ const container = tableContainerRef.current;
601
+ if (!container) {
602
+ return;
603
+ }
604
+
605
+ const rect = container.getBoundingClientRect();
606
+ const visibleY = clientY - rect.top;
607
+
608
+ if (visibleY < rowSelectionScrollEdgePx + summaryHeaderHeight) {
609
+ container.scrollTop -= rowSelectionScrollStepPx;
610
+ } else if (visibleY > rect.height - rowSelectionScrollEdgePx) {
611
+ container.scrollTop += rowSelectionScrollStepPx;
612
+ }
613
+ };
614
+
615
+ const applySelectionGesture = (currentIndex: number, isDrag: boolean) => {
616
+ const drag = selectionDragRef.current;
617
+ if (!drag) {
618
+ return;
619
+ }
620
+
621
+ const result = computeRowSelection({
622
+ startIndex: drag.startIndex,
623
+ currentIndex,
624
+ ctrl: drag.ctrl,
625
+ shift: drag.shift,
626
+ anchorIndex: drag.anchorIndex,
627
+ baseIndexes: drag.baseIndexes,
628
+ isDrag,
629
+ });
630
+
631
+ emitSelection(result.indexes, result.anchor);
632
+ };
633
+
634
+ const handleTablePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {
635
+ if (!enableSelectRowsRef.current || event.button !== 0) {
636
+ return;
637
+ }
638
+
639
+ const rowIndex = getRowIndexFromTarget(event.target);
640
+ if (rowIndex === null) {
641
+ if (
642
+ isInteractiveSelectionTarget(event.target) ||
643
+ isScrollbarPointerEvent(event) ||
644
+ (event.target instanceof Element && Boolean(event.target.closest(`.${styles.th}`)))
645
+ ) {
646
+ return;
647
+ }
648
+
649
+ if (selectedIndexesRef.current.size > 0) {
650
+ emitSelection(new Set(), null);
651
+ }
652
+
653
+ return;
654
+ }
655
+
656
+ if (isInteractiveSelectionTarget(event.target)) {
657
+ return;
658
+ }
659
+
660
+ const isCellActionTarget =
661
+ event.target instanceof Element && event.target.closest('[data-vt-cell-action]') !== null;
662
+ const isModifierClick = event.ctrlKey || event.metaKey || event.shiftKey;
663
+
664
+ if (isCellActionTarget && !isModifierClick) {
665
+ return;
666
+ }
667
+
668
+ const isDragCapable = event.pointerType === 'mouse' || event.pointerType === 'pen';
669
+
670
+ selectionDragRef.current = {
671
+ pointerId: event.pointerId,
672
+ startIndex: rowIndex,
673
+ startX: event.clientX,
674
+ startY: event.clientY,
675
+ baseIndexes: new Set(selectedIndexesRef.current),
676
+ ctrl: event.ctrlKey || event.metaKey,
677
+ shift: event.shiftKey,
678
+ anchorIndex: lastSelectedIndexRef.current,
679
+ isDragCapable: isDragCapable && !isCellActionTarget,
680
+ hasDragged: false,
681
+ };
682
+
683
+ if (isCellActionTarget) {
684
+ applySelectionGesture(rowIndex, false);
685
+ return;
686
+ }
687
+
688
+ if (isDragCapable) {
689
+ event.currentTarget.setPointerCapture(event.pointerId);
690
+ applySelectionGesture(rowIndex, false);
691
+ }
692
+ };
693
+
694
+ const handleTablePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {
695
+ const drag = selectionDragRef.current;
696
+ if (!drag || !drag.isDragCapable || event.pointerId !== drag.pointerId) {
697
+ return;
698
+ }
699
+
700
+ const deltaX = event.clientX - drag.startX;
701
+ const deltaY = event.clientY - drag.startY;
702
+ const distanceSquared = deltaX * deltaX + deltaY * deltaY;
703
+ if (!drag.hasDragged && distanceSquared < rowSelectionDragThresholdPx * rowSelectionDragThresholdPx) {
704
+ return;
705
+ }
706
+
707
+ drag.hasDragged = true;
708
+ event.preventDefault();
709
+ scrollContainerWhileSelecting(event.clientY);
710
+
711
+ const currentIndex = getRowIndexFromClientY(event.clientY);
712
+ if (currentIndex === null) {
713
+ return;
714
+ }
715
+
716
+ applySelectionGesture(currentIndex, true);
717
+ };
718
+
719
+ const clearSelectionDrag = (event: ReactPointerEvent<HTMLDivElement>) => {
720
+ const drag = selectionDragRef.current;
721
+ if (!drag || event.pointerId !== drag.pointerId) {
722
+ return;
723
+ }
724
+
725
+ if (!drag.isDragCapable && !drag.hasDragged) {
726
+ applySelectionGesture(drag.startIndex, false);
727
+ }
728
+
729
+ selectionDragRef.current = null;
730
+
731
+ if (event.currentTarget.hasPointerCapture(event.pointerId)) {
732
+ event.currentTarget.releasePointerCapture(event.pointerId);
733
+ }
734
+ };
735
+
736
+ const getRowBackgroundColor = useCallback(
737
+ (row: TableRow, rowIndex: number) => {
738
+ if (row?.isNew?.value === 1 || selectedIndexes.has(rowIndex)) {
739
+ return 'var(--theme-table-selected-row)';
740
+ }
741
+
742
+ return rowIndex % 2 !== 0 ? 'var(--theme-table-even-row)' : 'var(--theme-table-background)';
743
+ },
744
+ [selectedIndexes],
745
+ );
746
+ const rowZIndexByIndex = useMemo(() => {
747
+ const rowsCount = rowsFromTable.length;
748
+ const result = new Map<number, number>();
749
+
750
+ rowsFromTable.forEach((row, rowIndex) => {
751
+ const maxRowspan = row
752
+ .getAllCells()
753
+ .reduce(
754
+ (maxSpan, cell) =>
755
+ Math.max(maxSpan, Math.max(1, (row.original?.[cell.column.id] as TableCell | undefined)?.rowspan ?? 1)),
756
+ 1,
757
+ );
758
+
759
+ const spanWeight = maxRowspan - 1;
760
+ const zIndex = spanWeight * (rowsCount + 1) + (rowsCount - rowIndex + 1);
761
+
762
+ result.set(rowIndex, zIndex);
763
+ });
764
+
765
+ return result;
766
+ }, [rowsFromTable]);
767
+ const headerBaseZIndex = useMemo(
768
+ () => rowsFromTable.length * rowsFromTable.length + rowsFromTable.length + 10,
769
+ [rowsFromTable.length],
770
+ );
771
+
772
+ const renderHeaderNode = (header: Header<TableRow, unknown>) => {
773
+ const metaLabel = (header.column.columnDef.meta as { label?: string } | undefined)?.label;
774
+
775
+ if (typeof metaLabel === 'string') {
776
+ const headerLines = metaLabel.split(/\r\n|\\r\\n|\n|\\n/);
777
+
778
+ if (headerLines.length > 1) {
779
+ return (
780
+ <>
781
+ {headerLines.map((line, index) => (
782
+ <Fragment key={`${header.id}_${index}`}>
783
+ {line}
784
+ {index < headerLines.length - 1 && <br />}
785
+ </Fragment>
786
+ ))}
787
+ </>
788
+ );
789
+ }
790
+ }
791
+
792
+ return flexRender(header.column.columnDef.header, header.getContext());
793
+ };
794
+
795
+ const [before, after] =
796
+ virtualColumns.length > 0
797
+ ? [
798
+ fixedWithNumbersCount && virtualColumns[fixedWithNumbersCount].index !== fixedWithNumbersCount
799
+ ? virtualColumns[fixedWithNumbersCount].start - fixedColumnsWidth
800
+ : virtualColumns[0].start,
801
+ columnsTotalSize - virtualColumns[virtualColumns.length - 1].end,
802
+ ]
803
+ : [0, 0];
804
+
805
+ useEffect(() => {
806
+ onFiltersChange?.(filterBy);
807
+ }, [filterBy]);
808
+
809
+ useEffect(() => {
810
+ onSortsChange?.(sortBy.filter((sb) => sb.columnName !== 'isNew'));
811
+ }, [sortBy]);
812
+
813
+ return (
814
+ <div
815
+ className={classnames(
816
+ styles.root,
817
+ styles[componentSize as keyof typeof styles],
818
+ styles[`borders${toFirstLetterUpperCase(borders)}` as keyof typeof styles],
819
+ classes?.root,
820
+ )}
821
+ style={height ? { height } : undefined}
822
+ >
823
+ <div
824
+ ref={tableContainerRef}
825
+ className={classnames(styles.tableContainer, 'styledScroll', enableSelectRows && styles.selectRows)}
826
+ onPointerDown={enableSelectRows ? handleTablePointerDown : undefined}
827
+ onPointerMove={enableSelectRows ? handleTablePointerMove : undefined}
828
+ onPointerUp={enableSelectRows ? clearSelectionDrag : undefined}
829
+ onPointerCancel={enableSelectRows ? clearSelectionDrag : undefined}
830
+ onDragStart={enableSelectRows ? (event) => event.preventDefault() : undefined}
831
+ >
832
+ <div
833
+ className={styles.table}
834
+ style={{
835
+ height: `${rowsTotalSize + summaryHeaderHeight}px`,
836
+ }}
837
+ >
838
+ <div
839
+ style={{
840
+ position: 'sticky',
841
+ top: 0,
842
+ zIndex: headerBaseZIndex,
843
+ }}
844
+ >
845
+ {headerGroups.map((headerGroup, hgi) => {
846
+ const innerCell = (header: Header<TableRow, unknown>) => {
847
+ const headerMeta = header.column.columnDef.meta;
848
+ const headerResultName =
849
+ (headerMeta as { sortAnotherName?: string } | undefined)?.sortAnotherName ??
850
+ header.column.columnDef.id ??
851
+ header.id;
852
+ const columnFilterIndex = filterBy.findIndex((fb) => fb.columnName === headerResultName);
853
+ const rowsForChecklist = columnFilterIndex === -1 ? memoizedData : partialFiltered[columnFilterIndex];
854
+
855
+ return (
856
+ <div className={classnames(styles.thCell)}>
857
+ {header.column.columnDef.id ===
858
+ header.column.columnDef['accessorKey' as keyof typeof header.column.columnDef] &&
859
+ header.column.columnDef.id !== rowNumberColumnId &&
860
+ (headerMeta?.sortable ||
861
+ headerMeta?.selectUnique ||
862
+ headerMeta?.filtrationByValue ||
863
+ headerMeta?.filtrationByDate ||
864
+ headerMeta?.filtrationByNumber ||
865
+ (headerMeta && showUniqueValuesCount)) ? (
866
+ <HeaderDropdown
867
+ headerMeta={headerMeta}
868
+ sortBy={sortBy}
869
+ setSortBy={setSortBy}
870
+ filterBy={filterBy}
871
+ setFilterBy={setFilterBy}
872
+ rows={rowsForChecklist}
873
+ rowsForUniqueCount={memoizedData}
874
+ headerName={header.column.columnDef.id ?? header.id}
875
+ containerRef={useTableContainerAsRootForPopup ? tableContainerRef : undefined}
876
+ showUniqueValuesCount={showUniqueValuesCount}
877
+ leftAdditionalContent={leftAdditionalHeaderContent}
878
+ rightAdditionalContent={rightAdditionalHeaderContent}
879
+ children={(afterNode) => (
880
+ <div
881
+ className={classnames(
882
+ styles.label,
883
+ !!headerMeta?.headerAlign
884
+ ? styles[`align${headerMeta?.headerAlign}` as keyof typeof styles]
885
+ : styles.alignLeft,
886
+ )}
887
+ >
888
+ {renderHeaderNode(header)}
889
+ {afterNode}
890
+ </div>
891
+ )}
892
+ ></HeaderDropdown>
893
+ ) : (
894
+ <div
895
+ className={classnames(
896
+ styles.label,
897
+ !!headerMeta?.headerAlign
898
+ ? styles[`align${headerMeta?.headerAlign}` as keyof typeof styles]
899
+ : styles.alignLeft,
900
+ )}
901
+ >
902
+ {renderHeaderNode(header)}
903
+ </div>
904
+ )}
905
+ </div>
906
+ );
907
+ };
908
+
909
+ return (
910
+ <Fragment key={headerGroup.id}>
911
+ {[...Array(fixedWithNumbersCount)].map((_a, index) => {
912
+ const header = headerGroup.headers[index];
913
+
914
+ const nextHorizontalHeaders = getNextHorizontalHeaders(
915
+ headerGroup.headers,
916
+ index,
917
+ lastVirtualColumnIndex,
918
+ );
919
+ const nextVerticalHeaders = getNextVerticalHeaders(headerGroups, hgi, index);
920
+
921
+ return (
922
+ <div
923
+ key={`${headerGroup.id}-${header.id}`}
924
+ className={classnames(
925
+ styles.th,
926
+ hgi === 0 ? styles.firstThRow : undefined,
927
+ !nextVerticalHeaders.length &&
928
+ index !== headerGroup.headers.length - 1 &&
929
+ styles.thRightBorder,
930
+ index === 0 && styles.thLeftBorder,
931
+ nextVerticalHeaders.length && !nextHorizontalHeaders.length && styles.thHiddenColumn,
932
+ styles.marginLeftChanging,
933
+ )}
934
+ style={{
935
+ zIndex: headerBaseZIndex + 1,
936
+ width: `${columnsEstimateSize(index)}px`,
937
+ height: `${headerGroupHeight[hgi]}px`,
938
+ transform:
939
+ `translateX(` +
940
+ `${Array.from({ length: index }, (_, i) => columnsEstimateSize(i)).reduce(
941
+ (sum, w) => sum + w,
942
+ 0,
943
+ )}px` +
944
+ `) ` +
945
+ `translateY(${headerGroupY(hgi)}px)`,
946
+ }}
947
+ >
948
+ {innerCell(header)}
949
+ </div>
950
+ );
951
+ })}
952
+
953
+ {virtualColumns.map((column) => {
954
+ if (column.index > fixedWithNumbersCount - 1) {
955
+ const header = headerGroup.headers[column.index];
956
+ const nextHorizontalHeaders = getNextHorizontalHeaders(
957
+ headerGroup.headers,
958
+ column.index,
959
+ lastVirtualColumnIndex,
960
+ );
961
+ const prevHorizontalHeaders = getPrevHorizontalHeaders(headerGroup.headers, column.index);
962
+ const nextVerticalHeaders = getNextVerticalHeaders(headerGroups, hgi, column.index);
963
+ const prevVerticalHeaders = getPrevVerticalHeaders(headerGroups, hgi, column.index);
964
+
965
+ const thWidth =
966
+ !nextHorizontalHeaders.length && !prevHorizontalHeaders.length
967
+ ? column.size
968
+ : column.size +
969
+ nextHorizontalHeaders.reduce(
970
+ (sum, current) => sum + (current.column.columnDef.meta?.width ?? 0),
971
+ 0,
972
+ );
973
+ const zIndex =
974
+ !nextHorizontalHeaders.length && !prevHorizontalHeaders.length
975
+ ? undefined
976
+ : headerBaseZIndex + nextHorizontalHeaders.length + 2;
977
+ const thHeight = !prevVerticalHeaders.length
978
+ ? headerGroupHeight[hgi]
979
+ : headerGroupHeight[hgi] +
980
+ prevVerticalHeaders.reduce(
981
+ (sum, _, index) => sum + (headerGroupHeight[hgi - index - 1] ?? 0),
982
+ 0,
983
+ );
984
+ const translateY = !prevVerticalHeaders.length
985
+ ? headerGroupY(hgi)
986
+ : headerGroupY(hgi) -
987
+ prevVerticalHeaders.reduce(
988
+ (sum, _, index) => sum + (headerGroupHeight[hgi - index - 1] ?? 0),
989
+ 0,
990
+ );
991
+
992
+ return (
993
+ <div
994
+ key={`${headerGroup.id}-${header.id}`}
995
+ className={classnames(
996
+ styles.th,
997
+ hgi === 0 && styles.firstThRow,
998
+ !nextVerticalHeaders.length &&
999
+ column.index !== headerGroup.headers.length - 1 &&
1000
+ styles.thRightBorder,
1001
+ column.index === 0 && styles.thLeftBorder,
1002
+ nextVerticalHeaders.length && !nextHorizontalHeaders.length && styles.thHiddenColumn,
1003
+ )}
1004
+ style={{
1005
+ width: `${thWidth}px`,
1006
+ zIndex,
1007
+ height: `${thHeight}px`,
1008
+ transform:
1009
+ `translateX(${column.start + (!!fixedWithNumbersCount ? -1 : 0)}px)` +
1010
+ ` translateY(${translateY}px)`,
1011
+ borderTop:
1012
+ borders !== 'none' && translateY === 0 ? '1px solid var(--border-color)' : undefined,
1013
+ }}
1014
+ >
1015
+ {innerCell(header)}
1016
+ </div>
1017
+ );
1018
+ }
1019
+ return null;
1020
+ })}
1021
+
1022
+ {!!rowButtons && (
1023
+ <div
1024
+ className={classnames(styles.th, hgi === 0 ? styles.firstThRow : undefined)}
1025
+ style={{
1026
+ width: `${rowActionWidth}px`,
1027
+ height: `${headerGroupHeight[hgi]}px`,
1028
+ transform:
1029
+ `translateX(${columnsTotalSize + (!!fixedWithNumbersCount ? -2 : 0)}px)` +
1030
+ ` translateY(${headerGroupY(hgi)}px)`,
1031
+ }}
1032
+ ></div>
1033
+ )}
1034
+ </Fragment>
1035
+ );
1036
+ })}
1037
+ </div>
1038
+
1039
+ {virtualRows.map((virtualRow) => {
1040
+ const row = rowsFromTable[virtualRow.index];
1041
+
1042
+ return (
1043
+ <div
1044
+ key={`row-${virtualRow.key}`}
1045
+ data-index={virtualRow.index}
1046
+ ref={dynamicRowHeight ? rowVirtualizer.measureElement : undefined}
1047
+ className={classnames(
1048
+ styles.tr,
1049
+ stripedRows && virtualRow.index % 2 !== 0 && styles.evenRow,
1050
+ (row.original?.isNew?.value === 1 || selectedIndexes.has(virtualRow.index)) && styles.selected,
1051
+ )}
1052
+ style={{
1053
+ zIndex: rowZIndexByIndex.get(virtualRow.index) ?? 1,
1054
+ ...(!dynamicRowHeight && {
1055
+ height: virtualRow.size,
1056
+ }),
1057
+ transform:
1058
+ `translateY(` +
1059
+ `${summaryHeaderHeight + virtualRow.start - rowVirtualizer.options.scrollMargin}` +
1060
+ `px)`,
1061
+ }}
1062
+ >
1063
+ <div style={{ width: `${before}px` }} />
1064
+
1065
+ {virtualColumns.map((virtualCol) => {
1066
+ const cell = row.getAllCells()[virtualCol.index];
1067
+ const isSticky = cell.column.getIsPinned() === 'left';
1068
+ const currentCell = row.original?.[cell.column.id] as TableCell | undefined;
1069
+ const rowspan = Math.max(1, currentCell?.rowspan ?? 1);
1070
+ const isCoveredByRowspan = isCellCoveredByRowspan(virtualRow.index, cell.column.id);
1071
+ const hasRowspan = rowspan > 1 && !isCoveredByRowspan;
1072
+
1073
+ return (
1074
+ <div
1075
+ key={`cell-${virtualRow.key}-${virtualCol.key}`}
1076
+ data-col-index={virtualCol.index}
1077
+ className={classnames(styles.td, isSticky && styles.sticky)}
1078
+ style={{
1079
+ ...(isSticky && {
1080
+ left: virtualCol.start,
1081
+ marginLeft: virtualCol.index === 0 ? -1 : 0, // чтобы появился левый бордер
1082
+ }),
1083
+ width: `${virtualCol.size}px`,
1084
+ ...(!dynamicRowHeight &&
1085
+ !hasRowspan && {
1086
+ overflow: 'hidden',
1087
+ }),
1088
+ }}
1089
+ data-index={virtualRow.index}
1090
+ >
1091
+ {!isCoveredByRowspan &&
1092
+ (hasRowspan ? (
1093
+ <div
1094
+ className={styles.rowspanContent}
1095
+ style={{
1096
+ height: `${getRowspanHeight(virtualRow.index, rowspan)}px`,
1097
+ backgroundColor: getRowBackgroundColor(row.original, virtualRow.index),
1098
+ }}
1099
+ >
1100
+ {flexRender(cell.column.columnDef.cell, cell.getContext())}
1101
+ </div>
1102
+ ) : (
1103
+ flexRender(cell.column.columnDef.cell, cell.getContext())
1104
+ ))}
1105
+ </div>
1106
+ );
1107
+ })}
1108
+
1109
+ {!!rowButtons && (
1110
+ <div
1111
+ className={classnames(styles.td)}
1112
+ style={{
1113
+ width: `${rowActionWidth}px`,
1114
+ justifyContent: 'flex-start',
1115
+ padding: '4px',
1116
+ ...(!dynamicRowHeight && {
1117
+ overflow: 'hidden',
1118
+ }),
1119
+ }}
1120
+ >
1121
+ {rowButtons?.(row.original)?.map((ab) => (
1122
+ <Fragment key={ab.title}>
1123
+ {ab.template ? (
1124
+ ab.template(ab)
1125
+ ) : (
1126
+ <Tooltip
1127
+ label={ab.title}
1128
+ placement="top"
1129
+ wrapTrigger
1130
+ classes={{ trigger: styles.rowButtonTrigger }}
1131
+ >
1132
+ <Button
1133
+ onClick={() => ab.onClick?.(virtualRow.index, row.original)}
1134
+ componentSize="small"
1135
+ variant="text"
1136
+ icon={ab.icon}
1137
+ ></Button>
1138
+ </Tooltip>
1139
+ )}
1140
+ </Fragment>
1141
+ ))}
1142
+ </div>
1143
+ )}
1144
+
1145
+ <div style={{ width: `${after}px` }} />
1146
+ </div>
1147
+ );
1148
+ })}
1149
+ </div>
1150
+ {borders !== 'none' && (
1151
+ <>
1152
+ <div className={styles.rightBorder} style={{ height: `${rowsTotalSize + summaryHeaderHeight}px` }} />
1153
+ <div className={styles.bottomBorder} style={{ width: `${columnsTotalSize}px` }} />
1154
+ </>
1155
+ )}
1156
+ </div>
1157
+ </div>
1158
+ );
1159
+ });