@ynput/ayon-frontend-shared 0.2.36 → 0.2.38

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 (640) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +68 -66
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +182 -167
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/Views.cjs.js +1 -1
  8. package/dist/Views.cjs.js.map +1 -1
  9. package/dist/Views.es.js +25 -24
  10. package/dist/Views.es.js.map +1 -1
  11. package/dist/_virtual/index.cjs10.js +1 -1
  12. package/dist/_virtual/index.cjs11.js +1 -1
  13. package/dist/_virtual/index.cjs12.js +1 -1
  14. package/dist/_virtual/index.cjs2.js +1 -1
  15. package/dist/_virtual/index.cjs3.js +1 -1
  16. package/dist/_virtual/index.cjs5.js +1 -1
  17. package/dist/_virtual/index.es10.js +3 -3
  18. package/dist/_virtual/index.es11.js +5 -5
  19. package/dist/_virtual/index.es12.js +5 -5
  20. package/dist/_virtual/index.es2.js +2 -5
  21. package/dist/_virtual/index.es2.js.map +1 -1
  22. package/dist/_virtual/index.es3.js +5 -2
  23. package/dist/_virtual/index.es3.js.map +1 -1
  24. package/dist/_virtual/index.es4.js +2 -2
  25. package/dist/_virtual/index.es5.js +2 -2
  26. package/dist/api.cjs.js +1 -1
  27. package/dist/api.es.js +107 -106
  28. package/dist/components.cjs.js +1 -1
  29. package/dist/components.es.js +135 -133
  30. package/dist/components.es.js.map +1 -1
  31. package/dist/context.cjs.js +1 -1
  32. package/dist/context.es.js +32 -26
  33. package/dist/context.es.js.map +1 -1
  34. package/dist/index.cjs.js +1 -1
  35. package/dist/index.es.js +54 -52
  36. package/dist/index.es.js.map +1 -1
  37. package/dist/node_modules/react-use-websocket/dist/index.cjs.js +1 -1
  38. package/dist/node_modules/react-use-websocket/dist/index.es.js +1 -1
  39. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  40. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  41. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  42. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  43. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  44. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  45. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  46. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  47. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  48. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  49. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  50. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  51. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  52. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  53. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  54. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  55. package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
  56. package/dist/shared/src/api/generated/actions.es.js.map +1 -1
  57. package/dist/shared/src/api/generated/attributes.cjs.js.map +1 -1
  58. package/dist/shared/src/api/generated/attributes.es.js.map +1 -1
  59. package/dist/shared/src/api/generated/authentication.cjs.js.map +1 -1
  60. package/dist/shared/src/api/generated/authentication.es.js.map +1 -1
  61. package/dist/shared/src/api/generated/configuration.cjs.js.map +1 -1
  62. package/dist/shared/src/api/generated/configuration.es.js.map +1 -1
  63. package/dist/shared/src/api/generated/entityLists.cjs.js +1 -1
  64. package/dist/shared/src/api/generated/entityLists.cjs.js.map +1 -1
  65. package/dist/shared/src/api/generated/entityLists.es.js +88 -84
  66. package/dist/shared/src/api/generated/entityLists.es.js.map +1 -1
  67. package/dist/shared/src/api/generated/graphql.cjs.js +22 -20
  68. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  69. package/dist/shared/src/api/generated/graphql.es.js +34 -32
  70. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  71. package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
  72. package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
  73. package/dist/shared/src/api/generated/onboarding.cjs.js.map +1 -1
  74. package/dist/shared/src/api/generated/onboarding.es.js.map +1 -1
  75. package/dist/shared/src/api/generated/products.cjs.js.map +1 -1
  76. package/dist/shared/src/api/generated/products.es.js.map +1 -1
  77. package/dist/shared/src/api/generated/projects.cjs.js.map +1 -1
  78. package/dist/shared/src/api/generated/projects.es.js.map +1 -1
  79. package/dist/shared/src/api/generated/system.cjs.js +1 -1
  80. package/dist/shared/src/api/generated/system.cjs.js.map +1 -1
  81. package/dist/shared/src/api/generated/system.es.js +3 -0
  82. package/dist/shared/src/api/generated/system.es.js.map +1 -1
  83. package/dist/shared/src/api/generated/users.cjs.js.map +1 -1
  84. package/dist/shared/src/api/generated/users.es.js.map +1 -1
  85. package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
  86. package/dist/shared/src/api/generated/views.es.js.map +1 -1
  87. package/dist/shared/src/api/generated/ynputCloud.cjs.js +1 -1
  88. package/dist/shared/src/api/generated/ynputCloud.cjs.js.map +1 -1
  89. package/dist/shared/src/api/generated/ynputCloud.es.js +6 -1
  90. package/dist/shared/src/api/generated/ynputCloud.es.js.map +1 -1
  91. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
  92. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  93. package/dist/shared/src/api/queries/project/getProject.es.js +7 -1
  94. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  95. package/dist/shared/src/api/queries/system/getSystem.cjs.js.map +1 -1
  96. package/dist/shared/src/api/queries/system/getSystem.es.js.map +1 -1
  97. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
  98. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  99. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +73 -67
  100. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  101. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  102. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  103. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  104. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  105. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +131 -114
  106. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  107. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  108. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  109. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +129 -122
  110. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  111. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  112. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  113. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +4 -2
  114. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  115. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  116. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  117. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +4 -2
  118. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  119. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +2 -2
  120. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  121. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +61 -50
  122. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  123. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  124. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  125. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +6 -4
  126. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  127. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  128. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  129. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +70 -68
  130. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  131. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  132. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  133. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +7 -5
  134. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  135. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  136. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  137. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +119 -112
  138. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  139. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  140. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  141. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +106 -105
  142. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  143. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  144. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  145. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +54 -52
  146. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  147. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  148. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  149. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +58 -46
  150. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  151. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  152. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  153. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +11 -9
  154. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  155. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  156. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  157. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +45 -43
  158. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  159. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +2 -2
  160. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  161. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +79 -77
  162. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  163. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  164. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  165. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +44 -42
  166. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  167. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +2 -0
  168. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +1 -0
  169. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +263 -0
  170. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +1 -0
  171. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +2 -2
  172. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  173. package/dist/shared/src/components/RenameForm/RenameForm.es.js +66 -64
  174. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  175. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  176. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  177. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +140 -142
  178. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  179. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  180. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  181. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +50 -48
  182. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  183. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  184. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  185. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +49 -47
  186. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  187. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js +1 -1
  188. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.cjs.js.map +1 -1
  189. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.es.js +19 -27
  190. package/dist/shared/src/components/ReviewablesList/getGroupedReviewables.es.js.map +1 -1
  191. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  192. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  193. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +321 -258
  194. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  195. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +1 -1
  196. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  197. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +27 -25
  198. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  199. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  200. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  201. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +48 -46
  202. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  203. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +1 -1
  204. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  205. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +9 -7
  206. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  207. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +6 -6
  208. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  209. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +109 -112
  210. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  211. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  212. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  213. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +22 -23
  214. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  215. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  216. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  217. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +49 -47
  218. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  219. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  220. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  221. package/dist/shared/src/containers/Actions/Actions.es.js +4 -2
  222. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  223. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  224. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  225. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +50 -48
  226. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  227. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  228. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  229. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +162 -160
  230. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  231. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  232. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  233. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +58 -56
  234. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  235. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  236. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  237. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +112 -103
  238. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  239. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  240. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  241. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +88 -86
  242. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  243. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  244. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  245. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +4 -2
  246. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  247. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  248. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  249. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +19 -17
  250. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  251. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -1
  252. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  253. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +36 -32
  254. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  255. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js +1 -1
  256. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.cjs.js.map +1 -1
  257. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js +25 -22
  258. package/dist/shared/src/containers/DetailsPanel/helpers/mergeProjectInfo.es.js.map +1 -1
  259. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  260. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  261. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +17 -15
  262. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  263. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  264. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  265. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +45 -43
  266. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  267. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  268. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  269. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +49 -47
  270. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  271. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  272. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  273. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +49 -47
  274. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  275. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  276. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  277. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +49 -47
  278. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  279. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  280. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  281. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +45 -46
  282. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  283. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  284. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  285. package/dist/shared/src/containers/Feed/Feed.es.js +5 -3
  286. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  287. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  288. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  289. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +4 -2
  290. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  291. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  292. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  293. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +9 -7
  294. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  295. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
  296. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +110 -108
  298. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  300. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +4 -2
  302. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  304. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  305. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +10 -8
  306. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  307. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  308. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  309. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +13 -11
  310. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  311. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  312. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  313. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +42 -41
  314. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  315. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  316. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  317. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +46 -42
  318. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  319. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js +1 -1
  320. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.cjs.js.map +1 -1
  321. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js +11 -9
  322. package/dist/shared/src/containers/Feed/mentionHelpers/getMentionVersions.es.js.map +1 -1
  323. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  324. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  325. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +335 -329
  326. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  327. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  328. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  329. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +54 -52
  330. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  331. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +1 -1
  332. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  333. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +43 -41
  334. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  335. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  336. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  337. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +53 -51
  338. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  339. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  340. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  341. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +51 -49
  342. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  343. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
  344. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  345. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +235 -214
  346. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  347. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  348. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  349. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +45 -40
  350. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  351. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  352. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  354. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +160 -156
  356. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  358. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +59 -57
  360. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  361. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  362. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +26 -90
  364. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  366. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  367. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +69 -69
  368. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  369. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  370. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +111 -111
  372. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  374. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +58 -57
  376. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  379. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +51 -49
  380. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  382. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  383. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +60 -53
  384. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  385. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  386. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +4 -2
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js +1 -1
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.cjs.js.map +1 -1
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js +15 -20
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetEntityTypeData.es.js.map +1 -1
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +68 -66
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +63 -59
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  401. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  402. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  403. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +51 -49
  404. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  405. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  406. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +52 -50
  408. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  409. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  410. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  411. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +67 -65
  412. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  413. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js +1 -1
  414. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.cjs.js.map +1 -1
  415. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.es.js +4 -4
  416. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePrefetchFolderTasks.es.js.map +1 -1
  417. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  418. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  419. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +55 -53
  420. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  421. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  422. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  423. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +130 -116
  424. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  425. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  426. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  427. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +58 -56
  428. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  429. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js +1 -1
  430. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.cjs.js.map +1 -1
  431. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js +26 -34
  432. package/dist/shared/src/containers/ProjectTreeTable/utils/getTableFieldOptions.es.js.map +1 -1
  433. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  434. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  435. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +122 -233
  436. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  437. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  438. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  439. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +64 -62
  440. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  442. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  443. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +47 -45
  444. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  445. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js +3 -3
  446. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.cjs.js.map +1 -1
  447. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js +58 -62
  448. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidget.es.js.map +1 -1
  449. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  450. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  451. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +114 -112
  452. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  453. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  454. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  455. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +49 -47
  456. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  457. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  458. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  459. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +4 -2
  460. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  461. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +2 -2
  462. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  463. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +8 -6
  464. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  465. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  466. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  467. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +100 -94
  468. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  469. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  470. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  471. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +4 -2
  472. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  473. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  474. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  475. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +4 -2
  476. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  477. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js +1 -1
  478. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -1
  479. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +9 -9
  480. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -1
  481. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  482. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  483. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +40 -35
  484. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  485. package/dist/shared/src/context/AddonProjectContext.cjs.js +1 -1
  486. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  487. package/dist/shared/src/context/AddonProjectContext.es.js +8 -7
  488. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  489. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  490. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  491. package/dist/shared/src/context/DetailsPanelContext.es.js +76 -76
  492. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  493. package/dist/shared/src/context/GlobalContext.cjs.js +2 -0
  494. package/dist/shared/src/context/GlobalContext.cjs.js.map +1 -0
  495. package/dist/shared/src/context/GlobalContext.es.js +123 -0
  496. package/dist/shared/src/context/GlobalContext.es.js.map +1 -0
  497. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  498. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  499. package/dist/shared/src/context/PowerpackContext.es.js +8 -6
  500. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  501. package/dist/shared/src/context/ProjectContext.cjs.js +2 -0
  502. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -0
  503. package/dist/shared/src/context/ProjectContext.es.js +182 -0
  504. package/dist/shared/src/context/ProjectContext.es.js.map +1 -0
  505. package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
  506. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  507. package/dist/shared/src/context/RemoteModulesContext.es.js +35 -34
  508. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  509. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  510. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  511. package/dist/shared/src/context/WebsocketContext.es.js +48 -46
  512. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  513. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  514. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  515. package/dist/shared/src/hooks/useEntityUpdate.es.js +4 -2
  516. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  517. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js +1 -1
  518. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js.map +1 -1
  519. package/dist/shared/src/hooks/useGetEntityGroups.es.js +6 -5
  520. package/dist/shared/src/hooks/useGetEntityGroups.es.js.map +1 -1
  521. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  522. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  523. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +4 -2
  524. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  525. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  526. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  527. package/dist/shared/src/hooks/useUserProjectConfig.es.js +27 -12
  528. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  529. package/dist/shared/src/util/versionUploadHelpers.cjs.js +1 -1
  530. package/dist/shared/src/util/versionUploadHelpers.cjs.js.map +1 -1
  531. package/dist/shared/src/util/versionUploadHelpers.es.js +24 -34
  532. package/dist/shared/src/util/versionUploadHelpers.es.js.map +1 -1
  533. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +1 -1
  534. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +1 -1
  535. package/dist/src/components/Menu/MenuComponents/Menu.es.js +4 -2
  536. package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +1 -1
  537. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +1 -1
  538. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +1 -1
  539. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js +7 -5
  540. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +1 -1
  541. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +1 -1
  542. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +1 -1
  543. package/dist/src/components/Menu/MenuComponents/MenuList.es.js +18 -16
  544. package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +1 -1
  545. package/dist/types/api/generated/actions.d.ts +2 -0
  546. package/dist/types/api/generated/attributes.d.ts +20 -5
  547. package/dist/types/api/generated/authentication.d.ts +2 -0
  548. package/dist/types/api/generated/configuration.d.ts +3 -1
  549. package/dist/types/api/generated/entityLists.d.ts +22 -5
  550. package/dist/types/api/generated/enums.d.ts +36 -0
  551. package/dist/types/api/generated/graphql.d.ts +9 -2
  552. package/dist/types/api/generated/graphqlLinks.d.ts +3 -0
  553. package/dist/types/api/generated/onboarding.d.ts +1 -0
  554. package/dist/types/api/generated/products.d.ts +9 -3
  555. package/dist/types/api/generated/projects.d.ts +4 -4
  556. package/dist/types/api/generated/system.d.ts +27 -5
  557. package/dist/types/api/generated/users.d.ts +2 -0
  558. package/dist/types/api/generated/views.d.ts +40 -5
  559. package/dist/types/api/generated/ynputCloud.d.ts +7 -20
  560. package/dist/types/api/queries/actions/getActions.d.ts +6 -6
  561. package/dist/types/api/queries/activities/getActivities.d.ts +10 -8
  562. package/dist/types/api/queries/activities/getCategories.d.ts +2 -2
  563. package/dist/types/api/queries/activities/getMentions.d.ts +2 -2
  564. package/dist/types/api/queries/activities/updateActivities.d.ts +4 -0
  565. package/dist/types/api/queries/addons/getAddons.d.ts +8 -8
  566. package/dist/types/api/queries/attributes/getAttributes.d.ts +4 -4
  567. package/dist/types/api/queries/authentication/getAuthentication.d.ts +2 -2
  568. package/dist/types/api/queries/cloud/cloud.d.ts +21 -21
  569. package/dist/types/api/queries/entities/getEntity.d.ts +12 -10
  570. package/dist/types/api/queries/entities/getEntityPanel.d.ts +6 -4
  571. package/dist/types/api/queries/entities/updateEntity.d.ts +2 -0
  572. package/dist/types/api/queries/entityLists/getLists.d.ts +190 -188
  573. package/dist/types/api/queries/entityLists/getListsAttributes.d.ts +2 -2
  574. package/dist/types/api/queries/entityLists/listFolders.d.ts +2 -2
  575. package/dist/types/api/queries/folders/getFolders.d.ts +4 -4
  576. package/dist/types/api/queries/grouping/getGrouping.d.ts +2 -2
  577. package/dist/types/api/queries/links/getEntityLinks.d.ts +2 -2
  578. package/dist/types/api/queries/overview/getOverview.d.ts +12 -10
  579. package/dist/types/api/queries/permissions/getPermissions.d.ts +4 -4
  580. package/dist/types/api/queries/project/getProject.d.ts +190 -6
  581. package/dist/types/api/queries/review/getReview.d.ts +6 -6
  582. package/dist/types/api/queries/share/share.d.ts +2 -2
  583. package/dist/types/api/queries/system/getSystem.d.ts +91 -81
  584. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +13 -8
  585. package/dist/types/api/queries/users/getUsers.d.ts +63 -57
  586. package/dist/types/api/queries/users/guests.d.ts +2 -2
  587. package/dist/types/api/queries/versions/getVersionsProducts.d.ts +29 -6
  588. package/dist/types/api/queries/versions/getVersionsProductsUtils.d.ts +5 -5
  589. package/dist/types/api/queries/versions/updateVersions.d.ts +2 -2
  590. package/dist/types/api/queries/views/getViews.d.ts +8 -8
  591. package/dist/types/api/queries/watchers/getWatchers.d.ts +2 -2
  592. package/dist/types/components/DetailsPanelDetails/hooks/index.d.ts +0 -1
  593. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +29 -0
  594. package/dist/types/components/RemotePage/index.d.ts +1 -0
  595. package/dist/types/components/ReviewablesList/getGroupedReviewables.d.ts +1 -2
  596. package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +2 -1
  597. package/dist/types/components/index.d.ts +31 -30
  598. package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +3 -2
  599. package/dist/types/containers/DetailsPanel/FeedWrapper.d.ts +3 -0
  600. package/dist/types/containers/DetailsPanel/helpers/mergeProjectInfo.d.ts +4 -2
  601. package/dist/types/containers/Feed/context/FeedContext.d.ts +4 -3
  602. package/dist/types/containers/Feed/mentionHelpers/getMentionVersions.d.ts +2 -1
  603. package/dist/types/containers/ProjectTreeTable/context/ProjectDataContext.d.ts +0 -5
  604. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +0 -4
  605. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +1 -7
  606. package/dist/types/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.d.ts +2 -3
  607. package/dist/types/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.d.ts +1 -3
  608. package/dist/types/containers/ProjectTreeTable/hooks/useGetEntityTypeData.d.ts +5 -3
  609. package/dist/types/containers/ProjectTreeTable/hooks/useGroupBySettings.d.ts +1 -1
  610. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +2 -0
  611. package/dist/types/containers/ProjectTreeTable/utils/getTableFieldOptions.d.ts +3 -2
  612. package/dist/types/containers/Views/index.d.ts +2 -2
  613. package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +6 -10
  614. package/dist/types/context/AddonProjectContext.d.ts +9 -14
  615. package/dist/types/context/DetailsPanelContext.d.ts +1 -2
  616. package/dist/types/context/GlobalContext.d.ts +25 -0
  617. package/dist/types/context/ProjectContext.d.ts +33 -0
  618. package/dist/types/context/index.d.ts +2 -0
  619. package/dist/types/hooks/useGroupByRemoteModules.d.ts +2 -1
  620. package/dist/types/util/index.d.ts +0 -2
  621. package/dist/types/util/versionUploadHelpers.d.ts +0 -1
  622. package/dist/util.cjs.js +1 -1
  623. package/dist/util.es.js +55 -58
  624. package/dist/util.es.js.map +1 -1
  625. package/package.json +1 -1
  626. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js +0 -2
  627. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.cjs.js.map +0 -1
  628. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js +0 -99
  629. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityData.es.js.map +0 -1
  630. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js +0 -2
  631. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.cjs.js.map +0 -1
  632. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js +0 -64
  633. package/dist/shared/src/containers/Views/hooks/pages/useReportsViewSettings.es.js.map +0 -1
  634. package/dist/shared/src/util/productTypes.cjs.js +0 -2
  635. package/dist/shared/src/util/productTypes.cjs.js.map +0 -1
  636. package/dist/shared/src/util/productTypes.es.js +0 -25
  637. package/dist/shared/src/util/productTypes.es.js.map +0 -1
  638. package/dist/types/components/DetailsPanelDetails/hooks/useEntityData.d.ts +0 -12
  639. package/dist/types/containers/Views/hooks/pages/useReportsViewSettings.d.ts +0 -11
  640. package/dist/types/util/productTypes.d.ts +0 -8
