@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":"ClipboardContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport {\n getCellValue,\n getEntityDataById,\n getLinkEntityIdsByColumnId,\n parseCellId,\n} from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\nimport usePasteLinks, { LinkUpdate } from '../hooks/usePasteLinks'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport { validateEntityId } from '@shared/util'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n const { pasteTableLinks } = usePasteLinks()\n const { getEntityById, attribFields } = useProjectTableContext()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // First, organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n // do not include row selection column\n if (colId === ROW_SELECTION_COLUMN_ID) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Get the entity for this row\n const entity = getEntityById(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n\n // special handling of link cells\n if (colId.startsWith('link_')) {\n cellValue = getLinkEntityIdsByColumnId(entity.links, colId)\n } else {\n // @ts-ignore\n let foundValue = getCellValue(entity, colId)\n\n if (!foundValue) {\n // we should look for the default value set out in attribFields\n const field = attribFields.find((f) => f.name === colId.replace('attrib_', ''))\n if (field && field.data.type === 'boolean') {\n foundValue = false // default boolean value\n } else if (field && field.data.type.includes('list_of')) {\n foundValue = [] // default list value\n }\n }\n\n // convert to string if foundValue is not undefined or null use empty string otherwise\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(entity.entityId || entity.id, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap, getEntityById],\n )\n\n const doesClipboardContainId = async () => {\n // check if the clipboard contains a valid ID\n const clipboardText = await getClipboardString()\n if (!clipboardText) return false\n const parsedData = parseClipboardText(clipboardText)\n if (parsedData.length === 0) return false\n return parsedData.every((row) => {\n return row.values.every((value) => value.split(',').every((v) => validateEntityId(v)))\n })\n }\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) {\n return\n }\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const getClipboardString = async (): Promise<string | void> => {\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n return clipboardText\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n }\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected, config) => {\n const { method = 'replace' } = config || {}\n if (!selected.length) return\n\n const clipboardText = await getClipboardString()\n if (!clipboardText) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Organize selected cells by row\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // For each row, get the sorted column IDs\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values for status and subType\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n // If it's a single cell value, use it for all cells\n // Otherwise use the modulo approach to repeat values\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n // Validate clipboard data for this cell\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex,\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n links: Record<string, string[]>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false,\n isLink = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = getEntityById(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n isLink = colId.startsWith('link_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue) || isLink) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n const pasteColIndex = colIndex % parsedData[pasteRowIndex].values.length\n pasteValue = parsedData[pasteRowIndex].values[pasteColIndex]\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n links: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isLink) {\n const [_link, linkType, inType, outType, direction] = colId.split('_')\n // final-task|folder|task\n entityData.links[`${linkType}|${inType}|${outType}_${direction}`] = processedValue\n } else if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array and LinkUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n const linkUpdatesMap = new Map<string, LinkUpdate>()\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n\n // For links, create LinkUpdate objects\n Object.entries(entity.links).forEach(([linkKey, targetEntityIds]) => {\n // Parse the linkKey: \"linkType|inType|outType_direction\"\n const [linkTypePart, direction] = linkKey.split('_')\n const linkTypeParts = linkTypePart.split('|')\n\n if (linkTypeParts.length >= 3) {\n const linkTypeName = linkTypeParts[0]\n const inType = linkTypeParts[1]\n const outType = linkTypeParts[2]\n\n // Reconstruct the full linkType in the required format: name|input_type|output_type\n const linkType = `${linkTypeName}|${inType}|${outType}`\n\n // Determine target entity type based on direction\n const targetEntityType = direction === 'out' ? outType : inType\n\n // Create a unique key for this link operation\n const linkUpdateKey = `${entity.id}-${linkType}-${direction}`\n\n linkUpdatesMap.set(linkUpdateKey, {\n rowId: entity.rowId,\n sourceEntityId: entity.id,\n sourceEntityType: entity.type,\n linkType,\n direction: direction as 'in' | 'out',\n targetEntityType,\n operation: method,\n targetEntityIds: Array.isArray(targetEntityIds) ? targetEntityIds : [],\n })\n }\n })\n })\n\n const allLinkUpdates = Array.from(linkUpdatesMap.values())\n\n // Make separate calls to update entities and links\n const updatePromises: Promise<void>[] = []\n\n if (allEntityUpdates.length > 0) {\n updatePromises.push(updateEntities(allEntityUpdates))\n }\n\n if (allLinkUpdates.length > 0) {\n updatePromises.push(pasteTableLinks(allLinkUpdates))\n }\n\n if (updatePromises.length > 0) {\n try {\n await Promise.all(updatePromises)\n } catch (error: any) {\n console.error('Error updating entities:', error)\n clipboardError(`Paste failed: ${error || error?.message || 'Unknown error'}`)\n }\n }\n },\n [\n selectedCells,\n gridMap,\n entitiesMap,\n updateEntities,\n pasteTableLinks,\n columnEnums,\n getEntityById,\n ],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = async (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n // don't execute paste if focus is inside an input, textarea, or content‐editable element\n const activeEl = document.activeElement as HTMLElement | null\n\n if (\n activeEl &&\n (activeEl.tagName === 'INPUT' ||\n activeEl.tagName === 'TEXTAREA' ||\n activeEl.isContentEditable)\n ) {\n // focus is inside an input, textarea, or content-editable element\n const allEntityIds = await doesClipboardContainId()\n // we might still want to paste if the clipboard contains valid entity IDs\n if (allEntityIds) {\n // prevent pasting into input fields and handle as paste on the cell\n e.preventDefault()\n } else {\n // skip pasting\n return\n }\n }\n pasteFromClipboard(Array.from(selectedCells), {\n method: e.shiftKey ? 'merge' : 'replace', // Use shift key to determine paste method\n })\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["ClipboardContext","createContext","ClipboardProvider","children","entitiesMap","columnEnums","columnReadOnly","selectedCells","gridMap","focusedCellId","useSelectionCellsContext","updateEntities","useCellEditing","pasteTableLinks","usePasteLinks","getEntityById","attribFields","useProjectTableContext","getSelectionData","useCallback","selected","config","headers","fullRow","cellsByRow","cellId","position","parseCellId","rowId","colId","ROW_SELECTION_COLUMN_ID","_a","_b","sortedRows","a","b","indexA","indexB","clipboardText","firstRowId","colIds","headerValues","columnName","entity","filteredColIds","rowValues","cellValue","getLinkEntityIdsByColumnId","foundValue","getCellValue","field","f","getEntityPath","error","doesClipboardContainId","getClipboardString","parsedData","parseClipboardText","row","value","v","validateEntityId","copyToClipboard","clipboardError","exportCSV","projectName","blob","url","selectedCount","pasteFromClipboard","method","isSingleCellValue","firstRow","selectedColIds","colIndex","rowIndex","isFolder","getEntityDataById","pasteValue","pasteRowIndex","pasteColIndex","validateClipboardData","entitiesToUpdateMap","isAttrib","isLink","fieldValueType","fieldValue","entityType","fieldToUpdate","processedValue","processFieldValue","entityKey","entityData","_link","linkType","inType","outType","direction","allEntityUpdates","linkUpdatesMap","linkKey","targetEntityIds","linkTypePart","linkTypeParts","linkTypeName","targetEntityType","linkUpdateKey","allLinkUpdates","updatePromises","useEffect","handleKeyDown","e","activeEl","useMemo","jsx","useClipboard","context","useContext"],"mappings":";;;;;;;;;;;;;AA8BA,MAAMA,IAAmBC,GAAgD,MAAS,GAErEC,KAAsD,CAAC;AAAA,EAClE,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,gBAAAC;AACF,MAAM;AAEJ,QAAM,EAAE,eAAAC,GAAe,SAAAC,GAAS,eAAAC,GAAA,IAAkBC,GAAyB,GACrE,EAAE,gBAAAC,EAAe,IAAIC,GAAe,GACpC,EAAE,iBAAAC,EAAgB,IAAIC,GAAc,GACpC,EAAE,eAAAC,GAAe,cAAAC,GAAa,IAAIC,GAAuB,GAEzDC,IAAmBC;AAAA,IACvB,OAAOC,GAAoBC,MAAsD;AAC/E,YAAM,EAAE,SAAAC,GAAS,SAAAC,EAAQ,IAAIF,KAAU,CAAC;AACpC,UAAA;AAEI,cAAAG,wBAAiB,IAAyB;AAGvC,QAAAJ,EAAA,QAAQ,CAACK,MAAW;;AACrB,gBAAAC,IAAWC,EAAYF,CAAM;AACnC,cAAI,CAACC,EAAU;AAET,gBAAA,EAAE,OAAAE,GAAO,OAAAC,EAAA,IAAUH;AAGzB,UAAIG,MAAUC,MAETN,EAAW,IAAII,CAAK,KACvBJ,EAAW,IAAII,GAAW,oBAAA,IAAA,CAAK,IAGjCG,IAAAP,EAAW,IAAII,CAAK,MAApB,QAAAG,EAAuB,IAAIF;AAAA,QAAK,CACjC,GAEGN,KACmBH,EAClB;AAAA,UACC,CAACK;;AACC,qBAAAM,IAAAJ,EAAYF,CAAM,MAAlB,gBAAAM,EAAqB,YACrBC,IAAAL,EAAYF,CAAM,MAAlB,gBAAAO,EAAqB,WAAUF;AAAA;AAAA,QAAA,EAElC,IAAI,CAACL;;AAAW,kBAAAM,IAAAJ,EAAYF,CAAM,MAAlB,gBAAAM,EAAqB;AAAA,SAAK,EAIhC,QAAQ,CAACH,MAAU;AAE9B,UAAKJ,EAAW,IAAII,CAAK,KACvBJ,EAAW,IAAII,GAAW,oBAAA,IAAA,CAAK,GAEd,MAAM,KAAKpB,EAAQ,aAAa,MAAM,EAC9C,QAAQ,CAACqB,MAAU;;AAC5B,aAAAE,IAAAP,EAAW,IAAII,CAAK,MAApB,QAAAG,EAAuB,IAAIF;AAAA,UAAK,CACjC;AAAA,QAAA,CACF;AAIG,cAAAI,IAAa,MAAM,KAAKT,EAAW,KAAM,CAAA,EAAE,KAAK,CAACU,GAAGC,MAAM;AAC9D,gBAAMC,IAAS5B,EAAQ,aAAa,IAAI0B,CAAC,KAAK,OACxCG,IAAS7B,EAAQ,aAAa,IAAI2B,CAAC,KAAK;AAC9C,iBAAOC,IAASC;AAAA,QAAA,CACjB;AAGD,YAAIC,IAAgB;AAGd,cAAAC,IAAaN,EAAW,CAAC;AAC3B,YAAA,CAACM,EAAmB,QAAA;AAGxB,cAAMC,IAAS,MAAM,KAAKhB,EAAW,IAAIe,CAAU,KAAK,CAAE,CAAA,EAAE,KAAK,CAACL,GAAGC,MAAM;AACzE,gBAAMC,IAAS5B,EAAQ,aAAa,IAAI0B,CAAC,KAAK,OACxCG,IAAS7B,EAAQ,aAAa,IAAI2B,CAAC,KAAK;AAC9C,iBAAOC,IAASC;AAAA,QAAA,CACjB;AAGG,YAAAf,KAAWkB,EAAO,SAAS,GAAG;AAChC,gBAAMC,IAAyB,CAAC;AAEhC,qBAAWZ,KAASW,GAAQ;AAE1B,kBAAME,IAAab;AACnB,YAAAY,EAAa,KAAK,GAAGC,EAAW,QAAQ,MAAM,IAAI,CAAC,EAAE;AAAA,UAAA;AAGtC,UAAAJ,KAAAG,EAAa,KAAK,GAAI,IAAI;AAAA;AAAA,QAAA;AAG7C,mBAAWb,KAASK,GAAY;AAExB,gBAAAU,IAAS5B,EAAca,CAAK;AAElC,cAAI,CAACe,GAAQ;AACH,oBAAA,KAAK,+BAA+Bf,CAAK,EAAE;AACnD;AAAA,UAAA;AAWF,gBAAMgB,IAPS,MAAM,KAAKpB,EAAW,IAAII,CAAK,KAAK,CAAE,CAAA,EAAE,KAAK,CAACM,GAAGC,MAAM;AACpE,kBAAMC,IAAS5B,EAAQ,aAAa,IAAI0B,CAAC,KAAK,OACxCG,IAAS7B,EAAQ,aAAa,IAAI2B,CAAC,KAAK;AAC9C,mBAAOC,IAASC;AAAA,UAAA,CACjB,EAG6B,OAAO,CAACR,MAAUA,MAAUC,CAAuB,GAE3Ee,IAAsB,CAAC;AAG7B,qBAAWhB,KAASe,GAAgB;AAElC,gBAAIE,IAAY;AAGZ,gBAAAjB,EAAM,WAAW,OAAO;AACd,cAAAiB,IAAAC,GAA2BJ,EAAO,OAAOd,CAAK;AAAA,iBACrD;AAED,kBAAAmB,IAAaC,EAAaN,GAAQd,CAAK;AAE3C,kBAAI,CAACmB,GAAY;AAET,sBAAAE,IAAQlC,GAAa,KAAK,CAACmC,MAAMA,EAAE,SAAStB,EAAM,QAAQ,WAAW,EAAE,CAAC;AAC9E,gBAAIqB,KAASA,EAAM,KAAK,SAAS,YAClBF,IAAA,KACJE,KAASA,EAAM,KAAK,KAAK,SAAS,SAAS,MACpDF,IAAa,CAAC;AAAA,cAChB;AAIF,cAAAF,IAAwCE,KAAe,OAAO,OAAOA,CAAU,IAAI,IAG/EnB,MAAU,WACZiB,IAAYM,GAAcT,EAAO,YAAYA,EAAO,IAAIvC,CAAW,IAGjEyB,MAAU,cAER,gBAAgBc,MAClBG,IAAYH,EAAO,cAAc,KAE/B,cAAcA,MAChBG,IAAYH,EAAO,YAAY;AAAA,YAEnC;AAIF,YAAAE,EAAU,KAAK,GAAGC,EAAU,QAAQ,MAAM,IAAI,CAAC,EAAE;AAAA,UAAA;AAIlC,UAAAR,KAAAO,EAAU,KAAK,GAAI,IAAI;AAAA;AAAA,QAAA;AAGnC,eAAAP;AAAA,eACAe,GAAO;AACN,gBAAA,MAAM,gCAAgCA,CAAK;AAAA,MAAA;AAAA,IAEvD;AAAA,IACA,CAAC9C,GAAeE,IAAeD,GAASJ,GAAaW,CAAa;AAAA,EACpE,GAEMuC,KAAyB,YAAY;AAEnC,UAAAhB,IAAgB,MAAMiB,EAAmB;AAC3C,QAAA,CAACjB,EAAsB,QAAA;AACrB,UAAAkB,IAAaC,EAAmBnB,CAAa;AAC/C,WAAAkB,EAAW,WAAW,IAAU,KAC7BA,EAAW,MAAM,CAACE,MAChBA,EAAI,OAAO,MAAM,CAACC,MAAUA,EAAM,MAAM,GAAG,EAAE,MAAM,CAACC,MAAMC,GAAiBD,CAAC,CAAC,CAAC,CACtF;AAAA,EACH,GAEME,IAA2D3C;AAAA,IAC/D,OAAOC,GAAUG,MAAY;AAEvB,UADOH,IAAAA,KAAY,MAAM,KAAKb,CAAa,GAC3C,CAACa,EAAS,OAAQ;AACtB,YAAMkB,IAAgB,MAAMpB,EAAiBE,GAAU,EAAE,SAAAG,GAAS;AAClE,UAAKe,GAGD;AAAA,YAAA,CAAC,UAAU,WAAW;AACxB,UAAAyB,EAAe,8CAA8C;AAC7D;AAAA,QAAA;AAEE,YAAA,CAAC,OAAO,iBAAiB;AAC3B,UAAAA,EAAe,sDAAsD;AACrE;AAAA,QAAA;AAEE,YAAA;AACI,gBAAA,UAAU,UAAU,UAAUzB,CAAa,GACzC,QAAA,IAAI,oCAAoCA,CAAa;AAAA,iBACtDe,GAAY;AACJ,UAAAU,EAAA,gCAAgCV,EAAM,OAAO,EAAE;AAAA,QAAA;AAAA;AAAA,IAElE;AAAA,IACA,CAAC9C,GAAeH,GAAaI,CAAO;AAAA,EACtC,GAEMwD,KAA+C7C;AAAA,IACnD,OAAOC,GAAU6C,GAAa1C,MAAY;AAEpC,UADOH,IAAAA,KAAY,MAAM,KAAKb,CAAa,GAC3C,EAACa,EAAS;AAEV,YAAA;AAEI,gBAAAkB,IAAgB,MAAMpB,EAAiBE,GAAU,EAAE,SAAS,IAAM,SAAAG,GAAS;AACjF,cAAI,CAACe,EAAe;AAGd,gBAAA4B,IAAO,IAAI,KAAK,CAAC5B,CAAa,GAAG,EAAE,MAAM,YAAY,GACrD6B,IAAM,IAAI,gBAAgBD,CAAI,GAC9BhC,IAAI,SAAS,cAAc,GAAG;AACpC,UAAAA,EAAE,OAAOiC;AACT,gBAAMC,IAAgBhD,EAAS;AAC/B,UAAAc,EAAE,WAAW,GAAG+B,CAAW,WAAWG,CAAa,WAAU,oBAAI,KAAK,GACnE,YAAY,EACZ,MAAM,GAAG,EAAE,CAAC,QACflC,EAAE,MAAM,GACR,IAAI,gBAAgBiC,CAAG;AAAA,iBAChBd,GAAO;AACN,kBAAA,MAAM,gCAAgCA,CAAK;AAAA,QAAA;AAAA,IAEvD;AAAA,IACA,CAAC9C,GAAeH,GAAaI,GAASU,CAAgB;AAAA,EACxD,GAEMqC,IAAqB,YAAoC;AACzD,QAAA,CAAC,UAAU,WAAW;AACxB,MAAAQ,EAAe,8CAA8C;AAC7D;AAAA,IAAA;AAEE,QAAA,CAAC,OAAO,iBAAiB;AAC3B,MAAAA,EAAe,sDAAsD;AACrE;AAAA,IAAA;AAEE,QAAAzB;AACA,QAAA;AACc,aAAAA,IAAA,MAAM,UAAU,UAAU,SAAS,GAC5CA;AAAA,aACAe,GAAY;AACJ,MAAAU,EAAA,kCAAkCV,EAAM,OAAO,EAAE;AAChE;AAAA,IAAA;AAAA,EAEJ,GAEMgB,IAAiElD;AAAA,IACrE,OAAOC,GAAUC,MAAW;;AAC1B,YAAM,EAAE,QAAAiD,IAAS,UAAU,IAAIjD,KAAU,CAAC;AACtC,UAAA,CAACD,EAAS,OAAQ;AAEhB,YAAAkB,IAAgB,MAAMiB,EAAmB;AAC/C,UAAI,CAACjB,EAAe;AAGd,YAAAkB,IAAaC,EAAmBnB,CAAa;AAC/C,UAAA,CAACkB,EAAW,OAAQ;AAGlB,YAAAe,IAAoBf,EAAW,WAAW,KAAKA,EAAW,CAAC,EAAE,OAAO,WAAW,GAG/EhC,wBAAiB,IAAyB;AAGhD,YAAM,KAAKJ,CAAQ,EAAE,QAAQ,CAACK,MAAW;;AACjC,cAAAC,IAAWC,EAAYF,CAAM;AACnC,YAAI,CAACC,EAAU;AAET,cAAA,EAAE,OAAAE,GAAO,OAAAC,EAAA,IAAUH;AAEzB,QAAKF,EAAW,IAAII,CAAK,KACvBJ,EAAW,IAAII,GAAW,oBAAA,IAAA,CAAK,IAEjCG,IAAAP,EAAW,IAAII,CAAK,MAApB,QAAAG,EAAuB,IAAIF;AAAA,MAAK,CACjC;AAGK,YAAAI,IAAa,MAAM,KAAKT,EAAW,KAAM,CAAA,EAAE,KAAK,CAACU,GAAGC,MAAM;AAC9D,cAAMC,IAAS5B,EAAQ,aAAa,IAAI0B,CAAC,KAAK,OACxCG,IAAS7B,EAAQ,aAAa,IAAI2B,CAAC,KAAK;AAC9C,eAAOC,IAASC;AAAA,MAAA,CACjB,GAGKmC,IAAWvC,EAAW,CAAC,GACvBwC,IAAiB,MAAM,KAAKjD,EAAW,IAAIgD,CAAQ,KAAK,CAAE,CAAA,EAAE,KAAK,CAACtC,GAAGC,MAAM;AAC/E,cAAMC,IAAS5B,EAAQ,aAAa,IAAI0B,CAAC,KAAK,OACxCG,IAAS7B,EAAQ,aAAa,IAAI2B,CAAC,KAAK;AAC9C,eAAOC,IAASC;AAAA,MAAA,CACjB;AAGD,eAASqC,IAAW,GAAGA,IAAWD,EAAe,QAAQC,KAAY;AAC7D,cAAA7C,IAAQ4C,EAAeC,CAAQ;AAErC,iBAASC,IAAW,GAAGA,IAAW1C,EAAW,QAAQ0C,KAAY;AACzD,gBAAA/C,IAAQK,EAAW0C,CAAQ,GAC3BC,MAAW7C,IAAA8C,EAA4BjD,GAAOxB,CAAW,MAA9C,gBAAA2B,EAAiD,gBAAe;AAK7E,cAAA+C;AACJ,cAAIP;AACF,YAAAO,IAAatB,EAAW,CAAC,EAAE,OAAO,CAAC;AAAA,eAC9B;AACC,kBAAAuB,IAAgBJ,IAAWnB,EAAW,QACtCwB,IAAgBN,IAAWlB,EAAWuB,CAAa,EAAE,OAAO;AAClE,YAAAD,IAAatB,EAAWuB,CAAa,EAAE,OAAOC,CAAa;AAAA,UAAA;AAgB7D,cAAI,CAZYC,GAAsB;AAAA,YACpC,OAAApD;AAAA,YACA,UAAA+C;AAAA,YACA,YAAAE;AAAA,YACA,YAAAtB;AAAA,YACA,aAAAnD;AAAA,YACA,gBAAAC;AAAA,YACA,UAAAqE;AAAA,YACA,UAAAD;AAAA,YACA,mBAAAH;AAAA,UAAA,CACD,EAEa;AAAA,QAAA;AAAA,MAChB;AAII,YAAAW,wBAA0B,IAU9B;AAGF,eAASR,IAAW,GAAGA,IAAWD,EAAe,QAAQC,KAAY;AAC7D,cAAA7C,IAAQ4C,EAAeC,CAAQ;AAGrC,YAAI7C,MAAU,OAAQ;AAGlB,YAAAsD,IAAW,IACbC,IAAS,IAEPC,IAA4D;AAE5D,YAAApD,EAAW,SAAS,GAAG;AACnB,gBAAAM,IAAaN,EAAW,CAAC,GACzBU,IAAS5B,EAAcwB,CAAU;AACvC,cAAII,GAAQ;AACC,YAAAwC,IAAAtD,EAAM,WAAW,SAAS,GAC5BuD,IAAAvD,EAAM,WAAW,OAAO;AAI3B,kBAAAyD,IAAarC,EAAaN,GAAQd,CAAK;AAC7C,YAAI,MAAM,QAAQyD,CAAU,KAAKF,IACdC,IAAA,UACR,OAAOC,KAAe,WACdD,IAAA,WACR,OAAOC,KAAe,cACdD,IAAA,YAIfxD,MAAU,cACDsD,IAAA;AAAA,UACb;AAAA,QACF;AAIF,iBAASR,IAAW,GAAGA,IAAW1C,EAAW,QAAQ0C,KAAY;AACzD,gBAAA/C,IAAQK,EAAW0C,CAAQ,GAC3BY,KAAavD,IAAA6C,EAAkBjD,GAAOxB,CAAW,MAApC,gBAAA4B,EAAuC,YACpD4C,IAAWW,MAAe;AAG5B,cAAAT;AACJ,cAAIP;AACF,YAAAO,IAAatB,EAAW,CAAC,EAAE,OAAO,CAAC;AAAA,eAC9B;AACC,kBAAAuB,IAAgBJ,IAAWnB,EAAW,QACtCwB,IAAgBN,IAAWlB,EAAWuB,CAAa,EAAE,OAAO;AAClE,YAAAD,IAAatB,EAAWuB,CAAa,EAAE,OAAOC,CAAa;AAAA,UAAA;AAG7D,cAAIQ,IAAgB3D,EAAM,MAAM,GAAG,EAAE,SAASA;AAG9C,cAAIA,MAAU,cACZ2D,IAAgBZ,IAAW,eAAe,YAC/BO,IAAA,IAGP,CAACL;AAAY;AAIb,gBAAAW,IAAiBC,GAAkBZ,GAAYO,CAAc,GAG7DM,IAAY,GAAG/D,CAAK,IAAI2D,CAAU;AACxC,UAAI,CAACL,EAAoB,IAAIS,CAAS,KAAKJ,KACzCL,EAAoB,IAAIS,GAAW;AAAA,YACjC,OAAA/D;AAAA,YACA,IAAIA;AAAA,YACJ,MAAM2D;AAAA,YACN,QAAQ,CAAC;AAAA,YACT,QAAQ,CAAC;AAAA,YACT,OAAO,CAAA;AAAA,UAAC,CACT;AAGG,gBAAAK,IAAaV,EAAoB,IAAIS,CAAS;AAGpD,cAAIP,GAAQ;AACJ,kBAAA,CAACS,GAAOC,GAAUC,IAAQC,IAASC,EAAS,IAAIpE,EAAM,MAAM,GAAG;AAE1D,YAAA+D,EAAA,MAAM,GAAGE,CAAQ,IAAIC,EAAM,IAAIC,EAAO,IAAIC,EAAS,EAAE,IAAIR;AAAA,iBAC3DN,IACES,EAAA,OAAOJ,CAAa,IAAIC,IAExBG,EAAA,OAAOJ,CAAa,IAAIC;AAAA,QACrC;AAAA,MACF;AAIF,YAAMS,IAAmC,CAAC,GACpCC,wBAAqB,IAAwB;AAE/B,MAAAjB,EAAA,QAAQ,CAACvC,MAAW;AAE/B,eAAA,QAAQA,EAAO,MAAM,EAAE,QAAQ,CAAC,CAACO,GAAOS,CAAK,MAAM;AACxD,UAAAuC,EAAiB,KAAK;AAAA,YACpB,OAAOvD,EAAO;AAAA,YACd,IAAIA,EAAO;AAAA,YACX,MAAMA,EAAO;AAAA,YACb,OAAAO;AAAA,YACA,OAAAS;AAAAA,UAAA,CACD;AAAA,QAAA,CACF,GAGM,OAAA,QAAQhB,EAAO,MAAM,EAAE,QAAQ,CAAC,CAACO,GAAOS,CAAK,MAAM;AACxD,UAAAuC,EAAiB,KAAK;AAAA,YACpB,OAAOvD,EAAO;AAAA,YACd,IAAIA,EAAO;AAAA,YACX,MAAMA,EAAO;AAAA,YACb,OAAAO;AAAA,YACA,OAAAS;AAAAA,YACA,UAAU;AAAA,UAAA,CACX;AAAA,QAAA,CACF,GAGM,OAAA,QAAQhB,EAAO,KAAK,EAAE,QAAQ,CAAC,CAACyD,GAASC,CAAe,MAAM;AAEnE,gBAAM,CAACC,GAAcL,CAAS,IAAIG,EAAQ,MAAM,GAAG,GAC7CG,IAAgBD,EAAa,MAAM,GAAG;AAExC,cAAAC,EAAc,UAAU,GAAG;AACvB,kBAAAC,IAAeD,EAAc,CAAC,GAC9BR,IAASQ,EAAc,CAAC,GACxBP,IAAUO,EAAc,CAAC,GAGzBT,IAAW,GAAGU,CAAY,IAAIT,CAAM,IAAIC,CAAO,IAG/CS,IAAmBR,MAAc,QAAQD,IAAUD,GAGnDW,IAAgB,GAAG/D,EAAO,EAAE,IAAImD,CAAQ,IAAIG,CAAS;AAE3D,YAAAE,EAAe,IAAIO,GAAe;AAAA,cAChC,OAAO/D,EAAO;AAAA,cACd,gBAAgBA,EAAO;AAAA,cACvB,kBAAkBA,EAAO;AAAA,cACzB,UAAAmD;AAAA,cACA,WAAAG;AAAA,cACA,kBAAAQ;AAAA,cACA,WAAWnC;AAAA,cACX,iBAAiB,MAAM,QAAQ+B,CAAe,IAAIA,IAAkB,CAAA;AAAA,YAAC,CACtE;AAAA,UAAA;AAAA,QACH,CACD;AAAA,MAAA,CACF;AAED,YAAMM,IAAiB,MAAM,KAAKR,EAAe,QAAQ,GAGnDS,IAAkC,CAAC;AAUrC,UARAV,EAAiB,SAAS,KACbU,EAAA,KAAKjG,EAAeuF,CAAgB,CAAC,GAGlDS,EAAe,SAAS,KACXC,EAAA,KAAK/F,EAAgB8F,CAAc,CAAC,GAGjDC,EAAe,SAAS;AACtB,YAAA;AACI,gBAAA,QAAQ,IAAIA,CAAc;AAAA,iBACzBvD,GAAY;AACX,kBAAA,MAAM,4BAA4BA,CAAK,GAC/CU,EAAe,iBAAiBV,MAASA,KAAA,gBAAAA,EAAO,YAAW,eAAe,EAAE;AAAA,QAAA;AAAA,IAGlF;AAAA,IACA;AAAA,MACE9C;AAAA,MACAC;AAAA,MACAJ;AAAA,MACAO;AAAA,MACAE;AAAA,MACAR;AAAA,MACAU;AAAA,IAAA;AAAA,EAEJ;AAGA,EAAA8F,GAAU,MAAM;AACR,UAAAC,IAAgB,OAAOC,MAAqB;AAOhD,WALKA,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,OACxBjD,EAAA,IAIbiD,EAAE,WAAWA,EAAE,YAAYA,EAAE,QAAQ,KAAK;AAE7C,cAAMC,IAAW,SAAS;AAGxB,YAAAA,MACCA,EAAS,YAAY,WACpBA,EAAS,YAAY,cACrBA,EAAS;AAKX,cAFqB,MAAM1D,GAAuB;AAIhD,YAAAyD,EAAE,eAAe;AAAA;AAGjB;AAGe,QAAA1C,EAAA,MAAM,KAAK9D,CAAa,GAAG;AAAA,UAC5C,QAAQwG,EAAE,WAAW,UAAU;AAAA;AAAA,QAAA,CAChC;AAAA,MAAA;AAAA,IAEL;AAEO,kBAAA,iBAAiB,WAAWD,CAAa,GACzC,MAAM;AACJ,aAAA,oBAAoB,WAAWA,CAAa;AAAA,IACrD;AAAA,EAAA,GACC,CAAChD,GAAiBO,CAAkB,CAAC;AAExC,QAAMV,KAAQsD;AAAA,IACZ,OAAO;AAAA,MACL,iBAAAnD;AAAA,MACA,oBAAAO;AAAA,MACA,WAAAL;AAAA,IAAA;AAAA,IAEF,CAACF,GAAiBO,CAAkB;AAAA,EACtC;AAEA,SAAQ6C,gBAAAA,GAAAA,IAAAlH,EAAiB,UAAjB,EAA0B,OAAA2D,IAAe,UAAAxD,EAAS,CAAA;AAC5D,GAEagH,KAAe,MAA4B;AAChD,QAAAC,IAAUC,GAAWrH,CAAgB;AAC3C,MAAIoH,MAAY;AACR,UAAA,IAAI,MAAM,sDAAsD;AAEjE,SAAAA;AACT;"}
1
+ {"version":3,"file":"ClipboardContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ClipboardContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useCallback, useMemo, useEffect } from 'react'\n\n// Contexts\nimport { ROW_SELECTION_COLUMN_ID, useSelectionCellsContext } from './SelectionCellsContext'\nimport { useCellEditing } from './CellEditingContext'\n\n// Utils\nimport {\n getCellValue,\n getEntityDataById,\n getLinkEntityIdsByColumnId,\n parseCellId,\n} from '../utils/cellUtils'\n\n// Types\nimport { EntityUpdate } from '../hooks/useUpdateTableData'\nimport usePasteLinks, { LinkUpdate } from '../hooks/usePasteLinks'\n\n// Import from the new modular files\nimport {\n getEntityPath,\n parseClipboardText,\n clipboardError,\n processFieldValue,\n} from './clipboard/clipboardUtils'\nimport { validateClipboardData } from './clipboard/clipboardValidation'\nimport { ClipboardContextType, ClipboardProviderProps } from './clipboard/clipboardTypes'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport { validateEntityId } from '@shared/util'\n\nconst ClipboardContext = createContext<ClipboardContextType | undefined>(undefined)\n\nexport const ClipboardProvider: React.FC<ClipboardProviderProps> = ({\n children,\n entitiesMap,\n columnEnums,\n columnReadOnly,\n visibleColumns,\n}) => {\n // Get selection information from SelectionContext\n const { selectedCells, gridMap, focusedCellId } = useSelectionCellsContext()\n const { updateEntities } = useCellEditing()\n const { pasteTableLinks } = usePasteLinks()\n const { getEntityById, attribFields } = useProjectTableContext()\n\n const getSelectionData = useCallback(\n async (selected: string[], config?: { headers?: boolean; fullRow?: boolean }) => {\n const { headers, fullRow } = config || {}\n try {\n // Get visible columns in display order, excluding row selection\n const visibleColumnIds = visibleColumns\n .map(col => col.id)\n .filter(id => id !== ROW_SELECTION_COLUMN_ID)\n\n // Organize selected cells by row, filtering to only visible columns\n const cellsByRow = new Map<string, Set<string>>()\n\n // Parse all selected cells and organize by rowId and colId\n selected.forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n if (colId === ROW_SELECTION_COLUMN_ID || !visibleColumnIds.includes(colId)) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n\n cellsByRow.get(rowId)?.add(colId)\n })\n\n if (fullRow) {\n const selectedRows = selected\n .filter(\n (cellId) =>\n parseCellId(cellId)?.rowId &&\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[]\n\n // select the whole row\n // For rows with selection cells, add all available columns\n selectedRows.forEach((rowId) => {\n // add the rowId if it doesn't exist\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n const allColumns = Array.from(gridMap.colIdToIndex.keys())\n allColumns.forEach((colId) => {\n cellsByRow.get(rowId)?.add(colId)\n })\n })\n }\n\n // Get sorted row IDs based on their index in the grid\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Build clipboard text\n let clipboardText = ''\n\n // Get the first row to determine columns\n const firstRowId = sortedRows[0]\n if (!firstRowId) return ''\n\n // Get all column IDs for the first row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(firstRowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Include headers if requested\n if (headers && colIds.length > 0) {\n const headerValues: string[] = []\n\n for (const colId of colIds) {\n // Use colId as the column name since we don't have direct access to column names\n const columnName = colId\n headerValues.push(`${columnName.replace(/\"/g, '\"\"')}`)\n }\n\n clipboardText += headerValues.join('\\t') + '\\n'\n }\n\n for (const rowId of sortedRows) {\n // Get the entity for this row\n const entity = getEntityById(rowId)\n\n if (!entity) {\n console.warn(`Entity not found for rowId: ${rowId}`)\n continue\n }\n\n // Get all column IDs for this row, sorted by their index in the grid\n const colIds = Array.from(cellsByRow.get(rowId) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Filter out the row selection column from the copied data\n const filteredColIds = colIds.filter((colId) => colId !== ROW_SELECTION_COLUMN_ID)\n\n const rowValues: string[] = []\n\n // For each column in this row\n for (const colId of filteredColIds) {\n // Determine the value based on the column ID\n let cellValue = ''\n\n // special handling of link cells\n if (colId.startsWith('link_')) {\n cellValue = getLinkEntityIdsByColumnId(entity.links, colId)\n } else {\n // @ts-ignore\n let foundValue = getCellValue(entity, colId)\n\n if (!foundValue) {\n // we should look for the default value set out in attribFields\n const field = attribFields.find((f) => f.name === colId.replace('attrib_', ''))\n if (field && field.data.type === 'boolean') {\n foundValue = false // default boolean value\n } else if (field && field.data.type.includes('list_of')) {\n foundValue = [] // default list value\n }\n }\n\n // convert to string if foundValue is not undefined or null use empty string otherwise\n cellValue = foundValue !== undefined && foundValue !== null ? String(foundValue) : ''\n\n // Special handling for name field - include full path\n if (colId === 'name') {\n cellValue = getEntityPath(entity.entityId || entity.id, entitiesMap)\n }\n\n if (colId === 'subType') {\n // get folderType or taskType\n if ('folderType' in entity) {\n cellValue = entity.folderType || ''\n }\n if ('taskType' in entity) {\n cellValue = entity.taskType || ''\n }\n }\n }\n\n // Escape double quotes in the cell value and wrap in quotes\n rowValues.push(`${cellValue.replace(/\"/g, '\"\"')}`)\n }\n\n // Add row to clipboard text\n clipboardText += rowValues.join('\\t') + '\\n'\n }\n\n return clipboardText\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, focusedCellId, gridMap, entitiesMap, getEntityById, visibleColumns],\n )\n\n const doesClipboardContainId = async () => {\n // check if the clipboard contains a valid ID\n const clipboardText = await getClipboardString()\n if (!clipboardText) return false\n const parsedData = parseClipboardText(clipboardText)\n if (parsedData.length === 0) return false\n return parsedData.every((row) => {\n return row.values.every((value) => value.split(',').every((v) => validateEntityId(v)))\n })\n }\n\n const copyToClipboard: ClipboardContextType['copyToClipboard'] = useCallback(\n async (selected, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n const clipboardText = await getSelectionData(selected, { fullRow })\n if (!clipboardText) {\n return\n }\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n try {\n await navigator.clipboard.writeText(clipboardText)\n console.log('Copied to clipboard successfully', clipboardText)\n } catch (error: any) {\n clipboardError(`Failed to copy to clipboard: ${error.message}`)\n }\n },\n [selectedCells, entitiesMap, gridMap],\n )\n\n const exportCSV: ClipboardContextType['exportCSV'] = useCallback(\n async (selected, projectName, fullRow) => {\n selected = selected || Array.from(selectedCells)\n if (!selected.length) return\n\n try {\n // Get clipboard text with headers included for CSV export\n const clipboardText = await getSelectionData(selected, { headers: true, fullRow })\n if (!clipboardText) return\n\n // create a csv file and download it\n const blob = new Blob([clipboardText], { type: 'text/csv' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n const selectedCount = selected.length\n a.download = `${projectName}-export-${selectedCount}_cells-${new Date()\n .toISOString()\n .slice(0, 10)}.csv`\n a.click()\n URL.revokeObjectURL(url)\n } catch (error) {\n console.error('Failed to copy to clipboard:', error)\n }\n },\n [selectedCells, entitiesMap, gridMap, getSelectionData],\n )\n\n const getClipboardString = async (): Promise<string | void> => {\n if (!navigator.clipboard) {\n clipboardError('Clipboard API not supported in this browser.')\n return\n }\n if (!window.isSecureContext) {\n clipboardError('Clipboard operations require a secure HTTPS context.')\n return\n }\n let clipboardText: string\n try {\n clipboardText = await navigator.clipboard.readText()\n return clipboardText\n } catch (error: any) {\n clipboardError(`Failed to read from clipboard: ${error.message}`)\n return\n }\n }\n\n const pasteFromClipboard: ClipboardContextType['pasteFromClipboard'] = useCallback(\n async (selected, config) => {\n const { method = 'replace' } = config || {}\n if (!selected.length) return\n\n const clipboardText = await getClipboardString()\n if (!clipboardText) return\n\n // Parse the clipboard text\n const parsedData = parseClipboardText(clipboardText)\n if (!parsedData.length) return\n\n console.log('Clipboard data parsed:', parsedData)\n\n // Determine if we have a single value in the clipboard (one row, one column)\n const isSingleCellValue = parsedData.length === 1 && parsedData[0].values.length === 1\n\n // Get visible columns in display order, excluding row selection\n const visibleColumnIds = visibleColumns\n .map(col => col.id)\n .filter(id => id !== ROW_SELECTION_COLUMN_ID)\n\n // Helper function to map clipboard values to visible columns\n const mapClipboardToVisibleColumns = (clipboardRow: any, visibleColumnIds: string[], clipboardHeaders?: string[]) => {\n const mappedValues: Record<string, string> = {}\n\n if (clipboardHeaders && clipboardHeaders.length > 0) {\n // Map by header names when available\n clipboardHeaders.forEach((header: string, index: number) => {\n const matchingColId = visibleColumnIds.find(colId =>\n colId === header ||\n colId.replace('attrib_', '') === header ||\n colId === `attrib_${header}` ||\n colId.toLowerCase() === header.toLowerCase()\n )\n\n if (matchingColId && index < clipboardRow.values.length) {\n mappedValues[matchingColId] = clipboardRow.values[index]\n }\n })\n } else {\n // Fallback: map by position, but only to visible columns\n visibleColumnIds.forEach((colId, index) => {\n if (index < clipboardRow.values.length) {\n mappedValues[colId] = clipboardRow.values[index]\n }\n })\n }\n\n return mappedValues\n }\n\n // Extract headers if they exist (assuming first row might be headers from external source)\n // You might need to detect this differently based on your clipboard format\n const clipboardHeaders = parsedData[0]?.colIds || undefined\n\n // Organize selected cells by row, filtering to only visible columns\n const cellsByRow = new Map<string, Set<string>>()\n\n Array.from(selected).forEach((cellId) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n const { rowId, colId } = position\n if (colId === ROW_SELECTION_COLUMN_ID || !visibleColumnIds.includes(colId)) return\n\n if (!cellsByRow.has(rowId)) {\n cellsByRow.set(rowId, new Set())\n }\n cellsByRow.get(rowId)?.add(colId)\n })\n\n // Get sorted row IDs and column IDs\n const sortedRows = Array.from(cellsByRow.keys()).sort((a, b) => {\n const indexA = gridMap.rowIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.rowIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n const firstRow = sortedRows[0]\n const selectedColIds = Array.from(cellsByRow.get(firstRow) || []).sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // First pass: validate all values\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const isFolder = getEntityDataById<'folder'>(rowId, entitiesMap)?.entityType === 'folder'\n\n const pasteRowIndex = rowIndex % parsedData.length\n const clipboardRow = parsedData[pasteRowIndex]\n\n // Map clipboard data to visible columns\n const mappedValues = isSingleCellValue\n ? { [selectedColIds[0]]: parsedData[0].values[0] }\n : mapClipboardToVisibleColumns(clipboardRow, selectedColIds, clipboardHeaders)\n\n // Validate each mapped value\n for (const colId of selectedColIds) {\n const pasteValue = mappedValues[colId] || ''\n\n const isValid = validateClipboardData({\n colId,\n isFolder,\n pasteValue,\n parsedData,\n columnEnums,\n columnReadOnly,\n rowIndex,\n colIndex: selectedColIds.indexOf(colId),\n isSingleCellValue,\n })\n\n if (!isValid) return\n }\n\n }\n\n // Create a map to consolidate updates for the same entity\n const entitiesToUpdateMap = new Map<\n string,\n {\n rowId: string\n id: string\n type: string\n fields: Record<string, any>\n attrib: Record<string, any>\n links: Record<string, string[]>\n }\n >()\n\n // For each column, prepare updates\n for (let colIndex = 0; colIndex < selectedColIds.length; colIndex++) {\n const colId = selectedColIds[colIndex]\n\n // Skip special handling for 'name' which we don't want to paste\n if (colId === 'name') continue\n\n // Check if this is an attribute field by examining the first entity\n let isAttrib = false,\n isLink = false\n // Check if the field potentially contains array values\n let fieldValueType: 'string' | 'number' | 'boolean' | 'array' = 'string'\n\n if (sortedRows.length > 0) {\n const firstRowId = sortedRows[0]\n const entity = getEntityById(firstRowId)\n if (entity) {\n isAttrib = colId.startsWith('attrib_')\n isLink = colId.startsWith('link_')\n\n // Determine if field is an array and its value type\n // @ts-ignore - Check entity property or attribute\n const fieldValue = getCellValue(entity, colId)\n if (Array.isArray(fieldValue) || isLink) {\n fieldValueType = 'array'\n } else if (typeof fieldValue === 'number') {\n fieldValueType = 'number'\n } else if (typeof fieldValue === 'boolean') {\n fieldValueType = 'boolean'\n }\n\n // Special case for subType\n if (colId === 'subType') {\n isAttrib = false\n }\n }\n }\n\n // Process each row individually\n for (let rowIndex = 0; rowIndex < sortedRows.length; rowIndex++) {\n const rowId = sortedRows[rowIndex]\n const entityType = getEntityDataById(rowId, entitiesMap)?.entityType\n const isFolder = entityType === 'folder'\n\n // Get the appropriate value from the clipboard data\n let pasteValue\n if (isSingleCellValue) {\n pasteValue = parsedData[0].values[0]\n } else {\n const pasteRowIndex = rowIndex % parsedData.length\n // Map visible column index to clipboard data index\n // When clipboard contains hidden columns, we need to skip over values\n // that correspond to hidden columns when pasting to visible columns\n const clipboardRow = parsedData[pasteRowIndex]\n\n // If clipboard has more values than visible columns being pasted to,\n // it likely contains hidden column data. We need to reconstruct the original\n // column order that was copied by finding which columns would have been included.\n if (clipboardRow.values.length > selectedColIds.length) {\n // The clipboard data was created from consecutive columns in grid order.\n // We need to find which consecutive columns would result in this clipboard data.\n // Start from the first visible column and extend the range to match clipboard length.\n const firstVisibleColIndex = gridMap.colIdToIndex.get(selectedColIds[0]) ?? 0\n\n // Get all columns sorted by grid position\n const allGridColumns = Array.from(gridMap.colIdToIndex.keys())\n .filter(id => id !== ROW_SELECTION_COLUMN_ID)\n .sort((a, b) => {\n const indexA = gridMap.colIdToIndex.get(a) ?? Infinity\n const indexB = gridMap.colIdToIndex.get(b) ?? Infinity\n return indexA - indexB\n })\n\n // Find the starting position in the grid columns array\n const startGridPos = allGridColumns.findIndex(id => gridMap.colIdToIndex.get(id) === firstVisibleColIndex)\n\n // The original copied columns are the consecutive ones starting from this position\n const originalCopiedColumns = allGridColumns.slice(startGridPos, startGridPos + clipboardRow.values.length)\n\n // Find this column's position in the original copied columns\n const clipboardColIndex = originalCopiedColumns.indexOf(colId)\n pasteValue = clipboardRow.values[clipboardColIndex] || clipboardRow.values[clipboardColIndex % clipboardRow.values.length]\n console.log(`Pasting (hidden columns detected) to column \"${colId}\" (visible index ${colIndex}, clipboard index ${clipboardColIndex}):`, pasteValue, 'from clipboard values:', clipboardRow.values, 'original columns:', originalCopiedColumns)\n } else {\n // Normal case: map clipboard column index using modulo\n const pasteColIndex = colIndex % clipboardRow.values.length\n pasteValue = clipboardRow.values[pasteColIndex]\n console.log(`Pasting (normal) to column \"${colId}\" (index ${colIndex}, paste index ${pasteColIndex}):`, pasteValue, 'from clipboard values:', clipboardRow.values)\n }\n }\n\n let fieldToUpdate = colId.split('_').pop() || colId\n\n // Special handling for subType (convert to folderType or taskType)\n if (colId === 'subType') {\n fieldToUpdate = isFolder ? 'folderType' : 'taskType'\n isAttrib = false\n\n // Skip empty values for enum fields\n if (!pasteValue) continue\n }\n\n // Process the value based on its type\n const processedValue = processFieldValue(pasteValue, fieldValueType)\n\n // Get or create entity entry in the map\n const entityKey = `${rowId}-${entityType}`\n if (!entitiesToUpdateMap.has(entityKey) && entityType) {\n entitiesToUpdateMap.set(entityKey, {\n rowId,\n id: rowId,\n type: entityType,\n fields: {},\n attrib: {},\n links: {},\n })\n }\n\n const entityData = entitiesToUpdateMap.get(entityKey)!\n\n // Add the field to the appropriate place\n if (isLink) {\n const [_link, linkType, inType, outType, direction] = colId.split('_')\n // final-task|folder|task\n entityData.links[`${linkType}|${inType}|${outType}_${direction}`] = processedValue\n } else if (isAttrib) {\n entityData.attrib[fieldToUpdate] = processedValue\n } else {\n entityData.fields[fieldToUpdate] = processedValue\n }\n }\n }\n\n // Convert the consolidated map to EntityUpdate array and LinkUpdate array\n const allEntityUpdates: EntityUpdate[] = []\n const linkUpdatesMap = new Map<string, LinkUpdate>()\n\n entitiesToUpdateMap.forEach((entity) => {\n // For regular fields, create one update per field\n Object.entries(entity.fields).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n })\n })\n\n // For attributes, create one update per attribute\n Object.entries(entity.attrib).forEach(([field, value]) => {\n allEntityUpdates.push({\n rowId: entity.rowId,\n id: entity.id,\n type: entity.type,\n field,\n value,\n isAttrib: true,\n })\n })\n\n // For links, create LinkUpdate objects\n Object.entries(entity.links).forEach(([linkKey, targetEntityIds]) => {\n // Parse the linkKey: \"linkType|inType|outType_direction\"\n const [linkTypePart, direction] = linkKey.split('_')\n const linkTypeParts = linkTypePart.split('|')\n\n if (linkTypeParts.length >= 3) {\n const linkTypeName = linkTypeParts[0]\n const inType = linkTypeParts[1]\n const outType = linkTypeParts[2]\n\n // Reconstruct the full linkType in the required format: name|input_type|output_type\n const linkType = `${linkTypeName}|${inType}|${outType}`\n\n // Determine target entity type based on direction\n const targetEntityType = direction === 'out' ? outType : inType\n\n // Create a unique key for this link operation\n const linkUpdateKey = `${entity.id}-${linkType}-${direction}`\n\n linkUpdatesMap.set(linkUpdateKey, {\n rowId: entity.rowId,\n sourceEntityId: entity.id,\n sourceEntityType: entity.type,\n linkType,\n direction: direction as 'in' | 'out',\n targetEntityType,\n operation: method,\n targetEntityIds: Array.isArray(targetEntityIds) ? targetEntityIds : [],\n })\n }\n })\n })\n\n const allLinkUpdates = Array.from(linkUpdatesMap.values())\n\n // Make separate calls to update entities and links\n const updatePromises: Promise<void>[] = []\n\n if (allEntityUpdates.length > 0) {\n updatePromises.push(updateEntities(allEntityUpdates))\n }\n\n if (allLinkUpdates.length > 0) {\n updatePromises.push(pasteTableLinks(allLinkUpdates))\n }\n\n if (updatePromises.length > 0) {\n try {\n await Promise.all(updatePromises)\n } catch (error: any) {\n console.error('Error updating entities:', error)\n clipboardError(`Paste failed: ${error || error?.message || 'Unknown error'}`)\n }\n }\n },\n [\n selectedCells,\n gridMap,\n entitiesMap,\n updateEntities,\n pasteTableLinks,\n columnEnums,\n getEntityById,\n visibleColumns,\n ],\n )\n\n // Set up keyboard event listeners\n useEffect(() => {\n const handleKeyDown = async (e: KeyboardEvent) => {\n // Copy functionality (Ctrl+C or Command+C)\n if ((e.ctrlKey || e.metaKey) && e.key === 'c') {\n copyToClipboard()\n }\n\n // Paste functionality (Ctrl+V or Command+V)\n if ((e.ctrlKey || e.metaKey) && e.key === 'v') {\n // don't execute paste if focus is inside an input, textarea, or content‐editable element\n const activeEl = document.activeElement as HTMLElement | null\n\n if (\n activeEl &&\n (activeEl.tagName === 'INPUT' ||\n activeEl.tagName === 'TEXTAREA' ||\n activeEl.isContentEditable)\n ) {\n // focus is inside an input, textarea, or content-editable element\n const allEntityIds = await doesClipboardContainId()\n // we might still want to paste if the clipboard contains valid entity IDs\n if (allEntityIds) {\n // prevent pasting into input fields and handle as paste on the cell\n e.preventDefault()\n } else {\n // skip pasting\n return\n }\n }\n pasteFromClipboard(Array.from(selectedCells), {\n method: e.shiftKey ? 'merge' : 'replace', // Use shift key to determine paste method\n })\n }\n }\n\n window.addEventListener('keydown', handleKeyDown)\n return () => {\n window.removeEventListener('keydown', handleKeyDown)\n }\n }, [copyToClipboard, pasteFromClipboard])\n\n const value = useMemo(\n () => ({\n copyToClipboard,\n pasteFromClipboard,\n exportCSV,\n }),\n [copyToClipboard, pasteFromClipboard],\n )\n\n return <ClipboardContext.Provider value={value}>{children}</ClipboardContext.Provider>\n}\n\nexport const useClipboard = (): ClipboardContextType => {\n const context = useContext(ClipboardContext)\n if (context === undefined) {\n throw new Error('useClipboard must be used within a ClipboardProvider')\n }\n return context\n}\n"],"names":["ClipboardContext","createContext","ClipboardProvider","children","entitiesMap","columnEnums","columnReadOnly","visibleColumns","selectedCells","gridMap","focusedCellId","useSelectionCellsContext","updateEntities","useCellEditing","pasteTableLinks","usePasteLinks","getEntityById","attribFields","useProjectTableContext","getSelectionData","useCallback","selected","config","headers","fullRow","visibleColumnIds","col","id","ROW_SELECTION_COLUMN_ID","cellsByRow","cellId","position","parseCellId","rowId","colId","_a","_b","sortedRows","a","b","indexA","indexB","clipboardText","firstRowId","colIds","headerValues","columnName","entity","filteredColIds","rowValues","cellValue","getLinkEntityIdsByColumnId","foundValue","getCellValue","field","f","getEntityPath","error","doesClipboardContainId","getClipboardString","parsedData","parseClipboardText","row","value","v","validateEntityId","copyToClipboard","clipboardError","exportCSV","projectName","blob","url","selectedCount","pasteFromClipboard","method","isSingleCellValue","mapClipboardToVisibleColumns","clipboardRow","clipboardHeaders","mappedValues","header","index","matchingColId","firstRow","selectedColIds","rowIndex","isFolder","getEntityDataById","pasteRowIndex","pasteValue","validateClipboardData","entitiesToUpdateMap","colIndex","isAttrib","isLink","fieldValueType","fieldValue","entityType","_c","firstVisibleColIndex","allGridColumns","startGridPos","originalCopiedColumns","clipboardColIndex","pasteColIndex","fieldToUpdate","processedValue","processFieldValue","entityKey","entityData","_link","linkType","inType","outType","direction","allEntityUpdates","linkUpdatesMap","linkKey","targetEntityIds","linkTypePart","linkTypeParts","linkTypeName","targetEntityType","linkUpdateKey","allLinkUpdates","updatePromises","useEffect","handleKeyDown","e","activeEl","useMemo","jsx","useClipboard","context","useContext"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("../../../../../_virtual/jsx-runtime.cjs.js"),q=require("react");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");const j=require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");const D=require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");const b=require("../hooks/useAttributesList.cjs.js"),n=q.createContext(void 0),v=({children:r,projectName:e})=>{const{data:t,isSuccess:a,isFetching:i}=j.useGetProjectQuery({projectName:e},{skip:!e}),{attribFields:s,isSuccess:P,isFetching:u}=b({projectName:e}),{data:d=[]}=D.useGetUsersAssigneeQuery({projectName:e},{skip:!e}),o=d,c=a&&P&&!i&&!u,x=q.useMemo(()=>({isInitialized:c,isLoading:i||u,projectInfo:t,projectName:e,users:o,attribFields:s}),[c,i,u,t,e,o,s]);return g.jsxRuntimeExports.jsx(n.Provider,{value:x,children:r})},h=()=>{const r=q.useContext(n);if(!r)throw new Error("useProjectDataContext must be used within a ProjectDataProvider");return r};exports.ProjectDataProvider=v;exports.useProjectDataContext=h;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("../../../../../_virtual/jsx-runtime.cjs.js"),q=require("react");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");const b=require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");const l=require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");const D=require("../hooks/useAttributesList.cjs.js"),a=q.createContext(void 0),v=({children:r,projectName:e})=>{const{data:t,isSuccess:P,isFetching:i}=b.useGetProjectQuery({projectName:e},{skip:!e}),{attribFields:s,writableFields:o,isSuccess:d,isFetching:u}=D({projectName:e}),{data:x=[]}=l.useGetUsersAssigneeQuery({projectName:e},{skip:!e}),c=x,n=P&&d&&!i&&!u,g=q.useMemo(()=>({isInitialized:n,isLoading:i||u,projectInfo:t,projectName:e,users:c,attribFields:s,writableFields:o}),[n,i,u,t,e,c,s,o]);return j.jsxRuntimeExports.jsx(a.Provider,{value:g,children:r})},h=()=>{const r=q.useContext(a);if(!r)throw new Error("useProjectDataContext must be used within a ProjectDataProvider");return r};exports.ProjectDataProvider=v;exports.useProjectDataContext=h;
2
2
  //# sourceMappingURL=ProjectDataContext.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectDataContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectDataContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useMemo } from 'react'\nimport { useGetUsersAssigneeQuery, useGetProjectQuery } from '@shared/api'\nimport type { ProjectModel } from '@shared/api'\nimport useAttributeFields, { ProjectTableAttribute } from '../hooks/useAttributesList'\n\ntype User = {\n name: string\n fullName: string\n}\n\nexport interface ProjectDataContextProps {\n isInitialized: boolean\n isLoading: boolean\n // Project Info\n projectInfo?: ProjectModel\n projectName: string\n users: User[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n}\n\nconst ProjectDataContext = createContext<ProjectDataContextProps | undefined>(undefined)\n\ninterface ProjectDataProviderProps {\n children: ReactNode\n projectName: string\n}\n\nexport const ProjectDataProvider = ({ children, projectName }: ProjectDataProviderProps) => {\n // GET PROJECT DATA\n const {\n data: projectInfo,\n isSuccess: isSuccessProject,\n isFetching: isFetchingProject,\n } = useGetProjectQuery({ projectName }, { skip: !projectName })\n\n const {\n attribFields,\n isSuccess: isSuccessAttribs,\n isFetching: isFetchingAttribs,\n } = useAttributeFields({ projectName })\n\n // GET USERS\n const { data: usersData = [] } = useGetUsersAssigneeQuery({ projectName }, { skip: !projectName })\n const users = usersData as User[]\n\n const isInitialized =\n isSuccessProject && isSuccessAttribs && !isFetchingProject && !isFetchingAttribs\n\n const value = useMemo(\n () => ({\n isInitialized,\n isLoading: isFetchingProject || isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n }),\n [\n isInitialized,\n isFetchingProject,\n isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n ],\n )\n\n return <ProjectDataContext.Provider value={value}>{children}</ProjectDataContext.Provider>\n}\n\nexport const useProjectDataContext = () => {\n const context = useContext(ProjectDataContext)\n if (!context) {\n throw new Error('useProjectDataContext must be used within a ProjectDataProvider')\n }\n return context\n}\n"],"names":["ProjectDataContext","createContext","ProjectDataProvider","children","projectName","projectInfo","isSuccessProject","isFetchingProject","useGetProjectQuery","attribFields","isSuccessAttribs","isFetchingAttribs","useAttributeFields","usersData","useGetUsersAssigneeQuery","users","isInitialized","value","useMemo","jsx","useProjectDataContext","context","useContext"],"mappings":"28IAqBMA,EAAqBC,gBAAmD,MAAS,EAO1EC,EAAsB,CAAC,CAAE,SAAAC,EAAU,YAAAC,KAA4C,CAEpF,KAAA,CACJ,KAAMC,EACN,UAAWC,EACX,WAAYC,CAAA,EACVC,EAAAA,mBAAmB,CAAE,YAAAJ,CAAA,EAAe,CAAE,KAAM,CAACA,EAAa,EAExD,CACJ,aAAAK,EACA,UAAWC,EACX,WAAYC,CAAA,EACVC,EAAmB,CAAE,YAAAR,EAAa,EAGhC,CAAE,KAAMS,EAAY,CAAA,GAAOC,EAAAA,yBAAyB,CAAE,YAAAV,GAAe,CAAE,KAAM,CAACA,EAAa,EAC3FW,EAAQF,EAERG,EACJV,GAAoBI,GAAoB,CAACH,GAAqB,CAACI,EAE3DM,EAAQC,EAAA,QACZ,KAAO,CACL,cAAAF,EACA,UAAWT,GAAqBI,EAChC,YAAAN,EACA,YAAAD,EACA,MAAAW,EACA,aAAAN,CAAA,GAEF,CACEO,EACAT,EACAI,EACAN,EACAD,EACAW,EACAN,CAAA,CAEJ,EAEA,OAAQU,EAAAA,kBAAAA,IAAAnB,EAAmB,SAAnB,CAA4B,MAAAiB,EAAe,SAAAd,CAAS,CAAA,CAC9D,EAEaiB,EAAwB,IAAM,CACnC,MAAAC,EAAUC,aAAWtB,CAAkB,EAC7C,GAAI,CAACqB,EACG,MAAA,IAAI,MAAM,iEAAiE,EAE5E,OAAAA,CACT"}
