@ynput/ayon-frontend-shared 0.2.26 → 0.2.28

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 (367) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +25 -22
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/Views.cjs.js +1 -1
  5. package/dist/Views.cjs.js.map +1 -1
  6. package/dist/Views.es.js +13 -11
  7. package/dist/Views.es.js.map +1 -1
  8. package/dist/api.cjs.js +1 -1
  9. package/dist/api.es.js +153 -151
  10. package/dist/components.cjs.js +1 -1
  11. package/dist/components.es.js +62 -51
  12. package/dist/components.es.js.map +1 -1
  13. package/dist/index.cjs.js +1 -1
  14. package/dist/index.es.js +12 -6
  15. package/dist/index.es.js.map +1 -1
  16. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  17. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  18. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  19. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  20. package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
  21. package/dist/shared/src/api/generated/views.es.js.map +1 -1
  22. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  23. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  24. package/dist/shared/src/api/queries/entityLists/getLists.es.js +142 -117
  25. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  26. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js +1 -1
  27. package/dist/shared/src/api/queries/entityLists/updateLists.cjs.js.map +1 -1
  28. package/dist/shared/src/api/queries/entityLists/updateLists.es.js +110 -95
  29. package/dist/shared/src/api/queries/entityLists/updateLists.es.js.map +1 -1
  30. package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
  31. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  32. package/dist/shared/src/api/queries/users/getUsers.es.js +21 -17
  33. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  34. package/dist/shared/src/components/AccessUser/AccessUser.cjs.js +2 -0
  35. package/dist/shared/src/components/AccessUser/AccessUser.cjs.js.map +1 -0
  36. package/dist/shared/src/components/AccessUser/AccessUser.es.js +33 -0
  37. package/dist/shared/src/components/AccessUser/AccessUser.es.js.map +1 -0
  38. package/dist/shared/src/components/AccessUser/AccessUser.styled.cjs.js +42 -0
  39. package/dist/shared/src/components/AccessUser/AccessUser.styled.cjs.js.map +1 -0
  40. package/dist/shared/src/components/AccessUser/AccessUser.styled.es.js +46 -0
  41. package/dist/shared/src/components/AccessUser/AccessUser.styled.es.js.map +1 -0
  42. package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.cjs.js +34 -0
  43. package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.cjs.js.map +1 -0
  44. package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.es.js +46 -0
  45. package/dist/shared/src/components/DetailsMetaData/DetailsMetaData.es.js.map +1 -0
  46. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js +20 -10
  47. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js.map +1 -1
  48. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js +81 -67
  49. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js.map +1 -1
  50. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
  51. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  52. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +59 -52
  53. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  54. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  55. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  56. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +5 -2
  57. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  58. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  59. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  60. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +5 -2
  61. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  62. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  63. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  64. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +5 -2
  65. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  66. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +2 -0
  67. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -0
  68. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +205 -0
  69. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -0
  70. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js +2 -0
  71. package/dist/shared/src/components/ListMetaData/ListMetaData.cjs.js.map +1 -0
  72. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js +25 -0
  73. package/dist/shared/src/components/ListMetaData/ListMetaData.es.js.map +1 -0
  74. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +3 -3
  75. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  76. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +5 -5
  77. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  78. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  79. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  80. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +5 -2
  81. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  82. package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.cjs.js +9 -0
  83. package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.cjs.js.map +1 -0
  84. package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.es.js +25 -0
  85. package/dist/shared/src/components/Powerpack/RequiredPowerpackVersion.es.js.map +1 -0
  86. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  87. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  88. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +7 -4
  89. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  90. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  91. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  92. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +18 -21
  93. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  94. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  95. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  96. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +5 -2
  97. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  98. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  99. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  100. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +6 -3
  101. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  102. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  103. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  104. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +5 -2
  105. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  106. package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.cjs.js +2 -0
  107. package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.cjs.js.map +1 -0
  108. package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.es.js +17 -0
  109. package/dist/shared/src/components/ShareOptionIcon/ShareOptionIcon.es.js.map +1 -0
  110. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +2 -2
  111. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  112. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +5 -2
  113. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  114. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +1 -1
  115. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  116. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +5 -2
  117. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  118. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  119. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  120. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +5 -2
  121. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  122. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  123. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  124. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +5 -2
  125. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  126. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  127. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  128. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +146 -157
  129. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  130. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js +7 -1
  131. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js.map +1 -1
  132. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js +13 -6
  133. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js.map +1 -1
  134. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  135. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  136. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +5 -2
  137. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  138. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  139. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  140. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +6 -3
  141. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  142. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  143. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  144. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +6 -3
  145. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  146. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  147. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  148. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +5 -2
  149. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  150. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  151. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  152. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +5 -2
  153. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  154. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  155. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  156. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +5 -2
  157. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  158. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  159. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  160. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +5 -2
  161. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  162. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  163. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  164. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +413 -396
  165. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  166. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js +104 -25
  167. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.cjs.js.map +1 -1
  168. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js +131 -52
  169. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.styled.es.js.map +1 -1
  170. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  171. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  172. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +136 -129
  173. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  174. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +16 -53
  175. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  176. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +100 -120
  177. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  178. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  179. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  180. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +5 -2
  181. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  182. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js +7 -3
  183. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.cjs.js.map +1 -1
  184. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js +12 -8
  185. package/dist/shared/src/containers/ProjectTreeTable/components/HeaderActionButton.es.js.map +1 -1
  186. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  187. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  188. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +5 -2
  189. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  190. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
  191. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  192. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +250 -235
  193. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  194. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  195. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  196. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +24 -21
  197. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  198. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  199. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  200. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +5 -2
  201. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  202. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.cjs.js.map +1 -1
  203. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardTypes.es.js.map +1 -1
  204. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js +1 -1
  205. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.cjs.js.map +1 -1
  206. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js +10 -10
  207. package/dist/shared/src/containers/ProjectTreeTable/context/clipboard/clipboardValidation.es.js.map +1 -1
  208. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  209. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  210. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +13 -9
  211. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  212. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  213. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  214. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +65 -60
  215. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  216. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  217. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  218. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +5 -2
  219. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  220. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  221. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  222. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +5 -2
  223. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  224. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  225. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  226. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +5 -2
  227. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  228. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  229. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  230. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +5 -2
  231. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  232. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  233. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  234. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +5 -2
  235. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  236. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  237. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  238. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +5 -2
  239. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  240. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  241. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  242. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +16 -13
  243. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  244. package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js +1 -1
  245. package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.cjs.js.map +1 -1
  246. package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js +41 -14
  247. package/dist/shared/src/containers/ProjectTreeTable/utils/getReadOnlyLists.es.js.map +1 -1
  248. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js +1 -1
  249. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.cjs.js.map +1 -1
  250. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js +7 -7
  251. package/dist/shared/src/containers/ProjectTreeTable/widgets/BooleanWidget.es.js.map +1 -1
  252. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  253. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  254. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +110 -104
  255. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  256. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js +2 -2
  257. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.cjs.js.map +1 -1
  258. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js +8 -8
  259. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumCellValue.es.js.map +1 -1
  260. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js +2 -2
  261. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.cjs.js.map +1 -1
  262. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js +44 -43
  263. package/dist/shared/src/containers/ProjectTreeTable/widgets/EnumWidget.es.js.map +1 -1
  264. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  265. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  266. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +7 -4
  267. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  268. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  269. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  270. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +5 -2
  271. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  272. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  273. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  274. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +118 -103
  275. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  276. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js +16 -4
  277. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.cjs.js.map +1 -1
  278. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js +13 -1
  279. package/dist/shared/src/containers/SimpleTable/SimpleTable.styled.es.js.map +1 -1
  280. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js +1 -1
  281. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.cjs.js.map +1 -1
  282. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js +62 -50
  283. package/dist/shared/src/containers/SimpleTable/SimpleTableRowTemplate.es.js.map +1 -1
  284. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  285. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  286. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js +2 -0
  287. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js.map +1 -0
  288. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js +64 -0
  289. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js.map +1 -0
  290. package/dist/shared/src/context/MenuContext.cjs.js +2 -0
  291. package/dist/shared/src/context/MenuContext.cjs.js.map +1 -0
  292. package/dist/shared/src/context/MenuContext.es.js +28 -0
  293. package/dist/shared/src/context/MenuContext.es.js.map +1 -0
  294. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  295. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  296. package/dist/shared/src/context/PowerpackContext.es.js +20 -15
  297. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  298. package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
  299. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  300. package/dist/shared/src/context/RemoteModulesContext.es.js +19 -19
  301. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  302. package/dist/shared/src/hooks/useLoadModule.cjs.js.map +1 -1
  303. package/dist/shared/src/hooks/useLoadModule.es.js.map +1 -1
  304. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +2 -0
  305. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -0
  306. package/dist/src/components/Menu/MenuComponents/Menu.es.js +55 -0
  307. package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -0
  308. package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js +254 -0
  309. package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js.map +1 -0
  310. package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js +265 -0
  311. package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js.map +1 -0
  312. package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js +2 -0
  313. package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js.map +1 -0
  314. package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js +80 -0
  315. package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js.map +1 -0
  316. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +2 -0
  317. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -0
  318. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +59 -0
  319. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -0
  320. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +2 -0
  321. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -0
  322. package/dist/src/components/Menu/MenuComponents/MenuList.es.js +112 -0
  323. package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -0
  324. package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js +2 -0
  325. package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js.map +1 -0
  326. package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js +35 -0
  327. package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js.map +1 -0
  328. package/dist/types/api/generated/entityLists.d.ts +8 -8
  329. package/dist/types/api/generated/users.d.ts +18 -14
  330. package/dist/types/api/generated/views.d.ts +47 -9
  331. package/dist/types/api/queries/entityLists/getLists.d.ts +133 -0
  332. package/dist/types/api/queries/entityLists/types.d.ts +2 -1
  333. package/dist/types/api/queries/permissions/getPermissions.d.ts +22 -22
  334. package/dist/types/api/queries/users/getUsers.d.ts +132 -0
  335. package/dist/types/api/queries/users/updateUsers.d.ts +3 -3
  336. package/dist/types/components/AccessUser/AccessUser.d.ts +22 -0
  337. package/dist/types/components/AccessUser/AccessUser.styled.d.ts +1 -0
  338. package/dist/types/components/AccessUser/index.d.ts +1 -0
  339. package/dist/types/components/DetailsMetaData/DetailsMetaData.d.ts +8 -0
  340. package/dist/types/components/DetailsMetaData/index.d.ts +1 -0
  341. package/dist/types/components/DetailsPanelAttributes/DetailsPanelAttributesEditor.d.ts +4 -0
  342. package/dist/types/components/ListAttributeForm/ListAttributeForm.d.ts +13 -0
  343. package/dist/types/components/ListAttributeForm/index.d.ts +1 -0
  344. package/dist/types/components/ListMetaData/ListMetaData.d.ts +8 -0
  345. package/dist/types/components/ListMetaData/index.d.ts +1 -0
  346. package/dist/types/components/Powerpack/RequiredPowerpackVersion.d.ts +5 -0
  347. package/dist/types/components/Powerpack/index.d.ts +1 -0
  348. package/dist/types/components/ShareOptionIcon/ShareOptionIcon.d.ts +10 -0
  349. package/dist/types/components/ShareOptionIcon/index.d.ts +2 -0
  350. package/dist/types/components/index.d.ts +4 -0
  351. package/dist/types/containers/DetailsPanel/DetailsPanel.styled.d.ts +7 -0
  352. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.styled.d.ts +3 -1
  353. package/dist/types/containers/ProjectTreeTable/components/ColumnHeaderMenu.d.ts +4 -1
  354. package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +1 -0
  355. package/dist/types/containers/ProjectTreeTable/context/clipboard/clipboardTypes.d.ts +3 -1
  356. package/dist/types/containers/ProjectTreeTable/hooks/useAttributesList.d.ts +1 -0
  357. package/dist/types/containers/ProjectTreeTable/utils/getReadOnlyLists.d.ts +1 -1
  358. package/dist/types/containers/ProjectTreeTable/widgets/BooleanWidget.d.ts +1 -0
  359. package/dist/types/containers/ProjectTreeTable/widgets/EnumCellValue.d.ts +2 -2
  360. package/dist/types/containers/SimpleTable/SimpleTable.d.ts +3 -0
  361. package/dist/types/containers/SimpleTable/SimpleTableRowTemplate.d.ts +5 -1
  362. package/dist/types/containers/Views/hooks/pages/useReportsViewSettings.d.ts +11 -0
  363. package/dist/types/containers/Views/index.d.ts +6 -2
  364. package/dist/types/context/MenuContext.d.ts +12 -0
  365. package/dist/types/context/PowerpackContext.d.ts +1 -1
  366. package/dist/types/index.d.ts +1 -0
  367. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTreeTable.es.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 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'\n\n// Hook imports\nimport useCustomColumnWidthVars from './hooks/useCustomColumnWidthVars'\nimport usePrefetchFolderTasks from './hooks/usePrefetchFolderTasks'\nimport useCellContextMenu, { HeaderLabel } from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\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 { createPortal } from 'react-dom'\nimport { 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'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\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 }\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 extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n 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\n const {\n projectInfo,\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n fetchNextPage,\n scopes,\n getEntityById,\n } = useProjectTableContext()\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 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 attribFields,\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, readOnly),\n [attribFields, readOnly],\n )\n\n const { 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, type } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\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 const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n links: linkTypes,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n groupBy,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n // 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: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: 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 enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreTasks: fetchNextPage,\n selection: Array.from(selectedCells),\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 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 [onScroll, onScrollBottom, showHierarchy, groupBy, isLoading],\n )\n\n const { projectName: contextProjectName } = useProjectDataContext()\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: contextProjectName || 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 >\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('table-container', pt?.container?.className)}\n >\n <table\n style={{\n display: 'grid',\n borderCollapse: 'collapse',\n userSelect: 'none',\n ...columnSizeVars,\n width: table.getTotalSize(),\n 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 isGrouping={isGrouping}\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: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n\n return (\n <Styled.HeaderCell\n className={clsx(header.id, 'shimmer-dark', 'aaa', {\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\">\n {(canHide || canPin || canSort) && (\n <ColumnHeaderMenu\n header={header}\n canHide={canHide}\n canPin={canPin}\n canSort={canSort}\n isResizing={column.getIsResizing()}\n />\n )}\n\n {/* COLUMN SORTING */}\n {canSort && (\n <HeaderActionButton\n icon={'sort'}\n style={{\n transform: (column.getIsSorted() as string) === 'asc' ? 'scaleY(-1)' : undefined,\n }}\n onClick={column.getToggleSortingHandler()}\n selected={!!column.getIsSorted()}\n />\n )}\n </Styled.HeaderButtons>\n {canResize && (\n <Styled.ResizedHandler\n {...{\n onDoubleClick: () => column.resetSize(),\n onMouseDown: header.getResizeHandler(),\n onTouchStart: header.getResizeHandler(),\n className: clsx('resize-handle', {\n resizing: column.getIsResizing(),\n }),\n }}\n />\n )}\n </Styled.TableCellContent>\n )}\n </Styled.HeaderCell>\n )\n}\n\ninterface TableBodyProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n tableContainerRef: React.RefObject<HTMLDivElement>\n showHierarchy: boolean\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n attribs: ProjectTableAttribute[]\n onOpenNew?: (type: 'folder' | 'task') => void\n rowOrderIds: UniqueIdentifier[]\n sortableRows: boolean\n error?: string\n isGrouping: boolean\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n isGrouping,\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({ attribs, onOpenNew, headerLabels })\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: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow, 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 />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <EmptyPlaceholder message=\"No items found\" error={error} />,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n isGrouping: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n isGrouping = false,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n 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.TableCell\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: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const { 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 } = useSelectionCellsContext()\n\n const { isRowSelected } = useSelectedRowsContext()\n\n const { isEditing, setEditingCellId } = useCellEditing()\n\n const borderClasses = getCellBorderClasses(cellId)\n\n const isPinned = cell.column.getIsPinned()\n const isLastLeftPinnedColumn = isPinned === 'left' && cell.column.getIsLastColumn('left')\n const isRowSelectionColumn = cell.column.id === ROW_SELECTION_COLUMN_ID\n const isGroup = cell.row.original.entityType === 'group'\n\n return (\n <Styled.TableCell\n {...props}\n tabIndex={0}\n $isLastPinned={isLastLeftPinnedColumn} // is this column the last pinned column? Custom styling for borders.\n className={clsx(\n cell.column.id,\n {\n selected: isCellSelected(cellId),\n focused: isCellFocused(cellId),\n editing: isEditing(cellId),\n 'last-pinned-left': isLastLeftPinnedColumn,\n 'selected-row': isRowSelected(rowId),\n task: cell.row.original.entityType === 'task',\n },\n className,\n ...borderClasses,\n )}\n style={{\n ...getCommonPinningStyles(cell.column),\n width: getColumnWidth(cell.row.id, cell.column.id),\n height: 40,\n }}\n onMouseDown={(e) => {\n // Only process left clicks (button 0), ignore right clicks\n if (e.button !== 0) return\n\n const target = e.target as HTMLElement\n\n // check we are not clicking on expander\n if (target.closest('.expander')) return\n\n // if we are clicking on an edit trigger, we need to start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) {\n if (!isCellSelected(cellId)) {\n // if the cell is not selected, select it and deselect all others\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n // start editing the cell\n setEditingCellId(cellId)\n\n return\n }\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 const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n // row selection on name column double click\n if (\n cell.column.id === 'name' &&\n !(e.target as HTMLElement).closest('.expander') &&\n !isGroup\n ) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n // open the viewer on thumbnail double click\n 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 }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["getCommonPinningStyles","column","isPinned","offset","ROW_SELECTION_COLUMN_ID","DRAG_HANDLE_COLUMN_ID","getColumnWidth","rowId","columnId","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","extraColumns","isLoadingProp","clientSorting","sortableRows","onRowReorder","dndActiveId","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","columnVisibilityOnChange","columnOrderOnChange","groupBy","useColumnSettingsContext","isGrouping","projectInfo","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","projectName","updateExpanded","toggleExpandAll","showHierarchy","fetchNextPage","scopes","getEntityById","useProjectTableContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","_a","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","type","cellId","colId","parseCellId","toast","columnAttribs","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","_b","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","columnSizeVars","useCustomColumnWidthVars","attribByField","acc","attrib","_c","rowOrderIds","draggedRowData","r","combinedScrollHandler","containerRefElement","scrollHeight","scrollTop","clientHeight","contextProjectName","useProjectDataContext","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.TableCell","Icon","TableCellMemo","getCellId","Fragment","Styled.TableHeader","headerGroup","TableHeadRow","virtualColumns","Styled.ColumnHeader","virtualColumn","header","TableHeadCell","canFilter","canHide","canSort","canPin","canResize","isReadOnly","Styled.HeaderCell","Styled.TableCellContent","flexRender","Styled.HeaderButtons","ColumnHeaderMenu","HeaderActionButton","Styled.ResizedHandler","attribs","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","element","virtualRows","measureRowElement","node","useKeyboardNavigation","tbodyContent","e","virtualRow","i","TableBodyRow","EmptyPlaceholder","SortableContext","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","sortable","useSortable","combinedRef","style","CSS","RowDragHandleCellContent","TableCell","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","target","EDIT_TRIGGER_CLASS","additive","rowSelectionCellId","targetIds","getEntityViewierIds","memo"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTreeTable.es.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 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, { HeaderLabel } from './hooks/useCellContextMenu'\nimport useColumnVirtualization from './hooks/useColumnVirtualization'\nimport useKeyboardNavigation from './hooks/useKeyboardNavigation'\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 { createPortal } from 'react-dom'\nimport { 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'\nimport { EDIT_TRIGGER_CLASS } from './widgets/CellWidget'\nimport { toast } from 'react-toastify'\nimport { EntityMoveData } from '@shared/context/MoveEntityContext'\nimport { useSelector } from 'react-redux'\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 }\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 extraColumns?: TreeTableExtraColumn[]\n isLoading?: boolean\n clientSorting?: boolean\n sortableRows?: boolean\n onRowReorder?: (active: UniqueIdentifier, over: UniqueIdentifier | null) => void // Adjusted type for active/over if needed, or keep as Active, Over\n dndActiveId?: UniqueIdentifier | null // Added prop\n pt?: {\n container?: React.HTMLAttributes<HTMLDivElement>\n head?: Partial<TableHeadProps>\n }\n}\n\nexport const ProjectTreeTable = ({\n scope,\n sliceId,\n onScroll,\n onScrollBottom, // when the user scrolls to the bottom of the table, this callback is called\n onOpenNew,\n readOnly,\n excludedColumns,\n extraColumns,\n isLoading: isLoadingProp,\n clientSorting = false,\n sortableRows = false,\n onRowReorder,\n dndActiveId, // Destructure new prop\n pt,\n ...props\n}: ProjectTreeTableProps) => {\n const {\n columnVisibility,\n 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\n const {\n projectInfo,\n tableData,\n attribFields,\n entitiesMap,\n users,\n isLoading: isLoadingData,\n error,\n isInitialized,\n expanded,\n projectName,\n updateExpanded,\n toggleExpandAll,\n showHierarchy,\n fetchNextPage,\n scopes,\n getEntityById,\n } = useProjectTableContext()\n\n const { projectName: contextProjectName, 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 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 attribFields,\n showHierarchy && tableData.length > 0\n ? Math.min(tableRowsCount, 50)\n : groupBy\n ? Math.max(tableRowsCountRef.current, 50)\n : 50,\n )\n\n return { loadingAttrib, loadingRows }\n }, [])\n\n const showLoadingRows = !isInitialized || isLoading\n\n // Format readonly columns and attributes\n const { readOnlyColumns, readOnlyAttribs } = useMemo(\n () => getReadOnlyLists(attribFields, 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, type } = entity\n for (const cellId of selectedCells) {\n const { colId, rowId } = parseCellId(cellId) || {}\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 const columns = useMemo(() => {\n const baseColumns = buildTreeTableColumns({\n attribs: columnAttribs,\n links: linkTypes,\n showHierarchy,\n options,\n extraColumns,\n excluded: excludedColumns,\n groupBy,\n })\n\n if (sortableRows) {\n return [\n {\n id: DRAG_HANDLE_COLUMN_ID,\n header: () => null,\n cell: () => null, // Content rendered by TableBodyRow\n size: 24,\n minSize: 24,\n maxSize: 24,\n enableResizing: false,\n enableSorting: false,\n enableHiding: false,\n enablePinning: false, // Programmatically pinned\n },\n ...baseColumns,\n ]\n }\n return baseColumns\n }, [columnAttribs, showHierarchy, options, extraColumns, excludedColumns, sortableRows])\n\n // 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: () => true,\n getCoreRowModel: getCoreRowModel(),\n getFilteredRowModel: getFilteredRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n filterFromLeafRows: true,\n // EXPANDABLE\n onExpandedChange: updateExpanded,\n // SORTING\n getSortedRowModel: clientSorting ? getSortedRowModel() : undefined,\n onSortingChange: 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 enableSorting: true,\n meta: {\n projectName,\n options,\n readOnly: readOnlyColumns,\n updateEntities: handleCellUpdate,\n toggleExpandAll,\n loadMoreTasks: fetchNextPage,\n selection: Array.from(selectedCells),\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 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 [onScroll, onScrollBottom, 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: contextProjectName || 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 isGrouping={isGrouping}\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: 40,\n }\n\n if (cell.column.id === DRAG_HANDLE_COLUMN_ID) {\n return (\n <Styled.TableCell\n key={`overlay-drag-${cell.id}`}\n style={{ ...cellStyleBase, justifyContent: 'center' }}\n className={clsx(cell.column.id)}\n >\n <Icon icon=\"drag_handle\" /> {/* Static icon */}\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={`overlay-${getCellId(overlayRowInstance.id, cell.column.id)}`}\n rowId={overlayRowInstance.id}\n key={`overlay-cell-${cell.id}`}\n showHierarchy={showHierarchy}\n />\n )\n })}\n {virtualPaddingRight ? (\n <td style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.TR>\n </tbody>\n </table>\n )\n })()\n : null}\n </DragOverlay>,\n document.body,\n )\n\n if (sortableRows) {\n return (\n <>\n {tableUiContent}\n {dragOverlayPortal}\n </>\n )\n } else {\n return tableUiContent\n }\n}\n\ninterface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n table: Table<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHead = ({\n columnVirtualizer,\n table,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n ...props\n}: TableHeadProps) => {\n return (\n <Styled.TableHeader {...props}>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableHeadRow\n key={headerGroup.id}\n columnVirtualizer={columnVirtualizer}\n headerGroup={headerGroup}\n virtualPaddingLeft={virtualPaddingLeft}\n virtualPaddingRight={virtualPaddingRight}\n isLoading={isLoading}\n readOnlyColumns={readOnlyColumns}\n sortableRows={sortableRows}\n />\n ))}\n </Styled.TableHeader>\n )\n}\n\ninterface TableHeadRowProps {\n columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>\n headerGroup: HeaderGroup<TableRow>\n virtualPaddingLeft: number | undefined\n virtualPaddingRight: number | undefined\n isLoading: boolean\n readOnlyColumns?: string[]\n sortableRows?: boolean\n}\n\nconst TableHeadRow = ({\n columnVirtualizer,\n headerGroup,\n virtualPaddingLeft,\n virtualPaddingRight,\n isLoading,\n readOnlyColumns,\n sortableRows,\n}: TableHeadRowProps) => {\n const virtualColumns = columnVirtualizer.getVirtualItems()\n return (\n <Styled.ColumnHeader key={headerGroup.id} style={{ display: 'flex' }}>\n {virtualPaddingLeft ? (\n //fake empty column to the left for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingLeft }} />\n ) : null}\n {virtualColumns.map((virtualColumn) => {\n const header = headerGroup.headers[virtualColumn.index]\n\n return (\n <TableHeadCell\n key={header.id}\n header={header}\n isLoading={isLoading}\n isReadOnly={readOnlyColumns?.includes(header.id)}\n canSort={header.column.getCanSort()}\n canFilter={header.column.getCanFilter()}\n canHide={header.column.getCanHide()}\n canPin={header.column.getCanPin()}\n canResize={header.column.getCanResize()}\n sortableRows={sortableRows}\n />\n )\n })}\n {virtualPaddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <th style={{ display: 'flex', width: virtualPaddingRight }} />\n ) : null}\n </Styled.ColumnHeader>\n )\n}\n\ninterface TableHeadCellProps {\n header: Header<TableRow, unknown>\n isLoading: boolean\n canSort?: boolean\n canFilter?: boolean\n canHide?: boolean\n canPin?: boolean\n canResize?: boolean\n isReadOnly?: boolean\n sortableRows?: boolean\n}\n\nconst TableHeadCell = ({\n header,\n isLoading,\n canFilter,\n canHide,\n canSort,\n canPin,\n canResize,\n isReadOnly,\n sortableRows,\n}: TableHeadCellProps) => {\n const { column } = header\n 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 isGrouping: boolean\n}\n\nconst TableBody = ({\n columnVirtualizer,\n table,\n tableContainerRef,\n showHierarchy,\n virtualPaddingLeft,\n virtualPaddingRight,\n attribs,\n onOpenNew,\n rowOrderIds,\n sortableRows,\n error,\n isGrouping,\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({ attribs, onOpenNew, headerLabels })\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: () => 40, //estimate row height for accurate scrollbar dragging\n getScrollElement: () => tableContainerRef.current,\n //measure dynamic row height, except in firefox because it measures table border height incorrectly\n measureElement:\n typeof window !== 'undefined' && navigator.userAgent.indexOf('Firefox') === -1\n ? (element) => element?.getBoundingClientRect().height\n : undefined,\n overscan: 5,\n })\n\n const virtualRows = rowVirtualizer.getVirtualItems()\n\n // Memoize the measureElement callback\n const measureRowElement = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (node) {\n rowVirtualizer.measureElement(node)\n }\n },\n [rowVirtualizer],\n )\n\n useKeyboardNavigation()\n\n const tbodyContent = (\n <tbody\n style={{\n height: `${rowVirtualizer.getTotalSize()}px`,\n position: 'relative',\n display: 'grid',\n }}\n onContextMenu={handleTableBodyContextMenu}\n onMouseOver={(e) => {\n handlePreFetchTasks(e)\n }}\n >\n {virtualRows.map((virtualRow, 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 />\n )\n })}\n </tbody>\n )\n\n if (error) {\n return (\n tableContainerRef.current &&\n createPortal(\n <EmptyPlaceholder message=\"No items found\" error={error} />,\n tableContainerRef.current,\n )\n )\n }\n\n if (sortableRows) {\n return (\n <SortableContext items={rowOrderIds} strategy={verticalListSortingStrategy}>\n {tbodyContent}\n </SortableContext>\n )\n } else {\n return tbodyContent\n }\n}\n\ninterface TableBodyRowProps {\n row: Row<TableRow>\n showHierarchy: boolean\n visibleCells: Cell<TableRow, unknown>[]\n virtualColumns: VirtualItem[]\n paddingLeft: number | undefined\n paddingRight: number | undefined\n rowRef: (node: HTMLTableRowElement | null) => void\n dataIndex: number\n offsetTop: number\n sortableRows: boolean\n isGrouping: boolean\n}\n\nconst TableBodyRow = ({\n row,\n showHierarchy,\n visibleCells,\n virtualColumns,\n paddingLeft,\n paddingRight,\n rowRef,\n dataIndex,\n offsetTop,\n sortableRows,\n isGrouping = false,\n}: TableBodyRowProps) => {\n const sortable = sortableRows ? useSortable({ id: row.id }) : null\n\n const combinedRef = useCallback(\n (node: HTMLTableRowElement | null) => {\n if (sortable) {\n sortable.setNodeRef(node)\n }\n // rowRef for virtualizer measurement\n // only measure if not actively being transformed by dnd-kit\n if (!(sortable && sortable.isDragging)) {\n rowRef(node)\n }\n },\n [sortable, rowRef],\n )\n\n // Attempt to combine dnd-kit transform with virtualizer's offsetTop\n const style: CSSProperties = {\n position: 'absolute', // Use absolute positioning for virtualized items\n top: offsetTop, // Position based on virtualizer's calculation (virtualRow.start)\n left: 0, // Span full width of the relative parent (tbody)\n right: 0, // Span full width\n height: 40, // Explicit height can be beneficial for absolute positioning\n zIndex: sortable && sortable.isDragging ? 0 : 1, // Ensure dragged item is above others\n display: 'flex', // Styled.TR is display:flex\n transform:\n sortable && sortable.transform ? CSS.Transform.toString(sortable.transform) : undefined, // Apply dnd-kit's transform for drag effect\n transition: sortable && sortable.transition ? sortable.transition : undefined,\n visibility: sortable && sortable.isDragging ? 'hidden' : 'visible', // Hide the row being dragged\n }\n\n return (\n <Styled.TR\n ref={combinedRef}\n data-index={dataIndex} //needed for dynamic row height measurement\n style={style}\n 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.TableCell\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: 40,\n }}\n className={clsx(cell.column.id, {\n 'last-pinned-left':\n cell.column.getIsPinned() === 'left' && cell.column.getIsLastColumn('left'),\n })}\n onMouseDown={(e) => e.stopPropagation()} // Prevent selection interference\n onMouseOver={(e) => e.stopPropagation()}\n // Removed onMouseUp stopPropagation to allow dnd-kit to handle it\n onDoubleClick={(e) => e.stopPropagation()}\n onContextMenu={(e) => {\n e.preventDefault()\n e.stopPropagation()\n }}\n >\n <RowDragHandleCellContent\n attributes={sortable?.attributes}\n listeners={sortable?.listeners}\n />\n </Styled.TableCell>\n )\n }\n return (\n <TableCellMemo\n cell={cell}\n cellId={cellId}\n rowId={row.id}\n key={cell.id + i.toString()}\n showHierarchy={showHierarchy}\n sortableRows={sortableRows}\n />\n )\n })}\n\n {paddingRight ? (\n //fake empty column to the right for virtualization scroll padding\n <td style={{ display: 'flex', width: paddingRight }} />\n ) : null}\n </Styled.TR>\n )\n}\n\ninterface TableCellProps {\n cell: Cell<TableRow, unknown>\n cellId: string\n rowId: string\n className?: string\n showHierarchy: boolean\n sortableRows?: boolean\n}\n\nconst TableCell = ({\n cell,\n rowId,\n cellId,\n className,\n showHierarchy,\n sortableRows,\n ...props\n}: TableCellProps) => {\n const { 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 } = 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.TableCell\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 task: cell.row.original.entityType === 'task',\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: 40,\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 // if we are clicking on an edit trigger, we need to start editing\n if (target.closest('.' + EDIT_TRIGGER_CLASS)) {\n if (!isCellSelected(cellId)) {\n // if the cell is not selected, select it and deselect all others\n selectCell(cellId, false, false)\n focusCell(cellId)\n }\n // start editing the cell\n setEditingCellId(cellId)\n\n return\n }\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 const additive = e.metaKey || e.ctrlKey || isRowSelectionColumn\n if (e.shiftKey) {\n // Shift+click extends selection from anchor cell\n selectCell(cellId, additive, true) // true for range selection\n } else {\n // Normal click starts a new selection\n startSelection(cellId, additive)\n }\n }}\n onMouseOver={(e) => {\n if (e.buttons === 1) {\n // Left button is pressed during mouse move - drag selection\n extendSelection(cellId, isRowSelectionColumn)\n }\n }}\n onMouseUp={() => {\n endSelection(cellId)\n }}\n onDoubleClick={(e) => {\n // row selection on name column double click\n if (\n cell.column.id === 'name' &&\n !(e.target as HTMLElement).closest('.expander') &&\n !isGroup\n ) {\n // select the row by selecting the row-selection cell\n const rowSelectionCellId = getCellId(cell.row.id, ROW_SELECTION_COLUMN_ID)\n if (!isCellSelected(rowSelectionCellId)) {\n const additive = e.metaKey || e.ctrlKey\n selectCell(rowSelectionCellId, additive, false)\n }\n }\n // open the viewer on thumbnail double click\n 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 }}\n onContextMenu={(e) => {\n e.preventDefault()\n // if the cell is not selected, select it and deselect all others\n if (!isCellSelected(cellId)) {\n selectCell(cellId, false, false)\n }\n }}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </Styled.TableCell>\n )\n}\n\nconst TableCellMemo = memo(TableCell)\n"],"names":["getCommonPinningStyles","column","isPinned","offset","ROW_SELECTION_COLUMN_ID","DRAG_HANDLE_COLUMN_ID","getColumnWidth","rowId","columnId","ProjectTreeTable","scope","sliceId","onScroll","onScrollBottom","onOpenNew","readOnly","excludedColumns","extraColumns","isLoadingProp","clientSorting","sortableRows","onRowReorder","dndActiveId","pt","props","columnVisibility","columnPinning","columnOrder","columnSizing","setAllColumns","sorting","sortingOnChange","columnPinningOnChange","columnSizingOnChange","columnVisibilityOnChange","columnOrderOnChange","groupBy","useColumnSettingsContext","isGrouping","projectInfo","tableData","attribFields","entitiesMap","users","isLoadingData","error","isInitialized","expanded","projectName","updateExpanded","toggleExpandAll","showHierarchy","fetchNextPage","scopes","getEntityById","useProjectTableContext","contextProjectName","writableFields","useProjectDataContext","isLoading","statuses","folderTypes","taskTypes","tags","linkTypes","options","useMemo","getTableFieldOptions","tableContainerRef","useRef","tableRowsCountRef","registerGrid","useSelectionCellsContext","loadingAttrib","loadingRows","tableRowsCount","_a","generateDummyAttributes","generateLoadingRows","showLoadingRows","readOnlyColumns","readOnlyAttribs","getReadOnlyLists","selectedCells","updateEntities","useCellEditing","handleCellUpdate","useCallback","entity","config","selection","entitiesToUpdate","field","value","isAttrib","type","cellId","colId","parseCellId","toast","columnAttribs","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","_b","visibleColumns","columnVirtualizer","virtualPaddingLeft","virtualPaddingRight","useColumnVirtualization","columnSizeVars","useCustomColumnWidthVars","attribByField","acc","attrib","_c","rowOrderIds","draggedRowData","r","combinedScrollHandler","containerRefElement","scrollHeight","scrollTop","clientHeight","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.TableCell","Icon","TableCellMemo","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","headerLabels","headerId","handleTableBodyContextMenu","useCellContextMenu","handlePreFetchTasks","usePrefetchFolderTasks","rowVirtualizer","useVirtualizer","element","virtualRows","measureRowElement","node","useKeyboardNavigation","tbodyContent","e","virtualRow","i","TableBodyRow","EmptyPlaceholder","SortableContext","verticalListSortingStrategy","visibleCells","paddingLeft","paddingRight","rowRef","dataIndex","offsetTop","sortable","useSortable","combinedRef","style","CSS","RowDragHandleCellContent","TableCell","className","onOpenPlayer","isCellSelected","isCellFocused","startSelection","extendSelection","endSelection","selectCell","focusCell","getCellBorderClasses","clearSelection","isRowSelected","useSelectedRowsContext","isEditing","setEditingCellId","borderClasses","isLastLeftPinnedColumn","isRowSelectionColumn","isGroup","isMultipleSelected","target","EDIT_TRIGGER_CLASS","additive","rowSelectionCellId","targetIds","getEntityViewierIds","memo"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("styled-components"),s="inset 0 1px 0 0 var(--md-sys-color-primary)",a="inset -1px 0 0 0 var(--md-sys-color-primary)",r="inset 0 -1px 0 0 var(--md-sys-color-primary)",i="inset 1px 0 0 0 var(--md-sys-color-primary)",e=o=>o?"inset -2px -1px 0 0 var(--md-sys-color-surface-container), inset 1px 0 0 0 var(--md-sys-color-surface-container)":"inset 1px -1px 0 0 var(--md-sys-color-surface-container)",n="drag-handle",d=t.tr`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("styled-components"),s="inset 0 1px 0 0 var(--md-sys-color-primary)",a="inset -1px 0 0 0 var(--md-sys-color-primary)",r="inset 0 -1px 0 0 var(--md-sys-color-primary)",n="inset 1px 0 0 0 var(--md-sys-color-primary)",e=o=>o?"inset -2px -1px 0 0 var(--md-sys-color-surface-container), inset 1px 0 0 0 var(--md-sys-color-surface-container)":"inset 1px -1px 0 0 var(--md-sys-color-surface-container)",i="drag-handle",d=t.tr`