@@ -2,10 +2,6 @@ import { j as R } from "../../../../../_virtual/jsx-runtime.es.js";
2
2
  import { useState as B, useCallback as w, useMemo as H, useEffect as L } from "react";
3
3
  import "@ynput/ayon-react-components";
4
4
  import "short-uuid";
5
- import "lodash";
6
- import { toast as a } from "react-toastify";
7
- import "uuid";
8
- import "../../../util/pubsub.es.js";
9
5
  import { parseCellId as $ } from "../utils/cellUtils.es.js";
10
6
  import { getTypeDefaultValue as C } from "../utils/getTypeDefaultValue.es.js";
11
7
  import "@tanstack/react-table";
@@ -18,10 +14,19 @@ import "../widgets/CellWidget.es.js";
18
14
  import "../widgets/EntityNameWidget.es.js";
19
15
  import "../widgets/GroupHeaderWidget.es.js";
20
16
  import "../widgets/ThumbnailWidget.es.js";
17
+ import "../../../../../node_modules/match-sorter/dist/match-sorter.esm.es.js";
18
+ import "../../../components/AccessSearchInput/AccessSearchInput.styled.es.js";
19
+ import "../../../components/AccessUser/AccessUser.es.js";
21
20
  import "clsx";
22
- import "../../../components/ThumbnailSimple/ThumbnailSimple.es.js";
23
- import "../../../components/EmptyPlaceholder/EmptyPlaceholder.es.js";
24
- import "../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.es.js";
21
+ import "lodash";
22
+ import "../../../components/AttributeEditor/components/MinMaxField.es.js";
23
+ import "react-dom";
24
+ import "@dnd-kit/core";
25
+ import "@dnd-kit/sortable";
26
+ import "../../../components/EnumEditor/EnumEditor.styled.es.js";
27
+ import "../../../components/Badge/Badge.es.js";
28
+ import "../../../components/Chips/Chips.es.js";
29
+ import { toast as a } from "react-toastify";
25
30
  import "../../../api/base/client.es.js";