1
+ {"version":3,"file":"ProjectDataContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectDataContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useMemo } from 'react'\nimport { useGetUsersAssigneeQuery, useGetProjectQuery } from '@shared/api'\nimport type { ProjectModel } from '@shared/api'\nimport useAttributeFields, { ProjectTableAttribute } from '../hooks/useAttributesList'\n\ntype User = {\n name: string\n fullName: string\n}\n\nexport interface ProjectDataContextProps {\n isInitialized: boolean\n isLoading: boolean\n // Project Info\n projectInfo?: ProjectModel\n projectName: string\n users: User[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n writableFields?: string[]\n}\n\nconst ProjectDataContext = createContext<ProjectDataContextProps | undefined>(undefined)\n\ninterface ProjectDataProviderProps {\n children: ReactNode\n projectName: string\n}\n\nexport const ProjectDataProvider = ({ children, projectName }: ProjectDataProviderProps) => {\n // GET PROJECT DATA\n const {\n data: projectInfo,\n isSuccess: isSuccessProject,\n isFetching: isFetchingProject,\n } = useGetProjectQuery({ projectName }, { skip: !projectName })\n\n const {\n attribFields,\n writableFields,\n isSuccess: isSuccessAttribs,\n isFetching: isFetchingAttribs,\n } = useAttributeFields({ projectName })\n\n // GET USERS\n const { data: usersData = [] } = useGetUsersAssigneeQuery({ projectName }, { skip: !projectName })\n const users = usersData as User[]\n\n const isInitialized =\n isSuccessProject && isSuccessAttribs && !isFetchingProject && !isFetchingAttribs\n\n const value = useMemo(\n () => ({\n isInitialized,\n isLoading: isFetchingProject || isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n writableFields,\n }),\n [\n isInitialized,\n isFetchingProject,\n isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n writableFields,\n ],\n )\n\n return <ProjectDataContext.Provider value={value}>{children}</ProjectDataContext.Provider>\n}\n\nexport const useProjectDataContext = () => {\n const context = useContext(ProjectDataContext)\n if (!context) {\n throw new Error('useProjectDataContext must be used within a ProjectDataProvider')\n }\n return context\n}\n"],"names":["ProjectDataContext","createContext","ProjectDataProvider","children","projectName","projectInfo","isSuccessProject","isFetchingProject","useGetProjectQuery","attribFields","writableFields","isSuccessAttribs","isFetchingAttribs","useAttributeFields","usersData","useGetUsersAssigneeQuery","users","isInitialized","value","useMemo","jsx","useProjectDataContext","context","useContext"],"mappings":"28IAsBMA,EAAqBC,gBAAmD,MAAS,EAO1EC,EAAsB,CAAC,CAAE,SAAAC,EAAU,YAAAC,KAA4C,CAEpF,KAAA,CACJ,KAAMC,EACN,UAAWC,EACX,WAAYC,CAAA,EACVC,EAAAA,mBAAmB,CAAE,YAAAJ,CAAA,EAAe,CAAE,KAAM,CAACA,EAAa,EAExD,CACJ,aAAAK,EACA,eAAAC,EACA,UAAWC,EACX,WAAYC,CAAA,EACVC,EAAmB,CAAE,YAAAT,EAAa,EAGhC,CAAE,KAAMU,EAAY,CAAA,GAAOC,EAAAA,yBAAyB,CAAE,YAAAX,GAAe,CAAE,KAAM,CAACA,EAAa,EAC3FY,EAAQF,EAERG,EACJX,GAAoBK,GAAoB,CAACJ,GAAqB,CAACK,EAE3DM,EAAQC,EAAA,QACZ,KAAO,CACL,cAAAF,EACA,UAAWV,GAAqBK,EAChC,YAAAP,EACA,YAAAD,EACA,MAAAY,EACA,aAAAP,EACA,eAAAC,CAAA,GAEF,CACEO,EACAV,EACAK,EACAP,EACAD,EACAY,EACAP,EACAC,CAAA,CAEJ,EAEA,OAAQU,EAAAA,kBAAAA,IAAApB,EAAmB,SAAnB,CAA4B,MAAAkB,EAAe,SAAAf,CAAS,CAAA,CAC9D,EAEakB,EAAwB,IAAM,CACnC,MAAAC,EAAUC,aAAWvB,CAAkB,EAC7C,GAAI,CAACsB,EACG,MAAA,IAAI,MAAM,iEAAiE,EAE5E,OAAAA,CACT"}
@@ -1,5 +1,5 @@
1
- import { j as P } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { createContext as x, useMemo as f, useContext as g } from "react";
1
+ import { j as x } from "../../../../../_virtual/jsx-runtime.es.js";
2
+ import { createContext as f, useMemo as F, useContext as b } from "react";
3
3
  import "../../../api/base/client.es.js";