2
2
  display: flex;
3
3
  position: absolute;
4
4
  width: 100%;
@@ -8,16 +8,21 @@
8
8
 
9
9
  // Target the button inside the drag handle cell to make it visible at 50% opacity.
10
10
  // This uses a more specific selector by including 'td' to ensure it correctly targets the cell.
11
- td.${n} button {
11
+ td.${i} button {
12
12
  opacity: 0.5;
13
13
  visibility: visible;
14
14
  }
15
15
 
16
16
  // When the row (TR) is hovered AND the button inside drag handle cell is also hovered...
17
17
  // Make the button 100% opacity. This selector is more specific and will override the above.
18
- td.${n} button:hover {
18
+ td.${i} button:hover {
19
19
  opacity: 1;
20
20
  }
21
+
22
+ /* row selection hover */
23
+ td:not(.selected) {
24
+ background-color: hsl(215 14% 15%);
25
+ }
21
26
  }
22
27
 
23
28
  &.group-row {
@@ -92,12 +97,13 @@
92
97
  .resize-handle {
93
98
  opacity: 1;
94
99
  }
95
- }
96
-
97
- /* show action buttons */
98
- &:hover {
100
+
99
101
  .actions {
100
- display: flex;
102
+ display: flex !important;
103
+ }
104
+
105
+ .actions .header-menu {
106
+ display: flex !important;
101
107
  }
102
108
  }
103
109
 
@@ -107,8 +113,7 @@
107
113
  display: none !important;
108
114
  }