26
31
  import "../../../api/generated/graphql.es.js";
27
32
  import "../../../api/generated/graphqlLinks.es.js";
@@ -104,19 +109,23 @@ import "../../../api/queries/versions/updateVersions.es.js";
104
109
  import "../../../api/queries/views/getViews.es.js";
105
110
  import "../../../api/queries/views/updateViews.es.js";
106
111
  import "../../../api/queries/watchers/getWatchers.es.js";
107
- import "@dnd-kit/core";
108
- import "@dnd-kit/sortable";
109
- import "../../../components/ReviewablesList/ReviewablesList.styled.es.js";
112
+ import "../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
113
+ import "../../../components/DetailsPanelDetails/DetailsPanelDetails.es.js";
114
+ import "../../../components/DetailsPanelDetails/DetailsSection.es.js";
115
+ import "../../../components/DetailsPanelDetails/FieldLabel.es.js";
116
+ import "../../../components/EarlyPreview/EarlyPreview.es.js";
117
+ import "../../../components/EmptyPlaceholder/EmptyPlaceholder.es.js";
118
+ import "../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.es.js";
110
119
  import "../../ContextMenu/ContextMenuContext.es.js";
111
120
  /* empty css */
112
- import "../../../components/ReviewablesList/ReviewablesUpload.styled.es.js";
113
- import "axios";
121
+ import "../../Feed/context/FeedContext.es.js";
122
+ import "../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.es.js";
123
+ import "../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.es.js";
114
124
  import "../../../context/RemoteModulesContext.es.js";
115
125
  import "../../../context/DetailsPanelContext.es.js";
116
126
  import "../../../context/ThumbnailUploaderContext.es.js";
117
127
  import "../../../context/SettingsPanelContext.es.js";
118
128
  import "../../../context/pip/PiPProvider.es.js";
119
- import "react-dom";
120
129
  import "../../../context/pip/PiPWrapper.es.js";
121
130
  import "../../../context/AddonProjectContext.es.js";
122
131
  import "../../../context/AddonContext.es.js";
@@ -124,14 +133,8 @@ import "../../../context/PowerpackContext.es.js";
124
133
  import "../../../context/MoveEntityContext.es.js";
125
134
  import "../../../context/MenuContext.es.js";
126
135
  import "../../../context/WebsocketContext.es.js";
127
- import "../../../components/ReviewableCard/ReviewableCard.es.js";
128
- import "../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js";
129
- import "../../../components/FileThumbnail/FileThumbnail.es.js";
130
- import "../../../components/Thumbnail/Thumbnail.styled.es.js";
131
- import "../../../components/Thumbnail/StackedThumbnails.es.js";
132
- import "../../Feed/context/FeedContext.es.js";
133
- import "../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.es.js";
134
- import "../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.es.js";
136
+ import "../../../context/GlobalContext.es.js";
137
+ import "../../../context/ProjectContext.es.js";
135
138
  import "../../Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js";
136
139
  import "../../Feed/components/FileUploadPreview/Mimes/TextMime.es.js";
137
140
  import "react-markdown";
@@ -147,6 +150,8 @@ import "../../Feed/components/CommentInput/quillToMarkdown.es.js";
147
150
  import "../../Feed/components/ActivityComment/ActivityComment.styled.es.js";
148
151
  import "../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.es.js";
149
152
  import "../../Feed/components/ActivityReference/ActivityReference.styled.es.js";
153
+ import "uuid";
154
+ import "../../../util/pubsub.es.js";
150
155
  import "react-router-dom";
151
156
  import "../../Feed/components/ActivityStatus/ActivityStatus.es.js";
152
157
  import "../../Feed/components/ActivityHeader/ActivityHeader.styled.es.js";
@@ -197,50 +202,47 @@ import "../../Views/Views.styled.es.js";
197
202
  import "../../Views/ViewsMenuContainer/ViewsMenuContainer.es.js";
198
203
  import "../../Views/ViewsMenu/ViewsMenu.es.js";
199
204
  import "../../../components/EntityPanelUploader/EntityPanelUploader.styled.es.js";
200
- import "../../../components/SimpleFormDialog/SimpleFormDialog.es.js";
205
+ import "axios";
206
+ import "../../../components/ReviewablesList/ReviewablesList.styled.es.js";
207
+ import "../../../components/ReviewablesList/ReviewablesUpload.styled.es.js";
201
208
  import "../../../components/EntityPath/EntityPath.styled.es.js";
202
209
  import "../../../components/EntityPath/SegmentProvider.es.js";
203
- import "../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
204
- import "../../../components/DetailsPanelDetails/DetailsPanelDetails.es.js";
205
- import "../../../components/DetailsPanelDetails/DetailsSection.es.js";
206
- import "../../../components/DetailsPanelDetails/FieldLabel.es.js";
207
- import "../../../components/Watchers/Watchers.es.js";
208
- import "../../../components/ProjectTableSettings/ProjectTableSettings.es.js";
210
+ import "../../../components/FeaturedVersionOrder/FeaturedVersionOrder.es.js";
211
+ import "../../../components/Feedback/FeedbackContext.es.js";
212
+ import "../../../components/Feedback/SupportBubble.es.js";
213
+ import "../../../components/FileThumbnail/FileThumbnail.es.js";
214
+ import "../../../components/LegacyBadge/LegacyBadge.es.js";
215
+ import "../../../components/LinksManager/LinksManager.styled.es.js";
216
+ import "../../EntityPickerDialog/EntityPickerDialog.es.js";
209
217
  import "../../../components/Powerpack/PowerpackButton.es.js";
210
218
  import "../../../components/Powerpack/PricingLink.es.js";
211
219
  import "../../../components/Powerpack/PowerpackDialog.styled.es.js";
212
220
  import "../../../components/Powerpack/CTAButton.es.js";
213
221
  import "../../../components/Powerpack/RequiredAddonVersion.es.js";
222
+ import "../../../components/ProjectTableSettings/ProjectTableSettings.es.js";
214
223
  import "../../../components/SizeSlider/SizeSlider.es.js";
224
+ import "../../../components/ReviewableCard/ReviewableCard.es.js";
225
+ import "../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.es.js";
226
+ import "../../../components/SearchFilter/filterDates.es.js";
215
227
  import "../../../components/SettingsPanel/SettingsPanel.es.js";