4
4
  import "../../../api/generated/graphql.es.js";
5
5
  import "../../../api/generated/graphqlLinks.es.js";
@@ -65,57 +65,60 @@ import "../../../api/queries/overview/getOverview.es.js";
65
65
  import "../../../api/queries/overview/updateOverview.es.js";
66
66
  import "../../../api/queries/permissions/getPermissions.es.js";
67
67
  import "../../../api/queries/products/createProduct.es.js";
68
- import { useGetProjectQuery as h } from "../../../api/queries/project/getProject.es.js";
68
+ import { useGetProjectQuery as g } from "../../../api/queries/project/getProject.es.js";
69
69
  import "../../../api/queries/project/updateProject.es.js";
70
70
  import "../../../api/queries/review/getReview.es.js";
71
71
  import "../../../api/queries/review/updateReview.es.js";
72
72
  import "../../../api/queries/share/share.es.js";
73
73
  import "../../../api/queries/system/getSystem.es.js";
74
74
  import "../../../api/queries/userDashboard/getUserDashboard.es.js";
75
- import { useGetUsersAssigneeQuery as j } from "../../../api/queries/users/getUsers.es.js";
75
+ import { useGetUsersAssigneeQuery as h } from "../../../api/queries/users/getUsers.es.js";
76
76
  import "../../../api/queries/users/updateUsers.es.js";
