@ynput/ayon-frontend-shared 0.2.38 → 0.2.40

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 (651) hide show
  1. package/dist/DetailsPanel.cjs.js +1 -1
  2. package/dist/DetailsPanel.es.js +72 -66
  3. package/dist/DetailsPanel.es.js.map +1 -1
  4. package/dist/ProjectTreeTable.cjs.js +1 -1
  5. package/dist/ProjectTreeTable.es.js +169 -167
  6. package/dist/ProjectTreeTable.es.js.map +1 -1
  7. package/dist/Views.cjs.js.map +1 -1
  8. package/dist/Views.es.js.map +1 -1
  9. package/dist/_virtual/index.cjs10.js +1 -1
  10. package/dist/_virtual/index.cjs11.js +1 -1
  11. package/dist/_virtual/index.cjs12.js +1 -1
  12. package/dist/_virtual/index.cjs2.js +1 -1
  13. package/dist/_virtual/index.cjs3.js +1 -1
  14. package/dist/_virtual/index.cjs4.js +1 -1
  15. package/dist/_virtual/index.es10.js +3 -3
  16. package/dist/_virtual/index.es11.js +5 -5
  17. package/dist/_virtual/index.es12.js +5 -5
  18. package/dist/_virtual/index.es2.js +5 -2
  19. package/dist/_virtual/index.es2.js.map +1 -1
  20. package/dist/_virtual/index.es3.js +2 -5
  21. package/dist/_virtual/index.es3.js.map +1 -1
  22. package/dist/_virtual/index.es4.js +2 -2
  23. package/dist/api.cjs.js +1 -1
  24. package/dist/api.es.js +22 -20
  25. package/dist/api.es.js.map +1 -1
  26. package/dist/components.cjs.js +1 -1
  27. package/dist/components.es.js +139 -133
  28. package/dist/components.es.js.map +1 -1
  29. package/dist/context.cjs.js +1 -1
  30. package/dist/context.es.js +45 -38
  31. package/dist/context.es.js.map +1 -1
  32. package/dist/index.cjs.js +1 -1
  33. package/dist/index.es.js +61 -55
  34. package/dist/index.es.js.map +1 -1
  35. package/dist/node_modules/react-use-websocket/dist/index.cjs.js +1 -1
  36. package/dist/node_modules/react-use-websocket/dist/index.es.js +1 -1
  37. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  38. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  39. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  40. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  41. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  42. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  43. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  44. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  45. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  46. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  47. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  48. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  49. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  50. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  51. package/dist/shared/src/api/generated/graphql.cjs.js +4 -0
  52. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  53. package/dist/shared/src/api/generated/graphql.es.js +4 -0
  54. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  55. package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
  56. package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
  57. package/dist/shared/src/api/generated/views.cjs.js.map +1 -1
  58. package/dist/shared/src/api/generated/views.es.js.map +1 -1
  59. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
  60. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  61. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +8 -3
  62. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  63. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
  64. package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
  65. package/dist/shared/src/api/queries/entities/updateEntity.es.js +4 -3
  66. package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
  67. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js +1 -1
  68. package/dist/shared/src/api/queries/overview/updateOverview.cjs.js.map +1 -1
  69. package/dist/shared/src/api/queries/overview/updateOverview.es.js +70 -66
  70. package/dist/shared/src/api/queries/overview/updateOverview.es.js.map +1 -1
  71. package/dist/shared/src/api/queries/uris/getUris.cjs.js +2 -0
  72. package/dist/shared/src/api/queries/uris/getUris.cjs.js.map +1 -0
  73. package/dist/shared/src/api/queries/uris/getUris.es.js +47 -0
  74. package/dist/shared/src/api/queries/uris/getUris.es.js.map +1 -0
  75. package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
  76. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  77. package/dist/shared/src/api/queries/users/getUsers.es.js +19 -18
  78. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  79. package/dist/shared/src/components/AddonLoadingScreen/AddonLoadingScreen.cjs.js +28 -0
  80. package/dist/shared/src/components/AddonLoadingScreen/AddonLoadingScreen.cjs.js.map +1 -0
  81. package/dist/shared/src/components/AddonLoadingScreen/AddonLoadingScreen.es.js +54 -0
  82. package/dist/shared/src/components/AddonLoadingScreen/AddonLoadingScreen.es.js.map +1 -0
  83. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js +1 -1
  84. package/dist/shared/src/components/DetailsDialog/DetailsDialog.cjs.js.map +1 -1
  85. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js +3 -2
  86. package/dist/shared/src/components/DetailsDialog/DetailsDialog.es.js.map +1 -1
  87. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +1 -1
  88. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  89. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +5 -2
  90. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  91. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js +1 -1
  92. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.cjs.js.map +1 -1
  93. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js +5 -2
  94. package/dist/shared/src/components/DetailsPanelDetails/DescriptionSection.es.js.map +1 -1
  95. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js +1 -1
  96. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.cjs.js.map +1 -1
  97. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js +5 -2
  98. package/dist/shared/src/components/DetailsPanelDetails/DetailsPanelDetails.es.js.map +1 -1
  99. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js +1 -1
  100. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.cjs.js.map +1 -1
  101. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js +5 -2
  102. package/dist/shared/src/components/DetailsPanelDetails/hooks/useEntityEditing.es.js.map +1 -1
  103. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js +1 -1
  104. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.cjs.js.map +1 -1
  105. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js +75 -69
  106. package/dist/shared/src/components/EntityPanelUploader/EntityPanelUploader.es.js.map +1 -1
  107. package/dist/shared/src/components/EntityPath/EntityPath.cjs.js +1 -1
  108. package/dist/shared/src/components/EntityPath/EntityPath.cjs.js.map +1 -1
  109. package/dist/shared/src/components/EntityPath/EntityPath.es.js +51 -53
  110. package/dist/shared/src/components/EntityPath/EntityPath.es.js.map +1 -1
  111. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js +1 -1
  112. package/dist/shared/src/components/EntityPath/SegmentProvider.cjs.js.map +1 -1
  113. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js +4 -2
  114. package/dist/shared/src/components/EntityPath/SegmentProvider.es.js.map +1 -1
  115. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js +1 -1
  116. package/dist/shared/src/components/Feedback/FeedbackContext.cjs.js.map +1 -1
  117. package/dist/shared/src/components/Feedback/FeedbackContext.es.js +7 -4
  118. package/dist/shared/src/components/Feedback/FeedbackContext.es.js.map +1 -1
  119. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js +1 -1
  120. package/dist/shared/src/components/LinksManager/AddNewLinks.cjs.js.map +1 -1
  121. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js +60 -54
  122. package/dist/shared/src/components/LinksManager/AddNewLinks.es.js.map +1 -1
  123. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
  124. package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
  125. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +3 -2
  126. package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
  127. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js +1 -1
  128. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.cjs.js.map +1 -1
  129. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js +66 -60
  130. package/dist/shared/src/components/LinksManager/hooks/useUpdateLinks.es.js.map +1 -1
  131. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js +1 -1
  132. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.cjs.js.map +1 -1
  133. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js +5 -2
  134. package/dist/shared/src/components/ListAttributeForm/ListAttributeForm.es.js.map +1 -1
  135. package/dist/shared/src/components/Menu/Menu.cjs.js +2 -0
  136. package/dist/shared/src/components/Menu/Menu.cjs.js.map +1 -0
  137. package/dist/shared/src/components/Menu/Menu.es.js +92 -0
  138. package/dist/shared/src/components/Menu/Menu.es.js.map +1 -0
  139. package/dist/shared/src/components/Menu/Menu.styled.cjs.js.map +1 -0
  140. package/dist/shared/src/components/Menu/Menu.styled.es.js.map +1 -0
  141. package/dist/shared/src/components/Menu/MenuContainer.cjs.js +2 -0
  142. package/dist/shared/src/components/Menu/MenuContainer.cjs.js.map +1 -0
  143. package/dist/shared/src/components/Menu/MenuContainer.es.js +88 -0
  144. package/dist/shared/src/components/Menu/MenuContainer.es.js.map +1 -0
  145. package/dist/shared/src/components/Menu/MenuItem.cjs.js +2 -0
  146. package/dist/shared/src/components/Menu/MenuItem.cjs.js.map +1 -0
  147. package/dist/{src/components/Menu/MenuComponents → shared/src/components/Menu}/MenuItem.es.js +26 -24
  148. package/dist/shared/src/components/Menu/MenuItem.es.js.map +1 -0
  149. package/dist/shared/src/components/Menu/MenuList.cjs.js +2 -0
  150. package/dist/shared/src/components/Menu/MenuList.cjs.js.map +1 -0
  151. package/dist/shared/src/components/Menu/MenuList.es.js +131 -0
  152. package/dist/shared/src/components/Menu/MenuList.es.js.map +1 -0
  153. package/dist/shared/src/components/Menu/useMenuPosition.cjs.js +2 -0
  154. package/dist/shared/src/components/Menu/useMenuPosition.cjs.js.map +1 -0
  155. package/dist/shared/src/components/Menu/useMenuPosition.es.js +50 -0
  156. package/dist/shared/src/components/Menu/useMenuPosition.es.js.map +1 -0
  157. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js +1 -1
  158. package/dist/shared/src/components/Powerpack/PowerpackButton.cjs.js.map +1 -1
  159. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js +7 -5
  160. package/dist/shared/src/components/Powerpack/PowerpackButton.es.js.map +1 -1
  161. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js +1 -1
  162. package/dist/shared/src/components/Powerpack/PowerpackDialog.cjs.js.map +1 -1
  163. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js +49 -43
  164. package/dist/shared/src/components/Powerpack/PowerpackDialog.es.js.map +1 -1
  165. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js +1 -1
  166. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.cjs.js.map +1 -1
  167. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js +46 -40
  168. package/dist/shared/src/components/ProjectTableSettings/ProjectTableSettings.es.js.map +1 -1
  169. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js +1 -1
  170. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.cjs.js.map +1 -1
  171. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js +48 -42
  172. package/dist/shared/src/components/ProjectTableSettings/TableSettingsFallback.es.js.map +1 -1
  173. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js +1 -1
  174. package/dist/shared/src/components/RenameForm/RenameForm.cjs.js.map +1 -1
  175. package/dist/shared/src/components/RenameForm/RenameForm.es.js +66 -60
  176. package/dist/shared/src/components/RenameForm/RenameForm.es.js.map +1 -1
  177. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js +1 -1
  178. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.cjs.js.map +1 -1
  179. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js +3 -2
  180. package/dist/shared/src/components/ReviewablesList/EditReviewableDialog.es.js.map +1 -1
  181. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js +1 -1
  182. package/dist/shared/src/components/ReviewablesList/ReviewablesList.cjs.js.map +1 -1
  183. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js +64 -58
  184. package/dist/shared/src/components/ReviewablesList/ReviewablesList.es.js.map +1 -1
  185. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js +1 -1
  186. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.cjs.js.map +1 -1
  187. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js +54 -48
  188. package/dist/shared/src/components/ReviewablesList/ReviewablesUpload.es.js.map +1 -1
  189. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js +1 -1
  190. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.cjs.js.map +1 -1
  191. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js +53 -47
  192. package/dist/shared/src/components/ReviewablesList/SortableReviewableCard.es.js.map +1 -1
  193. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js +1 -1
  194. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.cjs.js.map +1 -1
  195. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js +3 -2
  196. package/dist/shared/src/components/ReviewablesList/useReviewablesUpload.es.js.map +1 -1
  197. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js +1 -1
  198. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.cjs.js.map +1 -1
  199. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js +219 -190
  200. package/dist/shared/src/components/SearchFilter/useBuildFilterOptions.es.js.map +1 -1
  201. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js +2 -2
  202. package/dist/shared/src/components/SettingsPanel/SettingsPanel.cjs.js.map +1 -1
  203. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js +20 -18
  204. package/dist/shared/src/components/SettingsPanel/SettingsPanel.es.js.map +1 -1
  205. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js +1 -1
  206. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.cjs.js.map +1 -1
  207. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js +52 -46
  208. package/dist/shared/src/components/SimpleFormDialog/SimpleFormDialog.es.js.map +1 -1
  209. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js +2 -2
  210. package/dist/shared/src/components/Thumbnail/StackedThumbnails.cjs.js.map +1 -1
  211. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js +13 -11
  212. package/dist/shared/src/components/Thumbnail/StackedThumbnails.es.js.map +1 -1
  213. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js +2 -2
  214. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.cjs.js.map +1 -1
  215. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js +56 -50
  216. package/dist/shared/src/components/VersionUploader/components/UploadVersionForm.es.js.map +1 -1
  217. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js +1 -1
  218. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.cjs.js.map +1 -1
  219. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js +5 -4
  220. package/dist/shared/src/components/VersionUploader/context/VersionUploadContext.es.js.map +1 -1
  221. package/dist/shared/src/components/Watchers/Watchers.cjs.js +1 -1
  222. package/dist/shared/src/components/Watchers/Watchers.cjs.js.map +1 -1
  223. package/dist/shared/src/components/Watchers/Watchers.es.js +3 -2
  224. package/dist/shared/src/components/Watchers/Watchers.es.js.map +1 -1
  225. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js +1 -1
  226. package/dist/shared/src/containers/Actions/ActionConfigDialog.cjs.js.map +1 -1
  227. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js +53 -47
  228. package/dist/shared/src/containers/Actions/ActionConfigDialog.es.js.map +1 -1
  229. package/dist/shared/src/containers/Actions/Actions.cjs.js +1 -1
  230. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  231. package/dist/shared/src/containers/Actions/Actions.es.js +5 -2
  232. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  233. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js +1 -1
  234. package/dist/shared/src/containers/Actions/InteractiveActionDialog.cjs.js.map +1 -1
  235. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js +54 -48
  236. package/dist/shared/src/containers/Actions/InteractiveActionDialog.es.js.map +1 -1
  237. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  238. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  239. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +293 -229
  240. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  241. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js +10 -4
  242. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.cjs.js.map +1 -1
  243. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js +13 -7
  244. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.styled.es.js.map +1 -1
  245. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js +1 -1
  246. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.cjs.js.map +1 -1
  247. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js +49 -43
  248. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFiles/DetailsPanelFiles.es.js.map +1 -1
  249. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js +1 -1
  250. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.cjs.js.map +1 -1
  251. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js +68 -62
  252. package/dist/shared/src/containers/DetailsPanel/DetailsPanelFloating/DetailsPanelFloating.es.js.map +1 -1
  253. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +1 -1
  254. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  255. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +92 -86
  256. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  257. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js +1 -1
  258. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.cjs.js.map +1 -1
  259. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js +9 -5
  260. package/dist/shared/src/containers/DetailsPanel/DetailsPanelSlideOut/DetailsPanelSlideOut.es.js.map +1 -1
  261. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js +1 -1
  262. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.cjs.js.map +1 -1
  263. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js +194 -5
  264. package/dist/shared/src/containers/DetailsPanel/FeedContextWrapper.es.js.map +1 -1
  265. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js +1 -1
  266. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.cjs.js.map +1 -1
  267. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js +4 -2
  268. package/dist/shared/src/containers/DetailsPanel/FeedWrapper.es.js.map +1 -1
  269. package/dist/shared/src/containers/DetailsPanel/hooks/useDetailsPanelURLSync.cjs.js +2 -0
  270. package/dist/shared/src/containers/DetailsPanel/hooks/useDetailsPanelURLSync.cjs.js.map +1 -0
  271. package/dist/shared/src/containers/DetailsPanel/hooks/useDetailsPanelURLSync.es.js +21 -0
  272. package/dist/shared/src/containers/DetailsPanel/hooks/useDetailsPanelURLSync.es.js.map +1 -0
  273. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js +1 -1
  274. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.cjs.js.map +1 -1
  275. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js +20 -17
  276. package/dist/shared/src/containers/DetailsPanel/hooks/useGetEntityPath.es.js.map +1 -1
  277. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js +1 -1
  278. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.cjs.js.map +1 -1
  279. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js +49 -43
  280. package/dist/shared/src/containers/EntityPickerDialog/EntityPickerDialog.es.js.map +1 -1
  281. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js +1 -1
  282. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.cjs.js.map +1 -1
  283. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js +53 -47
  284. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTable.es.js.map +1 -1
  285. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js +1 -1
  286. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.cjs.js.map +1 -1
  287. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js +53 -47
  288. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableHeader.es.js.map +1 -1
  289. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js +1 -1
  290. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.cjs.js.map +1 -1
  291. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js +53 -47
  292. package/dist/shared/src/containers/EntityPickerDialog/components/EntityTypeTableSearch.es.js.map +1 -1
  293. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js +1 -1
  294. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.cjs.js.map +1 -1
  295. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js +5 -2
  296. package/dist/shared/src/containers/EntityPickerDialog/hooks/useGetEntityPickerData.es.js.map +1 -1
  297. package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
  298. package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
  299. package/dist/shared/src/containers/Feed/Feed.es.js +109 -99
  300. package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
  301. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  302. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  303. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +446 -212
  304. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  305. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js +20 -16
  306. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.cjs.js.map +1 -1
  307. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js +21 -17
  308. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.styled.es.js.map +1 -1
  309. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js +2 -0
  310. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.cjs.js.map +1 -0
  311. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js +288 -0
  312. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityCommentMenu.es.js.map +1 -0
  313. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js +1 -1
  314. package/dist/shared/src/containers/Feed/components/ActivityItem.cjs.js.map +1 -1
  315. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js +23 -11
  316. package/dist/shared/src/containers/Feed/components/ActivityItem.es.js.map +1 -1
  317. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js +1 -1
  318. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.cjs.js.map +1 -1
  319. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js +4 -2
  320. package/dist/shared/src/containers/Feed/components/ActivityVersions/ActivityVersions.es.js.map +1 -1
  321. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js +2 -2
  322. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.cjs.js.map +1 -1
  323. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js +372 -183
  324. package/dist/shared/src/containers/Feed/components/CommentInput/CommentInput.es.js.map +1 -1
  325. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js +1 -1
  326. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.cjs.js.map +1 -1
  327. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js +4 -2
  328. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useAnnotationsSync.es.js.map +1 -1
  329. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js +1 -1
  330. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.cjs.js.map +1 -1
  331. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js +12 -10
  332. package/dist/shared/src/containers/Feed/components/CommentInput/hooks/useMentionLink.es.js.map +1 -1
  333. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js +1 -1
  334. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.cjs.js.map +1 -1
  335. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js +28 -26
  336. package/dist/shared/src/containers/Feed/components/FileUploadCard/FileUploadCard.es.js.map +1 -1
  337. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js +1 -1
  338. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.cjs.js.map +1 -1
  339. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js +194 -5
  340. package/dist/shared/src/containers/Feed/components/Tooltips/EntityTooltip/EntityTooltip.es.js.map +1 -1
  341. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +1 -1
  342. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  343. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +8 -5
  344. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  345. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js +1 -1
  346. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.cjs.js.map +1 -1
  347. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js +3 -2
  348. package/dist/shared/src/containers/Feed/hooks/useGetFeedActivitiesData.es.js.map +1 -1
  349. package/dist/shared/src/containers/Feed/hooks/useScrollToHighlighted.cjs.js +1 -1
  350. package/dist/shared/src/containers/Feed/hooks/useScrollToHighlighted.cjs.js.map +1 -1
  351. package/dist/shared/src/containers/Feed/hooks/useScrollToHighlighted.es.js +24 -26
  352. package/dist/shared/src/containers/Feed/hooks/useScrollToHighlighted.es.js.map +1 -1
  353. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +1 -1
  354. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  355. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +434 -435
  356. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  357. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  358. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  359. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +126 -120
  360. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  361. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js +2 -2
  362. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.cjs.js.map +1 -1
  363. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js +52 -46
  364. package/dist/shared/src/containers/ProjectTreeTable/components/ColumnHeaderMenu.es.js.map +1 -1
  365. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js +1 -1
  366. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js.map +1 -1
  367. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js +57 -51
  368. package/dist/shared/src/containers/ProjectTreeTable/components/GroupSettingsFallback.es.js.map +1 -1
  369. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  370. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  371. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +79 -72
  372. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  373. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js +1 -1
  374. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.cjs.js.map +1 -1
  375. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js +7 -4
  376. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectDataContext.es.js.map +1 -1
  377. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  378. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  379. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  380. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  381. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +72 -65
  382. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  383. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js +1 -1
  384. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.cjs.js.map +1 -1
  385. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js +47 -41
  386. package/dist/shared/src/containers/ProjectTreeTable/context/SelectionCellsProvider.es.js.map +1 -1
  387. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js +1 -1
  388. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.cjs.js.map +1 -1
  389. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js +12 -10
  390. package/dist/shared/src/containers/ProjectTreeTable/hooks/useAttributesList.es.js.map +1 -1
  391. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  392. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  393. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +8 -5
  394. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  395. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  396. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  397. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +5 -2
  398. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  399. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js +1 -1
  400. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.cjs.js.map +1 -1
  401. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js +55 -49
  402. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCellContextMenu.es.js.map +1 -1
  403. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js +1 -1
  404. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.cjs.js.map +1 -1
  405. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js +81 -66
  406. package/dist/shared/src/containers/ProjectTreeTable/hooks/useCheckSelectedCellsVisible.es.js.map +1 -1
  407. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js +1 -1
  408. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.cjs.js.map +1 -1
  409. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js +51 -45
  410. package/dist/shared/src/containers/ProjectTreeTable/hooks/useColumnGroupBy.es.js.map +1 -1
  411. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js +1 -1
  412. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.cjs.js.map +1 -1
  413. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js +106 -111
  414. package/dist/shared/src/containers/ProjectTreeTable/hooks/useFetchOverviewData.es.js.map +1 -1
  415. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js +1 -1
  416. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.cjs.js.map +1 -1
  417. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js +51 -45
  418. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGetGroupedFields.es.js.map +1 -1
  419. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js +1 -1
  420. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.cjs.js.map +1 -1
  421. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js +51 -45
  422. package/dist/shared/src/containers/ProjectTreeTable/hooks/useGroupBySettings.es.js.map +1 -1
  423. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js +1 -1
  424. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.cjs.js.map +1 -1
  425. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js +54 -48
  426. package/dist/shared/src/containers/ProjectTreeTable/hooks/useKeyboardNavigation.es.js.map +1 -1
  427. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js +1 -1
  428. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.cjs.js.map +1 -1
  429. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js +122 -119
  430. package/dist/shared/src/containers/ProjectTreeTable/hooks/useMoveEntities.es.js.map +1 -1
  431. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js +1 -1
  432. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.cjs.js.map +1 -1
  433. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js +61 -55
  434. package/dist/shared/src/containers/ProjectTreeTable/hooks/usePasteLinks.es.js.map +1 -1
  435. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js +1 -1
  436. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.cjs.js.map +1 -1
  437. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js +45 -39
  438. package/dist/shared/src/containers/ProjectTreeTable/hooks/useQueryFilters.es.js.map +1 -1
  439. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  440. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  441. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +98 -94
  442. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  443. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js +1 -1
  444. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.cjs.js.map +1 -1
  445. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js +62 -56
  446. package/dist/shared/src/containers/ProjectTreeTable/utils/cellUtils.es.js.map +1 -1
  447. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js +1 -1
  448. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.cjs.js.map +1 -1
  449. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js +22 -20
  450. package/dist/shared/src/containers/ProjectTreeTable/utils/queryFilterToClientFilter.es.js.map +1 -1
  451. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  452. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  453. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +19 -17
  454. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  455. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
  456. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
  457. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +68 -62
  458. package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
  459. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js +1 -1
  460. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.cjs.js.map +1 -1
  461. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js +51 -45
  462. package/dist/shared/src/containers/ProjectTreeTable/widgets/NameWidget.es.js.map +1 -1
  463. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js +1 -1
  464. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.cjs.js.map +1 -1
  465. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js +45 -44
  466. package/dist/shared/src/containers/ProjectTreeTable/widgets/TextWidgetInput.es.js.map +1 -1
  467. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js +1 -1
  468. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.cjs.js.map +1 -1
  469. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js +120 -114
  470. package/dist/shared/src/containers/RepresentationsList/RepresentationsList.es.js.map +1 -1
  471. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js +1 -1
  472. package/dist/shared/src/containers/SimpleTable/SimpleTable.cjs.js.map +1 -1
  473. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js +53 -47
  474. package/dist/shared/src/containers/SimpleTable/SimpleTable.es.js.map +1 -1
  475. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js +1 -1
  476. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.cjs.js.map +1 -1
  477. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js +5 -2
  478. package/dist/shared/src/containers/Views/ViewsDialogContainer/ViewsDialogContainer.es.js.map +1 -1
  479. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js +1 -1
  480. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js.map +1 -1
  481. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js +14 -12
  482. package/dist/shared/src/containers/Views/ViewsMenuContainer/ViewsMenuContainer.es.js.map +1 -1
  483. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
  484. package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
  485. package/dist/shared/src/containers/Views/context/ViewsContext.es.js +90 -91
  486. package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
  487. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js +1 -1
  488. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.cjs.js.map +1 -1
  489. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js +5 -2
  490. package/dist/shared/src/containers/Views/hooks/useBuildViewMenuItems.es.js.map +1 -1
  491. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js +1 -1
  492. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.cjs.js.map +1 -1
  493. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js +5 -2
  494. package/dist/shared/src/containers/Views/hooks/useSaveViewFromCurrent.es.js.map +1 -1
  495. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js +1 -1
  496. package/dist/shared/src/containers/Views/hooks/useSelectedView.cjs.js.map +1 -1
  497. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js +3 -2
  498. package/dist/shared/src/containers/Views/hooks/useSelectedView.es.js.map +1 -1
  499. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
  500. package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
  501. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +3 -2
  502. package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
  503. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
  504. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
  505. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +3 -2
  506. package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
  507. package/dist/shared/src/context/AddonProjectContext.cjs.js +1 -1
  508. package/dist/shared/src/context/AddonProjectContext.cjs.js.map +1 -1
  509. package/dist/shared/src/context/AddonProjectContext.es.js +5 -4
  510. package/dist/shared/src/context/AddonProjectContext.es.js.map +1 -1
  511. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  512. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  513. package/dist/shared/src/context/DetailsPanelContext.es.js +117 -75
  514. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  515. package/dist/shared/src/context/GlobalContext.cjs.js +1 -1
  516. package/dist/shared/src/context/GlobalContext.cjs.js.map +1 -1
  517. package/dist/shared/src/context/GlobalContext.es.js +5 -4
  518. package/dist/shared/src/context/GlobalContext.es.js.map +1 -1
  519. package/dist/shared/src/context/PowerpackContext.cjs.js +1 -1
  520. package/dist/shared/src/context/PowerpackContext.cjs.js.map +1 -1
  521. package/dist/shared/src/context/PowerpackContext.es.js +18 -15
  522. package/dist/shared/src/context/PowerpackContext.es.js.map +1 -1
  523. package/dist/shared/src/context/ProjectContext.cjs.js +1 -1
  524. package/dist/shared/src/context/ProjectContext.cjs.js.map +1 -1
  525. package/dist/shared/src/context/ProjectContext.es.js +44 -40
  526. package/dist/shared/src/context/ProjectContext.es.js.map +1 -1
  527. package/dist/shared/src/context/ProjectFoldersContext.cjs.js +2 -0
  528. package/dist/shared/src/context/ProjectFoldersContext.cjs.js.map +1 -0
  529. package/dist/shared/src/context/ProjectFoldersContext.es.js +177 -0
  530. package/dist/shared/src/context/ProjectFoldersContext.es.js.map +1 -0
  531. package/dist/shared/src/context/RemoteModulesContext.cjs.js +1 -1
  532. package/dist/shared/src/context/RemoteModulesContext.cjs.js.map +1 -1
  533. package/dist/shared/src/context/RemoteModulesContext.es.js +5 -4
  534. package/dist/shared/src/context/RemoteModulesContext.es.js.map +1 -1
  535. package/dist/shared/src/context/UriContext.cjs.js +2 -0
  536. package/dist/shared/src/context/UriContext.cjs.js.map +1 -0
  537. package/dist/shared/src/context/UriContext.es.js +131 -0
  538. package/dist/shared/src/context/UriContext.es.js.map +1 -0
  539. package/dist/shared/src/context/WebsocketContext.cjs.js +1 -1
  540. package/dist/shared/src/context/WebsocketContext.cjs.js.map +1 -1
  541. package/dist/shared/src/context/WebsocketContext.es.js +51 -45
  542. package/dist/shared/src/context/WebsocketContext.es.js.map +1 -1
  543. package/dist/shared/src/hooks/useActionTriggers.cjs.js +1 -1
  544. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  545. package/dist/shared/src/hooks/useActionTriggers.es.js +3 -2
  546. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  547. package/dist/shared/src/hooks/useEntityUpdate.cjs.js +1 -1
  548. package/dist/shared/src/hooks/useEntityUpdate.cjs.js.map +1 -1
  549. package/dist/shared/src/hooks/useEntityUpdate.es.js +5 -2
  550. package/dist/shared/src/hooks/useEntityUpdate.es.js.map +1 -1
  551. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js +1 -1
  552. package/dist/shared/src/hooks/useGetEntityGroups.cjs.js.map +1 -1
  553. package/dist/shared/src/hooks/useGetEntityGroups.es.js +3 -2
  554. package/dist/shared/src/hooks/useGetEntityGroups.es.js.map +1 -1
  555. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js +1 -1
  556. package/dist/shared/src/hooks/useGroupByRemoteModules.cjs.js.map +1 -1
  557. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js +5 -2
  558. package/dist/shared/src/hooks/useGroupByRemoteModules.es.js.map +1 -1
  559. package/dist/shared/src/hooks/useHierarchyTable.cjs.js +1 -1
  560. package/dist/shared/src/hooks/useHierarchyTable.cjs.js.map +1 -1
  561. package/dist/shared/src/hooks/useHierarchyTable.es.js +43 -119
  562. package/dist/shared/src/hooks/useHierarchyTable.es.js.map +1 -1
  563. package/dist/shared/src/hooks/useScopedStatuses.cjs.js +1 -1
  564. package/dist/shared/src/hooks/useScopedStatuses.cjs.js.map +1 -1
  565. package/dist/shared/src/hooks/useScopedStatuses.es.js +5 -4
  566. package/dist/shared/src/hooks/useScopedStatuses.es.js.map +1 -1
  567. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js +1 -1
  568. package/dist/shared/src/hooks/useUserProjectConfig.cjs.js.map +1 -1
  569. package/dist/shared/src/hooks/useUserProjectConfig.es.js +5 -2
  570. package/dist/shared/src/hooks/useUserProjectConfig.es.js.map +1 -1
  571. package/dist/shared/src/util/extractEntityHierarchyFromParents.cjs.js +2 -0
  572. package/dist/shared/src/util/extractEntityHierarchyFromParents.cjs.js.map +1 -0
  573. package/dist/shared/src/util/extractEntityHierarchyFromParents.es.js +25 -0
  574. package/dist/shared/src/util/extractEntityHierarchyFromParents.es.js.map +1 -0
  575. package/dist/shared/src/util/uriUtils.cjs.js +2 -0
  576. package/dist/shared/src/util/uriUtils.cjs.js.map +1 -0
  577. package/dist/shared/src/util/uriUtils.es.js +49 -0
  578. package/dist/shared/src/util/uriUtils.es.js.map +1 -0
  579. package/dist/types/api/generated/graphql.d.ts +55 -4
  580. package/dist/types/api/generated/graphqlLinks.d.ts +47 -0
  581. package/dist/types/api/generated/views.d.ts +15 -13
  582. package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +1 -0
  583. package/dist/types/api/queries/entityLists/getLists.d.ts +180 -180
  584. package/dist/types/api/queries/index.d.ts +1 -0
  585. package/dist/types/api/queries/uris/getUris.d.ts +161 -0
  586. package/dist/types/api/queries/uris/index.d.ts +1 -0
  587. package/dist/types/components/AddonLoadingScreen/AddonLoadingScreen.d.ts +25 -0
  588. package/dist/types/components/AddonLoadingScreen/index.d.ts +1 -0
  589. package/dist/types/components/Menu/Menu.d.ts +30 -0
  590. package/dist/types/components/Menu/Menu.styled.d.ts +8 -0
  591. package/dist/types/components/Menu/MenuContainer.d.ts +14 -0
  592. package/dist/types/components/Menu/MenuItem.d.ts +21 -0
  593. package/dist/types/components/Menu/MenuList.d.ts +21 -0
  594. package/dist/types/components/Menu/index.d.ts +4 -0
  595. package/dist/types/components/Menu/useMenuPosition.d.ts +12 -0
  596. package/dist/types/components/SearchFilter/useBuildFilterOptions.d.ts +3 -1
  597. package/dist/types/components/index.d.ts +32 -31
  598. package/dist/types/containers/DetailsPanel/DetailsPanel.d.ts +6 -2
  599. package/dist/types/containers/DetailsPanel/FeedWrapper.d.ts +1 -0
  600. package/dist/types/containers/DetailsPanel/hooks/useDetailsPanelURLSync.d.ts +12 -0
  601. package/dist/types/containers/Feed/Feed.d.ts +2 -1
  602. package/dist/types/containers/Feed/components/ActivityComment/ActivityComment.d.ts +2 -1
  603. package/dist/types/containers/Feed/components/ActivityComment/ActivityCommentMenu.d.ts +9 -0
  604. package/dist/types/containers/Feed/components/ActivityItem.d.ts +1 -0
  605. package/dist/types/containers/Feed/hooks/useScrollToHighlighted.d.ts +2 -1
  606. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +2 -0
  607. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +4 -1
  608. package/dist/types/containers/ProjectTreeTable/hooks/useUpdateTableData.d.ts +1 -0
  609. package/dist/types/containers/Views/index.d.ts +1 -1
  610. package/dist/types/context/AddonProjectContext.d.ts +12 -7
  611. package/dist/types/context/DetailsPanelContext.d.ts +1 -0
  612. package/dist/types/context/ProjectFoldersContext.d.ts +19 -0
  613. package/dist/types/context/UriContext.d.ts +40 -0
  614. package/dist/types/context/index.d.ts +2 -0
  615. package/dist/types/hooks/useGroupByRemoteModules.d.ts +1 -2
  616. package/dist/types/util/extractEntityHierarchyFromParents.d.ts +6 -0
  617. package/dist/types/util/index.d.ts +2 -0
  618. package/dist/types/util/uriUtils.d.ts +15 -0
  619. package/dist/util.cjs.js +1 -1
  620. package/dist/util.es.js +44 -37
  621. package/dist/util.es.js.map +1 -1
  622. package/package.json +1 -1
  623. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js +0 -2
  624. package/dist/shared/src/components/RemotePage/RemotePageWrapper.cjs.js.map +0 -1
  625. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js +0 -263
  626. package/dist/shared/src/components/RemotePage/RemotePageWrapper.es.js.map +0 -1
  627. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js +0 -2
  628. package/dist/src/components/Menu/MenuComponents/Menu.cjs.js.map +0 -1
  629. package/dist/src/components/Menu/MenuComponents/Menu.es.js +0 -82
  630. package/dist/src/components/Menu/MenuComponents/Menu.es.js.map +0 -1
  631. package/dist/src/components/Menu/MenuComponents/Menu.styled.cjs.js.map +0 -1
  632. package/dist/src/components/Menu/MenuComponents/Menu.styled.es.js.map +0 -1
  633. package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js +0 -2
  634. package/dist/src/components/Menu/MenuComponents/MenuContainer2.cjs.js.map +0 -1
  635. package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js +0 -80
  636. package/dist/src/components/Menu/MenuComponents/MenuContainer2.es.js.map +0 -1
  637. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js +0 -2
  638. package/dist/src/components/Menu/MenuComponents/MenuItem.cjs.js.map +0 -1
  639. package/dist/src/components/Menu/MenuComponents/MenuItem.es.js.map +0 -1
  640. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js +0 -2
  641. package/dist/src/components/Menu/MenuComponents/MenuList.cjs.js.map +0 -1
  642. package/dist/src/components/Menu/MenuComponents/MenuList.es.js +0 -135
  643. package/dist/src/components/Menu/MenuComponents/MenuList.es.js.map +0 -1
  644. package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js +0 -2
  645. package/dist/src/components/Menu/MenuComponents/useMenuPosition.cjs.js.map +0 -1
  646. package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js +0 -35
  647. package/dist/src/components/Menu/MenuComponents/useMenuPosition.es.js.map +0 -1
  648. package/dist/types/components/RemotePage/RemotePageWrapper.d.ts +0 -29
  649. package/dist/types/components/RemotePage/index.d.ts +0 -1
  650. /package/dist/{src/components/Menu/MenuComponents → shared/src/components/Menu}/Menu.styled.cjs.js +0 -0
  651. /package/dist/{src/components/Menu/MenuComponents → shared/src/components/Menu}/Menu.styled.es.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","_a","folderId","_b","productId","_c","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPanelUploader.cjs.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","_a","folderId","_b","productId","_c","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