216
228
  import "../../../components/SettingsPanel/SettingsPanelItemTemplate.es.js";
217
- import "../../../components/AttributeEditor/components/MinMaxField.es.js";
218
- import "../../../components/EnumEditor/EnumEditor.styled.es.js";
219
- import "../../../components/SearchFilter/filterDates.es.js";
220
- import "../../../components/FeaturedVersionOrder/FeaturedVersionOrder.es.js";
221
- import "../../../components/Badge/Badge.es.js";
222
- import "../../../components/VersionUploader/components/UploadVersionDialog.es.js";
223
- import "../../../components/VersionUploader/context/VersionUploadContext.es.js";
224
- import "../../../components/Feedback/FeedbackContext.es.js";
225
- import "../../../components/Feedback/SupportBubble.es.js";
226
- import "../../../components/Chips/Chips.es.js";
227
- import "../../../components/LinksManager/LinksManager.styled.es.js";
228
- import "../../EntityPickerDialog/EntityPickerDialog.es.js";
229
- import "../../../components/StyledLink/StyledLink.es.js";
230
229
  import "../../../components/ShareOptionIcon/ShareOptionIcon.es.js";
231
- import "../../../components/AccessUser/AccessUser.es.js";
232
- import "../../../../../node_modules/match-sorter/dist/match-sorter.esm.es.js";
233
- import "../../../components/AccessSearchInput/AccessSearchInput.styled.es.js";
234
- import "../../../components/TableGridSwitch/TableGridSwitch.es.js";
230
+ import "../../../components/SimpleFormDialog/SimpleFormDialog.es.js";
235
231
  import "../../../components/SortingSetting/SortingSetting.styled.es.js";
236
- import "../../../components/EarlyPreview/EarlyPreview.es.js";
237
- import "../../../components/LegacyBadge/LegacyBadge.es.js";
232
+ import "../../../components/StyledLink/StyledLink.es.js";
233
+ import "../../../components/TableGridSwitch/TableGridSwitch.es.js";
234
+ import "../../../components/Thumbnail/Thumbnail.styled.es.js";
235
+ import "../../../components/Thumbnail/StackedThumbnails.es.js";
236
+ import "../../../components/ThumbnailSimple/ThumbnailSimple.es.js";
237
+ import "../../../components/VersionUploader/components/UploadVersionDialog.es.js";
238
+ import "../../../components/VersionUploader/context/VersionUploadContext.es.js";
239
+ import "../../../components/Watchers/Watchers.es.js";
238
240
  import "../../../components/LinksManager/CellEditingDialog.es.js";
239
241
  import "../widgets/EmptyWidget.es.js";
240
242
  import "../widgets/ErrorWidget.es.js";
241
243
  import "../ProjectTreeTable.styled.es.js";
242
244
  import "../widgets/LoadMoreWidget.es.js";