77
77
  import "../../../api/queries/versions/updateVersions.es.js";
78
78
  import "../../../api/queries/views/getViews.es.js";
79
79
  import "../../../api/queries/views/updateViews.es.js";
80
80
  import "../../../api/queries/watchers/getWatchers.es.js";
81
- import D from "../hooks/useAttributesList.es.js";
82
- const n = x(void 0), Wt = ({ children: i, projectName: t }) => {
81
+ import j from "../hooks/useAttributesList.es.js";
82
+ const c = f(void 0), Xt = ({ children: i, projectName: t }) => {
83
83
  const {
84
84
  data: m,
85
- isSuccess: c,
85
+ isSuccess: u,
86
86
  isFetching: o
87
- } = h({ projectName: t }, { skip: !t }), {
87
+ } = g({ projectName: t }, { skip: !t }), {
88
88
  attribFields: p,
89
- isSuccess: u,
89
+ writableFields: s,
90
+ isSuccess: a,
90
91
  isFetching: r
91
- } = D({ projectName: t }), { data: a = [] } = j({ projectName: t }, { skip: !t }), s = a, e = c && u && !o && !r, d = f(
92
+ } = j({ projectName: t }), { data: d = [] } = h({ projectName: t }, { skip: !t }), e = d, n = u && a && !o && !r, P = F(
92
93
  () => ({
93
- isInitialized: e,
94
+ isInitialized: n,
94
95
  isLoading: o || r,
95
96
  projectInfo: m,
96
97
  projectName: t,
97
- users: s,
98
- attribFields: p
98
+ users: e,
99
+ attribFields: p,
100
+ writableFields: s
99
101
  }),
100
102
  [
101
- e,
103
+ n,
102
104
  o,
103
105
  r,
104
106
  m,
105
107
  t,
106
- s,
107
- p
108
+ e,
109
+ p,
110
+ s
108
111
  ]
109
112
  );
110
- return /* @__PURE__ */ P.jsx(n.Provider, { value: d, children: i });
111
- }, Xt = () => {
112
- const i = g(n);
113
+ return /* @__PURE__ */ x.jsx(c.Provider, { value: P, children: i });
114
+ }, Yt = () => {
115
+ const i = b(c);
113
116
  if (!i)
114
117
  throw new Error("useProjectDataContext must be used within a ProjectDataProvider");
115
118
  return i;
116
119
  };
117
120
  export {
118
- Wt as ProjectDataProvider,
119
- Xt as useProjectDataContext
121
+ Xt as ProjectDataProvider,
122
+ Yt as useProjectDataContext
120
123
  };
121
124
  //# sourceMappingURL=ProjectDataContext.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectDataContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectDataContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useMemo } from 'react'\nimport { useGetUsersAssigneeQuery, useGetProjectQuery } from '@shared/api'\nimport type { ProjectModel } from '@shared/api'\nimport useAttributeFields, { ProjectTableAttribute } from '../hooks/useAttributesList'\n\ntype User = {\n name: string\n fullName: string\n}\n\nexport interface ProjectDataContextProps {\n isInitialized: boolean\n isLoading: boolean\n // Project Info\n projectInfo?: ProjectModel\n projectName: string\n users: User[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n}\n\nconst ProjectDataContext = createContext<ProjectDataContextProps | undefined>(undefined)\n\ninterface ProjectDataProviderProps {\n children: ReactNode\n projectName: string\n}\n\nexport const ProjectDataProvider = ({ children, projectName }: ProjectDataProviderProps) => {\n // GET PROJECT DATA\n const {\n data: projectInfo,\n isSuccess: isSuccessProject,\n isFetching: isFetchingProject,\n } = useGetProjectQuery({ projectName }, { skip: !projectName })\n\n const {\n attribFields,\n isSuccess: isSuccessAttribs,\n isFetching: isFetchingAttribs,\n } = useAttributeFields({ projectName })\n\n // GET USERS\n const { data: usersData = [] } = useGetUsersAssigneeQuery({ projectName }, { skip: !projectName })\n const users = usersData as User[]\n\n const isInitialized =\n isSuccessProject && isSuccessAttribs && !isFetchingProject && !isFetchingAttribs\n\n const value = useMemo(\n () => ({\n isInitialized,\n isLoading: isFetchingProject || isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n }),\n [\n isInitialized,\n isFetchingProject,\n isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n ],\n )\n\n return <ProjectDataContext.Provider value={value}>{children}</ProjectDataContext.Provider>\n}\n\nexport const useProjectDataContext = () => {\n const context = useContext(ProjectDataContext)\n if (!context) {\n throw new Error('useProjectDataContext must be used within a ProjectDataProvider')\n }\n return context\n}\n"],"names":["ProjectDataContext","createContext","ProjectDataProvider","children","projectName","projectInfo","isSuccessProject","isFetchingProject","useGetProjectQuery","attribFields","isSuccessAttribs","isFetchingAttribs","useAttributeFields","usersData","useGetUsersAssigneeQuery","users","isInitialized","value","useMemo","jsx","useProjectDataContext","context","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAMA,IAAqBC,EAAmD,MAAS,GAO1EC,KAAsB,CAAC,EAAE,UAAAC,GAAU,aAAAC,QAA4C;AAEpF,QAAA;AAAA,IACJ,MAAMC;AAAA,IACN,WAAWC;AAAA,IACX,YAAYC;AAAA,EAAA,IACVC,EAAmB,EAAE,aAAAJ,EAAA,GAAe,EAAE,MAAM,CAACA,GAAa,GAExD;AAAA,IACJ,cAAAK;AAAA,IACA,WAAWC;AAAA,IACX,YAAYC;AAAA,EAAA,IACVC,EAAmB,EAAE,aAAAR,GAAa,GAGhC,EAAE,MAAMS,IAAY,CAAA,MAAOC,EAAyB,EAAE,aAAAV,KAAe,EAAE,MAAM,CAACA,GAAa,GAC3FW,IAAQF,GAERG,IACJV,KAAoBI,KAAoB,CAACH,KAAqB,CAACI,GAE3DM,IAAQC;AAAA,IACZ,OAAO;AAAA,MACL,eAAAF;AAAA,MACA,WAAWT,KAAqBI;AAAA,MAChC,aAAAN;AAAA,MACA,aAAAD;AAAA,MACA,OAAAW;AAAA,MACA,cAAAN;AAAA,IAAA;AAAA,IAEF;AAAA,MACEO;AAAA,MACAT;AAAA,MACAI;AAAA,MACAN;AAAA,MACAD;AAAA,MACAW;AAAA,MACAN;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAQU,gBAAAA,EAAAA,IAAAnB,EAAmB,UAAnB,EAA4B,OAAAiB,GAAe,UAAAd,EAAS,CAAA;AAC9D,GAEaiB,KAAwB,MAAM;AACnC,QAAAC,IAAUC,EAAWtB,CAAkB;AAC7C,MAAI,CAACqB;AACG,UAAA,IAAI,MAAM,iEAAiE;AAE5E,SAAAA;AACT;"}
1
+ {"version":3,"file":"ProjectDataContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectDataContext.tsx"],"sourcesContent":["import { createContext, ReactNode, useContext, useMemo } from 'react'\nimport { useGetUsersAssigneeQuery, useGetProjectQuery } from '@shared/api'\nimport type { ProjectModel } from '@shared/api'\nimport useAttributeFields, { ProjectTableAttribute } from '../hooks/useAttributesList'\n\ntype User = {\n name: string\n fullName: string\n}\n\nexport interface ProjectDataContextProps {\n isInitialized: boolean\n isLoading: boolean\n // Project Info\n projectInfo?: ProjectModel\n projectName: string\n users: User[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n writableFields?: string[]\n}\n\nconst ProjectDataContext = createContext<ProjectDataContextProps | undefined>(undefined)\n\ninterface ProjectDataProviderProps {\n children: ReactNode\n projectName: string\n}\n\nexport const ProjectDataProvider = ({ children, projectName }: ProjectDataProviderProps) => {\n // GET PROJECT DATA\n const {\n data: projectInfo,\n isSuccess: isSuccessProject,\n isFetching: isFetchingProject,\n } = useGetProjectQuery({ projectName }, { skip: !projectName })\n\n const {\n attribFields,\n writableFields,\n isSuccess: isSuccessAttribs,\n isFetching: isFetchingAttribs,\n } = useAttributeFields({ projectName })\n\n // GET USERS\n const { data: usersData = [] } = useGetUsersAssigneeQuery({ projectName }, { skip: !projectName })\n const users = usersData as User[]\n\n const isInitialized =\n isSuccessProject && isSuccessAttribs && !isFetchingProject && !isFetchingAttribs\n\n const value = useMemo(\n () => ({\n isInitialized,\n isLoading: isFetchingProject || isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n writableFields,\n }),\n [\n isInitialized,\n isFetchingProject,\n isFetchingAttribs,\n projectInfo,\n projectName,\n users,\n attribFields,\n writableFields,\n ],\n )\n\n return <ProjectDataContext.Provider value={value}>{children}</ProjectDataContext.Provider>\n}\n\nexport const useProjectDataContext = () => {\n const context = useContext(ProjectDataContext)\n if (!context) {\n throw new Error('useProjectDataContext must be used within a ProjectDataProvider')\n }\n return context\n}\n"],"names":["ProjectDataContext","createContext","ProjectDataProvider","children","projectName","projectInfo","isSuccessProject","isFetchingProject","useGetProjectQuery","attribFields","writableFields","isSuccessAttribs","isFetchingAttribs","useAttributeFields","usersData","useGetUsersAssigneeQuery","users","isInitialized","value","useMemo","jsx","useProjectDataContext","context","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,MAAMA,IAAqBC,EAAmD,MAAS,GAO1EC,KAAsB,CAAC,EAAE,UAAAC,GAAU,aAAAC,QAA4C;AAEpF,QAAA;AAAA,IACJ,MAAMC;AAAA,IACN,WAAWC;AAAA,IACX,YAAYC;AAAA,EAAA,IACVC,EAAmB,EAAE,aAAAJ,EAAA,GAAe,EAAE,MAAM,CAACA,GAAa,GAExD;AAAA,IACJ,cAAAK;AAAA,IACA,gBAAAC;AAAA,IACA,WAAWC;AAAA,IACX,YAAYC;AAAA,EAAA,IACVC,EAAmB,EAAE,aAAAT,GAAa,GAGhC,EAAE,MAAMU,IAAY,CAAA,MAAOC,EAAyB,EAAE,aAAAX,KAAe,EAAE,MAAM,CAACA,GAAa,GAC3FY,IAAQF,GAERG,IACJX,KAAoBK,KAAoB,CAACJ,KAAqB,CAACK,GAE3DM,IAAQC;AAAA,IACZ,OAAO;AAAA,MACL,eAAAF;AAAA,MACA,WAAWV,KAAqBK;AAAA,MAChC,aAAAP;AAAA,MACA,aAAAD;AAAA,MACA,OAAAY;AAAA,MACA,cAAAP;AAAA,MACA,gBAAAC;AAAA,IAAA;AAAA,IAEF;AAAA,MACEO;AAAA,MACAV;AAAA,MACAK;AAAA,MACAP;AAAA,MACAD;AAAA,MACAY;AAAA,MACAP;AAAA,MACAC;AAAA,IAAA;AAAA,EAEJ;AAEA,SAAQU,gBAAAA,EAAAA,IAAApB,EAAmB,UAAnB,EAA4B,OAAAkB,GAAe,UAAAf,EAAS,CAAA;AAC9D,GAEakB,KAAwB,MAAM;AACnC,QAAAC,IAAUC,EAAWvB,CAAkB;AAC7C,MAAI,CAACsB;AACG,UAAA,IAAI,MAAM,iEAAiE;AAE5E,SAAAA;AACT;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("../../../../../_virtual/jsx-runtime.cjs.js"),t=require("react"),q=require("../utils/cellUtils.cjs.js"),Q=require("../ProjectTreeTable.cjs.js"),p=require("./SelectionCellsContext.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../util/pubsub.cjs.js");require("./ProjectTableQueriesContext.cjs.js");require("./ProjectTableContext.cjs.js");require("@ynput/ayon-react-components");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("./ClipboardContext.cjs.js");require("./CellEditingContext.cjs.js");require("@tanstack/react-table");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("axios");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("date-fns");require("./ColumnSettingsContext.cjs.js");require("./SelectedRowsContext.cjs.js");require("./DetailsPanelEntityContext.cjs.js");require("./ProjectDataContext.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/LinksManager/LinksManagerDialog.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../components/GroupSettingsFallback.cjs.js");const X=require("../hooks/useCheckSelectedCellsVisible.cjs.js"),Y=({children:F})=>{const[n,I]=t.useState(new Set),[f,d]=t.useState(null),[T,k]=t.useState(!1),[w,S]=t.useState(null),[g,z]=t.useState({rowIdToIndex:new Map,colIdToIndex:new Map,indexToRowId:new Map,indexToColId:new Map}),m=e=>JSON.stringify(Array.from(e.entries())),s=t.useMemo(()=>g,[m(g.rowIdToIndex),m(g.colIdToIndex),m(g.indexToRowId),m(g.indexToColId)]),O=t.useRef(!1),P=t.useMemo(()=>Array.from(n).filter(e=>{var r,u;return((r=q.parseCellId(e))==null?void 0:r.colId)===p.ROW_SELECTION_COLUMN_ID&&((u=q.parseCellId(e))==null?void 0:u.rowId)}).map(e=>{var r;return(r=q.parseCellId(e))==null?void 0:r.rowId}),[n]);X.useCheckSelectedCellsVisible({selectedCells:n,setSelectedCells:I,focusedCellId:f,setFocusedCellId:d});const _=t.useCallback((e,r)=>{const u=new Map,o=new Map,i=new Map,l=new Map;e.forEach((c,a)=>{u.set(c,a),i.set(a,c)}),r.forEach((c,a)=>{o.set(c,a),l.set(a,c)}),z({rowIdToIndex:u,colIdToIndex:o,indexToRowId:i,indexToColId:l})},[]),C=t.useCallback((e,r)=>{I(u=>{let o=new Set(e);if(r.colId!==p.ROW_SELECTION_COLUMN_ID&&r.colId!==Q.DRAG_HANDLE_COLUMN_ID){const i=Array.from(u).filter(l=>{var c;return((c=q.parseCellId(l))==null?void 0:c.colId)===p.ROW_SELECTION_COLUMN_ID});i.length&&(o=new Set([...o,...i]))}return o})},[]),M=t.useCallback((e,r,u)=>{u||C(new Set,e);const o=s.rowIdToIndex.get(e.rowId)??0,i=s.colIdToIndex.get(e.colId)??0,l=s.rowIdToIndex.get(r.rowId)??0,c=s.colIdToIndex.get(r.colId)??0,a=Math.min(o,l),x=Math.max(o,l),H=Math.min(i,c),J=Math.max(i,c),v=new Set(u?n:[]);for(let R=a;R<=x;R++){const G=s.indexToRowId.get(R);if(G)for(let b=H;b<=J;b++){const W=s.indexToColId.get(b);W&&v.add(q.getCellId(G,W))}}return v},[s,n,C]),E=t.useCallback((e,r)=>{const u=q.parseCellId(e);u&&(k(!0),O.current=n.has(e),r?I(o=>{const i=new Set(o);return i.has(e)?(i.delete(e),f===e&&(i.size>0?d(Array.from(i)[Array.from(i).length-1]):d(null))):(i.add(e),d(e),S(u)),i}):n.size===1&&n.has(e)&&[p.ROW_SELECTION_COLUMN_ID,"name"].includes(u.colId)?(I(new Set),S(null),d(null)):(C(new Set([e]),u),S(u),d(e)))},[n,f,C]),N=t.useCallback((e,r)=>{if(!T||!w)return;const u=q.parseCellId(e);if(u)if(r)I(o=>{const i=new Set(o);return q.parseCellId(e)&&(O.current?i.delete(e):i.add(e)),i});else{const o=M(w,u,!1);C(o,u)}},[T,w,M,C]),L=t.useCallback(()=>{k(!1)},[]),y=t.useCallback((e,r,u)=>{const o=q.parseCellId(e);if(o)if(u&&w){const i=M(w,o,r);C(i,o)}else r?I(i=>{const l=new Set(i);return l.has(e)?l.delete(e):l.add(e),l}):(C(new Set([e]),o),S(o))},[w,M,C]),A=t.useCallback(e=>{d(e)},[]),B=t.useCallback(()=>{I(new Set),S(null),d(null)},[]),h=t.useCallback(e=>n.has(e),[n]),D=t.useCallback(e=>e===f,[f]),U=t.useCallback(e=>q.parseCellId(e),[]),j=t.useCallback(e=>{if(!h(e))return[];const r=q.parseCellId(e);if(!r)return[];const u=s.rowIdToIndex.get(r.rowId),o=s.colIdToIndex.get(r.colId);if(u===void 0||o===void 0)return[];const i=s.indexToRowId.get(u-1),l=s.indexToColId.get(o+1),c=s.indexToRowId.get(u+1),a=s.indexToColId.get(o-1);let x=q.BorderPosition.None;return(!i||!n.has(q.getCellId(i,r.colId)))&&(x|=q.BorderPosition.Top),(!l||!n.has(q.getCellId(r.rowId,l)))&&(x|=q.BorderPosition.Right),(!c||!n.has(q.getCellId(c,r.colId)))&&(x|=q.BorderPosition.Bottom),(!a||!n.has(q.getCellId(r.rowId,a)))&&(x|=q.BorderPosition.Left),q.getBorderClasses(x)},[n,s,h]),V=t.useMemo(()=>({selectedCells:n,selectedRows:P,focusedCellId:f,selectionInProgress:T,anchorCell:w,gridMap:s,setSelectedCells:I,setFocusedCellId:d,setAnchorCell:S,registerGrid:_,selectCell:y,startSelection:E,extendSelection:N,endSelection:L,focusCell:A,clearSelection:B,isCellSelected:h,isCellFocused:D,getCellPositionFromId:U,getCellBorderClasses:j}),[n,P,f,T,w,s,I,d,S,_,y,E,N,L,A,B,h,D,U,j]);return K.jsxRuntimeExports.jsx(p.SelectionCellsContext.Provider,{value:V,children:F})};exports.SelectionCellsProvider=Y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const K=require("../../../../../_virtual/jsx-runtime.cjs.js"),t=require("react"),q=require("../utils/cellUtils.cjs.js"),Q=require("../ProjectTreeTable.cjs.js"),p=require("./SelectionCellsContext.cjs.js");require("lodash");require("react-toastify");require("uuid");require("../../../util/pubsub.cjs.js");require("./ProjectTableQueriesContext.cjs.js");require("./ProjectTableContext.cjs.js");require("@ynput/ayon-react-components");;/* empty css */require("clsx");require("../../ContextMenu/ContextMenuContext.cjs.js");require("./ClipboardContext.cjs.js");require("./CellEditingContext.cjs.js");require("@tanstack/react-table");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("axios");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("date-fns");require("./ColumnSettingsContext.cjs.js");require("./SelectedRowsContext.cjs.js");require("./DetailsPanelEntityContext.cjs.js");require("./ProjectDataContext.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../../DetailsPanel/FeedFilters/FeedFilters.styled.cjs.js");require("../../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredPowerpackVersion.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");require("../../../components/DetailsMetaData/DetailsMetaData.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("../../../components/LinksManager/LinksManagerDialog.cjs.js");require("../ProjectTreeTable.styled.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");require("../components/GroupSettingsFallback.cjs.js");const X=require("../hooks/useCheckSelectedCellsVisible.cjs.js"),Y=({children:F})=>{const[n,I]=t.useState(new Set),[f,d]=t.useState(null),[T,k]=t.useState(!1),[w,S]=t.useState(null),[g,z]=t.useState({rowIdToIndex:new Map,colIdToIndex:new Map,indexToRowId:new Map,indexToColId:new Map}),m=e=>JSON.stringify(Array.from(e.entries())),s=t.useMemo(()=>g,[m(g.rowIdToIndex),m(g.colIdToIndex),m(g.indexToRowId),m(g.indexToColId)]),O=t.useRef(!1),P=t.useMemo(()=>Array.from(n).filter(e=>{var r,u;return((r=q.parseCellId(e))==null?void 0:r.colId)===p.ROW_SELECTION_COLUMN_ID&&((u=q.parseCellId(e))==null?void 0:u.rowId)}).map(e=>{var r;return(r=q.parseCellId(e))==null?void 0:r.rowId}),[n]);X.useCheckSelectedCellsVisible({selectedCells:n,setSelectedCells:I,focusedCellId:f,setFocusedCellId:d});const _=t.useCallback((e,r)=>{const u=new Map,o=new Map,i=new Map,l=new Map;e.forEach((c,a)=>{u.set(c,a),i.set(a,c)}),r.forEach((c,a)=>{o.set(c,a),l.set(a,c)}),z({rowIdToIndex:u,colIdToIndex:o,indexToRowId:i,indexToColId:l})},[]),C=t.useCallback((e,r)=>{I(u=>{let o=new Set(e);if(r.colId!==p.ROW_SELECTION_COLUMN_ID&&r.colId!==Q.DRAG_HANDLE_COLUMN_ID){const i=Array.from(u).filter(l=>{var c;return((c=q.parseCellId(l))==null?void 0:c.colId)===p.ROW_SELECTION_COLUMN_ID});i.length&&(o=new Set([...o,...i]))}return o})},[]),M=t.useCallback((e,r,u)=>{u||C(new Set,e);const o=s.rowIdToIndex.get(e.rowId)??0,i=s.colIdToIndex.get(e.colId)??0,l=s.rowIdToIndex.get(r.rowId)??0,c=s.colIdToIndex.get(r.colId)??0,a=Math.min(o,l),x=Math.max(o,l),H=Math.min(i,c),J=Math.max(i,c),v=new Set(u?n:[]);for(let R=a;R<=x;R++){const G=s.indexToRowId.get(R);if(G)for(let b=H;b<=J;b++){const W=s.indexToColId.get(b);W&&v.add(q.getCellId(G,W))}}return v},[s,n,C]),E=t.useCallback((e,r)=>{const u=q.parseCellId(e);u&&(k(!0),O.current=n.has(e),r?I(o=>{const i=new Set(o);return i.has(e)?(i.delete(e),f===e&&(i.size>0?d(Array.from(i)[Array.from(i).length-1]):d(null))):(i.add(e),d(e),S(u)),i}):n.size===1&&n.has(e)&&[p.ROW_SELECTION_COLUMN_ID,"name"].includes(u.colId)?(I(new Set),S(null),d(null)):(C(new Set([e]),u),S(u),d(e)))},[n,f,C]),N=t.useCallback((e,r)=>{if(!T||!w)return;const u=q.parseCellId(e);if(u)if(r)I(o=>{const i=new Set(o);return q.parseCellId(e)&&(O.current?i.delete(e):i.add(e)),i});else{const o=M(w,u,!1);C(o,u)}},[T,w,M,C]),L=t.useCallback(()=>{k(!1)},[]),y=t.useCallback((e,r,u)=>{const o=q.parseCellId(e);if(o)if(u&&w){const i=M(w,o,r);C(i,o)}else r?I(i=>{const l=new Set(i);return l.has(e)?l.delete(e):l.add(e),l}):(C(new Set([e]),o),S(o))},[w,M,C]),A=t.useCallback(e=>{d(e)},[]),B=t.useCallback(()=>{I(new Set),S(null),d(null)},[]),h=t.useCallback(e=>n.has(e),[n]),D=t.useCallback(e=>e===f,[f]),U=t.useCallback(e=>q.parseCellId(e),[]),j=t.useCallback(e=>{if(!h(e))return[];const r=q.parseCellId(e);if(!r)return[];const u=s.rowIdToIndex.get(r.rowId),o=s.colIdToIndex.get(r.colId);if(u===void 0||o===void 0)return[];const i=s.indexToRowId.get(u-1),l=s.indexToColId.get(o+1),c=s.indexToRowId.get(u+1),a=s.indexToColId.get(o-1);let x=q.BorderPosition.None;return(!i||!n.has(q.getCellId(i,r.colId)))&&(x|=q.BorderPosition.Top),(!l||!n.has(q.getCellId(r.rowId,l)))&&(x|=q.BorderPosition.Right),(!c||!n.has(q.getCellId(c,r.colId)))&&(x|=q.BorderPosition.Bottom),(!a||!n.has(q.getCellId(r.rowId,a)))&&(x|=q.BorderPosition.Left),q.getBorderClasses(x)},[n,s,h]),V=t.useMemo(()=>({selectedCells:n,selectedRows:P,focusedCellId:f,selectionInProgress:T,anchorCell:w,gridMap:s,setSelectedCells:I,setFocusedCellId:d,setAnchorCell:S,registerGrid:_,selectCell:y,startSelection:E,extendSelection:N,endSelection:L,focusCell:A,clearSelection:B,isCellSelected:h,isCellFocused:D,getCellPositionFromId:U,getCellBorderClasses:j}),[n,P,f,T,w,s,I,d,S,_,y,E,N,L,A,B,h,D,U,j]);return K.jsxRuntimeExports.jsx(p.SelectionCellsContext.Provider,{value:V,children:F})};exports.SelectionCellsProvider=Y;
2
2
  //# sourceMappingURL=SelectionCellsProvider.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionCellsProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo, ReactNode, useRef } from 'react'\nimport {\n CellId,\n RowId,\n ColId,\n CellPosition,\n getCellId,\n parseCellId,\n BorderPosition,\n getBorderClasses,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { SelectionCellsContext, GridMap, ROW_SELECTION_COLUMN_ID } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n // For normal cells, use the range selection behavior\n const newSelection = selectCellRange(anchorCell, currentPosition, false)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":"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"}
1
+ {"version":3,"file":"SelectionCellsProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/SelectionCellsProvider.tsx"],"sourcesContent":["import React, { useState, useCallback, useMemo, ReactNode, useRef } from 'react'\nimport {\n CellId,\n RowId,\n ColId,\n CellPosition,\n getCellId,\n parseCellId,\n BorderPosition,\n getBorderClasses,\n} from '../utils/cellUtils'\nimport { DRAG_HANDLE_COLUMN_ID } from '../ProjectTreeTable'\nimport { SelectionCellsContext, GridMap, ROW_SELECTION_COLUMN_ID } from './SelectionCellsContext'\nimport { useCheckSelectedCellsVisible } from '../hooks'\n\nexport const SelectionCellsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [selectedCells, setSelectedCells] = useState<Set<CellId>>(new Set())\n const [focusedCellId, setFocusedCellId] = useState<CellId | null>(null)\n const [selectionInProgress, setSelectionInProgress] = useState<boolean>(false)\n const [anchorCell, setAnchorCell] = useState<CellPosition | null>(null)\n const [gridMap, setGridMap] = useState<GridMap>({\n rowIdToIndex: new Map(),\n colIdToIndex: new Map(),\n indexToRowId: new Map(),\n indexToColId: new Map(),\n })\n const mapToString = (map: Map<any, any>) => {\n return JSON.stringify(Array.from(map.entries()))\n }\n\n const stableGridMap = useMemo(\n () => gridMap,\n [\n mapToString(gridMap.rowIdToIndex),\n mapToString(gridMap.colIdToIndex),\n mapToString(gridMap.indexToRowId),\n mapToString(gridMap.indexToColId),\n ],\n )\n // Track whether we're selecting or unselecting during drag\n const initialCellSelected = useRef<boolean>(false)\n\n const selectedRows = useMemo(\n () =>\n Array.from(selectedCells)\n .filter(\n (cellId) =>\n parseCellId(cellId)?.colId === ROW_SELECTION_COLUMN_ID && parseCellId(cellId)?.rowId,\n )\n .map((cellId) => parseCellId(cellId)?.rowId) as string[],\n [selectedCells],\n )\n\n useCheckSelectedCellsVisible({\n selectedCells,\n setSelectedCells,\n focusedCellId,\n setFocusedCellId,\n })\n\n // Register grid structure for range selections\n const registerGrid = useCallback((rows: RowId[], columns: ColId[]) => {\n const rowIdToIndex = new Map<RowId, number>()\n const colIdToIndex = new Map<ColId, number>()\n const indexToRowId = new Map<number, RowId>()\n const indexToColId = new Map<number, ColId>()\n\n rows.forEach((rowId, index) => {\n rowIdToIndex.set(rowId, index)\n indexToRowId.set(index, rowId)\n })\n\n columns.forEach((colId, index) => {\n colIdToIndex.set(colId, index)\n indexToColId.set(index, colId)\n })\n\n setGridMap({ rowIdToIndex, colIdToIndex, indexToRowId, indexToColId })\n }, [])\n\n // update the selection whilst properly handling the row-selection column\n const updateSelection = useCallback((selection: Set<CellId>, position: CellPosition) => {\n setSelectedCells((prevSelectedCells) => {\n let newSelection = new Set(selection)\n if (position.colId !== ROW_SELECTION_COLUMN_ID && position.colId !== DRAG_HANDLE_COLUMN_ID) {\n const rowSelection = Array.from(prevSelectedCells).filter(\n (id) => parseCellId(id)?.colId === ROW_SELECTION_COLUMN_ID,\n )\n if (rowSelection.length) {\n newSelection = new Set([...newSelection, ...rowSelection])\n }\n }\n return newSelection\n })\n }, [])\n\n // Select cells between two points in the grid\n const selectCellRange = useCallback(\n (start: CellPosition, end: CellPosition, additive: boolean): Set<CellId> => {\n if (!additive) {\n // Clear existing selection if not additive\n updateSelection(new Set(), start)\n }\n\n const startRowIdx = stableGridMap.rowIdToIndex.get(start.rowId) ?? 0\n const startColIdx = stableGridMap.colIdToIndex.get(start.colId) ?? 0\n const endRowIdx = stableGridMap.rowIdToIndex.get(end.rowId) ?? 0\n const endColIdx = stableGridMap.colIdToIndex.get(end.colId) ?? 0\n\n const minRowIdx = Math.min(startRowIdx, endRowIdx)\n const maxRowIdx = Math.max(startRowIdx, endRowIdx)\n const minColIdx = Math.min(startColIdx, endColIdx)\n const maxColIdx = Math.max(startColIdx, endColIdx)\n\n const newSelection = new Set(additive ? selectedCells : [])\n\n for (let r = minRowIdx; r <= maxRowIdx; r++) {\n const rowId = stableGridMap.indexToRowId.get(r)\n if (!rowId) continue\n\n for (let c = minColIdx; c <= maxColIdx; c++) {\n const colId = stableGridMap.indexToColId.get(c)\n if (!colId) continue\n\n newSelection.add(getCellId(rowId, colId))\n }\n }\n\n return newSelection\n },\n [stableGridMap, selectedCells, updateSelection],\n )\n\n // Start a selection operation\n const startSelection = useCallback(\n (cellId: CellId, additive: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n setSelectionInProgress(true)\n // Store whether the initial cell was selected to determine drag behavior\n initialCellSelected.current = selectedCells.has(cellId)\n\n if (additive) {\n // Toggle this cell in multi-select mode\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n // If this was the focused cell, set focus to another cell in the selection or null\n if (focusedCellId === cellId) {\n if (newSelection.size > 0) {\n setFocusedCellId(Array.from(newSelection)[Array.from(newSelection).length - 1])\n } else {\n setFocusedCellId(null)\n }\n }\n } else {\n newSelection.add(cellId)\n setFocusedCellId(cellId)\n setAnchorCell(position)\n }\n return newSelection\n })\n } else {\n // Single cell selection\n // If this cell is already the only selected cell, deselect it\n // and it is from name column\n if (\n selectedCells.size === 1 &&\n selectedCells.has(cellId) &&\n [ROW_SELECTION_COLUMN_ID, 'name'].includes(position.colId)\n ) {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n } else {\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n setFocusedCellId(cellId)\n }\n }\n },\n [selectedCells, focusedCellId, updateSelection],\n )\n\n // Extend the current selection during drag\n const extendSelection = useCallback(\n (cellId: CellId, isRowSelectionColumn?: boolean) => {\n if (!selectionInProgress || !anchorCell) return\n\n const currentPosition = parseCellId(cellId)\n if (!currentPosition) return\n\n if (isRowSelectionColumn) {\n // Handle row selection column differently during drag\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n const position = parseCellId(cellId)\n\n if (!position) return newSelection\n\n // We're either selecting or unselecting based on the initial cell's state\n if (initialCellSelected.current) {\n // If we started on a selected cell, we're removing cells during drag\n newSelection.delete(cellId)\n } else {\n // If we started on an unselected cell, we're adding cells during drag\n newSelection.add(cellId)\n }\n\n return newSelection\n })\n } else {\n // For normal cells, use the range selection behavior\n const newSelection = selectCellRange(anchorCell, currentPosition, false)\n updateSelection(newSelection, currentPosition)\n }\n },\n [selectionInProgress, anchorCell, selectCellRange, updateSelection],\n )\n\n // End a selection operation\n const endSelection = useCallback(() => {\n setSelectionInProgress(false)\n }, [])\n\n // Select a cell (click or programmatically)\n const selectCell = useCallback(\n (cellId: CellId, additive: boolean, range: boolean) => {\n const position = parseCellId(cellId)\n if (!position) return\n\n if (range && anchorCell) {\n // Shift+click for range selection - select cells between anchor and current\n const newSelection = selectCellRange(anchorCell, position, additive)\n updateSelection(newSelection, position)\n } else if (additive) {\n // Ctrl/Cmd+click for toggling selection\n setSelectedCells((prev) => {\n const newSelection = new Set(prev)\n if (newSelection.has(cellId)) {\n newSelection.delete(cellId)\n } else {\n newSelection.add(cellId)\n }\n return newSelection\n })\n } else {\n // Normal click - select just this cell and set as new anchor\n updateSelection(new Set([cellId]), position)\n setAnchorCell(position)\n }\n },\n [anchorCell, selectCellRange, updateSelection],\n )\n\n // Focus a cell without changing selection\n const focusCell = useCallback((cellId: CellId | null) => {\n setFocusedCellId(cellId)\n }, [])\n\n // Clear all selections\n const clearSelection = useCallback(() => {\n setSelectedCells(new Set())\n setAnchorCell(null)\n setFocusedCellId(null)\n }, [])\n\n // Check if a cell is selected\n const isCellSelected = useCallback((cellId: CellId) => selectedCells.has(cellId), [selectedCells])\n\n // Check if a cell is focused\n const isCellFocused = useCallback((cellId: CellId) => cellId === focusedCellId, [focusedCellId])\n\n // Get position from cell ID - using shared utility\n const getCellPositionFromId = useCallback((cellId: CellId) => parseCellId(cellId), [])\n\n // Get border classes for a cell based on its selection state and neighbors\n const getCellBorderClasses = useCallback(\n (cellId: CellId): string[] => {\n if (!isCellSelected(cellId)) return []\n\n const position = parseCellId(cellId)\n if (!position) return []\n\n const rowIndex = stableGridMap.rowIdToIndex.get(position.rowId)\n const colIndex = stableGridMap.colIdToIndex.get(position.colId)\n\n if (rowIndex === undefined || colIndex === undefined) return []\n\n // Check if the cell's neighbors in all four directions are selected\n const top = stableGridMap.indexToRowId.get(rowIndex - 1)\n const right = stableGridMap.indexToColId.get(colIndex + 1)\n const bottom = stableGridMap.indexToRowId.get(rowIndex + 1)\n const left = stableGridMap.indexToColId.get(colIndex - 1)\n\n // Default to no borders\n let borderPos = BorderPosition.None\n\n // Top edge check: show border if we're at the top of the grid or the cell above is not selected\n if (!top || !selectedCells.has(getCellId(top, position.colId))) {\n borderPos |= BorderPosition.Top\n }\n\n // Right edge check: show border if we're at the right edge of the grid or the cell to the right is not selected\n if (!right || !selectedCells.has(getCellId(position.rowId, right))) {\n borderPos |= BorderPosition.Right\n }\n\n // Bottom edge check: show border if we're at the bottom of the grid or the cell below is not selected\n if (!bottom || !selectedCells.has(getCellId(bottom, position.colId))) {\n borderPos |= BorderPosition.Bottom\n }\n\n // Left edge check: show border if we're at the left edge of the grid or the cell to the left is not selected\n if (!left || !selectedCells.has(getCellId(position.rowId, left))) {\n borderPos |= BorderPosition.Left\n }\n\n return getBorderClasses(borderPos)\n },\n [selectedCells, stableGridMap, isCellSelected],\n )\n\n // Memoize context value to prevent unnecessary re-renders\n const value = useMemo(\n () => ({\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n gridMap: stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n }),\n [\n selectedCells,\n selectedRows,\n focusedCellId,\n selectionInProgress,\n anchorCell,\n stableGridMap,\n setSelectedCells,\n setFocusedCellId,\n setAnchorCell,\n registerGrid,\n selectCell,\n startSelection,\n extendSelection,\n endSelection,\n focusCell,\n clearSelection,\n isCellSelected,\n isCellFocused,\n getCellPositionFromId,\n getCellBorderClasses,\n ],\n )\n\n return <SelectionCellsContext.Provider value={value}>{children}</SelectionCellsContext.Provider>\n}\n"],"names":["SelectionCellsProvider","children","selectedCells","setSelectedCells","useState","focusedCellId","setFocusedCellId","selectionInProgress","setSelectionInProgress","anchorCell","setAnchorCell","gridMap","setGridMap","mapToString","map","stableGridMap","useMemo","initialCellSelected","useRef","selectedRows","cellId","parseCellId","ROW_SELECTION_COLUMN_ID","useCheckSelectedCellsVisible","registerGrid","useCallback","rows","columns","rowIdToIndex","colIdToIndex","indexToRowId","indexToColId","rowId","index","colId","updateSelection","selection","position","prevSelectedCells","newSelection","DRAG_HANDLE_COLUMN_ID","rowSelection","id","selectCellRange","start","end","additive","startRowIdx","startColIdx","endRowIdx","endColIdx","minRowIdx","maxRowIdx","minColIdx","maxColIdx","r","c","getCellId","startSelection","prev","extendSelection","isRowSelectionColumn","currentPosition","endSelection","selectCell","range","focusCell","clearSelection","isCellSelected","isCellFocused","getCellPositionFromId","getCellBorderClasses","rowIndex","colIndex","top","right","bottom","left","borderPos","BorderPosition","getBorderClasses","value","jsx","SelectionCellsContext"],"mappings":"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"}