@@ -22,6 +22,8 @@ import "../../context/MenuContext.es.js";
22
22
  import "../../context/WebsocketContext.es.js";
23
23
  import "../../context/GlobalContext.es.js";
24
24
  import "../../context/ProjectContext.es.js";
25
+ import "../../context/ProjectFoldersContext.es.js";
26
+ import "../../context/UriContext.es.js";
25
27
  import "../../containers/Feed/components/FileUploadPreview/FileUploadPreview.styled.es.js";
26
28
  import "../../containers/Feed/components/FileUploadPreview/Mimes/TextMime.es.js";
27
29
  import "react-markdown";
@@ -46,39 +48,10 @@ import "react-router-dom";
46
48
  import "../../containers/Feed/components/ActivityStatus/ActivityStatus.es.js";
47
49
  import "../../containers/Feed/components/ActivityHeader/ActivityHeader.styled.es.js";
48
50
  import "../../containers/Feed/components/ActivityDate.es.js";
49
- import "../../containers/Feed/components/ActivityCategorySelect/CategoryTag.es.js";
50
- import "../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.es.js";
51
- import "../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.es.js";
52
- import "../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.es.js";
53
- import "../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.es.js";
54
- import "../../containers/Feed/Feed.styled.es.js";
55
- import "date-fns";
51
+ import "../AddonLoadingScreen/AddonLoadingScreen.es.js";
52
+ import "../ThumbnailSimple/ThumbnailSimple.es.js";
56
53
  import "../EmptyPlaceholder/EmptyPlaceholder.es.js";