109
115
  cursor: col-resize !important;
110
-
111
- /* Ensure all child elements also have the resize cursor */
116
+
112
117
  * {
113
118
  cursor: col-resize !important;
114
119
  }
@@ -129,8 +134,13 @@
129
134
  display: none;
130
135
  }
131
136
  }
132
- `,w=t.div`
137
+ `,u=t.div`
133
138
  display: none;
139
+
140
+ ${({$isOpen:o})=>o&&`
141
+ display: flex !important;
142
+ `}
143
+
134
144
  gap: var(--base-gap-small);
135
145
  align-items: center;
136
146
 
@@ -145,12 +155,47 @@
145
155
  .resizing & {
146
156
  cursor: col-resize !important;
147
157
  }
148
- `,u=t.td`
158
+
159
+ &:has(.sort-button.visible),
160
+ &:has(.sort-button.selected) {
161
+ display: flex !important;
162
+ }
163
+
164
+ .sort-button.visible {
165
+ display: flex !important;
166
+ }
167
+
168
+ .sort-button.selected {
169
+ display: flex !important;
170
+ }
171
+
172
+ .header-menu {
173
+ display: none;
174
+ }
175
+
176
+ ${({$isOpen:o})=>o&&`
177
+ .header-menu {
178
+ display: flex !important;
179
+ }
180
+ `}
181
+
182
+ .header-menu.open,
183
+ .header-menu.active {
184
+ display: flex !important;
185
+ }
186
+
187
+ .resizing & {
188
+ .sort-button,
189
+ .header-menu {
190
+ display: none !important;
191
+ }
192
+ }
193
+ `,w=t.td`
149
194
  position: relative;
