@ynput/ayon-frontend-shared 0.2.13 → 0.2.15

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 (382) hide show
  1. package/dist/DetailsPanel.cjs.js +8 -0
  2. package/dist/DetailsPanel.cjs.js.map +1 -1
  3. package/dist/DetailsPanel.es.js +8 -0
  4. package/dist/DetailsPanel.es.js.map +1 -1
  5. package/dist/ProjectTreeTable.cjs.js +5 -0
  6. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  7. package/dist/ProjectTreeTable.es.js +5 -0
  8. package/dist/ProjectTreeTable.es.js.map +1 -1
  9. package/dist/Slicer.cjs.js +2 -0
  10. package/dist/Slicer.cjs.js.map +1 -1
  11. package/dist/Slicer.es.js +3 -1
  12. package/dist/Slicer.es.js.map +1 -1
  13. package/dist/_virtual/index.cjs10.js +3 -5
  14. package/dist/_virtual/index.cjs10.js.map +1 -1
  15. package/dist/_virtual/index.cjs7.js +5 -3
  16. package/dist/_virtual/index.cjs7.js.map +1 -1
  17. package/dist/_virtual/index.cjs8.js +4 -4
  18. package/dist/_virtual/index.cjs9.js +4 -4
  19. package/dist/_virtual/index.es10.js +2 -5
  20. package/dist/_virtual/index.es10.js.map +1 -1
  21. package/dist/_virtual/index.es7.js +5 -2
  22. package/dist/_virtual/index.es7.js.map +1 -1
  23. package/dist/_virtual/index.es8.js +4 -4
  24. package/dist/_virtual/index.es9.js +4 -4
  25. package/dist/api.cjs.js +2 -0
  26. package/dist/api.cjs.js.map +1 -1
  27. package/dist/api.es.js +3 -1
  28. package/dist/components.cjs.js +15 -0
  29. package/dist/components.cjs.js.map +1 -1
  30. package/dist/components.es.js +16 -1
  31. package/dist/components.es.js.map +1 -1
  32. package/dist/context.cjs.js +4 -0
  33. package/dist/context.cjs.js.map +1 -1
  34. package/dist/context.es.js +4 -0
  35. package/dist/context.es.js.map +1 -1
  36. package/dist/index.cjs.js +8 -0
  37. package/dist/index.cjs.js.map +1 -1
  38. package/dist/index.es.js +8 -0
  39. package/dist/index.es.js.map +1 -1
  40. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +2 -2
  41. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  42. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  43. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  44. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  45. package/dist/node_modules/remove-accents/index.es.js +1 -1
  46. package/dist/node_modules/vfile/lib/index.cjs.js +1 -1
  47. package/dist/node_modules/vfile/lib/index.es.js +1 -1
  48. package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
  49. package/dist/shared/src/api/generated/actions.es.js.map +1 -1
  50. package/dist/shared/src/api/generated/addons.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/addons.es.js.map +1 -1
  52. package/dist/shared/src/api/generated/anatomy.cjs.js.map +1 -1
  53. package/dist/shared/src/api/generated/anatomy.es.js.map +1 -1
  54. package/dist/shared/src/api/generated/attributes.cjs.js.map +1 -1
  55. package/dist/shared/src/api/generated/attributes.es.js.map +1 -1
  56. package/dist/shared/src/api/generated/configuration.cjs.js.map +1 -1
  57. package/dist/shared/src/api/generated/configuration.es.js.map +1 -1
  58. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  59. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  60. package/dist/shared/src/api/generated/events.cjs.js.map +1 -1
  61. package/dist/shared/src/api/generated/events.es.js.map +1 -1
  62. package/dist/shared/src/api/generated/files.cjs.js +5 -0
  63. package/dist/shared/src/api/generated/files.cjs.js.map +1 -1
  64. package/dist/shared/src/api/generated/files.es.js +5 -0
  65. package/dist/shared/src/api/generated/files.es.js.map +1 -1
  66. package/dist/shared/src/api/generated/operations.cjs.js.map +1 -1
  67. package/dist/shared/src/api/generated/operations.es.js.map +1 -1
  68. package/dist/shared/src/api/generated/projects.cjs.js +16 -0
  69. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  70. package/dist/shared/src/api/generated/projects.es.js +16 -0
  71. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  72. package/dist/shared/src/api/generated/reviewables.cjs.js.map +1 -1
  73. package/dist/shared/src/api/generated/reviewables.es.js.map +1 -1
  74. package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
  75. package/dist/shared/src/api/generated/system.es.js.map +1 -1
  76. package/dist/shared/src/api/generated/tasks.cjs.js +8 -0
  77. package/dist/shared/src/api/generated/tasks.cjs.js.map +1 -1
  78. package/dist/shared/src/api/generated/tasks.es.js +8 -0
  79. package/dist/shared/src/api/generated/tasks.es.js.map +1 -1
  80. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  81. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  82. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +66 -4
  83. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  84. package/dist/shared/src/api/queries/overview/getOverview.es.js +66 -4
  85. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  86. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -0
  87. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  88. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +1 -0
  89. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  90. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js +8 -0
  91. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.cjs.js.map +1 -1
  92. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js +8 -0
  93. package/dist/shared/src/components/EntityThumbnailUploader/EntityThumbnailUploader.es.js.map +1 -1
  94. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +69 -0
  95. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -0
  96. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +69 -0
  97. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -0
  98. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +48 -0
  99. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -0
  100. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +48 -0
  101. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -0
  102. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js +102 -0
  103. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.cjs.js.map +1 -0
  104. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js +102 -0
  105. package/dist/shared/src/components/Powerpack/PowerpackDialog.styled.es.js.map +1 -0
  106. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js +13 -0
  107. package/dist/shared/src/components/Powerpack/PricingLink.cjs.js.map +1 -0
  108. package/dist/shared/src/components/Powerpack/PricingLink.es.js +13 -0
  109. package/dist/shared/src/components/Powerpack/PricingLink.es.js.map +1 -0
  110. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js +4 -10
  111. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.cjs.js.map +1 -1
  112. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js +1 -7
  113. package/dist/shared/src/components/ProjectTableSettings/ColumnsSettings.es.js.map +1 -1
  114. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +5 -1
  115. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  116. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +5 -1
  117. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  118. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js +13 -0
  119. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.cjs.js.map +1 -0
  120. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js +13 -0
  121. package/dist/shared/src/components/ProjectTableSettings/TableSettings.styled.es.js.map +1 -0
  122. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +50 -0
  123. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -0
  124. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +50 -0
  125. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -0
  126. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +8 -0
  127. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  128. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +8 -0
  129. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  130. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +8 -0
  131. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  132. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +8 -0
  133. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  134. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +8 -0
  135. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  136. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +8 -0
  137. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  138. package/dist/shared/src/components/SearchFilter/filterDates.cjs.js +167 -0
  139. package/dist/shared/src/components/SearchFilter/filterDates.cjs.js.map +1 -0
  140. package/dist/shared/src/components/SearchFilter/filterDates.es.js +167 -0
  141. package/dist/shared/src/components/SearchFilter/filterDates.es.js.map +1 -0
  142. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +547 -0
  143. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -0
  144. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +547 -0
  145. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -0
  146. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +6 -2
  147. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  148. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +6 -2
  149. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  150. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +19 -3
  151. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  152. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +20 -4
  153. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  154. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -0
  155. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  156. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +1 -0
  157. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  158. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +8 -0
  159. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  160. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +8 -0
  161. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  162. package/dist/shared/src/containers/Actions/Actions.cjs.js +2 -0
  163. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  164. package/dist/shared/src/containers/Actions/Actions.es.js +2 -0
  165. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  166. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +8 -0
  167. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  168. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +8 -0
  169. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  170. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +8 -0
  171. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  172. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +8 -0
  173. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  174. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +8 -0
  175. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  176. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +8 -0
  177. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  178. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +8 -0
  179. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +8 -0
  181. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  182. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +9 -1
  183. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +9 -1
  185. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  186. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -0
  187. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +1 -0
  189. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  190. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -0
  191. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +1 -0
  193. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  194. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -0
  195. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/Feed/Feed.es.js +1 -0
  197. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  198. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +2 -1
  199. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +2 -1
  201. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  202. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -0
  203. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  204. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +1 -0
  205. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  206. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +5 -1
  207. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  208. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +5 -1
  209. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  210. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.cjs.js.map +1 -1
  211. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.es.js.map +1 -1
  212. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -0
  213. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  214. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +1 -0
  215. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  216. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +22 -11
  217. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  218. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +22 -11
  219. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  220. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js +6 -0
  221. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js.map +1 -1
  222. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js +6 -0
  223. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.styled.es.js.map +1 -1
  224. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js +3 -3
  225. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.cjs.js.map +1 -1
  226. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js +3 -3
  227. package/dist/shared/src/containers/Feed/components/FilesGrid/FilesGrid.es.js.map +1 -1
  228. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -0
  229. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  230. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +1 -0
  231. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  232. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -0
  233. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  234. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +1 -0
  235. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  236. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js +2 -1
  237. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.cjs.js.map +1 -1
  238. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js +2 -1
  239. package/dist/shared/src/containers/Feed/helpers/mergeAnnotationAttachments.es.js.map +1 -1
  240. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +45 -16
  241. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  242. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +45 -16
  243. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  244. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +45 -7
  245. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  246. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +45 -7
  247. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  248. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +202 -0
  249. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -0
  250. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +202 -0
  251. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -0
  252. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +14 -6
  253. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +14 -6
  255. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  256. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js +11 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.cjs.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js +11 -1
  259. package/dist/shared/src/containers/ProjectTreeTable/context/ColumnSettingsContext.es.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js +22 -2
  261. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js +22 -2
  263. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js +116 -0
  265. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.cjs.js.map +1 -0
  266. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js +116 -0
  267. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableModulesContext.es.js.map +1 -0
  268. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js +1 -0
  269. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.cjs.js.map +1 -1
  270. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js +1 -0
  271. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsContext.es.js.map +1 -1
  272. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
  273. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
  274. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +1 -1
  275. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
  276. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +137 -0
  277. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -0
  278. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +137 -0
  279. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -0
  280. package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.cjs.js → useBuildProjectDataTable.cjs.js} +3 -3
  281. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -0
  282. package/dist/shared/src/containers/ProjectTreeTable/hooks/{useOverviewTable.es.js → useBuildProjectDataTable.es.js} +3 -3
  283. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -0
  284. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +39 -19
  285. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  286. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +39 -19
  287. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  288. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js +108 -0
  289. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.cjs.js.map +1 -0
  290. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js +108 -0
  291. package/dist/shared/src/containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js.map +1 -0
  292. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js +29 -0
  293. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.cjs.js.map +1 -0
  294. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js +30 -0
  295. package/dist/shared/src/containers/ProjectTreeTable/widgets/LoadMoreWidget.es.js.map +1 -0
  296. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +8 -0
  297. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  298. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +8 -0
  299. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  300. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js +37 -0
  301. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js.map +1 -0
  302. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js +37 -0
  303. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js.map +1 -0
  304. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -0
  305. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  306. package/dist/shared/src/context/DetailsPanelContext.es.js +1 -0
  307. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  308. package/dist/shared/src/context/PowerpackContext.cjs.js +65 -0
  309. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -0
  310. package/dist/shared/src/context/PowerpackContext.es.js +65 -0
  311. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -0
  312. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -0
  313. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  314. package/dist/shared/src/hooks/useEntityUpdate.es.js +1 -0
  315. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  316. package/dist/shared/src/util/getAttributeIcon.cjs.js +7 -1
  317. package/dist/shared/src/util/getAttributeIcon.cjs.js.map +1 -1
  318. package/dist/shared/src/util/getAttributeIcon.es.js +7 -1
  319. package/dist/shared/src/util/getAttributeIcon.es.js.map +1 -1
  320. package/dist/shared/src/util/getEntityTypeIcon.cjs.js +9 -0
  321. package/dist/shared/src/util/getEntityTypeIcon.cjs.js.map +1 -1
  322. package/dist/shared/src/util/getEntityTypeIcon.es.js +9 -0
  323. package/dist/shared/src/util/getEntityTypeIcon.es.js.map +1 -1
  324. package/dist/types/api/generated/actions.d.ts +3 -2
  325. package/dist/types/api/generated/addons.d.ts +8 -1
  326. package/dist/types/api/generated/anatomy.d.ts +1 -14
  327. package/dist/types/api/generated/attributes.d.ts +4 -2
  328. package/dist/types/api/generated/configuration.d.ts +6 -0
  329. package/dist/types/api/generated/entityLists.d.ts +2 -0
  330. package/dist/types/api/generated/events.d.ts +1 -1
  331. package/dist/types/api/generated/files.d.ts +11 -0
  332. package/dist/types/api/generated/operations.d.ts +1 -1
  333. package/dist/types/api/generated/projects.d.ts +59 -0
  334. package/dist/types/api/generated/reviewables.d.ts +1 -0
  335. package/dist/types/api/generated/system.d.ts +5 -2
  336. package/dist/types/api/generated/tasks.d.ts +48 -9
  337. package/dist/types/api/generated/users.d.ts +1 -4
  338. package/dist/types/api/queries/overview/getOverview.d.ts +350 -482
  339. package/dist/types/api/queries/project/getProject.d.ts +6 -0
  340. package/dist/types/components/Powerpack/PowerpackButton.d.ts +7 -0
  341. package/dist/types/components/Powerpack/PowerpackDialog.d.ts +4 -0
  342. package/dist/types/components/Powerpack/PowerpackDialog.styled.d.ts +8 -0
  343. package/dist/types/components/Powerpack/PricingLink.d.ts +4 -0
  344. package/dist/types/components/Powerpack/index.d.ts +3 -0
  345. package/dist/types/components/ProjectTableSettings/ProjectTableSettings.d.ts +2 -1
  346. package/dist/types/components/ProjectTableSettings/TableSettings.styled.d.ts +1 -0
  347. package/dist/types/components/ProjectTableSettings/TableSettingsFallback.d.ts +10 -0
  348. package/dist/types/components/ProjectTableSettings/index.d.ts +1 -0
  349. package/dist/types/components/SearchFilter/filterDates.d.ts +56 -0
  350. package/dist/types/components/SearchFilter/index.d.ts +2 -0
  351. package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +30 -0
  352. package/dist/types/components/index.d.ts +2 -0
  353. package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.d.ts +1 -1
  354. package/dist/types/containers/Feed/components/CommentInput/hooks/useAnnotationsUpload.d.ts +1 -1
  355. package/dist/types/containers/Feed/components/FileUploadCard/FileUploadCard.d.ts +4 -3
  356. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +5 -1
  357. package/dist/types/containers/ProjectTreeTable/buildTreeTableColumns.d.ts +3 -1
  358. package/dist/types/containers/ProjectTreeTable/components/GroupSettingsFallback.d.ts +11 -0
  359. package/dist/types/containers/ProjectTreeTable/context/ColumnSettingsContext.d.ts +7 -0
  360. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +11 -5
  361. package/dist/types/containers/ProjectTreeTable/context/ProjectTableModulesContext.d.ts +12 -0
  362. package/dist/types/containers/ProjectTreeTable/context/index.d.ts +1 -0
  363. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +25 -0
  364. package/dist/types/containers/ProjectTreeTable/hooks/{useOverviewTable.d.ts → useBuildProjectDataTable.d.ts} +3 -1
  365. package/dist/types/containers/ProjectTreeTable/hooks/useCellContextMenu.d.ts +2 -0
  366. package/dist/types/containers/ProjectTreeTable/hooks/useFolderRelationships.d.ts +1 -1
  367. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +13 -5
  368. package/dist/types/containers/ProjectTreeTable/widgets/GroupHeaderWidget.d.ts +13 -0
  369. package/dist/types/containers/ProjectTreeTable/widgets/LoadMoreWidget.d.ts +8 -0
  370. package/dist/types/containers/ProjectTreeTable/widgets/index.d.ts +1 -0
  371. package/dist/types/containers/Slicer/index.d.ts +1 -0
  372. package/dist/types/containers/Slicer/useFiltersWithHierarchy.d.ts +10 -0
  373. package/dist/types/context/PowerpackContext.d.ts +20 -0
  374. package/dist/types/context/index.d.ts +1 -0
  375. package/dist/types/util/getAttributeIcon.d.ts +1 -1
  376. package/dist/types/util/getEntityTypeIcon.d.ts +1 -0
  377. package/dist/util.cjs.js +1 -0
  378. package/dist/util.cjs.js.map +1 -1
  379. package/dist/util.es.js +2 -1
  380. package/package.json +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.cjs.js.map +0 -1
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useOverviewTable.es.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTreeTable.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, memo, CSSProperties, useState, useCallback } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Column,\n Table,\n Header,\n HeaderGroup,\n RowData,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport HeaderActionButton from './components/HeaderActionButton'\nimport RowDragHandleCellContent from './components/RowDragHandleCellContent' // Added import\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\n\n// Utility function imports\nimport { getCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { createPortal } from 'react-dom'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { UpdateTableEntities } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: UpdateTableEntities\n toggleExpandAll?: ToggleExpandAll\n }\n}\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<TableRow, unknown>): CSSProperties => {\n const isPinned = column.getIsPinned()\n const offset =\n column.id !== ROW_SELECTION_COLUMN_ID && column.id !== DRAG_HANDLE_COLUMN_ID ? -30 : 0\n\n return {\n left: isPinned === 'left' ? `${column.getStart('left') + offset}px` : undefined, // Removed offset\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n width: column.getSize(),\n zIndex: isPinned ? 100 : 0,\n }\n}\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n fetchMoreOnBottomReached: (element: HTMLDivElement | null) => void\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n fetchMoreOnBottomReached,\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnVisibilityUpdater,\n columnPinning,\n columnPinningUpdater,\n columnOrder,\n columnOrderUpdater,\n columnSizing,\n columnSizingUpdater,\n } = useColumnSettingsContext()\n\n const {\n projectInfo,\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n sorting,\n updateSorting,\n showHierarchy,\n } = useProjectTableContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const { statuses = [], folderTypes = [], taskTypes = [], tags = [] } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n }),\n [users, statuses, folderTypes, taskTypes],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n //a check on mount and after a fetch to see if the table is already scrolled to the bottom and immediately needs to fetch more data\n useEffect(() => {\n fetchMoreOnBottomReached(tableContainerRef.current)\n }, [fetchMoreOnBottomReached])\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n attribFields,\n showHierarchy && tableData.length > 0 ? Math.min(tableRowsCount, 50) : 50,\n )\n return { loadingAttrib, loadingRows }\n }, [attribFields, tableData, showHierarchy, tableContainerRef.current])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, readOnly),\n [attribFields, readOnly],\n )\n\n const { updateEntities } = useCellEditing()\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: updateSorting,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningUpdater,\n onColumnSizingChange: columnSizingUpdater,\n onColumnVisibilityChange: columnVisibilityUpdater,\n onColumnOrderChange: columnOrderUpdater,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility,\n columnOrder,\n },\n enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities,\n toggleExpandAll,\n },\n })\n\n const { rows } = table.getRowModel()\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, AttributeEnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={(e) => fetchMoreOnBottomReached(e.currentTarget)}\n {...pt?.container}\n className={clsx('table-container', pt?.container?.className)}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n height: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n\n return (\n <Styled.HeaderCell\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent className={clsx('bold', 'header')}>\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\">\n {/* COLUMN HIDING */}\n {canHide && (\n <HeaderActionButton\n icon=\"visibility_off\"\n selected={!column.getIsVisible()}\n onClick={column.getToggleVisibilityHandler()}\n />\n )}\n {/* COLUMN PINNING */}\n {canPin && (\n <HeaderActionButton\n icon=\"push_pin\"\n selected={header.column.getIsPinned() === 'left'}\n onClick={() => {\n if (header.column.getIsPinned() === 'left') {\n header.column.pin(false)\n } else {\n header.column.pin('left')\n }\n }}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon={'sort'}\n style={{\n transform: (column.getIsSorted() as string) === 'asc' ? 'scaleY(-1)' : undefined,\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n}: TableBodyProps) => {\n const { handleTableBodyContextMenu } = useCellContextMenu({ attribs, onOpenNew })\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n />\n )\n })}\n </tbody>\n )\n\n if (!virtualRows.length) {\n return (\n tableContainerRef.current &&\n createPortal(<EmptyPlaceholder message=\"No items found\" />, tableContainerRef.current)\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n getCellBorderClasses,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n\n return (\n <Styled.TableCell\n {...props}\n tabIndex={0}\n key={cell.id}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n task: cell.row.original.entityType === 'task',\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n height: 40,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n // check we are not clicking on expander\n if ((e.target as HTMLElement).closest('.expander')) return\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n if (cell.column.id === 'name') {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["ROW_SELECTION_COLUMN_ID","useColumnSettingsContext","useProjectTableContext","useMemo","getTableFieldOptions","useRef","useSelectionCellsContext","useEffect","_a","loadingAttrib","generateDummyAttributes","loadingRows","generateLoadingRows","getReadOnlyLists","useCellEditing","buildTreeTableColumns","useReactTable","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","jsx","ClipboardProvider","Styled.TableWrapper","Styled.TableContainer","jsxs","createPortal","DragOverlay","Styled.TR","Styled.TableCell","Icon","getCellId","Fragment","Styled.TableHeader","Styled.ColumnHeader","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.HeaderButtons","Styled.ResizedHandler","usePrefetchFolderTasks","useVirtualizer","useCallback","EmptyPlaceholder","SortableContext","verticalListSortingStrategy","sortable","useSortable","CSS","useSelectedRowsContext","createElement","memo"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTreeTable.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, memo, CSSProperties, useCallback } from 'react' // Added useCallback\nimport { useVirtualizer, VirtualItem, Virtualizer } from '@tanstack/react-virtual'\n// TanStack Table imports\nimport {\n useReactTable,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n filterFns,\n flexRender,\n Row,\n getSortedRowModel,\n Cell,\n Column,\n Table,\n Header,\n HeaderGroup,\n RowData,\n} from '@tanstack/react-table'\n\n// Utility imports\nimport clsx from 'clsx'\n\n// Type imports\nimport type { TableRow } from './types/table'\n\n// Component imports\nimport buildTreeTableColumns, {\n DefaultColumns,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport HeaderActionButton from './components/HeaderActionButton'\nimport RowDragHandleCellContent from './components/RowDragHandleCellContent' // Added import\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\n\n// Context imports\nimport { useCellEditing } from './context/CellEditingContext'\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './context/SelectionCellsContext'\nimport { ClipboardProvider } from './context/ClipboardContext'\nimport { useSelectedRowsContext } from './context/SelectedRowsContext'\nimport { useColumnSettingsContext } from './context/ColumnSettingsContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\n\n// Utility function imports\nimport { getCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { createPortal } from 'react-dom'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { UpdateTableEntities } from './hooks/useUpdateTableData'\n\n// dnd-kit imports\nimport {\n DragOverlay,\n type UniqueIdentifier,\n // Removed: DndContext, KeyboardSensor, MouseSensor, TouchSensor, closestCenter, DragEndEvent, DragStartEvent, Active, Over, useSensor, useSensors\n} from '@dnd-kit/core'\n// import { restrictToVerticalAxis } from '@dnd-kit/modifiers'\nimport { SortableContext, verticalListSortingStrategy, useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\nimport useBuildGroupByTableData, { GroupByEntityType } from './hooks/useBuildGroupByTableData'\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: UpdateTableEntities\n toggleExpandAll?: ToggleExpandAll\n }\n}\n\n//These are the important styles to make sticky column pinning work!\n//Apply styles like this using your CSS strategy of choice with this kind of logic to head cells, data cells, footer cells, etc.\n//View the index.css file for more needed styles such as border-collapse: separate\nconst getCommonPinningStyles = (column: Column<TableRow, unknown>): CSSProperties => {\n const isPinned = column.getIsPinned()\n const offset =\n column.id !== ROW_SELECTION_COLUMN_ID && column.id !== DRAG_HANDLE_COLUMN_ID ? -30 : 0\n\n return {\n left: isPinned === 'left' ? `${column.getStart('left') + offset}px` : undefined, // Removed offset\n right: isPinned === 'right' ? `${column.getAfter('right')}px` : undefined,\n position: isPinned ? 'sticky' : 'relative',\n width: column.getSize(),\n zIndex: isPinned ? 100 : 0,\n }\n}\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n fetchMoreOnBottomReached: (element: HTMLDivElement | null) => void\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n fetchMoreOnBottomReached,\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n groupByConfig,\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnVisibilityUpdater,\n columnPinning,\n columnPinningUpdater,\n columnOrder,\n columnOrderUpdater,\n columnSizing,\n columnSizingUpdater,\n groupBy,\n } = useColumnSettingsContext()\n\n const {\n projectInfo,\n tableData: defaultTableData,\n taskGroups,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n sorting,\n updateSorting,\n showHierarchy,\n fetchNextPage,\n } = useProjectTableContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType,\n groups: taskGroups,\n project: projectInfo,\n })\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groupByConfig?.entityType],\n )\n\n const tableData = groupedTableData ? groupedTableData : defaultTableData\n\n const isLoading = isLoadingProp || isLoadingData\n\n const { statuses = [], folderTypes = [], taskTypes = [], tags = [] } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n tags,\n }),\n [users, statuses, folderTypes, taskTypes],\n )\n\n //The virtualizer needs to know the scrollable container element\n const tableContainerRef = useRef<HTMLDivElement>(null)\n // reference of how many rows are currently rendered in the table\n const tableRowsCountRef = useRef(0)\n\n // Selection context\n const { registerGrid } = useSelectionCellsContext()\n\n // generate loading attrib and rows\n const { loadingAttrib, loadingRows } = useMemo(() => {\n // count the number of children in tbody\n const tableRowsCount = tableContainerRef.current?.querySelectorAll('tbody tr').length || 0\n const loadingAttrib = generateDummyAttributes()\n const loadingRows = generateLoadingRows(\n attribFields,\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, readOnly),\n [attribFields, readOnly],\n )\n\n const { updateEntities } = useCellEditing()\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n groupBy,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n const table = useReactTable({\n data: showLoadingRows ? loadingRows : tableData,\n columns,\n defaultColumn: {\n minSize: 50,\n size: 150,\n },\n enableRowSelection: true, //enable row selection for all rows\n getRowId: (row) => row.id,\n enableSubRowSelection: false, //disable sub row selection\n getSubRows: (row) => row.subRows,\n getRowCanExpand: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: updateSorting,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningUpdater,\n onColumnSizingChange: columnSizingUpdater,\n onColumnVisibilityChange: columnVisibilityUpdater,\n onColumnOrderChange: columnOrderUpdater,\n // @ts-ignore\n filterFns,\n state: {\n expanded,\n sorting,\n columnPinning: (() => {\n const leftPins: string[] = []\n if (sortableRows) {\n leftPins.push(DRAG_HANDLE_COLUMN_ID)\n }\n leftPins.push(ROW_SELECTION_COLUMN_ID)\n\n // Add other unique pins from context, ensuring they are not the programmatic ones\n const contextLeftPins = (columnPinning.left || []).filter(\n (id) => id !== DRAG_HANDLE_COLUMN_ID && id !== ROW_SELECTION_COLUMN_ID,\n )\n leftPins.push(...contextLeftPins)\n // Remove duplicates just in case, though filter should handle it\n const uniqueLeftPins = [...new Set(leftPins)]\n\n return {\n left: uniqueLeftPins,\n right: columnPinning.right,\n }\n })(),\n columnSizing,\n columnVisibility,\n columnOrder,\n },\n enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities,\n toggleExpandAll,\n loadMoreTasks: fetchNextPage,\n },\n })\n\n // TODO: when there is data (like in error) then we have infinite rendering\n\n const { rows } = table.getRowModel()\n\n // update the tableRowsCountRef with the current number of rows\n useEffect(() => {\n tableRowsCountRef.current = rows.length\n }, [rows.length])\n\n // Register grid structure with selection context when rows or columns change\n useEffect(() => {\n if (!rows.length) return\n const rowIds = rows.map((row) => row.id)\n const colIds = table.getAllLeafColumns().map((col) => col.id)\n const colIdsSortedByPinning = [...colIds].sort((a, b) => {\n if (ROW_SELECTION_COLUMN_ID === b) return 1\n const colA = columnPinning.left?.includes(a) ? 0 : 1\n const colB = columnPinning.left?.includes(b) ? 0 : 1\n return colA - colB\n })\n\n registerGrid(rowIds, colIdsSortedByPinning)\n }, [rows, table.getAllLeafColumns(), columnPinning, ROW_SELECTION_COLUMN_ID, registerGrid])\n\n const visibleColumns = table.getVisibleLeafColumns()\n\n // Use the column virtualization hook\n const { columnVirtualizer, virtualPaddingLeft, virtualPaddingRight } = useColumnVirtualization({\n visibleColumns,\n tableContainerRef,\n columnPinning,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n const attribByField = useMemo(() => {\n return attribFields.reduce((acc: Record<string, AttributeEnumItem[]>, attrib) => {\n if (attrib.data?.enum?.length) {\n acc[attrib.name] = attrib.data?.enum\n }\n return acc\n }, {})\n }, [attribFields])\n\n const rowOrderIds = useMemo(() => tableData.map((row) => row.id), [tableData])\n const draggedRowData = useMemo(() => {\n if (!dndActiveId || !sortableRows) return null // Use dndActiveId\n return tableData.find((r) => r.id === dndActiveId) // Use dndActiveId\n }, [dndActiveId, tableData, sortableRows])\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={(e) => fetchMoreOnBottomReached(e.currentTarget)}\n {...pt?.container}\n className={clsx('table-container', pt?.container?.className)}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n }}\n >\n <TableHead\n columnVirtualizer={columnVirtualizer}\n table={table}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n {...pt?.head}\n />\n <TableBody\n columnVirtualizer={columnVirtualizer}\n table={table}\n tableContainerRef={tableContainerRef}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n showHierarchy={showHierarchy}\n attribs={attribFields}\n onOpenNew={onOpenNew}\n rowOrderIds={rowOrderIds}\n sortableRows={sortableRows}\n error={error}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n </ClipboardProvider>\n )\n\n // Render DragOverlay if sortableRows and dndActiveId is present\n const dragOverlayPortal =\n sortableRows &&\n dndActiveId &&\n createPortal(\n <DragOverlay dropAnimation={null}>\n {draggedRowData\n ? (() => {\n const overlayRowInstance = table.getRowModel().rows.find((r) => r.id === dndActiveId)\n if (!overlayRowInstance) return null\n\n const tableWidth = table.getTotalSize()\n\n return (\n <table\n style={{\n width: tableWidth,\n borderCollapse: 'collapse',\n backgroundColor: 'var(--md-sys-color-surface-container-high)',\n boxShadow: '0 0 10px rgba(0,0,0,0.2)',\n ...columnSizeVars,\n }}\n >\n <tbody>\n <Styled.TR style={{ display: 'flex', userSelect: 'none' }}>\n {virtualPaddingLeft ? (\n <td style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {columnVirtualizer.getVirtualItems().map((vc) => {\n const cell = overlayRowInstance.getVisibleCells()[vc.index]\n if (!cell) return null\n\n const cellStyleBase: CSSProperties = {\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n height: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n\n return (\n <Styled.HeaderCell\n className={clsx(header.id, 'shimmer-dark', {\n loading: isLoading,\n 'last-pinned-left': column.getIsPinned() === 'left' && column.getIsLastColumn('left'),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: `calc(var(--header-${header?.id}-size) * 1px)`,\n }}\n >\n {header.isPlaceholder ? null : (\n <Styled.TableCellContent className={clsx('bold', 'header')}>\n {flexRender(column.columnDef.header, header.getContext())}\n {isReadOnly && (\n <Icon icon=\"lock\" data-tooltip={'You only have permission to read this column.'} />\n )}\n\n <Styled.HeaderButtons className=\"actions\">\n {/* COLUMN HIDING */}\n {canHide && (\n <HeaderActionButton\n icon=\"visibility_off\"\n selected={!column.getIsVisible()}\n onClick={column.getToggleVisibilityHandler()}\n />\n )}\n {/* COLUMN PINNING */}\n {canPin && (\n <HeaderActionButton\n icon=\"push_pin\"\n selected={header.column.getIsPinned() === 'left'}\n onClick={() => {\n if (header.column.getIsPinned() === 'left') {\n header.column.pin(false)\n } else {\n header.column.pin('left')\n }\n }}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon={'sort'}\n style={{\n transform: (column.getIsSorted() as string) === 'asc' ? 'scaleY(-1)' : undefined,\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n error?: string\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n}: TableBodyProps) => {\n const { handleTableBodyContextMenu } = useCellContextMenu({ attribs, onOpenNew })\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow) => {\n const row = rows[virtualRow.index] as Row<TableRow>\n // Add a check for row existence to prevent potential errors if data is out of sync\n if (!row) {\n console.warn('Virtualized row data not found for index:', virtualRow.index)\n return null\n }\n return (\n <TableBodyRow\n key={row.id} // dnd-kit needs this key to be stable and match the id in useSortable\n row={row}\n showHierarchy={showHierarchy}\n visibleCells={row.getVisibleCells()}\n virtualColumns={columnVirtualizer.getVirtualItems()}\n paddingLeft={virtualPaddingLeft}\n paddingRight={virtualPaddingRight}\n rowRef={measureRowElement}\n dataIndex={virtualRow.index}\n offsetTop={virtualRow.start}\n sortableRows={sortableRows}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <EmptyPlaceholder message=\"No items found\" error={error} />,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n >\n {paddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingLeft }} />\n ) : null}\n {virtualColumns.map((vc) => {\n const cell = visibleCells[vc.index]\n if (!cell) return null // Should not happen in normal circumstances\n\n const cellId = getCellId(row.id, cell.column.id)\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={cell.id}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n getCellBorderClasses,\n clearSelection,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n const isGroup = cell.row.original.entityType === 'group'\n\n return (\n <Styled.TableCell\n {...props}\n tabIndex={0}\n key={cell.id}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n task: cell.row.original.entityType === 'task',\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: `calc(var(--col-${cell.column.id}-size) * 1px)`,\n height: 40,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n // check we are not clicking on expander\n if ((e.target as HTMLElement).closest('.expander')) return\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n if (\n cell.column.id === 'name' &&\n !(e.target as HTMLElement).closest('.expander') &&\n !isGroup\n ) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["ROW_SELECTION_COLUMN_ID","useColumnSettingsContext","useProjectTableContext","useBuildGroupByTableData","useMemo","getTableFieldOptions","useRef","useSelectionCellsContext","_a","loadingAttrib","generateDummyAttributes","loadingRows","generateLoadingRows","getReadOnlyLists","useCellEditing","buildTreeTableColumns","useReactTable","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","useEffect","jsx","ClipboardProvider","Styled.TableWrapper","Styled.TableContainer","jsxs","createPortal","DragOverlay","Styled.TR","Styled.TableCell","Icon","getCellId","Fragment","Styled.TableHeader","Styled.ColumnHeader","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.HeaderButtons","Styled.ResizedHandler","usePrefetchFolderTasks","useVirtualizer","useCallback","EmptyPlaceholder","SortableContext","verticalListSortingStrategy","sortable","useSortable","CSS","useSelectedRowsContext","createElement","memo"],"mappings":"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"}
@@ -29,6 +29,7 @@ import { getReadOnlyLists } from "./utils/getReadOnlyLists.es.js";
29
29
  import { DragOverlay } from "@dnd-kit/core";