57
54
  import "../EmptyPlaceholder/EmptyPlaceholderFlex.styled.es.js";
58
- import "../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.es.js";
59
- import "../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.es.js";
60
- import "../../containers/ProjectTreeTable/ProjectTreeTable.es.js";
61
- import "../../containers/ProjectTreeTable/context/CellEditingContext.es.js";
62
- import "short-uuid";
63
- import "@tanstack/react-table";
64
- import "../../containers/ProjectTreeTable/widgets/CollapsedWidget.es.js";
65
- import "../../containers/ProjectTreeTable/widgets/DateWidget.es.js";
66
- import "../../containers/ProjectTreeTable/widgets/EnumWidget.es.js";
67
- import "../../containers/ProjectTreeTable/widgets/TextWidget.es.js";
68
- import "../../containers/ProjectTreeTable/widgets/BooleanWidget.es.js";
69
- import "../../containers/ProjectTreeTable/widgets/CellWidget.es.js";
70
- import "../../containers/ProjectTreeTable/widgets/EntityNameWidget.es.js";
71
- import "../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js";
72
- import "../../containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js";
73
- import "../../../../node_modules/match-sorter/dist/match-sorter.esm.es.js";
74
- import "../AccessSearchInput/AccessSearchInput.styled.es.js";
75
- import "../AccessUser/AccessUser.es.js";
76
- import "../AttributeEditor/components/MinMaxField.es.js";
77
- import "@dnd-kit/core";
78
- import "@dnd-kit/sortable";
79
- import "../EnumEditor/EnumEditor.styled.es.js";
80
- import "../Badge/Badge.es.js";
81
- import "../Chips/Chips.es.js";
82
55
  import "../../api/base/client.es.js";