150
195
  box-shadow: ${e(!1)};
151
196
  background-color: var(--md-sys-color-surface-container-low);
152
197
 
153
- &.${n} {
198
+ &.${i} {
154
199
  // Styles for the button inside the drag handle cell
155
200
  button {
156
201
  opacity: 0; // Default: hidden
@@ -171,22 +216,23 @@
171
216
  }
172
217
  }
173
218
 
219
+ --task-background-color: hsl(216 15% 11.5% / 1);
174
220
  &.task {
175
- background-color: hsl(216 15% 11.5% / 1);
221
+ background-color: var(--task-background-color);
176
222
  }
177
223
 
178
224
  &.selected-row {
179
225
  background-color: var(--md-sys-color-surface-container-high);
180
226
  }
181
227
 
182
- /* show hover effect only if direct child div does NOT have .readonly */
228
+ /* show hover effect only if direct child div does NOT have .readonly and is not selected */
183
229
  &:not(:has(> div.readonly)) {
184
230
  cursor: pointer;
185
231
  &:hover {
186
232
  background-color: var(--md-sys-color-surface-container);
187
233
  }
188
234
 
189
- .selected {
235
+ &.selected {
190
236
  background-color: var(--md-sys-color-secondary-container);
191
237
  }
192
238
  }
@@ -223,7 +269,7 @@
223
269
  }
224
270
 
225
271
  &.shadow-left:not(.shadow-top):not(.shadow-right):not(.shadow-bottom) {
226
- box-shadow: ${i}, ${({$isLastPinned:o})=>e(o||!1)};
272
+ box-shadow: ${n}, ${({$isLastPinned:o})=>e(o||!1)};
227
273
  }
228
274
 
229
275
  /* Two sides */
@@ -238,7 +284,7 @@
238
284
  }