243
- const ve = ({ children: F }) => {
245
+ const Ce = ({ children: F }) => {
244
246
  const [d, D] = B(null), T = w((i) => i === d, [d]), E = S(), { pushHistory: U, undo: K, redo: N, canUndo: k, canRedo: A } = E, { selectedCells: b } = V(), { updateEntities: v, inheritFromParent: l } = O({
245
247
  pushHistory: U
246
248
  }), { attribFields: f, getEntityById: P } = W(), c = w(
@@ -409,6 +411,6 @@ const ve = ({ children: F }) => {
409
411
  }, [k, A, u, y, b, x]), /* @__PURE__ */ R.jsx(z.Provider, { value: _, children: F });
410
412
  };
411
413
  export {
412
- ve as CellEditingProvider
414
+ Ce as CellEditingProvider
413
415
  };
414
416
  //# sourceMappingURL=CellEditingProvider.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CellEditingProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/CellEditingProvider.tsx"],"sourcesContent":["import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\nimport { CellId, getTypeDefaultValue, parseCellId } from '../utils'\nimport useHistory from '../hooks/useHistory'\nimport { useSelectionCellsContext } from './SelectionCellsContext'\nimport useUpdateTableData, {\n EntityUpdate,\n InheritFromParentEntity,\n UpdateTableEntities,\n} from '../hooks/useUpdateTableData'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport validateUpdateEntities from '../utils/validateUpdateEntities'\nimport { toast } from 'react-toastify'\nimport { CellEditingContext } from './CellEditingContext'\n\nexport const CellEditingProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [editingCellId, setEditingCellId] = useState<CellId | null>(null)\n\n // Memoize these functions to prevent unnecessary re-renders\n const isEditing = useCallback((id: CellId) => id === editingCellId, [editingCellId])\n\n // Get history functions\n const history = useHistory()\n const { pushHistory, undo: undoHistory, redo: redoHistory, canUndo, canRedo } = history\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities: updateOverviewEntities, inheritFromParent } = useUpdateTableData({\n pushHistory,\n })\n const { attribFields, getEntityById } = useProjectTableContext()\n\n const handleUpdateEntities: UpdateTableEntities = useCallback(\n async (entities = [], pushToHistory = true) => {\n try {\n // validate the entities before updating\n validateUpdateEntities(entities, attribFields)\n\n // if validation passes, update the entities\n return await updateOverviewEntities(entities, pushToHistory)\n } catch (error: any) {\n // if validation fails, show a toast and return\n toast.error(error.message)\n\n return Promise.reject(error)\n }\n },\n [updateOverviewEntities, attribFields],\n )\n\n // Handle undo\n const handleUndo = async () => {\n const [entitiesToUndo, entitiesToInherit, callbacks] = undoHistory() || []\n\n if (entitiesToUndo && entitiesToUndo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToUndo, false)\n } catch (error) {\n toast.error('Failed to undo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom undo action')\n }\n })\n }\n }\n\n // Handle redo\n const handleRedo = async () => {\n const [entitiesToRedo, entitiesToInherit, callbacks] = redoHistory() || []\n\n if (entitiesToRedo && entitiesToRedo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToRedo, false)\n } catch (error) {\n toast.error('Failed to redo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom redo action')\n }\n })\n }\n }\n\n // Handle clearing cells\n const handleClear = useCallback(\n async (cells: CellId[]) => {\n // we explicity update the value of the cells to their default values\n const entityUpdates: EntityUpdate[] = []\n // of if they are inheritable, we inherit from the parent entity\n const entityInheriting: InheritFromParentEntity[] = []\n\n for (const cellId of cells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n if (!colId || !rowId) {\n console.warn(`Invalid cellId: ${cellId}`)\n continue\n }\n\n // get the entity from the rowId\n const entity = getEntityById(rowId)\n\n if (!entity) return\n\n // get the field name and check if it is an attribute\n const fieldName = colId.replace('attrib_', '')\n const isAttrib = colId.startsWith('attrib_')\n\n if (!fieldName) {\n console.warn(`Invalid column ID: ${colId}`)\n continue\n }\n\n let defaultValue: any = null\n if (isAttrib) {\n // find default value for the attribute\n const attribField = attribFields.find((f) => f.name === fieldName)\n if (!attribField) {\n console.warn(`Attribute field not found: ${fieldName}`)\n continue\n }\n // check if the attribute is inheritable\n if (attribField.data.inherit) {\n // inherit from parent entity\n // check if this entity has already been added to the inheriting list\n const existingInherit = entityInheriting.find((e) => e.entityId === entity.entityId)\n if (existingInherit) {\n // add the attrib to the existing entity\n existingInherit.attribs.push(fieldName)\n } else {\n // add a new entity to the inheriting list\n entityInheriting.push({\n entityId: entity.entityId,\n attribs: [fieldName],\n entityType: entity.entityType,\n ownAttrib: entity.ownAttrib || [],\n rowId: rowId,\n folderId:\n entity.entityType === 'folder'\n ? entity.parentId\n : entity.entityType === 'task'\n ? entity.folderId\n : undefined,\n })\n }\n continue\n } else {\n // set explicit default value\n defaultValue = attribField.data.default || getTypeDefaultValue(attribField.data.type)\n }\n } else if (fieldName === 'assignees') {\n // for assignees, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else if (fieldName === 'tags') {\n // for tags, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else {\n // we ignore other fields\n console.warn(`Field not editable: ${fieldName}`)\n continue\n }\n\n // create the entity update\n const update: EntityUpdate = {\n id: rowId,\n rowId: rowId,\n field: fieldName,\n value: defaultValue,\n isAttrib,\n type: entity.entityType,\n }\n\n entityUpdates.push(update)\n }\n\n // if we have updates, call the updateEntities function\n if (entityUpdates.length > 0) {\n try {\n await handleUpdateEntities(entityUpdates, true)\n } catch (error) {\n toast.error('Failed to clear selected cells')\n console.error('Error clearing selected cells:', error)\n }\n }\n\n // if we have inheritable attributes, call inheritFromParent\n if (entityInheriting.length > 0) {\n try {\n await inheritFromParent(entityInheriting, true)\n } catch (error) {\n toast.error('Failed to inherit parent values for cleared cells')\n console.error('Error clearing inherited cells:', error)\n }\n }\n\n // if nothing was done, warn the user\n if (entityUpdates.length === 0 && entityInheriting.length === 0) {\n toast.warn('No valid cells selected to clear')\n }\n },\n [attribFields, updateOverviewEntities],\n )\n\n const value = useMemo(\n () => ({\n editingCellId,\n setEditingCellId,\n isEditing,\n updateEntities: handleUpdateEntities,\n inheritFromParent,\n undo: handleUndo,\n redo: handleRedo,\n history,\n }),\n [\n editingCellId,\n isEditing,\n handleUpdateEntities,\n inheritFromParent,\n handleUndo,\n handleRedo,\n history,\n ],\n )\n\n // Listen for shortcuts\n // undo - ctrl + z\n // redo - ctrl + y or ctrl + shift + z\n // clear - backspace or delete\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox' ||\n target.tagName === 'LI'\n ) {\n return\n }\n\n const isMac =\n typeof navigator !== 'undefined' &&\n // @ts-expect-error\n ((navigator.userAgentData &&\n // @ts-expect-error\n navigator.userAgentData.platform.toUpperCase().includes('MAC')) ||\n navigator.userAgent.toUpperCase().includes('MAC'))\n const ctrlKey = isMac ? e.metaKey : e.ctrlKey\n\n // undo\n if (ctrlKey && e.key === 'z') {\n e.preventDefault()\n if (canUndo) handleUndo()\n }\n // redo\n if (\n (ctrlKey && e.key === 'y') ||\n (ctrlKey && e.shiftKey && e.key === 'z') ||\n (ctrlKey && e.key === 'Z')\n ) {\n e.preventDefault()\n if (canRedo) handleRedo()\n }\n // clear\n if ((e.key === 'Backspace' && !(e.ctrlKey || e.metaKey)) || e.key === 'Delete') {\n // check we have cells selected\n if (!selectedCells.size) return\n e.preventDefault()\n\n // find selected cells elements\n const selectedCellElements = Array.from(selectedCells).map((cellId) =>\n document.getElementById(cellId),\n )\n\n // check the cell is editable from the classnames\n const isEditable = (cell: HTMLElement | null) => cell?.classList.contains('editable')\n\n // filter out non-editable cells\n const editableCells = selectedCellElements.filter(isEditable)\n if (editableCells.length === 0) {\n toast.warn('No editable cells selected to clear')\n return\n }\n // clear the selected cells\n handleClear(editableCells.map((cell) => cell?.id).filter(Boolean) as CellId[])\n }\n }\n\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [canUndo, canRedo, handleUndo, handleRedo, selectedCells, handleClear])\n\n return <CellEditingContext.Provider value={value}>{children}</CellEditingContext.Provider>\n}\n"],"names":["CellEditingProvider","children","editingCellId","setEditingCellId","useState","isEditing","useCallback","id","history","useHistory","pushHistory","undoHistory","redoHistory","canUndo","canRedo","selectedCells","useSelectionCellsContext","updateOverviewEntities","inheritFromParent","useUpdateTableData","attribFields","getEntityById","useProjectTableContext","handleUpdateEntities","entities","pushToHistory","validateUpdateEntities","error","toast","handleUndo","entitiesToUndo","entitiesToInherit","callbacks","callback","handleRedo","entitiesToRedo","handleClear","cells","entityUpdates","entityInheriting","cellId","colId","rowId","parseCellId","entity","fieldName","isAttrib","defaultValue","attribField","f","existingInherit","e","getTypeDefaultValue","update","value","useMemo","useEffect","onKeyDown","target","ctrlKey","selectedCellElements","isEditable","cell","editableCells","jsx","CellEditingContext"],"mappings":"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"}
1
+ {"version":3,"file":"CellEditingProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/CellEditingProvider.tsx"],"sourcesContent":["import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\nimport { CellId, getTypeDefaultValue, parseCellId } from '../utils'\nimport useHistory from '../hooks/useHistory'\nimport { useSelectionCellsContext } from './SelectionCellsContext'\nimport useUpdateTableData, {\n EntityUpdate,\n InheritFromParentEntity,\n UpdateTableEntities,\n} from '../hooks/useUpdateTableData'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport validateUpdateEntities from '../utils/validateUpdateEntities'\nimport { toast } from 'react-toastify'\nimport { CellEditingContext } from './CellEditingContext'\n\nexport const CellEditingProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [editingCellId, setEditingCellId] = useState<CellId | null>(null)\n\n // Memoize these functions to prevent unnecessary re-renders\n const isEditing = useCallback((id: CellId) => id === editingCellId, [editingCellId])\n\n // Get history functions\n const history = useHistory()\n const { pushHistory, undo: undoHistory, redo: redoHistory, canUndo, canRedo } = history\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities: updateOverviewEntities, inheritFromParent } = useUpdateTableData({\n pushHistory,\n })\n const { attribFields, getEntityById } = useProjectTableContext()\n\n const handleUpdateEntities: UpdateTableEntities = useCallback(\n async (entities = [], pushToHistory = true) => {\n try {\n // validate the entities before updating\n validateUpdateEntities(entities, attribFields)\n\n // if validation passes, update the entities\n return await updateOverviewEntities(entities, pushToHistory)\n } catch (error: any) {\n // if validation fails, show a toast and return\n toast.error(error.message)\n\n return Promise.reject(error)\n }\n },\n [updateOverviewEntities, attribFields],\n )\n\n // Handle undo\n const handleUndo = async () => {\n const [entitiesToUndo, entitiesToInherit, callbacks] = undoHistory() || []\n\n if (entitiesToUndo && entitiesToUndo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToUndo, false)\n } catch (error) {\n toast.error('Failed to undo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom undo action')\n }\n })\n }\n }\n\n // Handle redo\n const handleRedo = async () => {\n const [entitiesToRedo, entitiesToInherit, callbacks] = redoHistory() || []\n\n if (entitiesToRedo && entitiesToRedo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToRedo, false)\n } catch (error) {\n toast.error('Failed to redo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom redo action')\n }\n })\n }\n }\n\n // Handle clearing cells\n const handleClear = useCallback(\n async (cells: CellId[]) => {\n // we explicity update the value of the cells to their default values\n const entityUpdates: EntityUpdate[] = []\n // of if they are inheritable, we inherit from the parent entity\n const entityInheriting: InheritFromParentEntity[] = []\n\n for (const cellId of cells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n if (!colId || !rowId) {\n console.warn(`Invalid cellId: ${cellId}`)\n continue\n }\n\n // get the entity from the rowId\n const entity = getEntityById(rowId)\n\n if (!entity) return\n\n // get the field name and check if it is an attribute\n const fieldName = colId.replace('attrib_', '')\n const isAttrib = colId.startsWith('attrib_')\n\n if (!fieldName) {\n console.warn(`Invalid column ID: ${colId}`)\n continue\n }\n\n let defaultValue: any = null\n if (isAttrib) {\n // find default value for the attribute\n const attribField = attribFields.find((f) => f.name === fieldName)\n if (!attribField) {\n console.warn(`Attribute field not found: ${fieldName}`)\n continue\n }\n // check if the attribute is inheritable\n if (attribField.data.inherit) {\n // inherit from parent entity\n // check if this entity has already been added to the inheriting list\n const existingInherit = entityInheriting.find((e) => e.entityId === entity.entityId)\n if (existingInherit) {\n // add the attrib to the existing entity\n existingInherit.attribs.push(fieldName)\n } else {\n // add a new entity to the inheriting list\n entityInheriting.push({\n entityId: entity.entityId,\n attribs: [fieldName],\n entityType: entity.entityType,\n ownAttrib: entity.ownAttrib || [],\n rowId: rowId,\n folderId:\n entity.entityType === 'folder'\n ? entity.parentId\n : entity.entityType === 'task'\n ? entity.folderId\n : undefined,\n })\n }\n continue\n } else {\n // set explicit default value\n defaultValue = attribField.data.default || getTypeDefaultValue(attribField.data.type)\n }\n } else if (fieldName === 'assignees') {\n // for assignees, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else if (fieldName === 'tags') {\n // for tags, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else {\n // we ignore other fields\n console.warn(`Field not editable: ${fieldName}`)\n continue\n }\n\n // create the entity update\n const update: EntityUpdate = {\n id: rowId,\n rowId: rowId,\n field: fieldName,\n value: defaultValue,\n isAttrib,\n type: entity.entityType,\n }\n\n entityUpdates.push(update)\n }\n\n // if we have updates, call the updateEntities function\n if (entityUpdates.length > 0) {\n try {\n await handleUpdateEntities(entityUpdates, true)\n } catch (error) {\n toast.error('Failed to clear selected cells')\n console.error('Error clearing selected cells:', error)\n }\n }\n\n // if we have inheritable attributes, call inheritFromParent\n if (entityInheriting.length > 0) {\n try {\n await inheritFromParent(entityInheriting, true)\n } catch (error) {\n toast.error('Failed to inherit parent values for cleared cells')\n console.error('Error clearing inherited cells:', error)\n }\n }\n\n // if nothing was done, warn the user\n if (entityUpdates.length === 0 && entityInheriting.length === 0) {\n toast.warn('No valid cells selected to clear')\n }\n },\n [attribFields, updateOverviewEntities],\n )\n\n const value = useMemo(\n () => ({\n editingCellId,\n setEditingCellId,\n isEditing,\n updateEntities: handleUpdateEntities,\n inheritFromParent,\n undo: handleUndo,\n redo: handleRedo,\n history,\n }),\n [\n editingCellId,\n isEditing,\n handleUpdateEntities,\n inheritFromParent,\n handleUndo,\n handleRedo,\n history,\n ],\n )\n\n // Listen for shortcuts\n // undo - ctrl + z\n // redo - ctrl + y or ctrl + shift + z\n // clear - backspace or delete\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox' ||\n target.tagName === 'LI'\n ) {\n return\n }\n\n const isMac =\n typeof navigator !== 'undefined' &&\n // @ts-expect-error\n ((navigator.userAgentData &&\n // @ts-expect-error\n navigator.userAgentData.platform.toUpperCase().includes('MAC')) ||\n navigator.userAgent.toUpperCase().includes('MAC'))\n const ctrlKey = isMac ? e.metaKey : e.ctrlKey\n\n // undo\n if (ctrlKey && e.key === 'z') {\n e.preventDefault()\n if (canUndo) handleUndo()\n }\n // redo\n if (\n (ctrlKey && e.key === 'y') ||\n (ctrlKey && e.shiftKey && e.key === 'z') ||\n (ctrlKey && e.key === 'Z')\n ) {\n e.preventDefault()\n if (canRedo) handleRedo()\n }\n // clear\n if ((e.key === 'Backspace' && !(e.ctrlKey || e.metaKey)) || e.key === 'Delete') {\n // check we have cells selected\n if (!selectedCells.size) return\n e.preventDefault()\n\n // find selected cells elements\n const selectedCellElements = Array.from(selectedCells).map((cellId) =>\n document.getElementById(cellId),\n )\n\n // check the cell is editable from the classnames\n const isEditable = (cell: HTMLElement | null) => cell?.classList.contains('editable')\n\n // filter out non-editable cells\n const editableCells = selectedCellElements.filter(isEditable)\n if (editableCells.length === 0) {\n toast.warn('No editable cells selected to clear')\n return\n }\n // clear the selected cells\n handleClear(editableCells.map((cell) => cell?.id).filter(Boolean) as CellId[])\n }\n }\n\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [canUndo, canRedo, handleUndo, handleRedo, selectedCells, handleClear])\n\n return <CellEditingContext.Provider value={value}>{children}</CellEditingContext.Provider>\n}\n"],"names":["CellEditingProvider","children","editingCellId","setEditingCellId","useState","isEditing","useCallback","id","history","useHistory","pushHistory","undoHistory","redoHistory","canUndo","canRedo","selectedCells","useSelectionCellsContext","updateOverviewEntities","inheritFromParent","useUpdateTableData","attribFields","getEntityById","useProjectTableContext","handleUpdateEntities","entities","pushToHistory","validateUpdateEntities","error","toast","handleUndo","entitiesToUndo","entitiesToInherit","callbacks","callback","handleRedo","entitiesToRedo","handleClear","cells","entityUpdates","entityInheriting","cellId","colId","rowId","parseCellId","entity","fieldName","isAttrib","defaultValue","attribField","f","existingInherit","e","getTypeDefaultValue","update","value","useMemo","useEffect","onKeyDown","target","ctrlKey","selectedCellElements","isEditable","cell","editableCells","jsx","CellEditingContext"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ie=require("../../../../../_virtual/jsx-runtime.cjs.js"),R=require("react"),L=require("./SelectionCellsContext.cjs.js"),ge=require("./CellEditingContext.cjs.js"),m=require("../utils/cellUtils.cjs.js"),be=require("../hooks/usePasteLinks.cjs.js"),E=require("./clipboard/clipboardUtils.cjs.js"),Ce=require("./clipboard/clipboardValidation.cjs.js"),Te=require("./ProjectTableContext.cjs.js");require("lodash");require("react-toastify");const we=require("../../../util/getEntityId.cjs.js");require("../../../util/pubsub.cjs.js");const ie=R.createContext(void 0),xe=({children:j,entitiesMap:S,columnEnums:Z,columnReadOnly:le,visibleColumns:B})=>{const{selectedCells:$,gridMap:a,focusedCellId:ae}=L.useSelectionCellsContext(),{updateEntities:ee}=ge.useCellEditing(),{pasteTableLinks:te}=be(),{getEntityById:M,attribFields:z}=Te.useProjectTableContext(),J=R.useCallback(async(n,l)=>{const{headers:b,fullRow:C}=l||{};try{const d=B.map(s=>s.id).filter(s=>s!==L.ROW_SELECTION_COLUMN_ID),I=new Map;n.forEach(s=>{var T;const t=m.parseCellId(s);if(!t)return;const{rowId:r,colId:f}=t;f===L.ROW_SELECTION_COLUMN_ID||!d.includes(f)||(I.has(r)||I.set(r,new Set),(T=I.get(r))==null||T.add(f))}),C&&n.filter(t=>{var r,f;return((r=m.parseCellId(t))==null?void 0:r.rowId)&&((f=m.parseCellId(t))==null?void 0:f.colId)===L.ROW_SELECTION_COLUMN_ID}).map(t=>{var r;return(r=m.parseCellId(t))==null?void 0:r.rowId}).forEach(t=>{I.has(t)||I.set(t,new Set),Array.from(a.colIdToIndex.keys()).forEach(f=>{var T;(T=I.get(t))==null||T.add(f)})});const _=Array.from(I.keys()).sort((s,t)=>{const r=a.rowIdToIndex.get(s)??1/0,f=a.rowIdToIndex.get(t)??1/0;return r-f});let U="";const K=_[0];if(!K)return"";const O=Array.from(I.get(K)||[]).sort((s,t)=>{const r=a.colIdToIndex.get(s)??1/0,f=a.colIdToIndex.get(t)??1/0;return r-f});if(b&&O.length>0){const s=[];for(const t of O){const r=t;s.push(`${r.replace(/"/g,'""')}`)}U+=s.join(" ")+`
2
- `}for(const s of _){const t=M(s);if(!t){console.warn(`Entity not found for rowId: ${s}`);continue}const f=Array.from(I.get(s)||[]).sort((w,h)=>{const x=a.colIdToIndex.get(w)??1/0,v=a.colIdToIndex.get(h)??1/0;return x-v}).filter(w=>w!==L.ROW_SELECTION_COLUMN_ID),T=[];for(const w of f){let h="";if(w.startsWith("link_"))h=m.getLinkEntityIdsByColumnId(t.links,w);else{let x=m.getCellValue(t,w);if(!x){const v=z.find(G=>G.name===w.replace("attrib_",""));v&&v.data.type==="boolean"?x=!1:v&&v.data.type.includes("list_of")&&(x=[])}h=x!=null?String(x):"",w==="name"&&(h=E.getEntityPath(t.entityId||t.id,S)),w==="subType"&&("folderType"in t&&(h=t.folderType||""),"taskType"in t&&(h=t.taskType||""))}T.push(`${h.replace(/"/g,'""')}`)}U+=T.join(" ")+`
3
- `}return U}catch(d){console.error("Failed to copy to clipboard:",d)}},[$,ae,a,S,M,B]),ce=async()=>{const n=await oe();if(!n)return!1;const l=E.parseClipboardText(n);return l.length===0?!1:l.every(b=>b.values.every(C=>C.split(",").every(d=>we.validateEntityId(d))))},W=R.useCallback(async(n,l)=>{if(n=n||Array.from($),!n.length)return;const b=await J(n,{fullRow:l});if(b){if(!navigator.clipboard){E.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){E.clipboardError("Clipboard operations require a secure HTTPS context.");return}try{await navigator.clipboard.writeText(b)}catch(C){E.clipboardError(`Failed to copy to clipboard: ${C.message}`)}}},[$,S,a]),de=R.useCallback(async(n,l,b)=>{if(n=n||Array.from($),!!n.length)try{const C=await J(n,{headers:!0,fullRow:b});if(!C)return;const d=new Blob([C],{type:"text/csv"}),I=URL.createObjectURL(d),_=document.createElement("a");_.href=I;const U=n.length;_.download=`${l}-export-${U}_cells-${new Date().toISOString().slice(0,10)}.csv`,_.click(),URL.revokeObjectURL(I)}catch(C){console.error("Failed to copy to clipboard:",C)}},[$,S,a,J]),oe=async()=>{if(!navigator.clipboard){E.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){E.clipboardError("Clipboard operations require a secure HTTPS context.");return}let n;try{return n=await navigator.clipboard.readText(),n}catch(l){E.clipboardError(`Failed to read from clipboard: ${l.message}`);return}},F=R.useCallback(async(n,l)=>{var v,G,re;const{method:b="replace"}=l||{};if(!n.length)return;const C=await oe();if(!C)return;const d=E.parseClipboardText(C);if(!d.length)return;const I=d.length===1&&d[0].values.length===1,_=B.map(e=>e.id).filter(e=>e!==L.ROW_SELECTION_COLUMN_ID),U=(e,o,i)=>{const u={};return i&&i.length>0?i.forEach((c,p)=>{const g=o.find(y=>y===c||y.replace("attrib_","")===c||y===`attrib_${c}`||y.toLowerCase()===c.toLowerCase());g&&p<e.values.length&&(u[g]=e.values[p])}):o.forEach((c,p)=>{p<e.values.length&&(u[c]=e.values[p])}),u},K=((v=d[0])==null?void 0:v.colIds)||void 0,O=new Map;Array.from(n).forEach(e=>{var c;const o=m.parseCellId(e);if(!o)return;const{rowId:i,colId:u}=o;u===L.ROW_SELECTION_COLUMN_ID||!_.includes(u)||(O.has(i)||O.set(i,new Set),(c=O.get(i))==null||c.add(u))});const s=Array.from(O.keys()).sort((e,o)=>{const i=a.rowIdToIndex.get(e)??1/0,u=a.rowIdToIndex.get(o)??1/0;return i-u}),t=s[0],r=Array.from(O.get(t)||[]).sort((e,o)=>{const i=a.colIdToIndex.get(e)??1/0,u=a.colIdToIndex.get(o)??1/0;return i-u});for(let e=0;e<s.length;e++){const o=s[e],i=((G=m.getEntityDataById(o,S))==null?void 0:G.entityType)==="folder",u=e%d.length,c=d[u],p=I?{[r[0]]:d[0].values[0]}:U(c,r,K);for(const g of r){const y=p[g]||"";if(!Ce.validateClipboardData({colId:g,isFolder:i,pasteValue:y,parsedData:d,columnEnums:Z,columnReadOnly:le,rowIndex:e,colIndex:r.indexOf(g),isSingleCellValue:I,attribFields:z}))return}}const f=new Map;for(let e=0;e<r.length;e++){const o=r[e];if(o==="name")continue;let i=!1,u=!1,c="string";if(s.length>0){const p=s[0],g=M(p);if(g){i=o.startsWith("attrib_"),u=o.startsWith("link_");const y=m.getCellValue(g,o);Array.isArray(y)||u?c="array":typeof y=="number"?c="number":typeof y=="boolean"&&(c="boolean"),o==="subType"&&(i=!1)}}for(let p=0;p<s.length;p++){const g=s[p],y=(re=m.getEntityDataById(g,S))==null?void 0:re.entityType,V=y==="folder";let A;if(I)A=d[0].values[0];else{const ne=p%d.length,k=d[ne];if(k.values.length>r.length){const D=a.colIdToIndex.get(r[0])??0,H=Array.from(a.colIdToIndex.keys()).filter(q=>q!==L.ROW_SELECTION_COLUMN_ID).sort((q,ue)=>{const pe=a.colIdToIndex.get(q)??1/0,ye=a.colIdToIndex.get(ue)??1/0;return pe-ye}),X=H.findIndex(q=>a.colIdToIndex.get(q)===D),se=H.slice(X,X+k.values.length).indexOf(o);A=k.values[se]||k.values[se%k.values.length]}else{const D=e%k.values.length;A=k.values[D]}}let P=o.split("_").pop()||o;if(o==="subType"&&(P=V?"folderType":"taskType",i=!1,!A))continue;const N=E.processFieldValue(A,c),Q=`${g}-${y}`;!f.has(Q)&&y&&f.set(Q,{rowId:g,id:g,type:y,fields:{},attrib:{},links:{}});const Y=f.get(Q);if(u){const[ne,k,D,H,X]=o.split("_");Y.links[`${k}|${D}|${H}_${X}`]=N}else i?Y.attrib[P]=N:Y.fields[P]=N}}const T=[],w=new Map;f.forEach(e=>{Object.entries(e.fields).forEach(([o,i])=>{T.push({rowId:e.rowId,id:e.id,type:e.type,field:o,value:i})}),Object.entries(e.attrib).forEach(([o,i])=>{T.push({rowId:e.rowId,id:e.id,type:e.type,field:o,value:i,isAttrib:!0})}),Object.entries(e.links).forEach(([o,i])=>{const[u,c]=o.split("_"),p=u.split("|");if(p.length>=3){const g=p[0],y=p[1],V=p[2],A=`${g}|${y}|${V}`,P=c==="out"?V:y,N=`${e.id}-${A}-${c}`;w.set(N,{rowId:e.rowId,sourceEntityId:e.id,sourceEntityType:e.type,linkType:A,direction:c,targetEntityType:P,operation:b,targetEntityIds:Array.isArray(i)?i:[]})}})});const h=Array.from(w.values()),x=[];if(T.length>0&&x.push(ee(T)),h.length>0&&x.push(te(h)),x.length>0)try{await Promise.all(x)}catch(e){console.error("Error updating entities:",e),E.clipboardError(`Paste failed: ${e||(e==null?void 0:e.message)||"Unknown error"}`)}},[$,a,S,ee,te,Z,M,B,z]);R.useEffect(()=>{const n=async l=>{if((l.ctrlKey||l.metaKey)&&l.key==="c"&&W(),(l.ctrlKey||l.metaKey)&&l.key==="v"){const b=document.activeElement;if(b&&(b.tagName==="INPUT"||b.tagName==="TEXTAREA"||b.isContentEditable))if(await ce())l.preventDefault();else return;F(Array.from($),{method:l.shiftKey?"merge":"replace"})}};return window.addEventListener("keydown",n),()=>{window.removeEventListener("keydown",n)}},[W,F]);const fe=R.useMemo(()=>({copyToClipboard:W,pasteFromClipboard:F,exportCSV:de}),[W,F]);return Ie.jsxRuntimeExports.jsx(ie.Provider,{value:fe,children:j})},he=()=>{const j=R.useContext(ie);if(j===void 0)throw new Error("useClipboard must be used within a ClipboardProvider");return j};exports.ClipboardProvider=xe;exports.useClipboard=he;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Ie=require("../../../../../_virtual/jsx-runtime.cjs.js"),S=require("react"),R=require("./SelectionCellsContext.cjs.js"),ge=require("./CellEditingContext.cjs.js"),k=require("../utils/cellUtils.cjs.js"),be=require("../hooks/usePasteLinks.cjs.js"),m=require("./clipboard/clipboardUtils.cjs.js"),Ce=require("./clipboard/clipboardValidation.cjs.js"),Te=require("./ProjectTableContext.cjs.js");require("lodash");require("react-toastify");const we=require("../../../util/getEntityId.cjs.js");require("../../../util/pubsub.cjs.js");const ie=S.createContext(void 0),xe=({children:j,entitiesMap:$,columnEnums:Z,columnReadOnly:ae,visibleColumns:B})=>{const{selectedCells:U,gridMap:c,focusedCellId:le}=R.useSelectionCellsContext(),{updateEntities:ee}=ge.useCellEditing(),{pasteTableLinks:te}=be(),{getEntityById:F,attribFields:M}=Te.useProjectTableContext(),J=S.useCallback(async(s,l)=>{const{headers:g,fullRow:b}=l||{};try{const d=B.map(i=>i.id).filter(i=>i!==R.ROW_SELECTION_COLUMN_ID),y=new Map;s.forEach(i=>{var T;const o=k.parseCellId(i);if(!o)return;const{rowId:r,colId:f}=o;f===R.ROW_SELECTION_COLUMN_ID||!d.includes(f)||(y.has(r)||y.set(r,new Set),(T=y.get(r))==null||T.add(f))}),b&&s.filter(o=>{var r,f;return((r=k.parseCellId(o))==null?void 0:r.rowId)&&((f=k.parseCellId(o))==null?void 0:f.colId)===R.ROW_SELECTION_COLUMN_ID}).map(o=>{var r;return(r=k.parseCellId(o))==null?void 0:r.rowId}).forEach(o=>{y.has(o)||y.set(o,new Set),Array.from(c.colIdToIndex.keys()).forEach(f=>{var T;(T=y.get(o))==null||T.add(f)})});const O=Array.from(y.keys()).sort((i,o)=>{const r=c.rowIdToIndex.get(i)??1/0,f=c.rowIdToIndex.get(o)??1/0;return r-f});let N="";const G=O[0];if(!G)return"";const L=Array.from(y.get(G)||[]).sort((i,o)=>{const r=c.colIdToIndex.get(i)??1/0,f=c.colIdToIndex.get(o)??1/0;return r-f});if(g&&L.length>0){const i=[];for(const o of L){const r=o;i.push(`${r.replace(/"/g,'""')}`)}N+=i.join(" ")+`
2
+ `}for(const i of O){const o=F(i);if(!o){console.warn(`Entity not found for rowId: ${i}`);continue}const f=Array.from(y.get(i)||[]).sort((w,h)=>{const x=c.colIdToIndex.get(w)??1/0,v=c.colIdToIndex.get(h)??1/0;return x-v}).filter(w=>w!==R.ROW_SELECTION_COLUMN_ID),T=[];for(const w of f){let h="";if(w.startsWith("link_"))h=k.getLinkEntityIdsByColumnId(o.links,w);else{let x=k.getCellValue(o,w);if(!x){const v=M.find(H=>H.name===w.replace("attrib_",""));v&&v.data.type==="boolean"?x=!1:v&&v.data.type.includes("list_of")&&(x=[])}h=x!=null?String(x):"",w==="name"&&(h=m.getEntityPath(o.entityId||o.id,$)),w==="subType"&&("folderType"in o&&(h=o.folderType||""),"taskType"in o&&(h=o.taskType||""))}T.push(`${h.replace(/"/g,'""')}`)}N+=T.join(" ")+`
3
+ `}return N}catch(d){console.error("Failed to copy to clipboard:",d)}},[U,le,c,$,F,B]),ce=async()=>{const s=await oe();if(!s)return!1;const l=m.parseClipboardText(s);return l.length===0?!1:l.every(g=>g.values.every(b=>b.split(",").every(d=>we.validateEntityId(d))))},W=S.useCallback(async(s,l)=>{if(s=s||Array.from(U),!s.length)return;const g=await J(s,{fullRow:l});if(g){if(!navigator.clipboard){m.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){m.clipboardError("Clipboard operations require a secure HTTPS context.");return}try{await navigator.clipboard.writeText(g)}catch(b){m.clipboardError(`Failed to copy to clipboard: ${b.message}`)}}},[U,$,c]),de=S.useCallback(async(s,l,g)=>{if(s=s||Array.from(U),!!s.length)try{const b=await J(s,{headers:!0,fullRow:g});if(!b)return;const d=new Blob([b],{type:"text/csv"}),y=URL.createObjectURL(d),O=document.createElement("a");O.href=y;const N=s.length;O.download=`${l}-export-${N}_cells-${new Date().toISOString().slice(0,10)}.csv`,O.click(),URL.revokeObjectURL(y)}catch(b){console.error("Failed to copy to clipboard:",b)}},[U,$,c,J]),oe=async()=>{if(!navigator.clipboard){m.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){m.clipboardError("Clipboard operations require a secure HTTPS context.");return}let s;try{return s=await navigator.clipboard.readText(),s}catch(l){m.clipboardError(`Failed to read from clipboard: ${l.message}`);return}},K=S.useCallback(async(s,l)=>{var v,H,re;const{method:g="replace"}=l||{};if(!s.length)return;const b=await oe();if(!b)return;const d=m.parseClipboardText(b);if(!d.length)return;const y=d.length===1&&d[0].values.length===1,O=B.map(e=>e.id).filter(e=>e!==R.ROW_SELECTION_COLUMN_ID),N=(e,t,n)=>{const p={};return n&&n.length>0?n.forEach((a,u)=>{const C=t.find(I=>I===a||I.replace("attrib_","")===a||I===`attrib_${a}`||I.toLowerCase()===a.toLowerCase());C&&u<e.values.length&&(p[C]=e.values[u])}):t.forEach((a,u)=>{u<e.values.length&&(p[a]=e.values[u])}),p},G=((v=d[0])==null?void 0:v.colIds)||void 0,L=new Map;Array.from(s).forEach(e=>{var a;const t=k.parseCellId(e);if(!t)return;const{rowId:n,colId:p}=t;p===R.ROW_SELECTION_COLUMN_ID||!O.includes(p)||(L.has(n)||L.set(n,new Set),(a=L.get(n))==null||a.add(p))});const i=Array.from(L.keys()).sort((e,t)=>{const n=c.rowIdToIndex.get(e)??1/0,p=c.rowIdToIndex.get(t)??1/0;return n-p}),o=i[0],r=Array.from(L.get(o)||[]).sort((e,t)=>{const n=c.colIdToIndex.get(e)??1/0,p=c.colIdToIndex.get(t)??1/0;return n-p});for(let e=0;e<i.length;e++){const t=i[e],n=((H=k.getEntityDataById(t,$))==null?void 0:H.entityType)==="folder",p=e%d.length,a=d[p],u=y?{[r[0]]:d[0].values[0]}:N(a,r,G);for(const C of r){const I=u[C]||"";if(!Ce.validateClipboardData({colId:C,isFolder:n,pasteValue:I,parsedData:d,columnEnums:Z,columnReadOnly:ae,rowIndex:e,colIndex:r.indexOf(C),isSingleCellValue:y,attribFields:M}))return}}const f=new Map;for(let e=0;e<r.length;e++){const t=r[e];if(t==="name")continue;let n=!1,p=!1,a="string";if(i.length>0){const u=i[0];if(F(u))if(n=t.startsWith("attrib_"),p=t.startsWith("link_"),t==="status"||t==="subType")a="string",n=!1;else if(t==="tags"||t==="assignees")a="array";else if(n){const I=t.replace("attrib_",""),A=M.find(E=>E.name===I);if(A)switch(A.data.type){case"boolean":a="boolean";break;case"float":case"integer":a="number";break;case"list_of_strings":case"list_of_any":case"list_of_integers":case"list_of_submodels":a="array";break;default:a="string"}}else p&&(a="array")}for(let u=0;u<i.length;u++){const C=i[u],I=(re=k.getEntityDataById(C,$))==null?void 0:re.entityType,A=I==="folder";let E;if(y)E=d[0].values[0];else{const ne=u%d.length,_=d[ne];if(_.values.length>r.length){const D=c.colIdToIndex.get(r[0])??0,X=Array.from(c.colIdToIndex.keys()).filter(q=>q!==R.ROW_SELECTION_COLUMN_ID).sort((q,pe)=>{const ue=c.colIdToIndex.get(q)??1/0,ye=c.colIdToIndex.get(pe)??1/0;return ue-ye}),z=X.findIndex(q=>c.colIdToIndex.get(q)===D),se=X.slice(z,z+_.values.length).indexOf(t);E=_.values[se]||_.values[se%_.values.length]}else{const D=e%_.values.length;E=_.values[D]}}let P=t.split("_").pop()||t;if(t==="subType"&&(P=A?"folderType":"taskType",n=!1,!E))continue;const V=m.processFieldValue(E,a),Q=`${C}-${I}`;!f.has(Q)&&I&&f.set(Q,{rowId:C,id:C,type:I,fields:{},attrib:{},links:{}});const Y=f.get(Q);if(p){const[ne,_,D,X,z]=t.split("_");Y.links[`${_}|${D}|${X}_${z}`]=V}else n?Y.attrib[P]=V:Y.fields[P]=V}}const T=[],w=new Map;f.forEach(e=>{Object.entries(e.fields).forEach(([t,n])=>{T.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:n})}),Object.entries(e.attrib).forEach(([t,n])=>{T.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:n,isAttrib:!0})}),Object.entries(e.links).forEach(([t,n])=>{const[p,a]=t.split("_"),u=p.split("|");if(u.length>=3){const C=u[0],I=u[1],A=u[2],E=`${C}|${I}|${A}`,P=a==="out"?A:I,V=`${e.id}-${E}-${a}`;w.set(V,{rowId:e.rowId,sourceEntityId:e.id,sourceEntityType:e.type,linkType:E,direction:a,targetEntityType:P,operation:g,targetEntityIds:Array.isArray(n)?n:[]})}})});const h=Array.from(w.values()),x=[];if(T.length>0&&x.push(ee(T)),h.length>0&&x.push(te(h)),x.length>0)try{await Promise.all(x)}catch(e){console.error("Error updating entities:",e),m.clipboardError(`Paste failed: ${e||(e==null?void 0:e.message)||"Unknown error"}`)}},[U,c,$,ee,te,Z,F,B,M]);S.useEffect(()=>{const s=async l=>{if((l.ctrlKey||l.metaKey)&&l.key==="c"&&W(),(l.ctrlKey||l.metaKey)&&l.key==="v"){const g=document.activeElement;if(g&&(g.tagName==="INPUT"||g.tagName==="TEXTAREA"||g.isContentEditable))if(await ce())l.preventDefault();else return;K(Array.from(U),{method:l.shiftKey?"merge":"replace"})}};return window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)}},[W,K]);const fe=S.useMemo(()=>({copyToClipboard:W,pasteFromClipboard:K,exportCSV:de}),[W,K]);return Ie.jsxRuntimeExports.jsx(ie.Provider,{value:fe,children:j})},he=()=>{const j=S.useContext(ie);if(j===void 0)throw new Error("useClipboard must be used within a ClipboardProvider");return j};exports.ClipboardProvider=xe;exports.useClipboard=he;
4
4
  //# sourceMappingURL=ClipboardContext.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClipboardContext.cjs.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 } 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 // 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 = (\n clipboardRow: any,\n visibleColumnIds: string[],\n clipboardHeaders?: string[],\n ) => {\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(\n (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 attribFields,\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 // 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(\n (id) => gridMap.colIdToIndex.get(id) === firstVisibleColIndex,\n )\n\n // The original copied columns are the consecutive ones starting from this position\n const originalCopiedColumns = allGridColumns.slice(\n startGridPos,\n startGridPos + clipboardRow.values.length,\n )\n\n // Find this column's position in the original copied columns\n const clipboardColIndex = originalCopiedColumns.indexOf(colId)\n pasteValue =\n clipboardRow.values[clipboardColIndex] ||\n clipboardRow.values[clipboardColIndex % clipboardRow.values.length]\n // Pasting value from hidden columns detection\n } else {\n // Normal case: map clipboard column index using modulo\n const pasteColIndex = colIndex % clipboardRow.values.length\n pasteValue = clipboardRow.values[pasteColIndex]\n // Pasting value normally\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 attribFields,\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","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","firstVisibleColIndex","allGridColumns","startGridPos","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