83
56
  import "../../api/generated/graphql.es.js";
84
57
  import "../../api/generated/graphqlLinks.es.js";
@@ -161,50 +134,83 @@ import { useCreateVersionMutation as Dr } from "../../api/queries/versions/updat
161
134
  import "../../api/queries/views/getViews.es.js";
162
135
  import "../../api/queries/views/updateViews.es.js";
163
136
  import "../../api/queries/watchers/getWatchers.es.js";
164
- import "../DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
165
- import "../DetailsPanelDetails/DetailsPanelDetails.es.js";
166
- import "../DetailsPanelDetails/DetailsSection.es.js";
167
- import "../DetailsPanelDetails/FieldLabel.es.js";
168
- import "../EarlyPreview/EarlyPreview.es.js";
169
- import { DragAndDropWrapper as xr, DropZones as H, UploadingProgress as Pr, Progress as wr, CancelButton as yr } from "./EntityPanelUploader.styled.es.js";
170
- import jr from "./Dropzone.es.js";
171
- import Ur from "axios";
137
+ import "../../api/queries/uris/getUris.es.js";
138
+ import "@dnd-kit/core";
139
+ import "@dnd-kit/sortable";
172
140
  import "../ReviewablesList/ReviewablesList.styled.es.js";
173
141
  import "../ReviewablesList/ReviewablesUpload.styled.es.js";
174
- import { useReviewablesUpload as Ir } from "../ReviewablesList/useReviewablesUpload.es.js";
142
+ import { useReviewablesUpload as xr } from "../ReviewablesList/useReviewablesUpload.es.js";
143
+ import "../ReviewableCard/ReviewableCard.es.js";
144
+ import "../ReviewableProgressCard/ReviewableProgressCard.styled.es.js";
145
+ import "../FileThumbnail/FileThumbnail.es.js";
146
+ import "../Thumbnail/Thumbnail.styled.es.js";
147
+ import "../Thumbnail/StackedThumbnails.es.js";
148
+ import { DragAndDropWrapper as Pr, DropZones as H, UploadingProgress as wr, Progress as yr, CancelButton as jr } from "./EntityPanelUploader.styled.es.js";
149
+ import Ur from "./Dropzone.es.js";
150
+ import Ir from "axios";
175
151
  import Tr from "./EntityPanelUploaderDialog.es.js";
152
+ import "../SimpleFormDialog/SimpleFormDialog.es.js";
176
153
  import "../EntityPath/EntityPath.styled.es.js";
177
154
  import "../EntityPath/SegmentProvider.es.js";
178
- import "../FeaturedVersionOrder/FeaturedVersionOrder.es.js";
179
- import "../Feedback/FeedbackContext.es.js";
180
- import "../Feedback/SupportBubble.es.js";
181
- import "../FileThumbnail/FileThumbnail.es.js";
182
- import "../LegacyBadge/LegacyBadge.es.js";
183
- import "../LinksManager/LinksManager.styled.es.js";
184
- import "../../containers/EntityPickerDialog/EntityPickerDialog.es.js";
155
+ import "../DetailsPanelAttributes/DetailsPanelAttributesEditor.es.js";
156
+ import "../DetailsPanelDetails/DetailsPanelDetails.es.js";
157
+ import "../DetailsPanelDetails/DetailsSection.es.js";
158
+ import "../DetailsPanelDetails/FieldLabel.es.js";
159
+ import "../Watchers/Watchers.es.js";
160
+ import "../ProjectTableSettings/ProjectTableSettings.es.js";
185
161
  import "../Powerpack/PowerpackButton.es.js";
186
162
  import "../Powerpack/PricingLink.es.js";
187
163
  import "../Powerpack/PowerpackDialog.styled.es.js";
188
164
  import "../Powerpack/CTAButton.es.js";
189
165
  import "../Powerpack/RequiredAddonVersion.es.js";
190
- import "../ProjectTableSettings/ProjectTableSettings.es.js";
191
166
  import "../SizeSlider/SizeSlider.es.js";
192
- import "../ReviewableCard/ReviewableCard.es.js";
193
- import "../ReviewableProgressCard/ReviewableProgressCard.styled.es.js";
194
- import "../SearchFilter/filterDates.es.js";
195
167
  import "../SettingsPanel/SettingsPanel.es.js";
196
168
  import "../SettingsPanel/SettingsPanelItemTemplate.es.js";
197
- import "../ShareOptionIcon/ShareOptionIcon.es.js";
198
- import "../SimpleFormDialog/SimpleFormDialog.es.js";
199
- import "../SortingSetting/SortingSetting.styled.es.js";
200
- import "../StyledLink/StyledLink.es.js";
201
- import "../TableGridSwitch/TableGridSwitch.es.js";
202
- import "../Thumbnail/Thumbnail.styled.es.js";
203
- import "../Thumbnail/StackedThumbnails.es.js";
204
- import "../ThumbnailSimple/ThumbnailSimple.es.js";
169
+ import "../AttributeEditor/components/MinMaxField.es.js";
170
+ import "../EnumEditor/EnumEditor.styled.es.js";
171
+ import "../SearchFilter/filterDates.es.js";
172
+ import "../FeaturedVersionOrder/FeaturedVersionOrder.es.js";
173
+ import "../Badge/Badge.es.js";
205
174
  import "../VersionUploader/components/UploadVersionDialog.es.js";
206
175
  import "../VersionUploader/context/VersionUploadContext.es.js";
207
- import "../Watchers/Watchers.es.js";
176
+ import "../Feedback/FeedbackContext.es.js";
177
+ import "../Feedback/SupportBubble.es.js";
178
+ import "../Chips/Chips.es.js";
179
+ import "../LinksManager/LinksManager.styled.es.js";
180
+ import "../../containers/EntityPickerDialog/EntityPickerDialog.es.js";
181
+ import "../StyledLink/StyledLink.es.js";
182
+ import "date-fns";
183
+ import "../ShareOptionIcon/ShareOptionIcon.es.js";
184
+ import "../AccessUser/AccessUser.es.js";
185
+ import "../../../../node_modules/match-sorter/dist/match-sorter.esm.es.js";
186
+ import "../AccessSearchInput/AccessSearchInput.styled.es.js";
187
+ import "../TableGridSwitch/TableGridSwitch.es.js";
188
+ import "../SortingSetting/SortingSetting.styled.es.js";
189
+ import "../EarlyPreview/EarlyPreview.es.js";
190
+ import "../LegacyBadge/LegacyBadge.es.js";
191
+ import "../Menu/Menu.styled.es.js";
192
+ import "../Menu/MenuItem.es.js";
193
+ import "../../containers/Feed/components/ActivityCategorySelect/CategoryTag.es.js";
194
+ import "../../containers/Feed/components/ActivityStatusChange/ActivityStatusChange.styled.es.js";
195
+ import "../../containers/Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.es.js";
196
+ import "../../containers/Feed/components/ActivityVersions/ActivityVersions.styled.es.js";
197
+ import "../../containers/Feed/components/ActivityGroup/ActivityGroup.styled.es.js";
198
+ import "../../containers/Feed/Feed.styled.es.js";
199
+ import "../../containers/Feed/components/ActivityCategorySelect/ActivityCategorySelect.es.js";
200
+ import "../../containers/Feed/components/ActivityCategorySelect/CategoryDropdownItem.es.js";
201
+ import "../../containers/ProjectTreeTable/ProjectTreeTable.es.js";
202
+ import "../../containers/ProjectTreeTable/context/CellEditingContext.es.js";
203
+ import "short-uuid";
204
+ import "@tanstack/react-table";
205
+ import "../../containers/ProjectTreeTable/widgets/CollapsedWidget.es.js";
206
+ import "../../containers/ProjectTreeTable/widgets/DateWidget.es.js";
207
+ import "../../containers/ProjectTreeTable/widgets/EnumWidget.es.js";
208
+ import "../../containers/ProjectTreeTable/widgets/TextWidget.es.js";
209
+ import "../../containers/ProjectTreeTable/widgets/BooleanWidget.es.js";
210
+ import "../../containers/ProjectTreeTable/widgets/CellWidget.es.js";
211
+ import "../../containers/ProjectTreeTable/widgets/EntityNameWidget.es.js";
212
+ import "../../containers/ProjectTreeTable/widgets/GroupHeaderWidget.es.js";
213
+ import "../../containers/ProjectTreeTable/widgets/ThumbnailWidget.es.js";
208
214
  import "../LinksManager/CellEditingDialog.es.js";
209
215
  import "../../containers/ProjectTreeTable/context/DetailsPanelEntityContext.es.js";
210
216
  import "../../containers/ProjectTreeTable/context/SelectedRowsContext.es.js";
