@ynput/ayon-frontend-shared 0.2.45 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +72 -65
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +104 -102
  6. package/dist/Slicer.cjs.js +1 -1
  7. package/dist/Slicer.es.js +113 -4
  8. package/dist/Slicer.es.js.map +1 -1
  9. package/dist/Views.cjs.js.map +1 -1
  10. package/dist/Views.es.js.map +1 -1
  11. package/dist/_virtual/index.cjs10.js +1 -1
  12. package/dist/_virtual/index.cjs11.js +1 -1
  13. package/dist/_virtual/index.cjs12.js +1 -1
  14. package/dist/_virtual/index.es10.js +3 -3
  15. package/dist/_virtual/index.es11.js +5 -5
  16. package/dist/_virtual/index.es12.js +5 -5
  17. package/dist/components.cjs.js +1 -1
  18. package/dist/components.es.js +141 -139
  19. package/dist/components.es.js.map +1 -1
  20. package/dist/index.cjs.js +1 -1
  21. package/dist/index.es.js +61 -54
  22. package/dist/index.es.js.map +1 -1
  23. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.cjs.js +5 -5
  24. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.cjs.js.map +1 -1
  25. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.es.js +313 -305
  26. package/dist/node_modules/@reduxjs/toolkit/dist/query/rtk-query.modern.es.js.map +1 -1
  27. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  28. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  29. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  30. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  31. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  32. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  33. package/dist/shared/src/api/queries/views/updateViews.cjs.js +1 -1
  34. package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
  35. package/dist/shared/src/api/queries/views/updateViews.es.js +1 -1
  36. package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
  37. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  38. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  39. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +57 -50
  40. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  41. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  42. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  43. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +45 -38
  44. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  45. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  46. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  47. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +47 -40
  48. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  49. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  50. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  51. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +49 -42
  52. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  53. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  54. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  55. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +44 -37
  56. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  57. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  58. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  59. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +48 -41
  60. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  61. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +2 -0
  62. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -0
  63. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +279 -0
  64. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -0
  65. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  66. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  67. package/dist/shared/src/components/RenameForm/RenameForm.es.js +48 -41
  68. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  69. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  70. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  71. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +64 -57
  72. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  73. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  74. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  75. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +54 -47
  76. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  77. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  78. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  79. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +53 -46
  80. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  81. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  82. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  83. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +52 -45
  84. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  85. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +2 -2
  86. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  87. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +56 -49
  88. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  89. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  90. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  91. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +53 -46
  92. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  93. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  94. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  95. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +54 -47
  96. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  97. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  98. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  99. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +70 -63
  100. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  101. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  102. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  103. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +49 -42
  104. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  105. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  106. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  107. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +68 -61
  108. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  109. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  110. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  111. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +93 -86
  112. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  113. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  114. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  115. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +47 -40
  116. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  117. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  118. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  119. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +46 -43
  120. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  121. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  122. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  123. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +49 -46
  124. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  125. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  126. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  127. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +49 -46
  128. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  129. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  130. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  131. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +49 -46
  132. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  133. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  134. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  135. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +50 -42
  136. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  137. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +1 -1
  138. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -1
  139. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +55 -48
  140. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -1
  141. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
  142. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  143. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +70 -63
  144. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  145. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  146. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  147. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +47 -40
  148. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  149. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  150. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  151. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +468 -448
  152. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  153. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  154. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  155. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +96 -89
  156. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  157. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  158. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  159. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +47 -40
  160. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  161. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  162. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  163. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +57 -50
  164. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  165. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  166. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  167. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +54 -47
  168. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  169. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  170. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  171. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  172. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  173. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +63 -68
  174. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  175. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  176. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  177. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +49 -41
  178. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  179. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  180. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  181. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +51 -44
  182. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  183. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  184. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  185. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +48 -41
  186. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  187. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  188. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  189. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +55 -48
  190. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  191. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  192. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  193. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +54 -47
  194. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  195. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  196. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  197. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +51 -44
  198. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  199. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  200. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  201. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +51 -44
  202. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  203. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  204. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  205. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +51 -44
  206. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  207. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  208. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  209. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +54 -47
  210. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  211. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  212. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  213. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +46 -39
  214. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  215. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  216. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  217. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +46 -39
  218. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  219. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  220. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  221. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +48 -41
  222. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  223. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  224. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  225. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +62 -55
  226. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  227. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.cjs.js +1 -1
  228. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.cjs.js.map +1 -1
  229. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.es.js +11 -6
  230. package/dist/shared/src/containers/ProjectTreeTable/utils/restrictedEntity.es.js.map +1 -1
  231. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +2 -2
  232. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
  233. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +16 -13
  234. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
  235. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  236. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  237. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +342 -116
  238. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  239. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js +2 -2
  240. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js.map +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js +47 -40
  242. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js.map +1 -1
  243. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -2
  244. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +7 -7
  246. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  247. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  248. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +69 -62
  250. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  251. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  252. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  253. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +51 -44
  254. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  255. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js +2 -2
  256. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js.map +1 -1
  257. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js +29 -33
  258. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js.map +1 -1
  259. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  260. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  261. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +118 -111
  262. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  263. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  264. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  265. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +49 -46
  266. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  267. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js +2 -0
  268. package/dist/shared/src/containers/Slicer/components/Slicer.cjs.js.map +1 -0
  269. package/dist/shared/src/containers/Slicer/components/Slicer.es.js +82 -0
  270. package/dist/shared/src/containers/Slicer/components/Slicer.es.js.map +1 -0
  271. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js +27 -0
  272. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.cjs.js.map +1 -0
  273. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js +71 -0
  274. package/dist/shared/src/containers/Slicer/components/SlicerDropdownFallback.es.js.map +1 -0
  275. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js +10 -0
  276. package/dist/shared/src/containers/Slicer/components/SlicerSearch.cjs.js.map +1 -0
  277. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js +294 -0
  278. package/dist/shared/src/containers/Slicer/components/SlicerSearch.es.js.map +1 -0
  279. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js +2 -0
  280. package/dist/shared/src/containers/Slicer/context/SlicerContext.cjs.js.map +1 -0
  281. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js +215 -0
  282. package/dist/shared/src/containers/Slicer/context/SlicerContext.es.js.map +1 -0
  283. package/dist/shared/src/containers/Slicer/hooks/useFiltersWithHierarchy.cjs.js.map +1 -0
  284. package/dist/shared/src/containers/Slicer/hooks/useFiltersWithHierarchy.es.js.map +1 -0
  285. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js +2 -0
  286. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.cjs.js.map +1 -0
  287. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js +25 -0
  288. package/dist/shared/src/containers/Slicer/hooks/useProjectAnatomySlices.es.js.map +1 -0
  289. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js +2 -0
  290. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.cjs.js.map +1 -0
  291. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js +28 -0
  292. package/dist/shared/src/containers/Slicer/hooks/useSlicerAttributesData.es.js.map +1 -0
  293. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js +2 -0
  294. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.cjs.js.map +1 -0
  295. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js +304 -0
  296. package/dist/shared/src/containers/Slicer/hooks/useTableDataBySlice.es.js.map +1 -0
  297. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.cjs.js +2 -0
  298. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.cjs.js.map +1 -0
  299. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.es.js +99 -0
  300. package/dist/shared/src/containers/Slicer/hooks/useUsersTable.es.js.map +1 -0
  301. package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.cjs.js.map +1 -0
  302. package/dist/shared/src/containers/Slicer/util/createFilterFromSlicer.es.js.map +1 -0
  303. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
  304. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
  305. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +95 -88
  306. package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
  307. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  308. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  309. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +32 -31
  310. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  311. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  312. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  313. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +125 -121
  314. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  315. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js +1 -1
  316. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.cjs.js.map +1 -1
  317. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js +47 -49
  318. package/dist/shared/src/containers/Views/hooks/pages/useOverviewViewSettings.es.js.map +1 -1
  319. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  320. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  321. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +6 -5
  322. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  323. package/dist/shared/src/context/AddonContext.cjs.js.map +1 -1
  324. package/dist/shared/src/context/AddonContext.es.js.map +1 -1
  325. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  326. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  327. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  328. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  329. package/dist/shared/src/context/WebsocketContext.es.js +51 -44
  330. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  331. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  332. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  333. package/dist/shared/src/hooks/useLoadModules.cjs.js +1 -1
  334. package/dist/shared/src/hooks/useLoadModules.cjs.js.map +1 -1
  335. package/dist/shared/src/hooks/useLoadModules.es.js +7 -7
  336. package/dist/shared/src/hooks/useLoadModules.es.js.map +1 -1
  337. package/dist/shared/src/util/columnConfigConverter.cjs.js +1 -1
  338. package/dist/shared/src/util/columnConfigConverter.cjs.js.map +1 -1
  339. package/dist/shared/src/util/columnConfigConverter.es.js +69 -46
  340. package/dist/shared/src/util/columnConfigConverter.es.js.map +1 -1
  341. package/dist/shared/src/util/getGroupByDataType.cjs.js +1 -1
  342. package/dist/shared/src/util/getGroupByDataType.cjs.js.map +1 -1
  343. package/dist/shared/src/util/getGroupByDataType.es.js +4 -4
  344. package/dist/shared/src/util/getGroupByDataType.es.js.map +1 -1
  345. package/dist/types/api/queries/activities/getActivities.d.ts +1 -1
  346. package/dist/types/api/queries/entityLists/getLists.d.ts +183 -183
  347. package/dist/types/api/queries/links/getLinks.d.ts +1 -1
  348. package/dist/types/api/queries/overview/getOverview.d.ts +1 -1
  349. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +2 -2
  350. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +28 -0
  351. package/dist/types/components/RemotePage/index.d.ts +1 -0
  352. package/dist/types/components/index.d.ts +31 -30
  353. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -2
  354. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +1 -4
  355. package/dist/types/containers/ProjectTreeTable/utils/restrictedEntity.d.ts +3 -3
  356. package/dist/types/containers/Slicer/components/Slicer.d.ts +9 -0
  357. package/dist/types/containers/Slicer/components/SlicerDropdownFallback.d.ts +7 -0
  358. package/dist/types/containers/Slicer/components/SlicerSearch.d.ts +6 -0
  359. package/dist/types/containers/Slicer/context/SlicerContext.d.ts +48 -0
  360. package/dist/types/containers/Slicer/hooks/index.d.ts +5 -0
  361. package/dist/types/containers/Slicer/{useFiltersWithHierarchy.d.ts → hooks/useFiltersWithHierarchy.d.ts} +1 -1
  362. package/dist/types/containers/Slicer/hooks/useProjectAnatomySlices.d.ts +51 -0
  363. package/dist/types/containers/Slicer/hooks/useSlicerAttributesData.d.ts +7 -0
  364. package/dist/types/containers/Slicer/hooks/useTableDataBySlice.d.ts +8 -0
  365. package/dist/types/containers/Slicer/hooks/useUsersTable.d.ts +10 -0
  366. package/dist/types/containers/Slicer/index.d.ts +4 -2
  367. package/dist/types/containers/Slicer/types.d.ts +35 -0
  368. package/dist/types/containers/Slicer/{createFilterFromSlicer.d.ts → util/createFilterFromSlicer.d.ts} +2 -2
  369. package/dist/types/containers/Slicer/util/index.d.ts +1 -0
  370. package/dist/types/containers/Views/ViewsMenuContainer/BaseViewsTags.d.ts +4 -1
  371. package/dist/types/containers/Views/hooks/pages/useOverviewViewSettings.d.ts +7 -1
  372. package/dist/types/containers/Views/index.d.ts +1 -1
  373. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +1 -1
  374. package/dist/types/context/AddonContext.d.ts +10 -2
  375. package/dist/types/context/AddonProjectContext.d.ts +7 -12
  376. package/dist/types/hooks/useGroupByRemoteModules.d.ts +2 -1
  377. package/package.json +1 -1
  378. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.cjs.js.map +0 -1
  379. package/dist/shared/src/containers/Slicer/createFilterFromSlicer.es.js.map +0 -1
  380. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.cjs.js.map +0 -1
  381. package/dist/shared/src/containers/Slicer/useFiltersWithHierarchy.es.js.map +0 -1
  382. /package/dist/shared/src/containers/Slicer/{useFiltersWithHierarchy.cjs.js → hooks/useFiltersWithHierarchy.cjs.js} +0 -0
  383. /package/dist/shared/src/containers/Slicer/{useFiltersWithHierarchy.es.js → hooks/useFiltersWithHierarchy.es.js} +0 -0
  384. /package/dist/shared/src/containers/Slicer/{createFilterFromSlicer.cjs.js → util/createFilterFromSlicer.cjs.js} +0 -0
  385. /package/dist/shared/src/containers/Slicer/{createFilterFromSlicer.es.js → util/createFilterFromSlicer.es.js} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../../_virtual/jsx-runtime.cjs.js"),x=require("react"),Rr=require("@tanstack/react-virtual"),H=require("@tanstack/react-table"),z=require("clsx"),Be=require("./buildTreeTableColumns.cjs.js"),j=require("./ProjectTreeTable.styled.cjs.js"),Er=require("./components/HeaderActionButton.cjs.js"),jr=require("./components/RowDragHandleCellContent.cjs.js");require("./components/RowSelectionHeader.cjs.js");require("./components/SelectionCell.cjs.js");const br=require("./components/ColumnHeaderMenu.cjs.js"),ke=require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const Ue=require("./context/CellEditingContext.cjs.js"),P=require("./context/SelectionCellsContext.cjs.js"),wr=require("./context/ClipboardContext.cjs.js"),Sr=require("./context/SelectedRowsContext.cjs.js"),Tr=require("./context/ColumnSettingsContext.cjs.js"),Mr=require("../../context/MenuContext.cjs.js"),Ir=require("./hooks/useCustomColumnWidthVars.cjs.js"),Or=require("./hooks/usePrefetchFolderTasks.cjs.js"),Pr=require("./hooks/useCellContextMenu.cjs.js"),Dr=require("./hooks/useColumnVirtualization.cjs.js"),Lr=require("./hooks/useKeyboardNavigation.cjs.js"),zr=require("./hooks/useDynamicRowHeight.cjs.js"),vr=require("../EntityPickerDialog/EntityPickerDialog.cjs.js"),Nr=require("./hooks/useMoveEntities.cjs.js");require("../ContextMenu/ContextMenuContext.cjs.js");const se=require("@ynput/ayon-react-components");;/* empty css */const Ce=require("react-dom");require("../Feed/context/FeedContext.cjs.js");require("../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");const _r=require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../Feed/components/CommentInput/CommentInput.cjs.js");require("../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");const Hr=require("lodash");require("../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");const kr=require("react-toastify");require("uuid");require("../../util/pubsub.cjs.js");require("react-router-dom");require("../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../Feed/components/ActivityDate.cjs.js");require("../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");const Ar=require("@dnd-kit/core"),he=require("@dnd-kit/sortable"),Fr=require("../../../../node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs.js");require("../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("axios");require("../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../components/EntityPath/EntityPath.styled.cjs.js");require("../../components/EntityPath/SegmentProvider.cjs.js");require("../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../components/Watchers/Watchers.cjs.js");require("../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../components/Powerpack/PowerpackButton.cjs.js");require("../../components/Powerpack/PricingLink.cjs.js");require("../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../components/Powerpack/CTAButton.cjs.js");require("../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../components/SizeSlider/SizeSlider.cjs.js");require("../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../components/AttributeEditor/components/MinMaxField.cjs.js");require("../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../components/SearchFilter/filterDates.cjs.js");require("../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../components/Badge/Badge.cjs.js");require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../components/Feedback/FeedbackContext.cjs.js");require("../../components/Feedback/SupportBubble.cjs.js");require("../../components/Chips/Chips.cjs.js");require("../../components/LinksManager/LinksManager.styled.cjs.js");require("../../components/StyledLink/StyledLink.cjs.js");require("date-fns");require("../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../components/AccessUser/AccessUser.cjs.js");require("../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../components/Menu/Menu.styled.cjs.js");require("../../components/Menu/MenuItem.cjs.js");require("../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../Feed/Feed.styled.cjs.js");require("../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");const oe=require("./utils/cellUtils.cjs.js"),Ae=require("./utils/loadingUtils.cjs.js"),Fe=require("./utils/restrictedEntity.cjs.js"),We=require("./context/ProjectTableContext.cjs.js"),Vr=require("./utils/getTableFieldOptions.cjs.js"),Br=require("./utils/getReadOnlyLists.cjs.js"),Ur=require("./utils/getEntityViewerIds.cjs.js"),Ve=require("./widgets/CellWidget.cjs.js");require("./context/ProjectTableQueriesContext.cjs.js");require("./context/DetailsPanelEntityContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("./components/GroupSettingsFallback.cjs.js");const Wr=require("./context/ProjectDataContext.cjs.js");require("./widgets/CollapsedWidget.cjs.js");require("./widgets/DateWidget.cjs.js");require("./widgets/EnumWidget.cjs.js");require("./widgets/TextWidget.cjs.js");require("./widgets/BooleanWidget.cjs.js");require("./widgets/EntityNameWidget.cjs.js");require("./widgets/GroupHeaderWidget.cjs.js");require("./widgets/ThumbnailWidget.cjs.js");require("../../components/LinksManager/CellEditingDialog.cjs.js");require("./widgets/EmptyWidget.cjs.js");require("./widgets/ErrorWidget.cjs.js");require("../DetailsPanel/DetailsPanel.styled.cjs.js");require("../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../components/PlayableIcon/PlayableIcon.cjs.js");require("../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../Actions/Actions.styled.cjs.js");require("../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../Actions/ActionIcon.cjs.js");require("../Views/context/ViewsContext.cjs.js");require("../Views/Views.styled.cjs.js");require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../Views/ViewsMenu/ViewsMenu.cjs.js");const ue=e=>{const u=e.getIsPinned(),i=e.id!==P.ROW_SELECTION_COLUMN_ID&&e.id!==V?-30:0;return{left:u==="left"?`${e.getStart("left")+i}px`:void 0,right:u==="right"?`${e.getAfter("right")}px`:void 0,position:u?"sticky":"relative",width:e.getSize(),zIndex:u?100:0}},le=(e,u)=>`calc(var(--col-${u}-size) * 1px)`,V="drag-handle",$r=({scope:e,sliceId:u,onScroll:i,onScrollBottom:f,onOpenNew:C,readOnly:h,excludedColumns:y,excludedSorting:b,extraColumns:w,includeLinks:n,isLoading:R,isExpandable:T,clientSorting:o=!1,sortableRows:q=!1,onRowReorder:B,dndActiveId:a,columnsConfig:v,onScrollBottomGroupBy:g,contextMenuItems:U,pt:p,...X})=>{const{columnVisibility:N,columnPinning:E,columnOrder:W,columnSizing:k,setAllColumns:$,sorting:m,sortingOnChange:D,columnPinningOnChange:M,columnSizingOnChange:Y,columnVisibilityOnChange:c,columnOrderOnChange:A,groupBy:S}=Tr.useColumnSettingsContext(),L=!!S,{productTypes:Ke,projectName:Z,...Ge}=_r.useProjectContext(),{tableData:K,attribFields:F,entitiesMap:Xe,users:ye,isLoading:Ye,error:Je,isInitialized:ae,expanded:Qe,updateExpanded:Re,toggleExpandAll:Ze,showHierarchy:_,fetchNextPage:er,scopes:G,getEntityById:Ee,onResetView:rr}=We.useProjectTableContext(),{writableFields:je}=Wr.useProjectDataContext(),J=R||Ye,{statuses:be=[],folderTypes:we=[],taskTypes:Se=[],tags:Te=[],linkTypes:Me=[]}=Ge||{},ee=x.useMemo(()=>Vr.getTableFieldOptions({users:ye,statuses:be,folderTypes:we,taskTypes:Se,productTypes:Ke,tags:Te,scopes:G}),[ye,be,we,Se,G,Te]),re=x.useRef(null),Ie=x.useRef(0),{registerGrid:Oe}=P.useSelectionCellsContext(),{loadingAttrib:Pe,loadingRows:tr}=x.useMemo(()=>{const t=re.current?.querySelectorAll("tbody tr").length||0,l=Ae.generateDummyAttributes(),d=Ae.generateLoadingRows(_&&K.length>0?Math.min(t,50):S?Math.max(Ie.current,50):50);return{loadingAttrib:l,loadingRows:d}},[]),ir=!ae||J,{readOnlyColumns:De,readOnlyAttribs:nr}=x.useMemo(()=>Br.getReadOnlyLists(F,je,h),[F,je,h]),{selectedCells:ce}=P.useSelectionCellsContext(),{updateEntities:Le}=Ue.useCellEditing(),sr=x.useCallback(async(t,l)=>{const{selection:d=[]}=l||{},s=[];if(!d?.length)s.push({...t,id:t.rowId});else{const{field:O,value:me,isAttrib:xe}=t;for(const yr of ce){const{colId:fe,rowId:ne}=oe.parseCellId(yr)||{};if(fe===P.ROW_SELECTION_COLUMN_ID)continue;const pe=Ee(ne||"");if(!pe){console.warn(`Entity with ID ${ne} not found for cell update.`);continue}(!fe?.includes("attrib_")||fe?.replace("attrib_","")===O)&&ne&&s.push({field:O,rowId:ne,id:pe.entityId,value:me,isAttrib:xe,type:pe.entityType})}}if(!s.length){console.warn("No entities to update, skipping updateEntities call."),kr.toast.warn("No entities to update.");return}await Le(s,!0)},[Le,Ee,ce]),ze=x.useMemo(()=>ae?F:Pe,[F,Pe,ae]),or=()=>G.includes("version")?"Product / Version":G.map(t=>Hr.upperFirst(t)).join(" / "),de=x.useMemo(()=>{const t=Be.default({scopes:G,attribs:ze,links:Me,includeLinks:n,showHierarchy:_,options:ee,extraColumns:w,excluded:y,excludedSorting:b,groupBy:S,nameLabel:or()});return q?[{id:V,header:()=>null,cell:()=>null,size:24,minSize:24,maxSize:24,enableResizing:!1,enableSorting:!1,enableHiding:!1,enablePinning:!1},...t]:t},[G,ze,_,T,ee,Me,n,w,y,b,q]);x.useEffect(()=>{const t=de.map(l=>l.id).filter(Boolean);$(t)},[de,$]);const I=H.useReactTable({data:ir?tr:K,columns:de,defaultColumn:{minSize:50,size:150},enableRowSelection:!0,getRowId:t=>t.id,enableSubRowSelection:!1,getSubRows:t=>t.subRows,getRowCanExpand:()=>!!T||_||L,getCoreRowModel:H.getCoreRowModel(),getFilteredRowModel:H.getFilteredRowModel(),getExpandedRowModel:H.getExpandedRowModel(),filterFromLeafRows:!0,onExpandedChange:Re,enableSorting:!0,getSortedRowModel:H.getSortedRowModel(),sortDescFirst:!1,manualSorting:!o,onSortingChange:D,columnResizeMode:"onChange",onColumnPinningChange:M,onColumnSizingChange:Y,onColumnVisibilityChange:c,onColumnOrderChange:A,filterFns:H.filterFns,state:{expanded:Qe,sorting:m,columnPinning:(()=>{const t=[];q&&t.push(V),t.push(P.ROW_SELECTION_COLUMN_ID);const l=(E.left||[]).filter(s=>s!==V&&s!==P.ROW_SELECTION_COLUMN_ID);return t.push(...l),{left:[...new Set(t)],right:E.right}})(),columnSizing:k,columnVisibility:N,columnOrder:W},meta:{projectName:Z,options:ee,readOnly:De,updateEntities:sr,toggleExpandAll:Ze,loadMoreRows:er,selection:Array.from(ce),columnsConfig:v}}),{rows:Q}=I.getRowModel();x.useEffect(()=>{Ie.current=Q.length},[Q.length]),x.useEffect(()=>{if(!Q.length)return;const t=Q.map(s=>s.id),d=[...I.getAllLeafColumns().map(s=>s.id)].sort((s,O)=>{if(P.ROW_SELECTION_COLUMN_ID===O)return 1;const me=E.left?.includes(s)?0:1,xe=E.left?.includes(O)?0:1;return me-xe});Oe(t,d)},[Q,I.getAllLeafColumns(),E,P.ROW_SELECTION_COLUMN_ID,Oe]);const ve=I.getVisibleLeafColumns(),{columnVirtualizer:qe,virtualPaddingLeft:te,virtualPaddingRight:ie}=Dr({visibleColumns:ve,tableContainerRef:re,columnPinning:E,columnSizing:k,columnOrder:W}),Ne=Ir(I,k),{getRowHeight:ur,defaultRowHeight:_e}=zr(),lr=x.useMemo(()=>F.reduce((t,l)=>(l.data?.enum?.length&&(t[l.name]=l.data?.enum),t),{}),[F]),ar=x.useMemo(()=>K.map(t=>t.id),[K]),cr=x.useMemo(()=>!a||!q?null:K.find(t=>t.id===a),[a,K,q]),dr=x.useCallback(t=>{if(i?.(t),f){const l=t.currentTarget;if(l&&!_&&!S){const{scrollHeight:d,scrollTop:s,clientHeight:O}=l;d-s-O<500&&!J&&f(t)}}if(g&&S){const O=t.currentTarget?.querySelector(".load-more")?.getAttribute("id")?.split("-")[2];O&&g(O)}},[i,f,g,_,S,J]),{isEntityPickerOpen:qr,handleMoveSubmit:gr,closeMoveDialog:mr,movingEntities:ge,handleMoveToRoot:xr,getDisabledFolderIds:fr,getDisabledMessage:pr}=Nr.useMoveEntities({projectName:Z}),Cr=t=>{gr(t);const l=t[0];Re(d=>typeof d=="boolean"?d||{[l]:!0}:d[l]?d:{...d,[l]:!0})},He=r.jsxRuntimeExports.jsxs(wr.ClipboardProvider,{entitiesMap:Xe,columnEnums:{...ee,...lr},columnReadOnly:nr,visibleColumns:ve,children:[r.jsxRuntimeExports.jsx(j.TableWrapper,{...X,children:r.jsxRuntimeExports.jsx(j.TableContainer,{ref:re,style:{height:"100%",padding:0},onScroll:dr,...p?.container,className:z("table-container",{resizing:I.getState().columnSizingInfo.isResizingColumn},p?.container?.className),children:r.jsxRuntimeExports.jsxs("table",{style:{display:"grid",borderCollapse:"collapse",userSelect:"none",...Ne,width:I.getTotalSize(),cursor:I.getState().columnSizingInfo.isResizingColumn?"col-resize":void 0},children:[r.jsxRuntimeExports.jsx(Kr,{columnVirtualizer:qe,table:I,virtualPaddingLeft:te,virtualPaddingRight:ie,isLoading:J,readOnlyColumns:De,sortableRows:q,...p?.head}),r.jsxRuntimeExports.jsx(Yr,{columnVirtualizer:qe,table:I,tableContainerRef:re,virtualPaddingLeft:te,virtualPaddingRight:ie,showHierarchy:_,attribs:F,onOpenNew:C,rowOrderIds:ar,sortableRows:q,error:Je,isLoading:J,isGrouping:L,getRowHeight:ur,defaultRowHeight:_e,onResetView:rr,contextMenuItems:U})]})})}),qr&&Z&&ge?.entities&&ge.entities.length>0&&r.jsxRuntimeExports.jsx(vr.EntityPickerDialog,{projectName:Z,entityType:"folder",onSubmit:Cr,onClose:mr,showMoveToRoot:ge.entities.every(t=>t.entityType==="folder"),onMoveToRoot:xr,disabledIds:fr(),getDisabledMessage:pr})]}),hr=q&&a&&Ce.createPortal(r.jsxRuntimeExports.jsx(Ar.DragOverlay,{dropAnimation:null,children:cr?(()=>{const t=I.getRowModel().rows.find(d=>d.id===a);if(!t)return null;const l=I.getTotalSize();return r.jsxRuntimeExports.jsx("table",{style:{width:l,borderCollapse:"collapse",backgroundColor:"var(--md-sys-color-surface-container-high)",boxShadow:"0 0 10px rgba(0,0,0,0.2)",...Ne},children:r.jsxRuntimeExports.jsx("tbody",{children:r.jsxRuntimeExports.jsxs(j.TR,{style:{display:"flex",userSelect:"none"},children:[te?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:te}}):null,qe.getVirtualItems().map(d=>{const s=t.getVisibleCells()[d.index];if(!s)return null;const O={...ue(s.column),width:le(t.id,s.column.id),display:"flex",alignItems:"center",height:_e};return s.column.id===V?r.jsxRuntimeExports.jsxs(j.TD,{style:{...O,justifyContent:"center"},className:z(s.column.id),children:[r.jsxRuntimeExports.jsx(se.Icon,{icon:"drag_handle"})," "]},`overlay-drag-${s.id}`):r.jsxRuntimeExports.jsx($e,{cell:s,cellId:`overlay-${oe.getCellId(t.id,s.column.id)}`,rowId:t.id,showHierarchy:_},`overlay-cell-${s.id}`)}),ie?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:ie}}):null]})})})})():null}),document.body);return q?r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[He,hr]}):He},Kr=({columnVirtualizer:e,table:u,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y,...b})=>r.jsxRuntimeExports.jsx(j.TableHeader,{...b,children:u.getHeaderGroups().map(w=>r.jsxRuntimeExports.jsx(Gr,{columnVirtualizer:e,headerGroup:w,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y},w.id))}),Gr=({columnVirtualizer:e,headerGroup:u,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y})=>{const b=e.getVirtualItems();return r.jsxRuntimeExports.jsxs(j.ColumnHeader,{style:{display:"flex"},children:[i?r.jsxRuntimeExports.jsx("th",{style:{display:"flex",width:i}}):null,b.map(w=>{const n=u.headers[w.index];return r.jsxRuntimeExports.jsx(Xr,{header:n,isLoading:C,isReadOnly:h?.includes(n.id),canSort:n.column.getCanSort(),canFilter:n.column.getCanFilter(),canHide:n.column.getCanHide(),canPin:n.column.getCanPin(),canResize:n.column.getCanResize(),sortableRows:y},n.id)}),f?r.jsxRuntimeExports.jsx("th",{style:{display:"flex",width:f}}):null]},u.id)},Xr=({header:e,isLoading:u,canFilter:i,canHide:f,canSort:C,canPin:h,canResize:y,isReadOnly:b,sortableRows:w})=>{const{column:n}=e,R=n.getIsSorted(),T=`column-header-menu-${n.id}`,{menuOpen:o}=Mr.useMenuContext(),q=o===T;return r.jsxRuntimeExports.jsx(j.HeaderCell,{className:z(e.id,"shimmer-dark",{loading:u,"last-pinned-left":n.getIsPinned()==="left"&&n.getIsLastColumn("left"),resizing:n.getIsResizing()}),style:{...ue(n),width:le("",n.id)},children:e.isPlaceholder?null:r.jsxRuntimeExports.jsxs(j.TableCellContent,{className:z("bold","header"),children:[H.flexRender(n.columnDef.header,e.getContext()),b&&r.jsxRuntimeExports.jsx(se.Icon,{icon:"lock","data-tooltip":"You only have permission to read this column."}),r.jsxRuntimeExports.jsxs(j.HeaderButtons,{className:"actions",$isOpen:q,children:[(f||h||C)&&r.jsxRuntimeExports.jsx(br.ColumnHeaderMenu,{className:"header-menu",header:e,canHide:f,canPin:h,canSort:C,isResizing:n.getIsResizing(),menuId:T,isOpen:q}),C&&r.jsxRuntimeExports.jsx(Er,{icon:"sort",className:z("sort-button",{visible:R}),style:{transform:R==="asc"?"rotate(180deg) scaleX(-1)":"none"},onClick:n.getToggleSortingHandler(),selected:!!n.getIsSorted()})]}),y&&r.jsxRuntimeExports.jsx(j.ResizedHandler,{onDoubleClick:()=>n.resetSize(),onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:z("resize-handle",{resizing:n.getIsResizing()})})]})},e.id)},Yr=({columnVirtualizer:e,table:u,tableContainerRef:i,showHierarchy:f,virtualPaddingLeft:C,virtualPaddingRight:h,attribs:y,onOpenNew:b,rowOrderIds:w,sortableRows:n,error:R,isLoading:T,isGrouping:o,getRowHeight:q,defaultRowHeight:B,onResetView:a,contextMenuItems:v})=>{const g=x.useMemo(()=>u.getAllColumns().map(M=>{const Y=M.id,c=M.columnDef.header;return typeof c=="string"||typeof c=="number"?{label:c,id:Y}:null}).filter(Boolean),[u.getAllColumns()]),p=Pr({attribs:y,onOpenNew:b,headerLabels:g,contextMenuItems:v}).handleTableBodyContextMenu,{handlePreFetchTasks:X}=Or.usePrefetchFolderTasks(),{rows:N}=u.getRowModel(),E=Rr.useVirtualizer({count:N.length,estimateSize:m=>{const D=N[m];return D?q(D.original):B},getScrollElement:()=>i.current,measureElement:typeof window<"u"&&navigator.userAgent.indexOf("Firefox")===-1?m=>m?.getBoundingClientRect().height:void 0,overscan:5}),W=E.getVirtualItems(),k=x.useCallback(m=>{m&&E.measureElement(m)},[E]);Lr();const $=r.jsxRuntimeExports.jsx("tbody",{style:{height:`${E.getTotalSize()}px`,position:"relative",display:"grid"},onContextMenu:p,onMouseOver:m=>{X(m)},children:W.map((m,D)=>{const M=N[m.index];return M?r.jsxRuntimeExports.jsx(Jr,{row:M,showHierarchy:f,visibleCells:M.getVisibleCells(),virtualColumns:e.getVirtualItems(),paddingLeft:C,paddingRight:h,rowRef:k,dataIndex:m.index,offsetTop:m.start,sortableRows:n,isGrouping:o,rowHeight:q(M.original)},M.id+D.toString()):(console.warn("Virtualized row data not found for index:",m.index),null)})});return R?i.current&&Ce.createPortal(r.jsxRuntimeExports.jsx(j.AnimatedEmptyPlaceholder,{children:r.jsxRuntimeExports.jsx(ke.EmptyPlaceholder,{message:"No items found",error:R,children:a&&r.jsxRuntimeExports.jsx(se.Button,{variant:"filled",label:"Reset working view",icon:"restart_alt",onClick:a})})}),i.current):!N.length&&!T?i.current&&Ce.createPortal(r.jsxRuntimeExports.jsx(j.AnimatedEmptyPlaceholder,{children:r.jsxRuntimeExports.jsx(ke.EmptyPlaceholder,{message:"No items found",children:a&&r.jsxRuntimeExports.jsx(se.Button,{variant:"filled",label:"Reset working view",icon:"restart_alt",onClick:a})})}),i.current):n?r.jsxRuntimeExports.jsx(he.SortableContext,{items:w,strategy:he.verticalListSortingStrategy,children:$}):$},Jr=({row:e,showHierarchy:u,visibleCells:i,virtualColumns:f,paddingLeft:C,paddingRight:h,rowRef:y,dataIndex:b,offsetTop:w,sortableRows:n,isGrouping:R=!1,rowHeight:T})=>{const o=n?he.useSortable({id:e.id}):null,q=x.useCallback(a=>{o&&o.setNodeRef(a),o&&o.isDragging||y(a)},[o,y]),B={position:"absolute",top:w,left:0,right:0,height:T,zIndex:o&&o.isDragging?0:1,display:"flex",transform:o&&o.transform?Fr.CSS.Transform.toString(o.transform):void 0,transition:o&&o.transition?o.transition:void 0,visibility:o&&o.isDragging?"hidden":"visible"};return r.jsxRuntimeExports.jsxs(j.TR,{ref:q,"data-index":b,style:B,className:z({"group-row":e.original.group}),children:[C?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:C}}):null,f.map((a,v)=>{const g=i[a.index];if(!g)return null;const U=oe.getCellId(e.id,g.column.id);return g.column.id===V?r.jsxRuntimeExports.jsx(j.TD,{style:{...ue(g.column),width:le(e.id,g.column.id),display:"flex",alignItems:"center",justifyContent:"center",height:T,pointerEvents:"all",cursor:"grab"},className:z(g.column.id,{"last-pinned-left":g.column.getIsPinned()==="left"&&g.column.getIsLastColumn("left")}),onMouseDown:p=>p.stopPropagation(),onMouseOver:p=>p.stopPropagation(),onDoubleClick:p=>p.stopPropagation(),onContextMenu:p=>{p.preventDefault(),p.stopPropagation()},children:r.jsxRuntimeExports.jsx(jr,{attributes:o?.attributes,listeners:o?.listeners})},g.id+v.toString()):r.jsxRuntimeExports.jsx($e,{cell:g,cellId:U,rowId:e.id,showHierarchy:u,sortableRows:n,rowHeight:T},g.id+v.toString())}),h?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:h}}):null]})},$e=({cell:e,rowId:u,cellId:i,className:f,showHierarchy:C,sortableRows:h,rowHeight:y,...b})=>{const{getEntityById:w,onOpenPlayer:n}=We.useProjectTableContext(),{isCellSelected:R,isCellFocused:T,startSelection:o,extendSelection:q,endSelection:B,selectCell:a,focusCell:v,getCellBorderClasses:g,clearSelection:U,selectedCells:p}=P.useSelectionCellsContext(),{isRowSelected:X}=Sr.useSelectedRowsContext(),{isEditing:N,setEditingCellId:E,editingCellId:W}=Ue.useCellEditing(),k=g(i),m=e.column.getIsPinned()==="left"&&e.column.getIsLastColumn("left"),D=e.column.id===P.ROW_SELECTION_COLUMN_ID,M=e.row.original.entityType==="group",Y=p.size>1;return r.jsxRuntimeExports.jsx(j.TD,{...b,tabIndex:0,$isLastPinned:m,className:z(e.column.id,{selected:R(i),focused:T(i),editing:N(i),"last-pinned-left":m,"selected-row":X(u),expandable:!!e.row.originalSubRows&&Be.isEntityExpandable(e.row.original.entityType),"multiple-selected":Y},f,...k),style:{...ue(e.column),width:le(e.row.id,e.column.id),height:y},onMouseDown:c=>{if(c.button!==0)return;const A=c.target;if(A.closest(".expander")||A.closest(".options"))return;if(M&&e.column.id!=="name")return U();const S=Fe.isEntityRestricted(e.row.original.entityType);if(A.closest("."+Ve.EDIT_TRIGGER_CLASS)&&!S){R(i)||(a(i,!1,!1),v(i)),E(i);return}if(R(i))return;W&&!R(i)&&E(null);const L=c.metaKey||c.ctrlKey||D;c.shiftKey?a(i,L,!0):o(i,L),c.preventDefault()},onMouseOver:c=>{if(c.buttons===1){if(c.target.closest("."+Ve.EDIT_TRIGGER_CLASS))return;q(i,D)}},onMouseUp:()=>{B(i)},onDoubleClick:c=>{if(console.log("DBL CLICK"),!Fe.isEntityRestricted(e.row.original.entityType)&&!M)if(e.column.id==="name"&&!c.target.closest(".expander")){const S=oe.getCellId(e.row.id,P.ROW_SELECTION_COLUMN_ID),L=c.metaKey||c.ctrlKey;R(S)||a(S,L,!1),a(i,!0,!1)}else if(e.column.id==="thumbnail"){if(n){const S=w(e.row.original.entityId||e.row.id);if(S){const L=Ur.getEntityViewierIds(S);n(L,{quickView:!0})}}}else E(i)},onContextMenu:c=>{c.preventDefault(),R(i)||a(i,!1,!1)},onKeyDown:()=>{},children:H.flexRender(e.column.columnDef.cell,e.getContext())})};exports.DRAG_HANDLE_COLUMN_ID=V;exports.ProjectTreeTable=$r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../../_virtual/jsx-runtime.cjs.js"),x=require("react"),Rr=require("@tanstack/react-virtual"),A=require("@tanstack/react-table"),N=require("clsx"),Ue=require("./buildTreeTableColumns.cjs.js"),R=require("./ProjectTreeTable.styled.cjs.js"),Er=require("./components/HeaderActionButton.cjs.js"),br=require("./components/RowDragHandleCellContent.cjs.js");require("./components/RowSelectionHeader.cjs.js");require("./components/SelectionCell.cjs.js");const jr=require("./components/ColumnHeaderMenu.cjs.js"),Fe=require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const We=require("./context/CellEditingContext.cjs.js"),D=require("./context/SelectionCellsContext.cjs.js"),wr=require("./context/ClipboardContext.cjs.js"),Sr=require("./context/SelectedRowsContext.cjs.js"),Tr=require("./context/ColumnSettingsContext.cjs.js"),Mr=require("../../context/MenuContext.cjs.js"),Ir=require("./hooks/useCustomColumnWidthVars.cjs.js"),Or=require("./hooks/usePrefetchFolderTasks.cjs.js"),Pr=require("./hooks/useCellContextMenu.cjs.js"),Dr=require("./hooks/useColumnVirtualization.cjs.js"),Lr=require("./hooks/useKeyboardNavigation.cjs.js"),zr=require("./hooks/useDynamicRowHeight.cjs.js"),vr=require("../EntityPickerDialog/EntityPickerDialog.cjs.js"),Nr=require("./hooks/useMoveEntities.cjs.js");require("../ContextMenu/ContextMenuContext.cjs.js");const oe=require("@ynput/ayon-react-components");;/* empty css */const ye=require("react-dom");require("../Feed/context/FeedContext.cjs.js");require("../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");const _r=require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");require("../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../Feed/components/CommentInput/CommentInput.cjs.js");require("../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");const Hr=require("lodash");require("../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");const kr=require("react-toastify");require("uuid");require("../../util/pubsub.cjs.js");require("react-router-dom");require("../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../Feed/components/ActivityDate.cjs.js");require("../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../components/AccessUser/AccessUser.cjs.js");require("../../components/AttributeEditor/components/MinMaxField.cjs.js");const Ar=require("@dnd-kit/core"),Re=require("@dnd-kit/sortable"),Fr=require("../../../../node_modules/@dnd-kit/utilities/dist/utilities.esm.cjs.js");require("../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../components/Badge/Badge.cjs.js");require("../../components/Chips/Chips.cjs.js");require("../../api/base/client.cjs.js");require("../../api/generated/graphql.cjs.js");require("../../api/generated/graphqlLinks.cjs.js");require("../../api/generated/access.cjs.js");require("../../api/generated/actions.cjs.js");require("../../api/generated/activityFeed.cjs.js");require("../../api/generated/addons.cjs.js");require("../../api/generated/anatomy.cjs.js");require("../../api/generated/attributes.cjs.js");require("../../api/generated/authentication.cjs.js");require("../../api/generated/bundles.cjs.js");require("../../api/generated/configuration.cjs.js");require("../../api/generated/desktop.cjs.js");require("../../api/generated/entityLists.cjs.js");require("../../api/generated/events.cjs.js");require("../../api/generated/files.cjs.js");require("../../api/generated/folders.cjs.js");require("../../api/generated/inbox.cjs.js");require("../../api/generated/links.cjs.js");require("../../api/generated/market.cjs.js");require("../../api/generated/onboarding.cjs.js");require("../../api/generated/operations.cjs.js");require("../../api/generated/products.cjs.js");require("../../api/generated/projectDashboard.cjs.js");require("../../api/generated/projects.cjs.js");require("../../api/generated/reviewables.cjs.js");require("../../api/generated/services.cjs.js");require("../../api/generated/system.cjs.js");require("../../api/generated/tasks.cjs.js");require("../../api/generated/teams.cjs.js");require("../../api/generated/thumbnails.cjs.js");require("../../api/generated/uRIs.cjs.js");require("../../api/generated/users.cjs.js");require("../../api/generated/versions.cjs.js");require("../../api/generated/workfiles.cjs.js");require("../../api/generated/ynputCloud.cjs.js");require("../../api/generated/grouping.cjs.js");require("../../api/generated/views.cjs.js");require("../../api/queries/actions/getActions.cjs.js");require("../../api/queries/activities/getActivities.cjs.js");require("../../api/queries/activities/updateActivities.cjs.js");require("../../api/queries/activities/updateReaction.cjs.js");require("../../api/queries/activities/getMentions.cjs.js");require("../../api/queries/activities/getCategories.cjs.js");require("../../api/queries/addons/getAddons.cjs.js");require("../../api/queries/addons/updateAddons.cjs.js");require("../../api/queries/attributes/getAttributes.cjs.js");require("../../api/queries/attributes/updateAttributes.cjs.js");require("../../api/queries/authentication/getAuthentication.cjs.js");require("../../api/queries/cloud/cloud.cjs.js");require("../../api/queries/config/getConfig.cjs.js");require("../../api/queries/config/updateConfig.cjs.js");require("../../api/queries/entities/getEntity.cjs.js");require("../../api/queries/entities/getEntityPanel.cjs.js");require("../../api/queries/entities/updateEntity.cjs.js");require("../../api/queries/entityLists/getLists.cjs.js");require("../../api/queries/entityLists/updateLists.cjs.js");require("../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../api/queries/entityLists/listFolders.cjs.js");require("../../api/queries/folders/getFolders.cjs.js");require("../../api/queries/grouping/getGrouping.cjs.js");require("../../api/queries/links/updateLinks.cjs.js");require("../../api/queries/links/getLinks.cjs.js");require("../../api/queries/links/getEntityLinks.cjs.js");require("../../api/queries/overview/getOverview.cjs.js");require("../../api/queries/overview/updateOverview.cjs.js");require("../../api/queries/versions/getVersionsProducts.cjs.js");require("../../api/queries/permissions/getPermissions.cjs.js");require("../../api/queries/products/createProduct.cjs.js");require("../../api/queries/project/getProject.cjs.js");require("../../api/queries/project/updateProject.cjs.js");require("../../api/queries/review/getReview.cjs.js");require("../../api/queries/review/updateReview.cjs.js");require("../../api/queries/share/share.cjs.js");require("../../api/queries/system/getSystem.cjs.js");require("../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../api/queries/users/getUsers.cjs.js");require("../../api/queries/users/updateUsers.cjs.js");require("../../api/queries/users/guests.cjs.js");require("../../api/queries/versions/updateVersions.cjs.js");require("../../api/queries/views/getViews.cjs.js");require("../../api/queries/views/updateViews.cjs.js");require("../../api/queries/watchers/getWatchers.cjs.js");require("../../api/queries/uris/getUris.cjs.js");require("../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../components/EntityPath/EntityPath.styled.cjs.js");require("../../components/EntityPath/SegmentProvider.cjs.js");require("../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../components/Feedback/FeedbackContext.cjs.js");require("../../components/Feedback/SupportBubble.cjs.js");require("../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../components/LinksManager/LinksManager.styled.cjs.js");require("date-fns");require("../../components/Powerpack/PowerpackButton.cjs.js");require("../../components/Powerpack/PricingLink.cjs.js");require("../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../components/Powerpack/CTAButton.cjs.js");require("../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../components/SizeSlider/SizeSlider.cjs.js");require("../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../components/SearchFilter/filterDates.cjs.js");require("../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../components/StyledLink/StyledLink.cjs.js");require("../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../components/Watchers/Watchers.cjs.js");require("../../components/Menu/Menu.styled.cjs.js");require("../../components/Menu/MenuItem.cjs.js");require("../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../Feed/Feed.styled.cjs.js");require("../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");const ue=require("./utils/cellUtils.cjs.js"),Ve=require("./utils/loadingUtils.cjs.js"),he=require("./utils/restrictedEntity.cjs.js"),$e=require("./context/ProjectTableContext.cjs.js"),Vr=require("./utils/getTableFieldOptions.cjs.js"),Br=require("./utils/getReadOnlyLists.cjs.js"),Ur=require("./utils/getEntityViewerIds.cjs.js"),Be=require("./widgets/CellWidget.cjs.js");require("./context/ProjectTableQueriesContext.cjs.js");require("./context/DetailsPanelEntityContext.cjs.js");require("../../../../_virtual/runtime.cjs.js");require("../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("./components/GroupSettingsFallback.cjs.js");const Wr=require("./context/ProjectDataContext.cjs.js");require("./widgets/CollapsedWidget.cjs.js");require("./widgets/DateWidget.cjs.js");require("./widgets/EnumWidget.cjs.js");require("./widgets/TextWidget.cjs.js");require("./widgets/BooleanWidget.cjs.js");require("./widgets/EntityNameWidget.cjs.js");require("./widgets/GroupHeaderWidget.cjs.js");require("./widgets/ThumbnailWidget.cjs.js");require("../../components/LinksManager/CellEditingDialog.cjs.js");require("./widgets/EmptyWidget.cjs.js");require("./widgets/ErrorWidget.cjs.js");require("../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../SimpleTable/context/SimpleTableContext.cjs.js");require("../SimpleTable/SimpleTableRowTemplate.cjs.js");require("../Slicer/hooks/useTableDataBySlice.cjs.js");require("../Slicer/components/SlicerSearch.cjs.js");require("../Slicer/context/SlicerContext.cjs.js");require("../DetailsPanel/DetailsPanel.styled.cjs.js");require("../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../components/PlayableIcon/PlayableIcon.cjs.js");require("../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../Actions/Actions.styled.cjs.js");require("../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../Actions/ActionIcon.cjs.js");require("../Views/context/ViewsContext.cjs.js");require("../Views/Views.styled.cjs.js");require("../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../Views/ViewsMenu/ViewsMenu.cjs.js");const le=e=>{const u=e.getIsPinned(),i=e.id!==D.ROW_SELECTION_COLUMN_ID&&e.id!==U?-30:0;return{left:u==="left"?`${e.getStart("left")+i}px`:void 0,right:u==="right"?`${e.getAfter("right")}px`:void 0,position:u?"sticky":"relative",width:e.getSize(),zIndex:u?100:0}},ae=(e,u)=>`calc(var(--col-${u}-size) * 1px)`,U="drag-handle",$r=({scope:e,sliceId:u,onScroll:i,onScrollBottom:f,onOpenNew:C,readOnly:h,excludedColumns:y,excludedSorting:E,extraColumns:b,includeLinks:n,isLoading:j,isExpandable:S,clientSorting:o=!1,sortableRows:q=!1,onRowReorder:W,dndActiveId:c,columnsConfig:_,onScrollBottomGroupBy:g,contextMenuItems:$,pt:p,...Y})=>{const{columnVisibility:H,columnPinning:w,columnOrder:z,columnSizing:F,setAllColumns:G,sorting:m,sortingOnChange:L,columnPinningOnChange:T,columnSizingOnChange:J,columnVisibilityOnChange:l,columnOrderOnChange:V,groupBy:v}=Tr.useColumnSettingsContext(),O=!!v,{productTypes:P,projectName:ee,...Ke}=_r.useProjectContext(),{tableData:K,attribFields:B,entitiesMap:Xe,users:Ee,isLoading:Ye,error:Je,isInitialized:ce,expanded:Qe,updateExpanded:be,toggleExpandAll:Ze,showHierarchy:k,fetchNextPage:er,scopes:X,getEntityById:je,onResetView:rr}=$e.useProjectTableContext(),{writableFields:we}=Wr.useProjectDataContext(),Q=j||Ye,{statuses:Se=[],folderTypes:Te=[],taskTypes:Me=[],tags:Ie=[],linkTypes:Oe=[]}=Ke||{},re=x.useMemo(()=>Vr.getTableFieldOptions({users:Ee,statuses:Se,folderTypes:Te,taskTypes:Me,productTypes:P,tags:Ie,scopes:X}),[Ee,Se,Te,Me,X,Ie]),te=x.useRef(null),Pe=x.useRef(0),{registerGrid:De}=D.useSelectionCellsContext(),{loadingAttrib:Le,loadingRows:tr}=x.useMemo(()=>{const t=te.current?.querySelectorAll("tbody tr").length||0,a=Ve.generateDummyAttributes(),d=Ve.generateLoadingRows(k&&K.length>0?Math.min(t,50):v?Math.max(Pe.current,50):50);return{loadingAttrib:a,loadingRows:d}},[]),ir=!ce||Q,{readOnlyColumns:ze,readOnlyAttribs:nr}=x.useMemo(()=>Br.getReadOnlyLists(B,we,h),[B,we,h]),{selectedCells:de}=D.useSelectionCellsContext(),{updateEntities:ve}=We.useCellEditing(),sr=x.useCallback(async(t,a)=>{const{selection:d=[]}=a||{},s=[];if(!d?.length)s.push({...t,id:t.rowId});else{const{field:I,value:xe,isAttrib:fe}=t;for(const yr of de){const{colId:pe,rowId:se}=ue.parseCellId(yr)||{};if(pe===D.ROW_SELECTION_COLUMN_ID)continue;const Ce=je(se||"");if(!Ce){console.warn(`Entity with ID ${se} not found for cell update.`);continue}(!pe?.includes("attrib_")||pe?.replace("attrib_","")===I)&&se&&s.push({field:I,rowId:se,id:Ce.entityId,value:xe,isAttrib:fe,type:Ce.entityType})}}if(!s.length){console.warn("No entities to update, skipping updateEntities call."),kr.toast.warn("No entities to update.");return}await ve(s,!0)},[ve,je,de]),Ne=x.useMemo(()=>ce?B:Le,[B,Le,ce]),or=()=>X.includes("version")?"Product / Version":X.map(t=>Hr.upperFirst(t)).join(" / "),qe=x.useMemo(()=>{const t=Ue.default({scopes:X,attribs:Ne,links:Oe,includeLinks:n,showHierarchy:k,options:re,extraColumns:b,excluded:y,excludedSorting:E,groupBy:v,nameLabel:or()});return q?[{id:U,header:()=>null,cell:()=>null,size:24,minSize:24,maxSize:24,enableResizing:!1,enableSorting:!1,enableHiding:!1,enablePinning:!1},...t]:t},[X,Ne,k,S,re,Oe,n,b,y,E,q]);x.useEffect(()=>{const t=qe.map(a=>a.id).filter(Boolean);G(t)},[qe,G]);const M=A.useReactTable({data:ir?tr:K,columns:qe,defaultColumn:{minSize:50,size:150},enableRowSelection:!0,getRowId:t=>t.id,enableSubRowSelection:!1,getSubRows:t=>t.subRows,getRowCanExpand:()=>!!S||k||O,getCoreRowModel:A.getCoreRowModel(),getFilteredRowModel:A.getFilteredRowModel(),getExpandedRowModel:A.getExpandedRowModel(),filterFromLeafRows:!0,onExpandedChange:be,enableSorting:!0,getSortedRowModel:A.getSortedRowModel(),sortDescFirst:!1,manualSorting:!o,onSortingChange:L,columnResizeMode:"onChange",onColumnPinningChange:T,onColumnSizingChange:J,onColumnVisibilityChange:l,onColumnOrderChange:V,filterFns:A.filterFns,state:{expanded:Qe,sorting:m,columnPinning:(()=>{const t=[];q&&t.push(U),t.push(D.ROW_SELECTION_COLUMN_ID);const a=(w.left||[]).filter(s=>s!==U&&s!==D.ROW_SELECTION_COLUMN_ID);return t.push(...a),{left:[...new Set(t)],right:w.right}})(),columnSizing:F,columnVisibility:H,columnOrder:z},meta:{projectName:ee,options:re,readOnly:ze,updateEntities:sr,toggleExpandAll:Ze,loadMoreRows:er,selection:Array.from(de),columnsConfig:_}}),{rows:Z}=M.getRowModel();x.useEffect(()=>{Pe.current=Z.length},[Z.length]),x.useEffect(()=>{if(!Z.length)return;const t=Z.map(s=>s.id),d=[...M.getAllLeafColumns().map(s=>s.id)].sort((s,I)=>{if(D.ROW_SELECTION_COLUMN_ID===I)return 1;const xe=w.left?.includes(s)?0:1,fe=w.left?.includes(I)?0:1;return xe-fe});De(t,d)},[Z,M.getAllLeafColumns(),w,D.ROW_SELECTION_COLUMN_ID,De]);const _e=M.getVisibleLeafColumns(),{columnVirtualizer:ge,virtualPaddingLeft:ie,virtualPaddingRight:ne}=Dr({visibleColumns:_e,tableContainerRef:te,columnPinning:w,columnSizing:F,columnOrder:z}),He=Ir(M,F),{getRowHeight:ur,defaultRowHeight:ke}=zr(),lr=x.useMemo(()=>B.reduce((t,a)=>(a.data?.enum?.length&&(t[a.name]=a.data?.enum),t),{}),[B]),ar=x.useMemo(()=>K.map(t=>t.id),[K]),cr=x.useMemo(()=>!c||!q?null:K.find(t=>t.id===c),[c,K,q]),dr=x.useCallback(t=>{if(i?.(t),f){const a=t.currentTarget;if(a&&!k&&!v){const{scrollHeight:d,scrollTop:s,clientHeight:I}=a;d-s-I<500&&!Q&&f(t)}}if(g&&v){const I=t.currentTarget?.querySelector(".load-more")?.getAttribute("id")?.split("-")[2];I&&g(I)}},[i,f,g,k,v,Q]),{isEntityPickerOpen:qr,handleMoveSubmit:gr,closeMoveDialog:mr,movingEntities:me,handleMoveToRoot:xr,getDisabledFolderIds:fr,getDisabledMessage:pr}=Nr.useMoveEntities({projectName:ee}),Cr=t=>{gr(t);const a=t[0];be(d=>typeof d=="boolean"?d||{[a]:!0}:d[a]?d:{...d,[a]:!0})},Ae=r.jsxRuntimeExports.jsxs(wr.ClipboardProvider,{entitiesMap:Xe,columnEnums:{...re,...lr},columnReadOnly:nr,visibleColumns:_e,children:[r.jsxRuntimeExports.jsx(R.TableWrapper,{...Y,children:r.jsxRuntimeExports.jsx(R.TableContainer,{ref:te,style:{height:"100%",padding:0},onScroll:dr,...p?.container,className:N("table-container",{resizing:M.getState().columnSizingInfo.isResizingColumn},p?.container?.className),children:r.jsxRuntimeExports.jsxs("table",{style:{display:"grid",borderCollapse:"collapse",userSelect:"none",...He,width:M.getTotalSize(),cursor:M.getState().columnSizingInfo.isResizingColumn?"col-resize":void 0},children:[r.jsxRuntimeExports.jsx(Gr,{columnVirtualizer:ge,table:M,virtualPaddingLeft:ie,virtualPaddingRight:ne,isLoading:Q,readOnlyColumns:ze,sortableRows:q,...p?.head}),r.jsxRuntimeExports.jsx(Yr,{columnVirtualizer:ge,table:M,tableContainerRef:te,virtualPaddingLeft:ie,virtualPaddingRight:ne,showHierarchy:k,attribs:B,onOpenNew:C,rowOrderIds:ar,sortableRows:q,error:Je,isLoading:Q,isGrouping:O,getRowHeight:ur,defaultRowHeight:ke,onResetView:rr,contextMenuItems:$})]})})}),qr&&ee&&me?.entities&&me.entities.length>0&&r.jsxRuntimeExports.jsx(vr.EntityPickerDialog,{projectName:ee,entityType:"folder",onSubmit:Cr,onClose:mr,showMoveToRoot:me.entities.every(t=>t.entityType==="folder"),onMoveToRoot:xr,disabledIds:fr(),getDisabledMessage:pr})]}),hr=q&&c&&ye.createPortal(r.jsxRuntimeExports.jsx(Ar.DragOverlay,{dropAnimation:null,children:cr?(()=>{const t=M.getRowModel().rows.find(d=>d.id===c);if(!t)return null;const a=M.getTotalSize();return r.jsxRuntimeExports.jsx("table",{style:{width:a,borderCollapse:"collapse",backgroundColor:"var(--md-sys-color-surface-container-high)",boxShadow:"0 0 10px rgba(0,0,0,0.2)",...He},children:r.jsxRuntimeExports.jsx("tbody",{children:r.jsxRuntimeExports.jsxs(R.TR,{style:{display:"flex",userSelect:"none"},children:[ie?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:ie}}):null,ge.getVirtualItems().map(d=>{const s=t.getVisibleCells()[d.index];if(!s)return null;const I={...le(s.column),width:ae(t.id,s.column.id),display:"flex",alignItems:"center",height:ke};return s.column.id===U?r.jsxRuntimeExports.jsxs(R.TD,{style:{...I,justifyContent:"center"},className:N(s.column.id),children:[r.jsxRuntimeExports.jsx(oe.Icon,{icon:"drag_handle"})," "]},`overlay-drag-${s.id}`):r.jsxRuntimeExports.jsx(Ge,{cell:s,cellId:`overlay-${ue.getCellId(t.id,s.column.id)}`,rowId:t.id,showHierarchy:k},`overlay-cell-${s.id}`)}),ne?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:ne}}):null]})})})})():null}),document.body);return q?r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[Ae,hr]}):Ae},Gr=({columnVirtualizer:e,table:u,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y,...E})=>r.jsxRuntimeExports.jsx(R.TableHeader,{...E,children:u.getHeaderGroups().map(b=>r.jsxRuntimeExports.jsx(Kr,{columnVirtualizer:e,headerGroup:b,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y},b.id))}),Kr=({columnVirtualizer:e,headerGroup:u,virtualPaddingLeft:i,virtualPaddingRight:f,isLoading:C,readOnlyColumns:h,sortableRows:y})=>{const E=e.getVirtualItems();return r.jsxRuntimeExports.jsxs(R.ColumnHeader,{style:{display:"flex"},children:[i?r.jsxRuntimeExports.jsx("th",{style:{display:"flex",width:i}}):null,E.map(b=>{const n=u.headers[b.index];return r.jsxRuntimeExports.jsx(Xr,{header:n,isLoading:C,isReadOnly:h?.includes(n.id),canSort:n.column.getCanSort(),canFilter:n.column.getCanFilter(),canHide:n.column.getCanHide(),canPin:n.column.getCanPin(),canResize:n.column.getCanResize(),sortableRows:y},n.id)}),f?r.jsxRuntimeExports.jsx("th",{style:{display:"flex",width:f}}):null]},u.id)},Xr=({header:e,isLoading:u,canFilter:i,canHide:f,canSort:C,canPin:h,canResize:y,isReadOnly:E,sortableRows:b})=>{const{column:n}=e,j=n.getIsSorted(),S=`column-header-menu-${n.id}`,{menuOpen:o}=Mr.useMenuContext(),q=o===S;return r.jsxRuntimeExports.jsx(R.HeaderCell,{className:N(e.id,"shimmer-dark",{loading:u,"last-pinned-left":n.getIsPinned()==="left"&&n.getIsLastColumn("left"),resizing:n.getIsResizing()}),style:{...le(n),width:ae("",n.id)},children:e.isPlaceholder?null:r.jsxRuntimeExports.jsxs(R.TableCellContent,{className:N("bold","header"),children:[A.flexRender(n.columnDef.header,e.getContext()),E&&r.jsxRuntimeExports.jsx(oe.Icon,{icon:"lock","data-tooltip":"You only have permission to read this column."}),r.jsxRuntimeExports.jsxs(R.HeaderButtons,{className:"actions",$isOpen:q,children:[(f||h||C)&&r.jsxRuntimeExports.jsx(jr.ColumnHeaderMenu,{className:"header-menu",header:e,canHide:f,canPin:h,canSort:C,isResizing:n.getIsResizing(),menuId:S,isOpen:q}),C&&r.jsxRuntimeExports.jsx(Er,{icon:"sort",className:N("sort-button",{visible:j}),style:{transform:j==="asc"?"rotate(180deg) scaleX(-1)":"none"},onClick:n.getToggleSortingHandler(),selected:!!n.getIsSorted()})]}),y&&r.jsxRuntimeExports.jsx(R.ResizedHandler,{onDoubleClick:()=>n.resetSize(),onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:N("resize-handle",{resizing:n.getIsResizing()})})]})},e.id)},Yr=({columnVirtualizer:e,table:u,tableContainerRef:i,showHierarchy:f,virtualPaddingLeft:C,virtualPaddingRight:h,attribs:y,onOpenNew:E,rowOrderIds:b,sortableRows:n,error:j,isLoading:S,isGrouping:o,getRowHeight:q,defaultRowHeight:W,onResetView:c,contextMenuItems:_})=>{const g=x.useMemo(()=>u.getAllColumns().map(T=>{const J=T.id,l=T.columnDef.header;return typeof l=="string"||typeof l=="number"?{label:l,id:J}:null}).filter(Boolean),[u.getAllColumns()]),p=Pr({attribs:y,onOpenNew:E,headerLabels:g,contextMenuItems:_}).handleTableBodyContextMenu,{handlePreFetchTasks:Y}=Or.usePrefetchFolderTasks(),{rows:H}=u.getRowModel(),w=Rr.useVirtualizer({count:H.length,estimateSize:m=>{const L=H[m];return L?q(L.original):W},getScrollElement:()=>i.current,measureElement:typeof window<"u"&&navigator.userAgent.indexOf("Firefox")===-1?m=>m?.getBoundingClientRect().height:void 0,overscan:5}),z=w.getVirtualItems(),F=x.useCallback(m=>{m&&w.measureElement(m)},[w]);Lr();const G=r.jsxRuntimeExports.jsx("tbody",{style:{height:`${w.getTotalSize()}px`,position:"relative",display:"grid"},onContextMenu:p,onMouseOver:m=>{Y(m)},children:z.map((m,L)=>{const T=H[m.index];return T?r.jsxRuntimeExports.jsx(Jr,{row:T,showHierarchy:f,visibleCells:T.getVisibleCells(),virtualColumns:e.getVirtualItems(),paddingLeft:C,paddingRight:h,rowRef:F,dataIndex:m.index,offsetTop:m.start,sortableRows:n,isGrouping:o,rowHeight:q(T.original)},T.id+L.toString()):(console.warn("Virtualized row data not found for index:",m.index),null)})});return j?i.current&&ye.createPortal(r.jsxRuntimeExports.jsx(R.AnimatedEmptyPlaceholder,{children:r.jsxRuntimeExports.jsx(Fe.EmptyPlaceholder,{message:"No items found",error:j,children:c&&r.jsxRuntimeExports.jsx(oe.Button,{variant:"filled",label:"Reset working view",icon:"restart_alt",onClick:c})})}),i.current):!H.length&&!S?i.current&&ye.createPortal(r.jsxRuntimeExports.jsx(R.AnimatedEmptyPlaceholder,{children:r.jsxRuntimeExports.jsx(Fe.EmptyPlaceholder,{message:"No items found",children:c&&r.jsxRuntimeExports.jsx(oe.Button,{variant:"filled",label:"Reset working view",icon:"restart_alt",onClick:c})})}),i.current):n?r.jsxRuntimeExports.jsx(Re.SortableContext,{items:b,strategy:Re.verticalListSortingStrategy,children:G}):G},Jr=({row:e,showHierarchy:u,visibleCells:i,virtualColumns:f,paddingLeft:C,paddingRight:h,rowRef:y,dataIndex:E,offsetTop:b,sortableRows:n,isGrouping:j=!1,rowHeight:S})=>{const o=n?Re.useSortable({id:e.id}):null,q=x.useCallback(c=>{o&&o.setNodeRef(c),o&&o.isDragging||y(c)},[o,y]),W={position:"absolute",top:b,left:0,right:0,height:S,zIndex:o&&o.isDragging?0:1,display:"flex",transform:o&&o.transform?Fr.CSS.Transform.toString(o.transform):void 0,transition:o&&o.transition?o.transition:void 0,visibility:o&&o.isDragging?"hidden":"visible"};return r.jsxRuntimeExports.jsxs(R.TR,{ref:q,"data-index":E,style:W,className:N({"group-row":e.original.group}),children:[C?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:C}}):null,f.map((c,_)=>{const g=i[c.index];if(!g)return null;const $=ue.getCellId(e.id,g.column.id);return g.column.id===U?r.jsxRuntimeExports.jsx(R.TD,{style:{...le(g.column),width:ae(e.id,g.column.id),display:"flex",alignItems:"center",justifyContent:"center",height:S,pointerEvents:"all",cursor:"grab"},className:N(g.column.id,{"last-pinned-left":g.column.getIsPinned()==="left"&&g.column.getIsLastColumn("left")}),onMouseDown:p=>p.stopPropagation(),onMouseOver:p=>p.stopPropagation(),onDoubleClick:p=>p.stopPropagation(),onContextMenu:p=>{p.preventDefault(),p.stopPropagation()},children:r.jsxRuntimeExports.jsx(br,{attributes:o?.attributes,listeners:o?.listeners})},g.id+_.toString()):r.jsxRuntimeExports.jsx(Ge,{cell:g,cellId:$,rowId:e.id,showHierarchy:u,sortableRows:n,rowHeight:S},g.id+_.toString())}),h?r.jsxRuntimeExports.jsx("td",{style:{display:"flex",width:h}}):null]})},Ge=({cell:e,rowId:u,cellId:i,className:f,showHierarchy:C,sortableRows:h,rowHeight:y,...E})=>{const{getEntityById:b,onOpenPlayer:n}=$e.useProjectTableContext(),{isCellSelected:j,isCellFocused:S,startSelection:o,extendSelection:q,endSelection:W,selectCell:c,focusCell:_,getCellBorderClasses:g,clearSelection:$,selectedCells:p}=D.useSelectionCellsContext(),{isRowSelected:Y}=Sr.useSelectedRowsContext(),{isEditing:H,setEditingCellId:w,editingCellId:z}=We.useCellEditing(),F=g(i),m=e.column.getIsPinned()==="left"&&e.column.getIsLastColumn("left"),L=e.column.id===D.ROW_SELECTION_COLUMN_ID,T=e.row.original.entityType==="group",J=p.size>1;return r.jsxRuntimeExports.jsx(R.TD,{...E,tabIndex:0,$isLastPinned:m,className:N(e.column.id,{selected:j(i),focused:S(i),editing:H(i),"last-pinned-left":m,"selected-row":Y(u),expandable:!!e.row.originalSubRows&&Ue.isEntityExpandable(e.row.original.entityType),"multiple-selected":J},f,...F),style:{...le(e.column),width:ae(e.row.id,e.column.id),height:y},onMouseDown:l=>{if(l.button!==0)return;const V=l.target;if(V.closest(".expander")||V.closest(".options"))return;if(T&&e.column.id!=="name")return $();const v=he.isEntityRestricted(e.row.original.entityType);if(V.closest("."+Be.EDIT_TRIGGER_CLASS)&&!v){j(i)||(c(i,!1,!1),_(i)),w(i);return}if(j(i))return;if(z&&z!==i){const P=document.querySelector(`#${z} input, #${z} [role="textbox"]`);if(P){P.blur(),setTimeout(()=>{O()},0);return}}O();function O(){const P=l.metaKey||l.ctrlKey||L;l.shiftKey?c(i,P,!0):o(i,P),l.preventDefault()}},onMouseOver:l=>{if(l.buttons===1){if(l.target.closest("."+Be.EDIT_TRIGGER_CLASS))return;q(i,L)}},onMouseUp:()=>{W(i)},onDoubleClick:l=>{if(!(he.isTargetReadOnly(l)||he.isEntityRestricted(e.row.original.entityType))&&!T)if(e.column.id==="name"&&!l.target.closest(".expander")){const O=ue.getCellId(e.row.id,D.ROW_SELECTION_COLUMN_ID),P=l.metaKey||l.ctrlKey;j(O)||c(O,P,!1),c(i,!0,!1)}else if(e.column.id==="thumbnail"){if(n){const O=b(e.row.original.entityId||e.row.id);if(O){const P=Ur.getEntityViewierIds(O);n(P,{quickView:!0})}}}else w(i)},onContextMenu:l=>{l.preventDefault(),j(i)||c(i,!1,!1)},onKeyDown:()=>{},children:A.flexRender(e.column.columnDef.cell,e.getContext())})};exports.DRAG_HANDLE_COLUMN_ID=U;exports.ProjectTreeTable=$r;
2
2
  //# sourceMappingURL=ProjectTreeTable.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTreeTable.cjs.js","sources":["../../../../../src/containers/ProjectTreeTable/ProjectTreeTable.tsx"],"sourcesContent":["import { useMemo, useRef, useEffect, memo, CSSProperties, useCallback, UIEventHandler } 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 ExpandedState,\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 isEntityExpandable,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport { RowDragHandleCellContent, ColumnHeaderMenu } from './components'\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\nimport HeaderActionButton from './components/HeaderActionButton'\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'\nimport { useMenuContext } from '../../context/MenuContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu, {\n HeaderLabel,\n ContextMenuItemConstructors,\n} from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport useDynamicRowHeight from './hooks/useDynamicRowHeight'\n\n// EntityPickerDialog import\nimport { EntityPickerDialog } from '../EntityPickerDialog/EntityPickerDialog'\n// Move entity hook\nimport { useMoveEntities } from './hooks/useMoveEntities'\nimport { useProjectDataContext } from '@shared/containers'\n\n// Utility function imports\nimport { getCellId, parseCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { isEntityRestricted } from './utils/restrictedEntity'\nimport { createPortal } from 'react-dom'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getEntityViewierIds, getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { EntityUpdate } 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\nimport { useProjectContext } from '@shared/context'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\nimport { upperFirst } from 'lodash'\nimport { ColumnsConfig } from './types/columnConfig'\n\ntype CellUpdate = (\n entity: Omit<EntityUpdate, 'id'>,\n config?: { selection?: string[] },\n) => Promise<void>\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: CellUpdate\n toggleExpandAll?: ToggleExpandAll\n selection?: string[]\n columnsConfig?: ColumnsConfig\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\nconst getColumnWidth = (rowId: string, columnId: string) => {\n return `calc(var(--col-${columnId}-size) * 1px)`\n}\n// test\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n onScrollBottom?: React.HTMLAttributes<HTMLDivElement>['onScroll']\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n includeLinks?: boolean\n isLoading?: boolean\n isExpandable?: boolean // if true, show the expand/collapse icons\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 columnsConfig?: ColumnsConfig // Configure column behavior (display, styling, etc.)\n onScrollBottomGroupBy?: (groupValue: string) => void // Handle scroll to bottom for grouped data\n contextMenuItems?: ContextMenuItemConstructors // Additional context menu items to merge with defaults\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n excludedSorting,\n extraColumns,\n includeLinks,\n isLoading: isLoadingProp,\n isExpandable,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n columnsConfig,\n onScrollBottomGroupBy, // Destructure new prop for group-by load more\n contextMenuItems: propsContextMenuItems, // Additional context menu items from props\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnPinning,\n columnOrder,\n columnSizing,\n setAllColumns,\n sorting,\n sortingOnChange,\n columnPinningOnChange,\n columnSizingOnChange,\n columnVisibilityOnChange,\n columnOrderOnChange,\n groupBy,\n } = useColumnSettingsContext()\n const isGrouping = !!groupBy\n const { productTypes, projectName, ...projectInfo } = useProjectContext()\n\n const {\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n fetchNextPage,\n scopes, // or entityTypes\n getEntityById,\n onResetView,\n } = useProjectTableContext()\n\n const { writableFields } = useProjectDataContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const {\n statuses = [],\n folderTypes = [],\n taskTypes = [],\n tags = [],\n linkTypes = [],\n } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n productTypes,\n tags,\n scopes,\n }),\n [users, statuses, folderTypes, taskTypes, scopes, tags],\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 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, writableFields, readOnly),\n [attribFields, writableFields, readOnly],\n )\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const handleCellUpdate: CellUpdate = useCallback(\n async (entity, config) => {\n const { selection = [] } = config || {}\n const entitiesToUpdate: EntityUpdate[] = []\n if (!selection?.length) {\n entitiesToUpdate.push({ ...entity, id: entity.rowId })\n } else {\n // if includeSelection is true, update all the selected cells with the same columnId\n const { field, value, isAttrib } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n\n // ignore row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) continue\n\n const entity = getEntityById(rowId || '')\n if (!entity) {\n console.warn(`Entity with ID ${rowId} not found for cell update.`)\n continue\n }\n\n if ((!colId?.includes('attrib_') || colId?.replace('attrib_', '') === field) && rowId) {\n entitiesToUpdate.push({\n field: field,\n rowId: rowId,\n id: entity.entityId,\n value: value,\n isAttrib: isAttrib,\n type: entity.entityType,\n })\n }\n }\n }\n\n if (!entitiesToUpdate.length) {\n console.warn('No entities to update, skipping updateEntities call.')\n toast.warn('No entities to update.')\n return\n }\n\n await updateEntities(entitiesToUpdate, true)\n },\n [updateEntities, getEntityById, selectedCells],\n )\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n\n const getNameLabelHeader = () => {\n if (scopes.includes('version')) return 'Product / Version'\n return scopes.map((s) => upperFirst(s)).join(' / ')\n }\n\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n scopes,\n attribs: columnAttribs,\n links: linkTypes,\n includeLinks,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n excludedSorting,\n groupBy,\n nameLabel: getNameLabelHeader(),\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 }, [\n scopes,\n columnAttribs,\n showHierarchy,\n isExpandable,\n options,\n linkTypes,\n includeLinks,\n extraColumns,\n excludedColumns,\n excludedSorting,\n sortableRows,\n ])\n\n // Keep ColumnSettingsProvider's allColumns ref up to date\n useEffect(() => {\n const ids = columns.map((c) => c.id!).filter(Boolean)\n setAllColumns(ids)\n }, [columns, setAllColumns])\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: () => !!isExpandable || showHierarchy || isGrouping,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n enableSorting: true,\n getSortedRowModel: getSortedRowModel(),\n sortDescFirst: false,\n manualSorting: !clientSorting,\n onSortingChange: sortingOnChange,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningOnChange,\n onColumnSizingChange: columnSizingOnChange,\n onColumnVisibilityChange: columnVisibilityOnChange,\n onColumnOrderChange: columnOrderOnChange,\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 meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreRows: fetchNextPage,\n selection: Array.from(selectedCells),\n columnsConfig,\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 columnSizing,\n columnOrder,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n // Calculate dynamic row height based on user setting from Customize panel\n const { getRowHeight, defaultRowHeight } = useDynamicRowHeight()\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 combinedScrollHandler: UIEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n // Call the original onScroll if provided\n onScroll?.(e)\n\n if (onScrollBottom) {\n const containerRefElement = e.currentTarget\n if (containerRefElement && !showHierarchy && !groupBy) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading) {\n onScrollBottom(e)\n }\n }\n }\n\n // Handle scroll-to-bottom for grouped data\n if (onScrollBottomGroupBy && groupBy) {\n const containerRefElement = e.currentTarget\n // look for a load more button\n const loadMoreButton = containerRefElement?.querySelector('.load-more')\n // get load more button id\n const loadMoreButtonId = loadMoreButton?.getAttribute('id')\n const groupValue = loadMoreButtonId?.split('-')[2] // assuming the id is in the format 'load-more-groupValue'\n if (groupValue) {\n onScrollBottomGroupBy(groupValue)\n }\n }\n },\n [onScroll, onScrollBottom, onScrollBottomGroupBy, showHierarchy, groupBy, isLoading],\n )\n\n // Get move entity functions for the dialog\n const {\n isEntityPickerOpen,\n handleMoveSubmit,\n closeMoveDialog,\n movingEntities,\n handleMoveToRoot,\n getDisabledFolderIds,\n getDisabledMessage,\n } = useMoveEntities({\n projectName,\n })\n\n const handleMoveSubmitWithExpand = (selection: string[]) => {\n handleMoveSubmit(selection)\n const folderIdToExpand = selection[0]\n\n updateExpanded((prevExpanded: ExpandedState) => {\n if (typeof prevExpanded === 'boolean') {\n if (prevExpanded) {\n return prevExpanded\n }\n return { [folderIdToExpand]: true }\n }\n\n if (prevExpanded[folderIdToExpand]) {\n return prevExpanded\n }\n\n return {\n ...prevExpanded,\n [folderIdToExpand]: true,\n }\n })\n }\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n visibleColumns={visibleColumns}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={combinedScrollHandler}\n {...pt?.container}\n className={clsx(\n 'table-container',\n {\n resizing: table.getState().columnSizingInfo.isResizingColumn,\n },\n pt?.container?.className,\n )}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n cursor: table.getState().columnSizingInfo.isResizingColumn ? 'col-resize' : undefined,\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 isLoading={isLoading}\n isGrouping={isGrouping}\n getRowHeight={getRowHeight}\n defaultRowHeight={defaultRowHeight}\n onResetView={onResetView}\n contextMenuItems={propsContextMenuItems}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n {/* Render EntityPickerDialog alongside table content */}\n {isEntityPickerOpen &&\n projectName &&\n movingEntities?.entities &&\n movingEntities.entities.length > 0 && (\n <EntityPickerDialog\n projectName={projectName}\n entityType=\"folder\"\n onSubmit={handleMoveSubmitWithExpand}\n onClose={closeMoveDialog}\n showMoveToRoot={movingEntities.entities.every(\n (entity: EntityMoveData) => entity.entityType === 'folder',\n )}\n onMoveToRoot={handleMoveToRoot}\n disabledIds={getDisabledFolderIds()}\n getDisabledMessage={getDisabledMessage}\n />\n )}\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: getColumnWidth(overlayRowInstance.id, cell.column.id),\n display: 'flex',\n alignItems: 'center',\n height: defaultRowHeight,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\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.TD>\n )\n }\n return (\n <TD\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 const sorting = column.getIsSorted()\n const menuId = `column-header-menu-${column.id}`\n const { menuOpen } = useMenuContext()\n const isOpen = menuOpen === menuId\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 resizing: column.getIsResizing(),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: getColumnWidth('', column.id),\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\" $isOpen={isOpen}>\n {(canHide || canPin || canSort) && (\n <ColumnHeaderMenu\n className=\"header-menu\"\n header={header}\n canHide={canHide}\n canPin={canPin}\n canSort={canSort}\n isResizing={column.getIsResizing()}\n menuId={menuId}\n isOpen={isOpen}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon=\"sort\"\n className={clsx('sort-button', { visible: sorting })}\n style={{\n transform: sorting === 'asc' ? 'rotate(180deg) scaleX(-1)' : 'none',\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 isLoading: boolean\n isGrouping: boolean\n getRowHeight: (row: TableRow) => number\n defaultRowHeight: number\n onResetView?: () => void\n contextMenuItems?: ContextMenuItemConstructors\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 isLoading,\n isGrouping,\n getRowHeight,\n defaultRowHeight,\n onResetView,\n contextMenuItems,\n}: TableBodyProps) => {\n const headerLabels = useMemo(() => {\n const allColumns = table.getAllColumns()\n const headers = allColumns\n .map((col) => {\n const headerId = col.id\n const header = col.columnDef.header\n if (typeof header === 'string' || typeof header === 'number') {\n return { label: header, id: headerId }\n }\n return null\n })\n .filter(Boolean)\n\n return headers as HeaderLabel[]\n }, [table.getAllColumns()])\n\n const cellContextMenuHook = useCellContextMenu({\n attribs,\n onOpenNew,\n headerLabels,\n contextMenuItems,\n })\n\n const handleTableBodyContextMenu = cellContextMenuHook.handleTableBodyContextMenu\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: (index) => {\n // Calculate dynamic row height based on specific row data\n const row = rows[index]\n return row ? getRowHeight(row.original) : defaultRowHeight\n },\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, i) => {\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 + i.toString()} // 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 isGrouping={isGrouping}\n rowHeight={getRowHeight(row.original)}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\" error={error}>\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (!rows.length && !isLoading) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\">\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\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 isGrouping: boolean\n rowHeight: number\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 isGrouping = false,\n rowHeight,\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: rowHeight, // Use dynamic row height\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 className={clsx({ 'group-row': row.original.group })}\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, i) => {\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.TD\n key={cell.id + i.toString()}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(row.id, cell.column.id),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: rowHeight,\n pointerEvents: 'all',\n cursor: 'grab',\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 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.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n rowHeight={rowHeight}\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 rowHeight?: number\n}\n\nconst TD = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n rowHeight,\n ...props\n}: TableCellProps) => {\n const { getEntityById, onOpenPlayer } = useProjectTableContext()\n\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n focusCell,\n getCellBorderClasses,\n clearSelection,\n selectedCells,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing, setEditingCellId, editingCellId } = 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 const isMultipleSelected = selectedCells.size > 1\n\n return (\n <Styled.TD\n {...props}\n tabIndex={0}\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 expandable:\n !!cell.row.originalSubRows && isEntityExpandable(cell.row.original.entityType),\n 'multiple-selected': isMultipleSelected,\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.row.id, cell.column.id),\n height: rowHeight,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n const target = e.target as HTMLElement\n\n // setTimeout(() => {\n // target.focus()\n // }, 100) // ensure focus after any other events\n\n // check we are not clicking on expander\n if (target.closest('.expander')) return\n\n // check we are not clicking in a dropdown\n if (target.closest('.options')) return\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n // check if this is a restricted entity - prevent editing\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // if clicking on an edit trigger, start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS) && !isRestricted) {\n // Select the cell first if not already selected\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n setEditingCellId(cellId)\n return\n }\n\n // if cell is already selected, do nothing\n if (isCellSelected(cellId)) return\n\n // if editing close editor if selecting different cell\n if (!!editingCellId && !isCellSelected(cellId)) {\n setEditingCellId(null)\n }\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 startSelection(cellId, additive)\n }\n\n // Prevent default browser behavior to ensure focus stays on the cell\n e.preventDefault()\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // check not selecting am edit trigger\n const target = e.target as HTMLElement\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) return\n\n // Left button is pressed during mouse move - drag selection\n // Note: extendSelection is always called to allow drag to continue through cells\n // Restricted cells will be filtered out later\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n console.log('DBL CLICK')\n // check if this is a restricted entity - prevent opening details/viewer\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // do nothing for restricted entities\n if (isRestricted) return\n\n // do nothing for groups\n if (isGroup) return\n\n // row selection on name column double click\n // making sure it's not the expander that was clicked\n if (cell.column.id === 'name' && !(e.target as HTMLElement).closest('.expander')) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n const additive = e.metaKey || e.ctrlKey\n\n // Select both the row-selection cell and the name cell\n if (!isCellSelected(rowSelectionCellId)) {\n selectCell(rowSelectionCellId, additive, false)\n }\n selectCell(cellId, true, false) // additive=true to keep row-selection\n }\n // open the viewer on thumbnail double click\n else if (cell.column.id === 'thumbnail') {\n if (onOpenPlayer) {\n const entity = getEntityById(cell.row.original.entityId || cell.row.id)\n if (entity) {\n const targetIds = getEntityViewierIds(entity)\n onOpenPlayer(targetIds, { quickView: true })\n }\n }\n }\n // Double click on editable cell triggers edit mode\n else {\n setEditingCellId(cellId)\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 onKeyDown={() => {\n // keyboard events are handled in useKeyboardNavigation hook\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TD>\n )\n}\n"],"names":["getCommonPinningStyles","column","isPinned","offset","ROW_SELECTION_COLUMN_ID","DRAG_HANDLE_COLUMN_ID","getColumnWidth","rowId","columnId","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","excludedSorting","extraColumns","includeLinks","isLoadingProp","isExpandable","clientSorting","sortableRows","onRowReorder","dndActiveId","columnsConfig","onScrollBottomGroupBy","propsContextMenuItems","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","columnVisibilityOnChange","columnOrderOnChange","groupBy","useColumnSettingsContext","isGrouping","productTypes","projectName","projectInfo","useProjectContext","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","updateExpanded","toggleExpandAll","showHierarchy","fetchNextPage","scopes","getEntityById","onResetView","useProjectTableContext","writableFields","useProjectDataContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","cellId","colId","parseCellId","toast","columnAttribs","getNameLabelHeader","s","upperFirst","columns","baseColumns","buildTreeTableColumns","useEffect","ids","c","table","useReactTable","row","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","leftPins","contextLeftPins","id","rows","rowIds","colIdsSortedByPinning","col","a","b","colA","colB","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","columnSizeVars","useCustomColumnWidthVars","getRowHeight","defaultRowHeight","useDynamicRowHeight","attribByField","acc","attrib","rowOrderIds","draggedRowData","r","combinedScrollHandler","e","containerRefElement","scrollHeight","scrollTop","clientHeight","groupValue","isEntityPickerOpen","handleMoveSubmit","closeMoveDialog","movingEntities","handleMoveToRoot","getDisabledFolderIds","getDisabledMessage","useMoveEntities","handleMoveSubmitWithExpand","folderIdToExpand","prevExpanded","tableUiContent","jsxs","ClipboardProvider","jsx","Styled.TableWrapper","Styled.TableContainer","clsx","TableHead","TableBody","EntityPickerDialog","dragOverlayPortal","createPortal","DragOverlay","overlayRowInstance","tableWidth","Styled.TR","vc","cell","cellStyleBase","Styled.TD","Icon","TD","getCellId","Fragment","Styled.TableHeader","headerGroup","TableHeadRow","virtualColumns","Styled.ColumnHeader","virtualColumn","header","TableHeadCell","canFilter","canHide","canSort","canPin","canResize","isReadOnly","menuId","menuOpen","useMenuContext","isOpen","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.HeaderButtons","ColumnHeaderMenu","HeaderActionButton","Styled.ResizedHandler","attribs","contextMenuItems","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","index","element","virtualRows","measureRowElement","node","useKeyboardNavigation","tbodyContent","virtualRow","i","TableBodyRow","Styled.AnimatedEmptyPlaceholder","EmptyPlaceholder","Button","SortableContext","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","rowHeight","sortable","useSortable","combinedRef","style","CSS","RowDragHandleCellContent","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","editingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","isMultipleSelected","isEntityExpandable","target","isRestricted","isEntityRestricted","EDIT_TRIGGER_CLASS","additive","rowSelectionCellId","targetIds","getEntityViewierIds"],"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, UIEventHandler } 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 ExpandedState,\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 isEntityExpandable,\n TreeTableExtraColumn,\n} from './buildTreeTableColumns'\nimport * as Styled from './ProjectTreeTable.styled'\nimport { RowDragHandleCellContent, ColumnHeaderMenu } from './components'\nimport EmptyPlaceholder from '../../components/EmptyPlaceholder'\nimport HeaderActionButton from './components/HeaderActionButton'\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'\nimport { useMenuContext } from '../../context/MenuContext'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu, {\n HeaderLabel,\n ContextMenuItemConstructors,\n} from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\nimport useDynamicRowHeight from './hooks/useDynamicRowHeight'\n\n// EntityPickerDialog import\nimport { EntityPickerDialog } from '../EntityPickerDialog/EntityPickerDialog'\n// Move entity hook\nimport { useMoveEntities } from './hooks/useMoveEntities'\nimport { useProjectDataContext } from '@shared/containers'\n\n// Utility function imports\nimport { getCellId, parseCellId } from './utils/cellUtils'\nimport { generateLoadingRows, generateDummyAttributes } from './utils/loadingUtils'\nimport { isEntityRestricted, isTargetReadOnly } from './utils/restrictedEntity'\nimport { createPortal } from 'react-dom'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport { AttributeEnumItem, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport { ToggleExpandAll, useProjectTableContext } from './context/ProjectTableContext'\nimport { getEntityViewierIds, getReadOnlyLists, getTableFieldOptions } from './utils'\nimport { EntityUpdate } 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\nimport { useProjectContext } from '@shared/context'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\nimport { upperFirst } from 'lodash'\nimport { ColumnsConfig } from './types/columnConfig'\n\ntype CellUpdate = (\n entity: Omit<EntityUpdate, 'id'>,\n config?: { selection?: string[] },\n) => Promise<void>\n\ndeclare module '@tanstack/react-table' {\n interface TableMeta<TData extends RowData> {\n options?: BuiltInFieldOptions\n readOnly?: ProjectTreeTableProps['readOnly']\n projectName?: string\n updateEntities?: CellUpdate\n toggleExpandAll?: ToggleExpandAll\n selection?: string[]\n columnsConfig?: ColumnsConfig\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\nconst getColumnWidth = (rowId: string, columnId: string) => {\n return `calc(var(--col-${columnId}-size) * 1px)`\n}\n// test\n\nexport const DRAG_HANDLE_COLUMN_ID = 'drag-handle'\n\nexport interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {\n scope: string\n sliceId: string\n onScrollBottom?: React.HTMLAttributes<HTMLDivElement>['onScroll']\n onOpenNew?: (type: 'folder' | 'task') => void\n readOnly?: (DefaultColumns | string)[]\n excludedColumns?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n includeLinks?: boolean\n isLoading?: boolean\n isExpandable?: boolean // if true, show the expand/collapse icons\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 columnsConfig?: ColumnsConfig // Configure column behavior (display, styling, etc.)\n onScrollBottomGroupBy?: (groupValue: string) => void // Handle scroll to bottom for grouped data\n contextMenuItems?: ContextMenuItemConstructors // Additional context menu items to merge with defaults\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n excludedSorting,\n extraColumns,\n includeLinks,\n isLoading: isLoadingProp,\n isExpandable,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n columnsConfig,\n onScrollBottomGroupBy, // Destructure new prop for group-by load more\n contextMenuItems: propsContextMenuItems, // Additional context menu items from props\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n columnPinning,\n columnOrder,\n columnSizing,\n setAllColumns,\n sorting,\n sortingOnChange,\n columnPinningOnChange,\n columnSizingOnChange,\n columnVisibilityOnChange,\n columnOrderOnChange,\n groupBy,\n } = useColumnSettingsContext()\n const isGrouping = !!groupBy\n const { productTypes, projectName, ...projectInfo } = useProjectContext()\n\n const {\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n fetchNextPage,\n scopes, // or entityTypes\n getEntityById,\n onResetView,\n } = useProjectTableContext()\n\n const { writableFields } = useProjectDataContext()\n\n const isLoading = isLoadingProp || isLoadingData\n\n const {\n statuses = [],\n folderTypes = [],\n taskTypes = [],\n tags = [],\n linkTypes = [],\n } = projectInfo || {}\n const options: BuiltInFieldOptions = useMemo(\n () =>\n getTableFieldOptions({\n users,\n statuses,\n folderTypes,\n taskTypes,\n productTypes,\n tags,\n scopes,\n }),\n [users, statuses, folderTypes, taskTypes, scopes, tags],\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 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, writableFields, readOnly),\n [attribFields, writableFields, readOnly],\n )\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n\n const handleCellUpdate: CellUpdate = useCallback(\n async (entity, config) => {\n const { selection = [] } = config || {}\n const entitiesToUpdate: EntityUpdate[] = []\n if (!selection?.length) {\n entitiesToUpdate.push({ ...entity, id: entity.rowId })\n } else {\n // if includeSelection is true, update all the selected cells with the same columnId\n const { field, value, isAttrib } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n\n // ignore row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) continue\n\n const entity = getEntityById(rowId || '')\n if (!entity) {\n console.warn(`Entity with ID ${rowId} not found for cell update.`)\n continue\n }\n\n if ((!colId?.includes('attrib_') || colId?.replace('attrib_', '') === field) && rowId) {\n entitiesToUpdate.push({\n field: field,\n rowId: rowId,\n id: entity.entityId,\n value: value,\n isAttrib: isAttrib,\n type: entity.entityType,\n })\n }\n }\n }\n\n if (!entitiesToUpdate.length) {\n console.warn('No entities to update, skipping updateEntities call.')\n toast.warn('No entities to update.')\n return\n }\n\n await updateEntities(entitiesToUpdate, true)\n },\n [updateEntities, getEntityById, selectedCells],\n )\n\n const columnAttribs = useMemo(\n () => (isInitialized ? attribFields : loadingAttrib),\n [attribFields, loadingAttrib, isInitialized],\n )\n\n const getNameLabelHeader = () => {\n if (scopes.includes('version')) return 'Product / Version'\n return scopes.map((s) => upperFirst(s)).join(' / ')\n }\n\n const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n scopes,\n attribs: columnAttribs,\n links: linkTypes,\n includeLinks,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n excludedSorting,\n groupBy,\n nameLabel: getNameLabelHeader(),\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 }, [\n scopes,\n columnAttribs,\n showHierarchy,\n isExpandable,\n options,\n linkTypes,\n includeLinks,\n extraColumns,\n excludedColumns,\n excludedSorting,\n sortableRows,\n ])\n\n // Keep ColumnSettingsProvider's allColumns ref up to date\n useEffect(() => {\n const ids = columns.map((c) => c.id!).filter(Boolean)\n setAllColumns(ids)\n }, [columns, setAllColumns])\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: () => !!isExpandable || showHierarchy || isGrouping,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n enableSorting: true,\n getSortedRowModel: getSortedRowModel(),\n sortDescFirst: false,\n manualSorting: !clientSorting,\n onSortingChange: sortingOnChange,\n columnResizeMode: 'onChange',\n onColumnPinningChange: columnPinningOnChange,\n onColumnSizingChange: columnSizingOnChange,\n onColumnVisibilityChange: columnVisibilityOnChange,\n onColumnOrderChange: columnOrderOnChange,\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 meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreRows: fetchNextPage,\n selection: Array.from(selectedCells),\n columnsConfig,\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 columnSizing,\n columnOrder,\n })\n\n const columnSizeVars = useCustomColumnWidthVars(table, columnSizing)\n\n // Calculate dynamic row height based on user setting from Customize panel\n const { getRowHeight, defaultRowHeight } = useDynamicRowHeight()\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 combinedScrollHandler: UIEventHandler<HTMLDivElement> = useCallback(\n (e) => {\n // Call the original onScroll if provided\n onScroll?.(e)\n\n if (onScrollBottom) {\n const containerRefElement = e.currentTarget\n if (containerRefElement && !showHierarchy && !groupBy) {\n const { scrollHeight, scrollTop, clientHeight } = containerRefElement\n //once the user has scrolled within 500px of the bottom of the table, fetch more data if we can\n if (scrollHeight - scrollTop - clientHeight < 500 && !isLoading) {\n onScrollBottom(e)\n }\n }\n }\n\n // Handle scroll-to-bottom for grouped data\n if (onScrollBottomGroupBy && groupBy) {\n const containerRefElement = e.currentTarget\n // look for a load more button\n const loadMoreButton = containerRefElement?.querySelector('.load-more')\n // get load more button id\n const loadMoreButtonId = loadMoreButton?.getAttribute('id')\n const groupValue = loadMoreButtonId?.split('-')[2] // assuming the id is in the format 'load-more-groupValue'\n if (groupValue) {\n onScrollBottomGroupBy(groupValue)\n }\n }\n },\n [onScroll, onScrollBottom, onScrollBottomGroupBy, showHierarchy, groupBy, isLoading],\n )\n\n // Get move entity functions for the dialog\n const {\n isEntityPickerOpen,\n handleMoveSubmit,\n closeMoveDialog,\n movingEntities,\n handleMoveToRoot,\n getDisabledFolderIds,\n getDisabledMessage,\n } = useMoveEntities({\n projectName,\n })\n\n const handleMoveSubmitWithExpand = (selection: string[]) => {\n handleMoveSubmit(selection)\n const folderIdToExpand = selection[0]\n\n updateExpanded((prevExpanded: ExpandedState) => {\n if (typeof prevExpanded === 'boolean') {\n if (prevExpanded) {\n return prevExpanded\n }\n return { [folderIdToExpand]: true }\n }\n\n if (prevExpanded[folderIdToExpand]) {\n return prevExpanded\n }\n\n return {\n ...prevExpanded,\n [folderIdToExpand]: true,\n }\n })\n }\n\n const tableUiContent = (\n <ClipboardProvider\n entitiesMap={entitiesMap}\n columnEnums={{ ...options, ...attribByField }}\n columnReadOnly={readOnlyAttribs}\n visibleColumns={visibleColumns}\n >\n <Styled.TableWrapper {...props}>\n <Styled.TableContainer\n ref={tableContainerRef}\n style={{ height: '100%', padding: 0 }}\n onScroll={combinedScrollHandler}\n {...pt?.container}\n className={clsx(\n 'table-container',\n {\n resizing: table.getState().columnSizingInfo.isResizingColumn,\n },\n pt?.container?.className,\n )}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n cursor: table.getState().columnSizingInfo.isResizingColumn ? 'col-resize' : undefined,\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 isLoading={isLoading}\n isGrouping={isGrouping}\n getRowHeight={getRowHeight}\n defaultRowHeight={defaultRowHeight}\n onResetView={onResetView}\n contextMenuItems={propsContextMenuItems}\n />\n </table>\n </Styled.TableContainer>\n </Styled.TableWrapper>\n {/* Render EntityPickerDialog alongside table content */}\n {isEntityPickerOpen &&\n projectName &&\n movingEntities?.entities &&\n movingEntities.entities.length > 0 && (\n <EntityPickerDialog\n projectName={projectName}\n entityType=\"folder\"\n onSubmit={handleMoveSubmitWithExpand}\n onClose={closeMoveDialog}\n showMoveToRoot={movingEntities.entities.every(\n (entity: EntityMoveData) => entity.entityType === 'folder',\n )}\n onMoveToRoot={handleMoveToRoot}\n disabledIds={getDisabledFolderIds()}\n getDisabledMessage={getDisabledMessage}\n />\n )}\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: getColumnWidth(overlayRowInstance.id, cell.column.id),\n display: 'flex',\n alignItems: 'center',\n height: defaultRowHeight,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TD\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.TD>\n )\n }\n return (\n <TD\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 const sorting = column.getIsSorted()\n const menuId = `column-header-menu-${column.id}`\n const { menuOpen } = useMenuContext()\n const isOpen = menuOpen === menuId\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 resizing: column.getIsResizing(),\n })}\n key={header.id}\n style={{\n ...getCommonPinningStyles(column),\n width: getColumnWidth('', column.id),\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\" $isOpen={isOpen}>\n {(canHide || canPin || canSort) && (\n <ColumnHeaderMenu\n className=\"header-menu\"\n header={header}\n canHide={canHide}\n canPin={canPin}\n canSort={canSort}\n isResizing={column.getIsResizing()}\n menuId={menuId}\n isOpen={isOpen}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon=\"sort\"\n className={clsx('sort-button', { visible: sorting })}\n style={{\n transform: sorting === 'asc' ? 'rotate(180deg) scaleX(-1)' : 'none',\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 isLoading: boolean\n isGrouping: boolean\n getRowHeight: (row: TableRow) => number\n defaultRowHeight: number\n onResetView?: () => void\n contextMenuItems?: ContextMenuItemConstructors\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 isLoading,\n isGrouping,\n getRowHeight,\n defaultRowHeight,\n onResetView,\n contextMenuItems,\n}: TableBodyProps) => {\n const headerLabels = useMemo(() => {\n const allColumns = table.getAllColumns()\n const headers = allColumns\n .map((col) => {\n const headerId = col.id\n const header = col.columnDef.header\n if (typeof header === 'string' || typeof header === 'number') {\n return { label: header, id: headerId }\n }\n return null\n })\n .filter(Boolean)\n\n return headers as HeaderLabel[]\n }, [table.getAllColumns()])\n\n const cellContextMenuHook = useCellContextMenu({\n attribs,\n onOpenNew,\n headerLabels,\n contextMenuItems,\n })\n\n const handleTableBodyContextMenu = cellContextMenuHook.handleTableBodyContextMenu\n\n const { handlePreFetchTasks } = usePrefetchFolderTasks()\n\n const { rows } = table.getRowModel()\n\n const rowVirtualizer = useVirtualizer<HTMLDivElement, HTMLTableRowElement>({\n count: rows.length,\n estimateSize: (index) => {\n // Calculate dynamic row height based on specific row data\n const row = rows[index]\n return row ? getRowHeight(row.original) : defaultRowHeight\n },\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, i) => {\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 + i.toString()} // 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 isGrouping={isGrouping}\n rowHeight={getRowHeight(row.original)}\n />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\" error={error}>\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\n tableContainerRef.current,\n )\n )\n }\n\n if (!rows.length && !isLoading) {\n return (\n tableContainerRef.current &&\n createPortal(\n <Styled.AnimatedEmptyPlaceholder>\n <EmptyPlaceholder message=\"No items found\">\n {onResetView && (\n <Button\n variant=\"filled\"\n label=\"Reset working view\"\n icon=\"restart_alt\"\n onClick={onResetView}\n />\n )}\n </EmptyPlaceholder>\n </Styled.AnimatedEmptyPlaceholder>,\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 isGrouping: boolean\n rowHeight: number\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 isGrouping = false,\n rowHeight,\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: rowHeight, // Use dynamic row height\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 className={clsx({ 'group-row': row.original.group })}\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, i) => {\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.TD\n key={cell.id + i.toString()}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(row.id, cell.column.id),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: rowHeight,\n pointerEvents: 'all',\n cursor: 'grab',\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 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.TD>\n )\n }\n return (\n <TD\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n rowHeight={rowHeight}\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 rowHeight?: number\n}\n\nconst TD = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n rowHeight,\n ...props\n}: TableCellProps) => {\n const { getEntityById, onOpenPlayer } = useProjectTableContext()\n\n const {\n isCellSelected,\n isCellFocused,\n startSelection,\n extendSelection,\n endSelection,\n selectCell,\n focusCell,\n getCellBorderClasses,\n clearSelection,\n selectedCells,\n } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing, setEditingCellId, editingCellId } = 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 const isMultipleSelected = selectedCells.size > 1\n\n return (\n <Styled.TD\n {...props}\n tabIndex={0}\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 expandable:\n !!cell.row.originalSubRows && isEntityExpandable(cell.row.original.entityType),\n 'multiple-selected': isMultipleSelected,\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.row.id, cell.column.id),\n height: rowHeight,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n const target = e.target as HTMLElement\n\n // check we are not clicking on expander\n if (target.closest('.expander')) return\n\n // check we are not clicking in a dropdown\n if (target.closest('.options')) return\n\n // only name column can be selected for group rows\n if (isGroup && cell.column.id !== 'name') return clearSelection()\n\n // check if this is a restricted entity - prevent editing\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // if clicking on an edit trigger, start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS) && !isRestricted) {\n // Select the cell first if not already selected\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n setEditingCellId(cellId)\n return\n }\n\n // if cell is already selected, do nothing\n if (isCellSelected(cellId)) return\n\n // If there's an active edit on a different cell, blur it first to save changes\n if (editingCellId && editingCellId !== cellId) {\n // Find the currently editing input and blur it\n const editingInput = document.querySelector(\n `#${editingCellId} input, #${editingCellId} [role=\"textbox\"]`,\n ) as HTMLElement\n if (editingInput) {\n editingInput.blur()\n // Wait a tick for the blur event to process and save\n setTimeout(() => {\n proceedWithSelection()\n }, 0)\n return\n }\n }\n\n proceedWithSelection()\n\n function proceedWithSelection() {\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 startSelection(cellId, additive)\n }\n\n // Prevent default browser behavior to ensure focus stays on the cell\n e.preventDefault()\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // check not selecting am edit trigger\n const target = e.target as HTMLElement\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) return\n\n // Left button is pressed during mouse move - drag selection\n // Note: extendSelection is always called to allow drag to continue through cells\n // Restricted cells will be filtered out later\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n const isReadOnly = isTargetReadOnly(e)\n if (isReadOnly) return\n\n // check if this is a restricted entity - prevent opening details/viewer\n const isRestricted = isEntityRestricted(cell.row.original.entityType)\n\n // do nothing for restricted entities\n if (isRestricted) return\n\n // do nothing for groups\n if (isGroup) return\n\n // row selection on name column double click\n // making sure it's not the expander that was clicked\n if (cell.column.id === 'name' && !(e.target as HTMLElement).closest('.expander')) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n const additive = e.metaKey || e.ctrlKey\n\n // Select both the row-selection cell and the name cell\n if (!isCellSelected(rowSelectionCellId)) {\n selectCell(rowSelectionCellId, additive, false)\n }\n selectCell(cellId, true, false) // additive=true to keep row-selection\n }\n // open the viewer on thumbnail double click\n else if (cell.column.id === 'thumbnail') {\n if (onOpenPlayer) {\n const entity = getEntityById(cell.row.original.entityId || cell.row.id)\n if (entity) {\n const targetIds = getEntityViewierIds(entity)\n onOpenPlayer(targetIds, { quickView: true })\n }\n }\n }\n // Double click on editable cell triggers edit mode\n else {\n setEditingCellId(cellId)\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 onKeyDown={() => {\n // keyboard events are handled in useKeyboardNavigation hook\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TD>\n )\n}\n"],"names":["getCommonPinningStyles","column","isPinned","offset","ROW_SELECTION_COLUMN_ID","DRAG_HANDLE_COLUMN_ID","getColumnWidth","rowId","columnId","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","excludedSorting","extraColumns","includeLinks","isLoadingProp","isExpandable","clientSorting","sortableRows","onRowReorder","dndActiveId","columnsConfig","onScrollBottomGroupBy","propsContextMenuItems","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","columnVisibilityOnChange","columnOrderOnChange","groupBy","useColumnSettingsContext","isGrouping","productTypes","projectName","projectInfo","useProjectContext","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","updateExpanded","toggleExpandAll","showHierarchy","fetchNextPage","scopes","getEntityById","onResetView","useProjectTableContext","writableFields","useProjectDataContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","cellId","colId","parseCellId","toast","columnAttribs","getNameLabelHeader","s","upperFirst","columns","baseColumns","buildTreeTableColumns","useEffect","ids","c","table","useReactTable","row","getCoreRowModel","getFilteredRowModel","getExpandedRowModel","getSortedRowModel","filterFns","leftPins","contextLeftPins","id","rows","rowIds","colIdsSortedByPinning","col","a","b","colA","colB","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","columnSizeVars","useCustomColumnWidthVars","getRowHeight","defaultRowHeight","useDynamicRowHeight","attribByField","acc","attrib","rowOrderIds","draggedRowData","r","combinedScrollHandler","e","containerRefElement","scrollHeight","scrollTop","clientHeight","groupValue","isEntityPickerOpen","handleMoveSubmit","closeMoveDialog","movingEntities","handleMoveToRoot","getDisabledFolderIds","getDisabledMessage","useMoveEntities","handleMoveSubmitWithExpand","folderIdToExpand","prevExpanded","tableUiContent","jsxs","ClipboardProvider","jsx","Styled.TableWrapper","Styled.TableContainer","clsx","TableHead","TableBody","EntityPickerDialog","dragOverlayPortal","createPortal","DragOverlay","overlayRowInstance","tableWidth","Styled.TR","vc","cell","cellStyleBase","Styled.TD","Icon","TD","getCellId","Fragment","Styled.TableHeader","headerGroup","TableHeadRow","virtualColumns","Styled.ColumnHeader","virtualColumn","header","TableHeadCell","canFilter","canHide","canSort","canPin","canResize","isReadOnly","menuId","menuOpen","useMenuContext","isOpen","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.HeaderButtons","ColumnHeaderMenu","HeaderActionButton","Styled.ResizedHandler","attribs","contextMenuItems","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","index","element","virtualRows","measureRowElement","node","useKeyboardNavigation","tbodyContent","virtualRow","i","TableBodyRow","Styled.AnimatedEmptyPlaceholder","EmptyPlaceholder","Button","SortableContext","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","rowHeight","sortable","useSortable","combinedRef","style","CSS","RowDragHandleCellContent","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","editingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","isMultipleSelected","isEntityExpandable","target","isRestricted","isEntityRestricted","EDIT_TRIGGER_CLASS","editingInput","proceedWithSelection","additive","isTargetReadOnly","rowSelectionCellId","targetIds","getEntityViewierIds"],"mappings":"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"}