+ {"version":3,"file":"ClipboardContext.cjs.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 // @ts-expect-error - only complaining about missing __typename\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 } 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 // 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 = (\n clipboardRow: any,\n visibleColumnIds: string[],\n clipboardHeaders?: string[],\n ) => {\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(\n (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 attribFields,\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 field type based on type or attrib type\n if (colId === 'status' || colId === 'subType') {\n // status and subType are strings\n fieldValueType = 'string'\n // special case to avoid treating subType as attrib (not sure if this is needed)\n isAttrib = false\n } else if (colId === 'tags' || colId === 'assignees') {\n // tags and assignees are always arrays\n fieldValueType = 'array'\n } else if (isAttrib) {\n // find type based on attribFields\n const fieldName = colId.replace('attrib_', '')\n const attribField = attribFields.find((f) => f.name === fieldName)\n if (attribField) {\n const dataType = attribField.data.type\n switch (dataType) {\n case 'boolean':\n fieldValueType = 'boolean'\n break\n case 'float':\n case 'integer':\n fieldValueType = 'number'\n break\n case 'list_of_strings':\n case 'list_of_any':\n case 'list_of_integers':\n case 'list_of_submodels':\n fieldValueType = 'array'\n break\n default:\n // everything else is string\n fieldValueType = 'string'\n }\n }\n } else if (isLink) {\n // links are always arrays\n fieldValueType = 'array'\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(\n (id) => gridMap.colIdToIndex.get(id) === firstVisibleColIndex,\n )\n\n // The original copied columns are the consecutive ones starting from this position\n const originalCopiedColumns = allGridColumns.slice(\n startGridPos,\n startGridPos + clipboardRow.values.length,\n )\n\n // Find this column's position in the original copied columns\n const clipboardColIndex = originalCopiedColumns.indexOf(colId)\n pasteValue =\n clipboardRow.values[clipboardColIndex] ||\n clipboardRow.values[clipboardColIndex % clipboardRow.values.length]\n // Pasting value from hidden columns detection\n } else {\n // Normal case: map clipboard column index using modulo\n const pasteColIndex = colIndex % clipboardRow.values.length\n pasteValue = clipboardRow.values[pasteColIndex]\n // Pasting value normally\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 attribFields,\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","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","fieldName","attribField","entityType","firstVisibleColIndex","allGridColumns","startGridPos","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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"}