239
285
 
240
286
  &.shadow-top.shadow-left:not(.shadow-right):not(.shadow-bottom) {
241
- box-shadow: ${s}, ${i},
287
+ box-shadow: ${s}, ${n},
242
288
  ${({$isLastPinned:o})=>e(o||!1)};
243
289
  }
244
290
 
@@ -248,12 +294,12 @@
248
294
  }
249
295
 
250
296
  &.shadow-right.shadow-left:not(.shadow-top):not(.shadow-bottom) {
251
- box-shadow: ${a}, ${i},
297
+ box-shadow: ${a}, ${n},
252
298
  ${({$isLastPinned:o})=>e(o||!1)};
253
299
  }
254
300
 
255
301
  &.shadow-bottom.shadow-left:not(.shadow-top):not(.shadow-right) {
256
- box-shadow: ${r}, ${i},
302
+ box-shadow: ${r}, ${n},
257
303
  ${({$isLastPinned:o})=>e(o||!1)};
258
304
  }
259
305
 
@@ -264,23 +310,23 @@
264
310
  }
265
311
 
266
312
  &.shadow-top.shadow-right.shadow-left:not(.shadow-bottom) {
267
- box-shadow: ${s}, ${a}, ${i},
313
+ box-shadow: ${s}, ${a}, ${n},
268
314
  ${({$isLastPinned:o})=>e(o||!1)};
269
315
  }