30
30
  import { SortableContext, verticalListSortingStrategy, useSortable } from "@dnd-kit/sortable";
31
31
  import { CSS } from "../../../../node_modules/@dnd-kit/utilities/dist/utilities.esm.es.js";
32
+ import useBuildGroupByTableData from "./hooks/useBuildGroupByTableData.es.js";
32
33
  const getCommonPinningStyles = (column) => {
33
34
  const isPinned = column.getIsPinned();
34
35
  const offset = column.id !== ROW_SELECTION_COLUMN_ID && column.id !== DRAG_HANDLE_COLUMN_ID ? -30 : 0;
@@ -56,6 +57,7 @@ const ProjectTreeTable = ({
56
57
  onRowReorder,
57
58
  dndActiveId,
58
59
  // Destructure new prop
60
+ groupByConfig,
59
61
  pt,
60
62
  ...props
61
63
  }) => {
@@ -68,15 +70,18 @@ const ProjectTreeTable = ({
68
70
  columnOrder,
69
71
  columnOrderUpdater,
70
72
  columnSizing,
71
- columnSizingUpdater
73
+ columnSizingUpdater,
74
+ groupBy
72
75
  } = useColumnSettingsContext();
73
76
  const {
74
77
  projectInfo,
75
- tableData,
78
+ tableData: defaultTableData,
79
+ taskGroups,
76
80
  attribFields,
77
81
  entitiesMap,
78
82
  users,
79
83
  isLoading: isLoadingData,
84
+ error,
80
85
  isInitialized,
81
86
  expanded,
82
87
  projectName,
@@ -84,8 +89,20 @@ const ProjectTreeTable = ({
84
89
  toggleExpandAll,
85
90
  sorting,
86
91
  updateSorting,
87
- showHierarchy
92
+ showHierarchy,
93
+ fetchNextPage
88
94
  } = useProjectTableContext();
95
+ const buildGroupByTableData = useBuildGroupByTableData({
96
+ entities: entitiesMap,
97
+ entityType: groupByConfig == null ? void 0 : groupByConfig.entityType,
98
+ groups: taskGroups,
99
+ project: projectInfo
100
+ });
101
+ const groupedTableData = useMemo(
102
+ () => !!groupBy && buildGroupByTableData(groupBy),
103
+ [groupBy, entitiesMap, groupByConfig == null ? void 0 : groupByConfig.entityType]
104
+ );
105
+ const tableData = groupedTableData ? groupedTableData : defaultTableData;
89
106
  const isLoading = isLoadingProp || isLoadingData;
90
107
  const { statuses = [], folderTypes = [], taskTypes = [], tags = [] } = projectInfo || {};
91
108
  const options = useMemo(
@@ -99,20 +116,18 @@ const ProjectTreeTable = ({
99
116
  [users, statuses, folderTypes, taskTypes]
100
117
  );
101
118
  const tableContainerRef = useRef(null);
119
+ const tableRowsCountRef = useRef(0);
102
120
  const { registerGrid } = useSelectionCellsContext();
103
- useEffect(() => {
104
- fetchMoreOnBottomReached(tableContainerRef.current);
105
- }, [fetchMoreOnBottomReached]);
106
121
  const { loadingAttrib, loadingRows } = useMemo(() => {
107
122
  var _a2;
108
123
  const tableRowsCount = ((_a2 = tableContainerRef.current) == null ? void 0 : _a2.querySelectorAll("tbody tr").length) || 0;
109
124
  const loadingAttrib2 = generateDummyAttributes();
110
125
  const loadingRows2 = generateLoadingRows(
111
126
  attribFields,
112
- showHierarchy && tableData.length > 0 ? Math.min(tableRowsCount, 50) : 50
127
+ showHierarchy && tableData.length > 0 ? Math.min(tableRowsCount, 50) : groupBy ? Math.max(tableRowsCountRef.current, 50) : 50
113
128
  );
114
129
  return { loadingAttrib: loadingAttrib2, loadingRows: loadingRows2 };
115
- }, [attribFields, tableData, showHierarchy, tableContainerRef.current]);
130
+ }, []);
116
131
  const showLoadingRows = !isInitialized || isLoading;
117
132
  const { readOnlyColumns, readOnlyAttribs } = useMemo(
118
133
  () => getReadOnlyLists(attribFields, readOnly),
@@ -129,7 +144,8 @@ const ProjectTreeTable = ({
129
144
  showHierarchy,
130
145
  options,
131
146
  extraColumns,
132
- excluded: excludedColumns
147
+ excluded: excludedColumns,
148
+ groupBy
133
149
  });
134
150
  if (sortableRows) {
135
151
  return [
@@ -211,11 +227,16 @@ const ProjectTreeTable = ({
211
227
  options,
212
228
  readOnly: readOnlyColumns,
213
229
  updateEntities,
214
- toggleExpandAll
230
+ toggleExpandAll,
231
+ loadMoreTasks: fetchNextPage
215
232
  }
216
233
  });
217
234
  const { rows } = table.getRowModel();
218
235
  useEffect(() => {
236
+ tableRowsCountRef.current = rows.length;
237
+ }, [rows.length]);
238
+ useEffect(() => {
239
+ if (!rows.length) return;
219
240
  const rowIds = rows.map((row) => row.id);
220
241
  const colIds = table.getAllLeafColumns().map((col) => col.id);
221
242
  const colIdsSortedByPinning = [...colIds].sort((a, b) => {
@@ -298,7 +319,8 @@ const ProjectTreeTable = ({
298
319
  attribs: attribFields,
299
320
  onOpenNew,
300
321
  rowOrderIds,
301
- sortableRows
322
+ sortableRows,
323
+ error
302
324
  }
303
325
  )
304
326
  ]
@@ -528,7 +550,8 @@ const TableBody = ({
528
550
  attribs,
529
551
  onOpenNew,
530
552
  rowOrderIds,
531
- sortableRows
553
+ sortableRows,
554
+ error
532
555
  }) => {
533
556
  const { handleTableBodyContextMenu } = useCellContextMenu({ attribs, onOpenNew });
534
557
  const { handlePreFetchTasks } = usePrefetchFolderTasks();
@@ -589,8 +612,11 @@ const TableBody = ({
589
612
  })
590
613
  }
591
614
  );
592
- if (!virtualRows.length) {
593
- return tableContainerRef.current && createPortal(/* @__PURE__ */ jsxRuntimeExports.jsx(EmptyPlaceholder, { message: "No items found" }), tableContainerRef.current);
615
+ if (error) {
616
+ return tableContainerRef.current && createPortal(
617
+ /* @__PURE__ */ jsxRuntimeExports.jsx(EmptyPlaceholder, { message: "No items found", error }),
618
+ tableContainerRef.current
619
+ );
594
620
  }
595
621
  if (sortableRows) {
596
622
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SortableContext, { items: rowOrderIds, strategy: verticalListSortingStrategy, children: tbodyContent });
@@ -727,7 +753,8 @@ const TableCell = ({
727
753
  extendSelection,
728
754
  endSelection,
729
755
  selectCell,
730
- getCellBorderClasses
756
+ getCellBorderClasses,
757
+ clearSelection
731
758
  } = useSelectionCellsContext();
732
759
  const { isRowSelected } = useSelectedRowsContext();
733
760
  const { isEditing } = useCellEditing();
@@ -735,6 +762,7 @@ const TableCell = ({
735
762
  const isPinned = cell.column.getIsPinned();
736
763
  const isLastLeftPinnedColumn = isPinned === "left" && cell.column.getIsLastColumn("left");
737
764
  const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID;
765
+ const isGroup = cell.row.original.entityType === "group";
738
766
  return /* @__PURE__ */ createElement(
739
767
  TableCell$1,
740
768
  {
@@ -763,6 +791,7 @@ const TableCell = ({
763
791
  onMouseDown: (e) => {
764
792
  if (e.button !== 0) return;
765
793
  if (e.target.closest(".expander")) return;
794
+ if (isGroup && cell.column.id !== "name") return clearSelection();
766
795
  const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn;
767
796
  if (e.shiftKey) {
768
797
  selectCell(cellId, additive, true);
@@ -779,7 +808,7 @@ const TableCell = ({
779
808
  endSelection(cellId);
780
809
  },
781
810
  onDoubleClick: (e) => {
782
- if (cell.column.id === "name") {
811
+ if (cell.column.id === "name" && !e.target.closest(".expander") && !isGroup) {
783
812
  const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID);
784
813
  if (!isCellSelected(rowSelectionCellId)) {
785
814
  const additive = e.metaKey || e.ctrlKey;