@@ -244,7 +250,7 @@ import "../../containers/Views/ViewsMenu/ViewsMenu.es.js";
244
250
  const Fr = [
245
251
  { id: "thumbnail", label: "Upload thumbnail", icon: "add_photo_alternate" },
246
252
  { id: "version", label: "Upload version", icon: "layers" }
247
- ], pm = ({
253
+ ], lm = ({
248
254
  children: _ = [],
249
255
  entityType: F,
250
256
  entities: a = [],
@@ -253,7 +259,7 @@ const Fr = [
253
259
  onVersionCreated: D
254
260
  }) => {
255
261
  var k, L, W;
256
- const { dispatch: G } = cr(), [C, d] = c(!1), [x, u] = c(null), l = T(0), [P, s] = c(null), [J, v] = c(0), [K, f] = c(!1), [w, h] = c(null), i = a.length === 1 ? a[0] : null, S = (k = i == null ? void 0 : i.task) == null ? void 0 : k.id, y = (L = i == null ? void 0 : i.folder) == null ? void 0 : L.id, Q = (W = i == null ? void 0 : i.product) == null ? void 0 : W.id, X = i == null ? void 0 : i.id, j = !!(i && F !== "representation"), { handleFileUpload: Y } = Ir({
262
+ const { dispatch: G } = cr(), [C, d] = c(!1), [x, u] = c(null), l = T(0), [P, s] = c(null), [J, v] = c(0), [K, f] = c(!1), [w, h] = c(null), i = a.length === 1 ? a[0] : null, S = (k = i == null ? void 0 : i.task) == null ? void 0 : k.id, y = (L = i == null ? void 0 : i.folder) == null ? void 0 : L.id, Q = (W = i == null ? void 0 : i.product) == null ? void 0 : W.id, X = i == null ? void 0 : i.id, j = !!(i && F !== "representation"), { handleFileUpload: Y } = xr({
257
263
  projectName: b,
258
264
  versionId: X,
259
265
  taskId: S,
@@ -350,7 +356,7 @@ const Fr = [
350
356
  for (const e of a) {
351
357
  const { id: g, entityType: U, projectName: I } = e;
352
358
  if (!I) throw new Error("Project name is required");
353
- const sr = Ur.post(
359
+ const sr = Ir.post(
354
360
  I && `/api/projects/${I}/${U}s/${g}/thumbnail`,
355
361
  r,
356
362
  {
@@ -404,7 +410,7 @@ const Fr = [
404
410
  versionsInputRef: j ? M : void 0,
405
411
  children: [
406
412
  /* @__PURE__ */ p.jsxs(
407
- xr,
413
+ Pr,
408
414
  {
409
415
  className: lr({ dragging: C }),
410
416
  onDragEnter: mr,
@@ -414,7 +420,7 @@ const Fr = [
414
420
  children: [
415
421
  /* @__PURE__ */ p.jsx(Rr, { children: /* @__PURE__ */ p.jsx("div", { children: _ }) }),
416
422
  C && /* @__PURE__ */ p.jsx(H, { children: z.map((r) => /* @__PURE__ */ p.jsx(
417
- jr,
423
+ Ur,
418
424
  {
419
425
  id: r.id,
420
426
  label: r.label,
@@ -426,9 +432,9 @@ const Fr = [
426
432
  r.id
427
433
  )) }),
428
434
  (P === "thumbnail" || P === "version") && /* @__PURE__ */ p.jsxs(H, { children: [
429
- /* @__PURE__ */ p.jsxs(Pr, { children: [
435
+ /* @__PURE__ */ p.jsxs(wr, { children: [
430
436
  /* @__PURE__ */ p.jsx(
431
- wr,
437
+ yr,
432
438
  {
433
439
  style: {
434
440
  right: `${100 - J}%`
@@ -437,7 +443,7 @@ const Fr = [
437
443
  ),
438
444
  /* @__PURE__ */ p.jsx("span", { className: "label", children: `Uploading ${P}...` })
439
445
  ] }),
440
- /* @__PURE__ */ p.jsx(yr, { icon: "close", variant: "text", onClick: n })
446
+ /* @__PURE__ */ p.jsx(jr, { icon: "close", variant: "text", onClick: n })
441
447
  ] }),
442
448
  /* @__PURE__ */ p.jsx(
443
449
  "input",
@@ -472,6 +478,6 @@ const Fr = [
472
478
  );
473
479
  };
474
480
  export {
475
- pm as EntityPanelUploader
481
+ lm as EntityPanelUploader
476
482
  };
477
483
  //# sourceMappingURL=EntityPanelUploader.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPanelUploader.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","_a","folderId","_b","productId","_c","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPanelUploader.es.js","sources":["../../../../../src/components/EntityPanelUploader/EntityPanelUploader.tsx"],"sourcesContent":["import { ChangeEvent, useRef, useState } from 'react'\nimport clsx from 'clsx'\n\nimport { ThumbnailWrapper } from '@shared/containers'\nimport {\n useCreateVersionMutation,\n useUpdateEntitiesMutation,\n useCreateProductMutation,\n} from '@shared/api'\nimport * as Styled from './EntityPanelUploader.styled'\nimport { ThumbnailUploadProvider } from '../../context/ThumbnailUploaderContext'\nimport Dropzone, { DropzoneType } from './Dropzone'\nimport axios from 'axios'\nimport { toast } from 'react-toastify'\nimport { useReviewablesUpload } from '../ReviewablesList'\nimport { useDetailsPanelContext } from '@shared/context'\nimport EntityPanelUploaderDialog from './EntityPanelUploaderDialog'\nimport {\n sanitizeProductName,\n createProductHelper,\n createVersionHelper,\n getNextVersionNumber,\n handleUploadError,\n} from '@shared/util'\n\ntype Operation = {\n id: string\n projectName: string\n currentAssignees: any[]\n data: { updatedAt: string }\n}\nexport type EntityPanelUploaderProps = {\n entityType: string\n entities: any[]\n projectName: any\n children?: JSX.Element | JSX.Element[]\n onUploaded?: (operations: Operation[]) => void\n resetFileUploadState?: () => void\n onVersionCreated?: (versionId: string) => void\n}\n\ntype UploadType = 'thumbnail' | 'version'\nconst dropZones: (DropzoneType & { id: UploadType })[] = [\n { id: 'thumbnail', label: 'Upload thumbnail', icon: 'add_photo_alternate' },\n { id: 'version', label: 'Upload version', icon: 'layers' },\n]\n\nexport const EntityPanelUploader = ({\n children = [],\n entityType,\n entities = [],\n projectName,\n onUploaded,\n onVersionCreated,\n}: EntityPanelUploaderProps) => {\n const { dispatch } = useDetailsPanelContext()\n // Dragging and dropping state\n const [isDraggingFile, setIsDraggingFile] = useState(false)\n const [draggingZone, setDraggingZone] = useState<UploadType | null>(null)\n const dragCounterRef = useRef(0)\n\n // Uploading state\n const [uploadingType, setUploadingType] = useState<UploadType | null>(null)\n const [progress, setProgress] = useState(0)\n\n // Dialog state for product creation\n const [showProductDialog, setShowProductDialog] = useState(false)\n const [pendingFiles, setPendingFiles] = useState<FileList | null>(null)\n\n // Check if we have exactly one entity selected\n const singleEntity = entities.length === 1 ? entities[0] : null\n // extra all entity IDs for the single version entity\n const taskId: string | undefined = singleEntity?.task?.id\n const folderId: string | undefined = singleEntity?.folder?.id\n const productId: string | undefined = singleEntity?.product?.id\n const versionId: string | undefined = singleEntity?.id\n const canUploadVersions = Boolean(singleEntity && entityType !== 'representation')\n\n // Use the custom hook for reviewable upload logic (only when single version)\n const { handleFileUpload: uploadReviewableFiles } = useReviewablesUpload({\n projectName,\n versionId: versionId,\n taskId: taskId,\n folderId: folderId,\n productId: productId,\n dispatch,\n onUpload: () => {\n setUploadingType(null)\n setProgress(0)\n },\n onProgress: (progress) => {\n setProgress(progress)\n },\n })\n\n // Filter drop zones based on whether we can upload reviewables\n const availableDropZones = dropZones.filter((zone) => {\n if (zone.id === 'version') {\n return canUploadVersions\n }\n return true\n })\n\n const resetState = () => {\n setUploadingType(null)\n setIsDraggingFile(false)\n setDraggingZone(null)\n dragCounterRef.current = 0\n setProgress(0)\n setShowProductDialog(false)\n setPendingFiles(null)\n }\n\n // Handle dialog submission - create product and upload version\n const handleDialogSubmit = async (productName: string) => {\n if (!pendingFiles || !singleEntity) {\n setShowProductDialog(false)\n setPendingFiles(null)\n return\n }\n\n const sanitizedName = sanitizeProductName(productName)\n\n if (!sanitizedName.trim()) {\n toast.error(\n 'Product name must contain valid characters (letters, numbers, underscore, or hyphen)',\n )\n return\n }\n\n try {\n if (!folderId) {\n throw new Error('Folder ID is required to create a product')\n }\n setUploadingType('version')\n\n // Create the product\n const productRes = await createProductHelper(createProduct, projectName, {\n folderId: folderId,\n name: sanitizedName,\n productType: 'review', // default product type for uploaded files\n })\n\n // Close dialog and proceed with version upload\n setShowProductDialog(false)\n await uploadVersionWithProduct(pendingFiles, productRes.id)\n setPendingFiles(null)\n } catch (error: any) {\n handleUploadError(error, 'creating product')\n resetState()\n }\n }\n\n // Handle dialog cancellation\n const handleDialogCancel = () => {\n setShowProductDialog(false)\n setPendingFiles(null)\n resetState()\n }\n\n const [createVersion] = useCreateVersionMutation()\n const [createProduct] = useCreateProductMutation()\n // Handle version/reviewable file upload\n const handleVersionUpload = async (files: FileList) => {\n if (!canUploadVersions || !singleEntity) {\n toast.error('Please select exactly one version to upload reviewables')\n return resetState()\n }\n\n const productId = singleEntity.product?.id\n if (!productId) {\n // Show dialog to create product first\n setPendingFiles(files)\n setShowProductDialog(true)\n return\n }\n\n // If we have a productId, proceed with upload\n await uploadVersionWithProduct(files, productId)\n }\n\n // Helper function to handle the actual version upload\n const uploadVersionWithProduct = async (files: FileList, productId: string) => {\n try {\n const nextVersion = getNextVersionNumber(singleEntity!.product?.latestVersion)\n\n // create a new version\n const versionRes = await createVersionHelper(createVersion, projectName, {\n productId,\n taskId, // previous version could have a taskId or we are uploading on a task\n version: nextVersion,\n })\n\n await uploadReviewableFiles(files, versionRes.id)\n // The hook handles success callbacks, just reset our local state\n resetState()\n\n // update entity panel to focus the new version\n onVersionCreated?.(versionRes.id)\n } catch (error: any) {\n handleUploadError(error, 'uploading version')\n resetState()\n }\n }\n\n // once the file has been uploaded, we need to patch the entities with the new thumbnail\n const handleThumbnailFileUploaded = async (thumbnails: any[] = []) => {\n // always set isDragginle to false\n setIsDraggingFile(false)\n\n // check something was actually uploaded\n if (!entities.length) {\n return\n }\n\n // patching the updatedAt will force a refresh of the thumbnail url\n const newUpdatedAt = new Date().toISOString()\n\n let operations: Operation[] = []\n let versionPatches = []\n\n for (const entity of thumbnails) {\n const entityToPatch = entities.find((e) => e.id === entity.id)\n if (!entityToPatch) continue\n const thumbnailId = entity.thumbnailId\n const currentAssignees = entity.users || []\n\n operations.push({\n id: entityToPatch.id,\n projectName: entityToPatch.projectName,\n data: { updatedAt: newUpdatedAt },\n currentAssignees,\n })\n\n const versionPatch = {\n productId: entityToPatch.productId,\n versionUpdatedAt: newUpdatedAt,\n versionThumbnailId: thumbnailId,\n }\n\n versionPatches.push(versionPatch)\n }\n\n try {\n await updateEntities({ operations, entityType })\n onUploaded && onUploaded(operations)\n } catch (error) {\n console.error('Error uploading thumbnail:', error)\n }\n }\n\n const handleUploadThumbnail = async (file: File) => {\n if (!file) return resetState()\n\n try {\n // check file is an image\n if (!file.type.includes('image')) {\n throw new Error('File is not an image')\n }\n\n let promises = []\n for (const entity of entities) {\n const { id, entityType, projectName } = entity\n\n if (!projectName) throw new Error('Project name is required')\n\n const promise = axios.post(\n projectName && `/api/projects/${projectName}/${entityType}s/${id}/thumbnail`,\n file,\n {\n onUploadProgress: (e) => {\n setProgress(Math.round((100 * e.loaded) / (e.total || file.size)))\n },\n headers: {\n 'Content-Type': file.type,\n },\n },\n )\n\n promises.push(promise)\n }\n\n const res = await Promise.all(promises)\n\n const updatedEntities = res.map((res, i) => ({\n thumbnailId: res.data.id as string,\n id: entities[i].id,\n }))\n\n handleThumbnailFileUploaded(updatedEntities)\n resetState()\n } catch (error: any) {\n console.error(error)\n toast.error(error.message)\n resetState()\n }\n }\n\n const [updateEntities] = useUpdateEntitiesMutation()\n\n const handleDragEnter = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current++\n if (dragCounterRef.current === 1) {\n setIsDraggingFile(true)\n }\n }\n\n const handleDragLeave = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current--\n if (dragCounterRef.current === 0) {\n setIsDraggingFile(false)\n setDraggingZone(null)\n }\n }\n\n const handleDragOver = (e: React.DragEvent) => {\n e.preventDefault()\n }\n\n const handleDrop = (e: React.DragEvent) => {\n e.preventDefault()\n dragCounterRef.current = 0\n setIsDraggingFile(false)\n setDraggingZone(null)\n\n if (!e.dataTransfer.files || e.dataTransfer.files.length === 0) {\n return\n }\n\n if (draggingZone === 'thumbnail') {\n setUploadingType('thumbnail')\n const file = e.dataTransfer.files[0]\n // try to upload the thumbnail\n handleUploadThumbnail(file)\n }\n\n if (draggingZone === 'version') {\n setUploadingType('version')\n const files = e.dataTransfer.files\n // try to upload the reviewables using the hook\n handleVersionUpload(files)\n }\n }\n\n // upload thumbnail from input (right click on thumbnail)\n const handleInputUpload = async (event: ChangeEvent<HTMLInputElement>, type: UploadType) => {\n const files = event.target.files\n if (!files || files.length === 0) {\n return\n }\n\n if (type === 'version') {\n setUploadingType('version')\n handleVersionUpload(files)\n }\n if (type === 'thumbnail') {\n setUploadingType('thumbnail')\n handleUploadThumbnail(files[0])\n }\n }\n\n const thumbnailInputRef = useRef<HTMLInputElement>(null)\n const versionsInputRef = useRef<HTMLInputElement>(null)\n\n return (\n <ThumbnailUploadProvider\n entities={entities}\n handleThumbnailUpload={handleThumbnailFileUploaded}\n thumbnailInputRef={thumbnailInputRef}\n versionsInputRef={canUploadVersions ? versionsInputRef : undefined}\n >\n <Styled.DragAndDropWrapper\n className={clsx({ dragging: isDraggingFile })}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <ThumbnailWrapper>\n <div>{children}</div>\n </ThumbnailWrapper>\n {isDraggingFile && (\n <Styled.DropZones>\n {availableDropZones.map((zone) => (\n <Dropzone\n key={zone.id}\n id={zone.id}\n label={zone.label}\n icon={zone.icon}\n isActive={draggingZone === zone.id}\n onDragOver={() => setDraggingZone(zone.id)}\n onDragLeave={() => setDraggingZone(null)}\n />\n ))}\n </Styled.DropZones>\n )}\n {(uploadingType === 'thumbnail' || uploadingType === 'version') && (\n <Styled.DropZones>\n <Styled.UploadingProgress>\n <Styled.Progress\n style={{\n right: `${100 - progress}%`,\n }}\n />\n <span className=\"label\">{`Uploading ${uploadingType}...`}</span>\n </Styled.UploadingProgress>\n <Styled.CancelButton icon={'close'} variant=\"text\" onClick={resetState} />\n </Styled.DropZones>\n )}\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'thumbnail')}\n ref={thumbnailInputRef}\n />\n <input\n type=\"file\"\n onChange={(e) => handleInputUpload(e, 'version')}\n ref={versionsInputRef}\n />\n </Styled.DragAndDropWrapper>\n\n {/* Product creation dialog */}\n <EntityPanelUploaderDialog\n isOpen={showProductDialog}\n files={pendingFiles}\n onSubmit={handleDialogSubmit}\n onCancel={handleDialogCancel}\n />\n </ThumbnailUploadProvider>\n )\n}\n"],"names":["dropZones","EntityPanelUploader","children","entityType","entities","projectName","onUploaded","onVersionCreated","dispatch","useDetailsPanelContext","isDraggingFile","setIsDraggingFile","useState","draggingZone","setDraggingZone","dragCounterRef","useRef","uploadingType","setUploadingType","progress","setProgress","showProductDialog","setShowProductDialog","pendingFiles","setPendingFiles","singleEntity","taskId","_a","folderId","_b","productId","_c","versionId","canUploadVersions","uploadReviewableFiles","useReviewablesUpload","availableDropZones","zone","resetState","handleDialogSubmit","productName","sanitizedName","sanitizeProductName","toast","productRes","createProductHelper","createProduct","uploadVersionWithProduct","error","handleUploadError","handleDialogCancel","createVersion","useCreateVersionMutation","useCreateProductMutation","handleVersionUpload","files","nextVersion","getNextVersionNumber","versionRes","createVersionHelper","handleThumbnailFileUploaded","thumbnails","newUpdatedAt","operations","entity","entityToPatch","e","currentAssignees","updateEntities","handleUploadThumbnail","file","promises","id","promise","axios","updatedEntities","res","i","useUpdateEntitiesMutation","handleDragEnter","handleDragLeave","handleDragOver","handleDrop","handleInputUpload","event","type","thumbnailInputRef","versionsInputRef","jsxs","ThumbnailUploadProvider","Styled.DragAndDropWrapper","clsx","jsx","ThumbnailWrapper","Styled.DropZones","Dropzone","Styled.UploadingProgress","Styled.Progress","Styled.CancelButton","EntityPanelUploaderDialog"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../../../_virtual/jsx-runtime.cjs.js"),c=require("react"),o=require("./EntityPath.styled.cjs.js"),_=require("clsx"),y=require("./SegmentProvider.cjs.js"),U=require("@ynput/ayon-react-components"),L=()=>t.jsxRuntimeExports.jsx("span",{className:"slash",children:"/"}),$=["more","versions"],D=a=>{var u;const s=a.target,n=((u=s.closest(".dropdown"))==null?void 0:u.id)||"";return[s,n]},z=({projectName:a,hideProjectName:s,segments:n,versions:u=[],isLoading:m,entityType:j,scope:f})=>{const l=c.useRef(null),[r,d]=c.useState(null),[i,b]=c.useState(null),[A,M]=c.useState(!1),E=c.useRef(null);c.useLayoutEffect(()=>{b(null),M(!0)},[n]),c.useLayoutEffect(()=>{var O;if(!l.current){M(!1);return}const e=l.current,h=e.clientWidth,x=F(e);if(!x)return;const p=e.children;let q=h;const P=e.childElementCount;let S=P;for(;q>x&&S>0;)S-=2,q=B(p,S,P);let w=((O=Array.from(p).slice(0,S).filter(T=>T.nodeType===Node.ELEMENT_NODE&&T.className.includes("full")))==null?void 0:O.length)||2;w=Math.max(w,1),b(w),M(!1)},[l.current,A]),c.useLayoutEffect(()=>{if(!l.current||!E.current||!i)return;const e=l.current,h=F(e)??1/0,x=e.clientWidth-h;if(x<=0)return;const p=`${E.current.clientWidth-x}px`;E.current.style.width=p},[i]);const I=i&&n.length>i?n.slice(-i):n,W=i&&n.length>i?n.slice(0,-i):[];s&&W.unshift({type:"project",label:a,id:a});let g,v=I;j==="version"&&n.length>0&&(g=n[n.length-1],v=I.slice(0,-1));const C=e=>{const[,h]=D(e);h&&!r&&d(h)},N=()=>d(null),k=e=>{const[h,x]=D(e);if(!$.includes(x))return;!!h.closest("li")?d(null):r!==x&&d(x)},R={scope:f,projectName:a};return t.jsxRuntimeExports.jsxs(o.Path,{className:_({loading:m}),id:"entity-path",ref:l,children:[!s&&t.jsxRuntimeExports.jsx(o.Segment,{children:a}),!!W.length&&t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[!s&&t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsxs(o.Segment,{className:"dropdown more",id:"more",onMouseEnter:C,onMouseLeave:N,onClick:k,children:["...",r==="more"&&t.jsxRuntimeExports.jsx(o.MoreModal,{children:t.jsxRuntimeExports.jsx(o.MoreList,{children:W.map(e=>c.createElement(y,{...R,segment:e,key:e.id},t.jsxRuntimeExports.jsx(o.MoreItem,{children:e.label})))})})]})]}),v.map(e=>t.jsxRuntimeExports.jsxs(c.Fragment,{children:[t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsx(y,{...R,segment:e,className:"full",children:t.jsxRuntimeExports.jsx(o.Segment,{children:t.jsxRuntimeExports.jsx("span",{className:"label",children:e.label})})})]},e.id)),g&&t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsxs(o.SegmentWrapper,{className:"full dropdown",id:"versions",onMouseEnter:C,onMouseLeave:N,onClick:k,children:[t.jsxRuntimeExports.jsx(y,{...R,segment:g,isOpen:r==="versions",children:t.jsxRuntimeExports.jsxs(o.Segment,{children:[t.jsxRuntimeExports.jsx(o.FinalSegmentLabel,{ref:E,className:"label",children:g.label}),t.jsxRuntimeExports.jsx(U.Icon,{icon:"expand_more"})]})}),r==="versions"&&t.jsxRuntimeExports.jsx(o.MoreModal,{children:t.jsxRuntimeExports.jsx(o.MoreList,{children:u.map(e=>c.createElement(y,{...R,segment:e,key:e.id},t.jsxRuntimeExports.jsx(o.MoreItem,{children:e.label})))})})]})]})]})},F=a=>{const s=a.parentElement;if(!s)return;const n=getComputedStyle(s),u=parseInt(n.paddingLeft)||0,m=parseInt(n.paddingRight)||0,j=parseInt(n.gap)||0,f=s.clientWidth-u-m,l=Array.from(s.children).filter(d=>d.id!=="entity-path"),r=Array.from(l).reduce((d,i)=>d+i.clientWidth,0);return f-r-j*(l.length-1)},B=(a,s,n)=>{var l;const u=n-s;let m=0;for(let r=0;r<n-u;r++){const d=r>1?r+u:r,i=(l=a[d])==null?void 0:l.clientWidth;isNaN(i)||(m+=i)}return m+(4*s-1)+40};exports.EntityPath=z;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../../../_virtual/jsx-runtime.cjs.js"),c=require("react"),i=require("./EntityPath.styled.cjs.js"),_=require("clsx"),R=require("./SegmentProvider.cjs.js"),U=require("@ynput/ayon-react-components"),L=()=>t.jsxRuntimeExports.jsx("span",{className:"slash",children:"/"}),$=["more","versions"],D=a=>{var x;const s=a.target,n=((x=s.closest(".dropdown"))==null?void 0:x.id)||"";return[s,n]},z=({projectName:a,hideProjectName:s,segments:n,versions:x=[],isLoading:m,entityType:p,scope:j})=>{const l=c.useRef(null),[r,d]=c.useState(null),[o,b]=c.useState(null),[A,S]=c.useState(!1),y=c.useRef(null);c.useLayoutEffect(()=>{b(null),S(!0)},[n]),c.useLayoutEffect(()=>{var O;if(!l.current){S(!1);return}const e=l.current,h=e.clientWidth,u=F(e);if(!u)return;const W=e.children;let q=h;const P=e.childElementCount;let g=P;for(;q>u&&g>0;)g-=2,q=B(W,g,P);let w=((O=Array.from(W).slice(0,g).filter(T=>T.nodeType===Node.ELEMENT_NODE&&T.className.includes("full")))==null?void 0:O.length)||2;w=Math.max(w,1),b(w),S(!1)},[l.current,A]),c.useLayoutEffect(()=>{if(!l.current||!y.current||!o)return;const e=l.current,h=F(e)??1/0,u=e.clientWidth-h;u<=0||y.current.clientWidth-u},[o]);const I=o&&n.length>o?n.slice(-o):n,M=o&&n.length>o?n.slice(0,-o):[];s&&M.unshift({type:"project",label:a,id:a});let f,v=I;p==="version"&&n.length>0&&(f=n[n.length-1],v=I.slice(0,-1));const C=e=>{const[,h]=D(e);h&&!r&&d(h)},N=()=>d(null),k=e=>{const[h,u]=D(e);if(!$.includes(u))return;!!h.closest("li")?d(null):r!==u&&d(u)},E={scope:j,projectName:a};return t.jsxRuntimeExports.jsxs(i.Path,{className:_({loading:m}),id:"entity-path",ref:l,children:[!s&&t.jsxRuntimeExports.jsx(i.Segment,{children:a}),!!M.length&&t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[!s&&t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsxs(i.Segment,{className:"dropdown more",id:"more",onMouseEnter:C,onMouseLeave:N,onClick:k,children:["...",r==="more"&&t.jsxRuntimeExports.jsx(i.MoreModal,{children:t.jsxRuntimeExports.jsx(i.MoreList,{children:M.map(e=>c.createElement(R,{...E,segment:e,key:e.id},t.jsxRuntimeExports.jsx(i.MoreItem,{children:e.label})))})})]})]}),v.map(e=>t.jsxRuntimeExports.jsxs(c.Fragment,{children:[t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsx(R,{...E,segment:e,className:"full",children:t.jsxRuntimeExports.jsx(i.Segment,{children:t.jsxRuntimeExports.jsx("span",{className:"label",children:e.label})})})]},e.id)),f&&t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[t.jsxRuntimeExports.jsx(L,{}),t.jsxRuntimeExports.jsxs(i.SegmentWrapper,{className:"full dropdown",id:"versions",onMouseEnter:C,onMouseLeave:N,onClick:k,children:[t.jsxRuntimeExports.jsx(R,{...E,segment:f,isOpen:r==="versions",children:t.jsxRuntimeExports.jsxs(i.Segment,{children:[t.jsxRuntimeExports.jsx(i.FinalSegmentLabel,{ref:y,className:"label",children:f.label}),t.jsxRuntimeExports.jsx(U.Icon,{icon:"expand_more"})]})}),r==="versions"&&t.jsxRuntimeExports.jsx(i.MoreModal,{children:t.jsxRuntimeExports.jsx(i.MoreList,{children:x.map(e=>c.createElement(R,{...E,segment:e,key:e.id},t.jsxRuntimeExports.jsx(i.MoreItem,{children:e.label})))})})]})]})]})},F=a=>{const s=a.parentElement;if(!s)return;const n=getComputedStyle(s),x=parseInt(n.paddingLeft)||0,m=parseInt(n.paddingRight)||0,p=parseInt(n.gap)||0,j=s.clientWidth-x-m,l=Array.from(s.children).filter(d=>d.id!=="entity-path"),r=Array.from(l).reduce((d,o)=>d+o.clientWidth,0);return j-r-p*(l.length-1)},B=(a,s,n)=>{var l;const x=n-s;let m=0;for(let r=0;r<n-x;r++){const d=r>1?r+x:r,o=(l=a[d])==null?void 0:l.clientWidth;isNaN(o)||(m+=o)}return m+(4*s-1)+40};exports.EntityPath=z;
2
2
  //# sourceMappingURL=EntityPath.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPath.cjs.js","sources":["../../../../../src/components/EntityPath/EntityPath.tsx"],"sourcesContent":["import { FC, Fragment, MouseEvent, useLayoutEffect, useRef, useState } from 'react'\nimport * as Styled from './EntityPath.styled'\nimport clsx from 'clsx'\nimport SegmentProvider from './SegmentProvider'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { DetailsPanelEntityType } from '@shared/api'\n\nconst Slash = () => <span className=\"slash\">/</span>\n\nexport type PathSegment = {\n type: DetailsPanelEntityType | 'product' | 'project'\n label: string\n id: string\n}\n\nconst dropdownStates = ['more', 'versions']\ntype DropdownState = (typeof dropdownStates)[number]\n\ntype DropdownMouseEvent = MouseEvent<HTMLSpanElement>\nconst getDropdownElements = (e: DropdownMouseEvent): [HTMLElement, string] => {\n const target = e.target as HTMLElement\n const dropdownId = target.closest('.dropdown')?.id || ''\n return [target, dropdownId]\n}\n\nexport interface EntityPathProps {\n projectName: string\n hideProjectName: boolean\n segments: PathSegment[]\n isLoading: boolean\n entityType: string\n versions: PathSegment[]\n scope: string\n}\n\nexport const EntityPath: FC<EntityPathProps> = ({\n projectName,\n hideProjectName,\n segments,\n versions = [],\n isLoading,\n entityType,\n scope,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [dropdownOpen, setDropdownOpen] = useState<null | DropdownState>(null)\n // defaults to whole path\n const [maxSegments, setMaxSegments] = useState<null | number>(null)\n const [calcMaxWidth, setCalcMaxWidth] = useState(false)\n const finalSegmentRef = useRef<HTMLSpanElement>(null)\n\n useLayoutEffect(() => {\n setMaxSegments(null)\n setCalcMaxWidth(true)\n }, [segments])\n\n useLayoutEffect(() => {\n if (!containerRef.current) {\n setCalcMaxWidth(false)\n return\n }\n // find max width the path can be\n const container = containerRef.current\n const pathWidth = container.clientWidth\n const maxWidth = getPathMaxWidth(container)\n\n if (!maxWidth) return\n\n // we need to reduce the number of segments shown\n // but maybe even then it is still longer than the max width\n // so we need to reduce the number of segments until the total width is less than the max width\n const children = container.children\n let totalWidth = pathWidth\n // number of segments to keep\n const fullCount = container.childElementCount\n let segmentsCount = fullCount\n // while loop that removes segments until the total width is less than the max width\n while (totalWidth > maxWidth && segmentsCount > 0) {\n // remove 2 segments at a time (because of slashes)\n segmentsCount -= 2\n totalWidth = totalUpSegmentsWidth(children, segmentsCount, fullCount)\n }\n\n // count number of \"full\" segments left\n // if something goes wrong, removing 1 (2) is probably enough\n let newMaxSegments =\n Array.from(children)\n .slice(0, segmentsCount)\n .filter(\n (segment) => segment.nodeType === Node.ELEMENT_NODE && segment.className.includes('full'),\n )?.length || 2\n\n // cap at 1\n newMaxSegments = Math.max(newMaxSegments, 1)\n\n setMaxSegments(newMaxSegments)\n setCalcMaxWidth(false)\n }, [containerRef.current, calcMaxWidth])\n\n // Ensure that, even if the collapsed segments still aren't\n // enough to fit the path within the available space,\n // we fit everything in by truncating the last segment's label.\n // This segment is typically the product + version name,\n // which is typically also shown in much larger font below,\n // so there's no reason to always show it in full.\n useLayoutEffect(() => {\n if (!containerRef.current || !finalSegmentRef.current || !maxSegments) return\n const container = containerRef.current\n\n // The amount of truncation is exactly the difference between the container's width\n // and the maximum available width.\n const maxWidth = getPathMaxWidth(container) ?? Infinity\n const diff = container.clientWidth - maxWidth\n if (diff <= 0) return\n\n // Reduce the segment's width by the difference\n const newWidth = `${finalSegmentRef.current.clientWidth - diff}px`\n finalSegmentRef.current.style.width = newWidth\n }, [maxSegments])\n\n // Check if there are fewer than or equal to maxSegments segments\n const segmentsToShow =\n maxSegments && segments.length > maxSegments ? segments.slice(-maxSegments) : segments\n const hiddenSegments =\n maxSegments && segments.length > maxSegments ? segments.slice(0, -maxSegments) : []\n\n // if there is no project name, add to hidden segments\n if (hideProjectName)\n hiddenSegments.unshift({ type: 'project', label: projectName, id: projectName })\n\n // if the entityType is a version, separate the version\n let versionSegment\n let finalSegmentsToShow = segmentsToShow\n\n if (entityType === 'version' && segments.length > 0) {\n versionSegment = segments[segments.length - 1]\n finalSegmentsToShow = segmentsToShow.slice(0, -1)\n }\n\n const handleMouseEnter = (e: DropdownMouseEvent) => {\n const [, id] = getDropdownElements(e)\n if (id && !dropdownOpen) setDropdownOpen(id)\n }\n const handleMouseLeave = () => setDropdownOpen(null)\n\n const handleDropdownClick = (e: DropdownMouseEvent) => {\n const [target, id] = getDropdownElements(e)\n\n if (!dropdownStates.includes(id)) return\n const isListItem = !!target.closest('li')\n\n if (isListItem) setDropdownOpen(null)\n else if (dropdownOpen !== id) setDropdownOpen(id)\n }\n\n const segmentProps = { scope, projectName }\n\n return (\n <Styled.Path className={clsx({ loading: isLoading })} id=\"entity-path\" ref={containerRef}>\n {!hideProjectName && <Styled.Segment>{projectName}</Styled.Segment>}\n\n {!!hiddenSegments.length && (\n <>\n {!hideProjectName && <Slash />}\n <Styled.Segment\n className=\"dropdown more\"\n id=\"more\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleDropdownClick}\n >\n ...\n {dropdownOpen === 'more' && (\n <Styled.MoreModal>\n <Styled.MoreList>\n {hiddenSegments.map((segment) => (\n <SegmentProvider {...segmentProps} segment={segment} key={segment.id}>\n <Styled.MoreItem>{segment.label}</Styled.MoreItem>\n </SegmentProvider>\n ))}\n </Styled.MoreList>\n </Styled.MoreModal>\n )}\n </Styled.Segment>\n </>\n )}\n\n {finalSegmentsToShow.map((segment) => (\n <Fragment key={segment.id}>\n <Slash />\n\n <SegmentProvider {...segmentProps} segment={segment} className=\"full\">\n <Styled.Segment>\n <span className=\"label\">{segment.label}</span>\n </Styled.Segment>\n </SegmentProvider>\n </Fragment>\n ))}\n\n {versionSegment && (\n <>\n <Slash />\n <Styled.SegmentWrapper\n className=\"full dropdown\"\n id=\"versions\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleDropdownClick}\n >\n <SegmentProvider\n {...segmentProps}\n segment={versionSegment}\n isOpen={dropdownOpen === 'versions'}\n >\n <Styled.Segment>\n <Styled.FinalSegmentLabel ref={finalSegmentRef} className=\"label\">\n {versionSegment.label}\n </Styled.FinalSegmentLabel>\n <Icon icon=\"expand_more\" />\n </Styled.Segment>\n </SegmentProvider>\n {dropdownOpen === 'versions' && (\n <Styled.MoreModal>\n <Styled.MoreList>\n {versions.map((version) => (\n <SegmentProvider {...segmentProps} segment={version} key={version.id}>\n <Styled.MoreItem>{version.label}</Styled.MoreItem>\n </SegmentProvider>\n ))}\n </Styled.MoreList>\n </Styled.MoreModal>\n )}\n </Styled.SegmentWrapper>\n </>\n )}\n </Styled.Path>\n )\n}\n\nconst getPathMaxWidth = (pathEl: HTMLDivElement) => {\n const toolbar = pathEl.parentElement\n if (!toolbar) return\n // get width of toolbar without padding\n const toolbarStyle = getComputedStyle(toolbar)\n const paddingLeft = parseInt(toolbarStyle.paddingLeft) || 0\n const paddingRight = parseInt(toolbarStyle.paddingRight) || 0\n const gap = parseInt(toolbarStyle.gap) || 0\n const toolbarWidth = toolbar.clientWidth - paddingLeft - paddingRight\n\n // get child elements that are not path\n const children = Array.from(toolbar.children).filter((child) => child.id !== 'entity-path')\n // find total width of children including the gap between them\n const childrenWidth = Array.from(children).reduce(\n (acc, child) => acc + (child as HTMLElement).clientWidth,\n 0,\n )\n\n return toolbarWidth - childrenWidth - gap * (children.length - 1)\n}\n\nconst totalUpSegmentsWidth = (children: HTMLCollection, count: number, full: number) => {\n const skip = full - count\n let total = 0\n for (let i = 0; i < full - skip; i++) {\n const index = i > 1 ? i + skip : i\n const width = (children[index] as Element)?.clientWidth\n if (isNaN(width)) continue\n total += width\n }\n const gap = 4\n const moreWidth = 40\n return total + (gap * count - 1) + moreWidth\n}\n"],"names":["Slash","jsx","dropdownStates","getDropdownElements","e","target","dropdownId","_a","EntityPath","projectName","hideProjectName","segments","versions","isLoading","entityType","scope","containerRef","useRef","dropdownOpen","setDropdownOpen","useState","maxSegments","setMaxSegments","calcMaxWidth","setCalcMaxWidth","finalSegmentRef","useLayoutEffect","container","pathWidth","maxWidth","getPathMaxWidth","children","totalWidth","fullCount","segmentsCount","totalUpSegmentsWidth","newMaxSegments","segment","diff","newWidth","segmentsToShow","hiddenSegments","versionSegment","finalSegmentsToShow","handleMouseEnter","id","handleMouseLeave","handleDropdownClick","segmentProps","jsxs","Styled.Path","clsx","Styled.Segment","Fragment","Styled.MoreModal","Styled.MoreList","createElement","SegmentProvider","Styled.MoreItem","Styled.SegmentWrapper","Styled.FinalSegmentLabel","Icon","version","pathEl","toolbar","toolbarStyle","paddingLeft","paddingRight","gap","toolbarWidth","child","childrenWidth","acc","count","full","skip","total","i","index","width"],"mappings":"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"}
1
+ {"version":3,"file":"EntityPath.cjs.js","sources":["../../../../../src/components/EntityPath/EntityPath.tsx"],"sourcesContent":["import { FC, Fragment, MouseEvent, useLayoutEffect, useRef, useState } from 'react'\nimport * as Styled from './EntityPath.styled'\nimport clsx from 'clsx'\nimport SegmentProvider from './SegmentProvider'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { DetailsPanelEntityType } from '@shared/api'\n\nconst Slash = () => <span className=\"slash\">/</span>\n\nexport type PathSegment = {\n type: DetailsPanelEntityType | 'product' | 'project'\n label: string\n id: string\n}\n\nconst dropdownStates = ['more', 'versions']\ntype DropdownState = (typeof dropdownStates)[number]\n\ntype DropdownMouseEvent = MouseEvent<HTMLSpanElement>\nconst getDropdownElements = (e: DropdownMouseEvent): [HTMLElement, string] => {\n const target = e.target as HTMLElement\n const dropdownId = target.closest('.dropdown')?.id || ''\n return [target, dropdownId]\n}\n\nexport interface EntityPathProps {\n projectName: string\n hideProjectName: boolean\n segments: PathSegment[]\n isLoading: boolean\n entityType: string\n versions: PathSegment[]\n scope: string\n}\n\nexport const EntityPath: FC<EntityPathProps> = ({\n projectName,\n hideProjectName,\n segments,\n versions = [],\n isLoading,\n entityType,\n scope,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [dropdownOpen, setDropdownOpen] = useState<null | DropdownState>(null)\n // defaults to whole path\n const [maxSegments, setMaxSegments] = useState<null | number>(null)\n const [calcMaxWidth, setCalcMaxWidth] = useState(false)\n const finalSegmentRef = useRef<HTMLSpanElement>(null)\n\n useLayoutEffect(() => {\n setMaxSegments(null)\n setCalcMaxWidth(true)\n }, [segments])\n\n useLayoutEffect(() => {\n if (!containerRef.current) {\n setCalcMaxWidth(false)\n return\n }\n // find max width the path can be\n const container = containerRef.current\n const pathWidth = container.clientWidth\n const maxWidth = getPathMaxWidth(container)\n\n if (!maxWidth) return\n\n // we need to reduce the number of segments shown\n // but maybe even then it is still longer than the max width\n // so we need to reduce the number of segments until the total width is less than the max width\n const children = container.children\n let totalWidth = pathWidth\n // number of segments to keep\n const fullCount = container.childElementCount\n let segmentsCount = fullCount\n // while loop that removes segments until the total width is less than the max width\n while (totalWidth > maxWidth && segmentsCount > 0) {\n // remove 2 segments at a time (because of slashes)\n segmentsCount -= 2\n totalWidth = totalUpSegmentsWidth(children, segmentsCount, fullCount)\n }\n\n // count number of \"full\" segments left\n // if something goes wrong, removing 1 (2) is probably enough\n let newMaxSegments =\n Array.from(children)\n .slice(0, segmentsCount)\n .filter(\n (segment) => segment.nodeType === Node.ELEMENT_NODE && segment.className.includes('full'),\n )?.length || 2\n\n // cap at 1\n newMaxSegments = Math.max(newMaxSegments, 1)\n\n setMaxSegments(newMaxSegments)\n setCalcMaxWidth(false)\n }, [containerRef.current, calcMaxWidth])\n\n // Ensure that, even if the collapsed segments still aren't\n // enough to fit the path within the available space,\n // we fit everything in by truncating the last segment's label.\n // This segment is typically the product + version name,\n // which is typically also shown in much larger font below,\n // so there's no reason to always show it in full.\n useLayoutEffect(() => {\n if (!containerRef.current || !finalSegmentRef.current || !maxSegments) return\n const container = containerRef.current\n\n // The amount of truncation is exactly the difference between the container's width\n // and the maximum available width.\n const maxWidth = getPathMaxWidth(container) ?? Infinity\n const diff = container.clientWidth - maxWidth\n if (diff <= 0) return\n\n // Reduce the segment's width by the difference\n const newWidth = `${finalSegmentRef.current.clientWidth - diff}px`\n // finalSegmentRef.current.style.width = newWidth\n }, [maxSegments])\n\n // Check if there are fewer than or equal to maxSegments segments\n const segmentsToShow =\n maxSegments && segments.length > maxSegments ? segments.slice(-maxSegments) : segments\n const hiddenSegments =\n maxSegments && segments.length > maxSegments ? segments.slice(0, -maxSegments) : []\n\n // if there is no project name, add to hidden segments\n if (hideProjectName)\n hiddenSegments.unshift({ type: 'project', label: projectName, id: projectName })\n\n // if the entityType is a version, separate the version\n let versionSegment\n let finalSegmentsToShow = segmentsToShow\n\n if (entityType === 'version' && segments.length > 0) {\n versionSegment = segments[segments.length - 1]\n finalSegmentsToShow = segmentsToShow.slice(0, -1)\n }\n\n const handleMouseEnter = (e: DropdownMouseEvent) => {\n const [, id] = getDropdownElements(e)\n if (id && !dropdownOpen) setDropdownOpen(id)\n }\n const handleMouseLeave = () => setDropdownOpen(null)\n\n const handleDropdownClick = (e: DropdownMouseEvent) => {\n const [target, id] = getDropdownElements(e)\n\n if (!dropdownStates.includes(id)) return\n const isListItem = !!target.closest('li')\n\n if (isListItem) setDropdownOpen(null)\n else if (dropdownOpen !== id) setDropdownOpen(id)\n }\n\n const segmentProps = { scope, projectName }\n\n return (\n <Styled.Path className={clsx({ loading: isLoading })} id=\"entity-path\" ref={containerRef}>\n {!hideProjectName && <Styled.Segment>{projectName}</Styled.Segment>}\n\n {!!hiddenSegments.length && (\n <>\n {!hideProjectName && <Slash />}\n <Styled.Segment\n className=\"dropdown more\"\n id=\"more\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleDropdownClick}\n >\n ...\n {dropdownOpen === 'more' && (\n <Styled.MoreModal>\n <Styled.MoreList>\n {hiddenSegments.map((segment) => (\n <SegmentProvider {...segmentProps} segment={segment} key={segment.id}>\n <Styled.MoreItem>{segment.label}</Styled.MoreItem>\n </SegmentProvider>\n ))}\n </Styled.MoreList>\n </Styled.MoreModal>\n )}\n </Styled.Segment>\n </>\n )}\n\n {finalSegmentsToShow.map((segment) => (\n <Fragment key={segment.id}>\n <Slash />\n\n <SegmentProvider {...segmentProps} segment={segment} className=\"full\">\n <Styled.Segment>\n <span className=\"label\">{segment.label}</span>\n </Styled.Segment>\n </SegmentProvider>\n </Fragment>\n ))}\n\n {versionSegment && (\n <>\n <Slash />\n <Styled.SegmentWrapper\n className=\"full dropdown\"\n id=\"versions\"\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleDropdownClick}\n >\n <SegmentProvider\n {...segmentProps}\n segment={versionSegment}\n isOpen={dropdownOpen === 'versions'}\n >\n <Styled.Segment>\n <Styled.FinalSegmentLabel ref={finalSegmentRef} className=\"label\">\n {versionSegment.label}\n </Styled.FinalSegmentLabel>\n <Icon icon=\"expand_more\" />\n </Styled.Segment>\n </SegmentProvider>\n {dropdownOpen === 'versions' && (\n <Styled.MoreModal>\n <Styled.MoreList>\n {versions.map((version) => (\n <SegmentProvider {...segmentProps} segment={version} key={version.id}>\n <Styled.MoreItem>{version.label}</Styled.MoreItem>\n </SegmentProvider>\n ))}\n </Styled.MoreList>\n </Styled.MoreModal>\n )}\n </Styled.SegmentWrapper>\n </>\n )}\n </Styled.Path>\n )\n}\n\nconst getPathMaxWidth = (pathEl: HTMLDivElement) => {\n const toolbar = pathEl.parentElement\n if (!toolbar) return\n // get width of toolbar without padding\n const toolbarStyle = getComputedStyle(toolbar)\n const paddingLeft = parseInt(toolbarStyle.paddingLeft) || 0\n const paddingRight = parseInt(toolbarStyle.paddingRight) || 0\n const gap = parseInt(toolbarStyle.gap) || 0\n const toolbarWidth = toolbar.clientWidth - paddingLeft - paddingRight\n\n // get child elements that are not path\n const children = Array.from(toolbar.children).filter((child) => child.id !== 'entity-path')\n // find total width of children including the gap between them\n const childrenWidth = Array.from(children).reduce(\n (acc, child) => acc + (child as HTMLElement).clientWidth,\n 0,\n )\n\n return toolbarWidth - childrenWidth - gap * (children.length - 1)\n}\n\nconst totalUpSegmentsWidth = (children: HTMLCollection, count: number, full: number) => {\n const skip = full - count\n let total = 0\n for (let i = 0; i < full - skip; i++) {\n const index = i > 1 ? i + skip : i\n const width = (children[index] as Element)?.clientWidth\n if (isNaN(width)) continue\n total += width\n }\n const gap = 4\n const moreWidth = 40\n return total + (gap * count - 1) + moreWidth\n}\n"],"names":["Slash","jsx","dropdownStates","getDropdownElements","e","target","dropdownId","_a","EntityPath","projectName","hideProjectName","segments","versions","isLoading","entityType","scope","containerRef","useRef","dropdownOpen","setDropdownOpen","useState","maxSegments","setMaxSegments","calcMaxWidth","setCalcMaxWidth","finalSegmentRef","useLayoutEffect","container","pathWidth","maxWidth","getPathMaxWidth","children","totalWidth","fullCount","segmentsCount","totalUpSegmentsWidth","newMaxSegments","segment","diff","segmentsToShow","hiddenSegments","versionSegment","finalSegmentsToShow","handleMouseEnter","id","handleMouseLeave","handleDropdownClick","segmentProps","jsxs","Styled.Path","clsx","Styled.Segment","Fragment","Styled.MoreModal","Styled.MoreList","createElement","SegmentProvider","Styled.MoreItem","Styled.SegmentWrapper","Styled.FinalSegmentLabel","Icon","version","pathEl","toolbar","toolbarStyle","paddingLeft","paddingRight","gap","toolbarWidth","child","childrenWidth","acc","count","full","skip","total","i","index","width"],"mappings":"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"}