270
316
 
271
317
  &.shadow-top.shadow-bottom.shadow-left:not(.shadow-right) {
272
- box-shadow: ${s}, ${r}, ${i},
318
+ box-shadow: ${s}, ${r}, ${n},
273
319
  ${({$isLastPinned:o})=>e(o||!1)};
274
320
  }
275
321
 
276
322
  &.shadow-right.shadow-bottom.shadow-left:not(.shadow-top) {
277
- box-shadow: ${a}, ${r}, ${i},
323
+ box-shadow: ${a}, ${r}, ${n},
278
324
  ${({$isLastPinned:o})=>e(o||!1)};
279
325
  }
280
326
 
281
327
  /* All four sides */
282
328
  &.shadow-top.shadow-right.shadow-bottom.shadow-left {
283
- box-shadow: ${s}, ${a}, ${r}, ${i},
329
+ box-shadow: ${s}, ${a}, ${r}, ${n},
284
330
  ${({$isLastPinned:o})=>e(o||!1)};
285
331
  }
286
332
 
@@ -302,6 +348,32 @@
302
348
  pointer-events: none;
303
349
  }
304
350
 
351
+ /* read only fields are dimmed down for bg and border */
352
+ &:has(> div.readonly) {
353
+ &:not(.multiple-selected) {
354
+ --focused-readonly-color: hsl(212 15% 18% / 1);
355
+ &.focused {
356
+ background-color: var(--focused-readonly-color);
357
+ &::after {
358
+ border-color: var(--focused-readonly-color);
359
+ }
360
+ }
361
+ }
362
+
363
+ /* when focused is readonly and multiple-selected */
364
+ &.multiple-selected {
365
+ &.focused::after {
366
+ display: none;
367
+ }
368
+ }
369
+ }
370
+
371
+ /* if there is no cell widget element (no children) then the cell should not be selectable at all */
372
+ &:not(:has(> div)) {
373
+ pointer-events: none;
374
+ cursor: default;
375
+ }
376
+
305
377
  &.editing {
306
378
  z-index: 10 !important;
307
379
  /* light border around the outside */
@@ -358,6 +430,13 @@
358
430
  overflow: hidden;
359
431
  }
360
432
 
433
+ /* Hide all header buttons when any column is being resized */
434
+ &.resizing {
435
+ .actions {
436
+ display: none !important;
437
+ }
438
+ }
439
+
361
440
  table {
362
441
  height: fit-content;
363
442
  width: 100%;
@@ -386,5 +465,5 @@
386
465
  font-size: 18px;
387
466
  color: var(--md-sys-color-outline);
388
467
  }
389
- `;exports.ColumnHeader=h;exports.HeaderButtons=w;exports.HeaderCell=p;exports.LinkColumnHeader=g;exports.ResizedHandler=c;exports.TR=d;exports.TableCell=u;exports.TableCellContent=l;exports.TableContainer=m;exports.TableHeader=b;exports.TableWrapper=f;
468
+ `;exports.ColumnHeader=h;exports.HeaderButtons=u;exports.HeaderCell=p;exports.LinkColumnHeader=g;exports.ResizedHandler=c;exports.TR=d;exports.TableCell=w;exports.TableCellContent=l;exports.TableContainer=m;exports.TableHeader=b;exports.TableWrapper=f;
390
469
  //# sourceMappingURL=ProjectTreeTable.styled.cjs.js.map